====== ジョブの投入・管理 ======
===== ジョブ投入コマンド =====
==== qsub : ジョブ投入コマンド ====
\\
アクセラレータサーバのキューにジョブを投入します。\\
なお、オプションは実行するスクリプトファイル中の#PBS指示文でも指定可能です。\\
\\
**書式**\\
$ qsub [-q キュー名] [-l select=ノード数] [-N ジョブ名] [-M 電子メールアドレス] [-m 電子メール通知の指定] [-l walltime=経過時間上限] [-l ライセンス種類=使用ライセンス数] [実行するスクリプトファイル]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-q キュー名 |キュー名を指定します。\\ [[user_manual:acceleratorserver:queues_list|キュー一覧]]を参照して下さい。 |
|-l select=ノード数 |使用するノード数を指定します。\\ 省略した場合のノード数はキューのデフォルト値となります。([[user_manual:acceleratorserver:queues_list|キュー一覧]]参照)|
|-N ジョブ名 |ジョブ名を指定します。\\ ジョブ名は最大 236 文字まで指定できます。\\ リアルタイムジョブ参照システムでは64文字まで表示されます。\\ 省略した場合はシステムが割り当てます。|
|-M 電子メールアドレス |受信する電子メールアドレスを指定します。\\ メールを受信する場合は-mオプションの指定が必須です。 |
|-m 電子メール通知の指定 |電子メール送信のポイントを指定します。\\ メール受信する場合は-M オプションの指定が必須です。 |
|-l walltime=経過時間上限 |ジョブの経過時間上限を指定します。\\ 省略した場合の経過時間上限はキューのデフォルト値となります。([[user_manual:acceleratorserver:queues_list|キュー一覧]]参照)\\ 適切な値を設定することでキュー待ちのジョブが実行しやすくなります。 |
|-l ライセンス種類=使用ライセンス数 |ライセンス管理対象のアプリケーション使用時に使用ライセンス数を指定します。\\ 省略した場合はライセンス管理対象アプリケーションを使用しないとします。\\ ライセンスの指定についてはアプリケーションの実行方法を参照して下さい。|
\\
**使用例**\\
\\
・キューA_004を使用して、2ノード使用、経過時間上限を1時間、スクリプトファイルはhello.sh
$ qsub -q A_004 -l select=2 -l walltime=1:00:00 hello.sh
\\
スクリプトで指定する場合
#!/bin/sh
#PBS -q A_004
#PBS -l select=2
#PBS -l walltime=01:00:00
...
\\
・キューDA_002gを使用して、ジョブ開始及び終了時にuserA@test.comに送信、スクリプトファイルはhello.sh
$ qsub -q DA_002g -M userA@test.com -m be hello.sh
\\
スクリプトで指定する場合
#!/bin/sh
#PBS -q DA_002g
#PBS -M userA@test.com
#PBS -m be
...
\\
・キューA_004を使用して、ジョブ名をTEST、スクリプトファイルはhello.sh
$ qsub -q A_004 –N TEST hello.sh
\\
スクリプトで指定する場合
#!/bin/sh
#PBS -q A_004
#PBS -N TEST
...
------
==== 実行スクリプトの書式 ====
\\
アクセラレータサーバ上でプログラムを動作させる際に使用する実行スクリプトの書式について説明します。\\
実行スクリプトを必要とするアプリケーションを実行する際は、事前に実行スクリプトを作成しておく必要があります。\\
/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
# プログラムの実行
実行プログラム >出力ファイル 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 A_004
#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
./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
**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
# プログラムの実行
mpirun [ -np 並列数 | -ppn ノードあたりの並列数 ] -hostfile $PBS_NODEFILE 実行プログラム > 出力ファイル 2> エラー出力ファイル
# ジョブが終了後、結果をジョブ投入したディレクトリに移動
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
・例1:Intelコンパイラでコンパイルしたプログラムa.outを2ノード、72MPIプロセスで実行
#!/bin/sh
#PBS -l select=2
#PBS -q A_004
#PBS -N mpi
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
mpirun -np 72 -ppn 36 -hostfile $PBS_NODEFILE ./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
------
==== インタラクティブモード ====
\\
インタラクティブモードでジョブを投入します。\\
qsubコマンドにオプション-Iを付与し、キューにIA_001g、CA_001、CA_001g、IC_001、CC_001のいずれかを指定します。\\
\\
**書式**\\
$ qsub -I -q キュー名
\\
**使用例**\\
$ qsub -I -q IA_001g
qsub: waiting for job 22351.gpu1 to start
qsub: job 22351.gpu1 ready
-bash-4.2$ ./a.out
\\
------
==== 共有キューCA_001・CA_001g・CC_001へのジョブ投入方法 ====
\\
共有キューCA_001、CA_001gおよびCC_001にジョブ を投入する方法について記載します。\\
共有キューはノードを他のジョブと共有して使用するキューです。\\
CA_001 およびCA_001g で実行したジョブにはデフォルトで1CPU、1GPUが割り当てられます。qsubコマンドのオプション指定により、最大で18CPU、5GPUまで使用可能です。
インタラクティブモードでの実行も可能です。\\
CC_001 で実行したジョブには、デフォルトで1CPU が割り当てられます。qsub コマンドのオプション指定により、最大で18CPU まで使用可能です。インタラクティブモードでの実行も可能です。\\
\\
**書式**\\
・CA_001 またはCA_001g の場合\\
$ qsub -q キュー名 [ -I ] [ -l select=1[:ncpus=CPU数][:ngpus=GPU数] [実行するスクリプトファイル] ]
\\
・CC_001 の場合\\
$ qsub -q キュー名 [ -I ] [ -l select=1[:ncpus=CPU数] [実行するスクリプトファイル] ]
\\
**使用例**\\
・例:キューCA_001を利用して、2CPU、1GPUでインタラクティブモード実行するコマンド
$ qsub -I -q CA_001 -l select=1:ncpus=2:ngpus=1
qsub: waiting for job 22351.gpu1 to start
qsub: job 22351.gpu1 ready
-bash-4.2$ ./a.out
\\
・例:キューCA_001gを利用して、18CPU、5GPUでプログラムa.outを実行するスクリプト\\
CA_001gを利用する場合は/work_da領域からジョブを投入してください。\\
#!/bin/sh
#PBS -l select=1:ncpus=18:ngpus=5
#PBS -q CA_001g
#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
mpirun -np 18 -ppn 18 -hostfile $PBS_NODEFILE ./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
・例:キューCC_001を利用して、2CPUでインタラクティブモード実行するコマンド
$ qsub -I -q CC_001 -l select=1:ncpus=2
qsub: waiting for job 90289.gpu1 to start
qsub: job 90289.gpu1 ready
-bash-4.2$ ./a.out
\\
・例:キューCC_001を利用して、18CPUでプログラムa.outを実行するスクリプト
#!/bin/sh
#PBS -l select=1:ncpus=18
#PBS -q CC_001
#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
mpirun -np 18 -ppn 18 -hostfile $PBS_NODEFILE ./a.out > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\
===== ジョブ管理コマンド群 =====
==== statj : ユーザー自身のジョブの状態を確認 ====
\\
ユーザー自身のジョブの状態を表示します。\\
\\
**書式**\\
$ statj [-x] [ [job_identifier | destination] ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-x |終了したジョブを含めてジョブ情報の表示 |
\\
**使用例**\\
userA@gpu2:~> statj
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
3413.gpu1 userA A_004 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@gpu2:~> qstat -a
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
3390.gpu1 userA A_004 abinit 193347 4 144 2760gb 72:00 R 47:28
3401.gpu1 userA A_004 prog9_1 121974 4 144 2760gb 72:00 R 47:26
userA@gpu2:~> qstat -p
Job id Name User % done S Queue
---------------- ---------------- ---------------- -------- - -----
3390.gpu1 abinit userA 2 R A_004
3401.gpu1 prog9_1 userA 0 R A_004
userA@gpu2:~> qstat -t
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
3390.gpu1 abinit userA 00:00:01 R A_004
3401.gpu1 prog9_1 userA 00:00:01 R A_004
userA@gpu2:~ > qstat -x
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
2235.gpu1 prog9_2 userA 00:00:03 F A_004
2236.gpu1 vasp4 userA 00:00:01 F A_004
2237.gpu1 prog9_1 userA 00:00:01 F A_004
...
userA@gpu2:~> qstat -f 3390.gpu1
Job Id: 3390.gpu1
Job_Name = abinit
Job_Owner = userA@gpu2
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@gpu2:~> 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
A_004 0 0 yes yes 0 0 0 0 0 0 Exec
MA_008 0 1 yes yes 0 1 0 0 0 0 Exec
SA_016 0 0 yes yes 0 0 0 0 0 0 Exec
DA_002g 0 0 yes yes 0 0 0 0 0 0 Exec
DC_002 0 0 yes yes 0 0 0 0 0 0 Exec
C_002 0 0 yes yes 0 0 0 0 0 0 Exec
...
userA@gpu2:~> 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@gpu2:~> qstat -B
Server Max Tot Que Run Hld Wat Trn Ext Status
---------------- ----- ----- ----- ----- ----- ----- ----- ----- -----------
gpu1 0 1155 0 1 0 0 0 0 Active
userA@gpu2:~> qstat -Bf
Server: gpu1
server_state = Active
server_host = gpu1
scheduling = True
max_queued = [o:PBS_ALL=10000]
...
------
==== qdel : ジョブの強制終了 ====
\\
アクセラレータサーバのジョブを削除します。\\
\\
**書式**\\
qdel [ -x ] [ -Wsuppress_email= ] job_identifier [job_identifier ...]
\\
**オプション一覧**\\
^オプション ^説明 ^
|-x |ジョブヒストリーも含めてジョブ削除 |
|-Wsuppress_email |削除時のメール送信数の制限 |
**使用例**
userA@gpu2:~/work/20180712_sample> qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
3413.gpu1 abinit userA 00:00:00 R A_004
3414.gpu1 STDIN_gpu2_22 userA 00:00:00 R A_004
userA@gpu2:~/work/20180712_sample> qdel 3414.gpu1
userA@gpu2:~/work/20180712_sample> statj
userA@gpu2:~/work/20180712_sample> qstat
Job id Name User Time Use S Queue
---------------- ---------------- ---------------- -------- - -----
3413.gpu1 abinit userA 00:00:00 R A_004
userA@gpu2:~/work/20180712_sample>
\\
===== 利用実績の確認 =====
==== jobtime : 利用実績確認コマンド ====
\\
**書式**\\
$ jobtime
\\
**表示項目**\\
^ 項目 ^ 内容 ^
|Last Updated |更新日時 |
|User |ユーザー名 |
|Total |割り当てノード時間 |
|Used |累積利用時間 |
|Remained |残り時間 |
\\
**使用例**\\
userA@gpu2:~ > jobtime
# Last Updated: 2018/10/01 13:45
# User Total Used Remained (H)
username 500 222.32 277.68
\\
===== ジョブ投入・スクリプト関連資料 =====
==== MPIジョブの実行方法 ====
\\
MPI環境として、IntelMPIが利用可能です。\\
\\
**書式**\\
ジョブ実行にはmpirunコマンドを使用します。
mpirun [ -np 並列数 ] [ -ppn ノードあたりの並列数 ] -hostfile $PBS_NODEFILE 実行プログラム
\\
※ジョブのパフォーマンスを高めるために以下が成り立つよう値を指定してください。\\
[ MPI並列数(-npの値) ] = [ ノード数(#PBS -l select=の値) ] × [ ノードあたりの並列数(-ppnの値) ]
\\
**使用例**\\
#!/bin/bash
#PBS -j oe
#PBS -l select=1
DIRNAME=`basename $PBS_O_WORKDIR`
WORKDIR=/work/$USER/$PBS_JOBID
mkdir -p $WORKDIR
cp -raf $PBS_O_WORKDIR $WORKDIR
cd $WORKDIR/$DIRNAME
mpirun -np 36 -hostfile $PBS_NODEFILE /usr/local/app/ABINIT/current/src/98_main/abinit < input.files > result.out 2> result.err
cd; if cp -raf $WORKDIR/$DIRNAME $PBS_O_WORKDIR/.. ; then rm -rf $WORKDIR; fi
\\