User Tools

Site Tools


自作クラスタ計算機:slurm_v25の基本設定

This is an old revision of the document!


概要

環境

  • Ubuntu 26.04
  • Slurm 25.11.2

構成

  • 管理ノード (ホスト名:head)
  • 計算ノード(ホスト名:node11, node12, …, node30)
    • node11〜node20は12コアのCPUが2ソケット
    • node21〜node30は24コアのCPUが2ソケット
  • 管理ノード、計算ノードの管理者のユーザー名は system_admin とします。

注意

  • NFSによって /home が共有されているとします。
  • OSは管理ノードと計算ノードで、バージョンも含めて同じものを使用してください。
  • LDAPによって、ノード間でユーザーを共有してください。
  • LDAPまたはDNSサーバ(Dnsmasq)によってホスト名を共有してください

インストール手順

事前準備

SSHの設定

パスフレーズ無しで計算ノードにSSHログインできるようにします。 PBSを使用する全ユーザーは、管理ノードで以下を実行してください。

$ ssh-keygen -N ""
$ cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ echo "StrictHostKeyChecking no" >> ~/.ssh/config

Slurmパッケージのインストール

管理ノードと計算ノードでそれぞれのパッケージをインストールしてください。 ここでは、SlurmのデータベースソフトにMariaDBを使用します。

  • 管理ノード
    $ sudo apt update
    $ sudo apt install -y mariadb-server slurm-wlm slurmdbd
  • 計算ノード
    $ sudo apt update
    $ sudo apt install -y slurmd slurm-client

slurm-client は、ユーザーや管理者がSlurmクラスターに対して操作を行うための「コマンド群(クライアントツール)」のみを詰め込んだパッケージです。

Slurmサーバーの設置

すべて管理ノードで行います。

認証鍵の作成

ジョブ投入の際には管理ノードから計算ノードにアクセスできるようにする必要があるため、各ノードに認証鍵の導入を行います。

$ sudo dd if=/dev/random of=/etc/slurm/slurm.key bs=1024 count=1
$ sudo chown slurm:slurm /etc/slurm/slurm.key
$ sudo chmod 600 /etc/slurm/slurm.key

データベースの設定

まずMariaDBの設定を行います。 your_secure_passwordにはSlurm管理者用のパスワードを設定してください。

$ sudo mysql -u root

以下のSQLコマンドを順に実行します

MariaDB [(none)]> CREATE DATABASE slurm_acct_db;
MariaDB [(none)]> CREATE USER 'slurm'@'localhost' IDENTIFIED BY 'your_secure_password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON slurm_acct_db.* TO 'slurm'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

次にSlurm Databaseの設定を行います。 your_secure_passwordにはさきほどと同じものを使ってください。

sudo nano /etc/slurm/slurmdbd.conf
/etc/slurm/slurmdbd.conf
                                                        
AuthType=auth/slurm
DbdHost=head
DbdPort=6819
SlurmUser=slurm
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid

# データベース接続設定
StorageType=accounting_storage/mysql
StorageHost=localhost
StoragePort=3306
StoragePass=your_secure_password
StorageUser=slurm
StorageLoc=slurm_acct_db

slurmdbd.conf にはパスワードが含まれるため、所有者を slurm にし、権限を 600 に設定してください。

$ sudo chown slurm:slurm /etc/slurm/slurmdbd.conf
$ sudo chmod 600 /etc/slurm/slurmdbd.conf

設定ファイルの作成

設定ファイル(slurm.conf)はSlurmの公式サイトにあるスクリプトで作成可能です。

以下が最低限の設定ですので、よくわからなければコピーして使用してください。

$ sudo nano /etc/slurm/slurm.conf
/etc/slurm/slurm.conf
ClusterName=my_cluster
SlurmctldHost=head

# 認証
AuthType=auth/slurm
CryptoType=crypto/slurm
SlurmUser=slurm
SlurmdUser=root
SlurmctldPort=6817
SlurmdPort=6818

# 状態保存とログ
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid

# アカウンティング(データベース連動)
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=head
AccountingStoragePort=6819

# ジョブの完了を記録する設定(オプションですが推奨)
JobCompType=jobcomp/none

# ジョブがCPUのコアを正しく占有・バインドできるようにする設定
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory,CR_LLN

TaskPlugin=task/cgroup

# configファイルの内容を計算ノードと共有(Configless機能)
SlurmctldParameters=enable_configless

# リソース管理(CPU数やメモリは各ノードの実装に合わせる必要があります)
# 以下はnode11〜node20が12コアCPUが2ソケット、node21〜node30が24コアCPUが2ソケットの例です。
# RealMemoryの単位はメガバイト
NodeName=node[11-20] CPUs=24 Boards=1 SocketsPerBoard=2 CoresPerSocket=12 ThreadsPerCore=1 RealMemory=126000 State=UNKNOWN
NodeName=node[21-30] CPUs=48 Boards=1 SocketsPerBoard=2 CoresPerSocket=24 ThreadsPerCore=1 RealMemory=252000 State=UNKNOWN

# パーティション設定
PartitionName=batch Nodes=node[11-30] Default=YES MaxTime=INFINITE State=UP
PartitionName=cpu24 Nodes=node[11-20] Default=NO MaxTime=INFINITE State=UP
PartitionName=cpu48 Nodes=node[21-30] Default=NO MaxTime=INFINITE State=UP
  • CR_Core_Memory: CPUコアとメモリを細かく切り出して割り当てます。
  • CR_LLN (Least Loaded Node): ジョブが投入された際、割り当て候補となるノードの中から「現在最も負荷が低い(使われていないリソースが多い)ノード」を最優先で選択します。

計算ノードのホスト名が hogehoge, fugafuga のように連続する数字の連番でまとめられない場合は以下のように書きます。

NodeName=hogehoge CPUs=24 Boards=1 SocketsPerBoard=2 CoresPerSocket=12 ThreadsPerCore=1 RealMemory=128000 State=UNKNOWN
NodeName=fugafuga CPUs=48 Boards=1 SocketsPerBoard=2 CoresPerSocket=24 ThreadsPerCore=1 RealMemory=256000 State=UNKNOWN

PartitionName=batch Nodes=hogehode,fugafuga Default=YES MaxTime=INFINITE State=UP

NodeNameにはコンピュータ名(計算ノードで $ hostname と入力して出てくるもの)を設定します。 これがネットワーク上でのホスト名と異なるものになっている場合は NodeAddr にホスト名(あるいはIPアドレス)を別途設定します。

NodeName=hogehoge NodeAddr=192.168.0.11 CPUs=24 Boards=1 SocketsPerBoard=2 CoresPerSocket=12 ThreadsPerCore=1 RealMemory=128000 State=UNKNOWN
NodeName=fugafuga NodeAddr=192.168.0.12 CPUs=24 Boards=1 SocketsPerBoard=2 CoresPerSocket=12 ThreadsPerCore=1 RealMemory=128000 State=UNKNOWN

各計算ノードで指定できるリソースの最大値は、Slurmをインストールした計算ノードで以下のコマンドで確認できます。

$ slurmd -C

slurm.confでスペック以上の数値を指定すると、その計算ノードは動かなくなります。

ディレクトリの作成とサービスの起動

slurmdbd → slurmctldの順に立ち上げてください。

$ sudo mkdir -p /var/spool/slurmctld /var/log/slurm
$ sudo chown -R slurm:slurm /var/spool/slurmctld/ /var/log/slurm/
$ sudo systemctl enable slurmdbd slurmctld
$ sudo systemctl start slurmdbd
$ sudo systemctl start slurmctld

Slurmクライアントの設置

認証鍵の設置

管理ノードで行います。 鍵ファイルをホームディレクトリにコピーします。

$ sudo cp /etc/slurm/slurm.key ~/slurm.key
以下略

各計算ノードで鍵を設置と権限を設定をします。 (/etc/exports で /home に no_root_squash オプションが入っていることを確認してください)

