job scheduler

job schedulerとは

ジョブスケジューラはクラスタ内の各ノードの負荷状況、リソース使用量(CPU,メモリ等)を監視し、ユーザが投入したジョブを最適なノードに割り当てて実行します。 同時に、ジョブへのノードの割り当て(実行)も行うので、複数のユーザが同時にジョブを投入してもそれぞれ最適なノードへ効率的に割り当てて実行します。 したがって、特定のノードに負荷が偏ることがなくクラスタシステム全体の稼働率を上げることができます。
また、ジョブごとに優先度を設定することにより、特定のジョブを優先的に実行したり、ユーザ単位で優先度を変更することで複数のユーザで平等に実行できるようにする機能を持っているものもあります。 この他にもジョブスケジューラによって多様なスケジューリング方法があります。

TORQUEとは

TORQUE(Tera-scale Open-source Resource and QUEue manager)とは,
ジョブスケジューラの一つで、Cluster Resource社がOpen PBSをもとに開発されたフリーのパッケージです。
Open PBSは1998年に開発が終了しており、Open PBSを改良して開発が行われているのがTORQUEです。
そのため, 基本構成(コマンドやコンポーネント構成, 特徴など)はOpen PBSと同様です。

Mauiユーザ

情報工学科では、ジョブスケジューラを動かすための専用のuserを作成しています。
その大きな理由としては、結果の送信にscpを利用するためRSAの認証をサーバ側と計算ノード側でフリーにする必要があるためです。
RSA認証とはsshやscpなどで使われている認証システムです。詳細は省きますがscpなどを行うときにパスワードを聞かれないようにする設定が必要である、というわけです。
個人個人で使おうとするとユーザごとにこの処理を行わないといけません。
ですから
ジョブスケジューラを使う場合はnahaサーバへmauiユーザとして入ってください。passwordはサーバ班まで。

TORQUEの使い方

TORQUEで使えるコマンドはqsub、qstat、qdelの3つがあります。
qsubでJobを投げ、qstatでキューの状況を確認、qdelでキューに蓄えられているJobの削除を行います。

ジョブの追加(qsub)

qsubでは引数でjobを投入することが可能ですが、基本的にはスクリプトで記述したファイルを引数に渡すことで動作させます。

    [maui@naha sample]$ qsub sample.sh 74.naha.ie.u-ryukyu.ac.jp

これはJobIDが74番目であるジョブがsubmitされたことになります。 ジョブスケジューラではこのJobIDで自分の投入した仕事の状態確認などを行います。

以下にsample.shを示します。
このサンプルでは/net/home/other/maui/test/sample/に置いてあるexample.cを実行するという処理を行っています。

    #!/bin/sh
    #PBS -l nodes=1:ppn=1
    #PBS -l cput=00:01:00
    # -l walltime=00:01:00
    #PBS -o naha.ie.u-ryukyu.ac.jp:/net/home/other/maui/test/result/
    #PBS -q dque
    # -q three_hours
    #PBS -N sample-
    #PBS -j oe
    #PBS -M e065702@ie.u-ryukyu.ac.jp
    #PBS -m e
    
    cd /net/home/other/maui/test/sample
    cc -o example example.c
    ./example
    exit 0

上記は簡単なサンプルの例である。qsubに投入するファイルではこの用に記述します。
#はコメントアウトですが、#PBSはqsubに対する命令です。
簡単なオプションとしての例を説明します。

PBS option 説明
-l nodes=1:ppn=1 nodes=使用するノード数:ppn=1ノード毎に使用するcpu数
-l cput=00:00:30 cpuを使用する時間を指定。任意。
-l walltime=00:01:00 処理の目安としての時間を指定する。任意。
-o naha.ie.u-ryukyu.ac.jp:/dir 結果の出力先を指定。指定しない場合qsubしたディレクトリへファイルは出力される。任意。
-q dque 必須オプション。TORQUE側で設定したqueueを指定。デフォルトのqueueはdqueで、優先度の高い仕事をする場合はthree_hoursに変更する。
-N sample- jobの名前を設定。-oオプションで出力先を指定しない場合、出力ファイルはsample-.o[jobID]となる。
-j oe エラー出力と標準出力を1つのファイルにまとめる
-M your mailaddress -mオプションで送るメールの宛先リストを作成する。
-m e 処理が終了した場合、-Mで指定したメールアドレスにメールを送信する。-m aオプションだとエラー時に、-m bオプションなら処理開始時にメール送信。-m aebなども可能です。
-a [20080601]1400 何時に処理を行うかを記述することができる。2008年6月1日14:00に処理を行いたい場合は例のように指定する。必要ない場合は日付はいらない。

cputやwalltimeはだいたいの時間を指定します。この指定された時間をあまりにoverした場合、処理は終了されます。

簡単な使用法(simple-sample.sh)

下手な設定は面倒くさいという方や、まず使ってみたい方は以下のサンプルを参考にしてください。
ただし、特にcpuなどの指定がない場合です、並列処理などは少し下の方に載せています。
このサンプルは必要最低限のオプションです。(本当に必要最低限なら-qオプションだけで良かったりしますが)

    #!/bin/sh
    #PBS -q dque
    #PBS -N sample-
    #PBS -j oe
    
    cd /net/home/other/maui/test/sample
    ./example
    exit 0

並列処理(MPI)を使用する場合の使用法

