🖥️hyperpod-ssm
- プラグイン
- sagemaker-ai
- ソース
- GitHub で見る ↗
説明
AWS Systems Manager (SSM) を介した SageMaker HyperPod クラスターノードへのリモートコマンド実行およびファイル転送。 これは HyperPod ノードにアクセスするための主要なインターフェースであり、直接 SSH によるアクセスは利用できません。 次のような場合に使用: クラスターノードでのコマンド実行、ノードへのファイルアップロード、ノードからのファイル読み取り/ダウンロード、診断の実行、パッケージのインストール、または HyperPod インスタンスへのシェルアクセスを必要とする任意の操作を、スキル・ワークフロー・ユーザーのいずれかが必要とする場合。 他の HyperPod スキルは、ノードレベルのすべての操作においてこのスキルに依存しています。
原文を表示
Remote command execution and file transfer on SageMaker HyperPod cluster nodes via AWS Systems Manager (SSM). This is the primary interface for accessing HyperPod nodes — direct SSH is not available. Use when any skill, workflow, or user request needs to execute commands on cluster nodes, upload files to nodes, read/download files from nodes, run diagnostics, install packages, or perform any operation requiring shell access to HyperPod instances. Other HyperPod skills depend on this skill for all node-level operations.
ユースケース
- ✓クラスターノードでコマンド実行
- ✓ノードへのファイルアップロード
- ✓ノードからのファイルダウンロード
- ✓診断を実行するとき
- ✓パッケージをインストール
本文(日本語訳)
HyperPod SSM アクセス
前提条件
awsCLI v2 — 対象アカウント/リージョンで認証済みであること。session-manager-plugin— AWS CLI と併せてインストールされていること。jq— スクリプトが JSON ペイロードの構築に使用する。unbuffer(expectパッケージに含まれる) —aws ssm start-sessionを PTY でラップし、session-manager-plugin が終了を急ぐことなく stdout をフラッシュできるようにする。 これがないと、コマンド自体は正常に実行されているにもかかわらず、Cannot perform start session: EOFとともに空の出力が断続的に返される場合がある。 インストールはsudo yum install expect、sudo apt install expect、またはbrew install expectで行う。ssm-exec.shは自動的に検出して使用し、見つからない場合は警告を出してフォールバックする。
SSM ターゲットの形式
ターゲット: sagemaker-cluster:<CLUSTER_ID>_<GROUP_NAME>-<INSTANCE_ID>
CLUSTER_ID: クラスター ARN の末尾セグメント(クラスター名ではない)。get-cluster-info.shで取得する。GROUP_NAME: インスタンスグループ名 —list-nodes.shで取得する。INSTANCE_ID: EC2 インスタンス ID(例:i-0123456789abcdef0)
スクリプト
scripts/ 配下に 3 つのスクリプトがある。
クラスター情報とノード情報は一度だけ解決し、その後はノードごとにコマンドを実行する。
get-cluster-info.sh — クラスター名 → ID の解決(一度だけ呼び出す)
scripts/get-cluster-info.sh CLUSTER_NAME [--region REGION]
# 出力例: {"cluster_id":"...","cluster_arn":"...","cluster_name":"...","region":"..."}
list-nodes.sh — 全ノードをページネーション付きで一覧表示(一度だけ呼び出す)
scripts/list-nodes.sh CLUSTER_NAME [--region REGION] [--instance-group GROUP] [--instance-id ID]
# 出力例: ClusterNodeSummary の JSON 配列(InstanceId, InstanceGroupName, InstanceStatus など)
list-cluster-nodes は 100 ノード単位でページネーションされる。このスクリプトはページネーションを自動的に処理する。
ssm-exec.sh — ノード上でコマンドを実行(ノードごとに呼び出す)
# 実行 — 構築済みターゲットを使用
scripts/ssm-exec.sh --target "sagemaker-cluster:CLUSTERID_GROUP-INSTANCEID" 'command' [--region REGION]
# 実行 — 各パーツを個別に指定
scripts/ssm-exec.sh --cluster-id ID --group GROUP --instance-id INSTANCE_ID 'command' [--region REGION]
# アップロード
scripts/ssm-exec.sh --target TARGET --upload LOCAL_PATH REMOTE_PATH [--region REGION]
# リモートファイルの読み取り
scripts/ssm-exec.sh --target TARGET --read REMOTE_PATH [--region REGION]
多数のノードへの一括コマンド実行
SSM の start-session レート制限: アカウントあたり 3 TPS。
バッチサイズと実行間隔はこの制限を考慮して計画すること。
aws ssm send-command は sagemaker-cluster: ターゲットをサポートしていない — start-session のみが使用可能。
SSM コマンドの手動実行
スクリプトが適さない場合は、AWS-StartNonInteractiveCommand を使用して aws ssm start-session を直接呼び出す。
すべての呼び出しを unbuffer でラップすること — これがないと stdout が断続的に空になる(「前提条件」を参照)。
cat > /tmp/cmd.json << 'EOF'
{"command": ["bash -c 'echo hello && whoami'"]}
EOF
unbuffer aws ssm start-session \
--target sagemaker-cluster:{CLUSTER_ID}_{GROUP_NAME}-{INSTANCE_ID} \
--region REGION \
--document-name AWS-StartNonInteractiveCommand \
--parameters file:///tmp/cmd.json
--parametersには必ず JSON ファイルを使用すること — インラインパラメーターは特殊文字が含まれると正常に動作しない。- ドキュメントの
commandパラメーターはシェルへの入力ではなく argv として扱われる。パイプ、セミコロン、リダイレクトを含む複数ステートメントのスクリプトはbash -c '...'でラップして評価させること。
よく使う診断コマンド
| タスク | コマンド |
|---|---|
| ライフサイクルログ | cat /var/log/provision/provisioning.log |
| メモリ使用状況 | free -h |
| ディスク/マウント | df -h && lsblk |
| GPU ステータス | nvidia-smi |
| GPU メモリ | nvidia-smi --query-gpu=memory.used,memory.total --format=csv |
| EFA/ネットワーク | fi_info -p efa |
| CloudWatch agent | sudo systemctl status amazon-cloudwatch-agent |
| プロセス上位表示 | ps aux --sort=-%mem | head -20 |
重要な注意事項
- SSM 非インタラクティブモードのデフォルトユーザーは
root。 - SSM レート制限: アカウントあたり 3 TPS。
- インタラクティブセッションが必要な場合(まれ)は、
--document-nameを省略するとシェルが起動する。 AWS-StartNonInteractiveCommand経由では、vim や top などのインタラクティブなコマンドはサポートされない。- 出力が大きい場合、SSM によって切り捨てられる可能性がある。
- 一般的なエラーのトラブルシューティングについては references/troubleshooting.md を参照。
原文(English)を表示
HyperPod SSM Access
Prerequisites
awsCLI v2, authenticated for the target account/Region.session-manager-plugin— installed alongside the AWS CLI.jq— the scripts build JSON payloads with it.unbuffer(from theexpectpackage) — wrapsaws ssm start-sessionwith a PTY so the session-manager-plugin flushes stdout instead of racing to close. Without it, calls intermittently return empty output withCannot perform start session: EOFeven when the command ran. Install withsudo yum install expect,sudo apt install expect, orbrew install expect.ssm-exec.shdetects and uses it automatically; falls back with a warning if missing.
SSM Target Format
Target: sagemaker-cluster:<CLUSTER_ID>_<GROUP_NAME>-<INSTANCE_ID>
CLUSTER_ID: Last segment of cluster ARN (NOT the cluster name). Extract viaget-cluster-info.sh.GROUP_NAME: Instance group name — retrieve vialist-nodes.sh.INSTANCE_ID: EC2 instance ID (e.g.,i-0123456789abcdef0)
Scripts
Three scripts under scripts/. Resolve cluster info and nodes once, then execute per node.
get-cluster-info.sh — Resolve cluster name → ID (call once)
scripts/get-cluster-info.sh CLUSTER_NAME [--region REGION]
# Output: {"cluster_id":"...","cluster_arn":"...","cluster_name":"...","region":"..."}
list-nodes.sh — List all nodes with pagination (call once)
scripts/list-nodes.sh CLUSTER_NAME [--region REGION] [--instance-group GROUP] [--instance-id ID]
# Output: JSON array of ClusterNodeSummaries (InstanceId, InstanceGroupName, InstanceStatus, etc.)
list-cluster-nodes paginates at 100 nodes. This script handles pagination automatically.
ssm-exec.sh — Execute command on a node (call per node)
# Execute — with pre-built target
scripts/ssm-exec.sh --target "sagemaker-cluster:CLUSTERID_GROUP-INSTANCEID" 'command' [--region REGION]
# Execute — with parts
scripts/ssm-exec.sh --cluster-id ID --group GROUP --instance-id INSTANCE_ID 'command' [--region REGION]
# Upload
scripts/ssm-exec.sh --target TARGET --upload LOCAL_PATH REMOTE_PATH [--region REGION]
# Read remote file
scripts/ssm-exec.sh --target TARGET --read REMOTE_PATH [--region REGION]
Running Commands Across Many Nodes
SSM start-session rate limit: 3 TPS per account. Plan batch size and delay accordingly.
aws ssm send-command does NOT support sagemaker-cluster: targets — only start-session works.
Manual SSM Commands
When the scripts aren't suitable, use aws ssm start-session directly with AWS-StartNonInteractiveCommand. Wrap every invocation in unbuffer — without it, stdout is intermittently empty (see Prerequisites).
cat > /tmp/cmd.json << 'EOF'
{"command": ["bash -c 'echo hello && whoami'"]}
EOF
unbuffer aws ssm start-session \
--target sagemaker-cluster:{CLUSTER_ID}_{GROUP_NAME}-{INSTANCE_ID} \
--region REGION \
--document-name AWS-StartNonInteractiveCommand \
--parameters file:///tmp/cmd.json
- Always use a JSON file for
--parameters— inline parameters break with special characters. - The document's
commandparameter is argv, not shell input. Wrap multi-statement scripts inbash -c '...'so pipes, semicolons, and redirects evaluate.
Common Diagnostic Commands
| Task | Command |
|---|---|
| Lifecycle logs | cat /var/log/provision/provisioning.log |
| Memory | free -h |
| Disk/mounts | df -h && lsblk |
| GPU status | nvidia-smi |
| GPU memory | nvidia-smi --query-gpu=memory.used,memory.total --format=csv |
| EFA/network | fi_info -p efa |
| CloudWatch agent | sudo systemctl status amazon-cloudwatch-agent |
| Top processes | ps aux --sort=-%mem | head -20 |
Key Details
- Default SSM non-interactive user is
root. - SSM rate limit: 3 TPS per account.
- For interactive sessions (rare), omit
--document-nameto get a shell. - Interactive commands (vim, top) are not supported via
AWS-StartNonInteractiveCommand. - Large outputs may be truncated by SSM.
- For troubleshooting common errors, see references/troubleshooting.md.
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。