バッチ処理(システムB/C)

バッチ処理形式で実行されるプログラムをジョブと呼びます.システムB,Cともに,PBSジョブスケジューラを利用してジョブを制御しています.

ジョブスケジューラでは,キューと呼ばれる仮想的な入れ物でジョブを管理しており,システムにバッチ処理を依頼する際にはキューを指定する(キューにジョブを投入する)必要があります.スーパーコンピュータシステムでは,お申し込み頂いたサービスコースごとにキューを用意しておりますので,そのキューを使用してジョブを実行いただくことになります.

システムBでは,PBSオプションで指定された値のCPUコアとメモリを確保して計算を行いますが,1つのジョブで複数ノードを利用する場合は,それらのノードを専有的に確保して計算を開始する仕様となっています.

システムCでは,複数ノードを利用する場合であっても,ノードを専有的に確保することはありません.

システムB/Cは,moduleコマンドで動的に切り替えることができます. 現在ロードされているシステムを確認するには,module listコマンドを使用します. 下記の例では,「pbs/SystemB」とある通り,システムBがロードされています.

$ module list
Currently Loaded Modulefiles:
  1) pbs/SystemB        3) impi/2017.1
  2) intel/17.0.1.132   4) PrgEnv-intel/1.0

システムを切り替えるには,下記のコマンドを使用します.

  • システムBからCへの切り替え
    module switch pbs/SystemB pbs/SystemC
  • システムCからBへの切り替え
    module switch pbs/SystemC pbs/SystemB

ジョブスクリプトは,原則的にシェルスクリプトと同じ形式です.ジョブスクリプトはPBSのジョブ投入オプションを記述したオプション領域と,実行するプログラムを記述したユーザプログラム領域から構成されます.

$ cat sample.sh
#!/bin/bash
#============ PBS Options ============
#QSUB -q gr19999b
#QSUB -ug gr19999
#QSUB -W 2:00
#QSUB -A p=4:t=8:c=8:m=3413M
#============ Shell Script ============
cd $QSUB_WORKDIR

mpiexec.hydra ./a.out

ジョブスクリプトのオプション領域では,文の先頭に「#QSUB 」と記述し,その後ろにPBSオプションを指定します.PBSオプションについては, PBSオプション をご覧ください.

なお,バッチ処理実行時は .bashrc等の設定ファイルは自動では参照されませんのでご注意ください.

ジョブスクリプトのサンプルを公開していますので,参考にしてください.

実行種別 サンプルファイル
逐次実行 ダウンロード
スレッド並列 ダウンロード
プロセス並列(Intel MPI) ダウンロード
ハイブリッド並列 ダウンロード

lsf2pbsコマンドを利用することで,LSFの環境で使用していたジョブスクリプトのコマンドやオプション,環境変数をPBS向けに変換することができます.

書式:

lsf2pbs lsf_script [pbs_script]

実行例:

[b59999@camphor1 script]$ cat lsf.sh
#!/bin/bash
#QSUB -q gr19999b
#QSUB -A p=1:t=1:c=1:m=1G
#QSUB -W 12:00
#QSUB -rn
#QSUB -u kyodai.taro.1a@kyoto-u.ac.jp
#QSUB -B
#QSUB -N
#====command====
mpiexec.hydra ./a.out
#====command====

[b59999@camphor1 script]$ lsf2pbs lsf.sh pbs.sh

[b59999@camphor1 script]$ cat pbs.sh
#!/bin/bash
#QSUB -q gr19999b
#QSUB -A p=1:t=1:c=1:m=1G
#QSUB -W 12:00
#QSUB -r n
#QSUB -M kyodai.taro.1a@kyoto-u.ac.jp
#QSUB -m be
#====command====
mpiexec.hydra ./a.out
#====command====

ジョブスクリプトのオプション領域に,PBSオプションを指定することでジョブの属性を設定することができます. -W オプションで経過時間上限値を設定しない場合,実行を開始してから1時間経過後にジョブが強制終了されますのでご注意ください. なお,PBSオプションは京大スパコン向けに一部カスタマイズを行っています.詳細はオリジナルのPBSとの差異を参照してください.

  • 主要オプション
