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に対応するために、さらにライブラリをインストールする必要がわかり、ビルド手順、インストール手順を見直して記載している。