AWS ParallelCluster で Slurm パーティションの状態を inactive から up へ強制変更する方法
はじめに
AWS ParallelCluster を運用していると、Slurm のパーティションがなんらかの原因で inactive 状態になることがあります。この状態ではジョブが投入できなくなり、クラスターの運用に支障をきたします。本記事では inactive 状態のパーティションを up 状態に強制的に戻す方法を紹介します。この方法は根本原因の解決ではありませんが、問題切り分けの第一歩として役立ちます。
以下は inactive 状態のパーティションを sinfo コマンドで確認した例です。
$ 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
コマンドでパーティションの状態を確認します。
$ 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 状態に変更され、ジョブが実行可能になりました。
$ 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 自体に問題を抱えていたので少し毛色が異なりますがご参考までに。
本記事が皆様のクラスター運用の一助となれば幸いです。