KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

RockLinux8にて、SLURM並列計算環境の構築のおさらいまとめ(一から構成しよう)その3:mungeとslurmのインストールおよび設定、テスト計算

登録日 :2024/03/14 04:07
カテゴリ :SLURM

SLURMのヘッドノード、クライアントのインストールを行う。

1. mungeのインストールおよび設定

プリインストールしたRockyLinux8にmungeをインストールするには、追加のライブラリは不要である。

mungeファイルをrpmコマンドにてインストールする。

[root@headnode munge]# rpm -ivh munge-* 2>&1 | tee munge_install.log
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:munge-debugsource-0.5.15-1.el8   ################################# [ 17%]
   2:munge-debuginfo-0.5.15-1.el8     ################################# [ 33%]
   3:munge-libs-0.5.15-1.el8          ################################# [ 50%]
   4:munge-0.5.15-1.el8               ################################# [ 67%]
Run /usr/sbin/mungekey as the munge user to create a key.
For example: "sudo -u munge /usr/sbin/mungekey -v".
Refer to the mungekey(8) manpage for more information.
   5:munge-devel-0.5.15-1.el8         ################################# [ 83%]
   6:munge-libs-debuginfo-0.5.15-1.el8################################# [100%]
[root@headnode munge]#
これから、mungeの設定を行う。
1 ヘッドノードの場合

ヘッドノードはmungeキーの作成から行う。
1-1. mungeキーを作成する

sudo -u munge /usr/sbin/mungekey -v

実行すると以下のように /etc/mungeにキーが作成される。

[root@headnode x86_64]# sudo -u munge /usr/sbin/mungekey -v
mungekey: Info: Created "/etc/munge/munge.key" with 1024-bit key
[root@headnode x86_64]# ls -l /etc/munge
合計 4
-rw-------. 1 munge munge 128  3月 11 01:47 munge.key

1-2. 作成したmungeキーパーミッションを設定する

chown munge:munge /etc/munge/munge.key
chmod 400 /etc/munge/munge.key

実行するとパーミッションが以下のようになる。

[root@headnode x86_64]# chown munge:munge /etc/munge/munge.key
[root@headnode x86_64]# chmod 400 /etc/munge/munge.key
[root@headnode x86_64]# ls -l /etc/munge
合計 4
-r--------. 1 munge munge 128  3 11 01:47 munge.key
[root@headnode x86_64]#

このmungeキーは、クライアント(コンピュートノード)に配布するキーとなる。

1-3. mungeを起動する

systemctl enable munge
systemctl start munge
systemctl status munge
2 クライアント(コンピュートノード)

2-1 mungeキーのコピー
クライアントノードは、mungeのインストールが完了したら、ヘッドノードで作成されたmungeキーをコピーする。

scp -p /etc/munge/munge.key node1:/etc/munge/

2-2 mungeの起動
コピーしたらmungeを起動する

systemctl enable munge
systemctl start munge
systemctl status munge

2-3 ヘッドノードからの疎通確認
ヘッドノードからクライアント(コンピュートノード)のmungeによる暗号化通信ができることを確認する。

munge -n | ssh hostname unmunge | grep STATUS |awk '{print $2}'

※hostnameはアクセス先に合わせて変更する。

[root@headnode munge]# munge -n | ssh headnode unmunge | grep STATUS |awk '{print $2}'
root@headnode's password:
Success
[root@headnode munge]#

2 管理ノードでのslurmのインストール

slurm管理サーバでslurmctld, slurmd, slurmdbdのインストール

管理ノード(ヘッドノード)では、slurmctld, slurmdbd, およびslurmdが動作する。
また、slurmdbdを動作する前提としてmariadbをインストールおよび起動しておく。

1 管理ノードでのmariadbのインストールと設定

ここだけインターネット経由(dnf)でインストールする

dnf install mariadb-server --nobest

mariadbの起動

sudo systemctl enable mariadb
sudo systemctl start mariadb
sudo systemctl status mariadb | grep Active| awk '{print $2 $3}'

