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?

Slurmをソースコードからインストールしてジョブを投入してみた (補足としてdnfインストールも追記)

0
Posted at

はじめに

前記事で、Slurmのインストールまで書いたので、サーバ上でジョブの実行までを行ってみました。
今回はアレイジョブの動作も確認したかったので、まずはOSアップグレード前のCentOS7上でテストを行いました。この作業は本番環境での動作前の手順の確認です。後日RockyLinux8での変更点も追記したいと思います。

CentOS7上でのSlurmのインストール

前提

CnetOSは2024年6月30日でメンテナンス終了し、アップデート公開もされなくなり、標準リポジトリ及びミラーサイトもパッケージ提供が停止リポジトリは参照できなくなっているので、リポジトリは “vault.centos.org” に変更した上で実施しました。
CentOSはRockyLinux8.10にアップグレードする予定ですが、その間にこの環境を使って設定方法を確認した記録です。
後日OSをRockyLinux8にアップグレードして、再度インストールをする予定です。

ユーザIDの準備(NIS管理下)

NISでの管理下ではslurmとmungeのアカウントを事前にNISサーバで作成しておく必要があった
詳細は後述します

インストール

  1. mungeのインストール
    mugeはyumでインストール
[~]$ sudo yum install munge munge-devel
インストール:
  munge.x86_64 0:0.5.11-3.el7                        munge-devel.x86_64 0:0.5.11-3.el7                       
依存性関連をインストールしました:
  munge-libs.x86_64 0:0.5.11-3.el7                             
完了しました!

 
2. ソースからSlurmのインストール

[~]$ wget https://download.schedmd.com/slurm/slurm-24.11.3.tar.bz2
[~]$ ls -lth|head -n 2
合計 38M
-rw-rw-r--   1 hoge hoge 7.0M  3月  7 04:49 slurm-24.11.3.tar.bz2
[~]$ tar -xjf slurm-24.11.3.tar.bz2 
[~]$ cd slurm-24.11.3/
[~/slurm-24.11.3]$ sudo yum install glibc glibc-devel glibc-common glibc-static glibc-headers
[~/slurm-24.11.3]$ ./configure
[~/slurm-24.11.3]$ date;make;date

[~/slurm-24.11.3]$ sudo make install

3.環境設定

設定ファイル /usr/local/etc/slurm.conf ファイルを作成

ポイントは管理ノートと演算ノードで同じ内容をslurm.confに記述すること(違いがあるとslurmdデーモンが起動しない)
なぜ/usr/local/etcにslurm.confを作成るのかを調べて、勉強になったので、この部分は後述します
slurm.confのディレクトリ

# slurm.conf file generated for single node system: kanri
ClusterName=linux
ControlMachine=manageserver

SlurmUser=slurm
SlurmctldPort=6817
SlurmdPort=6818

AuthType=auth/munge
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd

SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid

ProctrackType=proctrack/linuxproc
ReturnToService=2

# Logging
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log

# Schedulers
SchedulerType=sched/backfill
#SelectType=select/cons_res
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory

# Node and Partition Configuration
NodeName=manageserver CPUs=60 RealMemory=980000 State=UNKNOWN
PartitionName=squeue Nodes=kanri,calc01,calc02 Default=YES MaxTime=INFINITE State=UP

ログファイルのディレクトリを作成

slurmアカウントがなければ作成する

## HOMEディレクトリはなし、ログイン不可のslurmユーザ作成
NIS管理下ではslurmとmungeのアカウントをNISサーバで作成して、make -C /var/yp で各サーバに反映させておく (反映後に各サーバでidコマンドを実行してslurmアカウントのIDがNISサーバと同じになっているか確認しておく)
mungeに関してはNISで管理する必要はないが、NISで管理した方が分かりやすい
[~]$ sudo useradd -r -M -s /sbin/nologin -g slurm slurm
#オプション           意味
# -r               システムアカウントとして作成(UIDが低くなる)
# -M               ホームディレクトリを作成しない
# -s /sbin/nologin  ログイン不可にする(セキュリティ的に良い)
# -g slurm          既存の slurm グループに所属させる
[~]$ sudo mkdir -p /var/spool/slurmd
[~]$ sudo mkdir -p /var/spool/slurmctld
[~]$ sudo mkdir -p /var/log/slurm
[~]$ sudo chown slurm:slurm /var/log/slurm
[~]$ sudo chown slurm:slurm /var/spool/slurm*

4. mungeキーのコピーとサービス起動

## keyのコピー
[~]$ sudo cp -p ~/munge.key /etc/munge/
## サービス起動
[~]$ sudo systemctl restart munge

mungeのkeyは管理ノードを構築したときに管理ノード上で作成したkeyをscpでコピーしたものを配置する

## 【参考】(すでに管理ノードでkeyは作成済み)
[~]$ sudo /usr/sbin/create-munge-key
Generating a pseudo-random key using /dev/urandom completed.

5. デーモンの起動と停止(サービス化はこの後実施)

デーモン起動
[~]$ sudo /usr/local/sbin/slurmctld
[~]$ sudo /usr/local/sbin/slurmd

参考:デバッグモードでの起動
[~]$ sudo /usr/local/sbin/slurmd -D -vvvv

停止
ps aux | grep slurm
sudo kill <PID of slurmctld>
sudo kill <PID of slurmd>

起動できたことsinfoコマンドで確認

