ジョブの実行
目次
ジョブ環境
本システムでサポートするジョブ利用形態は,コンテナ上でのジョブ利用だけとなります.このため,利用者はジョブ投入時のコマンドオプションまたはジョブスクリプトの指示文で起動コンテナを指定する必要があります.コンテナ上では,コンパイル,シリアルプログラムや並列プログラム(SMP,MPI)の実行,研究用アプリケーションの実行が可能です.
また,ジョブの実行方法は2つあります.PBS Professionalを使って実行されるバッチジョブと,直接実行するインタラクティブジョブです.対話的に処理を実行する場合やGUIアプリケーションを起動する場合は,インタラクティブジョブを投入してください.
バッチジョブ
ジョブ投入方法
PBS Professional用の実行スクリプトを作成し,qsubコマンドで次のようにジョブを投入します.
$ qsub -q キュー名 実行スクリプト名
例えば,研究用キューgSrchqにジョブを投入する場合は次のようにします.
$ qsub -q gSrchq 実行スクリプト名
並列数の指定は,実行スクリプト中で次のように行います.
#PBS -l select=使用ノード数:mpiprocs=1ノードあたりの並列数
例:1ノードを利用し,ノード内の並列数を16とした場合
#PBS -l select=1:mpiprocs=16
例:4ノードを利用し,各ノード内の並列数を16とした場合
#PBS -l select=4:mpiprocs=16
利用するメモリ容量を指定して実行したい場合は,実行スクリプト中で次のように記述します.
#PBS -l select=使用ノード数:mem=ノードあたりのメモリ容量:mpiprocs=1ノードあたりの並列数
例:1ノードを利用し,ノード内の並列数を16,ジョブあたりのメモリ容量を16GBとした場合
#PBS -l select=1:mem=16gb:mpiprocs=16
利用する演算ノードを指定して実行したい場合は,次のように記述します.
#PBS -l select=1:vnode=ホストA:mpiprocs=ホストAでの並列数+1:vnode=ホストB:mpiprocs=ホストBでの並列数,・・・
例:演算ノードxsnd10,xsnd11を利用し,各ノード内の並列数を16とした場合
#PBS -l select=1:vnode=xsnd10:mpiprocs=16+vnode=xsnd11:mpiprocs=16
* 演算ノードのホスト名はxsnd00~xsnd13です(システム構成-ハードウェア構成 参照).
* xsnd00~xsnd13は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
qsubコマンドの主なオプションを以下に示します.
オプション |
使用例 |
意味 |
-e |
-e filename |
標準エラー出力の内容を指定されたファイル名に出力する.-eオプションが指定されていない場合は,qsubコマンドが実行されたディレクトリ上に作成される.その際のファイル名は“ジョブ名.eジョブ番号”になる. |
-o |
-o filename |
標準出力の内容を指定されたファイル名に出力する.-oオプションが指定されていない場合は,qsubコマンドが実行されたディレクトリ上に作成される.その際のファイル名は“ジョブ名.oジョブ番号”になる. |
-j |
-j join |
標準出力,標準エラー出力を1個のファイルにマージするかしないかの動作を指定する. |
-q |
-q destination |
ジョブを投入するキューを指定する. |
-l |
-l resource_list |
ジョブの実行に必要なリソース資源を指定する. |
-N |
-N name |
ジョブ名を指定する(文字数は15文字まで).デフォルトはスクリプトでジョブが投入された場合は,スクリプトのファイル名となる.そうでない場合は,“STDIN”になる. |
-m |
-m mail_events |
ジョブの状態をメールで通知する指定を行う. |
-M |
-M user_list |
メールを送信するメールアドレスを指定する. |
-v |
-v DOCKER_IMAGE=<image> |
指定したDockerイメージ上でジョブを実行. |
-v SINGULARITY_IMAGE=<image> |
指定したSingularityイメージ上でジョブを実行. |
|
-I |
-I |
インタラクティブ(対話型)ジョブを実行します. |
サンプルスクリプト:GPGPUプログラムを利用する場合
### sample #!/bin/sh #PBS -q gSrchq #PBS -l select=1:ncpus=1:ngpus=2:host=xsnd01 #PBS -v DOCKER_IMAGE=prg-env:2019.08 cat $PBS_NODEFILE ./cuda-sample-program
インタラクティブジョブ
ジョブ投入方法
qsubの-Iオプションを使用することで、対話的にジョブを実行することができます。
下記の例では2CPUコア、メモリ16GiB、1GPUのリソースを割当て、bashを起動しジョブの中で対話型操作(ホスト名確認、GPU確認)を行う場合の例です。GPGPUはジョブに割当てられたGPGPUのみ表示されます。
-bash-4.2$ qsub -I -q gSrchq -l select=1:ncpus=2:mem=16g:ngpus=1 -- bash qsub: waiting for job 578.xregistry0 to start qsub: job 578.xregistry0 ready bash-4.2$ uname -n xsnd00.edu.tut.ac.jp bash-4.2$ nvidia-smi Thu Sep 5 19:58:48 2019 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 418.67 Driver Version: 418.67 CUDA Version: 10.1 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla V100-PCIE... On | 00000000:3B:00.0 Off | 0 | | N/A 30C P0 23W / 250W | 0MiB / 16130MiB | 0% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+ bash-4.2$ exit exit qsub: job 578.xregistry0 completed
コンテナイメージの指定
DockerまたはSingularityコンテナ上でジョブを実行することが可能です。 Dockerを使用する場合は-v DOCKER_IMAGE=<イメージ名>、Singularityを使用する場合はSINGULARITY_IMAGE=<イメージ名>を指定してジョブを起動します。 指定可能なイメージ名は下記コマンドで確認できます。
-bash-4.2$ showimages conda3/chainer:6.3.0-ompi nvcr.io/nvidia/caffe:19.07-py2 nvcr.io/nvidia/caffe2:18.08-py3 nvcr.io/nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 nvcr.io/nvidia/digits:19.07-caffe nvcr.io/nvidia/mxnet:19.07-py3 nvcr.io/nvidia/pytorch:19.07-py3 nvcr.io/nvidia/tensorflow:19.07-py2 nvcr.io/nvidia/tensorflow:19.07-py3 nvidia/cuda:10.1-cudnn7-devel-centos7 prg-env:2019.08
Dockerジョブの実行例
DockerジョブはDOCKER_IMAGEで指定したイメージのコンテナを作成し、コンテナ上でジョブを起動します。 Dockerイメージにサービス(EntryPoint)がある場合は、各サービスにアクセスするIPアドレス:ポート番号が表示されます。Dockerジョブのホスト名は<割当ノード名>-<ジョブ番号>になります。 下記の例ではTensorflowコンテナ上でbashを起動し、pythonでTensorflowをインポートしています。
-bash-4.2$ qsub -I -q gSrchq -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 gSrchq -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
利用リソースの指定
ジョブで使用するリソースを投入するキューの標準値以外を使用する場合は-lオプションで指定します。 各キューの標準/最大リソースは下記コマンドで確認できます。
qstat -Qf <キュー名>
-lオプションで指定可能な主なリソースは下記の通りです。
リソース名 |
説明 |
値 |
select |
ノード数 |
1以上の整数 |
ncpus |
CPUコア数/ノード |
1以上の整数 |
mem |
メモリ使用量/ノード |
整数<mb|gb> |
ngpus |
GPU使用数/ノード |
0以上の整数 |
walltime |
最大実行時間 |
HH:MM:SS |
ジョブのリソースを指定する-lオプションはwalltimeとリソース指定を別々に指定する必要があります。 (1) 最大実行時間を30分、1ノードあたり4CPUコア、メモリ16GB、2GPUのリソースを使用する場合
#PBS -q gSrchq #PBS -l select=1:ncpus=4:mem=16g:ngpus=2 #PBS -l walltime=00:30:00 cd ${PBS_O_HOME} ./a.out
ジョブの管理
ジョブの状態を確認する
ジョブ,キューの状態確認にはqstatコマンドを利用します.
(1) ジョブキューの状態表示
qstat -q
(2) ジョブの状態表示
qstat
(3) ジョブのリソース割当て状況やQueue状態での待ち要因を表示
qstat -asw
(4) 空きリソースの確認
pbsnodes -ajS
投入したジョブをキャンセルする
ジョブのキャンセルにはqdelコマンドを使用します.
qdel jobID
job IDはqstatコマンドより確認してください.
Running状態ジョブがキャンセルできない場合は下記コマンドで強制的にジョブを終了することができます。
qdel -Wforce jobID