mariadbのセットアップ
初回設定はパスワードがないため、Enterで進める。
任意のパスワードを設定したら、そのほかは全て「Y」でOK

/usr/bin/mysql_secure_installation
[root@headnode ~]# /usr/bin/mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): [Enter]
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: [your new password]
Re-enter new password: [your new password]
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
[root@headnode ~]#
2 管理ノードでのslurmのインストール

プリインストールしたRockyLinux8にslurmをインストールするためには、以下の2つのmariadbに関するライブラリをインストールしておく必要がある。

mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm
mariadb-connector-c-config-3.1.11-2.el8_3.noarch.rpm
[root@headnode lib]# rpm -ivh mariadb-connector-c-*
警告: mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature ID 8483c65d: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:mariadb-connector-c-config-3.1.11################################# [ 50%]
   2:mariadb-connector-c-3.1.11-2.el8_################################# [100%]
[root@headnode lib]#

ここから、slurm本体のインストールを行う。
コンパイルしたslurmを保管したフォルダに移動する。

-rw-r--r--. 1 root root 17241472  7月  9  2023 slurm-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root    21172  7月  9  2023 slurm-contribs-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root    83776  7月  9  2023 slurm-devel-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root    12764  7月  9  2023 slurm-example-configs-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root   163444  7月  9  2023 slurm-libpmi-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root    12904  7月  9  2023 slurm-openlava-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root   173748  7月  9  2023 slurm-pam_slurm-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root   838200  7月  9  2023 slurm-perlapi-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root  1523776  7月  9  2023 slurm-slurmctld-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root   763012  7月  9  2023 slurm-slurmd-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root   840412  7月  9  2023 slurm-slurmdbd-21.08.8-2.el8.x86_64.rpm
-rw-r--r--. 1 root root   140276  7月  9  2023 slurm-torque-21.08.8-2.el8.x86_64.rpm
pm -ivh slurm-* 2>&1 | tee install_slurm.log
[root@headnode slurm]# rpm -ivh slurm-* 2>&1 | tee install_slurm.log
Verifying...                          ########################################
準備しています...              ########################################
更新中 / インストール中...
slurm-21.08.8-2.el8                   ########################################
slurm-perlapi-21.08.8-2.el8           ########################################
slurm-openlava-21.08.8-2.el8          ########################################
slurm-torque-21.08.8-2.el8            ########################################
slurm-contribs-21.08.8-2.el8          ########################################
slurm-devel-21.08.8-2.el8             ########################################
slurm-libpmi-21.08.8-2.el8            ########################################
slurm-pam_slurm-21.08.8-2.el8         ########################################
slurm-slurmctld-21.08.8-2.el8         ########################################
slurm-slurmd-21.08.8-2.el8            ########################################
slurm-slurmdbd-21.08.8-2.el8          ########################################
slurm-example-configs-21.08.8-2.el8   ########################################
[root@headnode slurm]#
管理ノードでのslurmのセットアップ

先ずヘッドノード単独でのセッティングを行う。
設定ファイルは/etc/slurmに保存する。
デフォルトでインストールではexampleが保存されているので、必要なものだけピックアップしておく。基本的に必要なのは、slurmd.conf, slurmdbd.confである。

[root@headnode slurm]# ls
example  slurm.conf  slurmdbd.conf
2-1 slurmdbdの設定

slurmデータベースを使うため、/etc/slurm/slurmdbd.confを設定をする。以下に起動実績のあるコンフィグのサンプルを添付する。

[root@headnode slurm]# cat slurmdbd.conf
#
# Example slurmdbd.conf file.
#
# See the slurmdbd.conf man page for more information.
#
# Archive info
#ArchiveJobs=yes
#ArchiveDir="/tmp"
#ArchiveSteps=yes
#ArchiveScript=
#JobPurge=12
#StepPurge=1
#
# Authentication info
AuthType=auth/munge
#AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=localhost
DbdHost=localhost
#DbdPort=7031
#SlurmUser=slurm
#
SlurmUser=root
#
#MessageTimeout=300
DebugLevel=verbose
#DefaultQOS=normal,standby
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
#PluginDir=/usr/lib/slurm
#PrivateData=accounts,users,usage,jobs
#TrackWCKey=yes
#
# Database info
StorageType=accounting_storage/mysql
#StorageHost=localhost
#StoragePort=1234
#
StoragePass=password
#StorageUser=slurm
#
StorageUser=root
#
#StorageLoc=slurm_acct_db

