LoginSignup
20
14

More than 5 years have passed since last update.

Slurm Workload ManagerをUbuntu 16.04LTS に導入する

Last updated at Posted at 2016-11-29

Slurm Workload Managerとは

Slurm Workload Manager (Slurm)は無料でオープンソースのジョブスケジューラであり、世界中の多くのスパコンで利用されている。Xeon E5-26XXv4では今まで使用していたジョブスケジューラ(TORQUE)がうまく動作しなかったので、こちらのジョブスケジューラを試したところ、うまく動いたので作業メモを残す。

MUNGEのインストール

MUNGEはSlurmのデフォルトの認証ソフト。 https://dun.github.io/munge/
これは、Ubntuのパッケージレポジトリからインストールできる。

sudo apt install libmunge-dev libmunge2 munge

しかし、"Job for munge.service failed because the control process exited with error code. See "systemctl status munge.service" and "journalctl -xe" for details."のようなエラーメッセージが表示され、MUNGEが起動しない。そこで、ググるとmunge.serviceのコードを以下のように少し書き換えれば対処できることが分かった。
https://groups.google.com/forum/#!topic/slurm-devel/_fUsovmjkvM
https://github.com/dun/munge/issues/31#issuecomment-127726497

sudo systemctl edit --system --full munge # munge.serviceを編集する。
# "ExecStart=/usr/sbin/munged" の行を
# "ExecStart=/usr/sbin/munged --syslog"に書き換える。
# nanoで編集しているので"ctrl+o"で上書き保存し、"ctrl+x"で終了する。
/etc/systemd/system/munge.service
[Unit]
Description=MUNGE authentication service
Documentation=man:munged(8)
After=network.target
After=time-sync.target

[Service]
Type=forking
ExecStart=/usr/sbin/munged --syslog
PIDFile=/var/run/munge/munged.pid
User=munge
Group=munge
Restart=on-abort

[Install]
WantedBy=multi-user.target

MUNGEの起動と動作確認

sudo systemctl start munge     # mungeを起動
systemctl status munge.service # mungeが動作しているか確認。

Slurmのインストール

SlurmもUbuntuのレポジトリからインストールできるはずだが、手元の環境ではうまく動作しなかったので、最新の安定版を使った。 https://www.schedmd.com/downloads.php から最新の安定版をダウンロードし、ダウンロードしたフォルダでビルドし、インストールする。

tar -jxvf slurm-16.05.6.tar.bz2 
cd slurm-16.05.6
./configure
make
sudo make install

Slurmの設定ファイルの作成

次にSlurmの設定ファイルを作成する。展開したslurmのフォルダに設定ファイルの作成を手助けするhtmlファイルがあるので(doc/html/configurator.easy.html)、適当なブラウザで開いて作成する。今回はPC一台にインストールするのでControl MachineとCompute Machinesを同一にした。また、Slurm Userをrootに、Resource Selection, SelectTypeをCons_resにそれぞれ変更した。submitボタンを押した後表示されるテキストをslurm.confファイルとして保存する。

firefox doc/html/configurator.easy.html

# ControlMachine: ホスト名
# ControlAddr: ホストのIPアドレス
# NodeName: ホスト名
# NodeAddr: ホストのIPアドレス
# Sockets: マザーボードに搭載しているCPUの数(普通は1か2)
# CoresPerSocket: 1CPUあたりのコアの数
# ThreadsPerCore: 1コアあたりのスレッドの数
# CPUs: SoketsとCoresPerSocketとThreadsPerCoreの積
# RealMemory: 搭載しているメモリの量(free -m コマンドで表示される)
# SlurmUser: root
# Resource Selection
# SelectType: Cons_res に変更。
# "SelectTypeParameters=CR_CPU" この行は設定ファイルに書き込む。

Hyper Threadingを使って全てのスレッドにジョブを割り振る場合は"Sockets", "CoresPerSocket", "ThreadsPerCore"は設定しない方がいいようだ。その場合は"CPUs"のみ設定する。
https://groups.google.com/forum/#!searchin/slurm-devel/all$20threads|sort:relevance/slurm-devel/wmCeUBwR9bk/GKmP4JNQBwAJ
http://slurm.schedmd.com/cons_res.html
作成したSlurmの設定ファイルを /usr/local/etc/ にコピーする。

sudo cp slurm.conf /usr/local/etc/
/usr/local/etc/slurm.conf
# slurm.conf file generated by configurator easy.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ControlMachine=SlurmServer
ControlAddr=10.x.x.x
#
#MailProg=/bin/mail
MpiDefault=none
#MpiParams=ports=#-#
ProctrackType=proctrack/pgid
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
#SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
#SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=root
#SlurmdUser=root
StateSaveLocation=/var/spool
SwitchType=switch/none
TaskPlugin=task/none
#
#
# TIMERS
#KillWait=30
#MinJobAge=300
#SlurmctldTimeout=120
#SlurmdTimeout=300
#
#
# SCHEDULING
FastSchedule=1
SchedulerType=sched/backfill
#SchedulerPort=7321
SelectType=select/cons_res
SelectTypeParameters=CR_CPU
#
#
# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=cluster
#JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
#SlurmctldDebug=3
#SlurmctldLogFile=
#SlurmdDebug=3
#SlurmdLogFile=
#
#
# COMPUTE NODES
NodeName=SlurmServer NodeAddr=10.x.x.x CPUs=32 RealMemory=257850 State=UNKNOWN
PartitionName=defq Nodes=SlurmServer Default=YES MaxTime=INFINITE State=UP

Slurmが使用するポート

ファイアウォールを設定している場合は、Slurmで使用するポートを開けておく。デフォルトの設定だと、Slurmctldが6817、Slurmdが6818を使用し、Schedulerが7321を使用するようだ。

Slurmをサービスとしてsystemdに設定後、起動させる

# set and start slurmd and slurmctld as services
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 systemctl start  slurmctld.service
sudo systemctl start  slurmd.service

# check status of the services
systemctl status slurmctld.service
systemctl status slurmd.service

動作テスト

srun -l sleep 60 &
squeue 

ほかのジョブスケジューラとのコマンドの対応表はこちら。
https://slurm.schedmd.com/rosetta.pdf

参考

https://en.wikipedia.org/wiki/Slurm_Workload_Manager
https://slurm.schedmd.com/
http://www.ibm.com/developerworks/jp/linux/library/l-slurm-utility/
http://wildflower.diablonet.net/~scaron/slurmsetup.html
http://www-fps.nifs.ac.jp/ito/memo/slurm01.html
http://qiita.com/JeJeNeNo/items/908b127d9c3cfb8a21ce

20
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14