Contents

Previous Topic

4. システムの利用

Next Topic

6. プログラミングと環境

5. PBSによるジョブの投入

PBSの基本コマンドは,一般的には「qsub」というコマンドが使用されますが,TSUBAME2.5では,運用上の都合で, 「t2sub」というコマンドを使用します.利用方法は,一般的なPBSで使用されているqsubとほぼ同じですが, 一部の オプションがTSUBAME2.5用にカスタマイズされています.

5.1 ジョブスクリプト

t2subコマンドを使用してジョブを投入する場合,t2subコマンドで指定する実行モジュールは,スクリプトを指定してください. このジョブスクリプトの中から,実行モジュールを起動します.

【重要】
PBSコマンドをシェル内に記述する方法がありますが, TSUBAME2.5では,t2subというコマンドからジョブを投入します. シェル内に”#PBS” などの記述はせずに, t2subコマンド発行時にオプションを指定する ようにお願いいたします.

5.1.1 シングルジョブ

シングルジョブは実行モジュール名を記述してください.以下に例を示します.

#!/bin/sh
#
# sample jobscript
#
cd ${PBS_O_WORKDIR}
./myprog < input_data
【重要】
  • 実行するディレクトリは必ず指定してください.無指定の場合は,homeが使用されます. この例の場合は,ジョブを投入したディレクトリで実行されます.(/work0または/work1をご利用ください)
  • 指定した 実行モジュールはジョブが終了するまで変更しない でください.

5.1.2 SMP並列ジョブ

SMP並列ジョブ,同時実行ジョブにつきましては,シングルジョブと同様に,実行するモジュール名を指定してください. また,使用するスレッド数につきましては,明示的に指定するようにお願いします.

#!/bin/sh
#
# sample jobscript
export OMP_NUM_THREADS=2
export NCPUS=2
#
cd ${PBS_O_WORKDIR}
./myprog < input_data
【重要】
MPIを使用したSMP(ハイブリット)並列の場合は注意が必要です. 5.3.8 ハイブリット並列 を参照ください.

5.1.3 GPUジョブ

GPUを使用するジョブも,シングルジョブと同様に実行するモジュール名をジョブスクリプト内で指定してください. ただし,MPIを使用したGPUジョブにつきましては,次項のMPIジョブを参照ください.

5.1.4 MPIジョブ

MPIジョブにつきましては,使用するMPI環境により使い分けをお願いします.

  1. 利用にあたっての注意 MPI環境は使用する課金キューで使い分けをお願いします.

    • 従量課金 — S,S96,G, L128,L128F, L256,L512,H,X

      IBに対応している,openmpi または mvapich2 を使用してください.

    • 従量課金 — U

      IBが利用できない環境ですので,mpich2を使用してください.

    • 定額課金 — V

      IBが利用できない環境ですので,mpich2を使用してください.

  2. openmpi デフォルト(無指定)でのMPI環境は, openmpi + intel コンパイラの環境が設定されています. openmpi + pgi を使用した場合は,環境をスクリプト内に記述してください.

    #!/bin/sh
    #
    # sample jobscript
    export PATH=/usr/apps.sp3/mpi/openmpi/1.6.5/p17.1/bin:$PATH
    export LD_LIBRARY_PATH=/usr/apps.sp3/mpi/openmpi/1.6.5/p17.1/lib:$LD_LIBRARY_PATH
    
    #
    cd ${PBS_O_WORKDIR}
    mpirun -n 4 -hostfile $PBS_NODEFILE ./myprog < input_data
    
    【重要】

    実行する場合に,必ず ‘mpirun -n ‘ を記述してください. 並列数はPBSから入力される値とイコールである必要があります. $PBS_NODEFILE にPBSシステムから使用するノード情報が入ります.

  3. mvapich2 mvapich2 を使用した場合は,必ず環境指定を記述してください.

    #!/bin/sh
    #
    # sample jobscript
    export PATH=/usr/apps.sp3/mpi/mvapich2/2.0rc1/i2013.1.046_cuda7.5/bin:$PATH
    export LD_LIBRARY_PATH=/usr/apps.sp3/mpi/mvapich2/2.0rc1/i2013.1.046_cuda7.5/lib:$LD_LIBRARY_PATH
    #
    cd ${PBS_O_WORKDIR}
    mpirun -n 4 -hostfile $PBS_NODEFILE ./myprog < input_data
    
    【重要】

    実行する場合に,必ず ‘mpirun -n ‘ を記述してください. 並列数はPBSから入力される値とイコールである必要があります. $PBS_NODEFILE にPBSシステムから使用するノード情報が入ります.

  4. mpich2 mpich2 を使用した場合は,必ず環境指定を記述してください.

    #!/bin/sh
    #
    # sample jobscript
    export  PATH=/usr/apps.sp3/mpi/mpich2/3.1/i2013.1.046/bin:$PATH
    export LD_LIBRARY_PATH=/usr/apps.sp3/mpi/mpich2/3.1/i2013.1.046/lib:$LD_LIBRARY_PATH
    #
    cd ${PBS_O_WORKDIR}
    mpirun -n 4 -hostfile $PBS_NODEFILE ./myprog < input_data
    
