Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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 al
.claude/skills/awslabs-hyperpod-ssm/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-17 | ✗→✓ | ▲ Improved | -28% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 29% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 140% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -7% | 0% |
aws CLI 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 the expect package) — wraps aws ssm start-session with a PTY so the session-manager-plugin flushes stdout instead of racing to close. Without it, calls intermittently return empty output with Cannot perform start session: EOF even when the command ran. Install with sudo yum install expect, sudo apt install expect, or brew install expect. ssm-exec.sh detects and uses it automatically; falls back with a warning if missing.Target: sagemaker-cluster:<CLUSTER_ID>_<GROUP_NAME>-<INSTANCE_ID>
CLUSTER_ID: Last segment of cluster ARN (NOT the cluster name). Extract via get-cluster-info.sh.GROUP_NAME: Instance group name — retrieve via list-nodes.sh.INSTANCE_ID: EC2 instance ID (e.g., i-0123456789abcdef0)Three scripts under scripts/. Resolve cluster info and nodes once, then execute per node.
bashscripts/get-cluster-info.sh CLUSTER_NAME [--region REGION] # Output: {"cluster_id":"...","cluster_arn":"...","cluster_name":"...","region":"..."}
bashscripts/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.
bash# 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]
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.
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).
bashcat > /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 — inline parameters break with special characters.command parameter is argv, not shell input. Wrap multi-statement scripts in bash -c '...' so pipes, semicolons, and redirects evaluate.| 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 |
root.--document-name to get a shell.AWS-StartNonInteractiveCommand.Other measured skills in the registry, with their headline benchmark lift.