大事な事っぽい事

  • 管理ノードと計算ノードのslurmのバージョンはほぼ同じで 確かめてないけどメジャーバージョンが合っていればいいはず
  • 計算ノーへの通信があるようで firewall が有効ならportを開けておく
  • GPUノードの場合は /dev/nvidiaX を使うので「persistence mode」を有効にしておく
  • mungeアカウントは各計算ノードで作る nis/ldap/adらの外部由来だとboot時に/run/mungeが消されてエラーになるっぽい
  • 計算ノードの/etc/hostsに自ノードと管理ノードは入れて置いた方がいいかも

っで各計算ノード毎(OS毎)の構築

n1: ubuntu 20.04

ubuntu20.04はOS提供のパッケージがある. がだこのパッケージのversionは 19.05.5 でもし管理ノード(22.05.7)に繋ぐとエラーになる
slurmctld側(管理ノード)では「error: unpack_header: protocol_version 8704 not supported」と表記され
slurmd側(計算ノード)では「Unable to register: Zero Bytes were transmitted or received」と表記される

なのでソースから作る.
まずはGPUの制御のために「cuda-nvml-dev」を入れます. nvidiaドライバは登録済みですNVIDIA参照

root@n1:~# cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
 :
root@n1:~# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  525.60.11  Wed Nov 23 23:04:03 UTC 2022
GCC version:  gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
 
root@n1:~# nvidia-smi -L
GPU 0: NVIDIA RTX A2000 (UUID: GPU-23cc3ee7-31d3-a068-2f61-5aa00052d084)
 
root@n1:~# bash ./cuda_12.0.0_525.60.13_linux.run     (「cuda-nvml-dev」のみインストール)

その後 munge アカウントを作成してmungeをインストールします. slurm アカウントはnis/ldap/ad 由来でも可

root@n1:~# groupadd -g 5001 munge && useradd -d /var/lib/munge -s /bin/bash -u 5001 -g munge munge
root@n1:~# apt install munge

あとはslurmをソースから作ります

root@n1:~# apt install build-essential libmunge-dev libpam-dev libcgroup-dev libpam-cgroup \
                       libhwloc-dev libpmix-dev libdbus-1-dev
root@n1:~# tar xf slurm-22.05.7.tar.bz2
root@n1:~# cd slurm-22.05.7/ 
root@n1:~/slurm-22.05.7# ./configure --prefix=/opt/slurm --sysconfdir=/opt/slurm/etc --disable-x11 --disable-selinux \
                         --enable-pam --with-hdf5=no --without-ucx --without-ofed --with-nvml=/usr/local/cuda-12.0
 
root@n1:~/slurm-22.05.7# make -j 20; make install
 
(インストール後の微調整)
mkdir /opt/slurm/etc
mkdir -p /var/spool/slurm/d
echo "D /run/slurm 0755 root root -" > /usr/lib/tmpfiles.d/slurm.conf
/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/slurm.conf
echo "export PATH=${PATH}:/opt/slurm/bin" > /etc/profile.d/slurm.sh
cp ./slurm-22.05.7/etc/slurmd.service /usr/lib/systemd/system/
systemctl daemon-reload
 
root@n1:~# /opt/slurm/sbin/slurmd -C
NodeName=n1 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=16001   -> この内容を管理ノードのslurm.confに加える
UpTime=0-00:13:55
 
root@n1:~#
 
(管理ノードから)
[root@slurm ~]# scp /opt/slurm/etc/*.conf  n1:/opt/slurm/etc/
[root@slurm ~]# scp /etc/munge/munge.key   n1:/etc/munge/
 
(デーモン起動)
root@n1:~# chown -R munge. /etc/munge/
root@n1:~# systemctl enable slurmd munge --now

管理ノードで「Configless 」が有効ならslurm/manager#d2a5c73c slurm.conf らのファイル転送は不要

ubuntuには既定でfirewallが設置されていないのでこれで完了

n2: RockyLinux9

RockyLinuxはリポジトリにて slurm-22.05.6 を提供している.
GPUカードを載せているのでまずはnvidiaドライバを組み込んでおきます. 参照NVIDIA

その後 munge アカウントを作成してmungeをインストールします. slurm アカウントはnis/ldap/ad 由来でも可

