編集不可のページ History 添付ファイル

 

ページ名: "HowToSubmitJob"の差分
3と53のリビジョン間の差分 (その間の編集: 50回)
2019-08-23 04:24:02時点のリビジョン3
サイズ: 4753
編集者: hitachi28
コメント:
2024-05-03 11:21:58時点のリビジョン53
サイズ: 15698
編集者: yi041
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:

== パッチジョブ ==
<<TableOfContents(3)>>

== ジョブ環境 ==
本システムでサポートするジョブ利用形態は,コンテナ上でのジョブ利用だけとなります.このため,利用者はジョブ投入時のコマンドオプションまたはジョブスクリプトの指示文で起動コンテナを指定する必要があります.コンテナ上では,コンパイル,シリアルプログラムや並列プログラム(SMP,MPI)の実行,研究用アプリケーションの実行が可能です.<<BR>> また,ジョブの実行方法は2つあります.PBS Professionalを使って実行されるバッチジョブと,直接実行するインタラクティブジョブです.対話的に処理を実行する場合やGUIアプリケーションを起動する場合は,インタラクティブジョブを投入してください.

== バッチジョブ ==
行 5: 行 9:
★qsubコマンドでのジョブ投入方法やqsubコマンドの主なオプションを記載する

==== サンプルスクリプト:Intel MPI - Intelコンパイラを使用する場合 ====

