目次 (4.4.ジョブ投入スクリプトの作成)
4.4. ジョブ投入スクリプトの作成
4.4.1. 処理方法の指定
4.4.2. sbatchオプション
4.4.3. 環境変数
4.4.4. 逐次ジョブを実行する場合
4.4.5. スレッド並列ジョブを実行する場合
4.4.6. MPIプログラム(openMPI)を実行する場合
4.4.7. MPIプログラム(Intel MPI)を実行する場合
4.4.8. MPIプログラム(mpich2)を実行する場合
4.4. ジョブ投入スクリプトの作成
ジョブ投入のためのジョブ投入スクリプトを作成します。
4.4.1. 処理方法の指定
ジョブ投入スクリプトの中で“#SBATCH
”で始まる行にsbatch
オプションを記述すると、処理方法を指定することができます。
4.4.2. sbatch オプション
主なsbatch
オプションを次に示します。
表 4.4.2 sbatch
オプション
ジョブ投入スクリプトのディレクティブ | #SBATCH |
---|---|
キュー(パーティション)指定 | -p [queue] |
実行ノード数(並列数の指定) | -N [minnodes[-maxnodes]], --nodes=[minnodes[-maxnodes]] |
CPU 数の指定(プロセス数の指定) | -n [number], --ntasks=[number] |
実行時間の上限指定(wall time) | -t [minutes], --time=[minutes] -t [minutes:seconds], --time=[minutes:seconds] -t [hours:minutes:seconds], --time=[hours:minutes:seconds] -t [days-hours], --time=[days-hours] -t [days-hours:minutes], --time=[days-hours:minutes] -t [days-hours:minutes:seconds], --time=[days-hours:minutes:seconds] |
出力ファイル指定 | -o [filename], --output=[filename] |
エラー出力指定 | -e [filename], --error=[filename] |
出力・エラー出力の総合出力 | (-e 指定無しで-o を使用) |
イベント通知 |
※type は |
メールアドレス指定 | --mail-user=[address] |
ジョブ再投入 | --requeue または --no-requeue (未指定時は--no-requeue ) |
実行ディレクトリ指定 | --workdir=[dir_name] |
メモリサイズ指定 | --mem=[mem][M|G|T] OR --mem-per-cpu=[mem][M|G|T] |
ノード当たりのタスク数指定 | --ntasks-per-node=[count] |
タスク当たりのCPU数指定 | --cpus-per-task=[count] |
依存ジョブ |
type には次の依存タイプを指定できます。 |
ジョブのプロジェクト化 | --wckey=[name] |
ジョブ実行ホストの詳細 | --nodelist=[nodes] AND/OR --exclude=[nodes] |
アレイジョブ | --array=[array_spec] |
開始時間指定 | --begin=YYYY-MM-DD[THH:MM[:SS]] |
4.4.3. 環境変数
sbatch
コマンド実行時、ジョブ実行時に環境変数が設定されます。設定される主な環境変数を示します。
表 4.4.3 環境変数
環境変数 | 内容 |
---|---|
SLURM_JOB_CPUS_PER_NODE | ジョブ実行に使用されるホストとプロセス数のリスト |
SLURM_JOB_ID | ジョブID |
SLURM_JOB_NAME | fjsub –N やsbatch -J で指定したジョブ名。ジョブ名を指定していない場合は、実際に指定されたコマンド列が格納されます。 |
SLURM_JOB_NODELIST | ジョブが実行されるホスト名のリスト |
SLURM_NTASKS | sbatch –n (または ––ntasks )で指定したプロセス数 |
SLURM_SUBMIT_DIR | ジョブ が投入されたカレントディレクトリ |
4.4.4. 逐次ジョブを実行する場合
逐次(並列計算を行わない方式)で実行する時に作成するジョブ投入スクリプトの例を示します。
#!/bin/bash
#SBATCH -p g006m ・・・・・・・・・・ (1)
#SBATCH -n 1 ・・・・・・・・・・ (2)
#SBATCH -J test_serial ・・・・・・・・・・ (3)
#SBATCH -o stdout.%J ・・・・・・・・・・ (4)
#SBATCH -e stderr.%J ・・・・・・・・・・ (5)
./a.out ・・・・・・・・・・ (6)
(1) パーティション名(キュー名)を指定します。
(2) ジョブで使用するプロセス数(-n
もしくは--ntasks=
)を指定します。
逐次ジョブの場合、プロセス数は1 となりますので、指定値は“-n 1
”を指定します。
(3) ジョブ名を指定します。
(4) 標準出力ファイルを指定します。%J
はジョブID に変換されます。
(5) 標準エラー出力ファイルを指定します。%J
はジョブID に変換されます。
(6) プログラム(a.out)を実行します。
4.4.5. スレッド並列ジョブを実行する場合
スレッド並列(単体ノードで並列計算を行う方式)でジョブを実行する時に作成するジョブ投入スクリプトの例を示します。
#!/bin/bash
#SBATCH -p g006m ・・・・・・・・・・ (1)
#SBATCH -n 1 ・・・・・・・・・・ (2)
#SBATCH -c 12 ・・・・・・・・・・ (3)
#SBATCH -J test_openmp ・・・・・・・・・・ (4)
#SBATCH -o stdout.%J ・・・・・・・・・・ (5)
#SBATCH -e stderr.%J ・・・・・・・・・・ (6)
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} ・・・・・・・・・・ (7)
./a.out ・・・・・・・・・・ (8)
RETCODE=$?
exit ${RETCODE} ・・・・・・・・・・ (9)
(1) パーティション名(キュー名)を指定します。
(2) ジョブで使用するプロセス数(-n
もしくは--ntasks=
)を指定します。
上記の例では、1 プロセスで実行するために-n 1 を指定しています。
(3) ジョブで使用するCPU数(-cもしくは--cpus-per-task=
)を指定します。
上記の例では、20スレッドで実行するために-c 20
を指定しています。
(4) ジョブ名を指定します。
(5) 標準出力ファイルを指定します。%J
はジョブID に変換されます。
(6) 標準エラー出力ファイルを指定します。%J
はジョブID に変換されます。
(7) 環境変数 OMP_NUM_THREADS にスレッド数を指定します。
(8) プログラム(a.out)を実行します。
(9) プログラムの戻り値をSLURM に戻します。
4.4.6. MPI プログラム(openMPI)を実行する場合
プロセス並列(複数のノードで並列計算を行う方式)のジョブをOpenMPI で実行する時に作成するジョブ投入スクリプトの例を示します。
下記スクリプトでは、Dシステムにて2ノード(1ノードあたり2プロセス)のジョブが生成されます。
#!/bin/bash
#SBATCH -p g006m ・・・・・・・・・・ (1)
#SBATCH -n 24 ・・・・・・・・・・ (2)
#SBATCH -J test_openmpi ・・・・・・・・・・ (3)
#SBATCH -o stdout.%J.log ・・・・・・・・・・ (4)
#SBATCH -e stderr.%J.log ・・・・・・・・・・ (5)
module load MPI-openmpi-2.1.3+gnu-4.4.7 ・・・・・・・・・・ (6)
mpirun -np ${SLURM_NTASKS} ./a.out ・・・・・・・・・・ (7)
RETCODE=$?
exit ${RETCODE} ・・・・・・・・・・ (8)
(1) パーティション名(キュー名)を指定します。
(2) ジョブで使用するプロセス数(-n
もしくは--ntasks=
)を指定します。
(3) ジョブ名を指定します。
(4) 標準出力ファイルを指定します。%J
はジョブID に変換されます。
(5) 標準エラー出力ファイルを指定します。%J
はジョブID に変換されます。
(6) MPI 環境変数をセットします。
(7) プログラム(a.out)を実行します。
(8) プログラムの戻り値をSLURM に戻します。
上記(6)については、次の実行方法があります。
コンパイラ | MPI | 環境設定コマンド |
---|---|---|
標準GNU (GNU 4.4.7) | OpenMPI | module load MPI-openmpi-2.1.3+gnu-4.4.7 |
GNU6.3.0 | OpenMPI | module load PrgEnv-gnu-6.3.0 |
Intel | OpenMPI | module load PrgEnv-intel-17.0.1.132 |
IntelMPI | module load PrgEnv-intel-18.0.3.222 |
4.4.7. MPI プログラム(Intel MPI)を実行する場合
プロセス並列(複数のノードで並列計算を行う方式)のジョブをIntelMPI で実行する時に作成するジョブ投入スクリプトの例を示します。
#!/bin/bash
#SBATCH -p g006m
#SBATCH -n 24
#SBATCH -J test_intelmpi
#SBATCH -o stdout.%J.log
#SBATCH -e stderr.%J.log
module load PrgEnv-intel-18.0.3.222
module load MPI-impi-18.3.222
NODEFILE=`generate_pbs_nodefile`
mpirun -np ${SLURM_NTASKS} ./a.out
(注) インテルコンパイラで作成された実行ファイルを実行する場合、ジョブ投入スクリプト内に
module load PrgEnv-intel-18.0.3.222
module load MPI-impi-18.3.222
の行を記載する必要があります。
4.4.8. MPI プログラム(mpich2)を実行する場合
現在MPICH2環境のmoduleは提供していません。