文書の過去の版を表示しています。
Slurm
概要
- Torque や Sun Grid Engine のようなジョブ管理ツール。
- 現状、ドキュメントは Torque の方が多く、Slurm は圧倒的にドキュメントが少なく、日本語ドキュメントはさらに少ない…。
- Ubuntu のデフォルトリポジトリには登録されている。
プログラム
slurmctl
: ノード管理デーモン (マスターノード (親機) にインストール)slurmd
: 計算管理デーモン (各計算ノードにインストール)- 参考サイト: Slurm Workload Manager
インストール方法
- ここでは、Ubuntu 16.04 ベースで、ソースからコンパイルする方法を紹介する。
- 認証システム munge をインストールする。
$ 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 を https://www.schedmd.com/downloads.php からダウンロードする。
- ここでは、
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
システムの設定
- マスターノード (master)、計算ノード (calc01, calc02, calc03) の例.
- slurm.conf
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
orCPUs
: CPU 数RealMemory
: 実メモリ (MiB)Gres
: GPU の設定- 1つ目のフィールド:
grep.conf
内の名前 - 2つ目のフィールド: GPU のアーキテクチャ
- 3つ目のフィールド: GPU 数
PartitionName
: パーティション (キュー) 名Nodes
: キューがサブミットできるノード (カンマでノード名を区切る; デフォルトはすべてのノード)Default
: デフォルトのキューか? (YES
|NO
)MaxTime
: 計算時間の上限 (mm
|mm:ss
|hh:mm:ss
|dd-hh
|dd-hh:mm
|dd-hh:mm:ss
|UNLIMITED
)- root や slurmUser に指定されているユーザは適用されない
PriorityTier
: パーティションの優先度 (デフォルトは 1)MaxCPUsPerNode
: パーティションで使えるノードごとの CPU 数 (このパーティションで同時に実行できるジョブ数を制限する際に使うと良い)- *
State
: キューの有効/無効 (UP
|DOWN
|DRAIN
|INACTIVE
)UP
: 有効DOWN
: ジョブは受け付けるが、実行しないDRAIN
: ジョブを受け付けない (キューに既にあるジョブは実行する)INACTIVE
: ジョブを受け付けない (キューに既にあるジョブは実行しない)
- 参考サイト:
- slurm.conf: Slurm Workload Manager
- 割り込み: Slurm Workload Manager