TSUBAME3.0計算サービスのWebページはこちら

TSUBAME2.5からTSUBAME3.0へのデータ移行方法の資料はこちら

GXPを用いたアレイジョブの代替/拡張機能

TSUBAME 2.0にはアレイジョブ(パラメータサーベイ)の機能(t2sub -Jオプション)があります。しかし、この機能を用いて大きなアレイサイズ(大量のパラメータ)を持つジョブを投入すると、ジョブ管理システムの処理が追いつかず、なかなか処理が実行されないという問題が報告されています(2011.7.15 http://tsubame.gsic.titech.ac.jp/node/363 )。ここではそれをGXPと呼ばれる並列シェルを用いて代替でき、うまく使いこなせば依存関係を持ったジョブの実行制御も可能な方式について説明します。

アレイジョブ互換機能

t2sub_aというコマンドを使用します。このツールにより、t2subでアレイジョブを実行するのと同じスクリプトをほぼそのまま利用することができます。

使い方(基本)

$ t2sub_a -J X-Y[:Z] [t2sub_a_options] script

t2sub_a_optionsには, t2subのオプションに加え, 後に述べるt2sub_a 固有のオプション が含まれます. scriptの書き方も通常のアレイジョブと同様です。

$ t2sub_a -J 0-1000 -W group_list=t2g-ppc-all -l select=2 jikken.sh

本機能は、個々のジョブをバッチスケジューラによってスケジュールするのではなく、必要なだけのノードをバッチスケジューラ経由で取得してデーモンを立ち上げ、それらのデーモンに明示的にジョブを送り込むことで実現されています。

従って、通常のアレイジョブによるアレイジョブの実行と異なり、大量のジョブを投入してもジョブスケジューラに負担をかけません。個々のジョブが細かい(数秒の)ジョブであっても問題ありません(上記の1000ジョブの実行にかかる時間は20-30秒程度です)。

一方、この仕組みのため、ノード数は -l select= オプションで明示的に指定する必要があります。

同様の理由で、walltimeにはジョブ一つではなく、全てが終了するまでの時間(の見積もり)を指定します。

この見積もりは時として困難ですが、例えば5分のジョブが10000個あり、それを10ノード(1ノード24並列になるので、 240並列度)で実行するのであれば、5 x 10000 / 240 = 208.33.. 分ですからwalltimeを例えば300分とします。仮に実際の実行時間がこれを上回り、途中でジョブが強制終了された場合に続きをやる方法については以下で述べます。

全てのジョブが終了するか、もしくはwalltimeなどで強制終了するまで、
-l select= で指定した全てのノードは確保されています。低い並列度で長時間実行すると、ジョブがないにもかかわらず他のユーザの利用を妨げる、(Sキューなどの従量課金キューのノードでは)その分の課金が発生するなどの不都合があります。並列度は適切に指定してください。

t2sub_a 固有のオプション

t2subのオプションの他に、以下のオプションが使えます。

  • -n N : 1ノードで同時に走るジョブ数の最大値をNにします。デフォルト: 1ノードのハードウェアスレッド数=24。
  • -u PREFIX : ジョブの標準出力・標準エラー出力が出力されるファイル名を、PREFIX とします。PREFIXには、ディレクトリ区切り(/)が含まれていても構いません。それらのファイルを格納するのに必要なディレクトリは自動的に作られます。デフォルト: t2sub_a_outputs_NNNN/output. (最後のピリオドを含む)。
  • -c DIR : ジョブスクリプトをコピーするためのディレクトリをDIRにします。t2sub_aを実行する際のカレントディレクトリが全ノードから共有されているディレクトリ ---ホーム(/home)やLustre(/work{0,1})の中のディレクトリ---であれば, 指定する必要はありません。共有されていないディレクトリの場合(例えば /scr や /tmp)に、DIRとして共有ディレクトリを明示的に指定してください。
  • -g PATH_OF_GXPC : システムにインストールされたgxpcコマンド(/work0/GSIC/apps/gxp3/gxpc)の代わりに、指定されたGXPCを用います。通常は使う必要はありません。

動作の違い・その他の注意

  • 現状では従量課金及び予約キュー(S, S96, X, Y, H, L128, L128F, L256, L512)のみ対応しております。定額キュー(Vキュー)への対応を現在進めております。
  • ノード数は-l select=... で指定された分だけが実行時間の間中確保されます。
  • walltimeは、全ジョブの実行時間(見積もり)を指定してください。
  •  各ジョブのワーキングディレクトリは、t2sub_aを実行した際のカレントディレクトリになります。
  • 成功したジョブの標準出力・標準エラー出力は、デフォルトでは、t2sub_a_outputs_NNNN/output.パラメータ値>という名前のファイルに保存されます。ここで、NNNNは, t2sub_aを実行するたびにディレクトリ名をユニークにするための数字で、t2sub_a実行時に存在しない最小の番号が割り当てられます。
  • -u オプションで、これを変更できます。例えば、-u a/b/out. と指定すると、a/b/out.というファイルができます。a/bのようなディレクトリは、存在しなければ自動的に作られます。
  • 上記のファイルはジョブが成功(exit status 0で終了)したときにのみ作られます。実行中のジョブに対しては、ファイル名.running という名前のファイルに、出力が書きこまれており、終了したが失敗したジョブに対しては、ファイル名.failed という名前で 保存されます。
  • あるジョブの出力ファイルがすでに存在している場合、そのジョブは実行されません。従って一部のジョブが失敗したり、walltimeなどで全体の処理が途中で打ち切られた場合、もう一度同じ、-Jのパラメータでt2sub_aを再実行すれば、失敗したり、最後まで実行されなかったジョブだけが実行されます。
  • 逆に、ジョブを変更するなどしてファイルを作り直したい場合でも、出力ファイルが存在すればそのジョブ実行されないので、ジョブをやり直したい場合は-uを省略する、明示的に異なる出力先を指定する、再実行したいジョブの出力を消去する、などしてください。
  • state_/ というディレクトリが作られ、並列度やジョブの成否の情報が保存されます。そのディレクトリの中のindex.htmlを表示してください。実行中でも閲覧可能です。は -Nオプションで変更できます。
  • t2sub_aを実行した際のカレントディレクトリに、 .t2sub_a.000 というディレクトリが作られ、ジョブスクリプトがそこに一時的にコピーされます(従ってジョブ投入が終わったら、ジョブスクリプトは 変更したり、消去しても影響ありません). コピーされたファイルはジョブ終了時に消去されますが、途中で打ち切られた場合など、ファイルがそこに残る場合があります。放置してもあまり問題はありませんが、万が一そのディレクトリの下に大量のファイルができてしまっている場合は、ジョブが走っていないと確信できる時に、ディレクトリをまるごと掃除して下さい。
  • このディレクトリを指定したい場合は、-c オプションで指定できます。指定したディレクトリは、存在しなければ作られますが、その上位のディレクトリまでは作られません。例えば以下は、/work0/t2g-ppc-all/tauまでが存在していれば、動作します。
    $ t2sub_a -J 0-1000 -n 12 -W group_list=t2g-ppc-all -q S -l select=4 -c /work0/t2g-ppc-all/tau/scripts
  • また、スクリプトがコピーされるディレクトリは、全ノードから共有されるディレクトリを用いてください。カレントディレクトリが/work0、/data0 や /homeの下であれば問題ありません。 /scr など、各ノードにローカルな ディレクトリから実行する場合、-c オプションを用いて、自分のホームディレクトリの下や/work0、/data0の下 などを指定してください。

インストール場所

t2sub_aはTSUBAME2.0の/work0/GSIC/apps/t2sub_a以下にインストールされています。以下のようにして、適宜パスを通してください。

$export PATH=/work0/GSIC/apps/t2sub_a:$PATH