皆さん、こんにちは!
今回は、最新バージョンのSlurm 25.05をRocky Linux 9.6環境にソースコードからインストールする手順をご紹介します。
コントローラー(Slurm Controller+DBD、以下CONTROLLER+DBD)と計算ノード(Slurm Computer、以下COMPUTER)からなる2ノード構成で、Slurm認証を使用し、計算ノードをConfiglessとして設定することで、運用負荷を軽減する構成に焦点を当てます。
「ソースからのインストールは複雑そう…」と感じる方もいらっしゃるかもしれませんが、このガイドが皆さんのSlurm環境構築の一助となれば幸いです!
前準備(CONTROLLER+DBD、COMPUTER)
hostsファイル設定 コントローラーと計算ノードがお互い名前解決できるようにhostsファイルの設定が必要です。
Slurmユーザーの作成 Slurmサービスが動作するための専用ユーザーslurmを作成します。
groupadd -g 64030 slurm useradd -u 64030 -g 64030 -m -d /run/slurm -s /sbin/nologin -r slurm💡 ポイント:
useraddコマンドで警告が表示されることがありますが、UIDがシステム定義の最大値を超えているためであり、問題ありません。 ユーザーが正しく作成されたか id slurm コマンドで確認できます。/run/slurmディレクトリの作成も確認しましょう。
- 前提パッケージのインストール 必要なパッケージをインストールします。
# dnf config-manager --set-enabled crb # dnf -y install epel-release # dnf update -y # dnf groupinstall -y "Development Tools" # dnf install -y dbus-glib-devel # dnf install -y jansson jansson-develSlurm認証設定(CONTROLLER+DBD、COMPUTER)
今回はMungeではなくSlurm認証を使用するため、JWTライブラリとJSONライブラリの設定が必要です。
JWT library設定 公式サイトの手順も参考にSlurm認証に必要となるJWTライブラリをインストールします。
# cd ~ # git clone --depth 1 --single-branch -b v1.12.0 https://github.com/benmcollins/libjwt.git libjwt # cd libjwt # autoreconf --force --install # ./configure --prefix=/usr/local # make -j 5 # sudo make install- インストール後、/usr/local/libにlibjwt関連のファイルが作成されていることを確認します。
ls -l /usr/local/lib -rw-r--r-- 1 root root 180352 7月 22 11:54 libjwt.a -rwxr-xr-x 1 root root 934 7月 22 11:54 libjwt.la lrwxrwxrwx 1 root root 15 7月 22 11:54 libjwt.so -> libjwt.so.0.7.0 lrwxrwxrwx 1 root root 15 7月 22 11:54 libjwt.so.0 -> libjwt.so.0.7.0 -rwxr-xr-x 1 root root 114744 7月 22 11:54 libjwt.so.0.7.0 drwxr-xr-x 2 root root 23 7月 22 11:54 pkgconfigまた、システムのライブラリパスに/usr/local/libを追加し、ldconfigを実行します。
# echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/local-libjwt.conf # sudo ldconfig# dnf install -y cmake # cd ~ # git clone --depth 1 --single-branch -b json-c-0.15-20200726 https://github.com/json-c/json-c.git json-c # mkdir json-c-build # cd json-c-build # cmake ../json-c # make # sudo make install- PKG_CONFIG_PATHを設定して、ライブラリが適切に認識されるようにします。
# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:/usr/local/lib64/pkgconfig/:$PKG_CONFIG_PATH- シングルキーセットアップ Slurm認証のためのキーを生成し、適切な権限を設定します。
(CONTROLLER+DBD)
# dd if=/dev/random of=/usr/local/etc/slurm.key bs=1024 count=1 # chown slurm:slurm /usr/local/etc/slurm.key # chmod 600 /usr/local/etc/slurm.key(COMPUTER)
# scp (CONTROLLER+DBD):/usr/local/etc/slurm.key /usr/local/etc/ # chown slurm:slurm /usr/local/etc/slurm.key # chmod 600 /usr/local/etc/slurm.key💡 ポイント:
slurm.keyファイルはControllerとComputerノード間で共有する必要があります。
Slurmインストール(CONTROLLER+DBD、COMPUTER)
# cd ~ # wget https://download.schedmd.com/slurm/slurm-25.05.1.tar.bz2 # tar -xaf slurm*tar.bz2 # cd slurm-25.05.1/ # ./configure --without-munge --with-jwt=/usr/local/ # make -j 5 # make install💡 ポイント:
mungeは使わずSlurm認証を使用するようconfigureオプションを指定します。
# ls -lt /usr/local/lib*/slurm*/accounting_storage_mysql.so -rwxr-xr-x 1 root root 2336424 7月 22 18:10 /usr/local/lib/slurm/accounting_storage_mysql.so # ls -lt /usr/local/lib*/slurm*/jobcomp_mysql.so -rwxr-xr-x 1 root root 436432 7月 22 18:10 /usr/local/lib/slurm/jobcomp_mysql.soSlurmインストール後に/usr/local/lib/slurm/accounting_storage_mysql.soや/usr/local/lib/slurm/jobcomp_mysql.soが見つからない場合、個別にビルドします。
# cd slurm-25.05.1/ # find . -name mysql ./src/plugins/accounting_storage/mysql ./src/plugins/jobcomp/mysql # cd src/plugins/accounting_storage/mysql/ # make # make install # cd src/plugins/jobcomp/mysql/ # make # make installController設定(CONTROLLER+DBD)
- 設定ファイル配置 必要なサービスファイルと設定ファイルのひな形を適切な場所にコピーします。
# cp -p /root/slurm-25.05.1/etc/slurmctld.service /usr/lib/systemd/system/ # cp -p /root/slurm-25.05.1/etc/slurmdbd.service /usr/lib/systemd/system/ # systemctl daemon-reload # cp -p /root/slurm-25.05.1/etc/slurm.conf.example /usr/local/etc/ # cp -p /root/slurm-25.05.1/etc/cgroup.conf.example /usr/local/etc/ # cp -p /root/slurm-25.05.1/etc/slurmdbd.conf.example /usr/local/etc/- Controller設定 (slurm.conf) slurm.conf.exampleをslurm.confとしてコピーし、編集します。
# cd /usr/local/etc/ # cp -p slurm.conf.example slurm.conf # vi slurm.confSlurmctldHost=slurmsv SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdLogFile=/var/log/slurm/slurmd.log NodeName=node01 CPUs=4 State=UNKNOWN PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP AuthType = auth/slurm CredType = cred/slurm💡 ポイント:
上記のような設定項目を適切に設定してください。
# mkdir /var/log/slurm # mkdir /var/spool/slurmctld # chown slurm:slurm /var/log/slurm # chown slurm:slurm /var/spool/slurmctld # chown -R slurm:slurm /usr/local/etc/*DBD設定(CONTROLLER+DBD)
# dnf install -y mariadb-server mariadb-connector-c-devel- インストール後、MariaDBサービスを有効化し、起動します。
# systemctl enable mariadb.service # systemctl start mariadb.service # systemctl status mariadb.service# mysql_secure_installationEnter current password for root (enter for none):
→ 初回なのでパスワードなしでEnterで進むSwitch to unix_socket authentication [Y/n] n
→ 認証方法を「unix_socket」認証に切り替えないので「n」で進むChange the root password? [Y/n] y
→ 任意のパスワードを設定するので「y」で進むNew password: P@ssw0rd
→ 今回は「P@ssw0rd」とする 入力しても表示されないRe-enter new password: P@ssw0rd
→ 確認のため再入力Remove anonymous users? [Y/n] y
→ anonymous usersは削除するので「y」で進むDisallow root login remotely? [Y/n] y
→ rootによるリモートログインは無効にするので「y」で進むRemove test database and access to it? [Y/n] y
→ テストデータベースは削除するので「y」で進むReload privilege tables now? [Y/n] y
→ 設定内容をリロードするので「y」で進むThanks for using MariaDB!
- InnoDBストレージエンジンのバッファプールのサイズをslurmdbd向けに最適化 /etc/my.cnf.d/mariadb-server.cnfファイルを編集し、[mysqld]セクションに以下の2行を追加します。
# cp -p /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.org # vi /etc/my.cnf.d/mariadb-server.cnf[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
innodb_buffer_pool_size=4096M
innodb_lock_wait_timeout=900
- 変更を反映するため、MariaDBサービスを再起動します。
# systemctl restart mariadb.service # systemctl status mariadb.service- Slurm用データベースを登録 MariaDBにSlurm用のデータベースとユーザーを作成し、権限を付与します。
# sudo mysqlMariaDB [(none)]> create database slurm_acct_db;
MariaDB [(none)]> create user 'slurm'@'localhost' identified by 'SLURM';
MariaDB [(none)]> set password for slurm@localhost = password('password');
MariaDB [(none)]> grant all on slurm_acct_db.* TO 'slurm'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit
Bye- 作成したデータベースが表示されることを確認します。
# mysql --user=slurm --password=password slurm_acct_db -e 'show databases;' +--------------------+ | Database | +--------------------+ | information_schema | | slurm_acct_db | +--------------------+- Slurm設定変更 (slurm.conf と slurmdbd.conf) slurm.confを編集し、アカウンティングストレージの設定を変更します。
# cd /usr/local/etc/ # vi slurm.confAccountingStorageHost=slurmsv AccountingStorageType=accounting_storage/slurmdbd- 次に、slurmdbd.conf.exampleをslurmdbd.confとしてコピーし、適切な権限を設定して編集します。
# cp -p slurmdbd.conf.example slurmdbd.conf # chmod 600 slurmdbd.conf # vi '^\s*#|^\s*$' slurmdbd.confAuthType=auth/slurm DbdAddr=localhost DbdHost=localhost DbdPort=6819 SlurmUser=slurm DebugLevel=verbose LogFile=/var/log/slurm/slurmdbd.log PidFile=/var/run/slurmdbd.pid StorageType=accounting_storage/mysql StoragePass=password StorageUser=slurm StorageLoc=slurm_acct_dbComputer設定(COMPUTER)
- 設定ファイル配置 Slurmdサービスファイルを適切な場所にコピーします。
# cp -p /root/slurm-25.05.1/etc/slurmd.service /usr/lib/systemd/system/ # systemctl daemon-reload # cp -p /root/slurm-25.05.1/etc/cgroup.conf.example /usr/local/etc/ # mkdir /var/log/slurm # mkdir /var/spool/slurmd # chown slurm:slurm /var/log/slurm # chown slurm:slurm /var/spool/slurmd # chown -R slurm:slurm /usr/local/etc/*コンフィグレス設定(CONTROLLER+DBD、COMPUTER)
- ComputerノードがConfiglessで動作するように設定します。
(CONTROLLER+DBD)
# vi /usr/local/etc/slurm.confSlurmctldParameters=enable_configless(COMPUTER)
# vi /etc/default/slurmdSLURMD_OPTIONS="--conf-server=(CONTROLLER+DBDのホスト名):6817"サービス起動(CONTROLLER+DBD、COMPUTER)
- Controller、DBD、Computerの各サービスを起動します。
(CONTROLLER+DBD)
# systemctl enable --now slurmdbd.service # systemctl status slurmdbd.service # systemctl enable --now slurmctld.service # systemctl status slurmctld.service(COMPUTER)
# systemctl enable --now slurmd.service # systemctl status slurmd.service動作確認(CONTROLLER+DBD)
Slurmクラスターが正常に動作しているか確認しましょう。
sacctコマンド sacctコマンドでジョブアカウンティング情報が表示されることを確認します。
# sacct --format=JobID,JobName%15,User,Partition,State%15,ExitCode,Elapsed,Start,End JobID JobName User Partition State ExitCode Elapsed Start End ------------ --------------- --------- ---------- --------------- -------- ---------- ------------------- -------------------- sinfoコマンド sinfoコマンドでパーティションとノードの状態が確認できます。
# sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 1 idle node01- テストジョブの実行 ユーザー(例: life)に切り替え、簡単なテストジョブを投入して動作を確認します。
$ su - life $ vi testjob.sh#!/bin/bash id pwd hostname date sleep 10$ sbatch testjob.sh Submitted batch job 1 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 1 debug testjob. life R 0:05 1 node01 $ sacct JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 testjob.sh debug 1 RUNNING 0:0 1.batch batch 1 RUNNING 0:0 $ ls -lt -rw-r--r-- 1 life life 119 7月 4 15:18 slurm-1.out $ cat slurm-1.out uid=1000(life) gid=1000(life) groups=1000(life),10(wheel) /home/life node01 2025年 7月 4日 金曜日 15:18:19 JST $ sacct JobID JobName Partition Account AllocCPUS State ExitCode ------------ ---------- ---------- ---------- ---------- ---------- -------- 1 testjob.sh debug 1 COMPLETED 0:0 1.batch batch 1 COMPLETED 0:0💡 ポイント:
ジョブが完了し、slurm-1.outなどの出力ファイルが作成され、その内容が正しいことを確認します。
これで、Slurmのインストールと基本的な設定、そしてサービスの起動と動作確認までが完了しました!
まとめ
今回は、Slurmの最新バージョン25.05をRocky Linux 9.6環境に、ソースコードからインストールする手順を詳しくご紹介しました。
Mungeを使わずにSlurm認証を使用し、Configless構成を取り入れることで、よりシンプルで管理しやすいHPC環境を構築できたのではないでしょうか。
このブログ記事が、皆さんの研究や開発を加速させる一助となれば幸いです!