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

 

ページ名: "HowToSubmitJob"の差分
23と62のリビジョン間の差分 (その間の編集: 39回)
2019-09-18 08:20:10時点のリビジョン23
サイズ: 12576
編集者: hitachi28
コメント:
2025-06-09 12:56:45時点のリビジョン62
サイズ: 13891
編集者: yi041
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 2: 行 2:
行 6: 行 5:
本システムでサポートするジョブ利用形態は,コンテナ上でのジョブ利用だけとなります.このため利用者にはジョブ投入時のコマンドオプションまたはジョブスクリプトでの指示文で起動コンテナを指定する必要があります.コンテナ上では,コンパイル,シリアルプログラムや並列プログラム(SMP,MPI)の実行,研究用アプリケーション実行が可能です. バッチジョブとインタラクティブジョブにより,計算サーバを利用することができます.本システムでは,ジョブスケジューラとしてPBS Professionalを採用しており,ジョブの送信,状況確認等はPBS Professionalのコマンドによって行います.対話的に処理を実行する場合やGUIアプリケーションを起動する場合は,インタラクティブジョブを投入してください.それ以外の場合は,ジョブスクリプトを準備しバッチジョブを投入してください.<<BR>> 本システムでサポートするジョブ利用形態は,Singularityコンテナ上でのジョブ利用のみとなります.特に指定しない場合,デフォルトのコンテナイメージが使用されますが,利用者が用意したSingularityコンテナを指定することも可能です.詳しくは"コンテナイメージの指定"の箇所を読んでください.
行 15: 行 14:

例えば,研究用キュー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コマンドの主なオプションを以下に示します.
例えば,研究用キューEduqにジョブを投入する場合は次のようにします.

{{{
$ qsub -q Eduq 実行スクリプト名
}}}
=== qsubコマンドのオプション ===
主なオプションを以下に示します.
行 86: 行 30:
||<|2>-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

}}}
||<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の数値に合わせてOpenMPのスレッド数を指定する環境変数 OMP_NUM_THREADS が自動的に設定されます.
{{{
#PBS -l select=使用ノード数:ncpus=占有CPUコア数(並列数)
}}}

MPIによるプロセス並列を行う場合,並列数の指定は実行スクリプト中で次のように行います.
{{{
#PBS -l select=使用ノード数:ncpus=1ノードあたりの占有CPUコア数:mpiprocs=1ノードあたりのMPIプロセス数
}}}

利用するメモリ容量を指定して実行したい場合は,実行スクリプト中で次のように記述します.
{{{
#PBS -l select=使用ノード数:mem=1ノードあたりのメモリ容量:ncpus=1ノードあたりの並列数
}}}

利用する演算ノードを指定して実行したい場合は,次のように記述します.
{{{
#PBS -l select=1:vnode=ホストA:ncpus=ホストAでの並列数:vnode=ホストB:ncpus=ホストBでの並列数,・・・
}}}

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

* ysnd00~ysnd14はMI210 PCIeを各2枚搭載しています.

GPUを指定して実行したい場合は,次のように記述します.ngpusにはノードあたりのGPU数(0~2)を指定します.GPGPUはsRchq, mRchq, Eduq, iEduqで使用可能です.
{{{
#PBS -l select=1:ngpus=<GPU数>
}}}

ジョブ実行時間を指定して実行したい場合は,次のように記述します.
{{{
#PBS -l walltime=hh:mm:ss
}}}

=== サンプルスクリプト:逐次実行 ===
{{{
#!/bin/bash
#PBS -q Eduq
#PBS -l select=1:ncpus=1
#PBS -l walltime=1:00:00

ulimit -c 0 # avoid generating core files
. /etc/profile # enable module command
module load intel # enable use of numerical library

cd $PBS_O_WORKDIR
./test.x
}}}

=== サンプルスクリプト:MPI/OpenMPハイブリッド並列(4CPUコア,2プロセス,2スレッド/プロセス) ===
{{{
#!/bin/bash
#PBS -q Eduq
#PBS -l select=1:ncpus=4:mpiprocs=2

ulimit -c 0           # avoid generating core files
. /etc/profile   # enable module command
module load intel
module load intelmpi

export OMP_NUM_THREADS=2
cd $PBS_O_WORKDIR
mpirun -np 2 test.x
}}}

=== サンプルスクリプト:ノード占有MPI並列(48プロセス) ===
{{{
#!/bin/bash
#PBS -q sRchq
#PBS -l select=1:ncpus=48:mpiprocs=48

ulimit -c 0         # avoid generating core files
. /etc/profile   # enable module command
module load intel
module load intelmpi

export I_MPI_HYDRA_BOOTSTRAP=ssh
export OMP_NUM_THREADS=1
cd $PBS_O_WORKDIR
mpirun -np 56 test.x
}}}

