コンテンツにスキップ

5. ジョブスケジューリングシステム

運用終了

TSUBAME3 は既に運用を終了しています。 TSUBAME4 のマニュアル類はこちら

本システムのジョブスケジューリングには、シングルジョブ・並列ジョブを優先度や必要なリソースに従い効率的にスケジューリングする、「UNIVA Grid Engine」を採用しています。

5.1. 計算ノードの種類

5.1.1. ベアメタル環境

5.1.1.1. 利用可能な資源タイプ

本システムでは計算ノードを論理的に分割した資源タイプを利用して、システムリソースを確保します。

ジョブ投入の際には、資源タイプをいくつ使うかを指定します(例:-l f_node=2)。利用できる資源タイプの一覧を以下に示します。

資源タイプ 資源タイプ名 使用物理CPUコア数 メモリ (GB) GPU 数
F f_node 28 235 4
H h_node 14 120 2
Q q_node 7 60 1
C1 s_core 1 7.5 0
C4 q_core 4 30 0
G1 s_gpu 2 15 1
  • 「使用物理CPUコア数」、「メモリ(GB)」、「GPU数」は、各資源タイプ1つあたりの使用可能な量です。
  • [資源タイプ名]=[個数]で同じ資源タイプを複数指定できます。資源タイプの組み合わせはできません。
  • 実行可能時間の最大値は24時間です。
  • TSUBAME3では「同時に実行可能なジョブ数」や「実行可能な総スロット数」など各種制限値があります。 (スロット=資源タイプ毎に設定されている物理CPUコア数x利用ノード数(qstatコマンドのslotsと同等))

現在の制限値の一覧は以下のURLで確認できます。

https://www.t3.gsic.titech.ac.jp/resource-limit

利用状況に応じて随時変更する可能性がありますのでご注意ください。

5.1.2. コンテナ環境

本システムでは、ソフトウェアの依存関係によりホストOSで動作させることが困難なアプリケーションを利用可能とするために、Dockerを利用したシステムコンテナとSingularityを利用したアプリケーションコンテナを提供しています。 ここでは、Dockerを利用したシステムコンテナのジョブの利用方法を記載します。Singularityについてはフリーウェアの章を参照ください。 本節ではコンテナを使わずにノードを直接利用する実行方法を「ノード利用」と記載します。

5.1.2.1. 利用可能な資源タイプ

コンテナ利用のジョブで利用できる資源タイプは以下のとおりです。バッチスクリプトで利用する際は末尾に.mpiをつけることで複数ノードの利用ができます。インタラクティブジョブでは.mpi付きの資源タイプは指定できません。

資源タイプ ノード利用 コンテナ利用
F f_node t3_d_f_node / t3_d_f_node.mpi
H h_node t3_d_h_node / t3_d_h_node.mpi
Q q_node t3_d_q_node / t3_d_q_node.mpi
C1 s_core t3_d_s_core (下記参照)
C4 q_core t3_d_q_core / t3_d_q_core.mpi
G1 s_gpu t3_d_s_gpu / t3_d_s_gpu.mpi

資源タイプC1の t3_d_s_coreでは外部への通信は可能ですが、コンテナ間通信をサポートしていません。このため、MPIやマルチコンテナの通信を行う場合は他のコンテナ資源をご指定ください。

Info

-t 1-1のように1コンテナしか起動しない場合には.mpiなしの資源タイプを指定してください。 .mpiつきの資源タイプで-t 1-1とすると正しく動作しません。

ノード利用時とコンテナ利用時のqsubコマンドのオプションを以下に示します。

ノード利用 コンテナ利用
イメージ指定 -ac d=[イメージ名]
資源タイプ指定 -l [資源タイプ名] =[個数] -jc [コンテナ資源名]
-t 1-[個数]
Walltime指定 -l h_rt=[経過時間] -adds l_hard h_rt [経過時間]

利用可能なイメージは本システムで公開しているイメージのみとなります。利用可能なイメージについてはTSUBAME計算サービスWebページのシステムソフトウェアをご確認下さい。

5.2. ジョブの投入

本システムでジョブを実行するには、ログインノードへログインしてqsubコマンドを実行します。

5.2.1. バッチジョブの流れ

ジョブを投入するためにはジョブスクリプトを作成し投入します。 または、コマンドラインにキュー名などを指定してジョブを投入することもできます。 投入コマンドは”qsub”です。

  • ジョブスクリプトの作成
  • qsubを使用しジョブを投入
  • qstatなどを使用しジョブの状態確認
  • 必要に応じてqdelを使用しジョブのキャンセル
  • ジョブの結果確認