{{{

### sample
#!/bin/sh
#PBS -q rchq
#PBS -l nodes=1:ppn=16
MPI_PROCS=`wc -l $PBS_NODEFILE | awk '{print $1}'`
PBS Professional用の実行スクリプトを作成し,qsubコマンドで次のようにジョブを投入します.

{{{
$ qsub -q キュー名 実行スクリプト名
}}}
例えば,研究用キューwSrchqにジョブを投入する場合は次のようにします.

{{{
$ qsub -q wSrchq 実行スクリプト名
}}}
=== qsubコマンドのオプション ===
主なオプションを以下に示します.
||オプション ||使用例 ||意味 ||
||-e ||-e filename ||標準エラー出力の内容を指定されたファイル名に出力する.-eオプションが指定されていない場合は,qsubコマンドが実行されたディレクトリ上に作成される.その際のファイル名は“ジョブ名.eジョブ番号”になる. ||
||-o ||-o filename ||標準出力の内容を指定されたファイル名に出力する.-oオプションが指定されていない場合は,qsubコマンドが実行されたディレクトリ上に作成される.その際のファイル名は“ジョブ名.oジョブ番号”になる. ||
||-j ||-j join ||標準出力,標準エラー出力を1個のファイルにマージするかしないかの動作を指定する.<<BR>>-j oe:標準出力に標準エラー出力をマージする<<BR>>-j eo:標準エラー出力に標準出力をマージする<<BR>>-j n: 標準出力と標準エラー出力をマージしない(デフォルト) ||
||-q ||-q destination ||ジョブを投入するキューを指定する. ||
||-l ||-l resource_list ||ジョブの実行に必要なリソース資源を指定する. ||
||-N ||-N name ||ジョブ名を指定する(文字数は15文字まで).デフォルトはスクリプトでジョブが投入された場合は,スクリプトのファイル名となる.そうでない場合は,“STDIN”になる. ||
||-m ||-m mail_events ||ジョブの状態をメールで通知する指定を行う.<<BR>>-m n:メールを送信しない<<BR>>-m a:異常終了時<<BR>>-m b:処理開始時<<BR>>-m e:処理終了時 ||
||-M ||-M user_list ||メールを送信するメールアドレスを指定する. ||
||<style="&quot; &amp; quot; &amp; amp; quot; &amp; amp; amp; quot; &amp; amp; amp; amp; quot; &amp; amp; amp; amp; amp; quot;text-align:center&amp; amp; amp; amp; amp; quot; &amp; amp; amp; amp; quot; &amp; amp; amp; quot; &amp; amp; quot; &amp; quot; &quot;" |2>-v ||-v DOCKER_IMAGE=<image> ||指定したDockerイメージ上でジョブを実行. ||
||-v SINGULARITY_IMAGE=<image> ||指定したSingularityイメージ上でジョブを実行. ||
||-I ||-I ||インタラクティブ(対話型)ジョブを実行します. ||

-lオプションで指定可能な主なリソースは下記の通りです。
||リソース名 ||説明 ||値 ||
||select ||ノード数 ||1以上の整数 ||
||ncpus ||CPUコア数/ノード ||1以上の整数 ||
||mpiprocs ||MPIプロセス数/ノード ||1以上の整数 ||
||mem ||メモリ使用量/ノード ||整数<mb|gb> ||
||ngpus ||GPU使用数/ノード ||0以上の整数 ||
||walltime ||最大実行時間 ||HH:MM:SS ||


=== 実行スクリプトにおけるオプションの指定 ===
qsubコマンドのオプションは実行スクリプトの2行目以降で指定することもできます.例えば,スレッド並列を行う場合,並列数の指定は実行スクリプト中で次のように行います.ncpusの数値に合わせて環境変数 OMP_NUM_THREADS が自動的に設定されます.

{{{
#PBS -l select=使用ノード数:ncpus=占有CPUコア数(並列数)
}}}
例:1ノードを利用し,ノード内の並列数を4とした場合

{{{
#PBS -l select=1:ncpus=4
}}}
MPIによるプロセス並列を行う場合,並列数の指定は実行スクリプト中で次のように行います.

{{{
#PBS -l select=使用ノード数:ncpus=1ノードあたりの占有CPUコア数:mpiprocs=1ノードあたりのMPIプロセス数
}}}
例:1ノードを利用し,ノード内のプロセス数を4とした場合

{{{
#PBS -l select=1:ncpus=4:mpiprocs=4
}}}
例:2ノードを利用し,ノード内の並列数を2とした場合

{{{
#PBS -l select=2:ncpus=2:mpiprocs=2
}}}
利用するメモリ容量を指定して実行したい場合は,実行スクリプト中で次のように記述します.

{{{
#PBS -l select=使用ノード数:mem=1ノードあたりのメモリ容量:ncpus=1ノードあたりの並列数
}}}
例:1ノードを利用し,ノード内のスレッド並列数を14,ジョブあたりのメモリ容量を96GBとした場合

{{{
#PBS -l select=1:mem=96gb:ncpus=14
}}}
利用する演算ノードを指定して実行したい場合は,次のように記述します.

{{{
#PBS -l select=1:vnode=ホストA:ncpus=ホストAでの並列数:vnode=ホストB:ncpus=ホストBでの並列数,・・・
}}}
例:演算ノードxsnd10,xsnd11を利用し,各ノード内の並列数を28とした場合

{{{
#PBS -l select=1:vnode=xsnd10:ncpus=28+vnode=xsnd11:ncpus=28
}}}
* 演算ノードのホスト名はxsnd00~xsnd14です(システム構成-ハードウェア構成 参照).

* xsnd00~xsnd14はTesla V100を各2枚搭載しています.

GPGPUを指定して実行したい場合は,次のように記述します.ngpusにはノードあたりのGPU数(0~2)を指定します.GPGPUはgSrchq, gLrchq, gEduqで使用可能です.

{{{
#PBS -l select=1:ngpus=<GPU数>
}}}
ジョブ実行時間を指定して実行したい場合は,次のように記述します.

{{{
#PBS -l walltime=hh:mm:ss
}}}
例:ジョブ実行時間を336時間とする場合

{{{
#PBS -l walltime=336:00:00
}}}
=== サンプルスクリプト:逐次実行 ===
{{{
#!/bin/bash
#PBS -q wLrchq
#PBS -l select=1:ncpus=1
#PBS -v DOCKER_IMAGE=prg-env:latest

ulimit -c 0 # avoid generating core files
source /etc/profile # enable module command
. /common/intel-2022/compiler/latest/env/vars.sh # for Intel compiler
. /common/intel-2022/mkl/latest/env/vars.sh # for Intel MKL
行 18: 行 123:
mpirun -np $MPI_PROCS ./a.out

}}}
* ジョブの投入先(eduq, rchq)はスクリプト内でも指定できます.

==== サンプルスクリプト:OpenMPI - Intelコンパイラを使用する場合 ====

{{{

### sample
#!/bin/sh
#PBS -q rchq
#PBS -l nodes=1:ppn=16
MPI_PROCS=`wc -l $PBS_NODEFILE | awk '{print $1}'`

module unload intelmpi.intel
module load openmpi.intel
./test.x
}}}
=== サンプルスクリプト:MPI/OpenMPハイブリッド並列(2プロセス,2スレッド/プロセス) ===
{{{
#!/bin/bash
#PBS -q wLrchq
#PBS -l select=1:ncpus=2:mpiprocs=2
#PBS -v DOCKER_IMAGE=mpi-env:latest,DOCKER_OPTIONS="--network=overlaynw"

ulimit -c 0 # avoid generating core files
source /etc/profile # enable module command
. /common/intel-2022/compiler/latest/env/vars.sh # Intel compiler
. /common/intel-2022/mpi/latest/env/vars.sh # Intel MPI
. /common/intel-2022/mkl/latest/env/vars.sh # Intel MKL
export OMP_NUM_THREADS=2
行 38: 行 141:
mpirun -np $MPI_PROCS ./a.out

}}}

* ジョブの投入先(eduq, rchq)はスクリプト内でも指定できます.

==== サンプルスクリプト:GPGPUプログラムを利用する場合 ====

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:GPU:ppn=1
#PBS -q eduq

cd $PBS_O_WORKDIR

module load cuda-10.0

./a.out

}}}

