#author("2026-08-11T03:30:57+00:00","default:sysosa","sysosa")
#author("2026-08-11T03:40:33+00:00","default:sysosa","sysosa")
OS提供のパッケージをインストールしてもいいのだが、ソースコードからrpmbuildで作成したパッケージを採用してます

[[slurm/rpm]]で作ったパッケージをインストールします
#code(nonumber){{
[root@slurm ~]# cat /etc/redhat-release
Rocky Linux release 9.7 (Blue Onyx)

[root@slurm ~]# dnf localinstall ./rpmbuild/RPMS/x86_64/slurm-25.11.6-1.el9.x86_64.rpm \
                                 ./rpmbuild/RPMS/x86_64/slurm-slurmctld-25.11.6-1.el9.x86_64.rpm
[root@slurm ~]#
}}
&color(red){*};パッケージ版だとあるのにソースコードからrpmbuildで作ると含まれていないファイルがあるのでそれらの対処を行う
&size(10){ディストリビューターがシステム全体の観点から用意頂いたものかな};
#code(nonumber){{
[root@slurm ~]# groupadd -g 5000 slurm; useradd -M -d /var/lib/slurm -s /sbin/nologin -u 5000 -g 5000 slurm

[root@slurm ~]# echo "D /run/slurm 0755 slurm slurm -" > /usr/lib/tmpfiles.d/slurm.conf