【重要】
実行する場合に,必ず ‘mpirun -n ‘ を記述してください. 並列数はPBSから入力される値とイコールである必要があります. $PBS_NODEFILE にPBSシステムから使用するノード情報が入ります.

5.2 ジョブの投入

ジョブを投入するバッチキューを選択して,投入コマンド “t2sub” によりバッチキューへジョブを投入します.

【重要】

平成26年度より,TSUBAMEの稼働率を高めるための消費ポイント計算式の変更が導入されます. 計算予定時間と実際の実行時間の差が少なければ、 課金されるポイントを軽減できます. 詳細は 消費ポイント計算式の変更について を 参照ください.

5.2.1 バッチキューの選択

使用できるバッチキューは 3.1.3 バッチノード で紹介されていますが, 利用目的に合わせての各キューの特徴を紹介します.

1.プログラムの実行チェック

この場合は,UキューまたはVキューの確認機能をお使いください.

t2sub -q U ./test.sh

この例は,シングルジョブの確認ですが,指定するオプションは,-q U または -q V だけです. 並列ジョブの実行確認はselect文などにより指定が必要です.

※ Uキューでは2ノード,10分まで,Vキューでは2並列,10分まで使用することがてきます.

※ Uキューは課金的にもお得に設定されていますので,初めての方にはUキューをお勧めいたします.

2.短時間ジョブ

数時間で計算が終了することが判明している場合,Xキューを利用すると計算が早く終了します.

以下の要件を確認してジョブを投入します.

  • Cloud Service Utilization に”X”の表示がある (使いたい数以上の空きがある)
  • 朝の10時以降である
  • 翌日の朝9時までに終了する計算
  • アレイジョブ,依存ジョブでない

この条件に当てはまる場合

t2sub -q S -W group_list=xxxxx  ./test.sh

とするとXキューにジョブが投入されます.

【重要】

計算時間が判明している場合,できるだけ正確に時間指定をしておくと, 混雑時などでは,ジョブの実行が早まる場合があります.(無指定時は 1時間に設定されます)
3.パラメータサーベイ

この場合は,アレイジョブ,または,GXPを使用してください. アレイジョブのサイズなど色々な要素がありますが,Vキューでの実行の場合は1件あたりのアレイサイズを 購入した利用口数で制限される同時実行数を上限として考慮ください.

GXPのご利用は別途ご案内いたします.

アレイジョブの場合,1パラメータジョブがシングルの場合はVキューを,SMP並列を使用している 場合は,Uキューをご利用いただくのが予算的にも効率が良くなります. ただし,仮想マシンですのでGPUを使う場合や,演算密度が高い場合はGやSを検討ください.

4.GPUジョブ
GPUを使用するジョブはGキューをご利用ください.料金がお得に設定されています.
5.大規模ジョブ

並列数が大きなジョブでも,GPUジョブは Gキューをご利用ください.

通常のCPUを使用する大規模ジョブは H (予約)キューをご利用ください.

5.2.2 PBSオプション

t2sub に使用できるオプションを以下に示します.

t2sub options:
       -e
          標準エラー出力の出力先ファイル名を指定します.
       -et (0|1|2|3)
          ジョブ実行時間の延長レベルを指定します.無指定時は "0"となります.
       -j (oe|eo|n)
          標準出力,エラー出力を統合する場合に指定します.無指定時は "n"となります.
       -J X-Y[:Z]
          パラメトリックケース(アレイジョブ)時に使用します.
       -l
          使用する資源を指定します.
       -m n or (a|b|e)
          ジョブの終了を通知するメールを発行します.無指定時は "n"となります.
       -M user[@host][,user[@host,],...]
          メールの送信先アドレスを記述します.(-mと連動します)
       -N
          ジョブ名を指定します. 無指定時は "OTHERS"となります.
       -o
          標準出力のファイル名を指定します.
       -p (0|1|2)
          ジョブの実行優先度を指定します.
       -q
          キュー名を指定します.(必須オプション).
       -r (y|n)
          障害等で中断時にジョブをリラン(再実行)します.無指定時は "y"で再実行となります.
       -S
          ジョブスクリプトのインタプリタを指定します.
       -v var1=A[,var2=B,...]
          環境変数等の設定をジョブに持たせる場合に使用します.
       -V
          ログイン環境の環境変数を全て設定した状態でジョブを実行します.
       -W attr1=value1[,attr2=value2,...]
          ジョブの情報(アカウントなど)を入れます.
       -z
          ジョブ投入時にジョブIDを表示しません.
       -help
          コマンドラインのヘルプメッセージを表示します.
       -verify
          コマンド列の文法チェックをします.

t2sub で使用できないPBSオプションを以下に示します.

-C
   ジョブスクリプトの指示行を指定します.
-a [[[[CC]YY]MM]DD]hhmm[.SS]
   ジョブの実行開始時間を指定
-A account_string
   ジョブのAccount_Name属性に指定する文字列を指定
