= ジョブの実行 = <> == ジョブ環境 == '''バッチジョブ'''と'''インタラクティブジョブ'''により,計算サーバを利用することができます.本システムでは,ジョブスケジューラとして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= ||指定したSingularityイメージでジョブを実行. || ||-I ||-I ||インタラクティブ(対話型)ジョブを実行します. || -lオプションで指定可能な主なリソースは下記の通りです. ||リソース名 ||説明 ||値 || ||select ||ノード数 ||1以上の整数 || ||ncpus ||CPUコア数/ノード ||1以上の整数 || ||mpiprocs ||MPIプロセス数/ノード ||1以上の整数 || ||mem ||メモリ使用量/ノード ||整数 || ||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=:ngpus= }}} * 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 }}}