1
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?

More than 1 year has passed since last update.

Mac book proにParalles Desktopを使ってSLURMをインストールしてみた(CentOS編)

Last updated at Posted at 2022-11-20

仕事で並列計算機にSLURMをインストールすることになりました。
SLURMについて全くの未経験だったので、自宅のMacBook Pro(13-inchi, Mid 2012)にParalles Desktop 12 を使ってCentOS7を4台インストールして、仮想のHPC環境を作り、SLURMのインストールに挑戦しました。
その忘備録をまとめます。

注意)2022現在、Macbook Airを購入し、Paralles Desktop 18を使って同様の環境を構築しようとしたら、なんとParallesDesktop 18はCent OSがインストールできなくなってしまいました。Version 17まではインストールできていたようですので、ご注意ください。
私も困ったので、Ubuntuで構築する方法を検討中です。確認できたらまた記事にまとめるつもりです。
(追記)
試しに、VirtualBoxをインストールしてCentOS環境構築もトライしてみましたが、ARMのCentOSを使っても起動できず、今のところうまくいっていないです。

目次

  • 動作環境について
  • ParallesデスクトップにCentOSをインストール
  • SLURMの構成について
  • Mungeのインストール
  • SLURMのインストール
  • SLURMの設定
  • うまくいかないときのチェックメモ
  • 参考とさせていただいたサイト

作業環境

私が構築した環境は以下の通りです。10年近くMacBook Proを愛用してきたため、かなり古い環境ですね。ただし、SLURMを構築するのはCentOS上のため、仮想環境や土台となるOSはなんでもOKです。例えば、VM ware Esxiという仮想サーバーに仮想マシンでCentOSを作って、同様の環境構築した経験もあります。VMware Esxiでの環境構築も別の機会にまとめたいと思います。

今回の動作環境

  • MacBook Pro(13-inichi, Mid 2012)
  • Paralles Desktop 12
  • ゲスト OS:CentOS 7

Paralles DesktopヘのCentOSインストール

Paralles Desktopは、Macマシンに複数のOSをインストールすることができる仮想マシンソフトウェアです。有償ソフトウェアになりますが、とても使いやすくて安定しており、私はMacで自学自習するときはとても活用しています。2週間のお試しインストール(無料)もありますので、試しに使ってみてはいかがでしょうか。

本環境を構築するにあたり、Standard版で十分です。
サブスクリプション版は、約1000円/月ほどでバージョンアップもできますが、私は1回の買取版(12,700円)を選択しました。

Paralles Desktop公式サイト)
https://www.parallels.com/jp/pd/general/?gclid=CjwKCAiAmuKbBhA2EiwAxQnt71oCAmy8DsHC0qPY3Wn7PxO5ngk3OKIbxKjQBHBwpwv_G1lJuYYWixoCcu0QAvD_BwE

注意として、CentOSを使うには、最新版ではなくversion 17までをインストールしましょう。公式サイトでは、最新版しかありませんが、以下のサイトで旧バージョンのインストールもできそうです。
Paralles Desktop 旧バージョン)
https://yama-mac.com/parallels-desktop-for-mac-older-versions/

もう一つ、Mac OSを最新版(2022年現在)Venturaにバージョンアップしてしまうと、Paralle Desktop 17以下はインストールできなくなってしまいます。Mac OSはMontery12.0.1+ 以下になっていることも確認してください。(私は、これによって、新しいMacで同様の環境が作れないことがわかり、かなりショックでした涙)

Paralles Desktopの環境ができたら、CentOSのイメージをダウンロードしておきましょう。
CentoOSダウングレード)
https://www.centos.org/download/

古いMacはIntelのCPUのため、x86_84をダウンロードします。(今回環境です。)
新しいMacはM1やM2チップのため、ARM64の方からダウンロードしましょう。

CentoOSイメージのダウンロードができたら、Paralle Desktopのメニューから今回ダウンロードしたイメージを選択して、ダウンロードしてください。Paralle Desktopのメニューの指示にそのまま従うだけなので、迷うことはないかと。

並列計算機を模擬するため、Paralle Desktopに4台のCentoOS仮想マシンをインストールします。

SLURMの構成について

今回構築するSLURMの構成は以下の通りです。

hostname SLURM役割 仮想マシン 備考
slmg SLURMヘッドノード CentOS 7 SLURMの管理サーバ
node1 SLURM node1 CentOS 7 計算ノード
node2 SLURM node2 CentOS 7 計算ノード
node3 SLURM node3 CentOS 7 計算ノード

パーティション構成を以下のようにします。
パーティションを構築することで、ジョブ投入時に選別される計算ノードをグループ化することができます。

パーティション名 グループ化されるノード 備考
Debug slmg 管理ノードの死活監視
cluster1 node1 node1のみ
cluster2 node2, node3 node2,node3から割り当て

Mungeインストール

・管理サーバ(slmg)でmungeのダウンロード