[root@newhead slurm]#

slurmdbd.confのパーミッションを設定する。

[root@headnode slurm]# chmod 600 /etc/slurm/slurmdbd.conf
[root@headnode slurm]# ls -l
合計 8
drwxr-xr-x. 2 root root  170  3 16 11:33 example
-rw-r--r--. 1 root root 3517  3 16 12:02 slurm.conf
-rw-------. 1 root root  788  3月 16 11:37 slurmdbd.conf
2-2 slurmの設定

headnodeのマシンステータスを確認する。

[root@headnode slurm]# slurmd -C
NodeName=headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770
UpTime=0-02:12:18

この情報をslurm.confに登録する。
slurm.confのサンプル(管理ノード1台)を以下に添付する。

[user01@newhead slurm]$ cat slurm.conf
#
# Example slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#
#
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ClusterName=RockyLinux8
SlurmctldHost=headnode
#SlurmctldHost=
#
#DisableRootJobs=NO
#EnforcePartLimits=NO
#Epilog=
#EpilogSlurmctld=
#FirstJobId=1
#MaxJobId=67043328
#GresTypes=
#GroupUpdateForce=0
#GroupUpdateTime=600
#JobFileAppend=0
#JobRequeue=1
#JobSubmitPlugins=lua
#KillOnBadExit=0
#LaunchType=launch/slurm
#Licenses=foo*4,bar
#MailProg=/bin/mail
#MaxJobCount=10000
#MaxStepCount=40000
#MaxTasksPerNode=512
MpiDefault=none
#MpiParams=ports=#-#
#PluginDir=
#PlugStackConfig=
#PrivateData=jobs
#ProctrackType=proctrack/cgroup
#
ProctrackType=proctrack/pgid
#
#Prolog=
#PrologFlags=
#PrologSlurmctld=
#PropagatePrioProcess=0
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#RebootProgram=
#ReturnToService=1
#
ReturnToService=0
#
SlurmctldPidFile=/var/run/slurmctld.pid
#SlurmctldPort=6817
#
SlurmctldPort=7817
#
SlurmdPidFile=/var/run/slurmd.pid
#SlurmdPort=6818
#
SlurmdPort=7818
#
SlurmdSpoolDir=/var/spool/slurmd
#SlurmUser=slurm
#
SlurmdUser=root
#
#SrunEpilog=
#SrunProlog=
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
#TaskEpilog=
TaskPlugin=task/affinity
#TaskProlog=
#TopologyPlugin=topology/tree
#TmpFS=/tmp
#TrackWCKey=no
#TreeWidth=
#UnkillableStepProgram=
#UsePAM=0
#
#
# TIMERS
#BatchStartTimeout=10
#CompleteWait=0
#EpilogMsgTime=2000
#GetEnvTimeout=2
#HealthCheckInterval=0
#HealthCheckProgram=
InactiveLimit=0
KillWait=30
#MessageTimeout=10
#ResvOverRun=0
MinJobAge=300
#OverTimeLimit=0
SlurmctldTimeout=120
SlurmdTimeout=300
#UnkillableStepTimeout=60
#VSizeFactor=0
Waittime=0
#
#
# SCHEDULING
#DefMemPerCPU=0
#MaxMemPerCPU=0
#SchedulerTimeSlice=30
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
#
#
# JOB PRIORITY
#PriorityFlags=
#PriorityType=priority/basic
#PriorityDecayHalfLife=
#PriorityCalcPeriod=
#PriorityFavorSmall=
#PriorityMaxAge=
#PriorityUsageResetPeriod=
#PriorityWeightAge=
#PriorityWeightFairshare=
#PriorityWeightJobSize=
#PriorityWeightPartition=
#PriorityWeightQOS=
#
#
# LOGGING AND ACCOUNTING
#AccountingStorageEnforce=0
#AccountingStorageHost=
#AccountingStoragePass=
#AccountingStoragePort=
#AccountingStorageType=accounting_storage/none
#
#AccountingStorageUser=
#AccountingStoreFlags=
#
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageHost=headnode
AccountingStoragePass=/var/run/munge/munge.socket.2
#
#
#JobCompHost=
#JobCompLoc=
#JobCompPass=
#JobCompPort=
JobCompType=jobcomp/none
#JobCompUser=
#JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
#SlurmSchedLogFile=
#SlurmSchedLogLevel=
#DebugFlags=
#
#
# POWER SAVE SUPPORT FOR IDLE NODES (optional)
#SuspendProgram=
#ResumeProgram=
#SuspendTimeout=
#ResumeTimeout=
#ResumeRate=
#SuspendExcNodes=
#SuspendExcParts=
#SuspendRate=
#SuspendTime=
#
#
# COMPUTE NODES
#NodeName=linux[1-32] CPUs=1 State=UNKNOWN
NodeName=headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770 State=UNKNOWN
#
# PARTITION
#PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
PartitionName=debug Nodes=headnode Default=NO MaxTime=30:00 State=UP
[user01@newhead slurm]$
slurmdbd, slurmを起動する