オプション 説明 指定例
-q QUEUENAME ジョブを投入するキューの指定 -q gr19999b
-ug GROUPNAME ジョブの実効グループの指定 -ug gr19999
-W HOUR : MINUTE 経過時間上限値の指定(単位は時:分) -W 6:0
-A p=procs:t=threads:c=cores:m=memory ジョブ割当リソース量の指定. -A p=4:t=8:c=8:m=3413M

.

-A の引数 説明
p=procs ジョブ実行時の割当プロセス数
t=threads ジョブ実行時のプロセスあたりの割当スレッド数. 環境変数 OMP_NUM_THREADS を自動で設定.
c=cores ジョブ実行時のプロセスあたりの割当CPUコア数. 基本的に t と同じ値を設定.
m=memory ジョブ実行時のプロセスあたりの割当メモリ量上限値(単位:M,G,T).
  • システムBでの-Aオプションのデフォルト値と最大値
オプション デフォルト値 最大値 備考
p 1 利用するキューの標準資源量まで(c=1,m=3413M以下の場合)
t 1 36 ハイパースレッディングを利用する場合は最大72
c 1 36
m 3413M 122880M (120G)
  • システムCでの-Aオプションのデフォルト値と最大値
オプション デフォルト値 最大値 備考
p 1 利用するキューの標準資源量まで(c=1,m=42666M以下の場合)
t 1 72 ハイパースレッディングを利用する場合は最大144
c 1 72
m 42666M 3000G
  • PBSの -A オプションの法則について

    • p の値はMPIプロセス数を表します.
    • c の値は1プロセスあたりの割り当てコア数を表します.
    • t の値は1プロセスあたりの割り当てスレッド数を表します.
    • よって,消費する計算ノードのコア数は pとcの積 となります.(mの値がデフォルトの場合)
    • m の値は1プロセスあたりの割り当てメモリ量を表します.
    • mの値をデフォルトより大きくした場合,それに比例してコア数を消費したと見なされます.具体的には以下の「ジョブ実行用に確保される計算リソースに関する注意」を参照ください.

    • cとmを両方ともデフォルトより大きくした場合は,使用コア数は,コア数をより多く要求するパラメータに合わせます.
      • p=1:t=4:c=4:m=6826M (=3413M x2)とした場合,cは4コア分を要求,mは2コア分を要求となり,結果1プロセスあたり4コア消費したと見なす.この指定では,プロセスは4コア使用するにも関わらずメモリを2コア分未満しか使えなくなりますので,特別な理由がない限り,mの値として 3413M x 4 = 13652M を指定して,メモリを使い切るべきでしょう
      • p=1:t=2:c=2:m=10239M (=3413M x3)とした場合,cは2コア分を要求,mは3コア分を要求となり,結果1プロセスあたり3コア消費したと見なす.

.

  • ジョブ実行用に確保される計算リソースに関する注意

PBSジョブスケジューラでは,CPUコアを実際に利用したかどうかに関わらず,ジョブ実行にあたって確保したCPUコアすべてを利用したものとみなします.たとえば,システムBで -A p=8:t=1:c=1:m=30G と指定してジョブを実行した場合,1プロセスあたりメモリを上限値(120G)の1/4使用することになり,メモリ容量の制約から1ノードあたりに4プロセスが割り当てられることとなります.このとき,ジョブが実際に利用するCPUコアは8個ですが,2ノードがジョブ実行用に確保されているため,72個のCPUコアを利用したものとみなされます.

このことから,例えばシステムBで,p=36を指定したときに36個のCPUコアを使用したと見なされるためには,mの値は120G/36=約3413M以下でなければいけません.これがmの値のデフォルト値となっています.

なお,システムBでは,1ノード以上のコア数を要求するジョブには,必要なノード数が当該ジョブ専用に確保されます.そのため,例えばジョブスクリプトの記述ではCPUコアを54個 (1.5ノード相当)要求した場合でも,実行時は72個 (2ノード分)を利用したものとみなされます. 1ノード未満のコア数を要求するジョブの場合は,そのようなジョブが1台のノードに複数相乗りで実行されます.

システムCの場合は,ジョブの要求するコア数にかかわらず,要求分のコア数のみ確保されます.

  • その他のオプション
