0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rocky Linux8.8にSLURMをインストールする

0
Posted at

Rocky LinuxにSLURMをインストール

RockyLinux8.8にSLURMをインストールしてみたことを忘備録としてまとめました。
RockyLinuxでも無事にSLURMをインストールすることができました。

その他、CentOS7やUbuntuでもSLURMをインストールを確認して下記にまとめていますので、ご参考になれば幸いです。
Ubuntu:SLURMをインストール)https://qiita.com/believeriver/items/2204394cead531f6881c
Ubuntu:SLURMデータベース構築)https://qiita.com/believeriver/items/9993c3730fed2a777d4a
CentOS7:SLURMをインストール)https://qiita.com/believeriver/items/cef880b9c9b9a19e4ce9

環境

手法としては、WindowPC上にVirtualBoxをインストールして、Linux仮想マシンとしてRockyLinuxをインストールします。そこで、SLURMのヘッドノード(管理ノード)とコンピュートノード(計算ノード)を構築します。(今回は最も簡単な構成として、ヘッドノードとコンピュートノードを同一とします)

  • RockyLinux8.8
  • slurm 21.08.8-2
  • munge-0.5.14

インストールの基本的な流れ

1 slurmとmungeのパッケージをダウンロードする

  • mungeパッケージ
    mungeパッケージのダウンロードは、コンパイルするために.ascファイル、.gpgファイルも必要になるため、対応するversionの各種ファイルもダウンロードしておきます。mungeのバージョンは古いものを選んでいますが、必要に応じてより最新のものを使っても良いかと思います。
wget https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz
wget https://github.com/dun/munge/releases/download/munge-0.5.14/munge-0.5.14.tar.xz.asc
wget https://github.com/dun.gpg
  • slurmパッケージ
    今回は、2023/12時点で入手可能な21.08の一番古いバージョンをインストールします。
    入手可能なversionについては、下記サイトで確認できます。
    https://download.schedmd.com/slurm/
wget https://download.schedmd.com/slurm/slurm-21.08.8-2.tar.bz2

2. パッケージをコンパイルする

パッケージをコンパイルするには、rpmbuildコマンドを用います。

ここで、rpmbuildやgccがインストールされていない場合、環境構築から必要となります。
ただし、RockyLinuxは開発環境などの選択肢があり、rpmbuildとmariadbをインストールした状態でRockyLinuxをインストールすることができます。そのため、RockyLinuxインストール時に合わせてインストールしておくことをお勧めします。

  • mungeのコンパイル
    teeコマンドで標準出力とログ出力していますが、tee以降はなくても良いです。
rpmbuild -tb --clean munge-0.5.14.tar.xz 2>&1 | tee munge-0.5.14_rpmbuild.log
  • slurmのコンパイル
rpmbuild -ta slurm-21.08.8-2.tar.bz2 2>&1 | tee rpmbuild-slurm.log

コンパイルに成功すると、「/root/rpmbuild/RPMS」にrpmファイルが作成されます。

3. slurmとmungeのインストール

mungeインストール

コンパイルされたmungeインストーラ一式は以下の通りです。

  • munge-0.5.14-1.el8.x86_64.rpm
  • munge-debuginfo-0.5.14-1.el8.x86_64.rpm
  • munge-debugsource-0.5.14-1.el8.x86_64.rpm
  • munge-devel-0.5.14-1.el8.x86_64.rpm
  • munge-libs-0.5.14-1.el8.x86_64.rpm
  • munge-libs-debuginfo-0.5.14-1.el8.x86_64.rpm

これらを同一ディレクトリに保管して、rpmコマンドでインストールを行います。

rpm -ivh munge/munge-* 2>&1 | tee install_munge.log

slurmインストール

ここで、slurmのインストールを行うには、前もって以下の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
rpm -ivh mariadb-connector-c-3.1.11-2.el8_3.x86_64.rpm 2>&1 | tee mariadb-connector-c.log
rpm -ivh mariadb-connector-c-config-3.1.11-2.el8_3.noarch.rpm 2>&1 | tee mariadb-connector-c-config.log

