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)を再起動してみる。
回復しなければ、各マシンの再起動をしてみる。
という流れで確認してみるかなと思う。