HOME > システム > SR16000 > SR16000 利用の手引き > 第7章 プログラムの実行
第7章 プログラムの実行
7.1 概要
SR16000 ではすべてのプログラムがバッチジョブシステムを通じて実行されます。SR16000 では 日立製作所製のバッチジョブシステム (NQS互換機能、以降 NQS) が導入されており、旧システムの HA8000 と同じジョブスクリプトが使用できます (FX10 スーパーコンピュータシステムとは互換性はありませんのでご注意ください)。
ジョブを実行するにはまず実行するプログラムとは別に「ジョブスクリプト」と呼ばれるファイルを作成します。ジョブスクリプトには希望する実行時間に見合ったキューの名前、使用 CPU 数などを記述した上で、実際にプログラムを実行するためのコマンドを書きます。このファイルが完成したら qsub コマンドでこのジョブを NQS に登録し実行を待ちます。ジョブに資源が割り当てられると、ジョブスクリプトに記述したコマンドが自動的に実行されます。実行結果はファイルに残りますのでジョブ投入後はログインしている必要はありません。ジョブの状態は qstat コマンドで確認できるほか、開始と終了はログインノードにメールで通知されます。「第3章 ログインノードの使用」で説明した転送設定を行うかジョブスクリプトに送信先を設定することで、普段使用しているメールアドレスにジョブ完了通知を送信することもできます。

7.2 パイプキューとバッチキュー
バッチジョブシステムの待ち行列には「バッチキュー」と呼ばれるジョブの待ち行列と「パイプキュー」と呼ばれる他のキューにジョブを転送するためのキューがあります。バッチキューは要求されたプロセッサや計算時間別に準備されており、実行待ちのジョブはバッチキューに入ります。一方パイプキューはジョブの振り分けを行うキューであり、パイプキューに投入されたジョブは必要としている資源量に応じて適切なバッチキューに自動的に転送されます。
SR16000 では図7-2-1のようにパイプキューとバッチキューが準備されています(実際に利用できるキューは申込コースによって異なります)。点線で囲まれたバッチキューは必ずパイプキュー経由で使用する必要があり、直接キューを指定してジョブを投入することはできません。debug キューは直接バッチキュー名を指定してジョブを投入します。
※ 利用できるコースの詳細は、「ジョブクラス制限値」をご覧ください。

7.3 ジョブスクリプトの書き方

7.3.1 主要オプション
次に挙げる2項目はすべてのジョブスクリプトに必要です。

q および N オプションの値を用いてバッチジョブキューが決定されます。Nの値はバッチキューのノード数に一致している必要はありません。例えば 3ノードを指定した場合は 4ノード用のバッチキューに投入されます。
次の 2 項目は必須ではありませんが、指定することをお勧めします。

J オプションには T に続けてノードあたりのプロセス数を書きます。省略時は 1 となります。T が必要なのは SR11000 以前のシステムとの互換性のためです。SR11000 で使用している S および SS の指定も可能ですが、新たに作成するスクリプトでは使用しないでください。lT(小文字エル、大文字ティー)オプションはジョブ実行の最大時間であり、この時間を超えるとジョブは強制終了となります。lT オプションを省略すると各パイプキューの最大時間とみなされますが、効率的な資源利用のために指定をお願いします。
7.3.2 その他のオプション
必須オプションの他に以下のオプションが使用できます。

