はじめに
前記事で、Slurmのインストールまで書いたので、サーバ上でジョブの実行までを行ってみました。
今回はアレイジョブの動作も確認したかったので、まずはOSアップグレード前のCentOS7上でテストを行いました。この作業は本番環境での動作前の手順の確認です。後日RockyLinux8での変更点も追記したいと思います。
CentOS7上でのSlurmのインストール
前提
CnetOSは2024年6月30日でメンテナンス終了し、アップデート公開もされなくなり、標準リポジトリ及びミラーサイトもパッケージ提供が停止リポジトリは参照できなくなっているので、リポジトリは “vault.centos.org” に変更した上で実施しました。
CentOSはRockyLinux8.10にアップグレードする予定ですが、その間にこの環境を使って設定方法を確認した記録です。
後日OSをRockyLinux8にアップグレードして、再度インストールをする予定です。
ユーザIDの準備(NIS管理下)
NISでの管理下ではslurmとmungeのアカウントを事前にNISサーバで作成しておく必要があった
詳細は後述します
インストール
- mungeのインストール
mugeはyumでインストール
[~]$ sudo yum install munge munge-devel
インストール:
munge.x86_64 0:0.5.11-3.el7 munge-devel.x86_64 0:0.5.11-3.el7
依存性関連をインストールしました:
munge-libs.x86_64 0:0.5.11-3.el7
完了しました!
2. ソースからSlurmのインストール
[~]$ wget https://download.schedmd.com/slurm/slurm-24.11.3.tar.bz2
[~]$ ls -lth|head -n 2
合計 38M
-rw-rw-r-- 1 hoge hoge 7.0M 3月 7 04:49 slurm-24.11.3.tar.bz2
[~]$ tar -xjf slurm-24.11.3.tar.bz2
[~]$ cd slurm-24.11.3/
[~/slurm-24.11.3]$ sudo yum install glibc glibc-devel glibc-common glibc-static glibc-headers
[~/slurm-24.11.3]$ ./configure
[~/slurm-24.11.3]$ date;make;date
[~/slurm-24.11.3]$ sudo make install
3.環境設定
設定ファイル /usr/local/etc/slurm.conf ファイルを作成
ポイントは管理ノートと演算ノードで同じ内容をslurm.confに記述すること(違いがあるとslurmdデーモンが起動しない)
なぜ/usr/local/etcにslurm.confを作成るのかを調べて、勉強になったので、この部分は後述します
slurm.confのディレクトリ
# slurm.conf file generated for single node system: kanri
ClusterName=linux
ControlMachine=manageserver
SlurmUser=slurm
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/linuxproc
ReturnToService=2
# Logging
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log
# Schedulers
SchedulerType=sched/backfill
#SelectType=select/cons_res
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
# Node and Partition Configuration
NodeName=manageserver CPUs=60 RealMemory=980000 State=UNKNOWN
PartitionName=squeue Nodes=kanri,calc01,calc02 Default=YES MaxTime=INFINITE State=UP
ログファイルのディレクトリを作成
slurmアカウントがなければ作成する
## HOMEディレクトリはなし、ログイン不可のslurmユーザ作成
NIS管理下ではslurmとmungeのアカウントをNISサーバで作成して、make -C /var/yp で各サーバに反映させておく (反映後に各サーバでidコマンドを実行してslurmアカウントのIDがNISサーバと同じになっているか確認しておく)
mungeに関してはNISで管理する必要はないが、NISで管理した方が分かりやすい
[~]$ sudo useradd -r -M -s /sbin/nologin -g slurm slurm
#オプション 意味
# -r システムアカウントとして作成(UIDが低くなる)
# -M ホームディレクトリを作成しない
# -s /sbin/nologin ログイン不可にする(セキュリティ的に良い)
# -g slurm 既存の slurm グループに所属させる
[~]$ sudo mkdir -p /var/spool/slurmd
[~]$ sudo mkdir -p /var/spool/slurmctld
[~]$ sudo mkdir -p /var/log/slurm
[~]$ sudo chown slurm:slurm /var/log/slurm
[~]$ sudo chown slurm:slurm /var/spool/slurm*
4. mungeキーのコピーとサービス起動
## keyのコピー
[~]$ sudo cp -p ~/munge.key /etc/munge/
## サービス起動
[~]$ sudo systemctl restart munge
mungeのkeyは管理ノードを構築したときに管理ノード上で作成したkeyをscpでコピーしたものを配置する
## 【参考】(すでに管理ノードでkeyは作成済み)
[~]$ sudo /usr/sbin/create-munge-key
Generating a pseudo-random key using /dev/urandom completed.
5. デーモンの起動と停止(サービス化はこの後実施)
デーモン起動
[~]$ sudo /usr/local/sbin/slurmctld
[~]$ sudo /usr/local/sbin/slurmd
参考:デバッグモードでの起動
[~]$ sudo /usr/local/sbin/slurmd -D -vvvv
停止
ps aux | grep slurm
sudo kill <PID of slurmctld>
sudo kill <PID of slurmd>
起動できたことsinfoコマンドで確認
[~]$ sinfo -N -l
Fri Apr 18 10:42:16 2025
NODELIST NODES PARTITION STATE CPUS S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON
calc01 1 squeue* down* 50 50:1:1 230000 0 1 (null) Not responding
calc02 1 squeue* down* 50 50:1:1 230000 0 1 (null) Not responding
calc03 1 squeue* idle 50 50:1:1 230000 0 1 (null) none
kanri 1 squeue* idle 60 60:1:1 980000 0 1 (null) none
6.サービス化
slurmctldとslurmdをサービス化する
slurmctld と slurmd の systemd ユニットファイルを作成
管理ノード
/etc/systemd/system/slurmctld.service
[Unit]
Description=Slurm controller daemon
After=network.target munge.service
Requires=munge.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/slurmctld -D
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmctld.pid
User=root
Group=root
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
演算ノード
/etc/systemd/system/slurmd.service
[Unit]
Description=Slurm node daemon
After=network.target munge.service
Requires=munge.service
[Service]
Type=simple
ExecStart=/usr/local/sbin/slurmd -D
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmd.pid
User=root
Group=root
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
ユニットファイルの権限と有効化
# ユニットファイルのリロード
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
# サービスの有効化(自動起動) これは動作確認後に実施する
sudo systemctl enable slurmctld # 管理ノード
sudo systemctl enable slurmd # 演算ノード
# サービスの起動
sudo systemctl start slurmctld # 管理ノード
sudo systemctl start slurmd # 演算ノード
# ステータス確認
sudo systemctl status slurmctld
sudo systemctl status slurmd
ユーザ作成(NIS管理下)
NISの管理下では(ジョブ管理の場合NIS配下のサーバで構成することが多いと思うので追記します)、先にslurmとmungeのアカウントを作成しておくと、サーバ間でslurmの権限が問題になることを避けられてスムーズに構築できます。
今回は、各サーバでslurmのアカウントを作成してしまったので、slurmアカウントのIDが異なるサーバできてしまって、再度NISサーバでslurmのアカウントを作成して、IDを揃えました。
slurmconf-directory
ソースからインストールする際の基本の基本かもしれません。いまごろ理解したので追記します。
make installのあとslurm.confをどのディレクトリに作成するのか、ネット検索でヒットした手順で実施しました。
よく理解しないまま、管理ノード兼演算ノードのサーバで、デーモンを起動するとslurm.confが見つからず起動しませんでした。
AIに質問しながらなんとか1台のみの環境で起動することができましたが、シンボリックリンクを作成していて、どちらがマニュアル通りなのかわからなくなっていました。
[~]$ ls -lh /etc/slurm/slurm.conf /usr/local/etc/slurm.conf
-rw-r--r-- 1 root root 932 4月 16 13:59 /etc/slurm/slurm.conf
lrwxrwxrwx 1 root root 21 4月 4 16:02 /usr/local/etc/slurm.conf -> /etc/slurm/slurm.conf
そこで、ソースを解凍したディレクトリにあるINSTALLの中を見ると、
specific to Slurm are available at
https://slurm.schedmd.com/quickstart_admin.html
とあって、このurlを参照すると
6.Install the configuration file in < sysconfdir> /slurm.conf.
とありました。しかし「< sysconfdir >」ってどこなの?と調べるとGNU Autoconf 公式マニュアルに
./configure 実行時に --prefix を省略すると、デフォルトで prefix=/usr/local
の説明がありました。
Slurmのdnfインストール
1.事前準備
MUNGE(認証で必要)と EPEL リポジトリを導入
sudo dnf install epel-release -y
sudo dnf install munge munge-libs munge-devel -y
sudo systemctl enable --now munge
2.Slurm のパッケージインストール
sudo dnf config-manager --set-enabled crb # Rocky 9 の場合 (旧 PowerTools)
sudo dnf install slurm slurm-slurmctld slurm-slurmd -y
| パッケージ | 用途 |
|---|---|
| slurm | Slurm の基本パッケージ。CLI ツール (srun, sbatch, sacct など) と共通ライブラリを含む。管理ノード・演算ノード両方に必要 |
| slurm-slurmctld | Slurm コントローラデーモン (slurmctld)。管理ノード専用 |
| slurm-slurmd | 計算ノードデーモン (slurmd)。演算ノード専用 |
3.設定ファイルを作成
インストール後、以下のファイルを調整
sudo cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf
sudo vi /etc/slurm/slurm.conf
最小構成の例:
# /etc/slurm/slurm.conf
ClusterName=testcluster
ControlMachine=localhost
NodeName=localhost CPUs=4 RealMemory=4096 State=UNKNOWN
PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
4.サービス起動
sudo systemctl enable --now slurmctld
sudo systemctl enable --now slurmd
動作確認:
sinfo → ノード状態確認
例:
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug* up 1:00:00 1 idle node01
squeue → キュー状態確認
例:
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
5.動作確認後のメモ
/var/log/slurm/ にログが出力されます。
既存の PBS/UGE 変換ツールを利用する場合は、
qsub_wrapper を通してジョブを投入すれば Slurm 側が受け取れます。
Slurm のバージョン確認:
scontrol --version