7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Slurmのインストール on CentOS7

Last updated at Posted at 2021-02-26

はじめに

Slurmは科学技術計算などでジョブ管理ツールとして使われるサービスです。スパコンなどでも使われています。無料です。人数が多い研究室や、クラスターでMPI並列したい人などにお薦めですが、インストール作業は苦行。

せめてもの助けになればと思い、自分向けノートを公開します。

主な手順

  1. Mungeのインストール
  2. Slurmのインストール

注意点

管理サーバー兼フロントシステムとなる管理ノードgwと、子ノードとしてぶら下がり計算を担当する計算ノードnode01があるとする。基本的には管理ノードが一つ、計算ノードが複数あることになる。今回のインストール作業では、管理ノードと計算ノードで行うことが異なるため、間違えないように。

以下の例ではインストール作業の際に、/home/tools/というディレクトリにrpmを置くなどするが、このディレクトリは管理ノードと計算ノードでNFSなどで共有されていることにする。 NFS等が張れない場合は、何らかの手段でファイルをコピーして各ノードに配布すればよい。

1. Mungeのインストール

Mungeのバージョンはmunge-0.5.14とする。

1.1. 管理ノードへのインストール

mungeを公式サイトから取り寄せて、rpmをビルドする。管理ノードでビルド作業を行う。

