東京大学地震研究所地震火山情報センター

バッチジョブの利用方法

バッチジョブの利用方法についてご説明致します。

前システムとの主なコマンド対応表

 

前システム新システム
ジョブの投入qsubbsub
ジョブの監視qstat

bjobs

bstatus(全ユーザ)

ジョブの切断qdelbkill
スクリプト指示行#QSUB#BSUB


キュー設定

使用するジョブの並列度、メモリ量によってキューが設定されています。


キュー名

実行時間

メモリ制限

最大メモリ

制限

並列度

(CPU数

(利用コア数))

同時実行数

(最大コア数)

A

2h (cputime)

8GB

16GB

1(1-6)

1(6)

B

100h

32GB

32GB

1(1-6)

4(24)

C

80h

128GB

128GB

4(12-24)

3(72)

D

70h

256GB

256GB

8(25-48)

3(144)

E

50h

256GB

512GB

16(49-96)

2(192)

F

40h

2048GB

2048GB

64(193-384)

1(384)

M

12h

8GB

8GB

MATLAB用

 

例えば、キューCでは1ジョブごとに、128GBメモリ、24並列を80時間まで利用できます。

キューCの「同時実行数」は3ですので、ユーザごとに3本のジョブを流すことができます。



ジョブの実行

ジョブスクリプトを作成し、bsubコマンドで投入します。

並列度1のシングルジョブはキューA、もしくはキューBに投入してください。

  • 投入に必要な記述
    #BSUB-qキュー名
    #BSUB-n並列度数
    #BSUB-o 出力ファイル名(指定しない場合は、メールで届きます。)
  • スクリプト例
    sgiadm@eic:> cat sample.csh
    #!/usr/bin/csh
    #BSUB -q A
    #BSUB -n 1
    #BSUB -o sample.out

    dplace ./sample 4000

  • スクリプト作成時の注意点
    ジョブの標準出力・標準エラー出力は/homeに一時的に保存され、ジョブ終了時に-oで指定されたファイルに書き込まれます。-oで指定しない場合、eicにメールで届きますが、メールサイズは1MBに制限されていますので、通常は#BSUB-oか、コマンド行でのリダイレクションでファイル名を指定するようにしてください。

  • ジョブ投入
ここではキューAに投入しています。

sgiadm@eic:> bsub < sample.csh
set LSB_SUB_MAX_NUM_PROCESSORS is 6
Job <958> is submitted to queue <A>.

 

bjobsでジョブの状態がわかります。
sgiadm@eic:> bjobs
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
958     sgiadm  RUN   A          eic         6*eic    ./sample.csh Feb  3 15:58


ホストeicで6コアを使用して実行されています。
eicは1cpuソケット6コアのサーバで、他のジョブによって性能に影響が出ないよう、cpu、ローカルメモリを1つのジョブで占有する仕組みになっています。
キューA、Bはシングルジョブ用のキューですが、最大6並列までを流すことができます。
並列計算の手法は後述を参照してください。
  • bsubの主なオプション

  • #BSUB -q A
    キュー名(必須)
    #BSUB -n 1
    使用するコア数(必須)
    自動的に12の倍数(1〜5の場合は6)に変換されます。
    #BSUB -o sample.out
    出力ファイル名(必須)
    #BSUB -B
    ジョブ開始時にメールが届きます。(任意)
    #BSUB -N
    ジョブ終了時にメールが届きます。(任意)
    #BSUB -u user@eri.u-tokyo.ac.jp
    メールの宛先(任意)
    指定しなければ、eicのローカルアカウントに届きます。
    #BSUB -J test0203
    ジョブ名(任意) 複数のジョブを区別できます。
    #BSUB -M 524288
    メモリ量(MB)(任意)
    通常より多いメモリを必要とする場合に指定します。
    #BSUB -P 2
    CPU毎で使用するコア数(任意)
    「バッチジョブ(より高度な並列計算)」参照

    バッチシステムからのメールはlsfadmin@eic.eri.u-tokyo.ac.jpから届きますが、これは配信用のアドレスのため、返信することはできません。ご注意ください。


ジョブの監視・停止

ジョブの監視はbstatusコマンドを利用します。

sgiadm@eic:> bstatus
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
959     sgiadm  RUN   C          eic         24*eicp1    *para2.csh Feb  3 16:26
961     sgiadm  PEND  C          eic                    *para3.cshFeb 316:32


STAT行がジョブの状態を表しています。RUNは実行状態、PENDは待ち状態です。