slurmdbdの起動

sudo systemctl enable slurmdbd
sudo systemctl start slurmdbd
sudo systemctl status slurmdbd | grep Active| awk '{print $2 $3}'

slurmdbdが起動していることを確認する

[root@headnode slurm]# sudo systemctl status slurmdbd | grep Active| awk '{print $2 $3}'
active(running)

slurmctld, slurmdの起動

sudo systemctl enable slurmctld slurmd
sudo systemctl start slurmctld slurmd
sudo systemctl status slurmctld slurmd| grep  Active| awk '{print $2 $3}'

slurmctld, slurmdが起動していることを確認する

[root@headnode slurm]# sudo systemctl status slurmctld slurmd| grep  Active| awk '{print $2 $3}'
active(running)
active(running)
1612:08:12

slurmシステムを応答を確認する。「sinfo -Rl」でシステムのステータスが表示されれば、slurmは動作している。

[root@headnode slurm]# sinfo -Rl
Sat Mar 16 12:12:22 2024
REASON               USER         TIMESTAMP           STATE  NODELIST

また、slurmdbdの動作を「sacctmgr」コマンドにて応答を確認する。以下のように応答があればslurmdbdも正常に機能していると思われる。

[root@headnode log]# sacctmgr list user
      User   Def Acct     Admin
---------- ---------- ---------
      root       root Administ+
[root@headnode log]# sacctmgr show clusters format="cluster%16,ControlHost"
         Cluster     ControlHost
---------------- ---------------
     rockylinux8  192.168.1.1
[root@headnode log]#

この時点でジョブが投入できるかを確認する。以下のようなsleepするだけのサンプルコードをつかって、sbatchでジョブ投入してみよう。

[root@manage work]# cat test_run.sh
#!/bin/sh
#SBATCH --job-name test
#SBATCH --nodes=1
#SBATCH --tasks-per-node=1
#SBATCH --ntasks=1
#SBATCH -o %x.%J.out
#SBATCH -e %x.%J.err

hostname
sleep 60
[root@headnode work]# sbatch -p debug test_run.sh
Submitted batch job 1
[root@headnode work]# squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 1     debug     test     root  R       0:03      1 headnode
[root@headnode work]#

slurmdbdが動作していれば、sacctにてジョブの履歴を参照することができる

[root@headnode work]# squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
[root@headnode work]# sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1                  test      debug       root          1  COMPLETED      0:0
1.batch           batch                  root          1  COMPLETED      0:0
[root@headnode slurm]#

この時点でヘッドノード単独であるが、slurmのインストールは成功していることが確認できる。

3. slurm計算ノードにslurmクライアントインストールと設定