$ sudo cp slurm.key /etc/slurm/slurm.key
$ sudo chown slurm:slurm /etc/slurm/slurm.key
$ sudo chmod 600 /etc/slurm/slurm.key

設定ファイルの作成

管理ノードの slurm.conf と同じ中身のファイルを計算ノードの /etc/slurm/ に置く必要がありますが、設定が変わるたびにすべてのノードにコピーし直すのは非常に面倒なので、Configless機能を使って管理ノードのファイルを読み込むようにします。

計算ノードで実行してください。

$ sudo systemctl edit slurmd
[Service]
ExecStart=
ExecStart=/usr/sbin/slurmd --systemd --conf-server head

必ず “### Edits below this comment will be discarded” の上に書き加えてください。

$ sudo systemctl daemon-reload

ディレクトリの作成とサービスの起動

計算ノードで実行してください。

$ sudo mkdir -p /var/spool/slurmd /var/log/slurm
$ sudo chown -R slurm:slurm /var/spool/slurmd/ /var/log/slurm/
$ sudo systemctl enable slurmd
$ sudo systemctl start slurmd

管理

計算ノードが正しく設定されているか確認してください。

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
batch*       up   infinite     20   idle node[11-30]
cpu24        up   infinite     10   idle node[11-20]
cpu48        up   infinite     10   idle node[21-30]

slurm.confを更新した場合は、管理ノードで以下のコマンドを実行してください

$ sudo scontrol reconfigure
$ sudo scontrol update NodeName=node[11-30] State=RESUME   # 計算ノードに設定が反映されない場合

使い方

よく使うコマンド

  • ジョブの投入・管理:
    • sbatch: シェルスクリプトをバックグラウンドジョブとしてキューに投入する。
      $ sbatch job.sh
      • ジョブスクリプトの雛形
        job.sh
        #!/bin/bash
        #SBATCH -J job_name                 # ジョブ名(任意)
        #SBATCH -p batch                    # 使用するパーティションを指定
        #SBATCH -N 1                        # ノード数 = 1
        #SBATCH --ntasks-per-node=2         # 1ノードあたりのMPIプロセス数 (mpiprocs=2)
        #SBATCH --cpus-per-task=6           # 1MPIプロセスあたりのCPUコア数 (ompthreads=6)
        #SBATCH -o %x.%j.out                # 標準出力ファイル名 (ジョブ名.ジョブID.out)
        #SBATCH -e %x.%j.err                # 標準エラーファイル名
        
        # ホスト名の表示
        hostname
        
        # OpenMPスレッド数の設定と確認
        echo "OMP_NUM_THREADS = $OMP_NUM_THREADS"
        
        # 総コア数の計算と表示
        TOTAL_CPUS=$((SLURM_NTASKS * SLURM_CPUS_PER_TASK))
        echo "NCPUS = $TOTAL_CPUS"
        
        # MPI実行
        # Slurm環境の mpirun は、特別なノードファイル指定 (-f) なしで自動的に割り当てられたリソース(2プロセス × 6スレッド)を認識
        mpirun program.exe > program.out
    • scancel: 実行中または待機中のジョブを取り消す(キャンセルする)。JobIDはsqueueコマンドで確認できます。
      $ scancel <jobID>
  • ステータスの確認:
    • sinfo: クラスター内のノードの状態(idle, alloc, downなど)やパーティションの一覧を表示する。
      $ sinfo
    • squeue: 現在キューに溜まっている、または実行中のジョブの一覧を表示する。
      $ squeue
    • sacct: 過去に実行したジョブの履歴や消費リソースの統計(※データベース連携時)を確認する。
      $ sacct

リソースやジョブの詳細を確認するには scontrol show を使います。

  • ジョブの詳細情報を表示
    $ scontrol show job <JobID>
  • 計算ノードの詳細情報を表示
    $ scontrol show node node11
自作クラスタ計算機/slurm_v25の基本設定.1783536755.txt.gz · Last modified: 2026/07/09 03:52 by koudai