=== サンプルスクリプト:AMD GPUを利用するプログラムの実行 ===
{{{
#!/bin/bash
#PBS -q Eduq
#PBS -l select=1:ncpus=1:ngpus=1
#PBS -v SINGULARYTY_IMAGE=/common/prg_env_amd_2025.01.sif

ulimit -c 0 # avoid generating core files
. /etc/profile # enable module command
cd $PBS_O_WORKDIR
./test.x
}}}

== 標準/最大リソースの確認 ==
各キューの標準/最大リソースは下記コマンドで確認できます.
{{{
qstat -Qf <キュー名>
}}}
行 110: 行 148:
qsubの-Iオプションを使用することで対話にジョブを実行することができます
下記の例では2CPUコアメモリ16GiB1GPUのリソースを割当て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
xs
nd00.edu.tut.ac.jp
bash-4.2$ nvidia-smi
Thu Sep 5 1
9: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 process
es found |
+-----------------------------------------------------------------------------+
bash-4.2$ exit
qsubの-Iオプションを使用することで対話にジョブを実行することができます.このときのキューは Eduq もしくは iEduq のいずれかを指定してください.
下記の例では1CPUコアメモリ8GiB1GPUのリソースを割当てて,bashを起動しジョブの中で対話型操作(ホスト名確認GPU確認)を行う場合の例ですGPUはジョブに割当てられたGPUのみ表示されます
{{{
[******@ydev09 ~]$ qsub -I -q iEduq -l select=1:ncpus=1:mem=8g:ngpus=1 -v SINGULARITY_IMAGE=/common/Singularity_sif/prg_env_amd_2025.01.sif /bin/bash
qsub: waiting for job 1193.ypbs0.edu.tut.ac.jp to start
qsub: job 1193.ypbs0.edu.tut.ac.jp ready

Singularity> hostname
yi
nd00.edu.tut.ac.jp
Singularity>
Singularity> nvidia-smi
Wed May 28 15:
49:15 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.124.06 Driver Version: 570.124.06 CUDA Version: 12.8 |
|----------
-------------------------------+------------------------+----------------------+
| 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 NVIDIA A100 80GB PCIe Off | 00000000:CA:00.0 Off | 0 |
| N/A 40C P0 65W / 300W | 1MiB / 81920MiB | 0% Default |
| | | Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                          |
|
GPU   GI CI PID Type Process name GPU Memory |
|
ID ID Usage |
|=========================================================================================|
| No running
processes found             |
+-----------------------------------------------------------------------------------------+
Singularity> exit
行 141: 行 182:
qsub: job 578.xregistry0 completed
}}}
qsub: job 1193.ypbs0.edu.tut.ac.jp completed

}}}
行 146: 行 187:
DockerまたはSingularityコンテナ上でジョブを実行することが可能です。
Dockerを使用する場合は-v DOCKER_IMAGE=<イメージ名>、Singularityを使用する場合はSINGULARITY_IMAGE=<イメージ名>を指定してジョブを起動します。
指定可能なイメージ名は下記コマンドで確認できます。

