SLURMを使用するクラスタでParticle Swarm Optimizationの問題を実行しようとしていますが、最適化アルゴリズムはシングルコアのmatlabプロセスで管理しています。各パーティクルの評価には、結果が収束するまで2つのPythonプログラムを交互に繰り返す複数のMPI呼び出しが必要です。各MPIコールには最大20分かかります。SLURMと限られたリソースと並行してMPI呼び出しのキューを実行する
各MPI呼び出しを別々のSLURMジョブとして最初に提出しましたが、その結果待ち行列の時間が各ジョブをローカルでローカルに実行するよりも遅くなりました。私は現在、利用可能なリソースを利用するためにMPIタスクを継続的に実行するNノードジョブを提出する方法を見つけようとしています。 MATLABプロセスは、このジョブをテキストファイルフラグで管理します。ここで
は、私は小さい規模でやろうとしています何を説明するのに役立つかもしれない擬似コードbashのファイルです:
#!/bin/bash
#SBATCH -t 4:00:00 # walltime
#SBATCH -N 2 # number of nodes in this job
#SBATCH -n 32 # total number of processor cores in this job
# Set required modules
module purge
module load intel/16.0
module load gcc/6.3.0
# Job working directory
echo Working directory is $SLURM_SUBMIT_DIR
cd $SLURM_SUBMIT_DIR
echo Running on host `hostname`
echo Time is `date`
echo Directory is `pwd`
# Run Command
while <"KeepRunning.txt” == 1>
do
for i in {0..40}
do
if <“RunJob_i.txt” == 1>
then
mpirun -np 8 -rr -f ${PBS_NODEFILE} <job_i> &
fi
done
done
wait
このアプローチ「(単にクラッシュ)仕事が、私はドンはありません理由を知ることはできません(おそらくリソースの過剰使用ですか?)。私の同僚の中にはparallel
とsrun
を使用するよう提案されていますが、これまでに私はMPI関数をバッチで呼び出す必要があると私には分かります。これは、実行のかなりの部分がすぐに終了または失敗するため、リソースの膨大な無駄になります(これは予想される動作です)。この問題の具体的な例は、5つの8コアジョブのバッチを開始し、それらのうち4つが直ちにクラッシュすることです。現在32コアは何もしていないが、5回目の仕事が終わるまで20分待つ。
最適化には5000mpi以上のコールが必要になる可能性があるため、効率を上げると絶対ウォールタイムに大きな違いが生じます。 SLIMの大きな仕事でMPIコールをどのように流すことができるのか、誰にもアドバイスがありますか?私は本当に助けていただければ幸いです。
特定のMPI実行が数秒未満でない限り、オプションはSLURM予約を作成し、この予約内でジョブを送信することです(予約がアクティブになると、ジョブはキュー内で) –
@GillesGouaillardetそれは私が気づいていなかったオプションです、ありがとう!私はクラスターでそれを行う許可を得ていないかもしれないように見えますが、私は明日それを整理しようとします。代わりに、私はgnu semもうまくいくかもしれないと思います。まだhpcに新しい。 – user8176985