依存関係ジョブ¶
依存関係ジョブとは¶
Slurmでは、ジョブとジョブの間に依存関係を指定することができます。例えば、ジョブ2が、ジョブ1の出力ファイルを必要とする場合、ジョブ2を、ジョブ1の終了後に実行するようSlurmに指定することができます。このような別のジョブへの依存関係を持ったジョブが、依存関係ジョブ(Dependent job) です。
依存関係を指定することで、一連の解析処理(パイプライン)の実行を自動化することができます。
依存関係ジョブの作成方法¶
依存関係ジョブのスクリプト記入例
job01.sh(先行ジョブ)¶
#!/bin/sh
OUT_FILE=job01_output.txt
sleep 120
echo –n $(expr 100 + 200) > $OUT_FILE
job02.sh(後行ジョブ)¶
#!/bin/sh
IN_FILE=job01_output.txt
OUT_FILE=job02_output.txt
echo $(expr $(cat $IN_FILE) + 300) > $OUT_FILE
依存関係ジョブの利用方法¶
1. ジョブの投入¶
$ sbatch job01.sh
Submitted batch job 302
$ sbatch -d afterok:302 job02.sh
Submitted batch job 303
-d
オプションで先行ジョブのジョブIDを指定することで、依存関係を指定します。ジョブIDに続けて他のジョブIDをコロン(:
)区切りで指定することで、複数のジョブを指定することもできます。
afterok
は、先行ジョブが正常終了した場合のみ後行ジョブを実行することを指定しています。他には下記の指定が可能です。
2. 投入後のジョブの状況確認¶
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
303 mjobs job02.sh user PD 0:00 1 (Dependency)
302 mjobs job01.sh user R 0:16 1 c3x001
job01.sh
は実行中ですが、job02.sh
はDependency
、依存するジョブがあるためPD状態になっています。
3. 先行ジョブ終了後のジョブの状況確認¶
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
303 mjobs job02.sh user R 0:00 1 c3x001
job01.sh
が終了して、job02.sh
がR状態に遷移しています。