=== ANSYS Multiphysicsジョブ ===
==== シングルジョブ ====
以下に,実行スクリプト例を示します.

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=1
#PBS -q eduq

module load ansys14.5
mpirun -np 2 test.x
}}}
=== サンプルスクリプト:GPGPUを利用するプログラムの実行 ===
{{{
#!/bin/bash
#PBS -q gLrchq
#PBS -l select=1:ncpus=1:ngpus=1
#PBS -v DOCKER_IMAGE=prg-env:latest

ulimit -c 0 # avoid generating core files
source /etc/profile # enable module command
行 76: 行 155:
ansys145 -b nolist -p AA_T_A -i vm1.dat -o vm1.out -j vm1

}}}

*vm1.datは/common/ansys14.5/ansys_inc/v145/ansys/data/verifにあります.

==== 並列ジョブ ====
以下に,実行スクリプト例を示します.

例:Shared Memory ANSYSを用いる場合

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=4
#PBS -q eduq

module load ansys14.5

cd $PBS_O_WORKDIR

ansys145 -b nolist -p AA_T_A -i vm141.dat -o vm141.out -j vm141 -np 4

}}}

例:Distributed ANSYSを用いる場合

{{{

### sample
#!/bin/sh
#PBS -l nodes=2:ppn=2
#PBS -q eduq

module load ansys14.5

cd $PBS_O_WORKDIR

ansys145 -b nolist -p AA_T_A -i vm141.dat -o vm141.out -j vm141 -np 4 -dis

}}}

*vm141.datは/common/ansys14.5/ansys_inc/v145/ansys/data/verifにあります.


=== ANSYS HFSSジョブ ===

[[attachment:ansys-hfss-16.1-manual.pdf|ANSYS HFSS利用マニュアル]]に利用方法の詳細が説明されています。
そちらをご参照下さい。


=== ANSYS CFXジョブ ===
==== シングルジョブ ====
以下に,実行スクリプト例を示します.

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=1
#PBS -q eduq

module load ansys14.5

cd $PBS_O_WORKDIR

cfx5solve -def StaticMixer.def

}}}

*StaticMixer.defは/common/ansys14.5/ansys_inc/v145/CFX/examplesにあります.

==== 並列ジョブ ====
以下に,実行スクリプト例を示します.

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=4
#PBS -q eduq

module load ansys14.5

cd $PBS_O_WORKDIR

cfx5solve -def StaticMixer.def -part 4 -start-method 'Intel MPI Local Parallel'

}}}

*StaticMixer.defは/common/ansys14.5/ansys_inc/v145/CFX/examplesにあります.


=== ABAQUSジョブ ===
==== シングルジョブ ====
以下に,実行スクリプト例を示します.

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=1
#PBS -q eduq

module load abaqus-6.12-3

cd $PBS_O_WORKDIR

abaqus job=1_mass_coarse

}}}

*1_mass_coarse.inpは/common/abaqus-6.12-3/6.12-3/samples/job_archive/samples.zipにあります.

=== COMSOL Multiphysicsジョブ ===


=== GAUSSIANジョブ ===
サンプル入力ファイル(methane.com)