[root@n2 ~]# groupadd -g 5000 slurm && useradd -d /var/lib/slurm -s /sbin/nologin -u 5000 -g slurm slurm
[root@n2 ~]# groupadd -g 5001 munge && useradd -d /var/lib/munge -s /bin/bash -u 5001 -g munge munge
[root@n2 ~]# cat /etc/redhat-release
Rocky Linux release 9.1 (Blue Onyx)
 
[root@n2 ~]# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  525.60.11  Wed Nov 23 23:04:03 UTC 2022
GCC version:  gcc version 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC)
 
[root@n2 ~]# bash ./cuda_12.0.0_525.60.13_linux.run     (「cuda-nvml-dev」のみインストール)
[root@n2 ~]# dnf list --enablerepo=devel,epel slurm-slurmd
Last metadata expiration check: 0:01:32 ago on Wed 21 Dec 2022 03:58:50 AM JST.
Available Packages
slurm-slurmd.x86_64                         22.05.6-1.el9                          epel
 
[root@n2 ~]#

しかし、これをインストールしようとするとmailxパッケージが必要と言われエラーになる. mailxパッケージはRockyLinux9には存在しないのに..
また起点が/usrで管理ノードと同じく/opt/slurmにしたかったのでslurm/rpmbuildを参照してパッケージを作り直してみた

(管理ノードにて)
[root@slurm ~]# scp slurm-22.05.7.tar.bz2 n2:
 
[root@n2 ~]# dnf --enablerepo=devel install munge-devel readline-devel pam-devel perl-ExtUtils-MakeMaker hwloc-devel mariadb-devel pmix-devel freeipmi-devel dbus-devel
[root@n2 ~]# rpmbuild --version
RPM version 4.16.1.3
[root@n2 ~]# vi slurm.rpmmacros
%_prefix /opt/slurm
%_slurm_sysconfdir %{_prefix}/etc
%_with_hwloc 1
%_with_pam 1
%_without_x11 1
%_with_pmix --with-pmix=/usr
%_with_nvml --with-nvml=/usr/local/cuda
%_with_freeipmi --with-freeipmi=/usr
[root@n2 ~]# rpmbuild -ta --load slurm.rpmmacros slurm-22.05.7.tar.bz2
 
(作ったパッケージをインストール)
[root@n2 ~]# dnf localinstall rpmbuild/RPMS/x86_64/slurm-slurmd-22.05.7-1.el9.x86_64.rpm \
                              rpmbuild/RPMS/x86_64/slurm-22.05.7-1.el9.x86_64.rpm                -> 同時にmungeもインストールされます
 
(インストール後の微調整)
mkdir /opt/slurm/etc ; mkdir -p /var/spool/slurm/d ; mkdir /run/slurm
echo "export PATH=${PATH}:/opt/slurm/bin" > /etc/profile.d/slurm.sh
 
[root@n2 ~]# /opt/slurm/sbin/slurmd -C
NodeName=n2 CPUs=2 Boards=1 SocketsPerBoard=2 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=15732    -> この内容を管理ノードのslurm.confに加える
UpTime=0-00:13:31
[root@n2 ~]#

設定ファイルは管理ノードから頂きます

(管理ノードから)
[root@slurm ~]# scp /etc/munge/munge.key   n2:/etc/munge/
[root@slurm ~]# scp /opt/slurm/etc/*.conf  n2:/opt/slurm/etc/

もし管理ノードで「Configless 」が有効ならslurm/manager#d2a5c73c slurm.conf らのファイル転送は不要

firewall. slurm.confの「SlurmdPort」を開けておく

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

最後にデーモンを起動させます

[root@n2 ~]# chown -R munge. /etc/munge/ ; mkdir /run/munge/ ; chown -R munge. /run/munge/
[root@n2 ~]# /usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/munge.conf
[root@n2 ~]# systemctl enable munge slurmd --now

*nvidia関係は「persistence mode」を有効にした方がいいかも NVIDIA#o13e41e5

n3: ubuntu 22.04

ディストリビューター提供のパッケージは 21.08.5 で管理ノードが 22.05.7 なのでこれもソースから作っていく

root@n3:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
 :
root@n3:~# apt search slurmd
 :
