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

 

ページ名: HowToSubmitJob

ジョブの実行

ジョブ環境

バッチジョブインタラクティブジョブにより,計算サーバを利用することができます.本システムでは,ジョブスケジューラとして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 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行目以降で指定することもできます.

・スレッド並列計算などで複数のCPUコアを占有する場合

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

・MPIによるプロセス並列計算を行う場合

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

・占有するメモリ容量を指定する場合

#PBS -l select=<ノード数>:mem=<1ノードあたりのメモリ容量>:ncpus=<1ノードあたりのCPUコア数>

・利用する計算サーバを指定する場合

#PBS -l select=1:vnode=<ホストA>:ncpus=<ホストAのCPUコア数>:vnode=<ホストB>:ncpus=<ホストBのCPUコア数>,・・・

* 計算サーバのホスト名はysnd00~ysnd14です(クラスタシステム構成-ハードウェア構成 参照).

GPUを利用したい場合は,次のように記述します.ngpusにはノードあたりのGPU数を指定します.GPUはsRchq, mRchq, Eduq, iEduqで使用可能です.

#PBS -l select=1:ncpus=<CPUコア数>:ngpus=<GPU数>

* ysnd00~ysnd14は AMD MI210 PCIe を1ノードにつき2枚搭載しています.
* yind00,yind01は NVIDIA A100 を1ノードにつき1枚搭載しています.

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

#PBS -l walltime=hh:mm:ss

実行スクリプトの例:逐次実行

Eduqを指定して1ノード1CPUコアを使用します./homeの容量オーバーを避けるためにulimitコマンドでcoreファイルを生成しないようにしてから,moduleコマンドを利用可能としています.

 #!/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/2025  # enable use of numerical library

 cd $PBS_O_WORKDIR
 ./test.x

実行スクリプトの例:OpenMP並列

環境変数OMP_NUM_THREADSをncpusと同じ数に設定し,ジョブで指定したCPUコア数と同じスレッド数で並列処理を行います.

 #!/bin/bash
 #PBS -q Eduq
 #PBS -l select=1:ncpus=4
 
 ulimit -c 0             # avoid generating core files
 . /etc/profile          # enable module command
 module load intel/2025
 
 export OMP_NUM_THREADS=4
 cd $PBS_O_WORKDIR
 ./test.x

実行スクリプトの例:ノード占有MPI

-lオプションで計算サーバ1ノードのCPUコア,メモリをすべて利用可能とします.mpirunを実行する前にMPIのモジュールをロードする必要があります.

 #!/bin/bash
 #PBS -q sRchq
 #PBS -l select=1:ncpus=48:mpiprocs=48:mem=256g
 
 ulimit -c 0             # avoid generating core files
 . /etc/profile          # enable module command
 module load intel/2025
 module load intelmpi/2025
 
 export OMP_NUM_THREADS=1
 cd $PBS_O_WORKDIR
 mpirun -np 48 ./test.x

実行スクリプトの例:ノード間並列

ノード間で通信を行うために,~/.sshにてパスワードなしの公開鍵,秘密鍵を作成(例:ssh-keygen -t rsa -b 4096)し,公開鍵の内容をauthorized_keysに追加してください.以下は2ノードを占有して96 CPUコア,96 MPIプロセスでプログラムを実行するスクリプトです.

 #!/bin/bash
 #PBS -q mRchq
 #PBS -l select=2:ncpus=48:mpiprocs=48:mem=256g
 
 ulimit -c 0             # avoid generating core files
 . /etc/profile          # enable module command
 module load intel/2025
 module load intelmpi/2025
 
 export OMP_NUM_THREADS=1
 cd $PBS_O_WORKDIR
 mpirun -np 96 ./test.x

実行スクリプトの例:AMD GPUの利用

コンテナイメージとしてprg_env_amd_2025.01.sif(AMD CPU,GPU向け)を指定します.以下ではCPUや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
 
 rocminfo                # show information on CPU and GPU
 rocm-smi                # show status of GPU
 
 cd $PBS_O_WORKDIR
 ./test.x

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

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

qstat -Qf <キュー名>

インタラクティブジョブ

ジョブ投入方法

qsubの-Iオプションを使用することで,対話的にジョブを実行することができます.このときのキューは Eduq もしくは iEduq のいずれかを指定してください. 下記の例ではコンテナ上でbashを起動し,unameコマンドでホスト名を確認し,pythonでdatetimeをインポートしています.

[*****@ydev09 ~]$ qsub -I -q Eduq -l select=1:ncpus=2:mem=16g /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

コンテナイメージの指定

Singularityイメージを指定してジョブを実行することが可能です.

イメージを指定する場合 SINGULARITY_IMAGE=<イメージファイル(sif)名> を指定してジョブを起動します./common/Singularity_sif/ に用意されているイメージの他に,ユーザが用意したイメージを指定することもできます.Singularityではイメージ内のサービス(EntryPoint)は使用できません.

イメージを指定しない場合は,自動で選択されたSingularityイメージでジョブを起動します.

実行例

下記の例ではIoT・AI基盤システムの1CPUコア,メモリ8GiB,1GPUのリソースを割り当てて,bashを起動してホスト名とGPUの状態を確認しています.コンテナイメージとしてprg_env_intel_2025.01.sif(Intel CPU,NVIDA GPU向け)を指定しています.

[******@ydev09 ~]$ qsub -I -q iEduq -l select=1:ncpus=1:mem=8g:ngpus=1 -v SINGULARITY_IMAGE=/common/Singularity_sif/prg_env_intel_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

ジョブの管理

ジョブの状態を確認する

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

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

qstat -q

(2) ジョブの状態表示

qstat

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

qstat -asw

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

pbsnodes -ajS

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

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

qdel jobID

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

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

qdel -Wforce jobID