Lifematics Corporate Blog

Lifematics社のコーポレートブログへようこそ!

Slurm 25.05をソースからインストール(Rocky Linux 9.6 マルチノード構成)

皆さん、こんにちは!

今回は、最新バージョンのSlurm 25.05をRocky Linux 9.6環境にソースコードからインストールする手順をご紹介します。

コントローラー(Slurm Controller+DBD、以下CONTROLLER+DBD)と計算ノード(Slurm Computer、以下COMPUTER)からなる2ノード構成で、Slurm認証を使用し、計算ノードをConfiglessとして設定することで、運用負荷を軽減する構成に焦点を当てます。

「ソースからのインストールは複雑そう…」と感じる方もいらっしゃるかもしれませんが、このガイドが皆さんのSlurm環境構築の一助となれば幸いです!

  1. 前準備(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-devel
    
  2. Slurm認証設定(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ノード間で共有する必要があります。

  3. 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.so
    

    Slurmインストール後に/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 install
    
  4. Controller設定(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.conf
    
     SlurmctldHost=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
    

    💡 ポイント:

    上記のような設定項目を適切に設定してください。

    • ディレクトリ作成と権限設定 Slurmのログやスプールディレクトリを作成し、所有者を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/*
    
  5. DBD設定(CONTROLLER+DBD)

    • MariaDBインストール MariaDBサーバーと開発用コネクタをインストールします。
     # dnf install -y mariadb-server mariadb-connector-c-devel
    
    • インストール後、MariaDBサービスを有効化し、起動します。
     # systemctl enable mariadb.service
     # systemctl start mariadb.service
     # systemctl status mariadb.service
    
    • MariaDB初期設定 mysql_secure_installationコマンドを実行し、MariaDBのセキュリティ設定を行います。
     # mysql_secure_installation
    

    Enter 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 mysql
    

    MariaDB [(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.conf
    
     AccountingStorageHost=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.conf
    
     AuthType=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_db
    
  6. Computer設定(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/*
    
  7. コンフィグレス設定(CONTROLLER+DBD、COMPUTER)

    • ComputerノードがConfiglessで動作するように設定します。

    (CONTROLLER+DBD)

     # vi /usr/local/etc/slurm.conf
    
     SlurmctldParameters=enable_configless
    

    (COMPUTER)

     # vi /etc/default/slurmd
    
     SLURMD_OPTIONS="--conf-server=(CONTROLLER+DBDのホスト名):6817"
    
  8. サービス起動(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
    
  9. 動作確認(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環境を構築できたのではないでしょうか。

このブログ記事が、皆さんの研究や開発を加速させる一助となれば幸いです!