slurmd/jammy 21.08.5-2ubuntu1 amd64
  SLURM compute node daemon
 :
root@n3:~#

構築方法は n1 と同じ

あと末端の微調整

apt install munge
mkdir /opt/slurm/etc ; mkdir -p /var/spool/slurm/d ; mkdir /run/slurm
echo "export PATH=${PATH}:/opt/slurm/bin" > /etc/profile.d/slurm.sh
 
cp slurm-22.05.7/etc/slurmd.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable slurmd munge
 
 
root@n3:~# /opt/slurm/sbin/slurmd -C
NodeName=n3 CPUs=4 Boards=1 SocketsPerBoard=4 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=16000    -> この内容を管理ノードのslurm.confに加える
UpTime=0-00:05:15
 
 
(管理ノードから)
[root@slurm ~]# scp /etc/munge/munge.key   n3:/etc/munge/
[root@slurm ~]# scp /opt/slurm/etc/*.conf  n3:/opt/slurm/etc/

最後にデーモンを起動させます

[root@n3 ~]# chown -R munge. /etc/munge/ ; mkdir /run/munge/ ; chown -R munge. /run/munge/
[root@n3 ~]# echo "d /run/munge 0755 munge munge" > /usr/lib/tmpfiles.d/munge.conf
[root@n3 ~]# /usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/munge.conf
[root@n3 ~]# systemctl enable munge slurmd --now

メモ

考えるに、、、slurm.confの共通が求められるって計算ノードはdisklessClusterを念頭にしているような..

rshは不要.
しかも ssh ログインもroot以外要で構わない.

[root@n1 ~]# vi /etc/ssh/sshd_config
 :
 :
AllowUsers root
 
[root@n1 ~]#
[root@n1 ~]# systemctl restart sshd

メモ

  • 下記のようなメッセージがでるのは単に「cgroup.conf」を用意していないから
    slurmd: CPU frequency setting not configured for this node
    slurmd: error: cgroup namespace 'freezer' not mounted. aborting
    slurmd: error: unable to create freezer cgroup namespace
    slurmd: error: Couldn't load specified plugin name for proctrack/cgroup: Plugin init() callback failed
    slurmd: error: cannot create proctrack context for proctrack/cgroup
    slurmd: error: slurmd initialization failed
  • 下記文言が表示される
    slurmd[73076]: fatal: Unable to determine this slurmd's NodeName
    「slurm.conf」のクラスター構成メンツに「NodeName=<ホスト名>」が載ってないだけ
  • 下記文言が表示される
    Unable to register: Zero Bytes were transmitted or received
    管理ノードと計算ノードのmungeのUID/GIDが異なる. mungeを止めて、munge.keyを再度コピーし直す.
  • 計算ノードで下記エラーが出たなら
    slurmd: error: Couldn't find the specified plugin name for cgroup/v2 looking at all files
    slurmd: error: cannot find cgroup plugin for cgroup/v2
    slurmd: error: cannot create cgroup context for cgroup/v2
    slurmd: error: Unable to initialize cgroup plugin
    これは製作中にdbus-glib-devel(RHEL系)、libdbus-1-dev(Ubuntu)を入れていないため
  • 下記文言が表示される
    slurmd: error: resolve_ctls_from_dns_srv: res_nsearch error: Unknown host
    slurmd: error: fetch_config: DNS SRV lookup failed
    slurmd: error: _establish_configuration: failed to load configs
    slurmd: error: slurmd initialization failed
    slurmd.confがないっぽい
  • sinfoで「down*」となる
    計算ノードの/etc/hostsとか管理ノード、計算ノードの名前解決を試す
    あるいは「/usr/lib/systemd/system/slurmd.service」の「After=」に名前解決のサービスを入れる(ypbind.serviceとか) でも、、やっぱり/etc/hostsに自ホストとslurm管理ノードは入れて置くべきかな
  • GPUノードは「persistence mode」を有効にした方がいいかも
    理由は起動とともに「/dev/nvidia0」を有効にさせるために. 「persistence mode」の設定は NVIDIA#o13e41e5
    あと、「/usr/lib/systemd/system/slurmd.service」の「After=」に「nvidia-persistenced.service」を入れる

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