7.3.3 シェルスクリプト部分
シェルスクリプト部分には先頭行で指定したシェルが解釈できるシェルスクリプトを記述します。シェルスクリプトは常にホームディレクトリをカレントディレクトリとして開始します(ジョブスクリプトのあるディレクトリではありません)。したがって通常はプログラムが存在するディレクトリへの移動が必要です。また、このスクリプトは端末から切り離された状態で実行されるのでエディタなどの対話的なプログラムの起動を含めることはできません。7.4 バッチジョブシステムの使い方
7.4.1 ジョブの投入
ジョブの実行のためにはスクリプトファイルをバッチシステムに投入 (サブミット) します。コマンドは qsub を使用します。以下の例で job.sh は既存のスクリプトファイル名とします。[p11000@yayoi-1 p11000]% qsub job.sh Request "Request ID" submitted to queue: P004.NQS はジョブを識別するリクエストID (リクエスト番号 + ジョブ投入ホスト名) 付加し、バッチシステムにジョブを送り込みます。利用者一人が複数のジョブを投入することもできますが数に制限があります。
7.4.2 ジョブの確認
ジョブの状態(待機中や実行中)は qstat コマンドで知ることができます。[p11000@yayoi-1 p11000]% qstat 2012/07/23 (Mon) 11:54:00: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 93h 6m 0s) REQUEST NAME OWNER QUEUE PRI NODE E-TIME MEM STATE 39550.yayoi STDIN p11000 P004 63 2 600s 170GB QUEUEDリクエストID、スクリプト名、ログイン名が表示されている行が先程投入したジョブの状況です。ジョブはバッチキュー P004で待機(QUEUED)していることがわかります。出力の2行目には次の計画停止までの時間も表示されています。ジョブの予想実行時間が計画停止までの時間より長い場合は、計画停止からの復旧後までスケジューリングされません。ジョブが実行を開始すると qstat の結果は実行中(RUNNING)になります。待機中、または実行中のジョブがない時は No requests. となります。
[p11000@yayoi-1 p11000]% qstat 2012/07/24 (Tue) 7:44:15: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 73h 15m 45s) REQUEST NAME OWNER QUEUE PRI NODE E-TIME MEM STATE No requests.
7.4.3 キューの状態確認
キューごと (システム全体) の実行ジョブ数、待ちジョブ数は以下のように qstat -b で確認できます。[p11000@yayoi-1 p11000]% qstat -b 2012/07/23 (Mon) 11:54:00: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 93h 6m 0s) QUEUE NAME STATUS TOTAL RUNNING RUNLIMIT QUEUED HELD OTHER P001 AVAILBL 9 2 2 7 0 0 P004 AVAILBL 17 4 4 13 0 0 P008 AVAILBL 23 2 2 21 0 0 debug AVAILBL 1 0 4 1 0 0RUNNING は実行中のジョブ数を示しています。例では、P001 では 2 本実行されていることが確認できます。RUNLIMIT は各キューで同時に実行できるジョブの数、QUEUED が実行 (順番) 待ちのジョブの数を表示しています (RUNLIMIT はシステム全体の計算資源の空き状況などにより適宜変更しています。そのため、RUNLIMIT 数よりも RUNNING 数が多くなっている場合もあります)。
7.4.4 ジョブのキャンセルまたは強制終了
投入したジョブをキャンセルしたい時、または実行中のジョブを強制終了したい時は qdel コマンドを使用します。[p11000@yayoi-1 p11000]% qdel 39550.yayoi
7.4.5 ジョブ実行履歴の確認
投入したジョブの実行履歴等を確認するには、qlogf コマンドを使用します。オプションを指定せずに実行すると、当日のジョブ実行履歴が表示されます (オプションには、検索範囲指定やリクエスト ID 指定ができます)。[p11000@yayoi-1 p11000]% qlogf -h Usage: qlogf [-days] [-d date] [request-id ...] date must be 'dd/mm/yy' form. [p11000@yayoi-1 p11000] qlogf DATE TIME REQUEST NAME OWNER QUEUE EVENT 2012/07/23 11:16:38 39550.yayoi STDIN p11000 P004 QUEUED(priority:0) 2012/07/23 11:16:38 39550.yayoi STDIN p11000 P004 QUEUED(priority:63) 2012/07/23 11:58:13 39550.yayoi STDIN p11000 P004 STARTED 2012/07/23 11:58:19 39550.yayoi STDIN p11000 P004 ENDED(exit:0000) : :
7.4.6 ジョブチェイン機能
ジョブの実行終了時の状態により後続ジョブの実行または抑止を行うことができます。チェイン機能によるバッチジョブは、qstat コマンドの STATE 項目が CHAIN 表示となります。ただし、チェインジョブとして登録されたバッチジョブが実行条件を満たさなくなった場合は、STATE 項目が、NEVERRUN 表示に変更し、バッチジョブ実行は行われません。- 指定方法 : qsub -c[EXIT コード] リクエスト ID
チェインジョブが設定された場合の表示例
[p11000@yayoi-1 p11000]% qstat 2012/07/20 (Fri) 10:50:33: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 166h 9m 27s) REQUEST NAME OWNER QUEUE PRI NODE E-TIME MEM STATE 18619.yayoi STDIN p11000 P001 63 1 240m 170GB QUEUED 18620.yayoi STDIN p11000 P001 62 1 240m 170GB CHAIN
チェインジョブで実行条件が満たさなくなった場合の表示例
[p11000@yayoi-1 p11000]% qstat 2012/07/20 (Fri) 10:51:33: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 166h 8m 27s) REQUEST NAME OWNER QUEUE PRI NODE E-TIME MEM STATE 18620.yayoi STDIN p11000 P001 62 1 240m 170GB NEVERRUN
7.4.7 ジョブの終了通知と結果確認
ジョブが終了するとジョブスクリプトの -mu オプションで指定したメールアドレス(省略時は SR16000 のアカウント)にメールが届きます。ジョブの出力は次のファイルに保存されています。- 標準出力: スクリプトファイル名.oN (Nはジョブ番号)
- 標準エラー出力: スクリプトファイル名.eN (Nはジョブ番号)
7.4.8 システム障害時の動作
システム障害でジョブが途中で異常終了した場合などには、終了したジョブの名前とジョブ番号を個別にご連絡しています。お手数ですが再度実行をお願いいたします。ファイル状態などが再実行可能な状態かどうかセンターでは判断できませんので、自動的に再実行を行うことはいたしません。7.5 ジョブスケジューリングのルール
7.5.1 フェアシェアスケジューリングの詳細
フェアシェアスケジューリングシステムは、4 月から現在までに実行済みのバッチジョブにて使用した CPU の使用量 (以下、 CPU 使用量とする) と投入したジョブに設定した実行予定時間より算出される CPU の予定使用量 (以下、CPU 予定使用量とする) から各ジョブの実行優先度を決定しています。具体的なスケジューリングルールは次のようになっています。- 各キュー毎に実行待ちのジョブにそれぞれ優先順位 (63 が最優先で 0まで) を付け、順位の高いジョブから順に実行します。
- 順位付けの要素は、4 月から現在までに実行したバッチジョブの CPU 使用量を利用者毎に積算した値と、投入したバッチジョブで要求している CPU 予定使用量を合計したものであり、その値が少ないジョブから順位付けを行います。CPU 使用量とは「ジョブの実行時間×使用したノード数」です。
- いずれかのジョブが終了する毎に当該利用者の CPU 使用量を積算し、順位の付け替えを行います。大規模計算を行う利用者が不利とならないよう一定時間毎に CPU 使用量に一定の逓減率を掛け逓減する仕組みとしています。
- キューに並んでいる際の待ち時間は順位付けの要素に含みません。
- ジョブの実行は 2 つまで同時に可能です。ただし同一のキューでは 1 つとなります。
-
ジョブの優先順位は qstat コマンドの "PRI" の値で確認が可能です。
以下の例では、PRI が 50 となっているので、優先順位が 14 番目となっている (14 番目に実行 (13 本のジョブが実行待ち) される) ことがわかります。
[p11000@yayoi-1 p11000]% qstat 2012/07/24 (Tue) 15:48:42: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 65h 11m 18s) REQUEST NAME OWNER QUEUE PRI NODE E-TIME MEM STATE 76541.yayoi job.001 p11000 P004 50 4 180m 170GB QUEUED 76542.yayoi job.002 p11000 P004 49 4 180m 170GB QUEUED 76543.yayoi job.003 p11000 P004 48 4 180m 170GB QUEUED
ジョブ実行開始までに係る時間の概算 (計算方法) は以下の通りです。
ジョブ実行待ちの状態を確認する。以下の例の場合、PRI が 63 となっているので、ジョブ実行優先順位は最上位となっていることが確認できます。
[p11000@yayoi-1 p11000]% qstat 2012/07/23 (Mon) 11:54:00: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 93h 6m 0s) REQUEST NAME OWNER QUEUE PRI NODE E-TIME MEM STATE 18619.yayoi STDIN p11000 P001 63 1 240m 170GB QUEUEDキューの同時実行数を確認する。以下の例の場合、投入したジョブクラスの同時実行数 (RUNLIMIT) は 1 本となっていることが確認できます (システム資源の空き状況などにより、適宜同時実行数 (RUNLIMIT) を変更しています。そのため同時実行数 (RUNLIMIT) よりも多く実行中 (RUNNING) のジョブがある場合があります)。
[p11000@yayoi-1 p11000]% qstat -b 2012/07/23 (Mon) 11:54:00: REQUESTS on SR16000 NQS schedule stop time : 2012/07/27 (Fri) 9:00:00 (Remain: 93h 6m 0s) QUEUE NAME STATUS TOTAL RUNNING RUNLIMIT QUEUED HELD OTHER P001 AVAILBL 9 2 1 7 0 0 P004 AVAILBL 17 4 4 13 0 0 P008 AVAILBL 23 2 2 21 0 0 debug AVAILBL 1 0 4 1 0 0このような状態で実行待ちとなっている場合には、現在実行しているジョブが終了しだいジョブ実行が開始されることになります。例では P001 キューにジョブ実行待ちとなっていますので、最大 8 時間 (P001 キューの最大経過時間制限値) の実行待ち時間が発生することになります。