-h
   ジョブをhold状態に設定
-I
   インタラクティブ実行
-k (e|o|eo|oe|n)
   標準出力・標準エラー出力ファイルを実行ホストに保持する
-u user_list
   実行ユーザーを指定
-         ※コマンドの最後に指定
   コマンドを標準入力から取得

各オプションの利用については,これ以降で説明していますが,やりたいことと,参照場所の概略を以下に示します.

  項  目                      参 照 先
マシンを何台も使用したい    5.3 使用資源の指定(l(エル)オプション)
メモリーを大きくとりたい    5.5 メモリサイズの指定
ジョブ名を付けて識別したい    5.7.1 ジョブ名
課金グループでジョブを投げる  5.7.2 TSUBAMEグループ
1時間以上のジョブを投げたい   5.7.3 実行時間
開始,終了の連絡を受けたい    5.7.4 メール
リスト出力をまとめたい        5.7.5 標準出力ファイル
1時間日以上のジョブを投げたい 5.8 プレミアオプション
会話型処理をしたい            5.9 SSH直接ログイン
大規模な並列計算をしたい      5.4 予約(Hキューの利用)

5.2.3 ジョブ名(jobID)

t2subによって投入されたジョブは,一定のルールに基づいたジョブ名がつけられます. ジョブ名の命名規則は次の通りです.

xxxxxx.[サーバー名]

サーバー名にはつぎの種類があります.

t2zpbs01  --- S,S96,L系
t2zpbs03  --- G
t2zpbs05  --- H,X
t2zpbs-vm1 -- V,U

例えば次のようになります.

163401.t2zpbs01

前半の数字は,サーバー別に使用される数字(連番)です.

5.2.4 ジョブの受け付け

t2subコマンドは,課金情報を参照しながら次の手順でジョブを受け付けます.

1.文法チェック --------- オプションの制限などを確認します.
2.アカウントチェック --- ユーザーIDを確認します.
3.課金チェック  ------- 予算残高を確認します.
  次の計算により、残高(時間換算)がある場合にジョブを受け付けます.

   {(時間換算した予算残高) - (実行中と待ジョブの使用予定時間)} > 指定時間

【重要】

ジョブは,なるべく順次処理で投入してください.

まれに,残高がマイナスになる場合があります. 同時投入ジョブにより課金残高が正しく参照できず,残高以上のジョブが流れてしまった場合です. この場合,残高がプラスに復帰しないとジョブは投入できません.

大量の計算ケースを処理したい場合

などをご検討ください。 ジョブの同時実行制限は、従量課金では30本、定額課金では 購入口数になっています。

5.3 使用資源の指定(l(エル)オプション)

lオプションは,CPU数の使用方法に応じて指定します.以下に,ケース別に説明します. lオプションで指定できる項目は以下があります.

select    チャンク数を指定します(シングル,SMP並列時は=1に固定です.以下を参照してください)
ncpus     ノード内で使用するcore数(スレッド数)を指定します
mpiprocs  ノード内で動作させるプロセス数を指定します(ただし,placeオプションと連動します)
gpus      ノード内で使用するGPU数を指定します
※Thinノードに搭載されているGPU Tesla M2050のメモリに対して,ECC on/off切り替える機能を予定しています.
  • チャンク

    select=xx: で記述される ”:” 以後の記述内容を1つのチャンク(塊り)と見なします.

    • select=1

      この場合は,”:”以後がありませんからシングルジョブです.

    • select=4

      この場合は ”:”以後がありませんからCPUを4つ使うジョブとして1ノードを割り当てます.

    • select=2:mpiprocs=12

      この場合は mpiprocs=12の塊りを二つとなりますので,Sキューでは1ノードになります.

    • select=2:mpiprocs=12:mem=40gb

      この場合は,mpiprocs=12の塊りを二つですが,40gbのメモリを使えるのは1ノードだけですから2ノードを 確保します.

    • select=2:mpiprocs=12 -l place=scatter

      この場合は2ノードの割り当てになります.

シングルジョブと並列ジョブの指定方法は,t2subコマンドの「-l」(小文字のエル)オプションの使い方で変化します.以下に,実際の例を示しますので,自分のジョブに合わせて修正してお使いください.

5.3.1 シングルジョブ

通常のシングルジョブは以下の例のようにselect=1の指定でご利用ください.

t2sub -q S -l select=1 ./job.sh

5.3.2 SMP並列ジョブ

openMP/自動並列/Pthreadによる並列実行で,ノード内並列の例になります.

t2sub -q S -l select=1:ncpus=12 ./job.sh

※指定できる並列数はS/Hキューでは24,Vキューでは16となっています.

5.3.3 GPUジョブ

GPUを使用する場合,ノードあたり使用するgpu数を指定します.

t2sub -q G -W group_list=xxxxx -l select=1:ncpus=1:gpus=1 ./gpujob.sh
t2sub -q G -W group_list=xxxxx -l select=1:ncpus=3:gpus=3:mem=10gb ./gpujob.sh

