AWS PCS ジョブの実行履歴を保存できる Slurm アカウンティングをサポートした Slurm 24.11 バージョンがリリースされました

AWS PCS ジョブの実行履歴を保存できる Slurm アカウンティングをサポートした Slurm 24.11 バージョンがリリースされました

Clock Icon2025.05.16

AWS Parallel Computing Service (PCS) が マネージドサービスの Slurm アカウンティングをサポートしたバージョンがリリースされました。Slurm アカウンティングを利用すると、ジョブの履歴保存や、きめ細かいアクセス制御が可能になります。

https://aws.amazon.com/jp/about-aws/whats-new/2025/05/aws-pcs-accounting-slurm-version-24-11/

マネージドサービスの Slurm アカウンティングの概要

通常は Slurm の履歴保存先として、MySQL 互換のデータベースが必要です。マネージドサービスの AWS PCS では、そのデータベース部分の作成、管理もマネージドサービスとして提供しています。

Slurm アカウンティングを有効にすることで、以下の機能が利用可能になります。

  • クラスター使用状況のモニタリング
  • リソース制限の適用
  • 特定のキューやコンピュートノードグループへのきめ細かいアクセス制御

AWS PCS は Slurm バージョン 24.11 以降でアカウンティング機能をサポートしています。また、データベースは AWS が所有するアカウントで作成・管理されます。 Slurm のデータベース接続情報の設定ファイル(slurmdbd.conf)へのアクセス権は利用者には与えられません。

PCS-24.11.png

料金体系

Slurm アカウンティング機能を有効にすると、2 つの追加料金が発生します。

  1. アカウンティング使用料:選択したコントローラーサイズによって変わる 1 時間あたりの料金
  2. アカウンティングストレージ料:GB-月単位で請求されるストレージ料金

例えば、Small サイズのコントローラーを選択し、平均 10GB のデータを保存する場合、1 ヶ月の利用費は以下のようになります。

  • アカウンティング使用料:$0.23/時間 × 24 時間/日 × 30 日/月 = $165.6
  • アカウンティングストレージ料:$1.07/GB/月 × 10GB = $10.7

※ AWS PCS の基本料金(コントローラー料金とノード管理料金)に加えて発生する費用です。

最新の料金は公式サイトを確認してください。

HPC Workload Service – AWS Parallel Computing Service Pricing – AWS

アカウンティングの設定オプション

AWS PCS のアカウンティング機能には、以下の設定オプションがあります。

データの保持期間

すべてのアカウンティングレコードタイプ(ジョブ、イベント、予約、ステップ、停止、トランザクション、使用状況データ)の保持期間を日数で指定します。例えば、30 を指定すると、AWS PCS はアカウンティングレコードを 30 日間保持します。クラスター作成時に値を設定でき、値を指定しない場合は無期限に保持できます。

アカウンティングポリシーの適用

ジョブ送信ルール、リソース制限、およびアカウンティングポリシーをどの程度厳密に適用するかを決定します。この設定はクラスターの slurm.conf ファイルの AccountingStorageEnforce パラメータに対応しています。詳細は Slurm のドキュメントをご確認ください。

Slurm Workload Manager - slurm.conf

オプション項目のため選択しないことも可能です。

試してみた

クラスター作成時に Slurm アカウンティングを有効化

最新バージョンの Slurm 24.11 を選択すると、スケジューラーの設定から Slurm アカウンティングの設定ができます。

  1. クラスターの作成ページで、Slurm バージョン 24.11 以降を選択します
  2. スケジューラー設定セクションで、アカウンティングを有効にします
  3. 必要に応じて保持期間(日数) を設定します
  4. アカウンティングポリシーの適用 ドロップダウンリストから、必要なオプションを選択します

パラレルコンピューティングサービス___ap-northeast-1_🔊.png

今回はアカウンティングポリシーを未設定で PCS クラスターを作成しました。

ログインノードへログインして確認

sacctコマンド使用可能となっています。

$ sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------

ジョブをサブミットしました。sacctコマンドでも確認可能になっています。

$ sbatch -p queue-1 test.sh
Submitted batch job 1

$ sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1               test.sh    queue-1                     1    RUNNING      0:0

最初にサブミットしたジョブは完了して、2 つ目のジョブを処理中であることがわかります。

$ sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
1               test.sh    queue-1                     1  COMPLETED      0:0
1.batch           batch                                1  COMPLETED      0:0
1.extern         extern                                1  COMPLETED      0:0
2               test.sh    queue-1                     1    RUNNING      0:0

AWS 管理のデータベースを追う

データベースは AWS のサービスアカウントで起動しているため、利用者側から存在を確認できません。Slurm の設定情報からなにかわからないか調べてみました。

sacctmgr show configuration の実行結果
$ sacctmgr show configuration
Configuration data as of 2025-05-16T07:17:07
AccountingStorageBackupHost  = (null)
AccountingStorageHost  = 10.0.0.99
AccountingStorageParameters = (null)
AccountingStoragePass  = (null)
AccountingStoragePort  = 6819
AccountingStorageType  = accounting_storage/slurmdbd
AccountingStorageUser  = N/A
AuthType               = auth/slurm
MessageTimeout         = 210 sec
PluginDir              = /opt/aws/pcs/scheduler/slurm-24.11/lib/slurm
PrivateData            = none
SlurmUserId            = slurm(401)
SLURM_CONF             = /etc/slurm/slurm.conf
SLURM_VERSION          = 24.11.5
TCPTimeout             = 2 sec
TrackWCKey             = No

SlurmDBD configuration:
AllowNoDefAcct         = no
ArchiveDir             = /tmp
ArchiveEvents          = no
ArchiveJobs            = no
ArchiveResvs           = no
ArchiveScript          = (null)
ArchiveSteps           = no
ArchiveSuspend         = no
ArchiveTXN             = no
ArchiveUsage           = no
AuthAltTypes           = (null)
AuthAltParameters      = (null)
AuthInfo               = (null)
AuthType               = auth/slurm
BOOT_TIME              = 2025-05-16T05:34:13
CommitDelay            = no
CommunicationParameters = (null)
DbdAddr                = slurmdbd-primary
DbdBackupHost          = (null)
DbdHost                = slurmdbd-primary
DbdPort                = 6819
DebugFlags             = AuditRPCs
DebugLevel             = verbose
DebugLevelSyslog       = (null)
DefaultQOS             = (null)
DisableCoordDBD        = no
HashPlugin             = hash/sha3
LogFile                = /dev/null
MaxQueryTimeRange      = UNLIMITED
MessageTimeout         = 10 secs
Parameters             = DisableArchiveCommands
PidFile                = /var/run/slurmdbd.pid
PluginDir              = /opt/slurm/lib/slurm
PrivateData            = none
PurgeEventAfter        = 180 days
PurgeJobAfter          = 180 days
PurgeResvAfter         = 180 days
PurgeStepAfter         = 180 days
PurgeSuspendAfter      = 180 days
PurgeTXNAfter          = 180 days
PurgeUsageAfter        = 180 days
SLURMDBD_CONF          = /etc/slurm/slurmdbd.conf
SLURMDBD_VERSION       = 24.11.5
SlurmUser              = slurm(401)
StorageAuthTokenPlugin = script
StorageAuthTokenParams = script_path=/etc/slurm/scripts/db_token_gen.sh,token_validity_seconds=300
StorageBackupHost      = (null)
StorageHost            = pcs-n6bosx3ar3-123456798012.cluster-cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com
StorageLoc             = slurm_acct_db
StorageParameters      = SSL_CAPATH=/etc/pki/ca-trust/extracted/pem/directory-hash/
StoragePort            = 3306
StorageType            = accounting_storage/mysql
StorageUser            = slurm
TCPTimeout             = 2 secs
TLSParameters          = (null)
TLSType                = tls/none
TrackWCKey             = no
TrackSlurmctldDown     = no
scontrol show config の実行結果
$ scontrol show config
Configuration data as of 2025-05-16T07:12:42
AccountingStorageBackupHost = (null)
AccountingStorageEnforce = none
AccountingStorageHost   = 10.0.0.99
AccountingStorageExternalHost = (null)
AccountingStorageParameters = (null)
AccountingStoragePort   = 6819
AccountingStorageTRES   = cpu,mem,energy,node,billing,fs/disk,vmem,pages
AccountingStorageType   = accounting_storage/slurmdbd
AccountingStorageUser   = N/A
AccountingStoreFlags    = (null)
AcctGatherEnergyType    = (null)
AcctGatherFilesystemType = (null)
AcctGatherInterconnectType = (null)
AcctGatherNodeFreq      = 0 sec
AcctGatherProfileType   = (null)
AllowSpecResourcesUsage = no
AuthAltTypes            = (null)
AuthAltParameters       = (null)
AuthInfo                = use_client_ids,cred_expire=70
AuthType                = auth/slurm
BatchStartTimeout       = 10 sec
BcastExclude            = /lib,/usr/lib,/lib64,/usr/lib64
BcastParameters         = (null)
BOOT_TIME               = 2025-05-16T06:03:42
BurstBufferType         = (null)
CertmgrParameters       = (null)
CertmgrType             = (null)
CliFilterPlugins        = (null)
ClusterName             = slurm2411-cluster
CommunicationParameters = NoCtldInAddrAny
CompleteWait            = 0 sec
CpuFreqDef              = Unknown
CpuFreqGovernors        = OnDemand,Performance,UserSpace
CredType                = auth/slurm
DataParserParameters    = (null)
DebugFlags              = AuditRPCs,Power
DefMemPerNode           = UNLIMITED
DependencyParameters    = (null)
DisableRootJobs         = no
EioTimeout              = 60
EnforcePartLimits       = ALL
EpilogMsgTime           = 2000 usec
FairShareDampeningFactor = 1
FederationParameters    = (null)
FirstJobId              = 1
GetEnvTimeout           = 2 sec
GresTypes               = gpu
GpuFreqDef              = (null)
GroupUpdateForce        = 1
GroupUpdateTime         = 600 sec
HASH_VAL                = Match
HashPlugin              = hash/sha3
HealthCheckInterval     = 0 sec
HealthCheckNodeState    = ANY
HealthCheckProgram      = (null)
InactiveLimit           = 0 sec
InteractiveStepOptions  = --interactive --preserve-env --pty $SHELL
JobAcctGatherFrequency  = 30
JobAcctGatherType       = jobacct_gather/cgroup
JobAcctGatherParams     = (null)
JobCompHost             = localhost
JobCompLoc              = (null)
JobCompParams           = (null)
JobCompPort             = 0
JobCompType             = (null)
JobCompUser             = root
JobContainerType        = (null)
JobDefaults             = (null)
JobFileAppend           = 0
JobRequeue              = 1
JobSubmitPlugins        = (null)
KillOnBadExit           = 0
KillWait                = 30 sec
LaunchParameters        = (null)
Licenses                = (null)
LogTimeFormat           = rfc5424_ms,format_stderr
MailDomain              = (null)
MailProg                = /bin/mail
MaxArraySize            = 257
MaxBatchRequeue         = 5
MaxDBDMsgs              = 10000
MaxJobCount             = 257
MaxJobId                = 67043328
MaxMemPerNode           = UNLIMITED
MaxNodeCount            = 5
MaxStepCount            = 40000
MaxTasksPerNode         = 512
MCSPlugin               = (null)
MCSParameters           = (null)
MessageTimeout          = 210 sec
MinJobAge               = 300 sec
MpiDefault              = pmix
MpiParams               = (null)
NEXT_JOB_ID             = 3
NodeFeaturesPlugins     = (null)
OverTimeLimit           = 0 min
PluginDir               = /opt/slurm/lib/slurm
PlugStackConfig         = (null)
PreemptMode             = OFF
PreemptParameters       = (null)
PreemptType             = (null)
PreemptExemptTime       = 00:00:00
PrEpParameters          = (null)
PrEpPlugins             = prep/script
PriorityParameters      = (null)
PrioritySiteFactorParameters = (null)
PrioritySiteFactorPlugin = (null)
PriorityDecayHalfLife   = 7-00:00:00
PriorityCalcPeriod      = 00:05:00
PriorityFavorSmall      = no
PriorityFlags           =
PriorityMaxAge          = 7-00:00:00
PriorityType            = priority/multifactor
PriorityUsageResetPeriod = NONE
PriorityWeightAge       = 0
PriorityWeightAssoc     = 0
PriorityWeightFairShare = 0
PriorityWeightJobSize   = 0
PriorityWeightPartition = 0
PriorityWeightQOS       = 0
PriorityWeightTRES      = (null)
PrivateData             = none
ProctrackType           = proctrack/cgroup
PrologEpilogTimeout     = 65534
PrologFlags             = Alloc,Contain
PropagatePrioProcess    = 0
PropagateResourceLimits = ALL
PropagateResourceLimitsExcept = (null)
RebootProgram           = /sbin/reboot
ReconfigFlags           = KeepPartState
RequeueExit             = (null)
RequeueExitHold         = (null)
ResumeFailProgram       = (null)
ResumeProgram           = /etc/slurm/scripts/resume_program.sh
ResumeRate              = 0 nodes/min
ResumeTimeout           = 1800 sec
ResvEpilog              = (null)
ResvOverRun             = 0 min
ResvProlog              = (null)
ReturnToService         = 1
SchedulerParameters     = (null)
SchedulerTimeSlice      = 30 sec
SchedulerType           = sched/backfill
ScronParameters         = (null)
SelectType              = select/cons_tres
SelectTypeParameters    = CR_CPU
SlurmUser               = slurm(401)
SlurmctldAddr           = (null)
SlurmctldDebug          = verbose
SlurmctldHost[0]        = slurmctld-primary(10.0.0.99)
SlurmctldLogFile        = /dev/null
SlurmctldPort           = 6817
SlurmctldSyslogDebug    = (null)
SlurmctldPrimaryOffProg = (null)
SlurmctldPrimaryOnProg  = (null)
SlurmctldTimeout        = 300 sec
SlurmctldParameters     = idle_on_node_suspend,power_save_min_interval=0,node_reg_mem_percent=75,enable_configless,disable_triggers
SlurmdDebug             = info
SlurmdLogFile           = /var/log/slurmd.log
SlurmdParameters        = (null)
SlurmdPidFile           = /var/run/slurm/slurmd.pid
SlurmdPort              = 6818
SlurmdSpoolDir          = /var/spool/slurmd
SlurmdSyslogDebug       = (null)
SlurmdTimeout           = 180 sec
SlurmdUser              = root(0)
SlurmSchedLogFile       = (null)
SlurmSchedLogLevel      = 0
SlurmctldPidFile        = /var/run/slurm/slurmctld.pid
SLURM_CONF              = /etc/slurm/slurm.conf
SLURM_VERSION           = 24.11.5
SrunEpilog              = (null)
SrunPortRange           = 0-0
SrunProlog              = (null)
StateSaveLocation       = /mnt/efs/slurm/statesave
SuspendExcNodes         = login-[1-1],
SuspendExcParts         = (null)
SuspendExcStates        = DYNAMIC_FUTURE,DYNAMIC_NORM
SuspendProgram          = /etc/slurm/scripts/suspend_program.sh
SuspendRate             = 0 nodes/min
SuspendTime             = 60 sec
SuspendTimeout          = 60 sec
SwitchParameters        = (null)
SwitchType              = (null)
TaskEpilog              = (null)
TaskPlugin              = task/cgroup,task/affinity
TaskPluginParam         = (null type)
TaskProlog              = (null)
TCPTimeout              = 2 sec
TLSParameters           = (null)
TLSType                 = tls/none
TmpFS                   = /tmp
TopologyParam           = RoutePart
TopologyPlugin          = topology/default
TrackWCKey              = no
TreeWidth               = 16
UsePam                  = no
UnkillableStepProgram   = (null)
UnkillableStepTimeout   = 1050 sec
VSizeFactor             = 0 percent
WaitTime                = 0 sec
X11Parameters           = (null)

Cgroup Support Configuration:
AllowedRAMSpace         = 100.0%
AllowedSwapSpace        = 0.0%
CgroupMountpoint        = /sys/fs/cgroup
CgroupPlugin            = autodetect
ConstrainCores          = yes
ConstrainDevices        = no
ConstrainRAMSpace       = yes
ConstrainSwapSpace      = no
EnableControllers       = no
IgnoreSystemd           = no
IgnoreSystemdOnFailure  = no
MaxRAMPercent           = 100.0%
MaxSwapPercent          = 100.0%
MemorySwappiness        = (null)
MinRAMSpace             = 30MB
SystemdTimeout          = 1000 ms

MPI Plugins Configuration:
PMIxCliTmpDirBase       = (null)
PMIxCollFence           = (null)
PMIxDebug               = 0
PMIxDirectConn          = yes
PMIxDirectConnEarly     = no
PMIxDirectConnUCX       = no
PMIxDirectSameArch      = no
PMIxEnv                 = (null)
PMIxFenceBarrier        = no
PMIxNetDevicesUCX       = (null)
PMIxTimeout             = 300
PMIxTlsUCX              = (null)

Slurmctld(primary) at slurmctld-primary is UP

Aurora が同じリージョンに起動している

DB のホスト名が確認できました。アカウント ID を付与した名前で同リージョンに Aurora MySQL が起動していました。MySQL のバージョンアップも AWS PCS 側でやってくれるのでしょうから、手間が減って嬉しいです。

