slurmctl: ノード管理デーモン (マスターノード (親機) にインストール)slurmd: 計算管理デーモン (各計算ノードにインストール)sbatch コマンドにそのジョブファイルを与える。$ sbatch JOBFILE.sh
#SBATCH … というコマンドを記述する。#!/bin/bash #SBATCH -p PARTITION #SBATCH -n 1 #SBATCH -J "JOB_NAME" #SBATCH -o "LOG_FILE" JOB_COMMAND
-p: ジョブを実行するパーティション名を指定-n: ジョブに必要な CPU 数を指定-J: ジョブ名を指定-o: ログファイルを指定JOB_COMMAND: 実行したいコマンド (シェルスクリプト)sbatch のコマンドオプションとしても機能する。squeue コマンドで確認する。squeue コマンドでは表示フォーマットを変更することもできる。フォーマットの変更は -o オプションで、C 言語の printf() のように指定する。%i: ジョブ ID%j: ジョブ名%t: ジョブの状態%M: ジョブ開始からの経過時間%P: パーティション名%R: 待機しているノードリストおよびジョブが進行しない理由%Z: ジョブ実行ディレクトリ%o: ジョブファイルパスsqueue -S i -o “%.8i %8j %2t %.10M %9P %R”squeue -S i -o “%.8i %8j %2t %.10M %9P %16R %Z”squeue -S i -o “%.8i %8j %2t %.10M %9P %16R %o”-S: 特定のカラムでソート (ソート内容は表示フォーマットで指定)-S i (%i のジョブ ID でソート)$ scontrol hold JOBID
JOBID: 停止させたいジョブ ID (スペースで区切って複数指定可)sbatch -H でジョブを投入する$ scontrol release JOBID
$ sudo scontrol suspend JOBID
JOBID: 実行中の停止させたいジョブ$ sudo scontrol resume JOBID
* ここでは、Ubuntu 16.04 ベースで、ソースからコンパイルする方法を紹介する。
$ sudo apt-get install libmunge-dev libmunge2 munge
$ sudo create-munge-key
$ sudo systemctl edit --system --full munge
ExecStart=/usr/sbin/munged を ExecStart=/usr/sbin/munged --syslog にする。$ sudo apt-get install -f
SLURM-17.02.1-2.TAR.BZ2 をダウンロードする。/tmp にあるものとする。$ cd /tmp $ tar axvf slurm-17.02.1-2.tar.gz
$ cd slurm-17.02-1.2 $ ./configure $ make -j 4 $ sudo make install
$ sudo cp etc/slurm.conf.example /usr/local/etc/slurm.conf
$ sudo mkdir -p /var/spool/slurm/ctld $ sudo mkdir -p /var/spool/slurm/d
slurm.conf.example をベースに設定ファイルを作成した場合は、fatal: _create_clustername_file: failed to create file /var/spool… というエラーが出るため、この作業が必要である。slurmctld が起動できないのは、このディレクトリがなく、このディレクトリ以下にファイルを作成できないためである。doc/html/configurator.easy.html を用いる方法があり、こちらで設定ファイルを作成した場合は、StateSaveLocation や SlurmdSpoolDir が既に存在しているディレクトリを指しているため、このエラーは起こらない。slurmd.service の行は不要)$ sudo cp etc/slurmctld.service /etc/systemd/system $ sudo cp etc/slurmd.service /etc/systemd/system $ sudo systemctl enable slurmctld.service $ sudo systemctl enable slurmd.service
$ sudo cp etc/slurmd.service /etc/systemd/system $ sudo systemctl enable slurmd.service
slurmd.service の行は不要)$ sudo systemctl start slurmctld.service $ sudo systemctl start slurmd.service
$ sudo systemctl start slurmd.service
slurmd.service の行は不要)$ sudo systemctl status slurmctld.service $ sudo systemctl status slurmd.service
$ sudo systemctl status slurmd.service
$ srun -l sleep 60 & $ srun -l sleep 60 & $ srun -l sleep 60 & $ srun -l sleep 60 & $ srun -l sleep 60 & $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 29 ALL sleep mumeiyam PD 0:00 1 (Resources) 25 ALL sleep mumeiyam R 0:05 1 master 26 ALL sleep mumeiyam R 0:04 1 master 27 ALL sleep mumeiyam R 0:04 1 master 28 ALL sleep mumeiyam R 0:03 1 master
ControlMachine=master ControlAddr=192.168.1.254 : SlurmUser=root SlurmdUser=root : SelectType=select/cons_res SelectTypeParameters=CR_CPU : PreemptType=preempt/partition_prio PreemptMode=SUSPEND,GANG : # Node configuration # Configure support for our four GPUs GresTypes=gpu,bandwidth # COMPUTE NODES NodeName=master Procs=8 NodeAddr=192.168.1.254 RealMemory=16016 State=UNKNOWN NodeName=calc01 Procs=8 NodeAddr=192.168.1.1 RealMemory=16016 State=UNKNOWN NodeName=calc02 Procs=4 NodeAddr=192.168.1.2 RealMemory=1969 State=UNKNOWN NodeName=calc03 Procs=4 NodeAddr=192.168.1.3 RealMemory=3921 State=UNKNOWN # Partition configuration PartitionName=ALL Nodes=master,calc01,calc02,calc03Default=YES MaxTime=UNLIMITED PriorityTier=1 State=UP PartitionName=CPU1 Nodes=master MaxTime=UNLIMITED PriorityTier=1 State=UP PartitionName=CPU2 Nodes=calc01 MaxTime=UNLIMITED PriorityTier=1 State=UP PartitionName=CPU3 Nodes=calc02,calc03 MaxTime=UNLIMITED PriorityTier=1 State=UP PartitionName=CPU1_h Nodes=master MaxTime=UNLIMITED PriorityTier=2 State=UP PartitionName=CPU2_h Nodes=calc01 MaxTime=UNLIMITED PriorityTier=2 State=UP PartitionName=CPU3_h Nodes=calc02,calc03 MaxTime=UNLIMITED PriorityTier=2 State=UP
ControlMachine: ジョブ管理ノード名ControlAddr: ジョブ管理ノードの IP アドレスSlurmUser: 管理者ユーザSelectType: ジョブの投入方法 (select/liner|select/cons_res|select_cray)select/liner: nodes (シングル CPU?) の場合select/cons_res: socket/core/CPU (複数 CPU?) の場合select_cray: Cray systems without ALPS の場合CR_Memory: select/liner 時のおすすめパラメータ (メモリの状況で判断?)CR_CPU: 複数 CPU の場合に CPU が空き次第投入する (CPU の状況で判断?)CR_Core_Memory: select/cons_res 時のおすすめパラメータ (CPU あたりのメモリの状況で判断?)PreemptType: 割り込みタイプpreempt/none: 割り込まないpreempt/partition_prio: 特定のパーティションのジョブが割り込むPreemptMode: 割り込み時の優先度が低いジョブの挙動SUSPEND: 低優先度のジョブを止める (終了はさせない)CANCEL: 低優先度のジョブを終了させるCHECKPOINT: チェックポイントを作成して低優先度のジョブを終了させるREQUEUE: 低優先度のジョブを終了させて、再度キューに投入する (ジョブは別リソースでスタートする可能性がある)GANG: ジョブ復帰のために必要なオプションで、他のオプションを組み合わせて使うNodeName: 各計算機ノードのノード名NodeAddr: 計算機ノードの IP アドレスProcs or CPUs: CPU 数RealMemory: 実メモリ (MiB)Gres: GPU の設定grep.conf 内の名前PartitionName: パーティション (キュー) 名Nodes: キューがサブミットできるノード (カンマでノード名を区切る; デフォルトはすべてのノード)Default: デフォルトのキューか? (YES|NO)MaxTime: 計算時間の上限 (mm|mm:ss|hh:mm:ss|dd-hh|dd-hh:mm|dd-hh:mm:ss|UNLIMITED)PriorityTier: パーティションの優先度 (デフォルトは 1)MaxCPUsPerNode: パーティションで使えるノードごとの CPU 数 (このパーティションで同時に実行できるジョブ数を制限する際に使うと良い)State: キューの有効/無効 (UP|DOWN|DRAIN|INACTIVE)UP: 有効DOWN: ジョブは受け付けるが、実行しないDRAIN: ジョブを受け付けない (キューに既にあるジョブは実行する)INACTIVE: ジョブを受け付けない (キューに既にあるジョブは実行しない)gres.conf が必要。slurm.conf と同じディレクトリに入れておく。Name=gpu Type=pascal File=/dev/nvidia0 CPUs=0,1,2,3
Type: GPU のアーキテクチャ名File: GPU のデバイスファイルパス$ sudo service slurm restart
$ sudo scontrol update nodename=NODENAME state=resume
NODENAME: drain 状態のノード名$ sudo scontrol reconfigure
$ sudo service slurm stop $ sudo service slurm startclean
/var/log/slurmd.log に error: authentication: Rewound credential や Unable to register: Zero Bytes were transmitted or received があるRewound にあるとおり、ノードの時間の不一致により認証できないのが原因なので、時間を合わせる。/etc/munge/munge.key をコピーして、計算ノードの同じ場所に上書きする。sudo scontrol update nodename=NODENAME state=resume で詰まりを取るCouldn't find the specified plugin name for crypto/munge looking at all fileslibmunge-dev パッケージが必要になった模様。libmunge-dev を apt でインストールする。