※GPU数はノード内で3まで指定できます.3GPU以上を使用する場合はノード間MPIを併用してください.

5.3.4 MPIジョブ

MPIのみで構成されたジョブとSMP並列も使用したハイブリッド並列が利用できます.

※課金キューを使用する場合,” -W group_list=xxxxx “は必須となります. 以下の例では,説明したい部分のみフォーカスしていることにご注意ください.

  • MPIジョブ

    MPIを使用したジョブの流し方は幾通りかあります.(MPIのみの例)

    ノード内並列(2並列)

    t2sub -q S -l select=1:ncpus=2:mpiprocs=2  ./mpitest.sh
    t2sub -q G -l select=1:ncpus=2:mpiprocs=2:gpus=2  ./mpigpu.sh
    

    ノード間並列(2並列)

    t2sub -q S -l select=2 -l place=scatter ./mpitest.sh
    t2sub -q G -l select=2:mpiprocs=1:ncpus=1:gpus=1:mem=20gb -l place=scatter ./mpigpu.sh
    

    ノード間並列(4ノードでの16並列)

    t2sub -q S -l select=4:ncpus=4:mpiprocs=4 -l place=scatter ./mpitest.sh
    
  • MPI+SMP並列ジョブ

    以下の例は,MPIは40並列で,ノード内SMP12並列の投入です.

    t2sub -q S -l select=40:mpiprocs=1:ncpus=12  -l place=scatter ./mpitest.sh
    
  • MPI+GPUジョブ

    以下の例はノード内で3GPUを使用した4ノードでの12並列の投入です.

    t2sub -q G -l select=4:ncpus=3:mpiprocs=3:gpus=3:mem=10gb -l place=scatter ./mpigpu.sh
    

    ※MPIジョブの投入に当たっては, 5.3.6 ノード配置 も合わせて参照してください.

  • ncpusとmpiprocsの関係

    PBSでは,資源の使用にncpusの値を使っています.並列計算時の資源指定は次のようにお願いします.

    ncpus = mpiprocs   --- MPIのみの並列の場合、このように指定します.
    ncpus > mpiprocs  --- ハイブリット並列()の場合に、ノード内プロセス(1)とスレッド数を指定します.
    ncpus < mpiprocs   --- 場合によって資源を過少評価します.この関係にならないように指定してください.()
    

    5.3.8 ハイブリット並列 を参照ください.

  • 注意

    PBSでは,ncpusの資源情報が実行シェルに引き渡されますが,rank=0でのみ有効なためrank=1以降のプロセスでは デフォルト値のスレッド数で実行されます. 5.3.8 ハイブリット並列 を参照ください.

5.3.5 同時実行ジョブ

この方法は,シングルジョブを同一ノード内で同時に実行させる方法です.

指定するオプションとしては,ノード内並列と同様の指定になります.

++++ job.sh ここから
#!/bin/bash

for n in 1 2 3 4 5 6 7 8; do
  ./a.out < input$n > output$n &
done
wait
++++ job.sh ここまで

このようなシェルを用意して,並列の扱いでジョブを投入します.

t2sub -q S -l select=1:ncpus=8 ./job.sh
t2sub -q G -l select=1:ncpus=3:gpus=3 ./gpujob.sh  (GPUの時は3以下を指定)
【重要】

Gキューでは3基のGPUが利用可能ですが,cudaSetDevice() 関数による明示的な指定が無い場合, GPUの利用状況にかかわらず常に1台目のGPUが使用されます. 複数のGPUを同一プログラムで利用する方法につきましては, 以下のディレクトリに存在するCUDA SDKのサンプル simpleMultiGPU 等を参考にしてください.

/usr/apps/free/NVIDIA_GPU_Computing_SDK/3.2/C/src/simpleMultiGPU

5.3.6 ノード配置

  • l placeオプション ジョブのノードへの割り当て方法を指定します.

    -l place=free (デフォルト)

    複数のノードを利用して割り当てを行います.可能であれば複数のチャンクをまとめてノード内に配置します.

     t2sub -q S -l select=4:ncpus=1:mem=1gb -l place=free ./job.sh  (1ノード4並列)
     t2sub -q S -l select=4:mpiprocs=4:mem=1gb -l place=free ./job.sh  (1ノード4並列)
     t2sub -q S -l select=8:mpiprocs=8:mem=1gb -l place=free ./job.sh  (1ノード8並列)
     t2sub -q S -l select=64:mem=1gb -l place=free ./job.sh  (3ノード64並列:24+24+16)
    
    ※S/Hキューでは24,U/Vキューでは16,Gキューでは8となっています.
    

    -l place=scatter

    複数のノードを利用して割り当てを行います. 一つのチャンクが必ず一つのノードに割り当てられます.

    以下の例ではselect数ノード使用されます.

    t2sub -q S -l select=4:ncpus=1:mem=1gb -l place=scatter ./job.sh (4ノード4並列)
    t2sub -q S -l select=8:mpiprocs=8:mem=1gb -l place=scatter ./job.sh (8ノード64並列)
    t2sub -q S -l select=8:mpiprocs=1:ncpus=12:mem=1gb -l place=scatter ./job.sh (8ノードハイブリッド並列)
    

    -l place=pack

    ノードを一つだけ使用します.

    t2sub -q S -l select=4:ncpus=1:mem=1gb -l place=pack ./job.sh (1ノード4並列)
    t2sub -q S -l select=8:mpiprocs=8:mem=1gb -l place=pack ./job.sh (1ノード8並列)
    t2sub -q S -l select=24:mem=1gb -l place=pack ./job.sh (1ノード24並列)
    