オプション 説明 指定例
-o FILENAME 標準出力・ジョブ情報を保存するファイル名の指定 -o %J.out
-e FILENAME 標準エラー出力を保存するファイル名の指定 -e %J.err
-M MAILADDR メールアドレスを指定する -M bar@sample.com
-m b ジョブ実行開始時にメールを受け取る -m b
-m e ジョブ完了時にジョブ情報を標準出力と分離してメールで受け取る -m e
-m be ジョブ開始時と完了時にジョブ情報を標準出力と分離してメールで受け取る -m be
-r n 障害発生時のジョブ再実行の禁止を指定 -r n

  • オプションの意味の置き換えや追加

以下のオプションは,ユーザの利便性のためにオリジナルからの置き換えや追加を行っています.

オプション 種別 京大スパコンでの意味 オリジナルの意味
-ug 追加 ジョブの実行グループの指定 -
-W 置き換え 経過時間上限値の指定     ジョブ属性の設定など
-A 置き換え ジョブ割当リソース量の指定 ジョブに任意の説明文を付加
  • 禁止オプション

以下のオプションは,京大スパコンでは無効化しています.

オプション PBSオリジナルの意味 備考
-S ジョブ実行時のシェルを指定 京大スパコンでは専用のbashから変更不可
-C ジョブスクリプトの指示子を指定 京大スパコンでは#QSUBから変更不可
-a ジョブの実行開始時間を指定
-A ジョブに任意の説明文を付加 京大スパコンではジョブ割当リソース量の指定オプションに置き換え
-h ジョブをhold状態に設定
-k 標準出力・標準エラー出力ファイルを実行ホストに保持する
-u 実行ユーザーを指定
-c チェックポイントの設定
-G Windows端末から会話型GUIアプリを使用
-p ジョブの優先度を指定
-P ジョブの所属プロジェクトを指定

ジョブスクリプトのユーザプログラム領域では,環境変数の設定や参照が可能です. なお,PBS環境変数は,京大スパコン向けに一部カスタマイズを行っています.詳細はオリジナルのPBSとの差異を参照してください.

環境変数の設定にはexportコマンドを使用し,環境変数を参照する場合は変数名の先頭に「$」を付与して記述します.

  • 環境変数の設定

    #書式 環境変数名=値; export 環境変数名
    LANG=en_US.UTF-8; export LANG
  • 環境変数の参照

    echo $LANG

LSFでは,ジョブ実行時にいくつかの環境変数が自動で設定されます.自動で設定される環境変数のうち,代表的なものを以下に示します.

環境変数名 内容 備考
QSUB_JOBID 当該ジョブのジョブID
QSUB_QUEUE ジョブを投入したキューの名称
QSUB_WORKDIR ジョブを投入したカレントディレクトリ
QSUB_PROCS ジョブ実行時の割当プロセス数
QSUB_THREADS ジョブ実行時のプロセスあたりの割当スレッド数
QSUB_CPUS ジョブ実行時のプロセスあたりの割当CPUコア数
QSUB_CPUS_ALLOC メモリ容量からCPUコアに換算した際のCPU数
QSUB_MEMORY ジョブ実行時のプロセスあたりの割当メモリ量上限値
QSUB_PPN ジョブ実行時のノード当たり配置プロセス数 システムCにはありません

京大スパコンでは,ユーザの利便性のため,一部オリジナルの環境変数からの追加,読み替えを行っています.

環境変数 種別 オリジナルの環境変数名
QSUB_JOBID 読み替え PBS_JOBID
QSUB_QUEUE 読み替え PBS_O_CUEUE
QSUB_WORKDIR 読み替え PBS_JOBDIR
QSUB_PROCS 追加
QSUB_THREADS 追加
QSUB_CPUS 追加
QSUB_CPUS_ALLOC 追加
QSUB_MEMORY 追加
QSUB_PPN 追加

システムB,C でMPIプログラムを実行するには, mpiexec.hydra を使用してください(Intel MPIの場合).
mpiexec.hydra は PBSと連携するため,-A オプションの p で指定した値のプロセスを自動で起動します.

mpiexec.hydra ./a.out

キューに投入されたジョブは,キューごとに設定されたスケジューリングポリシーに従って実行順序が決定されます.

システムB,Cでは,下記のポリシーで固定です(ユーザによるポリシー変更は将来的に対応予定).