自分のジョブのみを参照する場合はbjobsです。

 

ジョブの停止はbkillコマンドを使用します。停止したいジョブのジョブIDを指定します。

sgiadm@eic:> bjobs
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
957     sgiadm  RUN   C          eic         24*eicp1    ./para.csh Feb  3 15:44

 

sgiadm@eic:> bkill 957
Job <957> is being terminated

 

sgiadm@eic:> bjobs
No unfinished job found


bkillのみで停止できない場合、-rを使用して停止できます。

sgiadm@eic:> bkill -r 958
Job <958> is being terminated


MPI並列計算

  • スクリプト例(24並列)
    sgiadm@eic:> cat go.24
    #!/usr/bin/csh
    #BSUB -q C
    #BSUB -n 24
    #BSUB -o test.out
    mpirun -np 24 dplace -s1 ./xhpl < /dev/null >& out.mpi
    並列数24を#BSUB -nと、mpirunの-npで指定します。

これをbsubで投入します。


sgiadm@eic:> bsub < ./go.24
set LSB_SUB_MAX_NUM_PROCESSORS is 24
Job <751> is submitted to queue <C>.

 

12の倍数に自動的に変換されます(この場合は元々12の倍数のため、そのままです。)
sgiadm@eic:> bjobs
JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
751     sgiadm  RUN   C          eic         24*eicp1    ./go.36    Feb  3 10:13

 

4CPU(24コア)を使用して、24並列のジョブが実行されます。
(他のジョブの影響を受けることなく、cpuやローカルメモリを使用できるように、実際の並列度より多目のコアを確保することがあります。。)


OpenMP並列計算

  • スクリプト例(48並列)
    sgiadm@eic:> cat para.csh
    #!/usr/bin/csh
    #BSUB -q D
    #BSUB -n 48
    #BSUB -o test.out
    setenv OMP_NUM_THREADS 48
    dplace  -x2 ./para < /dev/null >& out.para
    並列数48を#BSUB -nと、環境変数OMP_NUM_THREADSで指定します。

これをbsubで投入します。
sgiadm@eic:> bsub < ./para.csh
set LSB_SUB_MAX_NUM_PROCESSORS is 48
Job <957> is submitted to queue <D>.

 

12の倍数に自動的に変換されます(この場合は元々12の倍数のため、そのままです。

8CPUソケット(48コア)を使用して、48並列のジョブが実行されます。
(他のジョブの影響を受けることなく、cpuやローカルメモリを使用できるように、実際の並列度より多目のコアを確保する場合があります。)


MPI+OpenMPハイブリッド型並列計算

MPIプロセスごとにOpenMPのスレッドを起動する計算です。

同一MPIプロセス中のOpenMPのスレッドが同一CPU内のローカルメモリを使用できるように、OpenMPのスレッド数は2,3,6のいずれかを推奨します。

 

4mpi×3スレッドの場合
0  1   2     3       mpiプロセス番号
[0,0,0,1,1,1] [2,2,2,3,3,3] OpenMPスレッドが所属するMPIプロセス番号

 

6mpi×2スレッドの場合
0 1   2 3    4 5    mpiプロセス番号
[0,0,1,1,2,2] [3,3,4,4,5,5] OpenMPスレッドが所属するMPIプロセス番号

[ ]はCPUソケット

  • 24並列(8mpi×3スレッド)のスクリプト例
    sgiadm@eic:> cat go.csh
    #!/bin/csh -x
    #BSUB -q C
    #BSUB -n 24
    #BSUB -o hy1.out
    limit stacksize unlimited
    set np=8
    set th=3
    setenv OMP_NUM_THREADS ${th}
    mpirun -np ${np} omplace -nt ${th} -c 0-11:bs=${th}+st=3 ./a.out
    npにはmpiの並列数、thには各mpiでいくつのスレッドを使用するかを指定します。dplaceコマンドの代わりにomplaceコマンドを指定してください。

mpirunのコマンド行で、どのようにスレッドを配置するかを指定しますが、ここで
omplace -nt ${th} -c 0-11:bs=${th}+st=3
を挿入します。-cではコア番号0から23まで24個のコアを3つづつ使用することを指定します。
24並列の場合は、-c 0-23というように、0-(並列度数マイナス1)を指定してください。

 

bsubコマンドでジョブを投入します。
sgiadm@eic:>bsub < go.csh
set LSB_SUB_MAX_NUM_PROCESSORS is 24
Job <971> is submitted to queue <C>.