#author("2026-05-20T05:23:09+00:00;2026-02-02T13:49:55+00:00","default:sysosa","sysosa") #author("2026-06-21T14:16:28+00:00","default:sysosa","sysosa") 大事な事っぽい事 -管理ノードと計算ノードのslurmのバージョンはほぼ同じで &size(10){確かめてないけどメジャーバージョンが合っていればいいはず}; -計算ノーへの通信があるようで firewall が有効ならportを開けておく -GPUノードの場合は /dev/nvidiaX を使うので「persistence mode」を有効にしておく -計算ノードの/etc/hostsに自ノードと管理ノードは入れて置いた方がいいかも っで各計算ノード毎(OS毎)の構築 [[slurm/node/ubuntu]] ***RockyLinux9 [#l92b3c2a] [[slurm/rpm]]で作成したパッケージを適用します #code(nonumber){{ [root@n2 ~]# dnf install epel-release -y [root@n2 ~]# dnf install libjwt pmix-pmi [root@n2 ~]# groupadd -g 5000 slurm; useradd -M -d /var/lib/slurm -s /sbin/nologin -u 5000 -g 5000 slurm [root@n2 ~]# dnf localinstall ./slurm-25.11.2-1.el9.x86_64.rpm ./slurm-slurmd-25.11.2-1.el9.x86_64.rpm [root@n2 ~]# echo "D /run/slurm 0755 root root -" > /usr/lib/tmpfiles.d/slurm.conf <-- slurmduserに合わせる [root@n2 ~]# /usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/slurm.conf [root@n2 ~]# mkdir -p /var/spool/slurm/d /var/log/slurm /opt/slurm/etc [root@n2 ~]# chown slurm. /var/spool/slurm/d /var/log/slurm [root@n2 ~]# echo -e "export PATH=\${PATH}:/opt/slurm/bin\nexport LD_LIBRARY_PATH=\${LD_LIBRARY_PATH}:/opt/slurm/lib64" > /etc/profile.d/slurm.sh [root@n2 ~]# echo -e "setenv PATH \${PATH}:/opt/slurm/bin\nsetenv LD_LIBRARY_PATH \${LD_LIBRARY_PATH}:/opt/slurm/lib64" > /etc/profile.d/slurm.csh [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 ~]# }} 設定ファイルは管理ノードから頂きます #code(nonumber){{ (管理ノードから「slurm.key」を受領する) [root@slurm ~]# scp /opt/slurm/etc/slurm.key n2:/opt/slurm/etc/slurm.key [root@slurm ~]# ssh n2 chown slurm. /opt/slurm/etc/slurm.key }} もし管理ノードで「Configless 」が未定義なら[[slurm/manager#d2a5c73c]] 「/opt/slurm/etc」のslurm.conf、gres.conf、cgroup.conf らのファイル転送をコピーする firewall. slurm.confの「SlurmdPort」を開けておく. あと srun 向けのポートも. #code(nonumber){{ [root@n2 ~]# firewall-cmd --add-port=6818/tcp --add-port=60001-63000/tcp --zone=public --permanent [root@n2 ~]# firewall-cmd --reload }} 最後にデーモンを起動させます #code(nonumber){{ [root@n2 ~]# systemctl enable slurmd --now }} &color(red){*};&size(10){nvidia関係は「persistence mode」を有効にした方がいいかも [[NVIDIA#o13e41e5]] }; ***メモ [#z48b9e27] rshは不要. しかも 計算ノードの ssh ログインをroot以外拒否でも構わない。 #code(nonumber){{ [root@n2 ~]# vi /etc/ssh/sshd_config : : AllowUsers root [root@n2 ~]# [root@n2 ~]# systemctl restart sshd }} これはジョブの実行云々に関わらず常にずっとrootしか入れない。それをリソース確保した計算ノードのみsshで入れる仕組みが「slurm-pam_slurm」パッケージ #code(nonumber){{ [root@n2 ~]# dnf localinstall slurm-pam_slurm-24.05.1-1.el9.x86_64.rpm [root@n2 ~]# ls -l /lib64/security/pam_slurm* -rwxr-xr-x 1 root root 305664 Jul 24 22:50 /lib64/security/pam_slurm_adopt.so -rwxr-xr-x 1 root root 201016 Jul 24 22:50 /lib64/security/pam_slurm.so [root@n2 ~]# echo "/opt/slurm/lib64" > /etc/ld.so.conf.d/slurm.conf [root@n2 ~]# ldconfig }} 設定してみる #code(nonumber){{ (管理ノードでPrologFlagsを付ける) [root@slurm ~]# vi /opt/slurm/etc/slurm.conf : PrologFlags=contain [root@slurm ~]# scontrol reconfig (計算ノードでpamの調整) [root@n2 ~]# vi /etc/pam.d/sshd : account required pam_slurm_adopt.so # 末尾に追記 [root@n2 ~]# [root@n2 ~]# vi /etc/pam.d/password-auth : #-session optional pam_systemd.so # pam_systemd.so を無効化 : [root@n2 ~]# }} っでテスト 何もそのノードで自分のジョブが動いていないと #code(nonumber){{ [illya@slurm ~]$ ssh n2 illya@n2's password: Access denied by pam_slurm_adopt: you have no active jobs on this node Connection closed by 192.168.0.15 port 22 [illya@slurm ~]$ }} と弾かれる。 っで、ジョブを掴んで #code(nonumber){{ [illya@slurm ~]$ srun --gres=gpu:1 -w n2 --pty bash [illya@n2 ~]$ nvidia-smi -L GPU 0: NVIDIA T600 (UUID: GPU-01226552-df75-5989-c2f3-3550cdc3427d) [illya@n2 ~]$ }} そのまま別のターミナルからsshを試みると #code(nonumber){{ [illya@slurm ~]$ ssh n2 illya@n2's password: Last login: Thu Jul 25 03:50:40 2024 from 192.168.0.69 [illya@n2 ~]$ nvidia-smi -L GPU 0: NVIDIA T600 (UUID: GPU-01226552-df75-5989-c2f3-3550cdc3427d) [illya@n2 ~]$ }} GPUデバイスも使えるみたい. 複数のGPUを載せている場合は? ***メモ [#h570f639] -下記のようなメッセージがでるのは単に「cgroup.conf」を用意していないから #code(nonumber){{ 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 }} -下記文言が表示される #code(nonumber){{ slurmd[73076]: fatal: Unable to determine this slurmd's NodeName }} 「slurm.conf」のクラスター構成メンツに「NodeName=<ホスト名>」が載ってないだけ -下記文言が表示される #code(nonumber){{ Unable to register: Zero Bytes were transmitted or received }} 管理ノードと計算ノードのmungeのUID/GIDが異なる. mungeを止めて、munge.keyを再度コピーし直す. -計算ノードで下記エラーが出たなら #code(nonumber){{ 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)を入れていないため. 入れてre-buildしましょう. -下記文言が表示される #code(nonumber){{ 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とか) &size(10){でも、、やっぱり/etc/hostsに自ホストとslurm管理ノードは入れて置くべきかな}; -GPUノードは「persistence mode」を有効にした方がいいかも 理由は起動とともに「/dev/nvidia0」を有効にさせるために. 「persistence mode」の設定は [[NVIDIA#o13e41e5]] あと、「/usr/lib/systemd/system/slurmd.service」の「After=」に「nvidia-persistenced.service」を入れる -mungeをnisでアカウント管理していると「/run/munge」の作成に支障が生じる. なので計算ノードの/etc/group,/etc/passwdにmungeのアカウントは必要みたい. 「systemd-tmpfiles-setup.service」を弄って「After=」にypbind.serviceを入れたけど上手く行かなかった. ***メモ [#zdb4eecf] gresが上手く動かないなら直接そのノードとGPUを記載する #code(nonumber){{ #AutoDetect=nvml # #[/opt/slurm/sbin/slurmd -C] # NodeName=gpu1 CPUs=32 Boards=1 SocketsPerBoard=1 CoresPerSocket=32 ThreadsPerCore=1 RealMemory=256777 Gres=gpu:nvidia_rtx_pro_4000_blackwell:4 #@slurm.confにて # NodeName=gpu1 CPUs=32 Boards=1 SocketsPerBoard=1 CoresPerSocket=32 ThreadsPerCore=1 RealMemory=256777 Gres=gpu:pro4000:4 # # NodeName=gpu1 Name=gpu Type=pro4000 File=/dev/nvidia0 NodeName=gpu1 Name=gpu Type=pro4000 File=/dev/nvidia1 NodeName=gpu1 Name=gpu Type=pro4000 File=/dev/nvidia2 NodeName=gpu1 Name=gpu Type=pro4000 File=/dev/nvidia3 }} [/opt/slurm/sbin/slurmd -C]の値でGresが「Gres=gpu:nvidia_rtx_pro_4000_blackwell:4」とでますが、「nvidia_rtx_pro_4000_blackwell」は長いので「Type」は「pro4000」と変更してます