KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

RockyLinxu9.4にSLURM 25を構築し、GPUのリソース管理を行う(ver2) その1

登録日 :2025/07/21 08:06
カテゴリ :SLURM

SLURMのGPUリソース管理を行うためには、Linuxのcgroup機能と連携する必要がある。
RockyLinux9では、cgroupのバージョンが2となっており、古いSLURMではcgroupと連携できないことがわかった(slurm 21不可。cgroupv2に対応しているのは、slurm23移行との情報あり)
そのため、今回は、RockyLinux9.4を用いて、現状の最新版 slurm25をつかってSLURMを構成する手順を調査しまとめる。


1. SLURM, Mungeの入手、コンパイル手順

SLURMとMungeのソースコードダウンロードおよび、ビルド手順については、過去slurm21を調査したときにまとめたものがあり、ほぼ同じ手順でビルド可能である。

RockyLinux9.4でのビルド手順)
https://nonoco.believeriver.site/detail_mark/456/

ここでは、SLURMの25のダウンロードど、ビルドコマンドのみ異なるので記載する。

SLURMのソースコード(slurm-25.05-latest.tar.bz2)のダウンロード

wget https://download.schedmd.com/slurm/slurm-25.05-latest.tar.bz2
--2025-07-19 18:56:17--  https://download.schedmd.com/slurm/slurm-25.05-latest.tar.bz2
download.schedmd.com (download.schedmd.com) DNSに問いあわせています... 71.19.154.210
download.schedmd.com (download.schedmd.com)|71.19.154.210|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 7189991 (6.9M) [application/x-bzip2]
`slurm-25.05-latest.tar.bz2' に保存中

slurm-25.05-latest.tar.bz2           100%[====================================================================>]   6.86M   265KB/s 時間 27s

2025-07-19 18:56:46 (258 KB/s) - `slurm-25.05-latest.tar.bz2' へ保存完了 [7189991/7189991]

RockyLinux9から、cgroup v2となっており、v2をサポートしてビルドするために、以下のライブラリをインストールしておく必要がある。

systemd-devel
dbus-devel 
libbpf-devel 
hwloc-devel 
kernel-headers

オンライン環境でダウンロード

sudo dnf install --downloadonly --downloaddir=./ systemd-devel
sudo dnf config-manager --set-enabled devel
sudo dnf install --downloadonly --downloaddir=./ dbus-devel libbpf-devel hwloc-devel kernel-headers

オンライン環境でダウンロードできたら、オフライン環境インストールする

