HOME > 使い方と注意事項 > 計算サービス > バッチジョブの投入

計算サービスの利用方法と注意事項

ジョブスクリプトの例

以下では、より具体的な場合を想定した、ジョブスクリプトの例を示します。

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 intel
10行目:
11行目: setenv OMP_NUM_THREADS 4
12行目: cd $PBS_O_WORKDIR
13行目: ifort -O2 -o sample sample.f -parallel
14行目: ./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行目: OpenMPプログラムにおいて並列化ジョブを実行する場合、環境変数 OMP_NUM_THREADS によるCPU数の指定が必要です。 特に理由がなければ、ncpus オプションで指定したCPU数と同じにしてください。
12行目: qsubコマンドを実行したディレクトリへ移動します。
13行目: 自動並列化オプション -parallel とともにIntelコンパイラでコンパイルします。
14行目: プログラムを実行します。

 

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行目:
12行目: cd $PBS_O_WORKDIR
13行目: ifort -O2 -o sample sample.f -lmpi
14行目: 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行目: 空白行は何も行いません。
12行目: qsubコマンドを実行したディレクトリへ移動します。
13行目: MPIライブラリ(-lmpi)をリンクして、Intelコンパイラでコンパイルします。
14行目: 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によって 決定されます。

 

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としてください。 そして、その後に続いてncpusmem オプションでジョブで必要な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 オプションが必要です。なお、できるだけSAMLLキューでのご利用を お願いいたします。

apfe1% qsub -I -q SMALL -l select=1 -l walltime=1:00:00
qsub: waiting for job 50.apfe3 to start
qsub: job 50.apfe3 ready

cd /scratch/pbs_jobdir/pbs.50.apfe3.x8z
[user@ap001 ~]$ cd /scratch/pbs_jobdir/pbs.50.apfe3.x8z
[user@ap001 pbs.50.apfe3.x8z]$ 

インタラクティブバッチジョブの実行中は、qsub を実行している端末セッションから、 直接コマンドを入力して、ジョブを実行します。
以下の例は、端末セッションにてコマンドの入力を行っています。 なお、最初の module コマンドで Gaussian16 を実行するために 必要な環境設定を行っています。

ap001% module load g16/c01
G16.c01 environment
ap001% rung16 test.com test.log
ap001% 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 コマンドを実行し、インタラクティブバッチジョブを終了します。

ap001% exit
logout

qsub: job 50.apfe3 completed
apfe1%