5.3. ステップジョブ

ステップジョブは、ジョブに実行順序関係や依存関係を持たせるバッチジョブです。

  • ステップジョブを構成する複数のジョブをサブジョブと呼びます。

  • サブジョブを投入順に、1サブジョブずつ実行します。

  • 先に実行したサブジョブの終了コードを基に、次のサブジョブを実行するかどうかを制御することができます。

  • サブジョブは会話型ジョブとの組み合わせはできません。

  • サブジョブに対する資源割り当ては、サブジョブごとに通常ジョブと同様に行われます。各サブジョブごとに異なる資源(計算ノード数、メモリー量等)を指定することができます。

ステップジョブの動作イメージを次に示します。

../_images/07020000_1.png

5.3.1. ジョブ投入

ステップジョブは、pjsub--stepオプションを指定して投入します。
その後、サブジョブを1つずつ指定して投入します。

[ジョブIDを指定する方法]

ステップジョブのジョブIDを指定してサブジョブを投入します。 この場合、1番目のサブジョブと2番目以降のサブジョブでは、投入時のオプションに違いがあります。

  1. ステップジョブの開始(--stepを指定)

[_LNlogin]$ pjsub --step [--sparam "sn=stepno"] スクリプトファイル
  1. 2つ目以降のサブジョブの実行(--step--sparam  "jid=jobid"を指定)

[_LNlogin]$ pjsub --step --sparam  "jid=jobid [,sn=stepno]" スクリプトファイル

例)ステップジョブで、2つのサブジョブを投入する場合

[_LNlogin]$ pjsub --step sub_job0.sh
[INFO.] PJM 0000 pjsub Job 64856_0 submitted.
[_LNlogin]$ pjsub --step --sparam "jid=64856" sub_job1.sh
[INFO.] PJM 0000 pjsub Job 64856_1 submitted.
[_LNlogin]$ pjsub --step --sparam "jid=64856" sub_job2.sh
[INFO.] PJM 0000 pjsub Job 64856_2 submitted.

注意

  • jidの指定があるものを、2つ目以降のサブジョブとして処理します。jidの指定がない場合は、新しいステップジョブの開始として処理されますので、ご注意ください。

  • 2つ目以降のサブジョブは、先に投入したサブジョブが一つでも残っていれば投入可能です。jidで指定したステップジョブが既に終了している場合は、次のようなメッセージが表示され、ジョブの投入はできません。

$ pjsub --step --sparam "jid=64856" sub_job3.sh
[ERR.] PJM 0012 pjsub Job 64856 does not exist.

[ジョブ名を指定する方法]

各サブジョブのジョブ名を同じにし、ジョブ名を指定してサブジョブを投入します。 この方法では、1番目と2番目以降のサブジョブの投入方法は基本的に同じにできます。

  1. ステップジョブの開始(--step--sparam "jnam="を指定)

[_LNlogin]$ pjsub --step --sparam "jnam=jobname[,sn=stepno]" スクリプトファイル
  1. 2つ目以降のサブジョブの実行(--step--sparam "jnam="を指定)

[_LNlogin]$ pjsub --step --sparam  "jnam=jobname[,sn=stepno]" スクリプトファイル

例)ステップジョブで、2つのサブジョブを投入する場合

[_LNlogin]$ pjsub --step --sparam "jnam=mystepjob" sub_job0.sh
[INFO] PJM 0000 pjsub Job 11716781_0 submitted.
[_LNlogin]$ pjsub --step --sparam "jnam=mystepjob" sub_job1.sh
[INFO] PJM 0000 pjsub Job 11716781_1 submitted.
[_LNlogin]$ pjsub --step --sparam "jnam=mystepjob" sub_job2.sh
[INFO] PJM 0000 pjsub Job 11716781_2 submitted.

注意

  • 該当するジョブ名のステップジョブが存在しない場合は、新規ステップジョブが生成されます。

  • --sparam "jnam="オプションを指定した場合、-Nまたは--nameオプションの有無に関係なく、--sparam "jnam="オプションで指定したジョブ名がサブジョブに設定されます。

  • 同じジョブ名の異なるステップジョブが複数存在する場合があります。このとき、--sparam "jnam="オプションでジョブ名を指定してサブジョブを投入すると、最後に生成されたステップジョブを指定したものとみなされます。

5.3.2. ステップジョブオプション

ステップジョブのオプションは以下のとおりです。

オプション

説明

--step

必須オプションです。
ステップジョブであることを示します。

--sparam "jid=jobid"

2つ目以降のサブジョブを投入するときに指定します。
jobidの部分に、既存のステップジョブのジョブIDを指定します。
jidを省略した場合は、新規ステップジョブとして投入されます。
--sparam "jnam=jobname"
各サブジョブのジョブ名を同一名にして、ステップジョブを投入する場合に使用します。
引数jidと引数jnamが同時に指定された場合、エラー(指定されたオプションの組合せが不正)となります。

--sparam "sn=stepno"

サブジョブのステップ番号を指定します。
指定したステップ番号が投入したサブジョブのステップ番号となります。
ステップ番号は、投入済みの最大ステップ番号より大きい値を指定します。
ステップ番号は、0~65535まで指定できます。
本指定を省略した場合は、最初のサブジョブには0を設定し、2本目以降のサブジョブには投入済みのサブジョブの最大ステップ番号+1が設定されます。

5.3.3. サブジョブID

ステップジョブのサブジョブには、ジョブIDとステップ番号を組み合わせた「サブジョブID」が付けられます。
ステップ番号は、1ジョブ(サブジョブを合わせた1つのステップジョブ)内での通し番号 (0 から 65535) が設定されます。

[ステップジョブのサブジョブIDの例]

ジョブID

ステップ番号

サブジョブID

12345

1

12345_1

12345

2

12345_2

注釈

ジョブIDが「12345」、ステップ番号が「1」である場合のサブジョブIDは「12345_1」になります。

5.3.4. ジョブ実行結果の参照

ジョブが終了すると、サブジョブ投入時のカレントディレクトリにジョブ実行結果がファイル出力されます。
サブジョブごとに投入時のディレクトリを変えた場合は、それぞれのディレクトリに出力されます。
ジョブ実行結果のファイル名は以下のとおりです。

[サブジョブごとに出力されるファイル]

形式

説明

ジョブ名.サブジョブID.out

サブジョブが標準出力に書き出したデータです。

ジョブ名.サブジョブID.err

サブジョブが標準エラー出力に書き出したデータです。

ジョブ名.サブジョブID.stats

サブジョブの統計情報が出力されたファイルです。

[ステップジョブごとに出力されるファイル]

形式

説明

1つめのジョブ名.ジョブID.stats

ステップジョブの統計情報が出力されたファイルです。

注意

  • ジョブ名は、pjsubコマンドで指定したジョブスクリプトのファイル名になります。

  • ジョブ名の先頭が半角数字の場合、出力ファイル名の先頭に文字 "J" が付加されます。

  • 出力ファイル名で、ジョブ名の部分(先頭に付加される文字"J"も含む)は、63 文字までです。

  • ジョブスクリプトではなく、標準入力からジョブを投入した場合は、ジョブ名の部分は "STDIN" となります。

  • ステップジョブに対し、標準出力や標準エラー出力を同じファイル名に指定した場合、各サブジョブの出力が混在します。

例)ステップジョブの実行結果ファイル名

sub_job1.sh.70990.stats      # ステップジョブの統計情報ファイル
sub_job1.sh.70990_0.err      # サブジョブ0の標準エラー出力の結果ファイル
sub_job1.sh.70990_0.stats    # サブジョブ0の統計情報の出力ファイル
sub_job1.sh.70990_0.out      # サブジョブ0の標準出力の結果ファイル
sub_job2.sh.70990_1.err      # サブジョブ1の標準エラー出力の結果ファイル
sub_job2.sh.70990_1.stats    # サブジョブ1の統計情報の出力ファイル
sub_job2.sh.70990_1.out      # サブジョブ1の標準出力の結果ファイル
sub_job3.sh.70990_2.err      # サブジョブ2の標準エラー出力の結果ファイル
sub_job3.sh.70990_2.stats    # サブジョブ2の統計情報の出力ファイル
sub_job3.sh.70990_2.out      # サブジョブ2の標準出力の結果ファイル

注意

これらのファイルは、出力先の指定がない場合、pjsubを実行した時のカレントディレクトリに出力されます。サブジョブごとにpjsubした際のカレントディレクトリが異なる場合は、異なるディレクトリに出力されますので注意ください。

5.3.5. 依存関係のあるジョブ投入例

ステップジョブを利用して、先に実行されるジョブの復帰値を参照して後続のジョブを実行するか否かを制御することができます。

2番目以降のサブジョブ投入時は、先行するサブジョブの結果に応じてどういう動作をするか、--sparam sd=オプションで指定します。 これをステップジョブの「依存関係式」と呼びます。依存関係式については、マニュアル「ジョブ運用ソフトウェア エンドユーザ向けガイド」の「2.3.4.2 ステップジョブの投入方法」を参照してください。

[依存関係式の書式]

--sparam "sd=form[:[deletetype][:stepno[:stepno[...]]]]"

以下に例を示します。

  1. 復帰値の設定

ステップジョブが参照する復帰値は、ジョブスクリプトの復帰値になります。スクリプトの復帰値を指定するようにジョブスクリプトを記述ください。

mpiexec ./sample_mpi
exit $?   #復帰値

注釈

./sample_mpiの復帰値をexitを使ってスクリプトの復帰値に設定する。

  1. ジョブの投入例

この例は、sub_job2.shの復帰値が0でない場合に、sub_job3.shを実行しないようにするものです。

[_LNlogin]$ pjsub --step sub_job1.sh
[INFO] PJM 0000 pjsub Job 71080_0 submitted.
[_LNlogin]$ pjsub --step --sparam "jid=71080" sub_job2.sh
[INFO] PJM 0000 pjsub Job 71080_1 submitted.
[_LNlogin]$ pjsub --step --sparam "jid=71080,sd=ec!=0:one:1" sub_job3.sh
[INFO] PJM 0000 pjsub Job 71080_2 submitted.

注釈

上記例の "sd=" の後に指定している値について

ec :依存するサブジョブのジョブスクリプトの終了ステータス

one:このサブジョブだけ削除し、このサブジョブの結果に依存する後続のサブジョブは削除されません。

1 :サブジョブNo.1の終了ステータスを参照します。