ジョブスクリプトの例
以下では、より具体的な場合を想定した、ジョブスクリプトの例を示します。
OpenMPによる自動並列化のジョブスクリプト例
1行目: #!/bin/csh
2行目: # sample script for auto-parallel job
3行目: #PBS -q SMALL
4行目: #PBS -N parallel_job
5行目: #PBS -j oe
6行目: #PBS -l select=1:ncpus=4
7行目:
8行目: source /etc/profile.d/modules.csh
9行目: module load compiler
10行目:
11行目: setenv KMP_AFFINITY disabled
12行目: setenv OMP_NUM_THREADS 4
13行目: cd $PBS_O_WORKDIR
14行目: ifort -O2 -o sample sample.f -parallel
15行目: dplace ./sample
1行目: 1行目でCシェルスクリプトであることを示します。
2行目: 一般のシェルスクリプトと同様、先頭が # であればコメントとみなします。
3行目: -q オプションでキューを指定します。
4行目: -N オプションでバッチのジョブ名を指定します。
5行目: -j オプションで標準出力と標準エラー出力をまとめて標準出力に出力します。
6行目: -l select=1:の後に続いてncpus オプションでジョブで使用するCPUを確保します。
ここではジョブ実行に必要なCPU数を指定してください。(不必要に多くのCPU数を指定しないでください。)
7行目: 空白行は何も行いません。
8行目: module コマンドを利用するための環境を設定します。1行目で csh としているので、modules.csh を読み込みます。
9行目: module コマンドで最新のインテルコンパイラの利用環境を読み込みます。
10行目: 空白行は何も行いません。
11行目: インテルコンパイラにて実装されているコアバインドの機能を無効にします。
12行目: OpenMPプログラムにおいて並列化ジョブを実行する場合、環境変数 OMP_NUM_THREADS によるCPU数の指定が必要です。
特に理由がなければ、ncpus オプションで指定したCPU数と同じにしてください。
13行目: qsubコマンドを実行したディレクトリへ移動します。
14行目: 自動並列化オプション -parallel とともにIntelコンパイラでコンパイルします。
15行目: プログラムを実行します。dplace はOpenMPスレッドをコアにバインドすることで性能を向上させるコマンドです。
MPIプログラムのジョブスクリプト例
1行目: #!/bin/csh
2行目: # sample script for MPI job
3行目: #PBS -q APC
4行目: #PBS -M user@xxx.scl.kyoto-u.ac.jp
5行目: #PBS -m e
6行目: #PBS -l select=4:ncpus=20:mpiprocs=20:mem=20gb
7行目: #PBS -W depend=afterok:56465
8行目:
9行目: source /etc/profile.d/modules.csh
10行目: module load intel/2019
11行目: setenv I_MPI_HYDRA_BOOTSTRAP rsh
12行目: setenv I_MPI_HYDRA_BOOTSTRAP_EXEC /usr/appli/pbs/default/bin/pbs_tmrsh
13行目:
14行目: cd $PBS_O_WORKDIR
15行目: ifort -O2 -o sample sample.f -lmpi
16行目: mpirun -np 80 -mem 80gb ./sample
1行目: 1行目でCシェルスクリプトであることを示します。
2行目: 一般のシェルスクリプトと同様、先頭が # であればコメントとみなします。
3行目: -q オプションで、キューを指定します。
4行目: -M オプションで、メールアドレスを指定します。
5行目: -m オプションで、ジョブ終了後にメールを送信します。
6行目: 20コアと20GBメモリを要求するチャンク(ジョブのかたまり)を4つ使い、全体で80並列のMPIジョブであることを指定します。
7行目: -W depend オプションで、JobID 56465 のジョブがエラーなく終了した後にのみ実行するように、スケジュールされます。
8行目: 空白行は何も行いません。
9行目: module コマンドを利用するための環境を設定します。1行目で csh としているので、modules.csh を読み込みます。
10行目: module コマンドでインテルコンパイラ(Ver.2019)の利用環境を読み込みます。
11行目: PBSにてIntelコンパイラによるMPIプログラムを実行する場合に必要な環境変数です。
12行目: PBSにてIntelコンパイラによるMPIプログラムを実行する場合に必要な環境変数です。
13行目: 空白行は何も行いません。
14行目: qsubコマンドを実行したディレクトリへ移動します。
15行目: MPIライブラリ(-lmpi)をリンクして、Intelコンパイラでコンパイルします。
16行目: mpirun コマンドでプログラムを実行します。使用するCPU数は -np オプション、
メモリは-memオプションで指定します。利用するリソースの数は、-l select オプションでの指定された内容と矛盾が
ないようにしてください。
【6行目の説明の補足】
チャンクとは、並列ジョブ(複数のコアを使って実行されるジョブ)のプロセスを計算ノードのコアに配置するときの
プロセスの塊であり、ジョブスケジューラ―(PBS)にて定義された概念です。
並列ジョブのプロセス全体としては、複数の計算ノードにまたがっても構いませんが、1チャンクは必ず1つのノードに
収まらなくてはいけません。SMALLやAPCが利用する計算ノードは40core/360GB(あるいは40core/720GB)ですので、
1チャンクは、この1ノードの計算リソース内に収めることが必要です。
上記の例の場合、1チャンクは ncpus=20:mpiprocs=20:mem=20gb です。つまり、20コア/20GB が1つのチャンクとなり、
select=4 ですので、全部で4つのチャンクを使って計算が実行されます。
したがって、4つのノードを使い、各ノードに1つのチャンク(20コア/20GB)を配置して計算することもありますし、
2つのノードを使い、各ノードにおいて2つのチャンク(つまり、40コア/40GB) を配置して計算する、
あるいは3つのノードを使い、1つのノードには1つのチャンク、1つのノードには1つのチャンク、残る1つのノードには2つのチャンクを配置して
ジョブが実行されるかもしれません。どのようにチャンクが配置されるかは、その時のリソースの空き状況や配置ルールをもとにPBSによって
決定されます。
GPUプログラムのジョブスクリプト例
1行目: #!/bin/sh
2行目: # sample script for GPU job
3行目: #PBS -q APG
4行目: #PBS -l select=1:ncpus=1:mem=10gb:ngpus=1
5行目:
6行目: source /etc/profile.d/modules.sh
7行目: module load gpu-mrbayes/3.2.6
8行目:
9行目: cd $PBS_O_WORKDIR
10行目: mb gene413.nex
1行目: 1行目でBourneシェルスクリプトであることを示します。
2行目: 一般のシェルスクリプトと同様、先頭が # であればコメントとみなします。
3行目: GPUを使用しますので、 -q オプションで APG キューを指定します。
4行目: ncpusとmem オプションでジョブで必要なCPU数とメモリサイズを指定します。GPUを使用しますので、ngpus=1 も指定します。
5行目: 空白行は何も行いません。
6行目: module コマンドを利用するための環境を設定します。
1行目で /bin/sh としているので、modules.sh を読み込みます。
7行目: GPU版 MrBayes の利用環境を読み込む設定を行います。
8行目: 空白行は何も行いません。
9行目: qsubコマンドを実行したディレクトリへ移動します。
10行目: GPUジョブを実行します。
Gaussianのジョブスクリプト例
1行目: #!/bin/csh
2行目: # sample script for Gaussian job
3行目: #PBS -q APC
4行目: #PBS -N g16_job
5行目: #PBS -l select=1:ncpus=8:mem=12gb
6行目:
7行目: source /etc/profile.d/modules.csh
8行目: module load g16/c01
9行目:
10行目: cd $PBS_O_WORKDIR
11行目: rung16 test100.com output
1行目: 1行目でCシェルスクリプトであることを示します。
2行目: 一般のシェルスクリプトと同様、先頭が # であればコメントとみなします。
3行目: -q オプションで、キューを指定します。
4行目: -N オプションで、バッチのジョブ名を指定します。
5行目: Gaussianの場合、select=1としてください。
そして、その後に続いてncpusとmem オプションでジョブで必要なCPU数とメモリサイズを指定します。
6行目: 空白行は何も行いません。
7行目: module コマンドを利用するための環境を設定します。
1行目で csh としているので、modules.csh を読み込みます。リビジョンも指定していただくようお願いします。この場合にはc01がリビジョンです。
8行目: Gaussian16 の利用環境を読み込む設定を行います。
9行目: 空白行は何も行いません。
10行目: qsubコマンドを実行したディレクトリへ移動します。
11行目: rung16 コマンドにより Gaussian ジョブを実行します。
MaterialsStudio/CASTEPのジョブスクリプト例
1行目: #!/bin/csh
2行目: # sample script for MS_CASTEP
3行目: #PBS -q SMALL
4行目: #PBS -N CASTEP_job
5行目: #PBS -l select=1:ncpus=4:mpiprocs=4:mem=12gb
6行目:
7行目: source /etc/profile.d/modules.csh
8行目: module load ms/19.1
9行目:
10行目: cd $PBS_O_WORKDIR
11行目: RunCASTEP.sh -np 4 BaseName
1行目: 1行目でCシェルスクリプトであることを示します。
2行目: 一般のシェルスクリプトと同様、先頭が # であればコメントとみなします。
3行目: -q オプションで、キューを指定します。
4行目: -N オプションで、バッチのジョブ名を指定します。
5行目: -l select=1:の後に続いてncpus オプションおよびmpiprocsオプションで
ジョブで使用するCPUを確保します。
ここではジョブ実行に必要なCPU数を指定してください。
6行目: 空白行は何も行いません。
7行目: module コマンドを利用するための環境を設定します。1行目で csh としているので、modules.csh を読み込みます。
8行目: MaterialsStudio 2019 の利用環境を読み込む設定を行います。
"2019"はバージョン番号を意味します。
9行目: 空白行は何も行いません。
10行目: qsubコマンドを実行したディレクトリへ移動します。
11行目: RunCASTEP.sh コマンドにより MS CASTEPジョブを実行します。
5行目のncpus/mpiprocsオプションで指定したCPU数を、RunCASTEP.shコマンドの-npオプションで指定してください。
(CPU数の指定がない場合は、シングルCPUでの計算処理になります。)
インタラクティブバッチジョブの例
計算ノードは直接ログインできませんが、インタラクティブバッチジョブという仕組みを利用することで、ログインすることが可能です。
インタラクティブバッチジョブの場合には、-I オプションが必要です。なお、原則としてインタラクティブバッチジョブは SMALLキュー でのご利用をお願いいたします。
fe1% qsub -I -q SMALL -l select=1 -l walltime=1:00:00
qsub: waiting for job 50.fe3-adm to start
qsub: job 50.fe3-adm ready
cd /scratch/pbs_jobdir/pbs.50.fe3-adm.x8z
[user@cs01 ~]$ cd /scratch/pbs_jobdir/pbs.50.fe3-adm.x8z
[user@cs01 pbs.50.fe3-adm.x8z]$
インタラクティブバッチジョブの実行中は、qsub を実行している端末セッションから、
直接コマンドを入力して、ジョブを実行します。
以下の例は、端末セッションにてコマンドの入力を行っています。
なお、最初の module コマンドで Gaussian16 を実行するために
必要な環境設定を行っています。
cs01% module load g16/c01
G16.c01 environment
cs01% rung16 test.com test.log
cs01% ls -l
合計 64
-rw-r--r-- 1 user crj 94 9月 27 2019 test.com
-rw-r--r-- 1 user crj 26190 12月 5 21:43 test.log
ジョブが終了した場合はexit コマンドを実行し、インタラクティブバッチジョブを終了します。
cs01% exit
logout
qsub: job 50.fe3-adm completed
fe1%
|