計算ノードにslurmをインストールして、並列計算環境を構築する。
一番注意することとして、ヘッドノードとクライアント(コンピュートノード)の時刻が合っていることを確認しておく。
- ヘッドノードの時刻

[root@headnode munge]# date
2024  3 16 土曜日 19:44:41 JST
[root@headnode munge]#
  • コンピュートノードの時刻
[root@compute01 munge]# date
2024  3 16 土曜日 19:44:43 JST
[root@compute01 munge]#
3-1. mungeのインストール
[root@compute01 munge_0.5.15]# ls -l
合計 604
-rw-r--r--. 1 root root 143412  3 14 10:17 munge-0.5.15-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 230188  3 14 10:17 munge-debuginfo-0.5.15-1.el8.x86_64.rpm
-rw-r--r--. 1 root root 135284  3 14 10:17 munge-debugsource-0.5.15-1.el8.x86_64.rpm
-rw-r--r--. 1 root root  22948  3 14 10:17 munge-devel-0.5.15-1.el8.x86_64.rpm
-rw-r--r--. 1 root root  24524  3 14 10:17 munge-libs-0.5.15-1.el8.x86_64.rpm
-rw-r--r--. 1 root root  46932  3 14 10:17 munge-libs-debuginfo-0.5.15-1.el8.x86_64.rpm
[root@compute01 munge_0.5.15]#
[root@compute01 munge_0.5.15]# rpm -ivh munge-*
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:munge-debugsource-0.5.15-1.el8   ################################# [ 17%]
   2:munge-debuginfo-0.5.15-1.el8     ################################# [ 33%]
   3:munge-libs-0.5.15-1.el8          ################################# [ 50%]
   4:munge-0.5.15-1.el8               ################################# [ 67%]
Run /usr/sbin/mungekey as the munge user to create a key.
For example: "sudo -u munge /usr/sbin/mungekey -v".
Refer to the mungekey(8) manpage for more information.
   5:munge-devel-0.5.15-1.el8         ################################# [ 83%]
   6:munge-libs-debuginfo-0.5.15-1.el8################################# [100%]
[root@compute01 munge_0.5.15]#
3-2. mungeの設定

ヘッドノードのmungeキーをクライアントノードに転送する。
ヘッドノードにログインして、クライアントノードにカギを転送する。

scp -p /etc/munge/munge.key compute01:/etc/munge/
  • ヘッドノードから鍵を転送
[root@headnode munge]# ls
munge.key
[root@headnode munge]# scp -p /etc/munge/munge.key compute01:/etc/munge/
root@compute01's password:
munge.key                                                  100%  128    55.9KB/s   00:00
[root@headnode munge]#
  • コンピュートノードで鍵を受信したことを確認
[root@compute01 munge]# ls -l
合計 4
-r--------. 1 munge munge 128  3 16 10:19 munge.key
[root@compute01 munge]#
3-2. mungeの起動と疎通確認

転送されたmungeキーのパーミッションを設定する

[root@compute01 munge]# chown munge:munge /etc/munge/munge.key
[root@compute01 munge]# chmod 400 /etc/munge/munge.key
systemctl enable munge
systemctl start munge
systemctl status munge
[root@compute01 munge]# systemctl status munge
 munge.service - MUNGE authentication service

mungeが起動したら、ヘッドノードからmunge通信ができることを確認する。

ヘッドノードから以下のコマンドで疎通確認ができる。

munge -n | ssh compute01 unmunge | grep STATUS |awk '{print $2}'
[root@headnode munge]# munge -n | ssh compute01 unmunge | grep STATUS |awk '{print $2}'
root@compute01's password:
Success
[root@headnode munge]#

Successが出れば、ヘッドノードからmunge通信ができていることを確認できる。

3.3 slurmのインストールと設定

まずライブラリをインストールする。

mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm
mariadb-connector-c-config-3.1.11-2.el8_3.noarch.rpm
[root@compute01 lib]# ls
install
mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm
mariadb-connector-c-config-3.1.11-2.el8_3.noarch.rpm
wget
[root@compute01 lib]# rpm -ivh mariadb-connector-c-*
警告: mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature ID 8483c65d: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:mariadb-connector-c-config-3.1.11################################# [ 50%]
   2:mariadb-connector-c-3.1.11-2.el8_################################# [100%]
[root@compute01 lib]#

slurmの本体をインストールする

slurm-21.08.8-2.el8.x86_64.rpm
slurm-contribs-21.08.8-2.el8.x86_64.rpm
slurm-devel-21.08.8-2.el8.x86_64.rpm
slurm-example-configs-21.08.8-2.el8.x86_64.rpm
slurm-libpmi-21.08.8-2.el8.x86_64.rpm
slurm-openlava-21.08.8-2.el8.x86_64.rpm
slurm-pam_slurm-21.08.8-2.el8.x86_64.rpm
slurm-perlapi-21.08.8-2.el8.x86_64.rpm
slurm-slurmctld-21.08.8-2.el8.x86_64.rpm
slurm-slurmd-21.08.8-2.el8.x86_64.rpm
slurm-slurmdbd-21.08.8-2.el8.x86_64.rpm
slurm-torque-21.08.8-2.el8.x86_64.rpm
[root@compute01 slurm]# rpm -ivh slurm-*

ヘッドノードのslurm.confに設定するため、計算ノードのホスト情報を確認する。

[root@compute01 slurm]# slurmd -C
NodeName=compute01 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770
UpTime=0-01:01:01
[root@compute01 slurm]#

ヘッドノードの/etc/slurm/slurm.confにて、クライアントノードの情報と、パーミッション定義を記載する。
記述する場所は、# COMPUTE NODESと# PARTITIONである。

#
# COMPUTE NODES
#NodeName=linux[1-32] CPUs=1 State=UNKNOWN
NodeName=headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770 State=UNKNOWN
NodeName=compute01 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770 State=UNKNOWN
#
# PARTITION
#PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
PartitionName=debug Nodes=headnode Default=NO MaxTime=30:00 State=UP
PartitionName=part1 Nodes=headnode,compute01 Default=NO MaxTime=30:00 State=UP

ヘッドノードのslurm.confをクライアントノードに転送する。
ヘッドノードから以下のコマンドを実行する。

scp -p /etc/slurm/slurm.conf compute01:/etc/slurm/
[root@headnode slurm]# scp -p /etc/slurm/slurm.conf compute01:/etc/slurm/
root@compute01's password:
slurm.conf                                                 100% 3714     1.9MB/s   00:00
[root@headnode slurm]#

コンピュートノードでslurmdを起動する