5.3.7 大規模並列

並列環境としては,中規模並列キューとして,Sキューで,上限300ノードまでの利用が可能です. 1ノードあたり,12coreを実装していますので,3600並列までのジョブが実行可能です. また,このcoreはハイパースレッドを実装していまので,演算密度があまり高くないジョブであれば, ハイパースレッドを利用して並列数を倍化することも有効になります. スレッドの利用に関しては,事前に確認をお願いします.

GPUを使用した大規模並列では,Gキューがご利用いただけます.1ノードあたり3GPUを利用できますので, 最大で1440のGPUを使用できます.また,GキューはSキューに比べて課金係数が0.5に設定されていますので ご利用し易くなっています.

300ノードを超える場合などの大規模並列に関しては,Hキューをご利用ください.

  • ノード間並列

    以下の例は,100ノードを使用した1200並列の投入です.

    t2sub -q S -l select=100:ncpus=12:mpiprocs=12  -l place=scatter ./mpitest.sh
    
  • ノード間並列GPUジョブ

    以下の例は,100ノードを使用した300並列のGPUジョブ投入です.

    t2sub -q G -l select=100:ncpus=3:gpus=3:mpiprocs=3  -l place=scatter ./mpigpu.sh
    
  • ハイブリッド並列

    以下の例は,MPIは400並列で,ノード内SMP12並列の投入です.

    t2sub -q S -l select=400:mpiprocs=1:ncpus=12  -l place=scatter ./mpitest.sh
    

    ※予約キューへの投入の場合は次節を参照してください.(特にキューの指定方法)

5.3.8 ハイブリット並列

ハイブリット並列の場合は実行シェル内で使用されるMPIによって環境変数の操作が異なってくるため PBSの資源指定でジョブをコントロールします. MPIの環境変数設定シェルを使って例を示します.

     #!/bin/sh
     #
     # sample jobscript
     #
     cd ${PBS_O_WORKDIR}
     #openmpi
     source set_ompi-1.6.5_p17.1.sh
     mpirun -n 4 -hostfile $PBS_NODEFILE -x OMP_NUM_THREADS=$OMP_NUM_THREADS ./myprog

     #mvapich2
     source set_mvp-2.0rc1_p17.1_cuda7.5.sh
     export MV2_NUM_HCAS=2
     mpirun -n 4  -hostfile $PBS_NODEFILE ./myprog

     #mpich2
     source set_mpch-3.1_p17.1.sh
     mpirun -n 4  -hostfile $PBS_NODEFILE ./myprog

※ ご利用するMPI環境部分のみお使いください.
  Pthreadプログラムの場合は,"OMP_NUM_THREADS"部分を"NCPUS"としてください.

この場合,PBSからのジョブは

t2sub -q S -l select=4:ncpus=4:mpiprocs=1:mem=45gb -l place=scatter ./job.sh
t2sub -q S -l select=4:ncpus=8:mpiprocs=1:mem=45gb -l place=scatter ./job.sh
t2sub -q S -l select=2:ncpus=4:mpiprocs=2:mem=45gb -l place=scatter ./job.sh

などと任意のスレッド数のジョブが投入できます.ただし,MPIのプロセス総数はPBSからは変更できません.

  • 【ノート】

    次の様なシェルコマンドを入れ込むことによりプロセス数をコントロールできます.

    MPI_PROCS=`wc -l $PBS_NODEFILE | awk '{print $1}'`
    mpirun -n $MPI_PROCS -hostfile $PBS_NODEFILE .....
    

    とします. ただし,この方法はPBS情報からプロセス数を編集していますので予定通りのデータが渡ることを必ず 事前に確認してご利用ください.

SMP並列部分で,オーバーヘッドが大きくなりスレッド数を大きく取れない場合はノード内でMPIプロセスを増やす ことなどが考えられます.この場合の記述が上記例の3番目に該当します. この例では,mpiプロセスが出すスレッドの数がncpusになりますので,ノード内には合計8coreが使用されます.

【重要】

SMP並列オプション付きでコンパイルされた実行モジュールを使用する場合でSMPを使用しない場合

t2sub -q S -l select=1:ncpus=1:mpiprocs=4:mem=45gb -l place=scatter ./job.sh

などとncpusの指定を”1”としてください.

5.4 予約(Hキューの利用)

マシンを予約することにより,10000並列を超える大規模計算が可能です. 以下の手順でご利用ください. Hキューの仕組みは 3.5.1 大規模並列環境 を参照ください.

1.予約