並列処理(MPI)を使用する場合のサンプルを以下に載せます。
通常のプログラムと違ってMPIではデーモンを起動する側と相互にRSA認証をしなくてはなりません。
mauiユーザではすべてのノードで相互認証をさせているので、そこの心配はありません。
ただし使用するcpu数やノード数を指定する必要があります。

    #!/bin/sh
    #PBS -l nodes=2:ppn=1
    #PBS -q dque
    #PBS -N sample-
    #PBS -j oe
    #PBS -M e065702@ie.u-ryukyu.ac.jp
    #PBS -m e
    #PBS -o naha.ie.u-ryukyu.ac.jp:/net/home/other/maui/test/result/
    
    cd /net/home/other/maui/bqp
    lamboot -v $PBS_NODEFILE
    mpirun -ssi rpi tcp -np 2 greetings
    lamhalt
    exit 0

MPIを使う際にはlambootでデーモンを起動させる必要があります。
その場合にTORQUEの環境変数である$PBS_NODEFILEを指定するとノードを自動的に割り振ってくれます。
また、上記のようにcpuを2つ使う処理ではnodes=2:ppn=1としても良いですし、nodes=1:ppn=2としても大丈夫です。
各ノードで使用するcpu数はこの方法で指定してください。

キューの状態表示(qstat)

qstatでは設定したキューの状態を確認することができます。
実際に格納されているJobや、実行中のJobを確認することが可能です。

    [maui@naha sample]$ qstat
    Job id              Name             User            Time Use S Queue
    ------------------- ---------------- --------------- -------- - -----
    74.naha             sample-          maui                   0 R dque

上記のようにqstatコマンドでは現在queueに格納されている仕事を確認することができます。 StateがRならば実行中、Qならば仕事待ち、Wはオプションで実行時間を指定した場合の待機中を表します。 qstatのオプションは他にもありますが、拡張機能であるMauiのコマンドが優秀ですのでそちらを紹介します。

キューの状態表示(showq)

    [maui@naha sample]$ /usr/local/maui/bin/showq
    ACTIVE JOBS--------------------
    JOBNAME            USERNAME      STATE  PROC   REMAINING            STARTTIME
    
    74                     maui    Running     1 99:23:59:48  Tue May 27 17:17:31
    
         1 Active Job        1 of  194 Processors Active (0.52%)
                             1 of   97 Nodes Active      (1.03%)
    
    IDLE JOBS----------------------
    JOBNAME            USERNAME      STATE  PROC     WCLIMIT            QUEUETIME
    
    0 Idle Jobs
    
    BLOCKED JOBS----------------
    JOBNAME            USERNAME      STATE  PROC     WCLIMIT            QUEUETIME
    
    Total Jobs: 1   Active Jobs: 1   Idle Jobs: 0   Blocked Jobs: 0

このshowqコマンドはTORQUEの拡張機能であるmauiのコマンドで、現在のQueue情報を詳しく見ることができます。
ACTIVE JOBSは文字通り現在処理中のジョブが表示されます。どれほどノードを使用しているか、どれだけCPUを使用しているかなども見ることができるためJobを投げる前に見ても良いでしょう。
IDLE JOBSは割り当てられるノード(リソース)が足りない場合の待機状態を表します。
BLOCKED JOBSはジョブのサブミットが間違っているなどで実行ができなかったことを示します。つまりJobが実行されていません。
このBLOCKED JOBSに投入したジョブがある場合は以下にあるようにcheckjobコマンドで原因を追求するか、qdelコマンドでジョブの削除を行い、投入したスクリプトでおかしい点がないかを確認する必要があります。

ジョブの詳細な情報表示(checkjob)

ジョブの詳細な情報を知りたい場合は、checkjobコマンドを行います。

    [maui@naha sample]$ /usr/local/maui/bin/checkjob -v 74
    
    checking job 74 (RM job '74.naha.ie.u-ryukyu.ac.jp')
    
    State: Running
    Creds:  user:maui  group:student  class:dque  qos:med:PRIORITY=1
    WallTime: 00:00:22 of 99:23:59:59
    SubmitTime: Tue May 27 17:17:30
      (Time Queued  Total: 00:00:01  Eligible: 00:00:01)
    
    StartTime: Tue May 27 17:17:31
    Total Tasks: 1
    
    Req[0]  TaskCount: 1  Partition: DEFAULT
    Network: [NONE]  Memory >= 0  Disk >= 0  Swap >= 0
    Opsys: [NONE]  Arch: [NONE]  Features: [NONE]
    Exec:  ''  ExecSize: 0  ImageSize: 0
    Dedicated Resources Per Task: PROCS: 1
    Utilized Resources Per Task:  [NONE]
    Avg Util Resources Per Task:  PROCS: 0.01
    Max Util Resources Per Task:  [NONE]
    Average Utilized Procs: 1.00
    NodeAccess: SHARED
    NodeCount: 1
    Allocated Nodes:
    [cls001.cs.ie.u-ryuky:1]
    Task Distribution: cls001.cs.ie.u-ryuky
    
    IWD: [NONE]  Executable:  [NONE]
    Bypass: 0  StartCount: 1
    PartitionMask: [ALL]
    Flags:       RESTARTABLE
    
    Reservation '74' (-00:00:22 -> 99:23:59:37  Duration: 99:23:59:59)
    PE:  1.00  StartPriority:  1

checkjobコマンドを実行することで、このJobIDのジョブがどのノードで処理が行われているのかを見ることができ(Allocated Node:この場合はcls001)、エラーが出ている場合は理由が表示されます。

ジョブの削除(qdel)

ジョブの削除は、qstatコマンドなどでJobIDを表示させ、そのJobIDをqdelで指定して行うことができます。

    [maui@naha sample]$ qstat
    Job id              Name             User            Time Use S Queue
    ------------------- ---------------- --------------- -------- - -----
    74.naha            sample-          maui                   0 R dque
    
     [maui@naha sample]$ qdel 74.naha.ie.u-ryukyu.ac.jp

    参考リンク

    最終更新日: 2011/03/04