[root@compute01 slurm]# systemctl enable slurmd
[root@compute01 slurm]# systemctl start slurmd
[root@compute01 slurm]# systemctl status slurmd
 slurmd.service - Slurm node daemon
   Loaded: loaded (/usr/lib/systemd/system/slurmd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2024-03-16 20:08:35 JST; 6s ago

ヘッドノードのslurmctld, slurmdを再起動する

[root@headnode slurm]# systemctl restart slurmctld slurmd

slurmの疎通確認を行う

[root@headnode log]# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up      30:00      1   idle headnode
part1        up      30:00      1   unk* compute01
part1        up      30:00      1   idle headnode

compute01との通信がunkとなっており、ヘッドノードとコンピュートノードの通信がうまくいっていないことを示している。

firewalldがslurmの通信を遮断することがあるので、ヘッドノードとコンピュートノードのfirewalldを停止(もしくは適切なプロトコルの穴開け)をしよう。
今回は、firewalldを停止する

[root@headnode log]# systemctl stop firewalld
[root@compute01 slurm]# systemctl stop firewalld

もう一度、sinfoを確認する。

[root@headnode log]# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up      30:00      1   idle headnode
part1        up      30:00      2   idle compute01,headnode

これで、コンピュートノードを1台SLURMに追加することができた。

4. テスト計算と実行結果の確認

テスト計算を実施してみる。
サンプルコード(2ノード指定)

[user01@headnode work]$ cat test2_run.sh
#!/bin/sh
#SBATCH --job-name run_test2
#SBATCH --nodes=2
#SBATCH -o %x.%J.out
#SBATCH -e %x.%J.err

hostname
sleep 60
[user01@headnode work]$

2ノードの計算を投入する

[user01@compute01 work]$ sbatch -p part1 test2_run.sh
Submitted batch job 5
[user01@compute01 work]$
[user01@compute01 work]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up      30:00      1  alloc headnode
part1        up      30:00      2  alloc compute01,headnode
[root@headnode ~]# squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 5     part1 run_test usr01  R       0:05      2 compute01,headnode

sacctにてジョブの履歴を参照することができる

[root@headnode slurm]# sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
4             run_test2      part1                     2 CANCELLED+      0:0
5             run_test2      part1                     2  COMPLETED      0:0
5.batch           batch                                1  COMPLETED      0:0

Appendix. ログやステータス確認、その他の設定

1 ヘッドノードからSSHノンパスログイン

ヘッドノードからコンピュートノードにSSHノンパスログインができるようにする。
参考:quita

  • ヘッドノードでSSHキーを作成する
ssh-keygen -t rsa
[root@headnode log]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cvwANqiXptDaz5/FxoIdEVwxBOUNl9fKFgVkHowXaf8 root@headnode
The key's randomart image is:
+---[RSA 3072]----+
|     .o=B..=**.  |
|     ..o =ooB..  |
|    . = . .=.+   |
| . . o =    + .  |
|. o + o S  .   . |
| + + o * o      E|
|. o . o = .      |
|   o   =         |
|    o.o          |
+----[SHA256]-----+
[root@headnode log]#
  • クライアントノードにSSH公開鍵を登録する
cat ~/.ssh/id_rsa.pub | ssh root@compute01 'cat >> .ssh/authorized_keys'
[root@headnode log]# cat ~/.ssh/id_rsa.pub | ssh root@compute01 'cat >> .ssh/authorized_keys'
root@compute01's password:

ヘッドノードからSSHノンパスでログインできるかを確認する。

[root@headnode log]# ssh compute01
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Sat Mar 16 20:19:54 2024 from 192.168.56.111
[root@compute01 ~]# exit
2 sacctのオプション

以下のオプションをつけることで、見やすいログを取得できる。

sacct -S2024-03-01 -E2024-03-31 --format JobID%5,end%16,User%8,JobName%
8,Partition%8,NCPU%5,elapsed,state -X
[user01@compute01 work]$ sacct -S2024-03-01 -E2024-03-31 --format JobID%5,end%16,User%8,JobName%
8,Partition%8,NCPU%5,elapsed,state -X
JobID              End     User  JobName Partitio NCPUS    Elapsed      State
----- ---------------- -------- -------- -------- ----- ---------- ----------
    3 2024-03-16T23:06 user01 run_tes+    part1     2   00:01:00  COMPLETED
    4 2024-03-17T08:25 user01 run_tes+    part1     2   00:00:00 CANCELLED+
    5 2024-03-17T08:42 user01 run_tes+    part1     2   00:01:00  COMPLETED
    6 2024-03-17T08:49 user01 run_tes+    part1     2   00:01:00  COMPLETED
[user01@compute01 work]$
3 トラブルシュート(down)

まずは、ログを見てみよう(/var/log/slurmd.log, /var/log/slurmctld.log, /var/log/slurm/slurmdbd.logなど

slurmのステータスがdownになってしまうとき、よくあるのが時刻同期の問題である。
管理ノードと各計算ノードとの時刻がきちんと同期されていることを確認する。
それから、munge, slurmd, slurmctld, slurmdbdがそれぞれエラーなく起動していることを確認する。
ヘッドノードからmungeの通信を確認する。
各計算ノードからscontrol pingにて、ヘッドノードを認識していることを確認する。
これを試して問題なければ、各デーモン(munge, slurmd, slurmctld, slurmdbd)を再起動してみる。
回復しなければ、各マシンの再起動をしてみる。
という流れで確認してみるかなと思う。