====== ジョブの投入・管理 ======
===== ジョブ投入 =====
==== qsub : ジョブ投入コマンド ====
\\
スーパーコンピュータのキューにジョブを投入します。\\
なお、オプションは実行するスクリプトファイル中の#PBS指示文でも指定可能です。\\
フロントエンドノードでは直接プログラムを実行せず、qsubコマンドでジョブとしてキューに投入してください。\\
直接プログラムが実行されていた場合、他のユーザーへ影響があるため、管理者によりキャンセルされる場合がありますので、ご了承ください。\\
\\
**書式**\\
$ qsub [-q キュー名] [-l select=ノード数] [-N ジョブ名] [-M 電子メールアドレス] [-m 電子メール通知の指定] [-l walltime=経過時間上限] [-l ライセンス種類=使用ライセンス数] [実行するスクリプトファイル]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-q キュー名 |キュー名を指定します。\\ [[user_manual:supercomputer:queues_list|キュー一覧]]を参照して下さい。 |
|-l select=ノード数 |使用するノード数を指定します。\\ 省略した場合のノード数はキューのデフォルト値となります。([[user_manual:supercomputer:queues_list|キュー一覧]]参照)|
|-N ジョブ名 |ジョブ名を指定します。\\ ジョブ名は最大 236 文字まで指定できます。\\ リアルタイムジョブ参照システムでは64文字まで表示されます。\\ 省略した場合はシステムが割り当てます。|
|-M 電子メールアドレス |受信する電子メールアドレスを指定します。\\ メールを受信する場合は-mオプションの指定が必須です。 |
|-m 電子メール通知の指定 |電子メール送信のポイントを指定します。\\ メール受信する場合は-M オプションの指定が必須です。 |
|-l walltime=経過時間上限 |ジョブの経過時間上限を指定します。\\ 省略した場合の経過時間上限はキューのデフォルト値となります。([[user_manual:supercomputer:queues_list|キュー一覧]]参照)\\ 適切な値を設定することでキュー待ちのジョブが実行しやすくなります。 |
|-l ライセンス種類=使用ライセンス数 |ライセンス管理対象のアプリケーション使用時に使用ライセンス数を指定します。\\ 省略した場合はライセンス管理対象アプリケーションを使用しないとします。\\ ライセンスの指定についてはアプリケーションの実行方法を参照して下さい。|
\\
**使用例**\\
\\
・キューDP_002を使用して、2ノード使用、経過時間上限を10分、スクリプトファイルはhello.sh
$ qsub -q DP_002 -l select=2 -l walltime=00:10:00 hello.sh
\\
スクリプトで指定する場合
#!/bin/sh
#PBS -q DP_002
#PBS -l select=2
#PBS -l walltime=00:10:00
...
\\
・キューP_016を使用して、ジョブ開始及び終了時にuserA@test.comに送信、スクリプトファイルはhello.sh
$ qsub -q P_016 -M userA@test.com -m be hello.sh
\\
スクリプトで指定する場合
#!/bin/sh
#PBS -q P_016
#PBS -M userA@test.com
#PBS -m be
...
\\
・キューDP_002を使用して、ライセンス管理対象のQuantumATKを実行、スクリプトファイルはatk.sh
$ qsub -q DP_002 -l atk=1 -l atkdp=35 atk.sh
\\
スクリプトで指定する場合
#!/bin/sh
#PBS -q DP_002
#PBS -l atk=1 -l atkdp=35
...
------
==== aprun : プログラム起動コマンド ====
\\
ジョブ実行中にプログラムを起動するにはaprunコマンドを利用します。\\
大規模並列計算サーバでプログラムを実行する場合は必ずaprunコマンドを使用してください。\\
aprunを使用せずに実行した場合、I/Oノード上でプログラムが実行され、他のユーザーのジョブ実行に影響を与えるため、\\
管理者によりキャンセルされる場合がありますので、ご了承ください。
\\
**書式**\\
$ aprun [-n 並列数] [-d 並列数][-N ノードあたりの並列数] [-S CPUソケットあたりの並列数] [-j 0|1|N] [--cc 配置方法] 実行プログラム
\\
**オプション一覧**\\
^オプション ^説明 ^
|-n 並列数 |MPI並列数を指定する。 |
|-d 並列数 |OpenMP 並列数を指定する。\\ (合わせてOMP_NUM_THREADSの指定も必要)|
|-N ノード当たりの並列数 |ノードごとに配置するMPIプロセス数を指定する。 |
|-S CPUソケットあたりの並列数 |CPUソケットごとに配置するMPIプロセス数を指定する。 |
|-j 0|1|N| |CPU コアごとに配置するスレッド数を指定する。\\ 0: HyperThreadingを使用する(デフォルト)\\ 1: HyperThreadingを使用しない\\ N: HyperThreadingを使用、コア毎にNスレッドを配置|
|--cc 配置方法 |プロセス/スレッドの配置方法を指定する。\\ depth: プロセスが割り当てられたCPUコアに近接するようにスレッドをバインド\\ (OpenMP, MPI+OpenMPのプログラムを実行する際に有効)|
ジョブのパフォーマンスを高めるために以下が成り立つよう値を指定してください。\\ [MPI並列数(-nの値)] = [ノード数(#PBS -l select=の値)] × [ノードあたりの並列数(-Nの値)]
------
==== 実行スクリプトの書式 ====
\\
スーパーコンピュータ上でプログラムを動作させる際に使用する実行スクリプトの書式について説明し
ます。\\
実行スクリプトを必要とするアプリケーションを実行する際は、事前に実行スクリプトを作成しておく必要があります。\\
/home領域よりも/work領域のほうがI/O性能が良いため、以下の例を参考に/work 領域にデータをコピーして実行し、実行後に結果をジョブ投入したディレクトリに移動するようにしてください。\\
\\
**MPIを使用しないジョブの実行**\\
#!/bin/sh
#PBS -l select=1
#PBS -q キュー名
#PBS -N ジョブ名
# ジョブ投入したディレクトリを/work領域にコピーし、/work領域に移動
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
# プログラムの実行
aprun 実行プログラム >出力ファイル 2>エラー出力ファイル
# ジョブが終了後、結果をジョブ投入したディレクトリに移動
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
・例:プログラムa.outを実行
#!/bin/sh
#PBS -l select=1
#PBS -q P_016
#PBS -N sample
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
aprun ./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
**Cray XCの高速通信(ESMモード)を使用したMPIジョブの実行**\\
#!/bin/sh
#PBS -l select=ノード数
#PBS -q キュー名
#PBS -N ジョブ名
# ジョブ投入したディレクトリを/work領域にコピーし、/work領域に移動
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
# プログラムの実行
aprun [-n 並列数][-N ノードあたりの並列数] 実行プログラム > 出力ファイル 2> エラー出力ファイル
# ジョブが終了後、結果をジョブ投入したディレクトリに移動
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
・例1:1ノードで2MPIプロセスのプログラムa.outを実行
#!/bin/sh
#PBS -l select=1
#PBS -q P_016
#PBS -N mpi1
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
aprun -n 2 -N 2 ./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
・例2:2ノードで2MPIプロセスのプログラムa.outを実行
#!/bin/sh
#PBS -l select=2
#PBS -q P_016
#PBS -N mpi2
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
aprun -n 2 -N 1 ./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
------
==== インタラクティブモード ====
\\
インタラクティブモードでジョブを投入します。\\
qsubコマンドにオプション-Iを付与し、キューにIP_001を指定します。
プログラムの実行には必ずaprunコマンドを使用してください。
**書式**\\
$ qsub -I -q IP_001
\\
**使用例**\\
$ qsub -I -q IP_001
qsub: waiting for job 220331.sdb to start
qsub: job 220331.sdb ready
Directory: /home/userA
Mon Sep 23 01:03:04 JST 2019
userA@mom1:~> cd $PBS_O_WORKDIR
userA@mom1: /work/userA/testdir> aprun -n 32 -j 1 ./a.out
\\
===== ジョブ管理コマンド群 =====
==== statj : ユーザー自身のジョブの状態を確認 ====
\\
ユーザー自身のジョブの状態を表示します。\\
\\
**書式**\\
$ statj [-x] [ [job_identifier | destination] ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-x |終了したジョブを含めてジョブ情報の表示 |
\\
**使用例**\\
userA@super2:~> statj
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
3413.sdb userA P_016 STDIN 231503 1 36 690gb 24:00 R 00:00
------
==== qstat : ジョブの状態を確認 ====
\\
スーパーコンピュータのジョブの状態を表示します。\\
\\
**書式**\\
Default format:
qstat [-a] [-p] [-J] [-t] [-x] [ [job_identifier | destination] ...]
Long format:
qstat -f [-p] [-J] [-t] [-x] [ [job_identifier | destination] ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-a |メモリ量や経過時間、ジョブの状態の経過時間などを表示 |
|-p |ジョブ完了割合の表示 |
|-J |アレイジョブに関する制限表示 |
|-t |ジョブ情報の表示 |
|-x |終了したジョブを含めてジョブ情報の表示 |
|-f |Long formatにて表示 |
\\
**使用例**\\
userA@super2:~> qstat -a
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
3390.sdb userA P_016 abinit 193347 4 144 2760gb 72:00 R 47:28
3401.sdb userA P_016 prog9_1 121974 4 144 2760gb 72:00 R 47:26
userA@super2:~> qstat -p
Job id Name User % done S Queue
---------------- ---------------- ---------------- -------- - -----
3390.sdb abinit userA 2 R P_016
3401.sdb prog9_1 userA 0 R P_016
userA@super2:~> qstat -t
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
3390.sdb abinit userA 00:00:01 R P_016
3401.sdb prog9_1 userA 00:00:01 R P_016
userA@super2:~ > qstat -x
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
2235.sdb prog9_2 userA 00:00:03 F P_016
2236.sdb vasp4 userA 00:00:01 F P_016
2237.sdb prog9_1 userA 00:00:01 F P_016
...
userA@super2:~> qstat -f 3390.sdb
Job Id: 3390.sdb
Job_Name = abinit
Job_Owner = userA@nid00204
resources_used.cpupercent = 10
resources_used.cput = 00:00:01
resources_used.mem = 12836kb
resources_used.ncpus = 72
...
------
==== statq : キュー状態を確認 ====
\\
スーパーコンピュータのキューの状態を表示します。\\
\\
**書式**\\
Default format:
statq [destination ...]
Long format:
statq -f [destination ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-f |Long formatにて表示 |
\\
**使用例**\\
userA@super2:~> statq
Queue Max Tot Ena Str Que Run Hld Wat Trn Ext Type
---------------- ----- ----- --- --- ----- ----- ----- ----- ----- ----- ----
workq 0 0 no yes 0 0 0 0 0 0 Exec
DP_002 0 0 yes yes 0 0 0 0 0 0 Exec
P_016 0 1 yes yes 0 1 0 0 0 0 Exec
P_032 0 0 yes yes 0 0 0 0 0 0 Exec
P_064 0 0 yes yes 0 0 0 0 0 0 Exec
LP_032 0 0 yes yes 0 0 0 0 0 0 Exec
LP_064 0 0 yes yes 0 0 0 0 0 0 Exec
...
userA@super2:~> statq -f
Queue: workq
queue_type = Execution
total_jobs = 0
state_count = Transit:0 Queued:0 Held:0 Waiting:0 Running:0 Exiting:0 Begun
:0
enabled = False
started = True
...
------
==== qstat -B : サーバ状態を確認 ====
\\
スーパーコンピュータのサーバの状態を表示します。\\
\\
**書式**\\
Default format:
qstat -B [destination ...]
Long format:
qstat -B -f [destination ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-B |サーバの表示 |
|-f |Long formatにて表示 |
**使用例**\\
userA@super2:~> qstat -B
Server Max Tot Que Run Hld Wat Trn Ext Status
---------------- ----- ----- ----- ----- ----- ----- ----- ----- -----------
sdb 0 1155 0 1 0 0 0 0 Active
userA@super2:~> qstat -Bf
Server: sdb
server_state = Active
server_host = sdb
scheduling = True
max_queued = [u:PBS_GENERIC=200]
...
------
==== qdel : ジョブの強制終了 ====
\\
スーパーコンピュータのジョブを削除します。\\
\\
**書式**\\
qdel [ -x ] [ -Wsuppress_email= ] job_identifier [job_identifier ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-x |ジョブヒストリーも含めてジョブ削除 |
|-Wsuppress_email |削除時のメール送信数の制限 |
**使用例**
userA@super2:~/work/20180712_sample> statj
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
---------- -------- -------- ---------- ------ --- --- ------ ----- - -----
3413.sdb userA P_016 abinit 3710 3 216 2304gb 72:00 R 00:00
3414.sdb userA DP_002 STDIN 13588 1 72 768gb 00:10 R 00:00
userA@super2:~/work/20180712_sample> qdel 3414.sdb
userA@super2:~/work/20180712_sample> statj
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
---------- -------- -------- ---------- ------ --- --- ------ ----- - -----
3413.sdb userA P_016 abinit 3710 3 216 2304gb 72:00 R 00:00
userA@super2:~/work/20180712_sample>
\\
===== 利用実績の確認 =====
==== jobtime : 利用実績確認コマンド ====
\\
**書式**\\
$ jobtime
\\
**表示項目**\\
^ 項目 ^ 内容 ^
|Last Updated |更新日時 |
|User |ユーザー名 |
|Total |割り当てノード時間 |
|Used |累積利用時間 |
|Remained |残り時間 |
\\
**使用例**\\
userA@super2:~ > jobtime
# Last Updated: 2018/10/01 13:45
# User Total Used Remained (H)
username 500 222.32 277.68
\\
===== ジョブ投入・スクリプト関連資料 =====
==== ジョブ実行性能に関する指定 ====
\\
スーパーコンピュータはHyper-Threadingを有効にしているため、aprunコマンドでコアあたりのプロセスの割当を指定することにより性能改善する可能性があります。\\
\\
**書式**\\
物理コアあたりのスレッド数に1を指定する場合
aprun -j 1 実行プログラム
\\
**使用例**\\
#!/bin/bash
#PBS -j oe
#PBS -l select=1
#PBS -q P_016
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
aprun -n 36 -N 36 -j 1 ./xhpl_skl_diag_cray_opt > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf$WORKDIR; fi
\\