AWS ParallelCluster 3.3.0 で追加された Slurm のデータベース接続設定により、従来の接続設定手順に影響があるのか調べました

2022.11.23

AWS ParallelCluster 3.3.0 から Slurm のジョブ実行履歴をデータベースへ保存する設定をクラスターのコンフィグ側でサポートされました。従来はユーザー側が任意で Slurm の設定を変更してジョブの実行履歴を保存できるように設定・構築が必要でした。 アップデートに伴いデータベースへ接続する Slurm の設定まわりに v3.3.0 とそれ以前でどういった違いがあるのか調べました。

確認結果

v3.3.0 で設定ファイルに変更、新規追加があったため、v2.7 ~ v3.2.1 までの設定方法を見直す必要がある。

  • Slurm の設定ファイル(/opt/slurm/etc/slurm.conf)にクラスター名が自動反映
    • 変更あり
  • DB 接続設定ファイル(/opt/slurm/etc/slurmdbd.conf)は存在しない
    • 変更なし
  • Slurmdbdデーモン(/etc/systemd/system/slurmdbd.service)が作成される
    • 変更あり

検証環境

項目
ParallelCluster 3.3.0
Slurm(sinfo -V) 22.05.5
OS Ubuntu 20.04 LTS
CPU Intel
HeadNode t3.micro
Database Aurora Serverless v1 MySQL 5.7互換

変更箇所の調査

ヘッドノードの Slurm とデータベース(Aurora for MySQL)を接続し、ジョブ実行履歴を保存するための環境構築に必要な設定ファイルは以下になります。

  • Slurm の設定ファイル
    • /opt/slurm/etc/slurm.conf
  • Slurm とデータベース接続の設定ファイル
    • /opt/slurm/etc/slurmdbd.conf
  • Slurm とデータベースを接続するための実行ファイル
    • /opt/slurm/sbin/slurmdbd
    • 私は実行ファイルをデーモン化して運用していました
      • /etc/systemd/system/slurmdbd.service

AWS ParallelCluster 3.2.1 以前のクラスターからデータベースへ接続する手順は以下のブログで紹介しています。

v3.3.0 と v3.2.0 のクラスターのデフォルトの設定ファイルを比較し変更箇所を洗い出します。

MySQL クライアントはインストールされていない

v3.2.0 から変更ありませんでした。MySQL クライアントはインストールされていませんでした。

$ apt list --installed | grep mysql

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

libmysqlclient-dev/now 8.0.31-1ubuntu20.04 amd64 [installed,local]
libmysqlclient21/now 8.0.31-1ubuntu20.04 amd64 [installed,local]
mysql-common/now 8.0.31-1ubuntu20.04 amd64 [installed,local]
mysql-community-client-plugins/now 8.0.31-1ubuntu20.04 amd64 [installed,local]

slurm.conf のクラスター名に変更あり

v3.3.0 で変更ありました。ClusterName=hogeのクラスター名に変更がありました。デフォルトの値がpclster create-cluster -n hogeでクラスター作成時に指定したクラスター名が入力されるようになっています。

従来は固定値でClusterName=parallelclusterとなっていました。同じデータベースに対して複数のクラスター(ヘッドノード)から接続するときにClusterName=hogeの名前変更が必要だったのですが、クラスター作成時に指定した名前が自動的に反映されるようになって改善されています。

diffで確認したところ差分はClusterName=hogeの一箇所のみでしたが参考までにコンフィグ全文記載します。

/opt/slurm/etc/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.
#
# CLUSTER SETTINGS
ClusterName=DBTestCluster1
SlurmUser=slurm
SlurmctldPort=6820-6829
SlurmdPort=6818
AuthType=auth/munge
StateSaveLocation=/var/spool/slurm.state
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ReconfigFlags=KeepPartState
#
# CLOUD CONFIGS OPTIONS
SlurmctldParameters=idle_on_node_suspend,power_save_min_interval=30,cloud_dns,node_reg_mem_percent=75
CommunicationParameters=NoAddrCache
SuspendProgram=/opt/parallelcluster/scripts/slurm/slurm_suspend
ResumeProgram=/opt/parallelcluster/scripts/slurm/slurm_resume
ResumeFailProgram=/opt/parallelcluster/scripts/slurm/slurm_suspend
RebootProgram=/sbin/reboot
SuspendTimeout=120
PrivateData=cloud
ResumeRate=0
SuspendRate=0
#
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=180
UnkillableStepTimeout=180
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
MessageTimeout=60
AuthInfo=cred_expire=70
#
# SCHEDULING, JOB, AND NODE SETTINGS
EnforcePartLimits=ALL
SchedulerType=sched/backfill
ProctrackType=proctrack/cgroup
MpiDefault=none
ReturnToService=1
TaskPlugin=task/affinity,task/cgroup
#
# TRES AND GPU CONFIG OPTIONS
GresTypes=gpu
SelectType=select/cons_tres
#
# LOGGING
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
JobCompType=jobcomp/none
#
# WARNING!!! The slurm_parallelcluster.conf file included below can be updated by the pcluster process.
# Please do not edit it.
include slurm_parallelcluster.conf

slurmdbd.conf は存在しない

v3.2.0 から変更ありませんでした。データベースへの接続情報(ユーザー名、パスワード、エンドポイント名)を記載するコンフィグファイルはデフォルトでは用意されていません。

その代わりにクラスター作成のコンフィグにデータベースへの接続情報を記載するとおそらくslurm_parallelcluster_slurmdbd.confに反映されるものかと思われます。

/opt/slurm/etc/slurm_parallelcluster_slurmdbd.conf

# slurm_parallelcluster_slurmdbd.conf is managed by the pcluster processes.
# Do not modify.
# Please add user-specific slurmdbd configuration options in slurmdbd.conf

コメントからユーザー任意の設定は従来どおりslurmdbd.confを作成しておけば良いようです。

slurmdbd.services が既存する

v3.3.0 で変更ありました。Slurmdbdデーモンがデフォルトで作成されるようになっています。

私も/opt/slurm/sbin/slurmdbdを都度実行は手間なのでデーモン化していました。記述内容はより Slurm のことを考慮された設定になっているようですので AWS ParallelCluster 謹製のデーモンを採用したいです。

/etc/systemd/system/slurmdbd.service

[Unit]
Description=Slurm DBD accounting daemon
After=network-online.target munge.service mysql.service mysqld.service mariadb.service
Wants=network-online.target
ConditionPathExists=/opt/slurm/etc/slurmdbd.conf

[Service]
Type=simple
EnvironmentFile=-/etc/sysconfig/slurmdbd
ExecStart=/opt/slurm/sbin/slurmdbd -D -s $SLURMDBD_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

サービスは停止状態でした。slurmdbd.confに相当する設定がないため当然ですかね。

$ sudo systemctl status slurmdbd
● slurmdbd.service - Slurm DBD accounting daemon
     Loaded: loaded (/etc/systemd/system/slurmdbd.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

サービスの自動起動設定は無効になっていました。slurm.conf,slurmdbd.confに必要な設定をした後は自動起動を有効化したいところです。

$ systemctl is-enabled slurmdbd
disabled

まとめ

Slurm の設定ファイル(/opt/slurm/etc/slurm.conf)にクラスター名が自動反映されるようになり、ユーザー側でクラスター名の書き換えが不要になり手間が改善されました。

DB 接続設定ファイル(/opt/slurm/etc/slurmdbd.conf)は引き続き存在しなく、ParallelCluster 非管理の設定を記述したい場合は従来どおりslurmdb.confを作成すればよいです。

Slurmdbdデーモン(/etc/systemd/system/slurmdbd.service)が作成済みのため流用しましょう。また、サービス自動起動が無効のため、必要な設定を入れたあとは自動起動を有効化しておいた方が使いやすいでしょう。

おわりに

ParallelCluster 3.2.0 以前で設定していた手法をそのまま 3.3.0 に適用できるのかの調査でした。多少変更が見られたため従来の設定手順を見直すことになりました。3.3.0 対応の設定手順も検証しましたので手順を整理してから別途記事にしてご紹介します。

また、ユーザー側で Slurm とデータベース接続の設定せずにクラスターのコンフィグに設定・管理を任せた方が運用しやすいかもしれなく別途検証次第、こちらも紹介できればと思います。