OS提供のパッケージをインストールしてもいいのだが、ソースコードからrpmbuildで作成したパッケージを採用してます

slurm/rpmbuildで作ったパッケージをインストールします

[root@slurm ~]# cat /etc/redhat-release
Rocky Linux release 8.6 (Green Obsidian)
 
[root@slurm ~]# dnf localinstall rpmbuild/RPMS/x86_64/slurm-22.05.7-1.el8.x86_64.rpm \
                                 rpmbuild/RPMS/x86_64/slurm-slurmctld-22.05.7-1.el8.x86_64.rpm
[root@slurm ~]#

*パッケージ版だとあるのにソースコードからrpmbuildで作ると含まれていないファイルがあるのでそれらの対処を行う
ディストリビューターがシステム全体の観点から用意頂いたものかな

[root@slurm ~]# cat /usr/lib/tmpfiles.d/slurm.conf
D /run/slurm 0755 root root -
 
[root@slurm ~]# /usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/slurm.conf
[root@slurm ~]# cat /etc/logrotate.d/slurm
/var/log/slurm/*.log {
    missingok
    notifempty
    copytruncate
    rotate 5
}
[root@slurm ~]# mkdir /var/run/slurm  /var/spool/slurm
[root@slurm ~]# chown slurm. /var/run/slurm /var/spool/slurm/
 
(slurmのpath設定)
[root@slurm slurm]# vi /etc/profile.d/slurm.sh
if [ -d /opt/slurm/bin ]; then
  export PATH=${PATH}:/opt/slurm/bin
fi
[root@slurm slurm]#

*基本logはsyslogに回るようでファイルに落とす必要がないなら logrotate は不要かな.

設定ファイル

設定ファイルは「/opt/slurm/etc」に置きます.
ファイル名は「/opt/slurm/etc/slurm.conf」として. SRPMにある設定ファイルを転用して下記にようにしました

[root@slurm ~]# mkdir -p /opt/slurm/etc
[root@slurm ~]# vi /opt/slurm/etc/slurm.conf
ClusterName=cluster
SlurmctldHost=slurm
AuthType=auth/munge
 
MpiDefault=none
GresTypes=gpu
ProctrackType=proctrack/cgroup
 
ReturnToService=1
SlurmctldPidFile=/var/run/slurm/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurm/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurm/d
SlurmUser=slurm
SlurmdUser=root
 
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
 
# 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/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
 
# COMPUTE NODES
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        
 
PartitionName=workq Nodes=ALL Default=YES MaxTime=INFINITE State=UP
[root@slurm ~]#

調整の例:slurm/slurm.conf
留意 このslurm.confファイルで計算ノードとqueueの定義を行います.

あとcgroup.confとgres.confを用意します

[root@slurm ~]# vi /opt/slurm/etc/cgroup.conf
CgroupAutomount=yes
CgroupMountpoint="/sys/fs/cgroup"
ConstrainCores=yes
ConstrainDevices=yes
ConstrainRAMSpace=yes
 
[root@slurm ~]# vi /opt/slurm/etc/gres.conf
AutoDetect=nvml
 
[root@slurm ~]#

firewalld

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

恐らく設定ファイルで変更できるから初めから入れていないのかも
ここでは 6817-6818/TCP を開けておく

[root@slurm ~]# firewall-cmd --add-port=6817-6818/tcp --zone=public --permanent
[root@slurm ~]# firewall-cmd --reload

*管理ノードで「srun」を発行するならfirewalldに追加で「SrunPortRange」で定義したtcpを開ける

デーモン起動

[root@slurm ~]# systemctl enable munge slurmctld --now

ここでは「slurm.conf」の「SlurmUser」が示すようにユーザ「slurm」が slurmctld を動かしてます.
StateSaveLocationの場所(「/var/spool/slurm/ctld」)に各種のstateファイルが置かれます。

この段階で、sinfoとかで確認が出来る 各ノードの調整がまだなので「slurm.conf」の値だけで掲示してます

[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 ~]$

めも

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

Configless

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

DNSのSRVを使えば計算ノードもジョブ発行ノードもほぼほぼ手を付けずに設定ファイルがいきわたる様子.
素晴らしい.
設定方法は
管理ノードのslurm.confに

SlurmctldParameters=enable_configless

を加えてslurmctldを再起動させる

あと計算ノード、ジョブ発行ノードを調整しますが、簡単にはDNSのSRVを調整します. ここではdnsmasqを使っていて
その設定ファイル「/etc/dnsmasq.conf」に下記を追加します

# for slurmd
srv-host=_slurmctld._tcp.sybyl.local,slurm.sybyl.local,6817

*BINDならゾーンファイルに「_slurmctld._tcp 3600 IN SRV 10 0 6817 slurm」を追記します
「sybyl.local」はここのドメイン名です.
これでdnsmasqを再起動すれば、slurmdを起動したときにdnsmasqに問い合わせ参照先を得て、slurmの設定ファイルを取得します
取得先は「/var/spool/slurm/d」で

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:~#

となる.

一応、dnsでこの値を引けるかのテストですが、

$ nslookup
> set querytype=SRV
> _slurmctld._tcp.sybyl.local

これで引ける.

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


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2023-01-08 (日) 00:47:21 (74d)