[root@slurm ~]# /usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/slurm.conf
[root@slurm ~]# vi /etc/logrotate.d/slurm
/var/log/slurm/*.log {
    missingok
    notifempty
    copytruncate
    rotate 5
}
[root@slurm ~]# mkdir -p        /var/spool/slurm/ctld /var/log/slurm  /opt/slurm/etc
[root@slurm ~]# chown -R slurm. /var/spool/slurm      /var/log/slurm

(slurmのpath設定)
[root@slurm slurm]# echo -e "export PATH=\${PATH}:/opt/slurm/bin\nexport LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/opt/slurm/lib64" > /etc/profile.d/slurm.sh

[root@slurm slurm]# echo -e "setenv PATH \${PATH}:/opt/slurm/bin\nsetenv LD_LIBRARY_PATH \${LD_LIBRARY_PATH}:/opt/slurm/lib64" > /etc/profile.d/slurm.csh
}}
&color(red){*};基本logはsyslogに回るようでファイルに落とす必要がないなら logrotate は不要かな.

管理ノードと計算ノードの認証にこれまでは外部パッケージの munge を使っていましたが、slurm内のプラグインで代用できるみたい
っでその設定
#code(nonumber){{
[root@slurm ~]# dd if=/dev/random of=/opt/slurm/etc/slurm.key bs=1024 count=1
[root@slurm ~]# chown slurm. /opt/slurm/etc/slurm.key
[root@slurm ~]# chmod 0600 /opt/slurm/etc/slurm.key
}}
この「slurm.key」は各計算ノードの「/opt/slurm/etc/slurm.key」にコピーします. &size(10){munge.keyと同じような感じです};

***設定ファイル [#f9b15dcc]
設定ファイルは「&color(magenta){/opt/slurm/etc};」に置きます.
ファイル名は「/opt/slurm/etc/slurm.conf」として. &size(10){SRPMにある設定ファイルを転用して下記にようにしました};
#code(nonumber){{
[root@slurm ~]# vi /opt/slurm/etc/slurm.conf
ClusterName=cluster
SlurmctldHost=slurm       # FQDNでも構わないが、search domainにdomainが入っていれば[hostname -s]でもok
#AuthType=auth/munge
AuthType=auth/slurm
CredType=cred/slurm

MailProg=/bin/true        # メール通知を無効にします

MpiDefault=none
ProctrackType=proctrack/cgroup

ReturnToService=2
SlurmctldPidFile=/run/slurm/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/run/slurm/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurm/d
SlurmUser=slurm
SlurmdUser=root        <--- rootでないとcgroup情報が取れないみたい
SlurmdUser=root       # rootでないとcgroup情報が取れないみたい

SrunPortRange=60001-63000

StateSaveLocation=/var/spool/slurm/ctld
SwitchType=switch/none
TaskPlugin=task/cgroup

# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0

# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core      <-- core数のみ管理。大きなメモリー消費があるジョブにcoreだけの管理ではOOMが出る可能性がるなら「CR_Core_Memory」に代える
SelectTypeParameters=CR_Core      # core数のみ管理。大きなメモリー消費があるジョブにcoreだけの管理ではOOMが出る可能性がるなら「CR_Core_Memory」に代える

# JOB PRIORITY

# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
AccountingStoreFlags=YES
JobCompType=jobcomp/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/cgroup
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log

# COMPUTE NODES
SlurmdParameters=hostname_short    <-- 「hostname -s」で回すなら.
GresTypes=gpu
NodeName=n1 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=16001 Gres=gpu:1
NodeName=n2 CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=15732 Gres=gpu:1
NodeName=n3 CPUs=4 Boards=1 SocketsPerBoard=1 CoresPerSocket=4 ThreadsPerCore=1 RealMemory=16000 Gres=None
NodeName=n2 CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=15732 Gres=gpu:1   # RealMemoryはそのノードの搭載メモリー量を超えてると動かない.
NodeName=n3 CPUs=4 Boards=1 SocketsPerBoard=1 CoresPerSocket=4 ThreadsPerCore=1 RealMemory=16000 Gres=None    # RealMemoryはジョブに渡せるサイズを明記. OS分は差っ引く. 

PartitionName=workq Nodes=ALL Default=YES MaxTime=INFINITE State=UP
[root@slurm ~]#
}}
調整の例:[[slurm/slurm.conf]]
&color(white,blue){留意}; このslurm.confファイルで計算ノードとqueueの定義を行います.

あとcgroup.confとgres.confを用意します
#code(nonumber){{
[root@slurm ~]# vi /opt/slurm/etc/cgroup.conf
CgroupMountpoint="/sys/fs/cgroup"
ConstrainCores=yes
ConstrainDevices=yes
ConstrainRAMSpace=yes     # slurm.confのSelectTypeParametersが、CR_Coreなら無効. CR_Core_Memoryなら効きます. ジョブごとにメモリーが定義されます

[root@slurm ~]# vi /opt/slurm/etc/gres.conf
AutoDetect=nvml

[root@slurm ~]#
}}


***firewalld [#ua2093ed]
ファイアウォールの設定セットとなるものは用意されていないみたい
大抵は「/usr/lib/firewalld/services/」に置かれるのだが...

恐らく設定ファイルで変更できるから初めから入れていないのかも
ここでは 6817-6818/TCP と srun 向けに 60001-63000/TCP を開けておく
#code(nonumber){{
[root@slurm ~]# firewall-cmd --add-port=6817-6818/tcp --add-port=60001-63000/tcp --zone=public --permanent
[root@slurm ~]# firewall-cmd --reload
}}
&color(red){*};&size(10){管理ノードで「srun」を発行するならfirewalldに追加で「SrunPortRange」で定義したtcpを開ける. 管理ノードのみ. 計算ノードに適用不要です};

***デーモン起動 [#jfaab186]



#code(nonumber){{
[root@slurm ~]# systemctl enable slurmctld --now
}}
ここでは「slurm.conf」の「SlurmUser」が示すようにユーザ「slurm」が slurmctld を動かしてます.
&color(orangered){StateSaveLocation};の場所(「/var/spool/slurm/ctld」)に各種のstateファイルが置かれます。

この段階で、sinfoとかで確認が出来る   &size(10){各ノードの調整がまだなので「slurm.conf」の値だけで掲示してます};
#code(nonumber){{
[illya@slurm-client ~]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
workq*       up   infinite      3    unk n[1-3]

[illya@slurm-client ~]$ sinfo -N -l
Mon Dec 26 02:27:40 2022
NODELIST   NODES PARTITION       STATE CPUS    S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON
n1             1    workq*    unknown* 1       1:1:1  16001        0      1   (null) none
n2             1    workq*    unknown* 2       1:2:1  15732        0      1   (null) none
n3             1    workq*    unknown* 4       1:4:1  16000        0      1   (null) none

[illya@slurm-client ~]$
}}



***めも [#c7d63f97]
上手く動かない時は直接デーモンを起動させる
「/opt/slurm/sbin/slurmctld -D」
これでインターラクティヴで動作が見えます



***Configless [#d2a5c73c]
管理ノードで修正したslurm.confやcgroup.confを自動で計算ノードに配布してくれる機能
[[https://slurm.schedmd.com/configless_slurm.html>+https://slurm.schedmd.com/configless_slurm.html]]

DNSのSRVを使えば計算ノードもジョブ発行ノードもほぼほぼ手を付けずに設定ファイルがいきわたる様子.
素晴らしい.
設定方法は
管理ノードのslurm.confに
#code(nonumber){{
SlurmctldParameters=enable_configless
}}
を加えてslurmctldを再起動させる

あと計算ノード、ジョブ発行ノードを調整しますが、簡単にはDNSのSRVを調整します. ここでは[[dnsmasq]]を使っていて
その設定ファイル「/etc/dnsmasq.conf」に下記を追加します
#code(nonumber){{
# for slurmd
srv-host=_slurmctld._tcp.sybyl.local,slurm.sybyl.local,6817
}}
&color(red){*};&size(10){BINDならゾーンファイルに「_slurmctld._tcp 3600 IN SRV 10 0 6817 slurm」を追記します};
「sybyl.local」はここのドメイン名です.
これでdnsmasqを再起動すれば、slurmdを起動したときにdnsmasqに問い合わせ参照先を得て、slurmの設定ファイルを取得します
nslookup で確認してみます
#code(nonumber){{
[root@slurm ~]# nslookup -type=SRV _slurmctld._tcp.sybyl.local
Server:         192.168.0.3
Address:        192.168.0.3#53

_slurmctld._tcp.sybyl.local     service = 0 0 6817 slurm.sybyl.local.

[root@slurm ~]#
}}

伝播されたファイルは「/var/spool/slurm/d」に置かれます
#code(nonumber){{
root@n1:~# ls -l /var/spool/slurm/d
total 16
drwxr-xr-x 2 root root 4096 12月 27 06:24 conf-cache
-rw------- 1 root root    8 12月 27 06:24 cred_state
-rw------- 1 root root    8 12月 27 06:17 cred_state.old
-rw-r--r-- 1 root root 3230 12月 27 06:24 hwloc_topo_whole.xml

root@n1:~# 
root@n1:~# ls -l /var/spool/slurm/d/conf-cache/
total 12
-rw-r--r-- 1 root root  227 12月 27 06:24 cgroup.conf
-rw-r--r-- 1 root root  140 12月 27 06:24 gres.conf
-rw-r--r-- 1 root root 1664 12月 27 06:24 slurm.conf
root@n1:~#
}}
となる.


管理ノードでこれら設定ファイル「cgroup, gres, slurm」を修正して「scontrol reconfig」を実行すると
計算ノードのこれらのファイルが更新されます


***Configless のためにmanagerにdnsmasqを立ててみる [#i20b6e9d]
ネットワーク管理者に「すみません。このSRVコードを仕込んでくれませんか?」っていうのは容易いが実現できるかは微妙..
っで自分でdnsサーバを立ち上げてしまうのもありかなと.

っでDNSの問い合わせをnmtuiで自分自身にさせて、dnsmasqを入れて /etc/dnsmasq.conf で定義. より上位の問い合わせは同じネットワーク内になるのでdomain-neededを無効にして
上位の参照先を「/etc/dnsmasq_resolv.conf」に記載しておく.

#code(nonumber){{
[root@slurm ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.69  slurm
192.168.0.14  n1
192.168.0.15  n2
192.168.0.16  n3
192.168.0.7   s
192.168.0.20  slurm-client
192.168.0.166 slurmdbd

[root@slurm ~]# dnf install dnsmasq dnsutils -y

[root@slurm ~]# cat /etc/resolv.conf       <-- nmtuiでの変更を確認
# Generated by NetworkManager
nameserver 127.0.0.1

[root@slurm ~]# vi /etc/dnsmasq.conf
port=53
#domain-needed
bogus-priv
interface=eth1                         <-- サービス対象のネットワークに接続しているnicを指定
resolv-file=/etc/dnsmasq_resolv.conf
srv-host=_slurmctld._tcp,slurm,6817

[root@slurm ~]# vi /etc/dnsmasq_resolv.conf
nameserver 192.168.0.3

[root@slurm ~]# systemctl enable dnsmasq.service --now

(確認)
[root@slurm ~]# nslookup -type=SRV _slurmctld._tcp
Server:         127.0.0.1
Address:        127.0.0.1#53

_slurmctld._tcp service = 0 0 6817 slurm.

[root@slurm ~]#
[root@slurm ~]# nslookup slurm
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   slurm
Address: 192.168.0.69
[root@slurm ~]#
}}

***slurmctld.service [#y5dce6d4]

ここではmungeは使わないのだが、ソースコードはmungeを使うように「slurmctld.service」が用意されている。
また、この管理ノードで configless のための dnsmasq を動かしている。その事を考慮して「slurmctld.service」を修正する
#code(nonumber){{
[root@slurm ~]# vi /usr/lib/systemd/system/slurmctld.service

After=network-online.target remote-fs.target munge.service sssd.service
 ↓
After=network-online.target remote-fs.target               sssd.service dnsmasq.service

[root@slurm ~]# 
[root@slurm ~]# systemctl daemon-reload
}}

***めも [#u5266284]
domain(sybyl.localら)を持つ場合、search domainにもそのdomainを入れること. DNSへのSRVレコードはFQDNで行う事
samba adでの登録なら
#code(nonumber){{
samba-tool dns add ad sybyl.local _slurmctld._tcp.sybyl.local SRV "slurm.sybyl.local 6817 0 0"
}}

freeipaでの登録なら
#code(nonumber){{
ipa dnsrecord-add sybyl.local  _slurmctld._tcp --srv-rec="0 0 6817 slurm.sybyl.local."
}}
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS