概要
AlmaLinux 8.10 に Slurm 25.05.3 をインストールした際の作業記録。
AlmaLinux 8.10 に含まれる Slurm 20 系は GRES や GPU 周りの機能が古く、RTX 50 シリーズの GPU ではエラーが出たため、Slurm 25.05.3 を使用することにした。
Slurm 25 の特色
Slurm 25(正式には Slurm 25.02 / 25.05 系)は、Slurm 24 系からさらに大きく改善された「次世代 Slurm」と呼べるほど機能追加・刷新が入ったバージョン。特に GPU 対応の強化、スケジューリングの効率改善、大規模クラスタの安定性向上 が大きなポイントである。
- GPU 管理がさらに強化(NVIDIA RTX 50 シリーズなど最新 GPU へ最適化)
- cgroup v2 がデフォルト化し、リソース制御が強力に
- IPv6・大規模クラスタ環境の安定性向上
- slurmrestd(REST API)の大幅強化
検証環境
- CPU: Ryzen 9 9950X
- マザーボード: ASRock Steel Legend X870
- GPU: NVIDIA RTX 5080
- OS: AlmaLinux 8.10
作業記録
Slurm 25 や OiwerTools をインストールする前に色々とインストールしておく必要があるが、後日記述予定。一般的なサーバー構築に必要なモジュールを入れてれば、下記の操作で問題なくインストールできるはず。
Powertools を有効化
AlmaLinux 8 では、EPEL と同様に Powertools を有効化する必要がある。
sudo vi /etc/yum.repos.d/almalinux-powertools.repo
enabled=0 を enabled=1 に変更して保存する。
libsz.so.2(libaec)のインストール
Slurm の依存関係として libsz.so.2 が必要なためインストールする。
sudo dnf install -y libaec libaec-devel
Microsoft リポジトリ(packages.microsoft.com)を追加
Microsoft が提供している Slurm 25 用リポジトリを追加する。
参考:https://packages.microsoft.com/yumrepos/slurm-el8/Packages/s/
sudo tee /etc/yum.repos.d/slurm.repo << 'EOF'
[slurm]
name=Slurm packages
baseurl=https://packages.microsoft.com/yumrepos/slurm-el8
enabled=1
gpgcheck=0
EOF
Slurm 25 のインストール
バージョン指定しないと最新のバージョンがインストールされます。
sudo dnf install slurm slurm-slurmd slurm-slurmctld slurm-slurmdbd
munge のインストールと設定
sudo dnf install munge munge-libs munge-devel
#munge key を作成:
sudo create-munge-key
sudo chown -R munge:munge /etc/munge
sudo systemctl enable --now munge
状態確認
sudo systemctl enable --now munge
slurm の設定
sudo useradd -r -m slurm
mkdir -p /var/spool/slurmctld
mkdir -p /var/spool/slurmd
mkdir -p /var/log/slurm
chown slurm:slurm /var/spool/slurmctld
chown slurm:slurm /var/log/slurm
slurm.conf を編集
slurm 24 とは異なり、/etc/slurm が自動生成されないので、自分で作る必要がある。
sudo mkdir -p /etc/slurm
sudo chown root:root /etc/slurm
/etc/slurm/slurm.conf を編集する。
メモリ容量も記述する(RealMemory=30000)。
GresTypes=gpu を行を追加しないと scontrol show node sibelius02 のコマンドの際に GPU が認識されない。GresTypes=gpu は、ChatGPT に何回聞いても分からなかったので、自分で調べる必要があった。生成 AI を使用してソフトウェアのインストールや環境構築を行うと必ず数箇所詰まるところがある印象。
# ===== Basic cluster info =====
ClusterName=sibelius_cluster
ControlMachine=sibelius02
# ===== Slurm user =====
SlurmUser=slurm
AuthType=auth/munge
# ===== State files =====
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
# ===== Scheduling =====
SchedulerType=sched/backfill
SlurmctldTimeout=300
SlurmdTimeout=300
# ===== Logging =====
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdLogFile=/var/log/slurmd.log
# ===== Resources =====
GresTypes=gpu
NodeName=sibelius02 CPUs=32 RealMemory=30000 Gres=gpu:1
PartitionName=normal Nodes=sibelius02 Default=YES MaxTime=INFINITE State=UP
gres.conf の編集
Slurm 25 では GPU を UUID で書く必要はなく、File 指定が推奨。
NodeName=sibelius01 Name=gpu File=/dev/nvidia0
権限設定
sudo systemctl enable --now slurmctld
slurmd.service の調整
Slurm 24 では、/usr/lib/systemd/system/slurmd.service を編集する必要があったが、Slurm 25 では不要。
Slurm 起動
sudo systemctl enable --now slurmctld
sudo systemctl enable --now slurmd
sinfoコマンドで以下のように表示されることを確認する。
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
normal* up 7-00:00:00 1 idle sibelius01
gpu を認識しているかの確認
# 確認コマンド
scontrol show node sibelius02
以下のように表示される。Gres=gpu:1 となっていることを確認。
NodeName=sibelius02 Arch=x86_64 CoresPerSocket=1
CPUAlloc=0 CPUEfctv=32 CPUTot=32 CPULoad=0.00
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=gpu:1
NodeAddr=sibelius02 NodeHostName=sibelius02 Version=25.05.2
OS=Linux 4.18.0-553.83.1.el8_10.x86_64 #1 SMP Mon Nov 10 04:22:44 EST 2025
RealMemory=30000 AllocMem=0 FreeMem=26252 Sockets=32 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=normal
BootTime=2025-11-15T16:24:45 SlurmdStartTime=2025-11-15T17:14:38
LastBusyTime=2025-11-15T17:14:42 ResumeAfterTime=None
CfgTRES=cpu=32,mem=30000M,billing=32
AllocTRES=
CurrentWatts=0 AveWatts=0
# 確認コマンド
srun --gres=gpu:1 nvidia-smi
# 結果の表示
Sat Nov 15 17:17:08 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.105.08 Driver Version: 580.105.08 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 5080 Off | 00000000:01:00.0 Off | N/A |
| 45% 29C P0 27W / 360W | 0MiB / 16303MiB | 2% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
# 確認コマンド
slurmd -C
# 結果の表示
NodeName=sibelius02 CPUs=32 Boards=1 SocketsPerBoard=1 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=30954 Gres=gpu:nvidia_geforce_rtx_5080:1
Found gpu:nvidia_geforce_rtx_5080:1 with Autodetect=nvidia (Substring of gpu name may be used instead)
UpTime=0-00:54:17
Slurm 25 では、slurm が rtx 50 シリーズを自動的に検出してくる!すごい!
Slurm テストジョブ
srun --gres=gpu:1 nvidia-smi
sbatch で計算を実行する際は、以下のようにジョブスクリプトを作成し、sbatch submit.sh でジョブを投入する。
#!/bin/bash
#SBATCH -J slurm_test # ジョブ名
#SBATCH -p normal # パーティション名
#SBATCH -c 32 # タスク数(必要に応じて変更)
#SBATCH --gres=gpu:1 # GPU を使う場合
#SBATCH --time=24:00:00 # 実行時間
cd $SLURM_SUBMIT_DIR
# ====== ここから実際の処理 ======
hostname
echo ' '
nvidia-smi
echo ' '
# conda 初期化(重要:source が必要)
source $HOME/miniconda3/etc/profile.d/conda.sh
conda activate boltz2
# 計算の実行
python boltz predict model.yaml --use_msa_server
あとがき
これまでは Fedora を使用していたが、頻繁なバージョンアップへの追随が負担になってきたため、AlmaLinux に移行した。また、PC クラスター環境では LDAP ではなく NIS を利用したかったことも OS 変更の理由。AlmaLinux 9 以降では NIS が非推奨となり、標準では利用できない。そのため、NIS が利用可能な AlmaLinux 8 系を選択した。
おまけ Slurm 24.05.06 の作業ログ
最終的には Slurm 25 系を採用したが、24 系も検討したので、その作業ログを残しておく。
概要
AlmaLinux 8.10 に Slurm 24.05.6 をインストールした際の作業記録。
これまでは Fedora を使用していたが、頻繁なバージョンアップへの追随が負担になってきたため、AlmaLinux に移行した。また、PC クラスター環境では LDAP ではなく NIS を利用したかったことも OS 変更の理由。
AlmaLinux 9 以降では NIS が非推奨となり、標準では利用できない。そのため、NIS が利用可能な AlmaLinux 8 系を選択した。
AlmaLinux 8 に含まれる Slurm 20 系は GRES や GPU 周りの機能が古く、RTX 50 シリーズの GPU ではエラーが出たため、Slurm 24.05.6 を使用することにした。
検証環境
同じ
作業記録
Powertools を有効化
AlmaLinux 8 では、EPEL と同様に Powertools を有効化する必要がある。
sudo vi /etc/yum.repos.d/almalinux-powertools.repo
enabled=0 を enabled=1 に変更して保存する。
libsz.so.2(libaec)のインストール
Slurm の依存関係として libsz.so.2 が必要なためインストールする。
sudo dnf install -y libaec libaec-devel
Microsoft リポジトリ(packages.microsoft.com)を追加
Microsoft が提供している Slurm 24 用リポジトリを追加する。
参考:https://packages.microsoft.com/yumrepos/slurm-el8/Packages/s/
sudo tee /etc/yum.repos.d/slurm.repo << 'EOF'
[slurm]
name=Slurm packages
baseurl=https://packages.microsoft.com/yumrepos/slurm-el8
enabled=1
gpgcheck=0
EOF
Slurm24 のインストール
sudo dnf install slurm-24.05.6 slurm-slurmd-24.05.6 slurm-slurmctld-24.05.6 slurm-slurmdbd-24.05.6
munge のインストールと設定
sudo dnf install munge munge-libs munge-devel
#munge key を作成:
sudo create-munge-key
sudo chown -R munge:munge /etc/munge
sudo systemctl enable --now munge
状態確認
systemctl restart munge
systemctl status munge
slurm の設定
mkdir -p /var/spool/slurmctld
mkdir -p /var/spool/slurmd
mkdir -p /var/log/slurm
chown slurm:slurm /var/spool/slurmctld
chown slurm:slurm /var/log/slurm
slurm.conf を編集
/etc/slurm/slurm.conf を以下のように編集する。
メモリ容量も記述する(RealMemory=30000)。
# ----- Basic -----
ClusterName=local24
ControlMachine=sibelius01
SlurmUser=slurm
AuthType=auth/munge
StateSaveLocation=/var/spool/slurm/ctld
SlurmdSpoolDir=/var/spool/slurmd
ReturnToService=1
# ----- Timeouts -----
SlurmctldTimeout=600
SlurmdTimeout=600
# ----- SelectType -----
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
# ----- Plugins -----
TaskPlugin=task/affinity
# ----- GRES GPU -----
GresTypes=gpu
NodeName=sibelius01 CPUs=32 RealMemory=30000 Gres=gpu:1 State=UNKNOWN
PartitionName=normal Nodes=sibelius01 Default=YES MaxTime=7-00:00:00 State=UP
Slurm 24 では、cons_tres のみ対応で、cons_res は非対応。
gres.conf の編集
Slurm 24 では GPU を UUID で書く必要はなく、File 指定が推奨。
NodeName=sibelius01 Name=gpu File=/dev/nvidia0
### slurmd.service の調整
ネットワーク起動タイミングの問題を避けるため After= と Wants= を追加。
/usr/lib/systemd/system/slurmd.service に以下のように書く。
[Unit]
Description=Slurm node daemon
After=munge.service network-online.target remote-fs.target sssd.service
Wants=network-online.target
#ConditionPathExists=/etc/slurm/slurm.conf
[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/slurmd
EnvironmentFile=-/etc/default/slurmd
RuntimeDirectory=slurm
RuntimeDirectoryMode=0755
ExecStart=/usr/sbin/slurmd --systemd $SLURMD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
LimitNOFILE=131072
LimitMEMLOCK=infinity
LimitSTACK=infinity
Delegate=yes
TasksMax=infinity
# Uncomment the following lines to disable logging through journald.
# NOTE: It may be preferable to set these through an override file instead.
#StandardOutput=null
#StandardError=null
[Install]
WantedBy=multi-user.target
Slurm 起動
sudo systemctl start slurmd slurmctld
sudo systemctl status slurmd slurmctld
slurmd slurmctld ともに active running となっていることを確認する。
sinfoコマンドで以下のように表示されることを確認する。
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
normal* up 7-00:00:00 1 idle sibelius01
gpu を認識しているかの確認
scontrol show node sibelius01
以下のように表示される。Gres=gpu:1 となっていることを確認。
NodeName=sibelius01 Arch=x86_64 CoresPerSocket=1
CPUAlloc=0 CPUEfctv=32 CPUTot=32 CPULoad=0.00
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=gpu:1
NodeAddr=sibelius01 NodeHostName=sibelius01 Version=24.05.6
OS=Linux 4.18.0-553.83.1.el8_10.x86_64 #1 SMP Mon Nov 10 04:22:44 EST 2025
RealMemory=30000 AllocMem=0 FreeMem=3066 Sockets=32 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=normal
BootTime=2025-11-13T15:05:19 SlurmdStartTime=2025-11-14T14:16:57
LastBusyTime=2025-11-14T15:48:54 ResumeAfterTime=None
CfgTRES=cpu=32,mem=30000M,billing=32
AllocTRES=
CurrentWatts=0 AveWatts=0
Slurm テストジョブ
srun --gres=gpu:1 nvidia-smi
sbatch で計算を実行する際は、以下のようにジョブスクリプトを作成し、sbatch submit.sh でジョブを投入する。
#!/bin/bash
#SBATCH -J slurm_test # ジョブ名
#SBATCH -p normal # パーティション名
#SBATCH -c 32 # タスク数(必要に応じて変更)
#SBATCH --gres=gpu:1 # GPU を使う場合
#SBATCH --time=24:00:00 # 実行時間
cd $SLURM_SUBMIT_DIR
# ====== ここから実際の処理 ======
hostname
echo ' '
nvidia-smi
echo ' '
# conda 初期化(重要:source が必要)
source $HOME/miniconda3/etc/profile.d/conda.sh
conda activate boltz2
# 計算の実行
python boltz predict model.yaml --use_msa_server