ジョブの利用法¶
最終更新日:2025年8月27日
玄界のノードグループ A、Bおよび Cの各計算ノードは、ログインノードと違い、多数の利用者からの利用要求に対して資源を割り当てるジョブ管理システムによって管理されています。そのため、これらのノードでプログラムを実行するには、最初にジョブという形で利用要求を投入する必要があります。ここでは、このジョブによる各ノードグループの利用方法を紹介します。
ジョブの種類¶
玄界では、以下に示す二つのジョブを実行できます。
|
ジョブ形式 |
用途 |
|---|---|
|
バッチジョブ |
予め処理手順を記述したスクリプトによりジョブを投入する、バッチ形式の実行。対話的な利用はできない。 |
|
対話型ジョブ |
計算ノードにログインして利用する、対話的な実行。主に短時間のデバッグやプリポスト処理での利用を想定している。 |
さらにバッチジョブには以下の三種類の形態があります。
|
バッチジョブ種別 |
用途 |
|---|---|
|
通常ジョブ |
一つのスクリプトを投入し、一つのジョブを実行する。 |
|
ステップジョブ |
複数のスクリプトを一つのまとまりとして投入し、指定した順序で実行する。 |
|
バルクジョブ |
一つのスクリプトを投入し、複数の通常ジョブを生成して実行する。 |
バッチジョブの流れ¶
バッチジョブによりプログラムを実行するためには一般に以下のような手続きを踏みます。
- ジョブ操作コマンド
- ジョブ処理用スクリプトの作成
- ジョブの投入(
pjsubコマンド) - (必要に応じて) ジョブ処理状況の確認(
pjstatコマンド) - (必要に応じて) 実行中、もしくは、実行待ちのジョブ削除(
pjdelコマンド) - 結果の確認
- ノードの使用量の確認
ジョブ操作コマンド¶
ジョブ操作に使用するコマンドは以下の通りです。
|
機能 |
コマンド |
|---|---|
|
ジョブ投入 |
|
|
ジョブ状態参照 |
|
|
ジョブ削除 |
|
|
ノードグループの混雑状況確認 |
|
ジョブ投入 (pjsubコマンド)¶
ジョブは形式に応じて以下のいずれかで投入することができます。なお、いずれの形式も、大容量ストレージ (/home) または高速ストレージ (/fast) の中で投入してください。
- バッチジョブ形式
$ pjsub オプション ジョブスクリプトファイル
- 対話型ジョブ形式
$ pjsub --interact オプション
バッチ処理用スクリプトの作成¶
基本オプション¶
|
オプション名 |
説明 |
|---|---|
|
-r |
予約ポータルで指定したIDを指定 |
|
-o filename |
標準出力をファイルfilenameに出力 |
|
-e filename |
標準エラー出力をファイルfilenameに出力 |
|
-j |
ジョブの標準エラー出力と標準出力を同じファイルに出力する |
|
–interact |
対話型ジョブとして実行する |
|
–restart |
障害発生時にジョブを再実行する |
|
–norestart |
障害発生時にジョブを再実行しない(デフォルト) |
|
–mail-list mailaddress |
メールの送信先を指定 |
|
-m |
メール通知を指定 |
|
-m b |
バッチジョブ開始時にメール通知 |
|
-m e |
バッチジョブ終了時にメール通知 |
|
-m r |
ジョブ再実行時にメール通知 |
|
-X |
ジョブ投入時の環境変数をジョブ実行環境に継承 |
バッチジョブ資源オプション¶
バッチジョブ処理に必要な資源に関する主要オプションは以下の通りです。 -Lに続けて利用資源または上限値を指定します。
|
オプション名 |
説明 |
|---|---|
|
-L rscgrp=name |
ジョブを投入するリソースグループ(キュー)名(詳細は、リソースグループ) |
|
-L node |
ノード数の指定(1ノード以上の資源を使用する場合に必須) |
|
-L vnode-core |
コア数の指定(ノードグループAで1ノード未満の資源を利用する場合に必須) |
|
-L gpu |
GPU数の指定(ノードグループB,Cで1ノード未満の資源を利用する場合に必須) |
|
-L elapse |
ジョブの実行時間の上限を指定 |
|
-L proc-core= |
プロセス単位の最大コアファイルサイズリミットを指定(デフォルト:0、最大: unlimited) |
|
-L proc-data |
プロセス単位の最大データセグメントサイズリミットを指定(デフォルト: unlimited) |
|
-L proc-stack |
プロセス単位の最大スタックセグメントサイズリミットを指定。RHEL の仕様により unlimited 設定の場合、実際の設定値は 2MiB となります。 (デフォルト: unlimited) |
|
-L jobenv |
ジョブ環境を指定します。Singularity を使用する場合は、jobenv=singularity を必ず指定します。 |
統計出力オプション¶
|
オプション名 |
説明 |
|---|---|
|
-s |
投入したジョブの統計情報を出力 (-S オプションと併用は不可) |
|
-S |
投入したジョブのノード情報を含む統計情報を出力 (-s オプションと併用は不可) |
ジョブスクリプトの例¶
ノードグループAの逐次ジョブ¶
以下のジョブを実行するためのジョブスクリプトの例です。なお、この例では Intel oneAPIでコンパイルしたプログラムを実行することを想定しています。
|
資源指定項目 |
指定内容 |
|---|---|
|
リソースグループ |
a-batch |
|
CPUコア数 |
1 |
|
経過時間 |
1時間 |
|
標準エラー出力も標準出力に出力 |
あり |
#!/bin/sh
#PJM -L rscgrp=a-batch
#PJM -L vnode-core=1
#PJM -L elapse=1:00:00
#PJM -j
module load intel
./a.out
ノードグループAのスレッド並列ジョブ¶
以下のジョブを実行するためのジョブスクリプトの例です。なお、この例では Intel oneAPIでコンパイルしたプログラムを実行することを想定しています。
|
資源指定項目 |
指定内容 |
|---|---|
|
リソースグループ |
a-batch |
|
CPUコア数 |
30 |
|
スレッド数 |
30 |
|
経過時間 |
1時間 |
|
標準エラー出力も標準出力に出力 |
あり |
#!/bin/sh
#PJM -L rscgrp=a-batch
#PJM -L vnode-core=30
#PJM -L elapse=1:00:00
#PJM -j
module load intel
export OMP_NUM_THREADS=30
./a.out
ノードグループAのハイブリッド並列ジョブ¶
以下のジョブを実行するためのジョブスクリプトの例です。なお、この例では Intel oneAPIと Intel MPIでコンパイルおよびリンクしたプログラムを実行することを想定しています。
|
資源指定項目 |
指定内容 |
|---|---|
|
リソースグループ |
a-batch |
|
使用ノード数 |
4 |
|
ノード当たりプロセス数 |
10 |
|
プロセス当たりスレッド数 |
12 |
|
経過時間 |
1時間 |
|
標準エラー出力も標準出力に出力 |
あり |
#!/bin/sh
#PJM -L rscgrp=a-batch
#PJM -L node=4
#PJM -L elapse=1:00:00
#PJM -j
module load intel
module load impi
export OMP_NUM_THREADS=12
mpiexec -np 40 -ppn 10 ./a.out
ノードグループBの 1GPUジョブ¶
以下のジョブを実行するためのジョブスクリプトの例です。なお、この例では CUDAでコンパイルしたプログラムを実行することを想定しています。
|
資源指定項目 |
指定内容 |
|---|---|
|
リソースグループ |
b-batch |
|
使用GPU数 |
1 |
|
経過時間 |
1時間 |
|
標準エラー出力も標準出力に出力 |
あり |
#!/bin/sh
#PJM -L rscgrp=b-batch
#PJM -L gpu=1
#PJM -L elapse=1:00:00
#PJM -j
module load cuda
./a.out
ノードグループBの 2ノードジョブ¶
以下のジョブを実行するためのジョブスクリプトの例です。
|
資源指定項目 |
指定内容 |
|---|---|
|
リソースグループ |
b-batch |
|
使用ノード数 |
2 |
|
使用GPU数 |
8 |
|
ノード当たりプロセス数 |
4 |
|
経過時間 |
1時間 |
|
標準エラー出力も標準出力に出力 |
あり |
#!/bin/sh
#PJM -L rscgrp=b-batch
#PJM -L node=2
#PJM -L elapse=1:00:00
#PJM -j
module load gcc cuda cudnn nccl hpcx
mpiexec -n 8 -map-by ppr:4:node python3 pytorch_mnist.py
対話型ジョブによる実行¶
対話型ジョブを実行するには pjsubコマンドで --interactオプションを指定します。
以下にリソースグループ a-interで 1ノードを 1時間、対話型ジョブで利用する実行例を示します。
$ pjsub --interact -L rscgrp=a-inter,node=1,elapse=01:00:00
[INFO] PJM 0000 pjsub Job 82653 submitted.
[INFO] PJM 0081 .connected.
[INFO] PJM 0082 pjsub Interactive job 82653 started.
[ku01234567@a0001 test]$
バッチジョブの投入¶
バッチ処理用スクリプトファイルに記述された処理内容を pjsub コマンドを用いて依頼します。
$ pjsub go.sh
[INFO] PJM 0000 pjsub Job 1234 sunmitted.
この例では go.sh という名前で作成・保存されたファイルに記述された処理内容を依頼しています。例ではジョブID: 1234が割り振られています。
処理状況の確認¶
実行中・実行待ちの状況確認¶
投入したジョブの状態を確認するには以下のように pjstatコマンドを使用します。
$ pjstat
JOB_ID JOB_NAME MD ST USER START_DATE ELAPSE_LIM NODE_REQUIRE VNODE CORE V_MEM
82659 test2.sh NM RNA ku400001 (07/01 15:25) 0000:20:00 8 - - -
ここで、JOB_IDはジョブ番号、STはジョブの現在の状態を表します。主なジョブの状態としては以下のようなものがあります。
|
表示 |
状態 |
|---|---|
|
QUE |
待ち状態 |
|
RNA |
実行開始中 |
|
RUN |
実行中 |
|
RNO |
実行終了中 |
ジョブ実行には、同時使用コア数に制限値が設定されています。制限値を超えるジョブが投入された場合には、リソースグループの混雑状況によらずに待ち状態になります。制限値の詳細は、同時使用コア数の制限を参照してください。
履歴表示¶
以下のオプションにより過去xx日前(実行例では7日前)から現在までの実行履歴が確認できます。
$ pjstat -H day=7 -v
- ジョブ終了のステータスは「PC」列に表示されます(0:正常終了, 1:キャンセル 等)
- 各コード番号については "
man pjstat"で確認できます。 - メモリ使用超過が原因の場合ジョブ履歴「PC」列に "12" と出力されます。
- 一定期間経過した過去の履歴は消去されます。
処理の終了したバッチジョブの統計情報¶
以下のオプションにより任意の終了したジョブID(実行例では1234)の統計情報を確認することができます。
$ pjstat -H -S 1234
バッチジョブの削除¶
pjdelコマンドにより実行中もしくは実行待ちのバッチジョブを取り消す(削除する)ことができます。 pjdelコマンドに続けてジョブIDを指定します(複数指定可能)。 実行中のバッチジョブの取り消しを行うと実行が中止されます。
$ pjdel 1234
[INFO] PJM 0100 pjdel Job 1234 canceled.
この例ではジョブID: 1234のバッチジョブの削除を依頼しジョブが正常にされたことがメッセージで示されています。
結果の確認¶
pjsubの-oオプションで出力ファイルを指定した場合には指定されたファイルに標準出力への結果が書き出されます。 指定がない場合には " [ジョブスクリプト名].[ジョブID].out" というファイルに出力されます。 一方、標準エラー出力は、-jオプションが指定された場合は標準出力と同じファイルに書き出されます。 -jオプションが指定されなかった場合、-eオプションで出力ファイルが指定された場合には指定されたファイルに書き出されます。
-oのどちらのオプションも指定されなかった場合、標準エラー出力は " [ジョブスクリプト名].[ジョブID].err"に書き出されます。
リソースグループの混雑状況確認¶
リソースグループの混雑状況は以下のように pjshowrscまたはshow_rscコマンドを使用します。
simplexモードとsharedモードのノード数の比率は稼働状況を見ながら適宜変更します。
$ pjshowrsc --rg
[ CLST: genkai-clst ]
[ RSCUNIT: rscunit_pg01 ]
RSCGRP NODE
TOTAL FREE ALLOC
a-batch 1000 999 1
a-inter 1000 999 1
a-reserve 10 10 0
b-batch 34 34 0
b-batch-mig 3 3 0
b-inter 34 34 0
b-inter-mig 3 3 0
b-reserve 4 4 0
c-batch 2 2 0
c-inter 2 2 0
$ show_rsc
node core gpu
rscgrp mode free total free total free total
a-batch/a-inter simplex 800 800 - - - -
a-batch/a-inter shared 199 222 23990 26640 - -
b-batch/b-inter simplex 30 30 - - - -
b-batch/b-inter shared 4 4 - - 16 16
b-batch-mig/b-inter-mig simplex 1 1 - - - -
b-batch-mig/b-inter-mig shared 2 3 - - 56 84
c-batch/c-inter simplex 1 1 - - - -
c-batch/c-inter shared 1 1 - - 8 8
ステップジョブの実行¶
ステップジョブは、複数のバッチジョブを 1 つのまとまりとして扱い、その中で実行の順序関係や依存関係を指定
することで、ジョブチェイン機能を実現するジョブモデルです。ステップジョブは複数サブジョブから構成され、各サブジョブは同時に実行されることはありません。
ステップジョブの投入形式は以下のとおりです。
$ pjsub --step [--sparam "sn=stepno[,依存関係式]"] jobscript
ステップジョブ依存関係式¶
|
条件 |
説明 |
|---|---|
|
NONE |
依存関係を示す |
|
終了ステータス == value[,value,..] |
value には任意の値を指定可能。「==」「!="」の場合は","(カンマ)を用いて、value を複数指定可能。 |
|
終了ステータス != value[,value,..] |
|
|
終了ステータス > value |
|
|
終ステータス >= value |
|
|
終了ステータス < value |
|
|
終ステータス <= value |
ステップジョブ依存関係式で指定可能な削除タイプ¶
|
削除タイプ |
説明 |
|---|---|
|
one |
該当ジョブのみを削除します。 |
|
after |
当該ジョブおよび当該ジョブに依存するジョブを再帰的に削除します。 |
|
all |
当該ジョブ及び後続のすべてのジョブを削除します。 |
バルクジョブの実行¶
バルクジョブは、複数の同じバッチジョブを同時に投入し、実行するジョブです。例えば、ジョブのパラメタを変え
て、それぞれの実行結果を確認したい場合、通常のバッチジョブであれば、ジョブを 1 つ 1 つ投入する必要があり
ますが、バルクジョブを使えば、1 度に複数パターンの投入ができます。
バルクジョブの投入形式は以下のとおりです。
$ pjsub --bulk --sparam start-end jobscript
バルクジョブを実行する場合、サブジョブごとに設定されるバルク番号を用いてプログラムの入出力ファイルを変
更することが可能です。バルク番号は環境変数 PJM_BULKNUM で参照することが可能です。
例¶
8つのサブジョブが input.1~input.8 の入力ファイルをそれぞれ読み込み、出力ファイル output.1~output.8
をそれぞれ出力する
[username@genkai0001 ~]$ ls input.*
input.1 input 2 input.3 input.4 input.5 input.6 input.7 input.8
[username@genkai0001 ~]$ vi bulk.sh
#!/bin/sh
#------ pjsub option --------#
#PJM -L rscgrp=a-batch
#PJM -L node=1
#PJM -L elapse=1:00:00
#PJM -j
#------- Program execution -------#
./a.out < input.$PJM_BULKNUM > output.$PJM_BULKNUM
[username@genkai0001 ~]$ pjsub --bulk --sparam 1-8 bulk.sh
[INFO] PJM 0000 pjsub Job 12345 submitted.
関連情報¶
玄界のジョブ利用についての詳細は以下を参照してください。
ノード予約システム¶
ノードグループA、ノードグループBに対し、利用者が希望する期間、計算資源をWebインターフェイスで対話的に予約することが可能です。利用者自身の利用可能期間内において、現時刻を起点として最短 30 分後から 30 分刻みで 14 日先までの全時間帯で予約申し込みが可能です。予約申し込み時に予約時間(1時間単位)、利用ノード数、GPU数を選択することが可能です。予約可能時間、ノード数、GPU
数、は以下の通りです。
|
ノードグループA |
ノードグループB |
|
|---|---|---|
|
最大予約可能時間 |
24 h |
24 h |
|
ノード数 |
1 ~ 4 |
1(固定) |
|
GPU数 |
1 ~ 4 |
ノード予約ポータルの利用方法¶
ポータルへのログイン¶
-
Webブラウザでノード予約ポータルにアクセスします。
-
ポータルアカウントとそのパスワードを入力してログインします。
ポータルアカウントは、利用申請ポータルで作成していただいたもので、「ap」ではじまるアカウントです。 -
さらに、ワンタイムパスワードを入力します。
ノード予約ポータルと利用申請ポータルは同じログイン情報を使っているため、利用申請ポータルにログインする際と同じ手順で得たワンタイムパスワードを入力してください。
(どちらかへのログインから時間が経過していなければログイン処理全体がスキップされます。)
予約の実施¶
- 「New reservation」を選択し、予約に必要な項目を入力します。
|
項目 |
内容 |
|---|---|
|
Suppercomputer account |
スーパーコンピュータアカウントを選択 |
|
Start at |
開始日時を選択 |
|
Operating hour |
予約時間を選択 |
|
Node Group |
ノードグループを選択 |
|
Resource |
予約する資源量を選択 |
-
「Reserve」をクリックします。確認ダイアログが表示され、予約が完了します。
-
「History」で、予約内容の確認が可能です。
-
予約期間内になるとジョブ投入が可能です。pjsub時に「Reservation ID」の番号を-rオプションに指定してください。
(詳細に関してはジョブ利用を参照ください。)
予約ジョブの作成と実行¶
バッチジョブ実行¶
通常のバッチジョブの実行に-r [Reservation ID]を追記して下さい。
例)
$ pjsub -r [Reservation ID] job.sh
以下は、job.shの例です。
リソースグループを指定するrscgrpを記述しないで下さい。
例)
$ pjsub -r [Reservation ID] job.sh
#!/bin/sh
# rscgrpを指定しない
#PJM -L vnode-core=60
#PJM -L elapse=1:00:00
#PJM -j
#PJM -S
export OMP_NUM_THREADS=30
./a.out
インタラクティブジョブ実行¶
バッチジョブの際と同様に、リソースグループを指定するrscgrpを記述しないで下さい。
例)
$ pjsub -r [Reservation ID] --interact -L node=1,elapse=01:00:00
予約の変更¶
- 「Modify reservation」を選択し、予約の変更を行います。
| 項目 | 内容 |
|---|---|
| Reservation ID | 変更を行う「Reservation ID」を選択 |
| Resource | 変更する資源量を選択 |
| ``` |