FOCUSスパコンでは、ジョブ管理システム(SLURM)へジョブを投入することで演算ノード上での計算を実行します。
ジョブの投入や実行結果の確認といったジョブの管理はフロントエンド上で行います。
また、ジョブを投入する際にはジョブが使用するリソース(キューやノード数、コア数等)の情報や実行する処理内容を記述したジョブ投入スクリプトを作成する必要があります。
本章では、一連の流れを示すとともに、その際に利用するコマンドについて説明します。
目次
3-1 コンパイラ、ライブラリの環境設定
・ロード可能な環境の表示
$ module avail ------------------------ /home1/share/modulefiles ------------------------ MIZUHO_ABINIT-MP3.01 PrgEnv-intel-17.0.1.132 impi python/2.7.12 MIZUHO_ABINIT-MP3.0_FOCUS R-3.3.2 impi-2017.1.132 python/2.7.6 PrgEnv-gnu482 caffe100rc3 impi410 python/3.3.3 PrgEnv-gnu630 cmake2812 impi411 python/3.5.1 PrgEnv-intel conflex impi502 python/3.5.2 PrgEnv-intel-14.0.0.080 conflex7.c impi513 share PrgEnv-intel-14.0.2.144 gnu/mpich2141p1 intel/mpich2141p1 slurm PrgEnv-intel-15.0.1.133 gnu/openmpi142 intel/openmpi165 PrgEnv-intel-16.0.2.181 gnu/openmpi165 python/2.7.11
適宜、コンパイル及び実行にあったバージョンをロードしてください。
【2017.04時点のデフォルト設定】
・PrgEnv-intel ⇒ PrgEnv-intel-16.0.2.181
・imp ⇒ impi513
・環境変数のロード
$ module load PrgEnv-intel $ module load impi
これらの設定は、バッチスクリプト内で設定することもできます。
(参照 「3-4 バッチスクリプトを作成」)
・設定されている環境変数の表示
$ module list Currently Loaded Modulefiles: 1) PrgEnv-intel 2) impi
・環境変数のアンロード
$ module unload PrgEnv-intel $ module unload impi
3-2 利用可能なキューを確認
・キューの確認(sinfo -s
コマンド)
$ sinfo -s PARTITION AVAIL TIMELIMIT NODES(A/I/O/T) NODELIST a024h up 1-00:00:00 12/184/1/197 a[014-016,030-095,097-224] b024h up 1-00:00:00 2/0/0/2 b[001-002] c024h up 1-00:00:00 0/22/0/22 c[001-022] d024h up 1-00:00:00 14/61/1/76 d[005-080] e024h up 1-00:00:00 8/36/1/45 e[004-048] e024h_phi up 1-00:00:00 4/0/0/4 e[045-048] f024h up 1-00:00:00 26/10/0/26 f[201-224,601-602] f024h_p100 up 1-00:00:00 0/2/0/2 f[601-602] h024h up 1-00:00:00 11/121/0/132 h[005-136] g006m* up 6:00 0/2/0/2 g[003-004] a006m up 6:00 0/2/0/2 a[223-224] b006m up 6:00 2/0/0/2 b[001-002] c006m up 6:00 0/2/0/2 c[021-022] d006m up 6:00 2/0/0/2 d[079-080] e006m up 6:00 2/0/0/2 e[047-048] f006m up 6:00 0/2/0/2 f[211-212] h006m up 6:00 0/3/0/3 h[068,102,136]
<出力説明>
PARTITION キュー名(パーティション名) AVAIL キューの状態(up or inact) TIMELIMIT 最大実行時間 NODES(A/I/O/T) ノードの状態(Allocated/Idle/Other/Total) NODELIST キュー(パーティション)に割り当てられたノード
3-3 空き状況を確認
・システム毎の利用状況確認(feenodes
コマンド)
$ freenodes 空きノード数/提供最大ノード数 Number of free nodes in A sys. with QDR-IB connected is 31/ 198. Number of free nodes in B sys. with QDR-IB connected is 2/ 2. Number of free nodes in C sys. with GbE connected is 22/ 22. Number of free nodes in D sys. with FDR-IB connected is 20/ 76. Number of free nodes in E sys. with FDR-IB connected is 8/ 45. Number of free nodes in F sys. with FDR-IB connected is 0/ 26. Number of free nodes in G sys. with 10GbE connected is 4/ 4. Number of free nodes in H sys. with 10GbE connected is 58/ 132.
・キュー毎の利用状況確認(squeues
コマンド)
$ squeues QUEUE_NAME TIMELIMIT STATUS MAXNODES NNODES DEPEND PEND RUN FREE a024h 1-00:00:00 up 196 13 0 0 13 183 b024h 1-00:00:00 up 2 2 0 0 2 0 c024h 1-00:00:00 up 22 0 0 0 0 22 d024h 1-00:00:00 up 75 15 1 0 14 61 e024h 1-00:00:00 up 44 8 0 0 8 36 e024h_phi 1-00:00:00 up 4 0 0 0 0 0 f024h 1-00:00:00 up 26 4 0 0 4 22 f024h_p100 1-00:00:00 up 2 0 0 0 0 2 h024h 1-00:00:00 up 132 13 0 0 13 119 g006m 6:00 up 2 0 0 0 0 2 a006m 6:00 up 2 0 0 0 0 2 b006m 6:00 up 2 0 0 0 0 0 c006m 6:00 up 2 0 0 0 0 2 d006m 6:00 up 2 0 0 0 0 0 e006m 6:00 up 2 0 0 0 0 0 f006m 6:00 up 2 0 0 0 0 2 h006m 6:00 up 3 0 0 0 0 3
※一般アカウントでの表示例です。
FREEが要求ノード数より多く、PENDがゼロであるキューを指定するとジョブを即時実行できます。
<出力説明>
QUEUE_NAME キュー名(パーティション名) TIMELIMIT 最大実行時間 STATUS キューの状態(up or inact) MAXNODES 最大ノード数 NNODES 実行中及び実行待ちのジョブが要求しているノード数 DEPEND 実行待ち(Dependency)のジョブが要求しているノード数 PEND 実行待ちのジョブが要求しているノード数 RUN 実行中のノード数 FREE 空きノード数
3-4 バッチスクリプトを作成
・バッチクスクリプト例(sample.sh)
#!/bin/bash # bashを利用
#SBATCH -p g006m # キュー名指定
#SBATCH -n 1 # プロセス数指定
#SBATCH -J hello_world # ジョブ名指定
#SBATCH -o stdout.%J # SLURM標準出力ファイル名
#SBATCH -e stderr.%J # SLURM標準エラー出力ファイル名
# %JにはジョブIDが補完されます
./a.out # ジョブの実行
sleep 60
3-5 ジョブの投入
・sbatchコマンド
$ sbatch sample.sh Submitted batch job xxxxxx →jobIDが割り振られます
3-6 投入ジョブの状態を確認
・squeueコマンド
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
xxxx d024h hello_wo u***00** PD 0:00 60 (Resources)
xxxx h024h hello_wo u***00** CG 0:39 1 h001
ジョブ投入直後(実行準備のため数秒かかります)や、実行する資源(空きノード数)が足りない場合はStatus がPD(Pending)となります。
<出力説明>
JOBID ジョブに割り当てられたジョブID PARTITION ジョブを投入したキュー NAME ジョブ名(未指定の場合はコマンド文字列) USER ジョブ投入したユーザ ST ジョブの状態(以下STフィールド出力説明参照) TIME ジョブの実行時間(形式:days-hh:mm:ss) NODES ジョブ実行に使用されるノード数 NODELIST(REASON) ジョブが実行中の場合は、ホスト名のリスト。 ジョブ状態がPD(PENDING)の場合は、実行待ちの理由(以下) (Resources) リソースの確保待ち (Priority) 優先度の高いジョブの完了待ち (Dependency) 依存ジョブの完了待ち (InvalidQOS) Resources と同義 <主なST(ステータス)フィールド出力説明> PD (PENDING) 資源の割り当て待ち R (RUNNING) 実行中 CG (COMPLETING) 終了手続き中
・再度squeueコマンドを実行
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
xxxx d024h hello_wo u***0001 R 4:58 60 d[007-066]
実行準備が終了し、ノードを確保し、ジョブが実行されるとStatus がR(Running) となります。
実行中のジョブがない場合はなにも出力されません。
$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
3-7ジョブのキャンセル
・scancelコマンド
$ scancel ジョブID
ジョブがキャンセルされたのをsqueueコマンドで確認しましょう