{{{
-bash-4.2$ showimages
ジョブはSingularityコンテナ上で実行することが可能です.
イメージを指定する場合はSINGULARITY_IMAGE=<イメージ名>を指定してジョブを起動します.
イメージを指定しない場合は自動で選択されたSingularityイメージによってジョブを起動します.
指定可能なイメージ名はshowimagesコマンドで確認できます.
下記のイメージは旧システム(xdev)のものですが,新システム(ydev)も同様のコマンドでイメージリストが出力されます.
{{{
[*****@ydev02 ~]$ showimages
行 153: 行 195:
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
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
...
}}}

=== Singularityジョブの実行例 ===
SingularityジョブはSINGULARITY_IMAGEで指定したイメージのコンテナを作成し,コンテナ上でジョブを起動します.Singularityではイメージ内のサービス(EntryPoint)は使用できません.Singularityジョブのホスト名は通常ジョブと同様に<割当てノード名>になります.下記の例ではコンテナ上でbashを起動し,pythonでdatetimeをインポートしています.
{{{
[*****@ydev09 ~]$ qsub -I -q Eduq -l select=1:ncpus=2:mem=16g -v SINGULARYTY_IMAGE=/common/Singularity_sif/prg_env_intel_2025.01.sif /bin/bash
qsub: waiting for job 1191.ypbs0.edu.tut.ac.jp to start
qsub: job 1191.ypbs0.edu.tut.ac.jp ready

Singularity> uname -n
ysnd00.edu.tut.ac.jp
Singularity> python3 -c "import datetime"
Singularity> exit
行 188: 行 236:
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のリソースを使用する場合
{{{
#!/bin/bash
#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
qsub: job 1191.ypbs0.edu.tut.ac.jp completed
行 251: 行 249:
行 265: 行 264:
=== 投入したジョブをキャンセルする  === === 投入したジョブをキャンセルする ===
行 267: 行 266:
行 273: 行 271:
Running状態ジョブがキャンセルできない場合は下記コマンドで強制的にジョブを終了することができます Running状態ジョブがキャンセルできない場合は下記コマンドで強制的にジョブを終了することができます

ジョブの実行

ジョブ環境

バッチジョブとインタラクティブジョブにより,計算サーバを利用することができます.本システムでは,ジョブスケジューラとしてPBS Professionalを採用しており,ジョブの送信,状況確認等はPBS Professionalのコマンドによって行います.対話的に処理を実行する場合やGUIアプリケーションを起動する場合は,インタラクティブジョブを投入してください.それ以外の場合は,ジョブスクリプトを準備しバッチジョブを投入してください.
本システムでサポートするジョブ利用形態は,Singularityコンテナ上でのジョブ利用のみとなります.特に指定しない場合,デフォルトのコンテナイメージが使用されますが,利用者が用意したSingularityコンテナを指定することも可能です.詳しくは"コンテナイメージの指定"の箇所を読んでください.

バッチジョブ

ジョブ投入方法

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

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

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

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

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の数値に合わせてOpenMPのスレッド数を指定する環境変数 OMP_NUM_THREADS が自動的に設定されます.

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

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

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

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

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

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

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

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

* ysnd00~ysnd14はMI210 PCIeを各2枚搭載しています.

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

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

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

#PBS -l walltime=hh:mm:ss

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

#PBS -q Eduq
#PBS -l select=1:ncpus=1
#PBS -l walltime=1:00:00

ulimit -c 0             # avoid generating core files
. /etc/profile          # enable module command
module load intel       # enable use of numerical library

cd $PBS_O_WORKDIR
./test.x

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

#PBS -q Eduq
#PBS -l select=1:ncpus=4:mpiprocs=2

ulimit -c 0                     # avoid generating core files
. /etc/profile                  # enable module command
module load intel
module load intelmpi

export OMP_NUM_THREADS=2
cd $PBS_O_WORKDIR
mpirun -np 2 test.x

サンプルスクリプト:ノード占有MPI並列(48プロセス)

#PBS -q sRchq
#PBS -l select=1:ncpus=48:mpiprocs=48

ulimit -c 0                     # avoid generating core files
. /etc/profile                  # enable module command
module load intel
module load intelmpi

export I_MPI_HYDRA_BOOTSTRAP=ssh
export OMP_NUM_THREADS=1
cd $PBS_O_WORKDIR
mpirun -np 56 test.x

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

#PBS -q Eduq
#PBS -l select=1:ncpus=1:ngpus=1
#PBS -v SINGULARYTY_IMAGE=/common/prg_env_amd_2025.01.sif

ulimit -c 0     # avoid generating core files
. /etc/profile  # enable module command
cd $PBS_O_WORKDIR
./test.x

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

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

qstat -Qf <キュー名>

インタラクティブジョブ

ジョブ投入方法

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

[******@ydev09 ~]$ qsub -I -q iEduq -l select=1:ncpus=1:mem=8g:ngpus=1 -v SINGULARITY_IMAGE=/common/Singularity_sif/prg_env_amd_2025.01.sif /bin/bash
qsub: waiting for job 1193.ypbs0.edu.tut.ac.jp to start
qsub: job 1193.ypbs0.edu.tut.ac.jp ready

Singularity> hostname
yind00.edu.tut.ac.jp
Singularity>
Singularity> nvidia-smi
Wed May 28 15:49:15 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.124.06             Driver Version: 570.124.06     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| 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  NVIDIA A100 80GB PCIe          Off |   00000000:CA:00.0 Off |                    0 |
| N/A   40C    P0             65W /  300W |       1MiB /  81920MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

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

qsub: job 1193.ypbs0.edu.tut.ac.jp completed

コンテナイメージの指定

ジョブはSingularityコンテナ上で実行することが可能です. イメージを指定する場合はSINGULARITY_IMAGE=<イメージ名>を指定してジョブを起動します. イメージを指定しない場合は自動で選択されたSingularityイメージによってジョブを起動します. 指定可能なイメージ名はshowimagesコマンドで確認できます. 下記のイメージは旧システム(xdev)のものですが,新システム(ydev)も同様のコマンドでイメージリストが出力されます.

[*****@ydev02 ~]$ 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
...

Singularityジョブの実行例

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

[*****@ydev09 ~]$ qsub -I -q Eduq -l select=1:ncpus=2:mem=16g -v SINGULARYTY_IMAGE=/common/Singularity_sif/prg_env_intel_2025.01.sif /bin/bash
qsub: waiting for job 1191.ypbs0.edu.tut.ac.jp to start
qsub: job 1191.ypbs0.edu.tut.ac.jp ready

Singularity> uname -n
ysnd00.edu.tut.ac.jp
Singularity> python3 -c "import datetime"
Singularity> exit
exit

qsub: job 1191.ypbs0.edu.tut.ac.jp completed

ジョブの管理

ジョブの状態を確認する

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

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

qstat -q

(2) ジョブの状態表示

qstat

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

qstat -asw

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

pbsnodes -ajS

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

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

qdel jobID

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

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

qdel -Wforce jobID