別途 TSUBAME2.5利用ポータル_利用の手引 に従ってキューを予約してください.

2.ノードとキューの確認

1と同様にキューが予約されていることを確認してください. ノード予約画面で,「予約キュー名」に「R123」などと表示されますので,このキューの名前を使用します.

また,TSUBAME にログインし,t2rstat コマンドを実行することでも,予約したキューの情報を確認できます.

> t2rstat
JobId          Queue  Group    ReserveState    ReserveStart / ReserveDuration / ReserveEnd                  NDS
---------------------------------------------------------------------------------------------------------------
R123.t2zpbs05  R123   t2gxxxx  RESV_CONFIRMED  Tue Jan  1 09:45:00 2013 /  83700 / Wed Jan  2 09:00:00 2013 400

3.バッチによる使用

予約時間になりましたら,予約者のアカウントでジョブの投入ができるようになります. 次のようにキュー名を指定して投入します.

t2sub -q R123 -W group_list=t2gxxxx -l select=400:ncpus=12:mpiprocs=1:mem=40gb -l walltime=167:00:00 ....

などとします.予約したノード数以内でのご利用であれば自由にジョブを投入できます.

5.5 メモリサイズの指定

メモリサイズの指定は,MPI,SMPにかかわらず,チャンク内で使用されるメモリ量の合計値を指定してください.

  • 指定できるメモリサイズ

    S/Hキューで使用されているマシンはメモリとして54GiBを実装しています.PBSでメモリ量を指定する場合は, mem=53gbが上限になります.mbで指定した場合は,mem=54400mb と指定できます. これは,1gb=1024mbで変換しているためです. どちらの指定方法でも可能ですが,システムが使用しているメモリもありますので, 実際に ユーザーが利用できるメモリは50GB程度を目安 に考慮してください. MPIを使用する場合 は,通信バッファにメモリが使用されますので, ユーザーが指定するメモリサイズは 45GBを目安 としてください.

    ※OSがSP3にアップしたことで,システムの使用メモリが増加しています.

    ※システム使用メモリが不足するとフリーズする場合があります.

  • SMP並列

    t2sub -q -S -l select=1:ncpus=8:mem=40gb ./job.sh
    
    ※この場合,チャンクは1ですので,ノード内で使用するメモリ量を記述します.
    
  • MPI並列

    t2sub -q S -l select=4:ncpus=4:mpiprocs=4:mem=40gb  -l place=scatter ./mpitest.sh
    

    ※この場合はノード内4プロセスが使用するメモリが40gbとして解釈されます.

    t2sub -q S96 -l select=4:ncpus=4:mpiprocs=4:mem=40gb  ./mpitest.sh
    
    ※この場合,上と同じですが,キュー内に40gbのチャンクを二つとれるので,2ノードで実行になります.

    ただし,scatterをいれると4ノードでの実行になります.

メモリの単位としてgb,mb,kb,bが指定可能です.1gb=1024mb, 1mb=1024kb, 1kb=1024bとなります.指定がない場合は b(バイト) が指定されたものとして扱われます.また,小数点は使用できません.したがって,1.5GBのメモリを指定したい場合は,「mem=1536mb」と指定します.

5.6 アレイジョブ(パラメータサーベイ)

プログラム内のパラメータ感度解析などを実施する場合,パラメータの数字を具体的に変化させて結果の変化を調査します. プログラムよっては,多くのパラメータを持つため,膨大な計算が発生したりします. このような場合に威力を発揮するのがアレイジョブです. (パラメトリックスタディジョブと呼ぶ場合もあります). 以下,順に説明します.

  1. 投入シェルを作成

    > cat jikken.sh
    #!/bin/bash
    ./sample << EndOfFile
    $PBS_ARRAY_INDEX
    EndOfFile
    #
    
$PBS_ARRAY_INDEX がパラメータ値になります. この例では,プログラム内で要求するパラメータ値をヒアドキュメントの形でプログラムに入力しています. アレイサイズの最大値は各キューの最大投入本数になっています.
  1. ジョブの投入

    用意したシェルを次のように投入します.

    > t2sub -J 100-150 ./jikken.sh
    Checking accounting informations...
    Checking requested resources...
    Submitting a job to PBS...
    6090926[].t2zpbs01
    
投入オプションは -J 開始値-終了値:増分 として指定します. 上記例( -J 100-150)とした場合,パラメータの開始値が100,増分1,終了値150 として 解釈(:1の場合は省略可)されます. パラメータ値は $PBS_ARRAY_INDEX という環境変数に設定されますので,この環境変数をプログラムにヒアドキュメントの形で入力してやります. 同時実行もありますので,ファイルの形にする場合は上書きに注意する必要があります.
  1. 実行状況

    アレイジョブは次のように表示されます.

    > t2stat -u nectest
    Job id             Name             User              Time Use S Queue
    ----------------   ---------------- ----------------  -------- - -----
    6090926[].t2zpbs01 OTHERS           nectest           00:00:10 B S
    
  2. 結果

    計算結果はジョブ名の後ろにパラメータ数が付いてリストされます.

    > ls OTHER*
    OTHERS.o6090926.100  OTHERS.o6090926.113  OTHERS.o6090926.126
    OTHERS.o6090926.101  OTHERS.o6090926.114  OTHERS.o6090926.127
    OTHERS.o6090926.102  OTHERS.o6090926.115  OTHERS.o6090926.128
    OTHERS.o6090926.103  OTHERS.o6090926.116  OTHERS.o6090926.129
    OTHERS.o6090926.104  OTHERS.o6090926.117  OTHERS.o6090926.130
    
  3. PBSの他のオプションとの組み合わせ

    特に制限,不具合は報告されていません.