cd /home/tools/install/
wget 公式の場所/munge-0.5.14.tar.xz
wget 公式の場所/munge-0.5.14.tar.xz.asc
wget https://github.com/dun.gpg
rpmbuild -tb munge-0.5.14.tar.xz
cp -p /root/rpmbuild/RPMS/x86_64/*.rpm /home/tools/rpm/

管理ノード自身にインストール。鍵の生成。サービス起動。

cd ../rpm
rpm -ivh munge-0.5.14-1.el7.x86_64.rpm munge-devel-0.5.14-1.el7.x86_64.rpm munge-libs-0.5.14-1.el7.x86_64.rpm
#鍵の生成
sudo -u munge /usr/sbin/mungekey -v
sudo systemctl enable munge
sudo systemctl start munge

1.2. 計算ノードへのインストール

インストール。/home/tools/rpmにアクセスできるものとして、以下を実行。途中、管理ノードからキーをコピーしている。

cd /home/tools/rpm
rpm -ivh munge-0.5.14-1.el7.x86_64.rpm munge-devel-0.5.14-1.el7.x86_64.rpm munge-libs-0.5.14-1.el7.x86_64.rpm
scp -p gw:/etc/munge/munge.key /etc/munge/munge.key
chown munge:munge /etc/munge/munge.key
systemctl enable munge
systemctl start munge

テスト(ノード共通)

インストールが上手く行っていれば、mungeというユーザーおよびグループが作られているはず。

管理ノード、計算ノード、それぞれで以下のコマンドを実行して問題が起こらないか確認。

munge -n |unmunge

また、管理ノードから次のコマンドを発行して、ssh経由で計算ノードnode01にてmungeを解読できるか確認。

munge -n -t 10 | ssh node01 unmunge

2. Slurmのインストール

Slurmのバージョンはslurm-19.05.5とする。

2.1 共通作業その1

※ユーザーおよびグループとしてslurmを作っておく必要があるかもしれない。

2.2. 管理ノードへのインストール

公式からソースを取り寄せてビルド、かつ、インスコ。管理ノードで行う。

cd /home/tools/install
wget https://download.schedmd.com/slurm/slurm-19.05.5.tar.bz2
cd slurm-19.05.5/
./configure
make
make install

サービスを登録する。Mungeは自動で登録してくれるのに、Slurmはやってくれないので以下の手順で行う。。

管理ノードで起動するサービスはslurmctldslurmdbdの二つ。計算ノードとは異なるので注意。まずはサンプルから.serviceファイルをコピーして/etc/systemd/system/に配置。

cp -p /home/tools/install/slurm-19.05.5/etc/slurmctld.service /etc/systemd/system/
cp -p /home/tools/install/slurm-19.05.5/etc/slurmdbd.service /etc/systemd/system/

ここで、slurmctld.serviceの中身は環境に合わせて書き換えます。特に重要なのはConditionPathExistsPIDFile。ここで後者の設定値は後述の理由によって/run/slurm/slurmctld.pidに書き換える。

#slurmctld.serviceの中身
[Unit]
Description=Slurm controller daemon
After=network.target munge.service
ConditionPathExists=/usr/local/etc/slurm.conf #ここも重要

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/slurmctld
ExecStart=/usr/local/sbin/slurmctld $SLURMCTLD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/slurm/slurmctld.pid     #ここだけ書き換えた
LimitNOFILE=65536


[Install]
WantedBy=multi-user.target
#slurmdbd.serviceの中身
[Unit]
Description=Slurm DBD accounting daemon
After=network.target munge.service
ConditionPathExists=/usr/local/etc/slurmdbd.conf #ここも重要

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/slurmdbd
ExecStart=/usr/local/sbin/slurmdbd $SLURMDBD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/slurm/slurmdbd.pid     #ここだけ書き換えた

LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

/usr/local/etc/slurm.confを書き換える。その場所にファイルが無かった場合は、/home/tools/install/slurm-19.05.5/etc/slurm.conf.exampleをコピーする。書き換える上で、重要な点としてSlurmdPidFileの設定値が先のslurmctld.servicePIDFileと同じになっていること。その他の設定値はここでは割愛。公式サイトを参照されたし。

#slurm.confの一部
SlurmdPidFile=/run/slurm/slurmd.pid  #ここをslurmctld.serviceの設定値と同じにする

似たような内容だが、/usr/local/etc/slurmdbd.confを書き換える。その場所にファイルが無かった場合は、/home/tools/install/slurm-19.05.5/etc/slurmdbd.conf.exampleをコピーする。書き換える上で、重要な点としてPidFileの設定値が先のslurmdbd.servicePIDFileと同じになっていること。その他の設定値はここでは割愛。公式サイトを参照されたし。

#slurmdbd.confの一部
PidFile=/run/slurm/slurmdbd.pid  #ここをslurmdbd.serviceの設定値と同じにする

2.3. 計算ノードへのインストール

管理ノードでコンパイルしたものを使ってインストール。(ただし、インストール場所は/usr/local/sbin/配下なので、そこをNFS共有マウントするという荒業もアリ。)

cd /home/tools/install
/slurm-19.05.5/
make install

サービスを登録する。計算ノードで起動すべきサービスはslurmdである。管理ノードとは異なるので注意。サンプルをコピーして/etc/systemd/system/slurmd.serviceに配置。

cp -p /home/tools/install/slurm-19.05.5/etc/slurmd.service /etc/systemd/system/

そして、slurmd.serviceの中身を書き換える。注意点は管理ノード同様にPIDファイルのパスに関する部分。

#slurmd.serviceの中身
[Unit]
Description=Slurm node daemon
After=munge.service network.target remote-fs.target
ConditionPathExists=/usr/local/etc/slurm.conf  #ここも重要

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/slurmd
ExecStart=/usr/local/sbin/slurmd $SLURMD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/slurm/slurmd.pid    #ここだけ書き換えた
KillMode=process
LimitNOFILE=131072
LimitMEMLOCK=infinity
LimitSTACK=infinity
Delegate=yes


[Install]
WantedBy=multi-user.target

**【重要】**次に、/usr/local/etc/slurm.confを管理ノードからコピーする。(ただし、/usr/local/配下をNFS共有マウントするという荒業もアリ。)

2.4. 共通作業その2

PIDファイルの場所の変更に合わせて、OS起動時に/run/slurm/ディレクトリを自動生成するスクリプトを登録する。具体的には、/usr/lib/tmpfiles.d/forSlurm.confを手動で生成する。

vi /usr/lib/tmpfiles.d/forSlurm.conf

中身は次のようにする。

#forSlurm.confの中身
d /run/slurm 0755 root root -

ここで再起動して実際に/run/slurm/が作成されることを確認。再起動したくない場合は、サービスを起動する前に手動でこのディレクトリを作っておく必要がある。

次のコマンドで動作時の一時管理ファイル用の場所を作る。ただし、場合によってはインストール時に作られているかもしれないので確認すべし。

mkdir /var/spool/slurm
mkdir /var/spool/slurm/ctld
chmod 775 /var/spool/slurm/ctld
chown -R slurm:slurm /var/spool/slurm

2.5. サービス起動

サービスの起動。以下のコマンドを実行

#管理ノードの場合
systemctl daemon-reload
systemctl enable slurmctld
systemctl enable slurmdbd
systemctl start slurmctld
systemctl start slurmdbd

#計算ノードの場合
systemctl daemon-reload
systemctl enable slurmd
systemctl start slurmd

サービスが起動しない場合は、journalctl -xeコマンドで理由を調べる。例えばslurm.confにノードを登録していないと計算ノードのサービスは立ち上がらない。

PIDファイルの場所を変える理由

上記の設定では、3種類のPIDファイル(そもそもPIDとは?というのは置いておいて)の場所を、/var/run/*.pidから/run/slurm/*pidに変更しています。その理由として、どうやらsystemdのバグらしく、前者に置いたものは上手く動かないようです1

しかし、/run/slurm/配下にファイルを置くことにしても、/var/run/および/run/配下のファイルはOS再起動時に全て消えてしまうという事情があります2

そこで、/usr/lib/tmpfiles.d/配下にforSlurm.confを作って起動時に/run/slurmディレクトリが生成されるようにしています。

その他の注意点

  • 色々な設定はslurm.confに書くことになりますが、必ず全ノードで同じ内容になっている必要があります。書き換えたら全ノードへコピーし、全ノードでサービスを再起動しましょう。

  • 各ノードの状態は、管理ノードからsinfoコマンドで見れます。ここで無事に起動すればidol状態になるはずですが、稀にdownのままの時があります(CentOS7では割とよくある)。確実に計算ノードのサービスが立ち上がっている場合は、次のコマンドで状態をidolに変更してしまって大丈夫です。

    scontrol update nodename=node01 state=idle
    

おわりに

Slurmのインストール作業は、毎回トラブってる気がします。本当につらいですね。

  1. https://log.kobito3.net/2019/11/systemd.html

  2. https://qiita.com/suemoc/items/e29285e8e67263298f35

7
2
1

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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?