コンパイルされた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
rpm -ivh slurm/slurm-* 2>&1 | tee install_slurm_node2.log

SLURMのセットアップ

SLURMは、管理ノードと計算ノードそれぞれのセットアップが必要です。
管理ノード(ヘッドノードとも呼びます)では、slurmctldとmaridb及びslurmdbdを起動します。(mariadb,
計算ノード(コンピュートノードとも呼びます)では、slurmdを起動し、slurmctldと通信を行います。
管理ノードと計算ノードの通信では、mungeが使われています。
mungeは、slurmの通信(暗号化等)を行うサービスです。

今回は、管理ノードと計算ノードが同一の非常にシンプルな構成とします。slurmdbdも今回は使用しません。

1. mungeのセットアップ

先ずmungeのセットアップを行います。
管理ノードでmungeキーを作成します。

sudo -u munge /usr/sbin/mungekey -v
  mungekey: Info: Created "/etc/munge/munge.key" with 1024-bit key

mungeキーの属性を設定します。

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

mungeを起動します。

systemctl enable munge
systemctl start munge
systemctl status munge
● munge.service - MUNGE authentication service
   Loaded: loaded (/usr/lib/systemd/system/munge.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-01-02 10:10:56 JST; 3h 44min ago
     Docs: man:munged(8)
  Process: 853 ExecStart=/usr/sbin/munged $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 871 (munged)
    Tasks: 4 (limit: 4552)
   Memory: 1.0M
   CGroup: /system.slice/munge.service
           mq871 /usr/sbin/munged

 1月 02 10:10:55 headnode systemd[1]: Starting MUNGE authentication service...
 1月 02 10:10:56 headnode systemd[1]: Started MUNGE authentication service.

2. SLURMのセットアップ

「slurmd -C」というコマンドで、ホストの情報を確認します。slurmのインストールができてれば、slurmを起動していなくてもこのコマンドは使うことができます。

[root@headnode install_command]# slurmd -C
NodeName=headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770
UpTime=0-03:49:25

この情報は、「slurmd.conf」というslurmの設定ファイルで用います。
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=cluster_rocky_linux
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
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
#SlurmUser=slurm
SlurmUser=root
#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=
#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=headnode CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770 State=UNKNOWN
#NodeName=node1 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=770 State=UNKNOWN
#NodeName=node2 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=01:00 State=UP

slurmの起動

slurm.confの作成が完了したら、slurmを起動します。(slurmctld, slurmdをどちらも起動します)

sudo systemctl stop slurmctld slurmd 
sudo systemctl start slurmctld slurmd 
sudo systemctl status slurmctld slurmd 

「sinfo」でslurmのステータスを確認します。以下のように、使用可能なノードが「idle」として表示されればOKです。

[root@headnode slurm]# sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up       1:00      1   idle headnode
よくあるエラー

「down」ステータスになっている場合、slurmctldとslurmdの通信がうまくいっていないことが多いです。slurmctld,slurmd, mungedの再起動で解決しない場合、計算ノード間の時間が揃っていなことなどで良く発生しますので、システム時間の整合性もチェックしてみてください。(ただし今回の例は、1ノードで管理ノードと計算ノードを兼ねていますので、時間ずれの問題は発生しないはずです。)

備考

計算ノードを増やすことも可能です。手順はRockyLinuxとは関係ないため、Ubuntuにて解説した手順がありますので参考にしてください。
https://qiita.com/believeriver/items/2204394cead531f6881c

テストジョブの実行

それでは、テストジョブをと入力してみます。
ランスクリプトは、以下のように60秒間sleepするだけです。

#!/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

slurmのバッチジョブは、「sbatch」を用います。

[user01@headnode work]$ sbatch -p debug test_run.sh
Submitted batch job 8

ジョブのステータスは、「squeue」で確認します。

[user01@headnode work]$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 8     debug     test   user01  R       0:04      1 headnode

ジョブが投入できることも確認できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?