{{{
%NoSave
%Mem=512MB
%NProcShared=4
%chk=methane.chk
#MP2/6-31G opt

methane

0 1
 C -0.01350511 0.30137653 0.27071342
 H 0.34314932 -0.70743347 0.27071342
 H 0.34316773 0.80577472 1.14436492
 H 0.34316773 0.80577472 -0.60293809
 H -1.08350511 0.30138971 0.27071342
}}}
==== シングルジョブ ====
以下に,実行スクリプト例を示します.

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=1
#PBS -q eduq

module load gaussian09-C.01

cd $PBS_O_WORKDIR

g09 methane.com

}}}

==== 並列ジョブ ====
以下に,実行スクリプト例を示します.

{{{

### sample
#!/bin/sh
#PBS -l nodes=1:ppn=4,mem=3gb,pvmem=3gb
#PBS -q eduq

cd $PBS_O_WORKDIR

module load gaussian09-C.01

g09 methane.com

}}}

=== Patranジョブ ===
./test.x
}}}

== 標準/最大リソースの確認 ==
各キューの標準/最大リソースは下記コマンドで確認できます。

{{{
qstat -Qf <キュー名>
}}}
行 253: 行 166:
=== ジョブ投入方法 ===
qsubの-Iオプションを使用することで、対話的にジョブを実行することができます。'''このときのキューはwEduqとgEduqのいずれかを指定してください。'''<<BR>> 下記の例では2CPUコア、メモリ16GiB、1GPUのリソースを割当て、bashを起動しジョブの中で対話型操作(ホスト名確認、GPU確認)を行う場合の例です。GPGPUはジョブに割当てられたGPGPUのみ表示されます。

{{{
[*****@xdev08 ~]$ qsub -I -q gEduq -l select=1:ncpus=1:mem=8g:ngpus=1 -v SINGULARITY_IMAGE=prg-env:latest -- bash
qsub: waiting for job 2401828.xregistry0 to start
qsub: job 2401828.xregistry0 ready

[singularity] version=3.9.9, image=prg-env:latest
Singularity> nvidia-smi
Thu May 2 14:39:59 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03 Driver Version: 510.47.03 CUDA Version: 11.6 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... On | 00000000:3B:00.0 Off | 0 |
| N/A 31C P0 23W / 250W | 0MiB / 16384MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
Singularity> exit
exit

qsub: job 2401828.xregistry0 completed
}}}
行 255: 行 202:

== 利用リソースの指定 ==
'''ジョブは,そのジョブが実行されるコンテナイメージを必ず指定する必要があります.''' DockerまたはSingularityコンテナ上でジョブを実行することが可能です。 Dockerを使用する場合は-v DOCKER_IMAGE=<イメージ名>、Singularityを使用する場合はSINGULARITY_IMAGE=<イメージ名>を指定してジョブを起動します。 指定可能なイメージ名は下記コマンドで確認できます。

{{{
[*****@xdev02 ~]$ showimages
conda3/chainer:6.3.0-ompi
huggingface/transformers-pytorch-gpu:4.3.2
imc.tut.ac.jp/centos7:2019.09
imc.tut.ac.jp/centos7:2021.11
imc.tut.ac.jp/chainer-cuda101:7.8.1
imc.tut.ac.jp/debian-nlp:20221031
imc.tut.ac.jp/scip:8.0.0
imc.tut.ac.jp/scip-cplex:8.0.0-2211
imc.tut.ac.jp/transformers-pytorch-cuda101:4.3.2
imc.tut.ac.jp/transformers-pytorch-cuda101:4.4.2
imc.tut.ac.jp/transformers-pytorch-cuda101-py37:4.11.2
imc.tut.ac.jp/transformers-pytorch-cuda101-py37:4.24.0
imc.tut.ac.jp/transformers-pytorch-cuda116:4.24.0
imc.tut.ac.jp/transformers-pytorch-cuda116:4.25.1
imc.tut.ac.jp/transformers-pytorch-cuda118:4.31.0
imc.tut.ac.jp/transformers-pytorch-cuda118:4.36.0
imc.tut.ac.jp/transformers-pytorch-cuda118:4.37.2
imc.tut.ac.jp/ubuntu18.04:2020.01
imc.tut.ac.jp/ubuntu18.04:2020.02
jparacrawl-fairseq:latest
mpi-env:latest
mpi-env:2020.03.01
mpi-env:2020.03
mpi-env:2022.05.14a
mpi-env:2022.05.14b
mpi-env:2023.02
...
}}}
=== Dockerジョブの実行例 ===
DockerジョブはDOCKER_IMAGEで指定したイメージのコンテナを作成し、コンテナ上でジョブを起動します。 Dockerイメージにサービス(EntryPoint)がある場合は、各サービスにアクセスするIPアドレス:ポート番号が表示されます。Dockerジョブのホスト名は<割当ノード名>-<ジョブ番号>になります。 下記の例ではTensorflowコンテナ上でbashを起動し、pythonでTensorflowをインポートしています。