sudo dnf install ./*.rpm

ライブラリがインストールされたかは、以下のコマンドでチェック可能

dnf list installed libbpf-devel

ダウンロードしたソースコードのビルドをするときに、ファイル名がlatestのままだとうまくいかないので、リネームをする

# mv slurm-25.05-latest.tar.bz2  slurm-25.05.1.tar.bz2

以下のコマンドでビルドする

rpmbuild -ta slurm-25.05.1.tar.bz2  2>&1 | tee rpmbuild-slurm25.log

ビルドが完了すると、/rpmbuild/RPMS/x86_x64 にインストーラ一式が作成される
cgroup v2がサポートされているかも確認する

[root@rx94rpmbuild slurm]# find ~/rpmbuild/BUILD/ -name cgroup_v2.so
/root/rpmbuild/BUILD/slurm-25.05.1/src/plugins/cgroup/v2/.libs/cgroup_v2.so
[root@rx94rpmbuild v2]# ls /root/rpmbuild/BUILD/slurm-25.05.1/src/plugins/cgroup/v2
Makefile     Makefile.in  cgroup_dbus.c  cgroup_dbus.lo  cgroup_v2.c   cgroup_v2.lo  ebpf.c  ebpf.lo
Makefile.am  README       cgroup_dbus.h  cgroup_dbus.o   cgroup_v2.la  cgroup_v2.o   ebpf.h  ebpf.o
[root@rx94rpmbuild v2]#

cgroup_v2.soが生成されていればOK。

[root@rx94rpmbuild ~]# cd rpmbuild/RPMS/x86_64/
[root@rx94rpmbuild x86_64]# ll
合計 22572
-rw-r--r--. 1 root root 17998399  7 19 20:53 slurm-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    21457  7 19 20:53 slurm-contribs-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    82713  7 19 20:53 slurm-devel-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    13409  7 19 20:53 slurm-example-configs-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   162003  7 19 20:53 slurm-libpmi-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    12965  7 19 20:53 slurm-openlava-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   151298  7 19 20:53 slurm-pam_slurm-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   828796  7 19 20:53 slurm-perlapi-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   105821  7 19 20:53 slurm-sackd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1633783  7 19 20:53 slurm-slurmctld-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1026361  7 19 20:53 slurm-slurmd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   917335  7 19 20:53 slurm-slurmdbd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   133157  7 19 20:53 slurm-torque-25.05.1-1.el9.x86_64.rpm
[root@rx94rpmbuild x86_64]#

2. SLURMヘッドノードの構築

RockyLinux9.4のヘッドノード構築手順をまとめる
参考として、過去に、RockyLinux8でSLURMヘッドノード、クライアントノードの構成とテスト計算まで実施した手順をまとめている。
参考)https://nonoco.believeriver.site/detail_mark/210/

2-1. mungeのインストール、設定

mungeのパッケージを保存しているディレクトリでインストールを実施する

rpm -ivh munge-* 2>&1 | tee munge_install_rx94headnode.log

実行例)

[root@rx94headnode x86_64]# rpm -ivh munge-* 2>&1 | tee munge_install_rx94headnode.log
Verifying...                          ########################################
準備しています...              ########################################
更新中 / インストール中...
munge-debugsource-0.5.15-1.el9        ########################################
munge-debuginfo-0.5.15-1.el9          ########################################
munge-libs-0.5.15-1.el9               ########################################
munge-0.5.15-1.el9                    ########################################
Run /usr/sbin/mungekey as the munge user to create a key.
For example: "sudo -u munge /usr/sbin/mungekey -v".
Refer to the mungekey(8) manpage for more information.
munge-devel-0.5.15-1.el9              ########################################
munge-libs-debuginfo-0.5.15-1.el9     ########################################
[root@rx94headnode x86_64]#

munge.keyを作成する

sudo -u munge /usr/sbin/mungekey -v

実行例)

[root@rx94headnode x86_64]# cd /etc/munge/
[root@rx94headnode munge]# ls
[root@rx94headnode munge]#
[root@rx94headnode munge]# sudo -u munge /usr/sbin/mungekey -v
mungekey: Info: Created "/etc/munge/munge.key" with 1024-bit key
[root@rx94headnode munge]# ls
munge.key

munge.keyのパーミッションを調整する

chown munge:munge /etc/munge/munge.key
chmod 400 /etc/munge/munge.key

実行例)

[root@rx94headnode munge]# ls -l
合計 4
-rw-------. 1 munge munge 128  7 20 12:39 munge.key
[root@rx94headnode munge]# chown munge:munge /etc/munge/munge.key
[root@rx94headnode munge]# chmod 400 /etc/munge/munge.key
[root@rx94headnode munge]# ls -l
合計 4
-r--------. 1 munge munge 128  7 20 12:39 munge.key
[root@rx94headnode munge]#
[root@rx94headnode munge]# 

mungeサービスの起動

systemctl enable munge
systemctl start munge
systemctl status munge

実行例)

[root@rx94headnode munge]# systemctl status munge
 munge.service - MUNGE authentication service
     Loaded: loaded (/usr/lib/systemd/system/munge.service; disabled; preset: disabled)
     Active: inactive (dead)
       Docs: man:munged(8)
[root@rx94headnode munge]# systemctl enable munge
Created symlink /etc/systemd/system/multi-user.target.wants/munge.service  /usr/lib/systemd/system/munge.service.
[root@rx94headnode munge]# systemctl start munge
[root@rx94headnode munge]# systemctl status munge
 munge.service - MUNGE authentication service
     Loaded: loaded (/usr/lib/systemd/system/munge.service; enabled; preset: disabled)
     Active: active (running) since Sun 2025-07-20 12:53:30 JST; 3s ago
       Docs: man:munged(8)
    Process: 38242 ExecStart=/usr/sbin/munged $OPTIONS (code=exited, status=0/SUCCESS)
   Main PID: 38244 (munged)
      Tasks: 4 (limit: 10966)
     Memory: 1.4M
        CPU: 11ms
     CGroup: /system.slice/munge.service

mungeの通信チェック

munge -n | ssh hostname unmunge | grep STATUS |awk '{print $2}'

hostnameは、mungeをインストールしたクライアントに対して実施する。

実行例)

[root@rx94headnode munge]# munge -n | ssh rx94headnode unmunge | grep STATUS |awk '{print $2}'
The authenticity of host 'rx94headnode (fe80::a00:27ff:fedb:7107%enp0s3)' can't be established.
ED25519 key fingerprint is SHA256:6Ebsvxn8F9toy8i65KvLrhHUfLr+1+ul+NMRhU+FlfE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'rx94headnode' (ED25519) to the list of known hosts.
root@rx94headnode's password:
Success
[root@rx94headnode munge]#

2-2 mariadbのインストール、設定

2-2-1 mariadbをインストールする

オンライン環境で事前にmariadbのパッケージをダウンロードしておくコマンドは以下の通り

sudo dnf install --downloadonly --downloaddir=./mariadb_rpms mariadb-server mariadb

パッケージを保存しているディレクトリにて、インストールを実施する。

 sudo dnf install ./*.rpm

実行例)

[root@rx94headnode 01_mariadb_rpms]# ll
合計 25812
-rw-r--r--. 1 root root    12957  7 20 12:59 install_rx94headnode.log
-rw-r--r--. 1 root root  1685168  5  3 18:36 mariadb-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root  6802953  5  3 18:36 mariadb-backup-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root    27421  5  3 18:36 mariadb-common-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root   199958  5  3 18:36 mariadb-connector-c-3.2.6-1.el9_0.x86_64.rpm
-rw-r--r--. 1 root root     9999  5  3 18:36 mariadb-connector-c-config-3.2.6-1.el9_0.noarch.rpm
-rw-r--r--. 1 root root   215823  5  3 18:36 mariadb-errmsg-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root    14756  5  3 18:36 mariadb-gssapi-server-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root 10140481  5  3 18:36 mariadb-server-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root   215578  5  3 18:36 mariadb-server-utils-10.5.27-1.el9_5.x86_64.rpm
-rw-r--r--. 1 root root    37323  5  3 18:36 mysql-selinux-1.0.13-1.el9_5.noarch.rpm
-rw-r--r--. 1 root root   154378  5  3 18:36 perl-DBD-MariaDB-1.21-16.el9_0.x86_64.rpm
-rw-r--r--. 1 root root    16069  5  3 18:36 perl-Sys-Hostname-1.23-481.el9.x86_64.rpm
-rw-r--r--. 1 root root    49170  5  3 18:36 selinux-policy-38.1.45-3.el9_5.noarch.rpm
-rw-r--r--. 1 root root  6821133  5  3 18:36 selinux-policy-targeted-38.1.45-3.el9_5.noarch.rpm
[root@rx94headnode 01_mariadb_rpms]#
[root@rx94headnode 01_mariadb_rpms]# pwd
/home/install/mariadb/rocky9.4/01_mariadb_rpms
[root@rx94headnode 01_mariadb_rpms]# sudo dnf install ./*.rpm
[root@rx94headnode 01_mariadb_rpms]# sudo dnf install ./*.rpm

※事前にダウンロードしておいたパッケージとして、perl-File-Copy.rpmだけは足りなかったかもしれない。

2-2-2 mariadbの設定を行う

mariadbを有効にして初期セットアップする
初期セットアップするコマンド

/usr/bin/mysql_secure_installation

mariadbの設定は、基本的にすべてY(Yes)。rootのパスワードは適当に決める。
以下、設定するための対話シェルで、設定ポイントだけ絞って表示。
(実行例)

[root@rx94headnode rocky9.4]# ls /usr/bin/mysql_secure_installation
/usr/bin/mysql_secure_installation
[root@rx94headnode rocky9.4]# /usr/bin/mysql_secure_installation


Enter current password for root (enter for none):<--- デフォルトのパスワードは設定されていないためEnterキーを押します
OK, successfully used password, moving on...


Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


Change the root password? [Y/n] Y
New password:           <--- 新しいパスワードを設定します。
Re-enter new password:  <--- 新しいパスワードを設定します。
Password updated successfully!
Reloading privilege tables..
 ... Success!

Remove anonymous users? [Y/n] Y
 ... Success!

Disallow root login remotely? [Y/n] Y
 ... skipping.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

2-3 slurmのインストール、設定

2-3-1 slurmインストール

SLURMをインストールするためには、さらに以下のパッケージが不足している。

エラー: 依存性の欠如:
        perl(autouse)  slurm-contribs-25.05.1-1.el9.x86_64 に必要とされています
        perl(lib)  slurm-contribs-25.05.1-1.el9.x86_64 に必要とされています
        perl(FindBin)  slurm-openlava-25.05.1-1.el9.x86_64 に必要とされています
        perl(Switch)  slurm-openlava-25.05.1-1.el9.x86_64 に必要とされています
        perl(autouse)  slurm-openlava-25.05.1-1.el9.x86_64 に必要とされています
        perl(lib)  slurm-openlava-25.05.1-1.el9.x86_64 に必要とされています
        perl(English)  slurm-torque-25.05.1-1.el9.x86_64 に必要とされています
        perl(FindBin)  slurm-torque-25.05.1-1.el9.x86_64 に必要とされています
        perl(autouse)  slurm-torque-25.05.1-1.el9.x86_64 に必要とされています
        perl(lib)  slurm-torque-25.05.1-1.el9.x86_64 に必要とされています

そこで、不足分のライブラリ(perl, perl-FindBin, perl-Switch)をダウンロードする。
注意点として、perl-switchはRX9から標準ではダウンロードできないため、CRBリポジトリを有効化する

sudo dnf config-manager --set-enabled crb
sudo dnf install --downloadonly --downloaddir=./ perl perl-FindBin perl-Switch
sudo dnf install --downloadonly --downloaddir=./ hwloc-libs

※200個以上のパッケージになったので、ここではパッケージの列挙は割愛する。

オンライン環境でダウンロードできたら、オフライン環境インストールする

sudo dnf install ./*.rpm

ライブラリのインストールが完了したら、SLURMのインストールを行う

 rpm -ivh slurm-* 2>&1 | tee install_slurm.log

実行例)

[root@rx94headnode slurm25]# ll
-rw-r--r--. 1 root root 17998399  7 19 20:53 slurm-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    21457  7 19 20:53 slurm-contribs-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    82713  7 19 20:53 slurm-devel-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    13409  7 19 20:53 slurm-example-configs-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   162003  7 19 20:53 slurm-libpmi-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    12965  7 19 20:53 slurm-openlava-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   151298  7 19 20:53 slurm-pam_slurm-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   828796  7 19 20:53 slurm-perlapi-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   105821  7 19 20:53 slurm-sackd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1633783  7 19 20:53 slurm-slurmctld-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1026361  7 19 20:53 slurm-slurmd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   917335  7 19 20:53 slurm-slurmdbd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   133157  7 19 20:53 slurm-torque-25.05.1-1.el9.x86_64.rpm
[root@rx94headnode slurm25]#
[root@rx94headnode slurm25]# rpm -ivh slurm-* 2>&1 | tee install_slurm.log
Verifying...                          ########################################
準備しています...              ########################################
更新中 / インストール中...
slurm-25.05.1-1.el9                   ########################################
slurm-perlapi-25.05.1-1.el9           ########################################
slurm-contribs-25.05.1-1.el9          ########################################
slurm-openlava-25.05.1-1.el9          ########################################
slurm-torque-25.05.1-1.el9            ########################################
slurm-devel-25.05.1-1.el9             ########################################
slurm-libpmi-25.05.1-1.el9            ########################################
slurm-pam_slurm-25.05.1-1.el9         ########################################
slurm-sackd-25.05.1-1.el9             ########################################
slurm-slurmctld-25.05.1-1.el9         ########################################
slurm-slurmd-25.05.1-1.el9            ########################################
slurm-slurmdbd-25.05.1-1.el9          ########################################
slurm-example-configs-25.05.1-1.el9   ########################################
[root@rx94headnode slurm25]#

SLURMまでインストール完了

2-3-2 slurmヘッドノード設定

SLURMのヘッドノードとしての設定を行う。

2-3-2-1 slurmdbの設定

/etc/slurm/slurmdbd.conf を以下のように設定する。
データベースのパスワードは、mariadb設定をした時のものにすること
slurmdbd.confのサンプル)

[root@rx94headnode slurm]# pwd
/etc/slurm
[root@rx94headnode slurm]# cat slurmdbd.conf
#
# Example slurmdbd.conf file.
#
# See the slurmdbd.conf man page for more information.
#
# Archive info
#ArchiveJobs=yes
#ArchiveDir="/tmp"
#ArchiveSteps=yes
#ArchiveScript=
#JobPurge=12
#StepPurge=1
#
# Authentication info
AuthType=auth/munge
#AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=localhost
DbdHost=localhost
#DbdPort=7031
#SlurmUser=slurm
#
SlurmUser=root
#
#MessageTimeout=300
DebugLevel=verbose
#DefaultQOS=normal,standby
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
#PluginDir=/usr/lib/slurm
#PrivateData=accounts,users,usage,jobs
#TrackWCKey=yes
#
# Database info
StorageType=accounting_storage/mysql
#StorageHost=localhost
#StoragePort=1234
#
StoragePass=test@12345
#StorageUser=slurm
#
StorageUser=root
#
#StorageLoc=slurm_acct_db

[root@rx94headnode slurm]#

slurmdbd.confのパーミッションを600とする

chmod 600 /etc/slurm/slurmdbd.conf

実行例)

[root@rx94headnode slurm]# ll
合計 4
drwxr-xr-x. 2 root root 170  7 20 15:33 sample
-rw-r--r--. 1 root root 791  7 20 15:34 slurmdbd.conf
[root@rx94headnode slurm]# chmod 600 /etc/slurm/slurmdbd.conf
[root@rx94headnode slurm]# ll
合計 4
drwxr-xr-x. 2 root root 170  7 20 15:33 sample
-rw-------. 1 root root 791  7 20 15:34 slurmdbd.conf
[root@rx94headnode slurm]# 
2-3-2-2 slurmの設定

slurmノードの情報を取得する

slurmd -C

実行例)

[root@rx94headnode slurm]# slurmd -C
NodeName=rx94headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=1775
UpTime=0-21:08:10
[root@rx94headnode slurm]#

取得したノードの情報をクライアントノードの定義に利用して、
/etc/slurm/slurm.conf を以下のように設定する。

今までの違いとして、以下のMail設定(無効を明示的に)や、AccountingStorageUserのroot指定の明示化などがある。

#MailProg=/bin/mail
MailProg=/bin/false
#AccountingStorageUser=
AccountingStorageUser=root

slurm.confのサンプル)

#
# Example slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#
#
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ClusterName=RX9
SlurmctldHost=rx94headnode
#SlurmctldHost=
#
#DisableRootJobs=NO
#EnforcePartLimits=NO
#Epilog=
#EpilogSlurmctld=
#FirstJobId=1
#MaxJobId=67043328
#GresTypes=
#GroupUpdateForce=0
#GroupUpdateTime=600
#JobFileAppend=0
#JobRequeue=1
#JobSubmitPlugins=lua
#KillOnBadExit=0
#LaunchType=launch/slurm
#Licenses=foo*4,bar
#
#MailProg=/bin/mail
MailProg=/bin/false
#
#MaxJobCount=10000
#MaxStepCount=40000
#MaxTasksPerNode=512
MpiDefault=none
#MpiParams=ports=#-#
#PluginDir=
#PlugStackConfig=
#PrivateData=jobs
#
#ProctrackType=proctrack/cgroup
ProctrackType=proctrack/pgid
#
#Prolog=
#PrologFlags=
#PrologSlurmctld=
#PropagatePrioProcess=0
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#RebootProgram=
#
#ReturnToService=1
ReturnToService=0
#
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
#
#
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
#
#
SlurmdSpoolDir=/var/spool/slurmd
#
#SlurmUser=slurm
SlurmdUser=root
#
#SrunEpilog=
#SrunProlog=
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
#TaskEpilog=
TaskPlugin=task/affinity
#TaskProlog=
#TopologyPlugin=topology/tree
#TmpFS=/tmp
#TrackWCKey=no
#TreeWidth=
#UnkillableStepProgram=
#UsePAM=0
#
#
# TIMERS
#BatchStartTimeout=10
#CompleteWait=0
#EpilogMsgTime=2000
#GetEnvTimeout=2
#HealthCheckInterval=0
#HealthCheckProgram=
InactiveLimit=0
KillWait=30
#MessageTimeout=10
#ResvOverRun=0
MinJobAge=300
#OverTimeLimit=0
SlurmctldTimeout=120
SlurmdTimeout=300
#UnkillableStepTimeout=60
#VSizeFactor=0
Waittime=0
#
#
# SCHEDULING
#DefMemPerCPU=0
#MaxMemPerCPU=0
#SchedulerTimeSlice=30
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
#
#
# JOB PRIORITY
#PriorityFlags=
#PriorityType=priority/basic
#PriorityDecayHalfLife=
#PriorityCalcPeriod=
#PriorityFavorSmall=
#PriorityMaxAge=
#PriorityUsageResetPeriod=
#PriorityWeightAge=
#PriorityWeightFairshare=
#PriorityWeightJobSize=
#PriorityWeightPartition=
#PriorityWeightQOS=
#
#
# LOGGING AND ACCOUNTING
#AccountingStorageEnforce=0
#
#AccountingStorageHost=
AccountingStorageHost=rx94headnode
#
#AccountingStoragePass=
AccountingStoragePass=/var/run/munge/munge.socket.2
#
#AccountingStoragePort=
#
#AccountingStorageType=accounting_storage/none
AccountingStorageType=accounting_storage/slurmdbd
#
#AccountingStorageUser=
AccountingStorageUser=root
#AccountingStoreFlags=
#
#
#JobCompHost=
#JobCompLoc=
#JobCompPass=
#JobCompPort=
JobCompType=jobcomp/none
#JobCompUser=
#JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
#SlurmSchedLogFile=
#SlurmSchedLogLevel=
#DebugFlags=
#
#
# POWER SAVE SUPPORT FOR IDLE NODES (optional)
#SuspendProgram=
#ResumeProgram=
#SuspendTimeout=
#ResumeTimeout=
#ResumeRate=
#SuspendExcNodes=
#SuspendExcParts=
#SuspendRate=
#SuspendTime=
#
#
# COMPUTE NODES
#NodeName=linux[1-32] CPUs=1 State=UNKNOWN
NodeName=rx94headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=1775 State=UNKNOWN
#
# PARTITION
#PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
PartitionName=debug Nodes=rx94headnode Default=NO MaxTime=30:00 State=UP
slurmdbdの起動

slurmdbdを起動するときに、今までと違って、勝手にサービスがslurmユーザで起動する設定となっている。

[root@rx94headnode slurm]# cat /usr/lib/systemd/system/slurmdbd.service
[Unit]
Description=Slurm DBD accounting daemon
After=network-online.target remote-fs.target munge.service mysql.service mysqld.service mariadb.service sssd.service
Wants=network-online.target
ConditionPathExists=/etc/slurm/slurmdbd.conf

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/slurmdbd
EnvironmentFile=-/etc/default/slurmdbd
User=slurm
Group=slurm
RuntimeDirectory=slurmdbd
RuntimeDirectoryMode=0755
ExecStart=/usr/sbin/slurmdbd -D -s $SLURMDBD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65536
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
[root@rx94headnode slurm]#

そこで、 /usr/lib/systemd/system/slurmdbd.service の[Service]にあるUserとGroupをrootに修正する

User=root
Group=root

修正したら、daemonをリロードし、slurmdbdのサービスを起動する

sudo systemctl daemon-reload
sudo systemctl enable slurmdbd
sudo systemctl start slurmdbd

※再起動の場合は
sudo systemctl restart slurmdbd

サービスが起動していることを確認する

sudo systemctl status slurmdbd | grep Active| awk '{print $2 $3}'

実行例)

[root@rx94headnode slurm]# sudo systemctl status slurmdbd | grep Active| awk '{print $2 $3}'
active(running)
[root@rx94headnode slurm]#
# slurumctldの起動

slumctldについても、slurmctld.serviceで、勝手にslurmユーザが指定されている。

[root@rx94headnode slurm]# cat /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
[root@rx94headnode slurm]# cat /usr/lib/systemd/system/slurmctld.service
[Unit]
Description=Slurm controller daemon
After=network-online.target remote-fs.target munge.service sssd.service
Wants=network-online.target
ConditionPathExists=/etc/slurm/slurm.conf

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/slurmctld
EnvironmentFile=-/etc/default/slurmctld
User=slurm
Group=slurm
RuntimeDirectory=slurmctld
RuntimeDirectoryMode=0755
ExecStart=/usr/sbin/slurmctld --systemd $SLURMCTLD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65536
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
[root@rx94headnode slurm]#

[Service]のUser, Groupをrootに編集する

[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/slurmctld
EnvironmentFile=-/etc/default/slurmctld
User=root
Group=root
RuntimeDirecto

デーモンをリロードして、slurmctldを起動する

sudo systemctl daemon-reload
sudo systemctl enable slurmctld
sudo systemctl start slurmctld

slurmctldが起動しているかどうかを確認する

sudo systemctl status slurmctld | grep  Active| awk '{print $2 $3}'

実行例)

[root@rx94headnode slurm]# sudo systemctl status slurmctld| grep  Active| awk '{print $2 $3}'
active(running)
[root@rx94headnode slurm]#

※もし起動しない場合は、rm -f /var/spool/slurmctld/* で残骸を一度削除することをお勧めします。

slurmdbdと適切に連携していることを確認する

sacctmgr list user
sacctmgr show clusters format="cluster%16,ControlHost"

実行例)

[root@rx94headnode ~]# sacctmgr list user
      User   Def Acct     Admin
---------- ---------- ---------
      root       root Administ+
[root@rx94headnode ~]# sacctmgr show clusters format="cluster%16,ControlHost"
         Cluster     ControlHost
---------------- ---------------
             rx9  192.168.56.120
[root@rx94headnode ~]#
# slurmdの起動
systemctl enable slurmd
systemctl start slurmd
systemctl status slurmd

slurmdが起動しているかどうかを確認する

sudo systemctl status slurmd | grep  Active| awk '{print $2 $3}'

実行例)

[root@rx94headnode slurm]# sudo systemctl status slurmd| grep  Active| awk '{print $2 $3}'
active(running)
2109:45:27
[root@rx94headnode slurm]#

インストールが完了したら以下のように応答がある

[root@rx94headnode slurm]# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up      30:00      1   idle rx94headnode
[root@rx94headnode slurm]#

3. SLURMクライアントノードの構築

RockyLinux9.4のクライアントノード設定手順をまとめる。
参考として、過去に、RockyLinux9.4でslurm 21におけるクライアントノードの構築手順をまとめている
参考)https://nonoco.believeriver.site/detail_mark/457/

まず、一般的(CPU)のクライアントノードの設定を行う。

3.1 mungeインストールと設定

mungeのパッケージ保存場所で以下のコマンドを実行する

rpm -ivh munge-* 2>&1 | tee munge_install.log

実行例)

[root@gpu01 x86_64]# ll
合計 592
-rw-r--r--. 1 root root 134355  5  3 19:31 munge-0.5.15-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 239621  5  3 19:31 munge-debuginfo-0.5.15-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 123539  5  3 19:31 munge-debugsource-0.5.15-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  22933  5  3 19:31 munge-devel-0.5.15-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  20109  5  3 19:31 munge-libs-0.5.15-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  45026  5  3 19:31 munge-libs-debuginfo-0.5.15-1.el9.x86_64.rpm
[root@gpu01 x86_64]#
[root@gpu01 x86_64]# rpm -ivh munge-* 2>&1 | tee munge_install_gpu01.log
Verifying...                          ########################################
準備しています...              ########################################
更新中 / インストール中...
munge-debugsource-0.5.15-1.el9        ########################################
munge-debuginfo-0.5.15-1.el9          ########################################
munge-libs-0.5.15-1.el9               ########################################
munge-0.5.15-1.el9                    ########################################
Run /usr/sbin/mungekey as the munge user to create a key.
For example: "sudo -u munge /usr/sbin/mungekey -v".
Refer to the mungekey(8) manpage for more information.
munge-devel-0.5.15-1.el9              ########################################
munge-libs-debuginfo-0.5.15-1.el9     ########################################
[root@gpu01 x86_64]#

ヘッドノードから、munge.keyを転送する

scp -p /etc/munge/munge.key compute01:/etc/munge/

実行例)

[root@rx94headnode slurm]# scp -p /etc/munge/munge.key gpu01:/etc/munge/
munge.key                                                                                                       100%  128    92.0KB/s   00:00
[root@rx94headnode slurm]# ll /etc/munge
合計 4
-r--------. 1 munge munge 128  7 20 12:39 munge.key
[root@rx94headnode slurm]# ssh gpu01
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Mon Jul 21 12:36:02 2025 from 192.168.56.120
[root@gpu01 ~]# ll /etc/munge
合計 4
-r--------. 1 root root 128  7 20 12:39 munge.key
[root@gpu01 ~]#

転送後のmunge.keyのパーミッション、オーナーの調整を行う

[root@compute01 munge]# chown munge:munge /etc/munge/munge.key
[root@compute01 munge]# chmod 400 /etc/munge/munge.key

実行例)

[root@gpu01 ~]# chown munge:munge /etc/munge/munge.key
[root@gpu01 ~]# chmod 400 /etc/munge/munge.key
[root@gpu01 ~]# ll /etc/munge/
合計 4
-r--------. 1 munge munge 128  7 20 12:39 munge.key
[root@gpu01 ~]#

mungeのサービスをスタートする

systemctl enable munge
systemctl start munge
systemctl status munge

ヘッドノードからの通信チェックを行う

munge -n | ssh compute01 unmunge | grep STATUS |awk '{print $2}'

実行例)

[root@rx94headnode slurm]# munge -n | ssh gpu01 unmunge | grep STATUS |awk '{print $2}'
Success
[root@rx94headnode slurm]#

3.2 slurmインストールと設定

必要なライブラリ一式をインストールする

perl 
perl-FindBin
perl-Switch ( crbを有効にする必要あり)
hwloc-libs

パッケージ保存場所で、以下のコマンドでインストールする

sudo dnf install ./*.rpm

mariadb関連のパッケージもインストールする

mariadb-connector-c-config 
openssl-devel 
zlib-devel
mariadb-connector-c 
mariadb-connector-c-devel
sudo dnf install --downloadonly --downloaddir=./ mariadb-connector-c-config openssl-devel zlib-devel
sudo dnf install --downloadonly --downloaddir=./ mariadb-connector-c mariadb-connector-c-devel
sudo dnf install ./*.rpm

ライブラリをインストールしたら、SLURMパッケージをインストールする

rpm -ivh slurm-* 2>&1 | tee install_slurm.log

実行例)

[root@gpu01 x86_64]# ll
合計 22756
-rw-r--r--. 1 root root     1222  7 21 09:38 install_slurm25.log
-rw-r--r--. 1 root root      125  7 21 09:32 install_slurm25.log.err_lib
-rw-r--r--. 1 root root      435  7 21 13:04 install_slurm25_gpu01.log
-rw-r--r--. 1 root root 18158694  7 21 08:59 slurm-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    21458  7 21 09:00 slurm-contribs-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    82733  7 21 09:00 slurm-devel-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    13413  7 21 09:00 slurm-example-configs-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   161997  7 21 09:00 slurm-libpmi-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root    12965  7 21 09:00 slurm-openlava-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   151350  7 21 09:00 slurm-pam_slurm-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   828949  7 21 09:00 slurm-perlapi-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   105893  7 21 09:00 slurm-sackd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1634415  7 21 08:59 slurm-slurmctld-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root  1035643  7 21 08:59 slurm-slurmd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   918178  7 21 09:00 slurm-slurmdbd-25.05.1-1.el9.x86_64.rpm
-rw-r--r--. 1 root root   133377  7 21 09:00 slurm-torque-25.05.1-1.el9.x86_64.rpm
[root@gpu01 x86_64]# rpm -ivh slurm-* 2>&1 | tee install_slurm25_gpu01_2.log
Verifying...                          ########################################
準備しています...              ########################################
更新中 / インストール中...
slurm-25.05.1-1.el9                   ########################################
slurm-perlapi-25.05.1-1.el9           ########################################
slurm-contribs-25.05.1-1.el9          ########################################
slurm-openlava-25.05.1-1.el9          ########################################
slurm-torque-25.05.1-1.el9            ########################################
slurm-devel-25.05.1-1.el9             ########################################
slurm-libpmi-25.05.1-1.el9            ########################################
slurm-pam_slurm-25.05.1-1.el9         ########################################
slurm-sackd-25.05.1-1.el9             ########################################
slurm-slurmctld-25.05.1-1.el9         ########################################
slurm-slurmd-25.05.1-1.el9            ########################################
slurm-slurmdbd-25.05.1-1.el9          ########################################
slurm-example-configs-25.05.1-1.el9   ########################################
[root@gpu01 x86_64]#

計算ノードの情報を取得して、slurm.confに定義する

[root@gpu01 slurm]# slurmd -C
NodeName=gpu01 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=1775
UpTime=1-19:29:46

ヘッドノードから、slurm.confを転送して、ヘッドノード、計算ノードのslurmctld, slurmdを再起動して設定を反映する。
参考)slurm.confを転送するスクリプトの例

date
hostname

for n in gpu0{1..1}
do
    printf "send config and restart slurm -> %s: " $n
    scp -p /etc/slurm/slurm.conf $n:/etc/slurm/
    #scp -p /etc/slurm/gres.conf $n:/etc/slurm/
    scp -p /etc/slurm/cgroup.conf $n:/etc/slurm/
    ssh $n systemctl stop slurmd
    ssh $n systemctl start slurmd
    ssh $n systemctl status slurmd | grep Active | awk '{print $2 $3}'
done
    echo " "

systemctl stop slurmd
systemctl stop slurmctld

systemctl start slurmctld
systemctl start slurmd

echo "slurmctld -> "
systemctl status slurmctld | grep Active | awk '{print $2 $3}'
echo "slurmd -> "
systemctl status slurmd | grep Active | awk '{print $2 $3}'

slurm.confを適用して、計算ノードが認識されていることを確認する。

[root@rx94headnode bash]# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up      30:00      1   idle rx94headnode
gpu          up      30:00      1   idle gpu01
[root@gpu01 ~]#
[root@gpu01 ~]# scontrol ping
Slurmctld(primary) at rx94headnode is UP
[root@gpu01 ~]#

テスト計算を実施する。
以下のようなスクリプトを作成

[user01@rx94headnode ~]$ cat run.sh
#!/bin/sh
#SBATCH --job-name run_test2
#SBATCH --nodes=1
#SBATCH -o %x.%J.out
#SBATCH -e %x.%J.err

hostname
sleep 60

ジョブを投入

[user01@rx94headnode ~]$ sbatch -p gpu run.sh
Submitted batch job 3
[user01@rx94headnode ~]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 3       gpu run_test   user01  R       0:03      1 gpu01
[user01@rx94headnode ~]$

ジョブが実行できていることを確認する

[user01@rx94headnode ~]$ sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
3             run_test2        gpu                     1    RUNNING      0:0
3.batch           batch                                1    RUNNING      0:0
[user01@rx94headnode ~]$

計算が終了するとCOMPLETEDとなる

[user01@rx94headnode ~]$ sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
3             run_test2        gpu                     1  COMPLETED      0:0
3.batch           batch                                1  COMPLETED      0:0
[user01@rx94headnode ~]$

※)slurmの通信がfirewalldで遮断されることがあるので、ヘッドノード、計算ノードでfirewalldを止めておく。

 systemctl stop firewalld

実行例)

[root@gpu01 ~]# systemctl status firewalld
 firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-07-19 18:30:45 JST; 1 day 19h ago
       Docs: man:firewalld(1)
   Main PID: 762 (firewalld)
      Tasks: 2 (limit: 10966)
     Memory: 36.4M
        CPU: 740ms
     CGroup: /system.slice/firewalld.service
             └─762 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid

 7 19 18:30:44 gpu01 systemd[1]: Starting firewalld - dynamic firewall daemon...
 7 19 18:30:45 gpu01 systemd[1]: Started firewalld - dynamic firewall daemon.
[root@gpu01 ~]# systemctl stop firewalld
[root@gpu01 ~]# systemctl status firewalld
 firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
     Active: inactive (dead) since Mon 2025-07-21 14:08:31 JST; 56s ago
   Duration: 1d 19h 37min 46.154s
       Docs: man:firewalld(1)
    Process: 762 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
   Main PID: 762 (code=exited, status=0/SUCCESS)
        CPU: 783ms

 7 19 18:30:44 gpu01 systemd[1]: Starting firewalld - dynamic firewall daemon...
 7 19 18:30:45 gpu01 systemd[1]: Started firewalld - dynamic firewall daemon.
 7 21 14:08:31 gpu01 systemd[1]: Stopping firewalld - dynamic firewall daemon...
 7 21 14:08:31 gpu01 systemd[1]: firewalld.service: Deactivated successfully.
 7 21 14:08:31 gpu01 systemd[1]: Stopped firewalld - dynamic firewall daemon.
[root@gpu01 ~]#

4. GPU機としてクライアントノードの設定

RockyLinux9.4をGPU機と過程した設定手順をまとめる。
参考として、過去にGPUのリソース管理設定手順を調査している。この時は、RockyLinux8であれば、GPU機としてのリソース管理ができそうであった。今回はバージョンアップすることによって、RockyLinux9.4でGPUリソース管理すること、およびその設定手順を明確化してまとめる。
参考)https://nonoco.believeriver.site/detail_mark/476/

※本スレッド内容がかなり長くなったため、別のスレッドでGPU機の設定についてまとめる。
https://nonoco.believeriver.site/detail_mark/501/


Appendix. CgroupV2

slurmdの起動に失敗する場合、/var/spool/slurmd が存在するか確認し、もしフォルダがなければ手動で作成しよう

sudo mkdir -p /var/spool/slurmd

再度、slurmdをリスタートして、デーモンが起動できるかを確認する

 sudo systemctl restart slurmd
sudo systemctl status slurmd| grep  Active| awk '{print $2 $3}'

どうもslurmdが起動できない。cgroup v2の環境では、cgoupの設定なしの起動がそもそもできない可能性がありそう。
(現状、slurm.confでは、cgroupを使用しない設定となっているにもかかわらず、slurmdは、cgroupを認識しようとしてしまうらしい。これを止める手段がいまのところない。さらに、いずれにしても、gpu管理のためのバージョンアップ検討のため、後々cgroupが認識でないという問題は顕在化する)

[root@rx94headnode slurm]# slurmd --version
slurm 25.05.1
[root@rx94headnode slurm]# ls /usr/lib64/slurm/cgroup_v2.so
ls: '/usr/lib64/slurm/cgroup_v2.so' にアクセスできません: そのようなファイルやディレクトリはありません
[root@rx94headnode slurm]# ls /usr/lib64/slurm/cgroup_v2.so

RockyLinux9.4でslurm25をビルドしているにもかかわらず、cgroup_v2.soが存在しないことが分かった。ビルド時の環境などを見直す必要がありそうである。

今回、cgroup v2に対応するために、さらにライブラリをインストールする必要がわかり、ビルド手順、インストール手順を見直して記載している。