StorageHost            = pcs-n6bosx3ar3-123456798012.cluster-cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com
StorageLoc             = slurm_acct_db
StorageParameters      = SSL_CAPATH=/etc/pki/ca-trust/extracted/pem/directory-hash/
StoragePort            = 3306
StorageType            = accounting_storage/mysql
StorageUser            = slurm

RDS 自体は別のネットワークありますね。クラスター名で名前解決すると.instance1.という名前を確認できました。

$ nslookup pcs-n6bosx3ar3-123456789012.cluster-cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com
Server:		10.0.0.2
Address:	10.0.0.2#53

Non-authoritative answer:
pcs-n6bosx3ar3-123456789012.cluster-cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com	canonical name = pcs-n6bosx3ar3-123456789012-instance1.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com.
Name:	pcs-n6bosx3ar3-123456789012-instance1.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com
Address: 172.35.2.29

調べてみると、DB インスタンスは 2 台起動していることは確認できました。172.35.0.0/16でサブネットも分かれているようなので、マルチ AZ で冗長化されているような感じはします。

$ nslookup pcs-n6bosx3ar3-123456789012-instance1.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com.
Server:		10.0.0.2
Address:	10.0.0.2#53

Non-authoritative answer:
Name:	pcs-n6bosx3ar3-123456789012-instance1.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com
Address: 172.35.2.29

$ nslookup pcs-n6bosx3ar3-123456789012-instance2.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com.
Server:		10.0.0.2
Address:	10.0.0.2#53

Non-authoritative answer:
Name:	pcs-n6bosx3ar3-123456789012-instance2.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com
Address: 172.35.1.153

$ nslookup pcs-n6bosx3ar3-123456789012-instance3.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com.
Server:		10.0.0.2
Address:	10.0.0.2#53

** server can't find pcs-n6bosx3ar3-123456789012-instance3.cb3gw4xyrzpt.ap-northeast-1.rds.amazonaws.com.: NXDOMAIN

調査結果

AWS 管理の Slurm アカウンティングデータベースは、Aurora MySQL がマルチ AZ 冗長化構成で 2 台起動している様子でした。

PCS-24.11(1) (1).png

まとめ

AWS PCS で Slurm アカウンティングをサポートしました。マネージドサービスの AWS PCS なので、データベースの管理も利用者側は不要の親切設計でした。

おわりに

ジョブの実行履歴が保存できないなどの理由で Slurm アカウンティング非対応の AWS PCS を見送り、AWS ParallelCluster を利用していたユーザーにとってはありがたいアップデートでした。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.