0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slurmことはじめ

Last updated at Posted at 2025-03-27

Slurm

Slurm Workload Manager - Documentation: OpenPBS等と同じジョブスケジューラ

度々見かけるし、OpenPBSよりも設定が単純で良いなどの情報も見かけたので、試してみる。

公式: Slurm Workload Manager - Quick Start Administrator Guide

インストール

Kubuntu22.04にaptでインストールする

/etc/os-relase
RETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

必要パッケージのインストール

sudo apt update
sudo apt install -y slurm-wlm munge

でslurmのインストール完了。

sudo create-munge-key
sudo systemctl enable --now munge

でMUNGE認証の初期化と起動。

systemctl status munge

● munge.service - MUNGE authentication service
     Loaded: loaded (/lib/systemd/system/munge.service; enabled; vendor preset: >
     Active: active (running) since Thu 2025-03-27 01:29:46 JST; 9h ago
       Docs: man:munged(8)
   Main PID: 510396 (munged)
      Tasks: 4 (limit: 38223)
     Memory: 632.0K
        CPU: 116ms
     CGroup: /system.slice/munge.service
             └─510396 /usr/sbin/munged

 3月 27 01:29:46 shinohara-kubuntu systemd[1]: Starting MUNGE authentication s>
 3月 27 01:29:46 shinohara-kubuntu systemd[1]: Started MUNGE authentication s

でmungeが起動していることが確認できる。

設定ファイルの記載と起動

sudo mkdir -p /etc/slurm-llnl/で設定ファイルを置くディレクトリを作成。ホスト名をshinohara-kubuntuとして、CPU数が4のとき、以下のようにconfファイルを記載

/etc/slurm-llnl/slurm.conf
ClusterName=single_node_cluster #好きな名前を付ける
ControlMachine=shinohara-kubuntu #slurmctldを立ち上げるホスト名

SlurmUser=slurm
SlurmdUser=root #ここをrootにしないとslurmdが立ち上がらなかった
StateSaveLocation=/var/spool/slurm-llnl
SlurmdSpoolDir=/var/spool/slurmd
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
AuthType=auth/munge

ProctrackType=proctrack/pgid

SlurmctldTimeout=120
SlurmdTimeout=300
SchedulerType=sched/backfill
SelectType=select/cons_res
SelectTypeParameters=CR_Core

NodeName=shinohara-kubuntu CPUs=8 Sockets=1 CoresPerSocket=4 ThreadsPerCore=2 State=UNKNOWN #ソケット数1、ソケット当たりコア数4、コア当たりスレッド数2の合計8cpuであることを宣言
PartitionName=debug Nodes=shinohara-kubuntu Default=YES MaxTime=INFINITE State=UP #debugパーティションの指定ノード、デフォルトパーティション、実行可能時間無制限の指定

slurmdはconfファイルのpathとして/etc/slurm/slurm.confを探しに行くが、上記のファイルはこのpathにはない。そこで、ln -s /etc/slurm-llnl/slurm.conf /etc/slurm/slurm.confとしてシンボリックリンクを張ることで、元ファイルの設定が読み込まれる。

sudo systemctl enable --now slurmctld
sudo systemctl enable --now slurmd

で、デーモンを起動。

● slurmd.service - Slurm node daemon
     Loaded: loaded (/lib/systemd/system/slurmd.service; enabled; vendor preset:>
     Active: active (running) since Thu 2025-03-27 14:36:30 JST; 11min ago
       Docs: man:slurmd(8)
   Main PID: 518082 (slurmd)
      Tasks: 1
     Memory: 1.4M
        CPU: 123ms
     CGroup: /system.slice/slurmd.service
             └─518082 /usr/sbin/slurmd -D -s

(略)

 ● slurmctld.service - Slurm controller daemon
     Loaded: loaded (/lib/systemd/system/slurmctld.service; enabled; vendor pres>
     Active: active (running) since Thu 2025-03-27 14:36:30 JST; 11min ago
       Docs: man:slurmctld(8)
   Main PID: 518091 (slurmctld)
      Tasks: 10
     Memory: 4.2M
        CPU: 430ms
     CGroup: /system.slice/slurmctld.service
             ├─518091 /usr/sbin/slurmctld -D -s
             └─518093 "slurmctld: slurmscriptd" "" ""

(略)

として起動していることがわかる。

sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      1   idle shinohara-kubuntu
scontrol show node
NodeName=shinohara-kubuntu Arch=x86_64 CoresPerSocket=4
  CPUAlloc=0 CPUTot=8 CPULoad=0.02
  AvailableFeatures=(null)
  ActiveFeatures=(null)
  Gres=(null)
  NodeAddr=shinohara-kubuntu NodeHostName=shinohara-kubuntu Version=21.08.5
  OS=Linux 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025
  RealMemory=1 AllocMem=0 FreeMem=18479 Sockets=1 Boards=1
  State=IDLE ThreadsPerCore=2 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
  Partitions=debug
  BootTime=2025-02-15T23:30:03 SlurmdStartTime=2025-03-27T14:36:30
  LastBusyTime=2025-03-27T14:44:37
  CfgTRES=cpu=8,mem=1M,billing=8
  AllocTRES=
  CapWatts=n/a
  CurrentWatts=0 AveWatts=0
  ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s

Kubuntu24.04にslurm-wlm 23.11.4を入れる場合

Ubuntu24.04にaptslurm-wlmを入れると、バージョンが23.11.4。
Slurmの認証にmungeが不要になった件 #SLURM - Qiitaに記載がある通り、23.11以降はmungeは必ずしも要さない。(つまりcreate-munge-keyコマンドでkeyを作成しない)
公式情報(Slurm Workload Manager - )によると、

dd if=/dev/random of=/etc/slurm/slurm.key bs=1024 count=1

でkeyを作成して、/etc/slurm/に置く。

chown slurm:slurm /etc/slurm/slurm.key
chmod 600 /etc/slurm/slurm.key

でユーザーとパーミションを設定する。
slurm.keyを使うことに対応して、

slurm.conf(抜粋)
AuthType = auth/slurm
CredType = cred/slurm

と記載する。
上のKubuntu22.04のケースではchatGPTに教えてもらった通りに/etc/slurm-llnlslurm.confを置いて、/etc/slurm/slurm.confからシンボリックリンクを貼ったが、そもそも/etc/slurm/に置けば良いだろうということでそうした。以下が、slurm.confの一例

/etc/slurm/slurm.conf
ClusterName=single_node_cluster
ControlMachine=shinohara-desk001

SlurmUser=slurm
SlurmdUser=root #出来ればここもslurmにしたかったが色々試みた末諦めた
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
AuthType=auth/slurm
CredType=cred/slurm

ProctrackType=proctrack/pgid

SlurmctldTimeout=120
SlurmdTimeout=300
SchedulerType=sched/backfill

NodeName=shinohara-desk001 Sockets=1 CoresPerSocket=6 ThreadsPerCore=2 RealMemory=60000 State=UNKNOWN
PartitionName=workq Nodes=shinohara-desk001 Default=YES MaxTime=INFINITE State=UP

これで

sudo systemctl start slurmctld
sudo systemctl start slurmd

で起動させればOK。

トラブルシューティング

State=IDLE+DRAIN等でノードで計算可能にならない

scontrol show nodesとすると認識されているノード情報が得られる。例えば

scontrol show nodes
(略)
State=IDLE+DRAIN
(略)
Reason=Low socket*core*thread count, Low CPUs [slurm@2025-03-27T11:58:12]

という表示があると、うまく動かない。原因は、slurmdが取得したハードウェア情報とslurm.confの情報が整合していないことを意味している。基本的にはこれが整合しないと動かない。
だったら、それをslurm.confにユーザーに記入させる意味がわからない。しかも、slurmdが取得したハードウェアの情報は簡単に見えるところにはない。しかも、その情報は結構雑であんまり正しくないケースがある。(私が直面したケースでは最近流行りの非対称構成のコアでは20CPUsのはずなのに、slurmdに言わせると12CPUsだった。)ブツブツブツブツ... んで、どうすればslurmdが取得したハードウェア情報を見れば良いかというと、slurmdのログファイルを見るしかないのである!(ズコー)
というわけで、journalctl -u slurmdでログをみると

M月 DD 22:30:58 shinohara-desk001 slurmd[1141375]: slurmd-shinohara-desk001: error: Node configuration differs from hardware: CPUs=1:12(hw) Boards=1:1(hw) SocketsPerBoard=1:1(hw) CoresPerSocket=1:6(hw) ThreadsPerCore=1:2(hw)

みたいな感じで、はんなりと教えてくれていることがわかる。(右がslurmdが取得したハードウェアの値)

というわけでこの数字を頼りに

slurm.conf(抜粋)
NodeName=shinohara-desk001 Sockets=1 CoresPerSocket=6 ThreadsPerCore=2 State=UNKNOWN #CPUs=12は独立な変数ではないのでここでは端折った

と書き直して

sudo systemctl stop slurmd slurmctld

でデーモン止めて

sudo rm /var/spool/slurmd/*
sudo rm /var/spool/slurmctld/* #slurm-llnlとかになっているかも

でデーモンが書き込んだ設定ファイルを一度消して(なんでかわからないけれど、デーモン起動時に設定が間違っていると、その認識を設定ファイル群のどこかに書き込んでいて、slurm.confを更新してデーモン再起動するだけでは問題が解決しなかった。このファイル群を一掃すれば、起動時にフレッシュな状況になる。)

sudo systemctl start slurmd slurmctld

でデーモン起動して、scontrol show nodesで確認。

(抜粋)
   State=IDLE ThreadsPerCore=2 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A

State=IDLEが確認できれば完了。

多分一生分sudo systemctl stop slurmd slurmctld``sudo systemctl start slurmd slurmctld のコマンドを入力したと思う。

よく使うコマンド

sinfo
scontrol show node
squeue
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?