{{{
-bash-4.2$ qsub -I -q gEduq -l select=1:ncpus=2:mem=16g:ngpus=1 \
  -v DOCKER_IMAGE=nvcr.io/nvidia/tensorflow:19.07-py3 -- bash
qsub: waiting for job 580.xregistry0 to start
qsub: job 580.xregistry0 ready

Access Port:
        <proto>://133.15.52.212:6142/ -> container port 6064
        <proto>://133.15.52.212:6227/ -> container port 8888
        <proto>://133.15.52.212:6427/ -> container port 6006

z991212@xsnd00-580-xregistry0:/home/home1/z991212$ uname -n
xsnd00-580-xregistry0
z991212@xsnd00-580-xregistry0:/home/home1/z991212$ python -c "import tensorflow"
2019-09-05 11:19:08.962826: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
z991212@xsnd00-580-xregistry0:/home/home1/z991212$ exit
exit

qsub: job 580.xregistry0 completed
}}}
=== Singularityジョブの実行例 ===
SingularityジョブはSINGULARITY_IMAGEで指定したイメージのコンテナを作成し、コンテナ上でジョブを起動します。 Singularityではイメージ内のサービス(EntryPoint)は使用できません。Singularityジョブのホスト名は通常ジョブと同様に<割当てノード名>になります。 下記の例ではTensorflowコンテナ上でbashを起動し、pythonでTensorflowをインポートしています。

{{{
-bash-4.2$ qsub -I -q gEduq -l select=1:ncpus=2:mem=16g:ngpus=1 \
  -v SINGULARITY_IMAGE=nvcr.io/nvidia/tensorflow:19.07-py3 -- bash
qsub: waiting for job 581.xregistry0 to start
qsub: job 581.xregistry0 ready

[singularity] version=3.3.0-1, image=nvcr.io/nvidia/tensorflow:19.07-py3
z991212@xsnd00:/home/home1/z991212$ uname -n
xsnd00.edu.tut.ac.jp
z991212@xsnd00:/home/home1/z991212$ python -c "import tensorflow"
2019-09-05 20:20:25.580823: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
z991212@xsnd00:/home/home1/z991212$ exit
exit

qsub: job 581.xregistry0 completed
}}}
行 259: 行 278:
=== ジョブの状態を確認する ===
ジョブ,キューの状態確認にはqstatコマンドを利用します.

(1) ジョブキューの状態表示

{{{
qstat -q
}}}
(2) ジョブの状態表示

{{{
qstat
}}}
(3) ジョブのリソース割当て状況やQueue状態での待ち要因を表示

{{{
qstat -asw
}}}
(4) 空きリソースの確認

{{{
pbsnodes -ajS
}}}
=== 投入したジョブをキャンセルする ===
ジョブのキャンセルにはqdelコマンドを使用します.

{{{
qdel jobID
}}}
job IDはqstatコマンドより確認してください.

Running状態ジョブがキャンセルできない場合は下記コマンドで強制的にジョブを終了することができます。

{{{
qdel -Wforce jobID
}}}

ジョブの実行

ジョブ環境

本システムでサポートするジョブ利用形態は,コンテナ上でのジョブ利用だけとなります.このため,利用者はジョブ投入時のコマンドオプションまたはジョブスクリプトの指示文で起動コンテナを指定する必要があります.コンテナ上では,コンパイル,シリアルプログラムや並列プログラム(SMP,MPI)の実行,研究用アプリケーションの実行が可能です.
また,ジョブの実行方法は2つあります.PBS Professionalを使って実行されるバッチジョブと,直接実行するインタラクティブジョブです.対話的に処理を実行する場合やGUIアプリケーションを起動する場合は,インタラクティブジョブを投入してください.

バッチジョブ

ジョブ投入方法

PBS Professional用の実行スクリプトを作成し,qsubコマンドで次のようにジョブを投入します.

$ qsub -q キュー名 実行スクリプト名

