hyperpod-slurm-debugger について
HyperPod Slurm クラスターのスケジューラーとノードデーモンの問題を診断する、読み取り専用のスキルです。ノード、コントローラー、リソース計上、自動再開に関する検出結果を分類し、状態変更を行わずに AWS または Slurm の資料へ案内します。
主な機能
- 01読み取り専用の Slurm 診断
- 02ノードとコントローラー状態の確認
- 03リソース計上と RPC の問題特定
- 04自動再開が機能しない原因の確認
- 05検出結果を公式資料に対応付け
活用シーン
- 01down または drain 状態のノード調査
- 02PENDING または COMPLETING で止まるジョブの診断
- 03GPU リソース数の誤りの確認
- 04ハードウェア障害後に再開しないジョブの分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ awslabs/ agent-plugins --skill hyperpod-slurm-debuggerインストール後、Claude Code で/hyperpod-slurm-debuggerを入力して読み込まれたか確認します。
同梱ファイルreferences/slurm-details.mdscripts/slurm-diagnose.sh
詳細
HyperPod Slurm デバッガー
診断専用です。HyperPod Slurm クラスターの Slurm スケジューラーとノードデーモンの問題を特定し、分類します。状態を変更するコマンドは実行、推奨、出力しないでください。修復方法については、AWS または Slurm の公式ドキュメントへのリンクを提示してください。
呼び出すタイミング
ユーザーが判断表に記載された症状を報告した場合に呼び出します。
呼び出さないタイミング
- クラスターが
Orchestrator.Eksの場合は、hyperpod-node-debuggerまたはhyperpod-ncclを呼び出します。 - Slurm スケジューラーが正常な状態で発生した単一ノードのハードウェア障害の場合は、
hyperpod-node-debuggerを呼び出します。 - NCCL のトレーニングハングを調査する場合は、
hyperpod-ncclを呼び出します。 - SSM 経由でノードに到達できない場合は、
hyperpod-ssmを呼び出します。
制約
- 読み取り専用です。状態を変更するコマンドは実行、推奨、出力しないでください。
- 修復方法を提示する場合は、AWS または Slurm のドキュメントへのリンクを示してください。実行するかどうかはユーザーが判断し、実行します。
- IaC 管理のクラスター(Terraform/CloudFormation/CDK)の場合、直接変更すると、ライブ状態が IaC プランと乖離することを警告してください。
正式な復旧 URL: references/slurm-details.md → 正式な復旧ドキュメント。
前提条件
- AWS CLI v2。対象アカウントとリージョンで認証され、次の権限があること:
sagemaker:DescribeCluster、sagemaker:ListClusterNodes- HyperPod が作成した SSM ドキュメントに対する
ssm:StartSession
- Session Manager プラグイン がローカルにインストールされていること。
jq≥ 1.6。unbuffer(expectパッケージに含まれます)。必須です。これがない場合、aws ssm start-sessionがCannot perform start session: EOFとともに空の標準出力を断続的に返し、すべてのチェックが誤った結果を黙って報告します。インストール方法:Amazon Linux/RHEL/Debian/ Ubuntu/macOS ではexpectパッケージを使用します。不足している場合、スクリプトは前提条件のチェック時に終了します。
手順
ステップ 1 — 入力情報を収集する
ユーザーに次の情報を尋ねます。
- HyperPod クラスター名(Slurm パーティション名ではありません)。
- AWS リージョン。
- 任意:特定の Slurm ノード名。
ステップ 2 — オーケストレーターを確認する
aws sagemaker describe-cluster --cluster-name <NAME/ARN> --region <REGION> \
--query 'Orchestrator' --output json
Orchestrator.Eks が存在する場合は停止します。呼び出さないタイミングに従って振り分けてください。
ステップ 3 — 診断スクリプトを実行する
bash scripts/slurm-diagnose.sh --cluster <NAME> --region <REGION>
# Scope to a node:
bash scripts/slurm-diagnose.sh --cluster <NAME> --region <REGION> --node <SLURM_NODE>
スクリプトの出力をそのままユーザーに伝えます。
ステップ 4 — 検出結果 → ドキュメントの対応付け
検出結果ごとに、判断表で該当するセクションを確認し、対応する AWS/Slurm ドキュメントへのリンクをユーザーに提示します。修復コマンドを記載しないでください。
判断表
症状(sinfo -o "%N %T %30E" またはスクリプトの検出結果) | セクション |
|---|---|
ノードの状態 = down または down*、理由は以下に該当しない | A: ノードダウン |
ノードの状態 = down*、理由 = Node unexpectedly rebooted | B: 予期しない再起動 |
ノードがアイドル状態なのに、ジョブが REASON=Resources で PENDING | C: コントローラーの状態 |
ノードの置換後、ジョブが COMPLETING のまま停止している | C: コントローラーの状態 |
scontrol ping でコントローラーが DOWN と返される | C: コントローラーの状態 |
| GRES(GPU)の数が不正、または解放されない | C: コントローラーの状態 |
state=fail が指定されたが、復旧しなかった | D: アクション理由の不一致 |
dbd に関する会計エラーまたは RPC エラー | C: コントローラーの状態(slurmdbd) |
slurm.conf を編集したが、新しいパーティションまたはノードが表示されない | C: コントローラーの状態(設定) |
| ハードウェア障害でジョブが終了したが、再起動されなかった | E: 自動再開 |
デフォルト設定
| 動作 | デフォルト | 上書き |
|---|---|---|
| モード | 常に読み取り専用 — 修復フラグはありません | 該当なし |
| リージョン | $AWS_DEFAULT_REGION。設定されていない場合は us-east-1 | --region <R> |
| 対象範囲 | down / drain / fail /「予期せず再起動した」状態にあるすべてのノード | --node <SLURM_NODE_NAME> |
| 出力 | 色付きのターミナル出力 | --no-color |
| SSM ターゲット形式 | sagemaker-cluster:<clusterId>_<instanceGroupName>-<instanceId>(導出) | 該当なし |
| コントローラーの検出 | --controller-group(設定されている場合)→ SlurmConfig.NodeType=Controller → provisioning_parameters.json | --controller-group <N> |
エラー処理
| 失敗 | スキルの動作 | 必要なユーザー操作 |
|---|---|---|
describe-cluster が失敗した場合 | AWS エラーを出力し、終了コード 1 で終了 | 認証情報/リージョンを修正し、クラスター名を確認する |
クラスターに Orchestrator.Eks がある場合 | EKS 側のスキルを案内して終了コード 1 で終了 | hyperpod-node-debugger または hyperpod-nccl を使用する |
session-manager-plugin が見つからない/SSM に到達できない場合 | sinfo が空を返し、終了コード 1 で終了 | プラグインをインストールし、ノードが InService であることを確認する |
down ノードのディスク使用率が 95 % 以上の場合 | 検出結果 disk-full-<node> を報告する | AWS のトラブルシューティングドキュメントを参照する |
jq または aws が見つからない場合 | 前提条件の確認時に終了コード 1 で終了 | 前提条件 に従ってインストールする |
A: ノード停止
slurmd が応答を停止したため、ノードは down になっています。原因:slurmd のクラッシュ、ディスクの空き容量不足、OOM、ネットワークの分断、ハードウェア障害。
スクリプトによる確認項目:systemctl is-active slurmd、srun -w <NODE> hostname(RPC 層)、ディスク、メモリ。
手動で再開した後にノードが再び down になる場合は、hyperpod-node-debugger にエスカレーションしてください。
コンテキスト:references/slurm-details.md § A。
B: 予期しない再起動
帯域外の再起動後に slurmd が再登録されたため、ノードは Reason "Node unexpectedly rebooted" を伴う down* 状態になっています。これは HyperPod ではなく、Slurm の上流の動作です。通常、ノードは正常です。
リンク:
- https://github.com/aws/sagemaker-hyperpod-cluster-setup/blob/troubleshooting-doc-20250917/troubleshoot/index.md
- https://slurm.schedmd.com/scontrol.html(
state=resumeの動作)
数分以内にノードが再び再起動する場合は、hyperpod-node-debugger にエスカレーションしてください。
コンテキスト:references/slurm-details.md § B。
C: コントローラーの状態
slurmctld のメモリー内状態は、ディスク上の状態と不整合になることがあります。コントローラーを再起動すると、StateSaveLocation から再読み込みされ、不正なキャッシュがクリアされます。実施するかどうかの判断と実行はユーザーが行います。
再起動が役立つ可能性がある症状:
| 症状 | 理由 |
|---|---|
PENDING で REASON=Resources、ノードはアイドル状態 | キューを再評価します |
ノード交換後にジョブが COMPLETING のまま停止する | コントローラーが古いノードへの参照を保持しています |
| ジョブ終了後に GRES(GPU、EFA)が解放されない | リソースのアカウンティングに不整合が生じています |
再起動後にノードが Unknown のままで、slurmd は稼働中 | 再登録が処理されていません |
scontrol ping がタイムアウトする | コントローラーのイベントループがハングしています |
slurmdbd との接続が失われる/RPC エラーが発生する | DBD 接続が停止しています |
次の場合は再起動しないでください:
- いずれかのノードで HyperPod の交換(
Action:Replace)が進行中 — 同時変更により 交換が失敗します。 - 問題があるのが 1 台のコンピュートノードだけ — そのノードの
slurmdを再起動してください。 sinfoとsqueueが応答する — 問題は別の場所にあります。journalctl -u slurmctldをまだ確認していない — panic/OOM は再発します。slurm.confを編集したばかり — まずscontrol reconfigureを試してください。
折りたたまれたトリガー
- slurmdbd の切断 —
sacctが失敗し、アカウンティングフィールドにUnknownと表示され、 コントローラーログにUnable to contact slurmdbdが繰り返し出力されます。コントローラーの再起動を 検討する前に、slurmdbdを復旧してください。 https://slurm.schedmd.com/accounting.html · 詳細。 - 古い設定 —
slurm.conf/topology.confの mtime が slurmctld の起動時刻より新しい。 まずscontrol reconfigureを実行してください。再起動は最後の手段です。 https://slurm.schedmd.com/scontrol.html · 詳細。
再起動手順/保持される内容:
- https://slurm.schedmd.com/slurmctld.html
- https://github.com/aws/sagemaker-hyperpod-cluster-setup/blob/troubleshooting-doc-20250917/troubleshoot/index.md
コンテキスト:references/slurm-details.md § C。
D: アクション理由の不一致
reason が Action:Reboot または Action:Replace と完全一致しない状態で、
scontrol update state=fail reason=... が実行されました。HyperPod はそれ以外の値を黙って無視します。
スクリプトは fail 状態のノードについて、わずかに異なる値を検出します。
必要な文字列(大文字と小文字を区別、空白なし、句読点なし):
Action:RebootAction:Replace
コンテキスト:references/slurm-details.md § Action reason-string validation。
E: 自動再開
--auto-resume=1 は srun のステップオプションです。HMA(Health Monitoring Agent)がノードにフラグを設定し、
Automatic node recovery によってノードが交換された後、ステップを再実行します。
ジョブが再起動されなかった理由:
- フラグが
srunではなくsbatchに指定されている — ステップごとの設定です。sbatchディレクティブは黙って無視されます。 - HMA がノードにフラグを設定していない — 障害はハードウェアではなく、アプリケーションまたは一時的なものです。ステップは通常の Slurm 障害として終了します。
- クラスターの
NodeRecoveryがNone— 故障したノードにはラベルが付けられますが、交換されません。 - チェックポイント処理がない — ステップは反復のたびにプロセスの最初から再開されます。
- AMI が HMA サポート(2025-09-11 リリース)より古い — AMI/クラスターソフトウェアの更新が必要です。
リンク:https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-resiliency-slurm-auto-resume.html
コンテキスト:references/slurm-details.md § HyperPod auto-resume。
エスカレーション
| 条件 | 次のスキル |
|---|---|
手動で再開した直後にノードが再び down になる | hyperpod-node-debugger(ハードウェア) |
slurmd のログに CUDA / NVIDIA / XID エラーが含まれる | hyperpod-node-debugger § G |
ディスクが満杯、または /dev/shm が枯渇している | hyperpod-node-debugger § I |
| SSM 経由でノードに到達できない | hyperpod-ssm |
2 回試してもコントローラーの再起動で COMPLETING が解消されない | hyperpod-issue-report + AWS Support |