ポリシーの種類 設定
SCHEDULING_POLICY
(キューに投入されたジョブの実行順序を決めるポリシー)
fcfs
(キューに投入された順番でジョブを実行する先着順スケジューリング)
PASSING_POLICY
(実行順序が自分より早いジョブを追い越して実行してもよいかを設定するポリシー)
pass
(あるジョブを実行するのに十分な計算資源がある場合,そのジョブよりも前に並んでいる実行待ちジョブを追い越して実行する)

ジョブレポート
ジョブの実行が完了すると,ジョブレポートが作成されます.レポートには次の3つの情報が含まれます.

  • ジョブの標準出力
  • ジョブの標準エラー出力
  • ジョブサマリ情報

デフォルトで作成されるファイル
レポート出力に関するオプションを特に指定しない場合は,次に示す命名規則でファイルが作成されます.

システム 内容 ファイル名
B 標準出力・ジョブ情報 Bmmddhh.oXXXXXX
標準エラー出力 Bmmddhh.eXXXXXX
C 標準出力・ジョブ情報 Cmmddhh.oXXXXXX
標準エラー出力 Cmmddhh.eXXXXXX
  • 1つのジョブに対して2つのファイルが自動生成されます
  • ファイル名の mmddhhはジョブの実行が開始された月・日・時を,XXXXXXはジョブIDを表します.

ジョブレポートのジョブサマリ情報には,ジョブの実行に関するサマリ情報が表示されます.

JobId: 3943.ja01
        Job_Name = p1t1c1m90g.sh
        resources_used.cpupercent = 1
        resources_used.cput = 00:00:01
        resources_used.mem = 3708kb
        resources_used.ncpus = 272
        resources_used.vmem = 336264kb
        resources_used.walltime = 00:00:13
        queue = gr19999b

各項目の意味を以下に示します.

項目 説明
JobId ジョブID
Job_Name ジョブ名
resources_used.cpupercent ジョブの物理CPU使用率の平均値
resources_used.cput ジョブの使用CPU時間
resources_used.mem ジョブの物理メモリ使用量の瞬間最大値
resources_used.ncpus ジョブの論理CPU使用量の瞬間最大値
resources_used.vmem ジョブの仮想メモリ使用量の瞬間最大値
resources_used.walltime ジョブの経過時間
queue ジョブの実行キュー名

