Quantcast
Channel: FOCUSスパコン利用案内
Viewing all articles
Browse latest Browse all 874

4.4.ジョブ投入スクリプトの作成

$
0
0

目次 (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 を使用)
イベント通知

--mail-type=[type]

※type はBEGIN, END, FAIL, REQUEUE, ALL のいずれか

メールアドレス指定 --mail-user=[address]
ジョブ再投入 --requeue または --no-requeue(未指定時は--no-requeue)
実行ディレクトリ指定 --workdir=[dir_name]
メモリサイズ指定 --mem=[mem][M|G|T] OR --mem-per-cpu=[mem][M|G|T]
ノード当たりのタスク数指定 --tasks-per-node=[count]
CPU 当たりのタスク数指定 --cpus-per-task=[count]
依存ジョブ

--dependency=[type:job_id]

type には次の依存タイプを指定できます。
after 指定したジョブが開始された後に、このジョブが実行されます。
afterany 指定したジョブが終了した後に、このジョブが実行されます。
afternotok 指定したジョブが異常終了した後に、このジョブが実行されます。
afterok 指定したジョブが正常終了した後に、このジョブが実行されます。
同じ依存タイプに複数のジョブID を紐付ける場合は、コロン(:)で区切ります。
#SBATCH --dependency=type:job_id: job_id
複数の依存関係(依存タイプとジョブID の組み合わせ)を指定する場合は、依存関係の間をカンマ(,)で区切ります。
#SBATCH --dependency=type:job_id,type:job_id

ジョブのプロジェクト化 --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 d024h ・・・・・・・・・・ (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=<number>)を指定します。
逐次ジョブの場合、プロセス数は1 となりますので、指定値は“-n 1”を指定します。
(3) ジョブ名を指定します。
(4) 標準出力ファイルを指定します。%J はジョブID に変換されます。
(5) 標準エラー出力ファイルを指定します。%J はジョブID に変換されます。
(6) プログラム(a.out)を実行します。

 

▲このページの先頭へ

4.4.5. スレッド並列ジョブを実行する場合

スレッド並列(単体ノードで並列計算を行う方式)でジョブを実行する時に作成するジョブ投入スクリプトの例を示します。

#!/bin/bash
#SBATCH -p d024h ・・・・・・・・・・ (1)
#SBATCH -n 20 ・・・・・・・・・・ (2)
#SBATCH -N 1 ・・・・・・・・・・ (3)
#SBATCH -J test_openmp ・・・・・・・・・・ (4)
#SBATCH -o stdout.%J ・・・・・・・・・・ (5)
#SBATCH -e stderr.%J ・・・・・・・・・・ (6)
export OMP_NUM_THREADS=${SLURM_NTASKS} ・・・・・・・・・・ (7)
./a.out ・・・・・・・・・・ (8)
RETCODE=$?
exit ${RETCODE} ・・・・・・・・・・ (9)

(1) パーティション名(キュー名)を指定します。
(2) ジョブで使用するプロセス数(-n もしくは-ntasks=<number>)を指定します。
上記の例では、20 プロセスで実行するために-n 20 を指定しています。
(3) 20 プロセスを1 ノード上で確保する必要があるため、“-N 1”を指定します。これにより、1 ノード上で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 d024h ・・・・・・・・・・ (1)
#SBATCH -n 40 ・・・・・・・・・・ (2)
#SBATCH -J test_openmpi ・・・・・・・・・・ (3)
#SBATCH -o stdout.%J.log ・・・・・・・・・・ (4)
#SBATCH -e stderr.%J.log ・・・・・・・・・・ (5)
module load gnu/openmpi165 ・・・・・・・・・・ (6)
NODEFILE=`generate_pbs_nodefile` ・・・・・・・・・・ (7)
mpirun -hostfile=${NODEFILE} -np ${SLURM_NTASKS} ./a.out ・・・・・・・・・・ (8)
RETCODE=$?
exit ${RETCODE} ・・・・・・・・・・ (9)

(1) パーティション名(キュー名)を指定します。
(2) ジョブで使用するプロセス数(-n もしくは-ntasks=<number>)を指定します。
(3) ジョブ名を指定します。
(4) 標準出力ファイルを指定します。%J はジョブID に変換されます。
(5) 標準エラー出力ファイルを指定します。%J はジョブID に変換されます。
(6) MPI 環境変数をセットします。
(7) mpirun に渡すノードリストを生成
(8) プログラム(a.out)を実行します。
(9) プログラムの戻り値をSLURM に戻します。

 

上記(6)については、次の実行方法があります。

標準GNU コンパイラー
(GNU 4.4.7)
OpenMPI module load gnu/openmpi165
MPICH2 module load gnu/mpich2141p1
IntelMPI module load impi411
GNU4.8.2 コンパイラー OpenMPI module load PrgEnv-gnu482
module load gnu/openmpi165
MPICH2 module load PrgEnv-gnu482
module load gnu/mpich2141p1
IntelMPI module load PrgEnv-gnu482
module load impi411
Intel コンパイラー OpenMPI module load PrgEnv-intel
module load intel/openmpi165
MPICH2 module load PrgEnv-intel
module load intel/mpich2141p1
IntelMPI module load PrgEnv-intel
module load impi411
PGI コンパイラー OpenMPI module load PrgEnv-pgi
module load pgi/openmpi165
MPICH2 module load PrgEnv-pgi
module load pgi/mpich2141p1

 

▲このページの先頭へ

4.4.7. MPI プログラム(Intel MPI)を実行する場合

プロセス並列(複数のノードで並列計算を行う方式)のジョブをIntelMPI で実行する時に作成するジョブ投入スクリプトの例を示します。

#!/bin/bash
#SBATCH -p d024h
#SBATCH -n 40
#SBATCH -J test_intelmpi
#SBATCH -o stdout.%J.log
#SBATCH -e stderr.%J.log
module load PrgEnv-intel
module load impi411
NODEFILE=`generate_pbs_nodefile`
mpirun -hostfile ${NODEFILE} -np ${SLURM_NTASKS} ./a.out

 

(注) インテルコンパイラで作成された実行ファイルを実行する場合、ジョブ投入スクリプト内に

module load PrgEnv-intel
module load impi411

の行を記載する必要があります。

 

▲このページの先頭へ

4.4.8. MPI プログラム(mpich2)を実行する場合

プロセス並列(複数のノードで並列計算を行う方式)のジョブをPGI コンパイラで作成したMPI プログラム(mpich2)で実行する時に作成するジョブ投入スクリプトの例を示します。

#!/bin/bash
#SBATCH -p d024h
#SBATCH -n 40
#SBATCH -J test_pgi
#SBATCH -o stdout.%J.log
#SBATCH -e stderr.%J.log
module load PrgEnv-pgi
module load pgi/mpich2141p1
NODEFILE=`generate_pbs_nodefile`
mpirun -hostfile ${NODEFILE} -np ${SLURM_NTASKS} ./a.out

 

(注) PGI コンパイラが用意するmpich2 環境を利用し、PGI コンパイラで作成された実行ファイルを実行する場合、ジョブ投入スクリプト内に

module load PrgEnv-pgi
module load pgi/mpich2141p1

の行を記載する必要があります。

 

▲このページの先頭へ



Viewing all articles
Browse latest Browse all 874

Trending Articles