AWS ParallelCluster で Slurm パーティションの状態を inactive から up へ強制変更する方法

AWS ParallelCluster で Slurm パーティションの状態を inactive から up へ強制変更する方法

Clock Icon2025.02.25

はじめに

AWS ParallelCluster を運用していると、Slurm のパーティションがなんらかの原因で inactive 状態になることがあります。この状態ではジョブが投入できなくなり、クラスターの運用に支障をきたします。本記事では inactive 状態のパーティションを up 状態に強制的に戻す方法を紹介します。この方法は根本原因の解決ではありませんが、問題切り分けの第一歩として役立ちます。

以下は inactive 状態のパーティションを sinfo コマンドで確認した例です。

bash
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
test*        up   infinite     10  idle~ test-dy-test-[1-10]
+ gpu1      inact   infinite     10  idle~ gpu1-dy-gpu1-[1-10]

解決策

AWS ParallelCluster で Slurm パーティションが inactive 状態になった場合、以下のコマンドで強制的に up 状態に戻せます。

sudo /opt/slurm/bin/scontrol update partition=[パーティション名] state=up

このコマンドは管理者権限で Slurm パーティションの状態を強制的に変更します。

絶対パス指定の背景

ParallelCluster のヘッドノードでは、単純に sudo scontrol を実行すると次のエラーが発生します。

$ sudo scontrol update partition=gpu1 state=up
sudo: scontrol: command not found

このエラーが発生する理由は環境変数の違いにあります。sudo コマンドが参照するパス(secure_path)に /opt/slurm/bin が含まれていないのです。

$ sudo cat /etc/sudoers | grep "secure_path"
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

通常のユーザーは /opt/slurm/bin が PATH に含まれています。

$ echo $PATH
/opt/amazon/openmpi/bin:/opt/amazon/efa/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/aws/bin:/opt/parallelcluster/pyenv/versions/3.9.20/envs/awsbatch_virtualenv/bin:/opt/slurm/bin

このパスの違いにより、絶対パスでの指定が必要になります。

実際に対応したときの様子

実際に私が切り分け対応していた例を紹介します。

gpu1 パーティションの コンピュートノード(EC2 インスタンス)が起動と終了を繰り返していました。その結果、gpu1 パーティションが inactive 状態になってしまいました。問題の切り分けのためにコンピュートノードを起動して終了する前にセッションマネージャーでログインしてコマンドを打ちたかったです。パーティションの状態を強制的に変更して起動だけでもできないかと考えました。

状態確認

まず、sinfoコマンドでパーティションの状態を確認します。

bash
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
test*        up   infinite     10  idle~ test-dy-test-[1-10]
+ gpu1      inact   infinite     10  idle~ gpu1-dy-gpu1-[1-10]

この inactive 状態ではジョブのサブミットができません。

$ sbatch -p gpu1 test.sh
sbatch: error: Batch job submission failed: Required partition not available (inactive or drain)

強制的にアクティブ状態(up)に戻してみる

絶対パスを使用してscontrolコマンドを実行し、gpu1 パーティションを強制的に up 状態にします。

$ sudo /opt/slurm/bin/scontrol update partition=gpu1 state=up

結果確認

コマンド実行後、パーティションが up 状態に変更され、ジョブが実行可能になりました。

bash
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
test*        up   infinite     10  idle~ test-dy-test-[1-10]
+ gpu1         up   infinite      1   mix~ gpu1-dy-gpu1-1
+ gpu1         up   infinite      9  idle~ gpu1-dy-gpu1-[2-10]

ステータスは CT(CONFIGURING)であり、コンピュートノードの起動待ちとなっています。ひとまずジョブをサブミットできてコンピュートノードの起動処理を要求するところまでは可能になりました。

$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 2      gpu1  test.sh   ubuntu CF       0:08      1 gpu1-dy-gpu1-1

まとめ

AWS ParallelCluster で Slurm パーティションが inactive 状態になった場合、絶対パスを使用した scontrol コマンドで強制的に up 状態へ変更できます。

sudo /opt/slurm/bin/scontrol update partition=[パーティション名] state=up

おわりに

本記事では AWS ParallelCluster における Slurm パーティションの inactive 状態からの復旧方法を紹介しました。この方法はあくまで応急処置であり、根本的な原因調査と対応が必要です。

ParallelCluster の運用においては、コンピュートノードの起動失敗やネットワーク問題など、様々な要因でパーティションが inactive になる可能性があります。CloudWatch Logs のログの確認し、根本原因を特定することをお勧めします。

以前にも似たような問題がありました。ParallelCluster 自体に問題を抱えていたので少し毛色が異なりますがご参考までに。

https://dev.classmethod.jp/articles/aws-parallelcluster-force-state-change/

本記事が皆様のクラスター運用の一助となれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.