例えば,研究用キューwSrchqにジョブを投入する場合は次のようにします.

$ qsub -q wSrchq 実行スクリプト名

qsubコマンドのオプション

主なオプションを以下に示します.

オプション

使用例

意味

-e

-e filename

標準エラー出力の内容を指定されたファイル名に出力する.-eオプションが指定されていない場合は,qsubコマンドが実行されたディレクトリ上に作成される.その際のファイル名は“ジョブ名.eジョブ番号”になる.

-o

-o filename

標準出力の内容を指定されたファイル名に出力する.-oオプションが指定されていない場合は,qsubコマンドが実行されたディレクトリ上に作成される.その際のファイル名は“ジョブ名.oジョブ番号”になる.

-j

-j join

標準出力,標準エラー出力を1個のファイルにマージするかしないかの動作を指定する.
-j oe:標準出力に標準エラー出力をマージする
-j eo:標準エラー出力に標準出力をマージする
-j n: 標準出力と標準エラー出力をマージしない(デフォルト)

-q

-q destination

ジョブを投入するキューを指定する.

-l

-l resource_list

ジョブの実行に必要なリソース資源を指定する.

-N

-N name

ジョブ名を指定する(文字数は15文字まで).デフォルトはスクリプトでジョブが投入された場合は,スクリプトのファイル名となる.そうでない場合は,“STDIN”になる.

-m

-m mail_events

ジョブの状態をメールで通知する指定を行う.
-m n:メールを送信しない
-m a:異常終了時
-m b:処理開始時
-m e:処理終了時

-M

-M user_list

メールを送信するメールアドレスを指定する.

-v

-v DOCKER_IMAGE=<image>

指定したDockerイメージ上でジョブを実行.

-v SINGULARITY_IMAGE=<image>

指定したSingularityイメージ上でジョブを実行.

-I

-I

インタラクティブ(対話型)ジョブを実行します.

-lオプションで指定可能な主なリソースは下記の通りです。

リソース名

説明

select

ノード数

1以上の整数

ncpus

CPUコア数/ノード

1以上の整数

mpiprocs

MPIプロセス数/ノード

1以上の整数

mem

メモリ使用量/ノード

整数<mb|gb>

ngpus

GPU使用数/ノード

0以上の整数

walltime

最大実行時間

HH:MM:SS

実行スクリプトにおけるオプションの指定

qsubコマンドのオプションは実行スクリプトの2行目以降で指定することもできます.例えば,スレッド並列を行う場合,並列数の指定は実行スクリプト中で次のように行います.ncpusの数値に合わせて環境変数 OMP_NUM_THREADS が自動的に設定されます.

#PBS -l select=使用ノード数:ncpus=占有CPUコア数(並列数)

例:1ノードを利用し,ノード内の並列数を4とした場合

#PBS -l select=1:ncpus=4

MPIによるプロセス並列を行う場合,並列数の指定は実行スクリプト中で次のように行います.

#PBS -l select=使用ノード数:ncpus=1ノードあたりの占有CPUコア数:mpiprocs=1ノードあたりのMPIプロセス数

例:1ノードを利用し,ノード内のプロセス数を4とした場合

#PBS -l select=1:ncpus=4:mpiprocs=4

例:2ノードを利用し,ノード内の並列数を2とした場合

#PBS -l select=2:ncpus=2:mpiprocs=2

利用するメモリ容量を指定して実行したい場合は,実行スクリプト中で次のように記述します.

#PBS -l select=使用ノード数:mem=1ノードあたりのメモリ容量:ncpus=1ノードあたりの並列数

例:1ノードを利用し,ノード内のスレッド並列数を14,ジョブあたりのメモリ容量を96GBとした場合

#PBS -l select=1:mem=96gb:ncpus=14

利用する演算ノードを指定して実行したい場合は,次のように記述します.

#PBS -l select=1:vnode=ホストA:ncpus=ホストAでの並列数:vnode=ホストB:ncpus=ホストBでの並列数,・・・

例:演算ノードxsnd10,xsnd11を利用し,各ノード内の並列数を28とした場合

#PBS -l select=1:vnode=xsnd10:ncpus=28+vnode=xsnd11:ncpus=28

* 演算ノードのホスト名はxsnd00~xsnd14です(システム構成-ハードウェア構成 参照).

* xsnd00~xsnd14はTesla V100を各2枚搭載しています.

