依存関係ジョブ#

依存関係ジョブとは#

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は、先行ジョブが正常終了した場合のみ後行ジョブを実行することを指定しています。他には下記の指定が可能です。

afterok

先行ジョブが正常終了(終了ステータス0で終了)した場合のみ実行

after

先行ジョブが開始もしくはキャンセルされたら実行

afterany

指定した先行ジョブのいずれかが終了したら実行

aftercorr

先行ジョブも後行ジョブもアレイジョブの場合、先行ジョブの1タスクが正常終了したとき、後行ジョブの同じタスクIDのジョブを実行

afternotok

先行ジョブが正常終了しなかったときに実行

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.shDependency、依存するジョブがあるため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.shR状態に遷移しています。