本ページでは、OCTOPUSでバッチ利用する際に使用するジョブスクリプトの例を紹介します。
ジョブスクリプトの書き方を覚えなくても、ここで紹介された例をそのままコピーして値を少し変えるだけで、十分ご利用いただくことが可能です。
目的別、ノード別にスクリプトを分類しておりますので、ご自身で参考になりそうなものを選択してください。
目的に応じた内容となっておりますので、変更する場合はご注意ください。(利用者番号)など()で囲まれた個所は、ご自身で変更していただく必要があります。よくわからないという方は、まず以下のページを読んでみてください。
まずは、以下を確認してみてください。
1.「#!/bin/sh」が先頭行に入っていますか?
2.最終行は改行していますか?
1,2はスクリプト上の仕様となり、必須です。
3.スペルミスはありませんか?
4.スクリプト中に余計なスペースが入っていませんか?
例えば、#PBS -l cpunum_job=2, elapstim_req=0:10:00のように
コンマの後にスペースを入れてしまうと、エラーになります。
5.資源量の指定は正しいですか?
各資源はジョブクラスに応じて、指定できる上限が定められています。
各制限についてはジョブクラス表をご覧ください。
6.それでも解決しない場合
システム自体に障害が発生しているのかもしれません。
その場合は、system@cmc.osaka-u.ac.jpまでご連絡ください
1ノード実行
例1-1:CPUノード 1ノード実行
OCTOPUS:CPUノードを1ノード使って、1時間の計算を行います。
OCTOPUSを利用する上で、基本となるジョブスクリプトです。
このスクリプトを書く時に参考となるページ:ジョブスクリプトの書き方
1 2 3 4 5 |
#!/bin/bash #PBS -q OCTOPUS # 実行キューの指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 ./a.out # プログラム"a.out"の実行 |
例1-1’:CPUノード 1ノードをDBGキューで実行
OCTOPUS:CPUノードを1ノード使って、10分の計算を行います。
ジョブクラス「DBG」は動作確認等を目的とした短時間実行のためのジョブクラスです。最長でも10分しか実行できませんが、回転が早いため待ち時間が少なくなります。
このスクリプトを書く時に参考となるページ:ジョブスクリプトの書き方
1 2 3 4 5 |
#!/bin/bash #PBS -q DBG # 実行キューの指定 #PBS -l elapstim_req=10:00 # 資源量の指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 ./a.out # プログラム"a.out"の実行 |
例1-2:GPUノード 1ノード実行
OCTOPUS:GPUノードを1ノード(GPU4枚)使って、1時間の計算を行います。
-lオプション(3行目)で"gpunum_job"を1以上に設定することで、GPUノードへジョブが割り当てられます。
このスクリプトを書く時に参考となるページ:ジョブスクリプトの書き方
1 2 3 4 5 |
#!/bin/bash #PBS -q OCTOPUS # 実行キューの指定 #PBS -l elapstim_req=1:00:00,gpunum_job=4 # 資源量の指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 ./a.out # プログラム"a.out"の実行 |
例1-3:Xeon Phiノード 1ノード実行
OCTOPUS:Xeon Phiノードを1ノード使って、1時間の計算を行います。
-qオプション(2行目)でXeon Phiノード用のキュー"OCTPHI"を指定します。
このスクリプトを書く時に参考となるページ:ジョブスクリプトの書き方
1 2 3 4 5 |
#!/bin/bash #PBS -q OCTPHI # 実行キューの指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 ./a.out # プログラム"a.out"の実行 |
例1-4:大容量主記憶搭載ノード 1ノード実行
OCTOPUS:大容量主記憶搭載ノードを1ノード使って、1時間の計算を行います。
-qオプション(2行目)で大容量主記憶搭載ノード用のキュー"OCTMEM"を指定します。
このスクリプトを書く時に参考となるページ:ジョブスクリプトの書き方
1 2 3 4 5 |
#!/bin/bash #PBS -q OCTMEM # 実行キューの指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 ./a.out # プログラム"a.out"の実行 |
以下の例は、OCTOPUS:CPUノードへジョブを投入する場合のスクリプト例です。別のノードへジョブを投入する場合、例1-1 ~ 1-4を参考に該当箇所を書き換えてください。
例2:ノード内並列(OpenMP/自動並列化)を利用する
OCTOPUS:CPUノードを1ノード使って、自動並列化による1時間のノード内24並列計算を行います。
このスクリプトを書く時に参考となるページ:OpenMP/自動並列化利用方法
1 2 3 4 5 6 |
#!/bin/bash #PBS -q OCTOPUS # 実行キューの指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 #PBS -v OMP_NUM_THREADS=24 # ノード内並列数の指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 ./a.out # プログラム"a.out"の実行 |
例3:intelMPIを利用する(4ノード×24Core並列実行)
OCTOPUS:CPUノードを4ノードを使って、1ノードにつき24並列実行(計96並列実行)のMPI計算を行います。
ノード間の4並列、ノード内の24並列の全てをintelMPIで行います。
このスクリプトを書く時に参考となるページ:intelMPI利用方法
1 2 3 4 5 6 7 |
#!/bin/bash #PBS -q OCTOPUS # 利用するキューを指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 #PBS -T intmpi # Intel MPI 実行時に必須 #PBS -b 4 # 利用するノード数を指定 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 mpirun ${NQSII_MPIOPTS} -np 96 ./a.out # -np (MPIプロセス数) 実行ファイル名 |
例4:intelMPI+ノード内並列(OpenMP/自動並列化)を利用する(4ノード×24Core並列実行)
OCTOPUS:CPUノードを4ノードを使って、1ノードにつき24並列実行(計96並列実行)の計算を行います。
ノード間の4並列をintelMPIで計算し、ノード内の24並列をOpenMP/自動並列化で計算します。
このスクリプトを書く時に参考となるページ:intelMPI+ノード内並列 利用方法
1 2 3 4 5 6 7 8 |
#!/bin/bash #PBS -q OCTOPUS # 利用するキューを指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 #PBS -T intmpi # Intel MPI 実行時に必須 #PBS -b 4 # 利用するノード数を指定 #PBS -v OMP_NUM_THREADS=24 # 自動並列化/OpenMPプロセス数(1ノード内の自動並列化/OpenMPプロセス数) cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 mpirun ${NQSII_MPIOPTS} -np 4 ./a.out # -np (MPIプロセス数) 実行ファイル名 |
例5:OpenMPI(GNUコンパイラ)を利用する(4ノード×24Core並列実行)
OpenMPIを利用する場合、コンパイラが2種類存在します。
こちらはGNUコンパイラを使用する場合のスクリプト例になります。
OCTOPUS:CPUノードを4ノードを使って、1ノードにつき24並列実行(計96並列実行)のMPI計算を行います。
このスクリプトを書く時に参考となるページ:OpenMPI利用方法
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash #PBS -q OCTOPUS # 利用するキューを指定 #PBS -l elapstim_req=1:00:00 # 資源量の指定 #PBS -T openmpi # Open MPI 実行時に必須 #PBS -b 4 # 利用するノード数を指定 BASE=/octfs/apl/HPC-X/hpcx-v2.2.0-gcc-MLNX_OFED_LINUX-4.2-1.2.0.0-redhat7.3-x86_64 source ${BASE}/hpcx-init.sh hpcx_load # Open MPI 実行時に必須 cd $PBS_O_WORKDIR # ジョブを投入したディレクトリに移動 mpirun ${NQSII_MPIOPTS} -np 96 ./a.out # -np (MPIプロセス数) 実行ファイル名 |