qsubコマンドは、課金情報(TSUBAME3ポイント)を確認し、ジョブを受け付けます。

5.2.2. ジョブスクリプト

ジョブスクリプトの記述方法を以下に示します。

#!/bin/sh
#$ -cwd
#$ -l [資源タイプ名] =[個数]
#$ -l h_rt=[経過時間]
#$ -p [プライオリティ]

[moduleの初期化]

[プログラミング環境のロード]

[プログラム実行]

Warning

shebang(#!/bin/shの箇所)は必ずジョブスクリプトの先頭に来るようにして下さい。

  • [moduleの初期化]
    以下を実行し、moduleコマンドの初期化を行います。
. /etc/profile.d/modules.sh
  • [プログラミング環境のロード]
    moduleコマンドを用い、必要な環境のロードを行います。
    intelコンパイラをロードする場合の例は以下となります。
module load intel
  • [プログラム実行]
    プログラムの実行を行います。
    バイナリがa.outの場合の例は以下となります。
./a.out

資源タイプの指定などはコマンドラインで指定するか、またはスクリプトファイルの最初のコメントブロック(#$)に記述することで有効になります。 資源タイプ、実行時間は必須項目になるため必ず指定するようにしてください。

qsubコマンドの主なオプションを以下に示します。

オプション 説明
-l [資源タイプ名]=[個数] (必須) 資源タイプおよびその個数を指定します。
-l h_rt=[経過時間] (必須) Wall time(経過時間)を指定します。[[HH:]MM:]SSで指定することができます。HH:MM:SやMM:SSやSSのように指定することができます。
-N ジョブ名を指定します。(指定しない場合はスクリプトファイル名)
-o 標準出力ファイル名を指定します。
-e 標準エラー出力ファイル名を指定します。
-j y 標準エラー出力を標準出力ファイルに統合します。
-m ジョブについての情報をメールで送信する条件を指定します。
a バッチシステムによりジョブが中止された場合
b ジョブの実行が開始された場合
e ジョブの実行が終了した場合
abeのように組み合わせることも可能です。
メールオプションをつけて大量のジョブを投入すると、大量のメールによってメールサーバーに負荷が掛かり、攻撃と検知され他の利用者もまとめて東工大からのメールを遮断される可能性があります。そのようなジョブを流す必要がある場合は、メールオプションを外すか一度のジョブで実行できるようスクリプトの見直しを行ってください。
-M 送信先メールアドレスを指定します。
-p(プレミアムオプション) ジョブの実行優先度を指定します。 -3,-4を指定すると通常よりも高い課金係数が適用されます。設定値の-5,-4,-3は課金規則の優先度0,1,2に対応します。
-5 : 標準の実行優先度です。 (デフォルト)
-4 : 実行優先度は-5より高く,-3より低くなります。
-3 : 最高の実行優先度となります。
優先度の値は全て負の数です。マイナス記号を含めて指定してください。
-t タスクIDの範囲を指定します。
開始番号-終了番号[:ステップサイズ] で指定することができます。
-hold_jid 依存関係にあるジョブIDを指定します。
指定された依存ジョブが終了しなければ、発行ジョブは実行されません。
-ar 予約ノードを利用する際に 予約AR IDを指定します。

本システムではジョブ投入環境の環境変数渡しの-Vオプションは利用できません。ご注意ください。

5.2.3. ジョブスクリプトの記述例

5.2.3.1. シングルジョブ/GPUジョブ

シングルジョブ(並列化されていないジョブ)を実行する時に作成するバッチスクリプトの例を以下に示します。GPUを使用するジョブの場合は-l s_core=1-l s_gpu=1に変更し、GPUで利用するmoduleの読み込み以外はシングルジョブと同様になります。

#!/bin/sh
# カレントディレクトリでジョブを実行する場合に指定
#$ -cwd

#$ -l s_core=1
# 実行時間を指定
#$ -l h_rt=1:00:00
#$ -N serial

# Moduleコマンドの初期化
. /etc/profile.d/modules.sh
# CUDA環境の読込
module load cuda
# Intel Compiler環境の読込
module load intel
./a.out

5.2.3.2. SMP並列

SMP並列ジョブを実行する時に作成するバッチスクリプトの例を以下に示します。計算ノードはハイパースレッディングが有効になっています。使用するスレッド数につきましては、明示的に指定してください。

#!/bin/sh
#$ -cwd
# 資源タイプF 1ノードを使用
#$ -l f_node=1
#$ -l h_rt=1:00:00
#$ -N openmp
. /etc/profile.d/modules.sh
module load cuda
module load intel
# ノード内に28スレッドを配置
export OMP_NUM_THREADS=28
./a.out

5.2.3.3. MPI並列

MPI並列ジョブを実行する時に作成するバッチスクリプトの例を以下に示します。使用するMPI環境により使い分けをお願いします。OpenMPIでスレーブノードにライブラリ環境変数を渡たすには、-x LD_LIBRARY_PATHを利用する必要があります。

Intel MPI環境

#!/bin/sh
#$ -cwd
# 資源タイプF 4ノードを使用
#$ -l f_node=4
#$ -l h_rt=1:00:00
#$ -N flatmpi
. /etc/profile.d/modules.sh
module load cuda
module load intel
# Intel MPI環境の読込
module load intel-mpi
# ノードあたり8プロセスMPI全32 プロセスを使用
mpiexec.hydra -ppn 8 -n 32 ./a.out

OpenMPI環境

#!/bin/sh
#$ -cwd
# 資源タイプF 4ノードを使用
#$ -l f_node=4
#$ -l h_rt=1:00:00
#$ -N flatmpi
. /etc/profile.d/modules.sh
module load cuda
module load intel
# Open MPI環境の読込
module load openmpi
# ノードあたり8プロセスMPI全32 プロセスを使用
mpirun -npernode 8 -n 32 -x LD_LIBRARY_PATH ./a.out

SGI MPT環境

#!/bin/sh
#$ -cwd
# 資源タイプF 4ノードを使用
#$ -l f_node=4
#$ -l h_rt=1:00:00
#$ -N flatmpi
. /etc/profile.d/modules.sh
module load cuda
module load intel
# SGI MPT環境の読込
module load mpt
# ノードあたり8プロセスMPI全32 プロセスを使用
mpiexec_mpt -ppn 8 -n 32 $PWD/a.out

Warning

SGI MPTのmpiexec_mptではa.outへのパスが通っていない場合にはフルパスを指定する必要があります。 パスが通っている場合にはmpiexec_mpt ... a.outで実行できます。

※ 投入したジョブに対して割り当てられているノードリストは、PE_HOSTFILE変数で参照できます。

$ echo $PE_HOSTFILE
/var/spool/uge/r6i0n4/active_jobs/4564.1/pe_hostfile
$ cat /var/spool/uge/r6i0n4/active_jobs/4564.1/pe_hostfile
r6i0n4 28 all.q@r6i0n4 <NULL>
r6i3n5 28 all.q@r6i3n5 <NULL>

5.2.3.4. プロセス並列/スレッド並列(ハイブリッド, MPI+OpenMP)

プロセス並列/スレッド並列(ハイブリッド, MPI+OpenMP)のジョブを実行する時に作成するバッチスクリプトの例を以下に示します。 使用するMPI環境により使い分けをお願いします。 OpenMPIでスレーブノードにライブラリ環境変数を渡たすには、-x LD_LIBRARY_PATHを利用する必要があります。

Intel MPI環境

#!/bin/sh
#$ -cwd
# 資源タイプF 4ノードを使用
#$ -l f_node=4
#$ -l h_rt=1:00:00
#$ -N hybrid
. /etc/profile.d/modules.sh
module load cuda
module load intel
module load intel-mpi
# ノード内に28スレッドを配置
export OMP_NUM_THREADS=28
# ノードあたりMPI 1プロセス、全4 プロセスを使用
mpiexec.hydra -ppn 1 -n 4 ./a.out

OpenMPI環境

#!/bin/sh
#$ -cwd
# 資源タイプF 4ノードを使用
#$ -l f_node=4
#$ -l h_rt=1:00:00            
#$ -N hybrid
. /etc/profile.d/modules.sh
module load cuda
module load intel
module load openmpi
# ノード内に28スレッドを配置
export OMP_NUM_THREADS=28
# ノードあたりMPI 1プロセス、全4 プロセスを使用
mpirun -npernode 1 -n 4 -x LD_LIBRARY_PATH ./a.out

5.2.3.5. コンテナの利用

ジョブスクリプトの記述方法を以下に示します。資源タイプや経過時間の指定方法が通常の利用の場合と異なりますので、ご注意ください。

#!/bin/sh
#$ -cwd
#$ -ac [コンテナイメージ名]
#$ -jc [コンテナ資源名]
#$ -t 1-[個数]
#$ -adds l_hard h_rt=[経過時間]
[moduleの初期化]                                         
[プログラミング環境のロード]                                 
[プログラム実行]

コンテナジョブを実行する時に作成するバッチスクリプトの例を以下に示します。GPUの使用やMPI並列ジョブの利用方法は通常の利用方法と同様です。

#!/bin/sh
#$ -cwd

#$ -ac d=sles12sp2-latest               # コンテナイメージとしてSLES12SP2を指定
#$ -jc t3_d_q_node.mpi                  # 資源タイプQ を指定
#$ -t 1-4                               # コンテナ数 4を指定
#$ -adds l_hard h_rt 0:10:00            # 実行時間を指定

. /etc/profile.d/modules.sh
module load cuda
module load intel
module load openmpi
mpirun -npernode 6 -n 24 -hostfile $SGE_JOB_SPOOL_DIR/ompi_hostfile -x LD_LIBRARY_PATH ./a.out

Info

-t 1-1のように1コンテナしか起動しない場合には.mpiなしの資源タイプを指定してください。 .mpiつきの資源タイプで-t 1-1とすると正しく動作しません。

5.2.4. ジョブの投入

ジョブを実行するために、バッチリクエストを事前に作成する必要があります。 qsubコマンドにジョブ投入スクリプトを指定することで、ジョブがキューイングされ実行されます。 qsubコマンドを使用してジョブを投入する例を以下に示します。

$ qsub -g [TSUBAMEグループ] スクリプト名
オプション 説明
-g TSUBAMEグループ名を指定します。
スクリプトの中ではなくqsubコマンドのオプションとしてつけてください。

5.2.4.1. お試し実行

Info

本機能は既にアカウントをお持ちの方(おもに自由にアカウント作成ができる学内利用者)向けの機能です。

TSUBAMEを自分の研究に利用できるか不安のある利用者がポイント購入をする前に動作確認できるよう、TSUBAMEではポイントを消費することなくプログラムの動作確認を行うことができるお試し実行機能が用意されています。
ジョブ投入時に -g オプションでグループを指定しないことで、ジョブをお試し実行として投入することができます。 この際、2並列以下、実行時間10分以下、優先度-5(最低) という制限がかかります。

Warning

お試し実行は課金前のプログラムの動作確認を目的とした利用に限り、実際の研究や計測を目的とした実行は行わないでください。
制限内でなら無償で無制限に利用してよいというわけではありません。

お試し実行機能はTSUBAMEを自分の研究に利用できるか不安のある利用者がポイント購入をする前に動作確認できるように用意されたものですので、これらの目的から大きく逸脱する、直接研究成果につながるような計算はお試し実行機能で行わないようお願いします。
授業において、教育目的の小規模な計算を実行したい場合はインタラクティブキューをご利用することもご検討ください。

お試し実行の場合、資源量に以下の制限が適用されます。

利用可能な最大ノード数(資源数)(*1) 2
利用最長時間 10分
同時実行数 1
資源タイプ 制限なし

(*1): Dockerコンテナ利用の場合は1

また、お試し実行には「TSUBAMEグループ」を指定しないで実行する必要があります。
TSUBAMEグループを指定した場合=-gオプションを利用した場合はポイントが消費されますのでご注意下さい。

5.2.5. ジョブの状態確認

qstatコマンドはジョブ状態表示コマンドです。

$ qstat [オプション]

qstatコマンドの主なオプションを以下に示します。

表 5-5 qstatコマンドのオプション

オプション 説明
-r ジョブのリソース情報を表示します。
-j [ジョブID] ジョブに関する追加情報を表示します。

qstatコマンドの実行結果の例を以下に示します。

$ qstat
job-IDprior  nameuser   statesubmit/start at  queuejclass  slotsja-task-ID
----------------------------------------------------------------------------------
307 0.55500 sample.sh testuser r 02/12/2015 17:48:10  all.q@r8i6n1A.default32
(以下省略)

qstatコマンドの表示内容を以下に示します。

表示項目 説明
Job-ID ジョブIDを表示します。
prior 優先度を表示します。
name ジョブ名を表示します。
user ジョブのオーナーを表示します。
state ジョブのステータスを表示します。
r 実行中
qw 待機中
h ホールド中
d 削除中
t 移動中
s サスペンド状態、一時停止
S サスペンド状態、キューのサスペンド状態
T サスペンド状態、制限超過によるサスペンド
E エラー状態
Rq 再スケジューリングされ待機中のジョブ
Rr 再スケジューリングされ実行中のジョブ
submit/start at 投入/開始日時を表示します。
queue キュー名を表示します。
jclass ジョブクラス名を表示します。
slots 利用しているスロット数を表示します。
(スロット=資源タイプ毎に設定されている物理CPUコア数x利用ノード数)
ja-task-ID アレイジョブに関してタスクIDを表示します。

5.2.6. ジョブの削除

バッチジョブを削除する場合には、qdelコマンドを使用します。

$ qdel [ジョブID]

以下にジョブをqdelした結果を示します。

$ qstat
job-IDprior  nameuser   statesubmit/start at  queuejclass  slotsja-task-ID
----------------------------------------------------------------------------------
307 0.55500 sample.sh testuser r 02/12/2015 17:48:10  all.q@r8i6n1A.default32

$ qdel 307
testuser has registered the job 307 for deletion

$ qstat
job-IDprior  nameuser   statesubmit/start at  queuejclass  slotsja-task-ID
----------------------------------------------------------------------------------

5.2.7. ジョブの結果確認

UGEのジョブの標準出力はジョブを実行したディレクトリの「スクリプトファイル名.oジョブID」というファイルに保管されます。 また、標準エラー出力は「スクリプトファイル名.eジョブID」です。

5.2.8. アレイジョブ

ジョブスクリプト内に含まれる操作をパラメータ化して繰り返し実行する機能としてアレイジョブ機能があります。 アレイジョブで実行される各ジョブをタスクと呼び、タスクIDによって管理されます。 またタスクIDを指定しないジョブIDは、タスクID全部を範囲とします。

Info

アレイジョブの各タスクはそれぞれ別のジョブとしてスケジュールされるため、タスクの数に比例したスケジュールの待ち時間が発生します。
各タスクの処理が短い場合や、タスク数が多い場合は、複数のタスクをまとめてタスクの数を減らすことを強くお勧めいたします。
例: 10000タスクを、それぞれ100タスク分の処理をするタスク100個にまとめる

タスク番号の指定は、qsubコマンドのオプションもしくはジョブスクリプト内で定義します。 投入オプションは -t(開始番号)-(終了番号):(ステップサイズ) として指定します。 ステップサイズが1の場合は省略可能です。以下に例を示します。

# ジョブスクリプト内にて以下を指定
#$ -t 2-10:2

上記例(2-10:2)では、開始番号 2、終了番号 10、ステップサイズ2 (1つ飛ばしのインデックス)が指定され、タスク番号 2、4、6、8、10 の 5 つのタスクによって構成されます。

各タスクのタスク番号は $SGE_TASK_IDという環境変数に設定されるため、この環境変数をジョブスクリプト内で利用することで、パラメータスタディが可能となります。 結果ファイルはジョブ名の後ろにタスクIDが付いた形で出力されます。

また、実行前/実行中に特定のタスクIDを削除したい場合には、以下のように qdelの-tオプションを使用します。

$ qdel[ジョブID] -t [タスクID]

5.3. 計算ノードの予約

計算ノードを予約することにより、24時間および72ノードを越えるジョブの実行が可能です。 予約実行の流れは以下のようになります。

  • TSUBAMEポータルから予約の実行
  • TSUBAMEポータルから予約状況の確認、キャンセル
  • 予約ノードに対してqsubを使用しジョブを投入
  • 必要に応じてqdelを使用しジョブのキャンセル
  • ジョブの結果確認
  • コマンドラインからの予約状況およびAR IDの確認

ポータルからの予約の実行、予約状況の確認、予約のキャンセルに関してTSUBAMEポータル利用の手引き 計算ノードの予約をご参照ください。

予約時間になりましたら、予約グループのアカウントでジョブの実行ができるようになります。 予約IDであるAR IDを指定したジョブ投入の例を以下に示します。

  • qsubで予約ノードにジョブを投入する場合
$ qsub -g [TSUBAMEグループ] -ar [AR ID] スクリプト名
  • qrshで予約ノードにインタラクティブジョブを投入する場合
$ qrsh -g [TSUBAMEグループ] -l [資源タイプ]=[個数] -l h_rt=[時間] -ar [AR ID]

予約実行で利用できる資源タイプはf_node,h_node,q_nodeになります。q_core,s_core,s_gpuは利用できません。

ジョブ投入後の ジョブの状態確認 は qstat コマンド、ジョブの削除はqdelコマンドを使用します。

また、スクリプトの書式は通常実行時のものと同じになります。

コマンドラインから予約状況及びAR IDを確認するためにはt3-user-info compute arを使用します。

xxxxx@login0:~> t3-user-info compute ar
ar_id   uid user_name         gid group_name                state     start_date           end_date        time_hour node_count      point return_point
-------------------------------------------------------------------------------------------------------------------------------------------------------
 1320  2005 A2901247         2015 tga-red000                  r   2018-01-29 12:00:00 2018-01-29 13:00:00          1          1      18000            0
 1321  2005 A2901247         2015 tga-red000                  r   2018-01-29 13:00:00 2018-01-29 14:00:00          1          1      18000            0
 1322  2005 A2901247         2015 tga-red000                  w   2018-01-29 14:00:00 2018-02-02 14:00:00         96          1    1728000      1728000
 1323  2005 A2901247         2015 tga-red000                  r   2018-01-29 14:00:00 2018-02-02 14:00:00         96          1    1728000      1728000
 1324  2005 A2901247         2015 tga-red000                  r   2018-01-29 15:00:00 2018-01-29 16:00:00          1         17     306000            0
 1341  2005 A2901247         2015 tga-red000                  w   2018-02-25 12:00:00 2018-02-25 13:00:00          1         18     162000       162000
 3112  2004 A2901239         2349 tgz-training                r   2018-04-24 12:00:00 2018-04-24 18:00:00          6         20     540000            0
 3113  2004 A2901239         2349 tgz-training                r   2018-04-25 12:00:00 2018-04-25 18:00:00          6         20     540000            0
 3116  2005 A2901247         2015 tga-red000                  r   2018-04-18 17:00:00 2018-04-25 16:00:00        167          1    3006000            0
 3122  2005 A2901247         2014 tga-blue000                 r   2018-04-25 08:00:00 2018-05-02 08:00:00        168          5   15120000            0
 3123  2005 A2901247         2014 tga-blue000                 r   2018-05-02 08:00:00 2018-05-09 08:00:00        168          5    3780000            0
 3301  2005 A2901247         2015 tga-red000                  r   2018-08-30 14:00:00 2018-08-31 18:00:00         28          1     504000            0
 3302  2005 A2901247         2009 tga-green000                r   2018-08-30 14:00:00 2018-08-31 18:00:00         28          1     504000            0
 3304  2005 A2901247         2014 tga-blue000                 r   2018-09-03 10:00:00 2018-09-04 10:00:00         24          1     432000            0
 3470  2005 A2901247         2014 tga-blue000                 w   2018-11-11 22:00:00 2018-11-11 23:00:00          1          1       4500         4500
 4148  2004 A2901239         2007 tga-hpe_group00             w   2019-04-12 17:00:00 2019-04-12 18:00:00          1          1       4500         4500
 4149  2005 A2901247         2015 tga-red000                  w   2019-04-12 17:00:00 2019-04-13 17:00:00         24          1     108000       108000
 4150  2004 A2901239         2007 tga-hpe_group00             w   2019-04-12 17:00:00 2019-04-12 18:00:00          1          1       4500         4500
-------------------------------------------------------------------------------------------------------------------------------------------------------
total :                                                                                                          818         97   28507500      3739500

コマンドラインから当月の予約の空き状況を確認するには、t3-user-info compute arsを使用します。

5.4. インタラクティブジョブの投入

本システムのジョブスケジューラでは、インタラクティブにプログラムやシェルスクリプトを実行する機能を有しています。
インタラクティブジョブを実行するためには、qrshコマンドを使用し、-lで資源タイプ、経過時間を指定します。
qrshでジョブ投入後、ジョブがディスパッチされるとコマンドプロンプトが返ってきます。
インタラクティブジョブの使用方法の流れ以下に示します。

#!bash
$ qrsh -g [TSUBAMEグループ] -l [資源タイプ]=[個数] -l h_rt=[経過時間]
Directory: /home/N/username
(ジョブ開始時刻)
username@rXiXnX:~> [計算ノードで実行したいコマンド]
username@rXiXnX:~> exit

-gオプションのグループ指定が未指定の場合は資源タイプ2つまで、経過時間10分間まで、優先度-5の「お試し実行」となります。

資源タイプF、1ノード、経過時間 10分を指定した例

#!bash
$ qrsh -g [TSUBAMEグループ] -l f_node=1 -l h_rt=0:10:00
Directory: /home/N/username
(ジョブ開始時刻)
username@rXiXnX:~> [計算ノードで実行したいコマンド]
username@rXiXnX:~> exit

プロンプトにexitと入力することでインタラクティブジョブを終了します。

インタラクティブジョブでコンテナを利用する使用方法を以下に示します。インタラクティブジョブでは複数コンテナの指定はできません。

$ qrsh -g [TSUBAMEグループ] -jc [コンテナ資源名] -adds l_hard h_rt [経過時間] -ac [イメージ名]

資源タイプQ、実行時間10分でSLES12SP2のコンテナを指定する場合以下のようになります。

$  qrsh -g tga-hpe_group00 -jc t3_d_q_node -adds l_hard h_rt 0:10:00 -ac d=sles12sp2-latest

5.4.1. インタラクティブノードを利用したX転送

qrshで接続したノードから直接X転送を行う場合は、下記の手順にて接続ください。

  1. X転送を有効にしてログインノードにssh
  2. qrshコマンドの実行

Info

2020年4月に実施したスケジューラの更新に伴い、 qrsh 実行時に -pty yes -display "$DISPLAY" -v TERM /bin/bash を明示的に指定する必要がなくなりました。

コマンド実行例

例では資源タイプs_core、1ノードで2時間のジョブを実行しています。

割り当てノードはコマンド実行時に空いているノードですので、明示的にノードを指定することはできません。

# qrshの実行
$ qrsh -g [TSUBAMEグループ] -l s_core=1 -l h_rt=2:00:00
username@rXiXnX:~> module load [読み込みたいアプリケーション]
username@rXiXnX:~> [実行したいアプリケーションの実行コマンド]
username@rXiXnX:~> exit

コンテナ資源タイプt3_d_s_coreを使用したインタラクティブジョブのX転送の例は以下になります。

$ qrsh -g [TSUBAMEグループ] -jc t3_d_s_core -adds l_hard h_rt 0:10:00 -ac d=sles12sp2-latest

5.4.2. ネットワーク系アプリケーションへの接続

コンテナによるインタラクティブジョブにおいて、Webブラウザ等でアプリケーションを操作する必要がある場合、SSHポートフォワードを用いて手元のWebブラウザからアクセスすることが可能です。

(1) qrshで接続したインタラクティブノードのホスト名の取得

$  qrsh -g tga-hpe_group00 -jc t3_d_q_node -adds l_hard h_rt 0:10:00 -ac d=sles12sp2-latest
$ hostname
r7i7n7-cnode00
$ [Webブラウザ等からのアクセスが必要なプログラムの実行]

qrshでインタラクティブジョブを起動後、そのマシンのホスト名を取得します。 上記の例では、ホスト名としてr7i7n7-cnode00がホスト名になります。 この、コンソールでの作業はおわりですが、アプリケーションによる作業が終了するまで、そのまま維持してください。

(2) ssh接続元のコンソールよりSSHのポートフォワードを有効にして接続する。(ログインノードやインタラクティブジョブ上ではありません)

ssh -l username -L 8888:r7i7n7-cnode00:<接続するアプリケーションのネットワークポート> login.t3.gsic.titech.ac.jp
接続するアプリケーションのネットワークポートは、アプリケーションごとに異なります。詳しくは、各アプリケーションの説明書もしくは、アプリケーションの起動メッセージをご確認ください。

Tips

TSUBAME3にSSHするコンソールによっては、SSHのポートフォワードの設定が異なます。 詳しくは、各SSHコンソールの説明をご確認いただくか、FAQをご参照ください。

(3) Webブラウザでアプリケーションに接続する。 手元のコンソール上でWebブラウザ (Microsoft Edge, Firefox, Safari等)を立ち上げ、http://localhost:8888/にアクセスしてください。

5.4.3. インタラクティブキュー

インタラクティブキューは、同じリソースをユーザ間で共有することで、混雑時にもノード確保に失敗しにくく、可視化や対話的なプログラムを素早く開始できるように用意された環境です。

インタラクティブキューへのジョブの投入方法は以下のとおりです。

Info

学内ユーザ(tgz-edu)とアクセスカードユーザ(ログイン名がAxxxのユーザ)に限り、グループの指定を省略して無償で実行できます。

iqrsh -g [TSUBAMEグループ] -l h_rt=<時間>

※インタラクティブキューではCPU/GPUのオーバーコミットが許可されていることにご注意下さい。
インタラクティブキューの制限値一覧はこちらをご確認下さい。

5.5. 計算ノードへのSSHログイン

資源タイプf_nodeでジョブを行ったノードには直接sshでログインできます。
確保したノードは以下の手順により、確認することができます。

$ qstat -j 1463
==============================================================
job_number:                 1463
(途中省略)
exec_host_list        1:    r8i6n3:28, r8i6n4:28       ← 確保したノード  r8i6n3、r8i6n4
(以降省略)

確保したコンテナには直接sshでログインできます。 確保したコンテナのホスト名は下記に例示する手順により、確認することができます。

$ qstat -j (ジョブID)
(中略)
binding               3:    r7i7n7=1,0:1,1
binding               4:    r7i7n7=1,7:1,8
resource map          1:    hostipv4=r7i7n7=(r7i7n7-cnode00), s_gpu=r7i7n7=(0)
resource map          2:    hostipv4=r7i7n7=(r7i7n7-cnode01), s_gpu=r7i7n7=(1)
resource map          3:    hostipv4=r7i7n7=(r7i7n7-cnode02), s_gpu=r7i7n7=(2)
resource map          4:    hostipv4=r7i7n7=(r7i7n7-cnode03), s_gpu=r7i7n7=(3)
scheduling info:            (Collecting of scheduler job information is turned off)

上記例の場合、resource map行の括弧内にある r7i7n7-cnode00, r7i7n7-cnode01, r7i7n7-cnode02, r7i7n7-cnode03 が確保されたコンテナのホスト名となります。

Info

計算ノードにsshした際はsshしたプロセスのGIDがtsubame-users(2000)となっている為、お試し実行の場合を除いて、ssh直後の状態では実行している自分のジョブのプロセスが見えず、gdbでアタッチもできません。
見えるようにするにはssh後にジョブを実行したグループ名で以下を実行して下さい。

newgrp <グル-プ名>
又は
sg <グループ名>

5.6. 計算ノード上のストレージの利用

5.6.1. ローカルスクラッチ領域

SSDをローカルスクラッチ領域として使用することができます。利用する際には、$TMPDIR および $T3TMPDIR にローカルスクラッチ領域のパスが設定されます。ジョブスクリプトの中で、作業領域のパスを指定することにより参照可能です。

ローカルスクラッチ領域は各計算ノードの個別領域となり共有されていないため、ジョブスクリプト内からの入力ファイルと出力ファイルをローカルホストにステージングする必要があります。 下記の例では、使用する計算ノードが1ノードの場合に、ホームディレクトリからローカルスクラッチ領域にインプットデータセットをコピーし、結果をホームディレクトリに返します。 (複数ノードは対応していません) $TMPDIRは各MPIプロセス終了時に削除されるため、複数のMPIプロセスを1ジョブで利用し、ローカルスクラッチの内容を引き継ぎたい場合は $T3TMPDIR をご利用ください。

#!/bin/sh
# 計算に必要な入力ファイルのコピー
cp -rp $HOME/datasets $TMPDIR/
# 入力、出力を指定する計算プログラムの実行
./a.out $TMPDIR/datasets $TMPDIR/results
# 必要な結果ファイルのコピー
cp -rp $TMPDIR/results $HOME/results

5.6.2. 共有スクラッチ領域

資源タイプF(f_node)を利用したバッチスクリプトの場合のみ、確保した複数の計算ノードのSSDをオンデマンドに共有ファイルシステムとして作成するBeeGFS On Demand(BeeOND)を利用できます。 BeeONDを有効にするには、ジョブスクリプトの中で、f_nodeを指定した上で、#$ -v USE_BEEOND=1を指定してください。BeeONDは計算ノード上の/beeondにマウントされます。 以下はスクリプトの例となります。

#!/bin/sh
#$ -cwd
#$ -l f_node=4
#$ -l h_rt=1:00:00
#$ -N flatmpi
#$ -v USE_BEEOND=1
. /etc/profile.d/modules.sh
module load cuda
module load intel
module load intel-mpi
mpiexec.hydra -ppn 8 -n 32 ./a.out

インタラクティブで利用する場合、qrshは以下のような形となります。利用しない場合と比べ、ディスクのマウント処理に少し時間を要します。

$ qrsh -g [TSUBAMEグループ] -l f_node=2 -l h_rt=0:10:00 -pty yes -v TERM -v USE_BEEOND=1 /bin/bash

BeeOND共有スクラッチ領域はジョブで確保されたタイミングで作成されるため、ジョブスクリプト内からの入力ファイルと出力ファイルを/beeondにステージングする必要があります。 下記の例では、ホームディレクトリからBeeOND共有スクラッチ領域にインプットデータセットをコピーし、結果をホームディレクトリに返します。

#!/bin/sh
# 計算に必要な入力ファイルのコピー
cp -rp $HOME/datasets /beeond/
# 入力、出力を指定する計算プログラムの実行
./a.out $TMPDIR/datasets /beeond/results
# 必要な結果ファイルのコピー
cp -rp /beeond/results $HOME/results