1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MPI.jlつかったコードをバッチジョブで計算すると並列性能が出ない

Posted at

状況

MPI.jlを使って,MPIで並列化したJuliaのコード。普通は以下のように実行すると思います。

mpiexec -n 10 julia main.jl

main.jlがMPI.jl使って並列化したコード。今回はMPIにIntel MPIを使いました。

これが17秒程度で実行できたとします。これをOpenPBSでジョブスケジューリングしている環境で計算を流します。お金がないので,管理ノードと計算ノード兼用のマシンで実行しました。

バッチ処理用のシェルは以下の感じ

exec.sh
#!/bin/bash
#PBS -q default
#PBS -l nodes=1:ncpus=10
#PBS -j oe             

cd $PBS_O_WORKDIR

# Intel MPIのためのパス設定
source /opt/intel/oneapi/setvars.sh

mpirun -n 10 julia main.jl

OpenPBSなので,以下のコマンドでジョブ投入。

qsub exec.sh

普通,コンソールからの実行時間と大差ない時間で終了することを期待しますが, 実行時間がなんと43秒。 倍以上増加。計算規模を大きくすると,10倍程度の差が出ました。

現状の対策

Intel MPIの設定が悪いのかとか環境変数が読み込めてないのかとか,OpenPBSのバージョンが悪いのかとか色々考えました。

ちなみにOSはRockylinux 8.5で微妙に新しいので,Torqueが入らなかったりして,OpenPBSを入れました。OpenPBSの入れ直しも何度かやりましたが,改善せず。

今日たどりついた対策は以下。シェルファイルを以下のようにします。

execR.sh
#!/bin/bash
#PBS -q default

#PBS -j oe             

cd $PBS_O_WORKDIR

# Intel MPIのためのパス設定
source /opt/intel/oneapi/setvars.sh

mpirun -n 10 julia main.jl

nodes=1:ncpus=10の設定を削除しました。こうするとコンソールから直接実行したときと同程度の時間で実行できます。なぜこれでいいのかはよくわかってません。

qstatで状況確認すると,コア数指定してないので,1コアだけ使用しているように見えますが,psコマンドでみると,10並列で計算していることが確認できました。

問題は,ジョブスケジューリング上は1コアしか使ってないようになっていますが,実際は10コアつかってるので,他のジョブが入ってくると,性能が落ちる可能性が高いことです。1つのコアで複数ジョブの計算を行う可能性が高いため。

1ノード専有して,使用するコア数を指定しない計算とかだと問題ないですが,研究室の共有クラスタマシンとかだと問題になりそう。

シェルファイルで専有するコア数を決めると,MPI.jlの処理とかちあって,性能が落ちているのだろうと想像しますが,よくわかりません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?