3.FOCUSスパコン上での ジョブの実行

 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コマンドで確認しましょう