AWS ParallelCluster のクラスター間でジョブ履歴を共有する方法

AWS ParallelCluster のクラスター間でジョブ履歴を共有する方法

Clock Icon2025.04.30

はじめに

AWS ParallelCluster で Slurm アカウンティングを利用する際、クラスターが変わると過去のジョブ履歴がsacctコマンドで参照できなくなることがあります。この問題は Slurm のコンフィグで指定するデータベース名の設定が関係しています。本記事では、複数のクラスター間でジョブ履歴を共有する方法について解説します。

問題の背景

ParallelCluster を運用していると、ParallelCluster のバージョンアップデートによりクラスターの再作成が必要になります。新しいクラスターへ移行しても同じ DB サーバーを継続して利用することがあります。しかし、新しいクラスターからは、以前のクラスターで実行した過去のジョブ履歴が見られなくなります。

クラスターとデータベースの関係

具体的には、sacctコマンドを実行しても、以前のクラスターで実行したジョブの履歴が表示されません。

sacctコマンドで過去の履歴が見えない

原因

ParallelCluster がクラスターごとに異なるデータベース名を作成することに起因します。

ParallelCluster の設定では、Slurm のアカウンティングデータベースとして、デフォルトでクラスター名がデータベース名(StorageLoc)として使用されます。そのため、クラスター名が変わると、同じ DB サーバーへ接続していても新しいデータベース名として作成されます。過去のジョブ履歴が別のデータベース名で保存されているため参照できません。

解決策

すべてのクラスターで同じデータベース名を使用するよう設定します。ParallelCluster の設定ファイルで、Slurm アカウンティングのデータベース名を明示的に指定することで、クラスターが変わっても影響がなくなります。

同じデータベース名を使用する設定

設定方法

ParallelCluster の設定ファイルで、以下のようにDatabaseNameでデータベース名を指定します。

Scheduling:
  Scheduler: slurm
  SlurmSettings:
    ScaledownIdletime: 10
    Database:
      Uri: devio.cluster-xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com:3306
      UserName: admin
      PasswordSecretArn: arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:devio-hoge
      DatabaseName: "slurm_acct_db" # データベース名の設定は任意

この設定により、/opt/slurm/etc/slurm_parallelcluster_slurmdbd.confファイルのStorageLocパラメータに同じ値が設定されます。

動作確認

設定が正しく適用されたか確認するため、複数のクラスターでジョブを実行して履歴を確認します。

ジョブを実行した後、sacctコマンドを使って履歴を確認します。デフォルトでは現在のクラスターのジョブのみ表示されます。

$ sacct
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
4              cluster2       test  pcdefault          1    RUNNING      0:0

すべてのクラスターのジョブ履歴を表示するには、-Lオプションを使用します。これにより、他のクラスターで実行されたジョブも含めて全ての履歴が表示されます。

$ sacct -L
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
3              cluster1       test  pcdefault          1    RUNNING      0:0
4              cluster2       test  pcdefault          1    RUNNING      0:0

クラスター指定での確認

特定のクラスターのジョブ履歴のみを確認したい場合は、--clusterオプションを使用します。

# cluster1のジョブのみ表示
$ sacct --cluster v1
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
3              cluster1       test  pcdefault          1    RUNNING      0:0

# cluster2のジョブのみ表示
$ sacct --cluster v2
JobID           JobName  Partition    Account  AllocCPUS      State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
4              cluster2       test  pcdefault          1    RUNNING      0:0

この結果から、同じデータベース名を設定することで、異なるクラスターのジョブ履歴を一元的に管理・確認できることが確認できます。これにより、クラスターの世代が変わっても過去のジョブ履歴を参照可能です。

少し深堀り

Slurm のデータベース設定

Slurm の公式ドキュメントによると、StorageLocパラメータはアカウンティングレコードが書き込まれるデータベースの名前を指定します。デフォルトは"slurm_acct_db"です。

StorageLoc
Specify the name of the database as the location where accounting records are written.
Defaults to "slurm_acct_db".
引用: https://slurm.schedmd.com/slurmdbd.conf.html#OPT_StorageLoc

ParallelCluster の仕様

ParallelCluster は、各クラスターが独自の Slurm データベースを持つようにslurmdbdを設定します。同じ DB サーバーを複数のクラスターで使用できますが、デフォルトではクラスターごとに別々のデータベース名が作成されます。

AWS ParallelCluster のドキュメントには以下のように記載されています。

AWS ParallelCluster configures slurmdbd to ensure that a cluster has its own Slurm database on the database server.
The same database server can be used across multiple clusters, but each cluster has its own separate database.
AWS ParallelCluster uses the cluster name to define the name for the database in the slurmdbd configuration file StorageLoc parameter.
引用: https://docs.aws.amazon.com/parallelcluster/latest/ug/slurm-accounting-v3.html

設定ファイルの例

クラスターのコンフィグで指定した設定値は、ヘッドノードの以下の設定ファイルに書き込まれます。

/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
DbdHost=ip-10-0-0-245
StorageHost=devio.ap-northeast-1.rds.amazonaws.com
StoragePort=3306
StorageLoc=slurm_acct_db
StorageUser=admin
StoragePass=hoge

クラスターの設定ファイルのDabaseNameは、クラスター作成後に変更可能なアップデートポリシーです。

参考: Scheduling section - AWS ParallelCluster

まとめ

AWS ParallelCluster の Slurm アカウンティングでクラスター移行後も過去のジョブ履歴を確認するには以下の点がポイントです。

  1. 複数のクラスターで同じジョブ履歴を参照したい場合は、共通のデータベース名を設定する
  2. ParallelCluster 設定ファイルでデータベース名を明示的に指定する

この設定によりクラスターの世代が変わっても、sacctコマンドから過去のジョブ履歴を一元的に確認できるようになります。

おわりに

お客様から質問があり調査した記録をまとめました。複数クラスター間でのジョブ履歴共有に関するベストプラクティスを整理し、解説ブログを書く予定です。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.