wget https://github.com/dun/munge/releases/download/munge-0.5.13/munge-0.5.13.tar.xz

・管理サーバ(slmg)でmungeのrpmbuildを作成する

rpmbuild -ta --clean munge-05.13.tar.bz2

・rpmbuildを/root/munge/にコピーする

cp -r /home/mockbuild/rpmbuild /root/install/munge

・インストーラーを計算ノード(node1~node3)に配布する

scp -r /root/install/munge/rpmbuild node1:/root/

・mungeインストール

rpm -ivh /root/rpmbuild/RPMS/x86_64/munge*

※ファイルは以下4つ

  • munge-libs-0.5.13.el7.x86_64.rpm
  • munge-0.5.13.el7.x86_64.rpm
  • munge-devel-0.5.13.el7.x86_64.rpm
  • munge-debuginfo-0.5.17.el6.x86_64.rpm

・管理サーバから、munge.keyを作成する。

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

・管理サーバから、munge.keyを配布する

scp -p /etc/munge/munge.key nx:/etc/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 -n | ssh node1 unmunge
munge -n | ssh node2 unmunge
munge -n | ssh node3 unmunge

これでmungeインストール完了

SLURMインストール

・管理サーバ(slmg)でwgetでslurmの最新versionをダウンロードする
https://download.schedmd.com/slurm/slurm-29.11.8.tar.bz2

wget https://download.schedmd.com/slurm/slurm-29.11.8.tar.bz2

・管理サーバ(slmg)でslurmのrpmbuildを作成する

rpmbuild -ta slurm-29.11.8.tar.bz2

・rpmbuildを/root/install/slurm/にコピーする

cp -r /home/mockbuild/rpmbuild /root/install/slurm

・インストーラーを計算ノードに配布する

scp -r /root/install/slurm/rpmbuild node1:/root/
scp -r /root/install/slurm/rpmbuild node2:/root/
scp -r /root/install/slurm/rpmbuild node3:/root/

・slurmインストール

rpm -ivh /root/rpmbuild/SRPMS/slurm*
rpm -ivh /root/rpmbuild/RPMS/x86_64/slurm*

※事前インストール:perl(Switch)が必要な場合があります。

yum install -y perl-Switch

・必要なディレクトリを作成する

mkdir -p /var/lib/slurm
mkdir -p /var/lib/slurm/spool
mkdir -p /var/log/slurm
mkdir -p /var/spool/slurm/d

※SLURMを動作させるために、SLURMユーザを作成する手順が一般的なので、その場合は以下のようにSLURMユーザに対するパーティションを設定します。ただし、実はSLURMユーザの作成は必須ではなくrootアカウントでSLURMを動作すれば、SLURMアカウントの作成は不要だったりします。

chown -R slurm:slurm /var/lib/slurm
chown -R slurm:slurm /var/log/slurm
chown -R slurm:slurm /var/spool/slurm/d

SLURM設定

・管理ノードで新しい計算ノードの情報を追加したslurm.confを作成する
本環境のサンプル(例)としての Slurm.conf 