5.7 ジョブ関連情報の指定

ジョブ実行にあたって使用する主な関連オプションを説明します.

5.7.1 ジョブ名

  • Nオプション

    これは,ジョブ名を指定(15文字以下)します.

    t2sub -N sample-J -l select=1 ./jpb.sh
    

    無指定の場合は,「OTHERS」がつきます.

5.7.2 TSUBAMEグループ

  • W group_listオプション

    TSUBAMEグループを指定します.

    t2sub -W group_list=xxxxx -q S -l select=1 ./job.sh
    

    下記のコマンドを実行することにより,所属しているグループの確認ができます.

    t2group
    

5.7.3 実行時間

  • l walltimeオプション

    実行時間を -l walltime=hh:mm:ssの形式で指定します.指定した実行時間に達すると実行中のジョブは強制終了さ れますので,ジョブの実行に十分な時間を指定してください.指定がない場合は1時間(01:00:00)が指定されたもの として扱われます.

    t2sub -l walltime=10:00:00 -et 1  -W group_list=xxxxx -q S -l select=1 ./job.sh
    

【重要】

平成26年度より,TSUBAMEの稼働率を高めるための消費ポイント計算式の変更が導入されます. 計算予定時間と実際の実行時間の差が少なければ、 課金されるポイントを軽減できます. 詳細は 消費ポイント計算式の変更について を 参照ください.

5.7.4 メール

  • m,Mオプション

    ジョブの開始,終了時に利用者宛にメールを出すことができます.

    t2sub -m abe -M user@host -q S -l select=1 ./job.sh
    

    上記の例では,ジョブの実行開始・終了時および異常終了が発生した場合にuser@host宛てに通知メールが送信され ます.オプション内の指定は,次の通りです.

    n : no mails are sent (default)
    a : a mail is sent when the job is aborted.
    b : a mail is sent when the job is started.
    e : a mail is sent when the job finishes.
    

    -m be と記述すると,開始,終了時にメールが出ます. また,-m e と記述すると終了時のみメールが出ます.

5.7.5 標準出力のコントロール

  1. 標準出力ファイル

標準出力ファイルは-oオプションでの指定をしない場合,以下の名称で出力されます.

(ジョブ名).o(ジョブID数値)

-oオプションを使用することにより,標準出力ファイルのパスを指定できます.

t2sub -q S -l select=1 -o /work1/group-name/login_name/output.txt ./job.sh
  1. 標準エラー出力ファイル

標準エラー出力ファイルは-eオプションでの指定をしない場合,以下の名称で出力されます.

(ジョブ名).e(ジョブID数値)

-eオプションを使用することにより,標準エラー出力ファイルのパスを指定できます.

t2sub -q S -l select=1 -e /work1/group-name/login_name/output_err.txt ./job.sh
  1. 出力ファイルの結合

標準出力と標準エラー出力を一つにまとめたい場合は-jオプションを使用します.

-j oeを指定すると,標準出力ファイルに標準エラー出力の内容が追加されます.

t2sub -q S -l select=1 -j oe ./job.sh
  1. パーミッションの設定

PBSの標準/エラー出力はジョブを投入したユーザーのみにアクセス権が設定されています. /work0,1などでデータと結果を共有したい場合にオーナ以外でも結果ファイルを見ることが できるように出力のアクセス権を -W オプションにより設定できます. :

t2sub -q S -l select=1 -W umask=022 ./job.sh

これにより

-rw-r--r-- 1 login_name users 454 2014-07-09 09:15 OTHERS.e1356802
-rw-r--r-- 1 login_name users  44 2014-07-09 09:14 OTHERS.o1356802

などとすることがてきます.

5.7.6 障害時の再実行指定

マシン障害によりジョブが中断した場合,ジョブは再実行されますが, 再実行する必要が無い場合は -r nを 指定してください.

t2sub -q S -l select=1 -r n ./job.sh

再実行によって出力結果が上書きされることがありますのでご注意ください. また,実行時に特定のファイルの存在をチェックしている場合には実行されない場合もありますのでご注意ください. なお,障害の種類によっては自動で再実行されない場合があります.

5.8 プレミアオプション

プレミアオプションとして,次の二つのオプションが利用可能です.

-et (0|1|2|3)
ジョブ実行時間の延長レベルを指定します. 2,3を指定すると通常よりも高い課金係数が適用されます.
-p (0|1|2)
ジョブの実行優先度を指定します. 1,2を指定すると通常よりも高い課金係数が適用されます.