GPGPUを指定して実行したい場合は,次のように記述します.ngpusにはノードあたりのGPU数(0~2)を指定します.GPGPUはgSrchq, gLrchq, gEduqで使用可能です.

#PBS -l select=1:ngpus=<GPU数>

ジョブ実行時間を指定して実行したい場合は,次のように記述します.

#PBS -l walltime=hh:mm:ss

例:ジョブ実行時間を336時間とする場合

#PBS -l walltime=336:00:00

サンプルスクリプト:逐次実行

#PBS -q wLrchq
#PBS -l select=1:ncpus=1
#PBS -v DOCKER_IMAGE=prg-env:latest

ulimit -c 0          # avoid generating core files
source /etc/profile  # enable module command
. /common/intel-2022/compiler/latest/env/vars.sh  # for Intel compiler
. /common/intel-2022/mkl/latest/env/vars.sh       # for Intel MKL

cd $PBS_O_WORKDIR

./test.x

サンプルスクリプト:MPI/OpenMPハイブリッド並列(2プロセス,2スレッド/プロセス)

#PBS -q wLrchq
#PBS -l select=1:ncpus=2:mpiprocs=2
#PBS -v DOCKER_IMAGE=mpi-env:latest,DOCKER_OPTIONS="--network=overlaynw"

ulimit -c 0          # avoid generating core files
source /etc/profile  # enable module command
. /common/intel-2022/compiler/latest/env/vars.sh  # Intel compiler
. /common/intel-2022/mpi/latest/env/vars.sh       # Intel MPI
. /common/intel-2022/mkl/latest/env/vars.sh       # Intel MKL
export OMP_NUM_THREADS=2

cd $PBS_O_WORKDIR

mpirun -np 2 test.x

サンプルスクリプト:GPGPUを利用するプログラムの実行

#PBS -q gLrchq
#PBS -l select=1:ncpus=1:ngpus=1
#PBS -v DOCKER_IMAGE=prg-env:latest

ulimit -c 0          # avoid generating core files
source /etc/profile  # enable module command

cd $PBS_O_WORKDIR

./test.x

標準/最大リソースの確認

各キューの標準/最大リソースは下記コマンドで確認できます。

qstat -Qf <キュー名>

インタラクティブジョブ

ジョブ投入方法

qsubの-Iオプションを使用することで、対話的にジョブを実行することができます。このときのキューはwEduqとgEduqのいずれかを指定してください。
下記の例では2CPUコア、メモリ16GiB、1GPUのリソースを割当て、bashを起動しジョブの中で対話型操作(ホスト名確認、GPU確認)を行う場合の例です。GPGPUはジョブに割当てられたGPGPUのみ表示されます。

[*****@xdev08 ~]$ qsub -I -q gEduq -l select=1:ncpus=1:mem=8g:ngpus=1 -v SINGULARITY_IMAGE=prg-env:latest -- bash
qsub: waiting for job 2401828.xregistry0 to start
qsub: job 2401828.xregistry0 ready

[singularity] version=3.9.9, image=prg-env:latest
Singularity> nvidia-smi
Thu May  2 14:39:59 2024
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla V100-PCIE...  On   | 00000000:3B:00.0 Off |                    0 |
| N/A   31C    P0    23W / 250W |      0MiB / 16384MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
Singularity> exit
exit

qsub: job 2401828.xregistry0 completed

コンテナイメージの指定

ジョブは,そのジョブが実行されるコンテナイメージを必ず指定する必要があります. DockerまたはSingularityコンテナ上でジョブを実行することが可能です。 Dockerを使用する場合は-v DOCKER_IMAGE=<イメージ名>、Singularityを使用する場合はSINGULARITY_IMAGE=<イメージ名>を指定してジョブを起動します。 指定可能なイメージ名は下記コマンドで確認できます。