[user1@slmg 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.
#
# See the slurm.conf man page for more information.
#
ClusterName=cluster
ControlMachine=slmg
ControlAddr=10.211.55.24
#BackupController=
#BackupAddr=
#
SlurmUser=root
#SlurmdUser=root
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge
#JobCredentialPrivateKey=
#JobCredentialPublicCertificate=
StateSaveLocation=/var/spool/slurm/ctld
#StateSaveLocation=/tmp
SlurmdSpoolDir=/var/spool/slurm/d
#SlurmSpoolDir=/tmp/slurmd
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/pgid
#PluginDir=
#FirstJobId=
#ReturnToService=1
ReturnToService=0
#MaxJobCount=
#PlugStackConfig=
#PropagatePrioProcess=
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#Prolog=
#Epilog=
#SrunProlog=
#SrunEpilog=
#TaskProlog=
#TaskEpilog=
#TaskPlugin=
#TrackWCKey=no
#TreeWidth=50
#TmpFS=
#UsePAM=
#
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
#
# SCHEDULING
SchedulerType=sched/backfill
#SchedulerAuth=
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
#PriorityType=priority/multifactor
#PriorityDecayHalfLife=14-0
#PriorityUsageResetPeriod=14-0
#PriorityWeightFairshare=100000
#PriorityWeightAge=1000
#PriorityWeightPartition=10000
#PriorityWeightJobSize=1000
#PriorityMaxAge=1-0
#
# LOGGING
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
JobCompType=jobcomp/none
#JobCompLoc=
#
# ACCOUNTING
#JobAcctGatherType=jobacct_gather/linux
JobAcctGatherType=jobacct_gather/none
JobAcctGatherFrequency=30
#
#AccountingStorageType=accounting_storage/slurmdbd
#AccountingStorageHost=slmg
#AccountingStorageLoc=
#AccountingStoragePass=/var/run/munge/munge.socket.2
#AccountingStorageUser=
#
# COMPUTE NODES
#NodeName=linux[1-32] Procs=1 State=UNKNOWN
NodeName=slmg CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=986 State=UNKNOWN
NodeName=node1 CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=986 State=UNKNOWN
NodeName=node2 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=986 State=UNKNOWN
NodeName=node3 CPUs=1 Boards=1 SocketsPerBoard=1 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=986 State=UNKNOWN

PartitionName=debug Nodes=slmg Default=YES MaxTime=INFINITE State=UP
PartitionName=cluster1 Nodes=node1 Default=YES MaxTime=INFINITE State=UP
PartitionName=cluster2 Nodes=node[2-3] Default=YES MaxTime=INFINITE State=UP

ポイントとしては、ノードのハードウェア情報を、NodeNameで記載します。この情報は、各ノードで、slurmd -C と入力することでデータが取れます。これを転記します。

[user1@slmg slurm]$ slurmd -C
NodeName=slmg CPUs=2 Boards=1 SocketsPerBoard=1 CoresPerSocket=2 ThreadsPerCore=1 RealMemory=986
UpTime=4-11:01:58

・ntpを起動して、時刻同期をする。
SLURMでは、管理サーバと計算ノードの通信が暗号化されており、時刻同期されてないと計算ノード間の通信ができなくなります。もしSLURMがうまくいかないときは、この時間がずれていることが多いですのでチェックポイントです。

・SLURMのデーモンを起動する。
管理サーバでは、slurmctld, slurmdを起動します。

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

計算ノードは、slurmdを起動します。

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

slurmctld, slurmdがActiveとなれば、SLURMのインストールは終了です。
sinfo でSLURMのパーティション構成が出るかを確認してみてください。
slurm.confで定義したパーティションがidleとして表示されれば完了です。

[user1@slmg slurm]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug        up   infinite      1   idle slmg
cluster1     up   infinite      1   idle node1
cluster2     up   infinite      2   idle node[2-3]

ここで、downというステータスがあると、計算ノード間の通信がうまくいっていないです。
私の場合は、各種デーモンの再起動、パーティションの設定、および時刻同期の3つを確認していくトラブルシューティングをしています。

うまくいかないときのチェックメモ

slurmd, slurmctldを再起動する
うまく起動しない場合は、コンフィグに問題があるかもしれないので確認
slurmdとslurmctldの接続がうまくいかない場合、ntpdがfailedしている可能性があるので
再起動してみること。
それでもdownになるならば、scontrolで強制的にidleにしてみる
 
scontrol update nodename=n1 state=idle
※sinfo -R とすると、もう少し原因がつかめるかもしれない。

sbatch -p 'パーミッション名' ./job.sh
にて、追加した計算ノードでジョブが実行できるかを確認する。

※scontrolの参考サイト
 https://x.momo86.net/article/132
※ジョブの実行方法
 https://www.j-focus.jp/user_guide/ug0004020000/
※spcコマンド使い方
 https://qiita.com/pugiemonn/items/3c80522f477bbbfa1302

まとめ

自宅でSLURMの環境構築を行った手順を、ざっくりとまとめました。
しかし、本当はもっと色々な情報量が多く、細かいところをまとめきれていないので、これだけではうまく構築できないかもしれせん。
そのため、私ももっと記事をブラッシュアップしていくこと、そして追加の情報はさらに記事としてまとめていきます。

例えば、SLURMは、データベースがなくてもこの環境でジョブのスケジューリングや振り分けは可能ですが、SLURMデータベースを構築することで、アカウント情報を細かく制御したり、計算時間やステータスのログを管理して、課金情報につなげることができます。

この環境にSLURMデータベースを追加することも行っていますので、これは別の記事で、まとめていきたいと思います。

また、CentOS 7 も2024年6月でサポート切れとなりますので、Ubuntu (LTS)での環境構築もトライして、できたらまとめていこうと思います。

(追記)
Macbook Air(M2チップ)で、CentOSを使用できないかの検討で、VirtualBoxをインストールしてみましたが、ARMのCentOSイメージを使用しても起動できませんでした。あまり深くは検証していませんが、簡単には行かないような印象です。サポートが切れるとはいえ、まだ広く使われている OSではあると思うので、検証環境は作っておきたいなと思いつつ、ぼちぼちトライしてまた追加情報あれば追記していきたいと思います。

参考とさせていただいたサイト

https://qiita.com/evakichi/items/265c218362b200c3bc3d
https://download.schedmd.com/slurm/
https://qiita.com/evakichi/items/265c218362b200c3bc3d
http://www-fps.nifs.ac.jp/ito/memo/slurm01.html
※mariadbがいる
https://wiki.fysik.dtu.dk/niflheim/Slurm_installation#build-slurm-rpms
https://lists.schedmd.com/pipermail/slurm-users/2020-April/005245.html

※rpmbuildについて
https://www.indetail.co.jp/blog/12146/

1
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
1
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?