[~]$ sinfo -N -l
Fri Apr 18 10:42:16 2025
NODELIST   NODES PARTITION       STATE CPUS    S:C:T MEMORY TMP_DISK WEIGHT AVAIL_FE REASON              
calc01         1   squeue*       down* 50     50:1:1 230000        0      1   (null) Not responding      
calc02         1   squeue*       down* 50     50:1:1 230000        0      1   (null) Not responding      
calc03         1   squeue*        idle 50     50:1:1 230000        0      1   (null) none                
kanri          1   squeue*        idle 60     60:1:1 980000        0      1   (null) none  

6.サービス化

slurmctldとslurmdをサービス化する
slurmctld と slurmd の systemd ユニットファイルを作成

管理ノード

/etc/systemd/system/slurmctld.service

[Unit]
Description=Slurm controller daemon
After=network.target munge.service
Requires=munge.service

[Service]
Type=simple
ExecStart=/usr/local/sbin/slurmctld -D
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmctld.pid
User=root
Group=root
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

演算ノード

/etc/systemd/system/slurmd.service

[Unit]
Description=Slurm node daemon
After=network.target munge.service
Requires=munge.service

[Service]
Type=simple
ExecStart=/usr/local/sbin/slurmd -D
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/slurmd.pid
User=root
Group=root
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

ユニットファイルの権限と有効化

# ユニットファイルのリロード
sudo systemctl daemon-reexec
sudo systemctl daemon-reload

# サービスの有効化(自動起動) これは動作確認後に実施する
sudo systemctl enable slurmctld  # 管理ノード
sudo systemctl enable slurmd     # 演算ノード   

# サービスの起動
sudo systemctl start slurmctld  # 管理ノード
sudo systemctl start slurmd     # 演算ノード

# ステータス確認
sudo systemctl status slurmctld
sudo systemctl status slurmd

ユーザ作成(NIS管理下)

NISの管理下では(ジョブ管理の場合NIS配下のサーバで構成することが多いと思うので追記します)、先にslurmとmungeのアカウントを作成しておくと、サーバ間でslurmの権限が問題になることを避けられてスムーズに構築できます。
今回は、各サーバでslurmのアカウントを作成してしまったので、slurmアカウントのIDが異なるサーバできてしまって、再度NISサーバでslurmのアカウントを作成して、IDを揃えました。


slurmconf-directory

ソースからインストールする際の基本の基本かもしれません。いまごろ理解したので追記します。
make installのあとslurm.confをどのディレクトリに作成するのか、ネット検索でヒットした手順で実施しました。
よく理解しないまま、管理ノード兼演算ノードのサーバで、デーモンを起動するとslurm.confが見つからず起動しませんでした。
AIに質問しながらなんとか1台のみの環境で起動することができましたが、シンボリックリンクを作成していて、どちらがマニュアル通りなのかわからなくなっていました。

[~]$ ls -lh /etc/slurm/slurm.conf /usr/local/etc/slurm.conf
-rw-r--r-- 1 root root 932  4月 16 13:59 /etc/slurm/slurm.conf
lrwxrwxrwx 1 root root  21  4月  4 16:02 /usr/local/etc/slurm.conf -> /etc/slurm/slurm.conf

そこで、ソースを解凍したディレクトリにあるINSTALLの中を見ると、

specific to Slurm are available at
https://slurm.schedmd.com/quickstart_admin.html

とあって、このurlを参照すると

6.Install the configuration file in < sysconfdir> /slurm.conf.

とありました。しかし「< sysconfdir >」ってどこなの?と調べるとGNU Autoconf 公式マニュアル

./configure 実行時に --prefix を省略すると、デフォルトで prefix=/usr/local

の説明がありました。

Slurmのdnfインストール

1.事前準備
MUNGE(認証で必要)と EPEL リポジトリを導入

sudo dnf install epel-release -y
sudo dnf install munge munge-libs munge-devel -y
sudo systemctl enable --now munge

2.Slurm のパッケージインストール

sudo dnf config-manager --set-enabled crb  # Rocky 9 の場合 (旧 PowerTools)
sudo dnf install slurm slurm-slurmctld slurm-slurmd -y
パッケージ 用途
slurm Slurm の基本パッケージ。CLI ツール (srun, sbatch, sacct など) と共通ライブラリを含む。管理ノード・演算ノード両方に必要
slurm-slurmctld Slurm コントローラデーモン (slurmctld)。管理ノード専用
slurm-slurmd 計算ノードデーモン (slurmd)。演算ノード専用

3.設定ファイルを作成
インストール後、以下のファイルを調整

sudo cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf
sudo vi /etc/slurm/slurm.conf

最小構成の例:

# /etc/slurm/slurm.conf
ClusterName=testcluster
ControlMachine=localhost

NodeName=localhost CPUs=4 RealMemory=4096 State=UNKNOWN
PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP

4.サービス起動

sudo systemctl enable --now slurmctld
sudo systemctl enable --now slurmd

動作確認:

sinfo → ノード状態確認
例:

$ sinfo
PARTITION  AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*     up     1:00:00       1   idle  node01

squeue → キュー状態確認
例:

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

5.動作確認後のメモ

/var/log/slurm/ にログが出力されます。
既存の PBS/UGE 変換ツールを利用する場合は、
qsub_wrapper を通してジョブを投入すれば Slurm 側が受け取れます。
Slurm のバージョン確認:

scontrol --version
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?