5.8.1 時間延長

  • etオプション

    標準での指定可能な実行時間の上限値は1時間(1:00:00)となっていますが,-etオプションの指定により 最長4日(96:00:00)まで指定可能です.

    0 : ジョブ実行時間の最大値は1時間( 1:00:00)となります. (デフォルト)
    1 : ジョブ実行時間の最大値は1日(24:00:00)となります.
    2 : ジョブ実行時間の最大値は2日(48:00:00)となります.
    3 : ジョブ実行時間の最大値は4日(96:00:00)となります.
    

    ただし延長時は,S/Gキューでは追加の課金係数が適用され,Vキューでは,同時実行数が減少します.

    t2sub -l walltime=72:00:00  -et 3  -W group_list=xxxxx -q S -l select=1 ./job.sh
    

5.8.2 プライオリティ

  • pオプション

    ジョブの実行優先順位を上げることで,ジョブをキュー待ち状態から実行されやすくします.

    0 : 標準の実行優先度です. (デフォルト)
    1 : 実行優先度は0より高く,2より低くなります.
    2 : 最高の実行優先度となります.
    

    0,1,2のパラメータが有効で,1,2を指定することにより通常より高い優先順位となります. ただし,S/Gキューでは追加の課金係数が適用され,Vキューでは,同時実行数が減少します.

    t2sub -p 1 -q S -l select=1 ./job.sh
    

5.8.3 課金係数

プレミアオプションを使用した場合に適用される課金係数は以下のとおりです.

  p 0(優先は普通) p 1(やや高め) p 2(高め)
et 0(実行時間:1時間以内) 0.9 1.8 3.6
et 1(実行時間:24時間) 1 2 4
et 2(2倍に延長) 2 4 8
et 3(4倍に延長) 4 8 16

S/Gキューでの課金係数の適用はご利用になった計算時間(walltime)に係数をかけることによって実施しています. 課金表示は,標準エラー出力(.e)の最後に出力されています.

また,Vキューでの適用は同時実行数の減少として実施され,課金係数が2倍のとき同時実行数は1/2となりますが, et=0,1は同じ扱いで同時実行数の増減はありません.

5.9 SSH直接ログイン

予約したノード,S,S96, L128,L128F, L256,L512,U,Hキューで確保したノードには自由にsshでログインすることができます. S,S96, L128,L128F, L256,L512キューはノードを確保したユーザのみが, Hサービスはノードを確保したグループに属するユーザが直接ログインすることができます.

sshログインは次のような用途に応用可能です.
  • 長時間のGUIアプリケーションの実行を行う用途(PBSではGUIアプリケーションの実行が出来ないため)

5.9.1 ジョブスクリプトの準備

ジョブスクリプトを作成します. sshログインして作業を行うためのノード確保を目的とする場合は, 次のようにsleepのみを実行するスクリプトを作成します.

#!/bin/sh
sleep 3600  ← sleep の引数に秒数(この場合は3600秒=1時間)を指定

ジョブスクリプトを作成後,t2sub コマンドによりジョブを投入します.

5.9.2 ノードの確認

以下の手順により,ジョブが確保したノードが分かります.

①.Sキューのとき

t2statに-n1オプションを指定して確認します.

> t2stat -n1

t2zpbs01:
                                                    Req'd  Req'd   Elap
Job ID        Username Queue Jobname SessID NDS TSK Memory Time  S Time
------------- -------- ----- -------- ------ --- --- ------ ----- - -----
2997.t2zpbs01 necse    S     OTHERS      --    2   8    1gb 01:00 R   --  t2a000077/0*4+t2a000078/0*4

ノード名1/J1(*P1)+ノード名2/J2(*P2)++...+ノード名N/JN(*PN) の形式でノード一覧が表示されます. 上の例ではノードはt2a000077とt2a000078になります.

②.予約キューのとき

t2rstatに-Fオプションと予約したキュー名を指定して実行します.

> t2rstat -F R123

Name: R443.t2zpbs05
...
resv_nodes = (t2a004101:ncpus=24:mpiprocs=24:mem=55574528kb:gpus=3)+
(t2a004102:ncpus=24:mpiprocs=24:mem=55574528kb:gpus=3)

resv_nodes に(ノード名1:...)+(ノード名2:...)+...+(ノード名N:...)の形式でノード一覧が表示されます. 上の例ではノードはt2a004101とt2a004102になります.

5.9.3 ログイン

該当ノードの一覧で表示されたマシンのどれかをインタラクティブとして

ssh -Y t2a010113 (例です:ノードリストから選択してください)

などとログインしてください. ノード一覧をホストファイルとして,自由にご利用いただけます.

mpirun -np 2048 -hostfile ./nodelist ./mpiprog

mpi環境は通常のインタラクティブと同様に openmpi + intel になっていますので, 他の環境で利用する場合は切り替えてご利用ください.

なお,作業完了後に t2del コマンドにより ジョブを削除することを忘れないようにしてください.