は私がsbatch job_array_script.sh [args]
で実行すること(以下ジョブ配列のスクリプトで、SLURMでのジョブ配列を実行しています:slurmジョブ(srunで始まる)が完全に終了するまでスクリプトを保持する方法は?
#!/bin/bash
#SBATCH ... other options ...
#SBATCH --array=0-1000%200
srun ./job_slurm_script.py $1 $2 $3 $4
echo 'open' > status_file.txt
を説明するために、私はjob_slurm_script.py
は、配列ジョブとして実行する200のタスクの最大で1000倍にしたいですすべての場合は、status_file.txt
に「open」と書いておきます。これは実際には10,000以上のジョブがあり、これがクラスタのMaxSubmissionLimitの上にあるため、分割する必要があります。 (1000要素のジョブ配列の)より小さな塊(前のものが終了したときのみ)を順番に実行します。
しかし、これを動作させるには、echo文はジョブ配列全体が終了した時点でのみ起動することができます(この外では、status_file.txt
をチェックするループがありますので、開いた')。
これまで、ジョブアレイ全体が終了するまでsrun
がスクリプトを保持していると考えました。しかし、時にはsrun
が "返され"、スクリプトはジョブが終了する前にecho文に行きます。したがって、後続のすべてのジョブは投入制限を超えているので、クラスタから跳ね返ります。
したがって、ジョブアレイ全体が終了するまでsrun
を「ホールドアップ」するにはどうすればよいですか?
ジョブ配列の各タスクは独立しているため、srunは影響を受けません。すべての配列ステップが完了したら、依存関係を使用してジョブを開始することができます –
このコンテキストではどのような依存関係がありますか? –
依存関係は、依存するジョブが終了するまでジョブが開始されないようにします。 –