コンパイルしたロードモジュール(a.out)を計算機で実行するには、ジョブ要求用のシェルスクリプトファイル(ジョブスクリプトファイル)を作成し、スケジューラに対して投入します。
以下にジョブスクリプトの例を示します。
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash #------- qsub option ----------- #PBS -q SQUID #バッチリクエストを投入するキュー名の指定 #PBS --group=G01234 #所属するグループ名 #PBS -m b #バッチリクエスト実行開始時にメールを送信 #PBS -l cpunum_job=76 #使用するCPUコア数の要求値 #PBS -l elapstim_req=01:00:00 #ジョブの最大実行時間の要求値 1時間の例 #------- Program execution ----------- module load BaseCPU/2021 #ベース環境をロードします cd $PBS_O_WORKDIR #qsub実行時のカレントディレクトリへ移動 ./a.out > result.txt #プログラムの実行 |
ジョブスクリプトファイルは大きく2段構成となっており、
1. qsub option: 利用する計算機のリソースや環境の指定(#PBSから始まる個所)
2. Program execution: 計算機に実行させる処理の記述(シェルスクリプト)
に分かれます。
1. qsub option: 利用する計算機のリソースや環境の指定
投入時オプションという形で、ジョブスクリプトのコメント部に記述します。
最初のシェルコマンドが現れる前のコメント部分で、「#PBS」という文字列に続けて指定してください。
よく利用するオプション
指定が必須のオプションについては【★必須】を付けています。
また、MPIで計算を行う場合に必須のオプションについては【☆MPI】を付けています。必ず指定をお願いいたします。
投入するキューの指定(-qオプション)【★必須】
グループの指定(--group オプション)【★必須】
使用する資源制限値(-lオプション)【★必須】
ノード数の指定(-bオプション)【☆MPI】
ジョブの種類(-Tオプション)【☆MPI】
環境変数,オプションの設定(-vオプション)
実行開始/終了のメール通知の指定(-m,-Mオプション)
出力結果ファイルの指定(-e,-oオプション)
rerun(リクエストの再登録)の設定(-rオプション)
投入するキューの指定(-qオプション)【★必須】
#PBS -q [ジョブクラス名]
[ジョブクラス名]に、利用するジョブタイプに応じたジョブクラスを指定してください。[ジョブクラス名]は下記の通りです。
ジョブタイプ
ジョブクラス名
通常優先度
SQUID
高優先度
SQUID-H
シェア利用
SQUID-S
デバッグ利用
DBG
詳細はジョブクラス表をご覧ください。
※ジョブクラス名が「SQUID」、「DBG」の場合
以下で説明する#PBS -lオプションにてGPU使用台数(gpunum_job)を"1"以上に設定した場合GPUノード群へ、指定しなかった場合は汎用CPUノード群へジョブが投入されます。
※ジョブクラス「DBG」について
動作確認等を目的とした短時間実行のためのジョブクラスです。以下で説明する経過時間(elapstim_req)の指定が最長でも10分までとなりますが、ジョブの回転が早いため待ち時間が少なくなります。
グループの指定(--group オプション)【★必須】
#PBS --group=所属するグループ名あるいはHPCI,JHPCN課題ID
所属するグループ名を指定してください。HPCI課題、JHPCN A課題で使用する場合は課題IDを指定してください。グループ名や課題IDが不明な場合は、groupsコマンドを実行することで確認可能です
例:
#PBS --group=G12345(グループ名)
#PBS --group=hp******(課題ID)
#PBS --group=jh******(課題ID)
groupsコマンドの実行例
% groups
ocean G12345
(一般利用者の場合、oceanの後にグループ名が表示されます)
% groups
hpci hp12345
(HPCI利用者やJHPCN利用者の場合、hpciの後にグループ名が表示されます)
% groups
hpci hp12345 jh67890 G34567
(複数のグループや課題に参加している場合は、全て表示されます。いずれか1つを選択し、ジョブスクリプトに記述してください)
使用する資源制限値(-lオプション)【★必須】
#PBS -l elapstim_req=[経過時間]
#PBS -l cpunum_job=[1ノードあたりのCPUコア使用数]
#PBS -l memsz_job=[1ノードあたりのメモリ使用量]
#PBS -l gpunum_job=[1ノードあたりのGPU使用台数]
自身のプログラムに合わせ、使用する計算機のリソース量を指定してください。
複数ノード使用する場合でも、1ノード分のリソース量を指定してください。
elapstim_req
ジョブが実行される際の経過時間を指定します。
経過時間2時間で利用する場合の例:elapstim_req=2:00:00
cpunum_job
1ノードあたりのCPU使用コア数を指定します。
1ノード72コアで利用する場合の例:cpunum_job=72
gpunum_job
1ノードあたりのGPU使用台数を指定します。最大8台まで指定可能です。GPUを使わない場合は指定しないでください。
GPU8台を使用する場合の例:gpunum_job=8
memsz_job
1ノードあたりのメモリ使用量を指定します。(ジョブクラス「SQUID-S」を利用する際のみご利用ください。)
1ノード250GBで利用する場合の例: memsz_job=250GB
計算ノード毎で、割り当て可能なリソースの上限が異なりますので、詳細はジョブクラス表をご覧ください。計算中に指定された値を超えた場合、自動的にジョブは終了しますので、SQUIDでの初回実行時など、使用する計算機のリソース量が不明な場合は、大きめの値を指定することをおすすめします。
以下のように、カンマで区切って1つのオプションにまとめて指定することも可能です。カンマの前後にスペースが入らないように注意してください。
#PBS -l elapstim_req=2:00:00,cpunum_job=72,memsz_job=250GB, gpunum_job=8
ノード数の指定(-bオプション)【☆MPI】
#PBS -b [ノード数]
マルチノードで計算を実行する場合は、ノード数を指定してください。
ジョブの種類(-Tオプション)【☆MPI】
#PBS -T [種類]
実行されるジョブの種類を設定します。[種類]には以下の指定が可能です。
ジョブの種類
種類
MPIを使用しない
-Tの指定は必要ありません
intelMPI
intmpi
OpenMPI
openmpi
NECMPI
necmpi
環境変数,オプションの設定(-vオプション)
#PBS -v [環境変数]="[設定内容]"
ジョブを実行する全てのノードに対して、指定した環境変数を設定します。
環境変数はsetenvも設定できますが、マルチノードでジョブを実行した場合は、
スレーブノードにsetenvで指定した環境変数が設定されません。
マルチノードでジョブを実行する場合は、-vオプションをご利用ください。
実行開始/終了のメール通知の指定(-m,-Mオプション)
#PBS -m [メールオプション]
#PBS -M [送付先メールアドレス]
バッチジョブの実行開始/終了時にメールでの通知を行います。通知してほしいタイミングに応じて、[メールオプション]を設定してください。
メールオプション
説明
b
バッチリクエストの実行を開始した時にメールを発信します。
e
バッチリクエストの実行が終了(異常終了を含む)した時にメールを発信します。
a
バッチリクエストの実行が異常終了した時にメールを発信します。
n
メールを発信しません。
eb
バッチリクエストの実行を開始した時と終了した時にメールを発信します。
出力結果ファイルの指定(-e,-oオプション)
#PBS -e [標準エラー出力名]
#PBS -o [標準出力名]
バッチジョブの出力結果が格納されるファイルを指定します。
指定されない場合、「ジョブ名.eリクエストID」「ジョブ名.oリクエストID」というファイル名で標準エラー出力ファイル、標準出力ファイルがそれぞれ出力されます。後からの解析に便利ですので、特別な事情が無ければ、指定しないことをお勧めします。
rerun(リクエストの再登録)の設定(-rオプション)
#PBS -r n
実行中に計算ノードがストールした場合は、スケジューラが自動でリクエストを登録し直します。(これをrerunと呼びます)
もしrerunしてほしくない場合は、ジョブスクリプトに上記の設定を記載してください。
その他のオプションについて
上記に書かれていない詳細な内容やオプションについては、以下のマニュアルの「1.16.qsub」の項目をご参照ください
NQSV利用の手引き-リファレンス編
NQS スクリプトで指定するジョブクラス(キュー)の名前や各クラスの制限についてはジョブクラス表を参照して下さい。
ジョブクラス表
2.program execution:計算機に実行させる処理の記述
基本的に、シェルスクリプトでファイルやディレクトリの実行・操作を記述します。
module load BaseCPU/2021 #ベース環境をロードします
cd $PBS_O_WORKDIR
# ↑ ジョブ投入時のディレクトリに移動
./a.out > result.txt
# ↑ a.outを実行し、結果をresult.txtに出力する。
・moduleコマンドやベース環境についてはこちらをご参照ください。
・環境変数として「$PBS_O_WORKDIR」が用意されており、ジョブ投入時のディレクトリが自動で設定されます。
・実行時の標準出力/標準エラー出力には、100MBの容量制限があるため、大容量のデータ書き出しを行う場合はリダイレクション(>)などを使用し、別ファイルに出力してください。
./a.out > output.txt
【TIPS】その他のリダイレクション例
下記は全てbashを使用している場合のスクリプト例です。
実行ファイルを「a.out」
標準出力のリダイレクト先を「out.txt」
標準エラー出力のリダイレクト先を「err.txt」
標準出力/標準エラー出力の両方のリダイレクト先を「out_and_err.txt」としています。
標準出力のみをファイルにリダイレクト
./a.out > out.txt
標準出力と標準エラー出力を同じファイルにリダイレクト
./a.out >& out_and_err.txt
標準出力と標準エラー出力を別々のファイルにリダイレクト
(./a.out > out.txt) >& err.txt
ジョブスクリプトを書くときの注意点
スクリプトの最終行には、必ず改行を入れてください。未入力の場合、最終行のコマンドが実行されません。
最初のシェルコマンドが現れる前のコメント部分で、「#PBS」という文字列に続けて指定してください。
よく利用するオプション
また、MPIで計算を行う場合に必須のオプションについては【☆MPI】を付けています。必ず指定をお願いいたします。
グループの指定(--group オプション)【★必須】
使用する資源制限値(-lオプション)【★必須】
ノード数の指定(-bオプション)【☆MPI】
ジョブの種類(-Tオプション)【☆MPI】
環境変数,オプションの設定(-vオプション)
実行開始/終了のメール通知の指定(-m,-Mオプション)
出力結果ファイルの指定(-e,-oオプション)
rerun(リクエストの再登録)の設定(-rオプション)
投入するキューの指定(-qオプション)【★必須】
#PBS -q [ジョブクラス名]
[ジョブクラス名]に、利用するジョブタイプに応じたジョブクラスを指定してください。[ジョブクラス名]は下記の通りです。
ジョブタイプ | ジョブクラス名 |
---|---|
通常優先度 | SQUID |
高優先度 | SQUID-H |
シェア利用 | SQUID-S |
デバッグ利用 | DBG |
詳細はジョブクラス表をご覧ください。
※ジョブクラス名が「SQUID」、「DBG」の場合
※ジョブクラス「DBG」について
グループの指定(--group オプション)【★必須】
#PBS --group=所属するグループ名あるいはHPCI,JHPCN課題ID
所属するグループ名を指定してください。HPCI課題、JHPCN A課題で使用する場合は課題IDを指定してください。グループ名や課題IDが不明な場合は、groupsコマンドを実行することで確認可能です
例:
#PBS --group=G12345(グループ名)
#PBS --group=hp******(課題ID)
#PBS --group=jh******(課題ID)
groupsコマンドの実行例
% groups ocean G12345 (一般利用者の場合、oceanの後にグループ名が表示されます) % groups hpci hp12345 (HPCI利用者やJHPCN利用者の場合、hpciの後にグループ名が表示されます) % groups |
使用する資源制限値(-lオプション)【★必須】
#PBS -l elapstim_req=[経過時間]
#PBS -l cpunum_job=[1ノードあたりのCPUコア使用数]
#PBS -l memsz_job=[1ノードあたりのメモリ使用量]
#PBS -l gpunum_job=[1ノードあたりのGPU使用台数]
自身のプログラムに合わせ、使用する計算機のリソース量を指定してください。
複数ノード使用する場合でも、1ノード分のリソース量を指定してください。
elapstim_req | ジョブが実行される際の経過時間を指定します。 経過時間2時間で利用する場合の例:elapstim_req=2:00:00 |
---|---|
cpunum_job | 1ノードあたりのCPU使用コア数を指定します。 1ノード72コアで利用する場合の例:cpunum_job=72 |
gpunum_job | 1ノードあたりのGPU使用台数を指定します。最大8台まで指定可能です。GPUを使わない場合は指定しないでください。 GPU8台を使用する場合の例:gpunum_job=8 |
memsz_job | 1ノードあたりのメモリ使用量を指定します。(ジョブクラス「SQUID-S」を利用する際のみご利用ください。) 1ノード250GBで利用する場合の例: memsz_job=250GB |
計算ノード毎で、割り当て可能なリソースの上限が異なりますので、詳細はジョブクラス表をご覧ください。計算中に指定された値を超えた場合、自動的にジョブは終了しますので、SQUIDでの初回実行時など、使用する計算機のリソース量が不明な場合は、大きめの値を指定することをおすすめします。
以下のように、カンマで区切って1つのオプションにまとめて指定することも可能です。カンマの前後にスペースが入らないように注意してください。
#PBS -l elapstim_req=2:00:00,cpunum_job=72,memsz_job=250GB, gpunum_job=8 |
ノード数の指定(-bオプション)【☆MPI】
#PBS -b [ノード数]
マルチノードで計算を実行する場合は、ノード数を指定してください。
ジョブの種類(-Tオプション)【☆MPI】
#PBS -T [種類]
実行されるジョブの種類を設定します。[種類]には以下の指定が可能です。
ジョブの種類 | 種類 |
---|---|
MPIを使用しない | -Tの指定は必要ありません |
intelMPI | intmpi |
OpenMPI | openmpi |
NECMPI | necmpi |
環境変数,オプションの設定(-vオプション)
#PBS -v [環境変数]="[設定内容]"
ジョブを実行する全てのノードに対して、指定した環境変数を設定します。
環境変数はsetenvも設定できますが、マルチノードでジョブを実行した場合は、
スレーブノードにsetenvで指定した環境変数が設定されません。
マルチノードでジョブを実行する場合は、-vオプションをご利用ください。
実行開始/終了のメール通知の指定(-m,-Mオプション)
#PBS -m [メールオプション]
#PBS -M [送付先メールアドレス]
バッチジョブの実行開始/終了時にメールでの通知を行います。通知してほしいタイミングに応じて、[メールオプション]を設定してください。
メールオプション | 説明 |
---|---|
b | バッチリクエストの実行を開始した時にメールを発信します。 |
e | バッチリクエストの実行が終了(異常終了を含む)した時にメールを発信します。 |
a | バッチリクエストの実行が異常終了した時にメールを発信します。 |
n | メールを発信しません。 |
eb | バッチリクエストの実行を開始した時と終了した時にメールを発信します。 |
出力結果ファイルの指定(-e,-oオプション)
#PBS -e [標準エラー出力名]
#PBS -o [標準出力名]
バッチジョブの出力結果が格納されるファイルを指定します。
指定されない場合、「ジョブ名.eリクエストID」「ジョブ名.oリクエストID」というファイル名で標準エラー出力ファイル、標準出力ファイルがそれぞれ出力されます。後からの解析に便利ですので、特別な事情が無ければ、指定しないことをお勧めします。
rerun(リクエストの再登録)の設定(-rオプション)
#PBS -r n
実行中に計算ノードがストールした場合は、スケジューラが自動でリクエストを登録し直します。(これをrerunと呼びます)
もしrerunしてほしくない場合は、ジョブスクリプトに上記の設定を記載してください。
その他のオプションについて
上記に書かれていない詳細な内容やオプションについては、以下のマニュアルの「1.16.qsub」の項目をご参照ください
NQSV利用の手引き-リファレンス編
NQS スクリプトで指定するジョブクラス(キュー)の名前や各クラスの制限についてはジョブクラス表を参照して下さい。
ジョブクラス表
#PBS -r n
実行中に計算ノードがストールした場合は、スケジューラが自動でリクエストを登録し直します。(これをrerunと呼びます)
もしrerunしてほしくない場合は、ジョブスクリプトに上記の設定を記載してください。
NQSV利用の手引き-リファレンス編
NQS スクリプトで指定するジョブクラス(キュー)の名前や各クラスの制限についてはジョブクラス表を参照して下さい。
ジョブクラス表
2.program execution:計算機に実行させる処理の記述
基本的に、シェルスクリプトでファイルやディレクトリの実行・操作を記述します。
module load BaseCPU/2021 #ベース環境をロードします
cd $PBS_O_WORKDIR
# ↑ ジョブ投入時のディレクトリに移動
./a.out > result.txt
# ↑ a.outを実行し、結果をresult.txtに出力する。
・moduleコマンドやベース環境についてはこちらをご参照ください。
・環境変数として「$PBS_O_WORKDIR」が用意されており、ジョブ投入時のディレクトリが自動で設定されます。
・実行時の標準出力/標準エラー出力には、100MBの容量制限があるため、大容量のデータ書き出しを行う場合はリダイレクション(>)などを使用し、別ファイルに出力してください。
./a.out > output.txt
【TIPS】その他のリダイレクション例
下記は全てbashを使用している場合のスクリプト例です。
実行ファイルを「a.out」
標準出力のリダイレクト先を「out.txt」
標準エラー出力のリダイレクト先を「err.txt」
標準出力/標準エラー出力の両方のリダイレクト先を「out_and_err.txt」としています。
標準出力のみをファイルにリダイレクト
./a.out > out.txt
標準出力と標準エラー出力を同じファイルにリダイレクト
./a.out >& out_and_err.txt
標準出力と標準エラー出力を別々のファイルにリダイレクト
(./a.out > out.txt) >& err.txt
ジョブスクリプトを書くときの注意点
スクリプトの最終行には、必ず改行を入れてください。未入力の場合、最終行のコマンドが実行されません。
module load BaseCPU/2021 #ベース環境をロードします
cd $PBS_O_WORKDIR
# ↑ ジョブ投入時のディレクトリに移動
./a.out > result.txt
# ↑ a.outを実行し、結果をresult.txtに出力する。
・moduleコマンドやベース環境についてはこちらをご参照ください。
・環境変数として「$PBS_O_WORKDIR」が用意されており、ジョブ投入時のディレクトリが自動で設定されます。
・実行時の標準出力/標準エラー出力には、100MBの容量制限があるため、大容量のデータ書き出しを行う場合はリダイレクション(>)などを使用し、別ファイルに出力してください。
./a.out > output.txt
下記は全てbashを使用している場合のスクリプト例です。
-
実行ファイルを「a.out」
標準出力のリダイレクト先を「out.txt」
標準エラー出力のリダイレクト先を「err.txt」
標準出力/標準エラー出力の両方のリダイレクト先を「out_and_err.txt」としています。
標準出力のみをファイルにリダイレクト
./a.out > out.txt
標準出力と標準エラー出力を同じファイルにリダイレクト
./a.out >& out_and_err.txt
標準出力と標準エラー出力を別々のファイルにリダイレクト
(./a.out > out.txt) >& err.txt