ジョブが異常終了した場合,ジョブレポートのジョブ情報中に終了理由が表示されます.

  • 経過時間制限(-W オプション)による終了

    =>> PBS: job killed: walltime 3602 exceeded limit 3600
    aprun: Apid 379565: Caught signal Terminated, sending to application
  • メモリ超過によるシステム側からの強制終了 (ノード全体のメモリの圧迫によるもの)

    [NID 00181] 2016-10-07 16:04:40 Apid 391976: OOM killer terminated this process.
    Application 392007 exit signals: Killed
  • メモリ超過によるシステム側からの強制終了 (#QSUB -A オプションで指定したプロセス辺りのメモリ量をプロセスが超過した場合)

    /var/spool/PBS/mom_priv/jobs/1105396.jb.SC: line 28: 179454 Killed 

    機構FAQも参照ください。

利用可能なキューを確認するためには, qstat -q コマンドを使用します.

(実行例)

$ qstat -q
Queue            Memory CPU Time Walltime Node   Run   Que   Lm  State
---------------- ------ -------- -------- ---- ----- ----- ----  -----
eb                 --      --       --     --      0     0   --   E R
tb                 --      --       --     --      0     0   --   E R
tc                 --      --       --     --      0     0   --   E R
pb                 --      --       --     --      0     0   --   E R
pc                 --      --       --     --      0     0   --   E R
gr19999b           --      --       --     --      0     0   --   E R
                                               ----- -----
                                                   0     0
  • ジョブスクリプトの -q オプションでキューを指定することで,そのキューにジョブを投入することができます.
  • 利用可能なキューは,申し込みされたサービスコースに応じて決まっており,キュー名は次のようになります.
サービスコース キュー名
エントリコース eb
パーソナルコース pb,pc
グループコース グループ名+b/c
  • グループコースのキューを使用する場合は, -ug オプションでグループを指定する必要があります.エントリコースやパーソナルコースについては,特別な指定は不要です.

  • qstatコマンド実行時に,tb,tc というキュー名が表示されますが,これらのキューにはバッチ処理ジョブを投入することはできません.

  • 左から6,7列目のRUN,QUE,RUNはそれぞれ投入ジョブ,実行待ちジョブを表します.

キューにジョブを投入するためには, qsub コマンドを使用します.

(実行例)

$ qsub sample.sh
1100.jb
  • 作成したジョブスクリプトファイルを,コマンドの最後に続けて入力します.
  • ジョブスクリプトの実行がシステムに依頼され,ジョブIDが表示されます.
  • グループコースのキューを使用する場合は,ジョブスクリプトの#QSUB -ugオプションでグループ名を指定してください
  • ジョブがキューの上限以上のコア数を要求した場合,下記のようなメッセージが出て,ジョブは投入されません.
    qsub: Error: job's npcus requested exceeds Rstd 1152

    ここで,"Rstd 1152" の部分は,ジョブが一度に要求できるコア数の上限を 論理コア で示しています.これを2で割った値が物理コア数,すなわちお申込み頂いた資源量となります.

投入したジョブの状態を確認するためには, qstat コマンドを使用します.

(実行例 1)

$ qstat
Job id            Name             User              Time Use S Queue
----------------  ---------------- ----------------  -------- - -----
8622.jb             qsubtest.sh      b59999            00:00:00 R gr19999b
  • 投入したジョブのうち,実行待ち,または実行中のジョブが表示されます.
  • 左から5列目の S 列に状態が表示されます.Q は実行待ち,R は実行中の状態であることを表します.

(実行例 2)

[b59999 ~]$ qstat -f 1033
Job Id: 1033.jb
Job_Name = jobscript.sh
Job_Owner = b59999@laurel.kudpc.kyoto-u.ac.jp
job_state = Q
queue = gr19999b
server = jb01
Checkpoint = u
ctime = Fri Jun 10 14:55:26 2016
Error_Path = laurel.kudpc.kyoto-u.ac.jp:/usr/home/b59999/jobscript.sh.e1033
Hold_Types = n
Join_Path = n
Keep_Files = n
Mail_Points = a
mtime = Fri Jun 10 14:55:26 2016
Output_Path = laurel.kudpc.kyoto-u.ac.jp:/usr/home/b59999/jobscript.sh.o1033
Priority = 0
qtime = Fri Jun 10 14:55:26 2016
Rerunable = True
Resource_List.ncpus = 1
Resource_List.nodect = 1
Resource_List.place = pack
Resource_List.select = 1:ncpus=1
Resource_List.walltime = 01:00:00
substate = 10
Variable_List = PBS_O_SYSTEM=Linux,PBS_O_SHELL=/bin/bash,
    PBS_O_HOME=/usr/home/b59999,PBS_O_LOGNAME=b59999,
    PBS_O_WORKDIR=/usr/home/b59999,PBS_O_LANG=ja_JP.UTF-8,
    PBS_O_PATH=/usr/lib64/qt-3.3/bin:/usr/home/b59999/perl5/bin:/opt/pbs/
    default/bin:/opt/java/jdk1.7.0_45/bin:/usr/local/emacs-23.4/bin:/opt/ap
    p/intel/impi/5.0.3.049/bin64:/opt/app/intel/composer_xe_2015.6.233/bin/
    intel64:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/ibutils/
    bin:/usr/home/b59999/.local/bin:/usr/home/b59999/bin,
    PBS_O_MAIL=/var/spool/mail/b59999,PBS_O_QUEUE=gr19999x,
    PBS_O_HOST=laurel.kudpc.kyoto-u.ac.jp
comment = Not Running: Not enough free nodes available
etime = Fri Jun 10 14:55:26 2016
Submit_arguments = jobscript.sh
project = _pbs_project_default
  • -f <ジョブID> オプションを付与することで,ジョブの詳細情報を確認することができます.

投入したジョブをキャンセルするためには, qdel コマンドを使用します.

(実行例)

$ qdel 4431
qdel: Job <4431> has finished
  • ジョブIDを引数に指定します.
  • 実行待ちのジョブ,実行中のジョブともに指定できます.
  • グループ管理者は,管理するキュー内のジョブであれば,自身が投入したジョブでなくてもキャンセルできます.

投入したジョブの詳細情報を確認するためには, qs コマンドを使用します.

(実行例)

$ qs
 QUEUE     USER     JOBID   STATUS PROC THRD CORE   MEM ELAPSE( limit)
 gr19999b  b59999   5610    RUN       4   32   32   10G  01:12( 20:00)
 gr19999b  b59999   5611    PEND      1   32   32   20G  00:00( 01:00)

実行中のジョブについて,ジョブの途中経過を確認するためには, qcat コマンドを使用します.
ジョブの標準出力の表示は -o オプションを,標準エラー出力の表示は -e オプションを使用します.

(実行例 1)

$ qcat -o 5610
Tue May  1 00:00:01 JST 2016
Subroutine A step1 finished
Subroutine A step2 finished
Subroutine A step3 finished
  • ジョブIDを引数に指定します.
  • 対応するジョブの,その時点での標準出力が表示されます.

(実行例 2)

    $ qcat -e 5610
    Tue May  1 00:00:01 JST 2016
    STDERR 1
  • ジョブIDを引数に指定します.
  • 対応するジョブの,その時点での標準エラー出力が表示されます.

グループコースのキューの利用状況は qgroup コマンドで確認できます.なお, -l オプションを指定すると,ジョブごとの詳細情報が確認できます.

(実行例 1)

$ qgroup
 QUEUE    SYS |   RUN  PEND OTHER | ALLOC ( MIN/ STD/ MAX) | READY
----------------------------------------------------------------
 gr19999b  B  |     1     0     0 |    72 (  36/  72/ 144) | 0
 gr19999b  B  |     0     0     0 |     0 (  144/ 288/ 576) | 288
 
 QUEUE    USER     |   RUN(ALLOC)  PEND(REQUEST) OTHER(REQUEST)
----------------------------------------------------------------
 gr19999b b59999   |     1(   72)     0(     0)     0(     0)
  • グループコースのキュー全体の情報,利用者ごとの統計情報が表示されます.

(実行例 2)

$ qgroup -l 
 QUEUE    SYS |   RUN  PEND OTHER | ALLOC ( MIN/ STD/ MAX) | READY
----------------------------------------------------------------
 gr19999b  B  |     1     0     0 |    72 (  36/  72/ 144) | 0
 gr19999b  B  |     0     0     0 |     0 (  144/ 288/ 576) | 288
 
 QUEUE    USER           |   RUN(ALLOC)  PEND(REQUEST) OTHER(REQUEST)
----------------------------------------------------------------
 gr19999b taro123kyoto   |     1(   72)     0(     0)     0(     0)
 gr19999b b59999         |     0(    0)     1(     1)     0(     0)
 
 QUEUE    USER          JOBID   | STAT  SUBMIT_AT        | ALC/REQ | PROC THRD CORE    MEM  ELAPSE
------------------------------------------------------------------------------------------------
 gr19999b taro123kyoto  104545  | RUN   2012-06-06 15:10 |      72 |   33    1    1  4000M   00:30
 gr19999b b59999        104546  | PEND  2012-06-06 15:10 |       1 |    1    1    1  3800M   00:30
  • -l オプションを指定すると,グループコースのキュー全体の情報,利用者ごとの統計情報に加えて,ジョブごとの情報が表示されます.
  • ALC/REQ のコア数は,メモリの使用量も加味して,当該ジョブが使用する資源量を表示します.

ヘッダ 概要
RUN, PEND, OTHER ジョブの件数
ALLOC 割り当てコア数(メモリ使用量に応じてコア数を切り上げ,システムB: 3413MB毎,システムC:42666MB毎)
MIN キューに対する最低保証コア数
STD キューに対する標準コア数
MAX キューに対する最大コア数
READY すぐに利用可能なコア数

MIN,STD,MAXの詳細な意味はこちらを参照ください.

ヘッダ 概要
RUN (ALLOC) 実行中のジョブ数と割り当て資源量(コア数換算)
PEND (REQUEST) 実行待ちのジョブ数と要求資源量(コア数換算)
OTHER (REQUEST) 上記以外の状態のジョブ数と要求資源量(コア数換算)

ヘッダ 概要
STAT ジョブの状態(RUNなど)
SUBMIT_AT ジョブの投入日時
ALC/REQ 資源量(コア数換算)
PROC プロセス数
THRD プロセスあたりのスレッド数
CORE プロセスあたりのコア数
MEM プロセスあたりのメモリサイズ
ELAPSE 経過時間の制限値

以前のスーパーコンピュータシステムに搭載されていたLSFジョブスケジューラとの違いについては, 前システムからの移行 のページで整理しておりますので,そちらをご覧ください.

システムBのプロセッサではハイパースレッディング機能が有効になっており,1個の物理的なCPUコアを2個の仮想コアとして利用できます.PBSの-A オプションでプロセスあたりのスレッド数(t)とコア数(c)を,t=c×2 となるように指定してください.CPUコア上で2個のスレッドを起動させることができます.

(実行例)

$ tssrun -A p=8:t=4:c=2 mpiexec.hydra ./a.out
  • プロセスあたり2個のCPUコアを割り当て,その上で4個のスレッドを起動します.(1コアあたり2スレッド)
  • 8プロセス全体で16個のCPUコアが確保され,32個のスレッドが利用できます.

PBSでは,あるジョブが終わってから次のジョブを実行させるといった,ジョブの実行順序の指定ができます. 下記のようにqsubの -W depend オプションを使います.

-W depend=afterok:<jobid>

例えば、ジョブスクリプトa.shの終わった次にb.shを実行したいとします。 まず、"qsub a.sh"コマンドでa.shを投入して、その結果ジョブ番号が10000.jaだったとすると、以下のコマンドでb.shを投入すれば、a.shの終了後にb.shが実行されます。

$ qsub -W depend=afterok:10000.ja b.sh

qstatコマンドやqsコマンドで状況確認すると、b.shは、a.shの終了まで"HOLD"状態となります。

a.shとb.shを一度に投入したい場合は、以下のようなシェルスクリプトを実行することで可能です。

例:bashの場合

  • スクリプト(depend.shとします)
    #!/bin/bash
    JOBID=`qsub a.sh`
    qsub -W depend=afterok:$JOBID b.sh
  • 実行コマンド
    $ sh depend.sh

qsコマンドの結果は以下のように見えます。

 QUEUE     USER     JOBID      STATUS  PROC THRD CORE    MEM ELAPSE( limit)
 gr19999b  w00001   116316     RUN        1    1    1  1355M  00:01( 01:00)
 gr19999b  w00001   116317     HOLD       1    1    1  1355M  00:00( 01:00)

パラメータだけ違う似たジョブを一度に投入できる「アレイジョブ」機能が利用できます.

下記のように,ジョブスクリプトで -J オプションを使います.

#QSUB -J <start number>-<end number>[:step]

-J オプションを指定すると,ジョブ中で変数 $PBS_ARRAY_INDEX にアレイジョブ数がセットされ,インクリメントしながら実行されます.

例:a.out というプログラムに 1.data を入力するジョブ,2.dataを入力するジョブ,・・・,4.dataを入力するジョブ,をまとめて実行したい場合

  • ジョブスクリプト (この例ではarray.shとします)
#!/bin/bash

#QSUB -q gr19999b
#QSUB -ug gr19999
#QSUB -A p=36:t=1:c=1:m=3413M
#QSUB -J 1-4

mpiexec.hydra  ./a.out ${PBS_ARRAY_INDEX}.data
  • 実行
$ qsub array.sh
  • 投入直後にqsした結果
$ qs
 QUEUE     USER     JOBID        STATUS  PROC THRD CORE    MEM ELAPSE( limit)
 gr19999b  b59999   3023275[1]   PEND       36    1    1  3413M  00:00( 01:00)
 gr19999b  b59999   3023275[2]   PEND       36    1    1  3413M  00:00( 01:00)
 gr19999b  b59999   3023275[3]   PEND       36    1    1  3413M  00:00( 01:00)
 gr19999b  b59999   3023275[4]   PEND       36    1    1  3413M  00:00( 01:00)

3023275[1] のジョブでは./a.out 1.dataが,3023275[2]のジョブでは./a.out 2.dataが,実行されます.

会話型実行またはバッチジョブ中に,システムB/C/専用クラスタの計算ノードから,ログインノードおよび外部ネットワークへの通信が可能です. 外部ネットワークと接続する際に相手に認識されるIPアドレスは、133.3.51.9となります. なお,外部ネットワークから計算ノードへの直接接続はできません
(ログインノードから計算ノードへは,ジョブが実行されているノードの番号(nb-xxxx)を調べて指定することで可能です).


Copyright © Academic Center for Computing and Media Studies, Kyoto University, All Rights Reserved.