コンパイルしたロードモジュール(a.out)を計算機で実行するには、ジョブ要求用のシェルスクリプトファイル(ジョブスクリプトファイル)を作成し、スケジューラに対して投入します。
以下にジョブスクリプトの例を示します。
1 2 3 4 5 6 7 |
#!/bin/bash #PBS -q OCTOPUS #PBS -l elapstim_req=1:00:00,cpunum_job=24 #PBS -M user@hpc.cmc.osaka-u.ac.jp #PBS -m b cd $PBS_O_WORKDIR ./a.out > result.txt |
ジョブスクリプトファイルは大きく2段構成となっており、
・利用する計算機のリソースや環境の指定(#PBSから始まる個所)
・計算機に実行させる処理の記述(シェルスクリプト)
に分かれます。
「利用する計算機のリソースや環境の指定」の書き方
#PBS (オプション)
投入時オプションという形で、ジョブスクリプトのコメント部に記述します。
最初のシェルコマンドが現れる前のコメント部分で、「#PBS」という文字列に続けて指定してください。
よく利用するオプションのご紹介
-
※ 指定が必須のオプションについては★印を付けています。
-
elapstim_req:ジョブが実行される際の経過時間を指定します。
(経過時間2時間で利用する場合の例:elapstim_req=2:00:00) -
cpunum_job:1ノードあたりのCPU使用コア数を指定します。
省略した場合、自動的に24コアに設定されます。
(1ノード24コアで利用する場合の例:cpunum_job=24) -
gpunum_job:1ノードあたりのGPU使用台数を指定します。最大4台まで指定可能です。
GPUを使わない場合は省略可能です。
(GPU4台を使用する場合の例:gpunum_job=4)
※ MPIで計算を行う場合に必須のオプションについては☆印をつけています。
必ず指定をお願いいたします。
投入するキューの指定(-qオプション)★
#PBS -q [ジョブクラス名]
[ジョブクラス名]に、利用する計算ノード群のジョブクラスを指定してください。[ジョブクラス名]は下記の通りです。
ノード群 | ジョブクラス名 |
---|---|
汎用CPUノード群(共有利用/バッチ) | OCTOPUS / DBG ※ |
GPUノード群(共有利用/バッチ) | OCTOPUS / DBG ※ |
Xeon Phiノード群(共有利用/バッチ) | OCTPHI |
大規模主記憶搭載ノード群(共有利用/バッチ) | OCTMEM |
詳細はジョブクラス表をご覧ください。
-
※ジョブクラス名が「OCTOPUS」、「DBG」の場合
- 以下で説明する#PBS -lオプションにてGPU使用台数(gpunum_job)を1以上に設定した場合GPUノード群へ、0 もしくは省略した場合は汎用CPUノード群へジョブが投入されます。
※ジョブクラス「DBG」について
- 動作確認等を目的とした短時間実行のためのジョブクラスです。以下で説明する経過時間(elapstim_req)の指定が最長でも10分までとなりますが、ジョブの回転が早いため待ち時間が少なくなります。
使用する資源制限値(-lオプション)★
#PBS -l elapstim_req=[経過時間],cpunum_job=24,gpunum_job=[1ノードあたりのGPU使用台数]
自身のプログラムに合わせ、使用する計算機のリソース量を指定してください。
複数ノード使用する場合でも、1ノード分のリソース量を指定してください。
計算中に指定された値を超えた場合、自動的にジョブは終了しますので、ご注意ください。
各計算機毎で、割り当て可能なリソースの上限が異なりますので、詳細はジョブクラス表をご覧ください。
ノード数の指定(-bオプション)☆
#PBS -b [ノード数]
マルチノードで計算を実行する場合は、ノード数を指定してください。
ジョブの種類(-Tオプション)☆
#PBS -T [種類]
実行されるジョブの種類を設定します。[種類]には以下の指定が可能です。
ジョブの種類 | 種類 |
---|---|
non MPI | -Tの指定は必要ありません |
intelMPI | intmpi |
OpenMPI | openmpi |
MVAPICH2 | mvapich |
グループの指定(--group オプション)
#PBS --group=HPCI,JHPCN課題ID
HPCI課題、JHPCN A課題でOCTOPUSを使用する場合、必ず指定してください。それ以外の方につきましては、指定する必要はありません。
前年度より継続している課題についても、当年度の課題IDを指定してください。
例:
#PBS --group=hp******(課題ID)
#PBS --group=jh******(課題ID)
環境変数,オプションの設定(-vオプション)
#PBS -v [環境変数]="[設定内容]"
ジョブを実行する全てのノードに対して、指定した環境変数を設定します。
環境変数はsetenvも設定できますが、マルチノードでジョブを実行した場合は、
スレーブノードにsetenvで指定した環境変数が設定されません。
マルチノードでジョブを実行する場合は、-vオプションをご利用ください。
実行開始/終了のメール通知の指定(-m,-Mオプション)
#PBS -m [メールオプション]
#PBS -M [送付先メールアドレス]
バッチジョブの実行開始/終了時にメールでの通知を行います。通知してほしいタイミングに応じて、[メールオプション]を設定してください。
b バッチリクエストの実行を開始した時にメールを発信します。
e バッチリクエストの実行が終了(異常終了を含む)した時にメールを発信します。
a バッチリクエストの実行が異常終了した時にメールを発信します。
n メールを発信しません。
eb バッチリクエストの実行を開始した時と終了した時にメールを発信します。
出力結果ファイルの指定
#PBS -e [標準エラー出力名]
#PBS -o [標準出力名]
バッチジョブの出力結果が格納されるファイルを指定します。
指定されない場合、「ジョブ名.eリクエストID」「ジョブ名.oリクエストID」というファイル名で標準エラー出力ファイル、標準出力ファイルがそれぞれ出力されます。後からの解析に便利ですので、特別な事情が無ければ、指定しないことをお勧めします。
rerun(リクエストの再登録)の設定(-rオプション)
#PBS -r n
実行中に計算ノードがストールした場合は、スケジューラが自動でリクエストを登録し直します。(これをrerunと呼びます)
もしrerunしてほしくない場合は、ジョブスクリプトに上記の設定を記載してください。
その他のオプションについて
-
上記に書かれていない詳細な内容やオプションについては、以下のマニュアルの「第4章1.16.qsub」の項目をご参照ください。(利用者番号での認証が必要です)
NQSII利用の手引き(要認証)
NQS スクリプトで指定するジョブクラス(キュー)の名前や各クラスの制限についてはジョブクラス表を参照して下さい。
ジョブクラス表
「計算機に実行させる処理の記述」の書き方
-
基本的に、シェルスクリプトでファイルやディレクトリの実行・操作を記述します。
cd $PBS_O_WORKDIR
# ↑ ジョブ投入時のディレクトリに移動
./a.out > result.txt
# ↑ a.outを実行し、結果をresult.txtに出力する。
・環境変数として「$PBS_O_WORKDIR」が用意されております。
・「$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
ジョブスクリプトを書くときの注意点
-
スクリプトの最終行には、必ず改行を入れてください。未入力の場合、最終行のコマンドが実行されません。