[*****@xdev02 ~]$ showimages
conda3/chainer:6.3.0-ompi
huggingface/transformers-pytorch-gpu:4.3.2
imc.tut.ac.jp/centos7:2019.09
imc.tut.ac.jp/centos7:2021.11
imc.tut.ac.jp/chainer-cuda101:7.8.1
imc.tut.ac.jp/debian-nlp:20221031
imc.tut.ac.jp/scip:8.0.0
imc.tut.ac.jp/scip-cplex:8.0.0-2211
imc.tut.ac.jp/transformers-pytorch-cuda101:4.3.2
imc.tut.ac.jp/transformers-pytorch-cuda101:4.4.2
imc.tut.ac.jp/transformers-pytorch-cuda101-py37:4.11.2
imc.tut.ac.jp/transformers-pytorch-cuda101-py37:4.24.0
imc.tut.ac.jp/transformers-pytorch-cuda116:4.24.0
imc.tut.ac.jp/transformers-pytorch-cuda116:4.25.1
imc.tut.ac.jp/transformers-pytorch-cuda118:4.31.0
imc.tut.ac.jp/transformers-pytorch-cuda118:4.36.0
imc.tut.ac.jp/transformers-pytorch-cuda118:4.37.2
imc.tut.ac.jp/ubuntu18.04:2020.01
imc.tut.ac.jp/ubuntu18.04:2020.02
jparacrawl-fairseq:latest
mpi-env:latest
mpi-env:2020.03.01
mpi-env:2020.03
mpi-env:2022.05.14a
mpi-env:2022.05.14b
mpi-env:2023.02
...

Dockerジョブの実行例

DockerジョブはDOCKER_IMAGEで指定したイメージのコンテナを作成し、コンテナ上でジョブを起動します。 Dockerイメージにサービス(EntryPoint)がある場合は、各サービスにアクセスするIPアドレス:ポート番号が表示されます。Dockerジョブのホスト名は<割当ノード名>-<ジョブ番号>になります。 下記の例ではTensorflowコンテナ上でbashを起動し、pythonでTensorflowをインポートしています。

-bash-4.2$ qsub -I -q gEduq -l select=1:ncpus=2:mem=16g:ngpus=1 \
  -v DOCKER_IMAGE=nvcr.io/nvidia/tensorflow:19.07-py3 -- bash
qsub: waiting for job 580.xregistry0 to start
qsub: job 580.xregistry0 ready

Access Port:
        <proto>://133.15.52.212:6142/ -> container port 6064
        <proto>://133.15.52.212:6227/ -> container port 8888
        <proto>://133.15.52.212:6427/ -> container port 6006

z991212@xsnd00-580-xregistry0:/home/home1/z991212$ uname -n
xsnd00-580-xregistry0
z991212@xsnd00-580-xregistry0:/home/home1/z991212$ python -c "import tensorflow"
2019-09-05 11:19:08.962826: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
z991212@xsnd00-580-xregistry0:/home/home1/z991212$ exit
exit

qsub: job 580.xregistry0 completed

Singularityジョブの実行例

SingularityジョブはSINGULARITY_IMAGEで指定したイメージのコンテナを作成し、コンテナ上でジョブを起動します。 Singularityではイメージ内のサービス(EntryPoint)は使用できません。Singularityジョブのホスト名は通常ジョブと同様に<割当てノード名>になります。 下記の例ではTensorflowコンテナ上でbashを起動し、pythonでTensorflowをインポートしています。

-bash-4.2$ qsub -I -q gEduq -l select=1:ncpus=2:mem=16g:ngpus=1 \
  -v SINGULARITY_IMAGE=nvcr.io/nvidia/tensorflow:19.07-py3 -- bash
qsub: waiting for job 581.xregistry0 to start
qsub: job 581.xregistry0 ready

[singularity] version=3.3.0-1, image=nvcr.io/nvidia/tensorflow:19.07-py3
z991212@xsnd00:/home/home1/z991212$ uname -n
xsnd00.edu.tut.ac.jp
z991212@xsnd00:/home/home1/z991212$ python -c "import tensorflow"
2019-09-05 20:20:25.580823: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.1
z991212@xsnd00:/home/home1/z991212$ exit
exit

qsub: job 581.xregistry0 completed

ジョブの管理

ジョブの状態を確認する

ジョブ,キューの状態確認にはqstatコマンドを利用します.

(1) ジョブキューの状態表示

qstat -q

(2) ジョブの状態表示

qstat

(3) ジョブのリソース割当て状況やQueue状態での待ち要因を表示

qstat -asw

(4) 空きリソースの確認

pbsnodes -ajS

投入したジョブをキャンセルする

ジョブのキャンセルにはqdelコマンドを使用します.

qdel jobID

job IDはqstatコマンドより確認してください.

Running状態ジョブがキャンセルできない場合は下記コマンドで強制的にジョブを終了することができます。

qdel -Wforce jobID