aiml-gpu-training-cluster-investigation
Use this skill for GPU training or inference clusters on SageMaker HyperPod (Slurm or EKS), ParallelCluster, or self-managed EC2/EKS GPU instances.
Skill by nzureshOfficial
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/aws-aiml-gpu-training-cluster-investigation
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing, ml, security, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/aiml-gpu-training-cluster-investigation
What's inside
- Skill name
aiml-gpu-training-cluster-investigation- Description
- Use this skill for GPU training or inference clusters on SageMaker HyperPod (Slurm or EKS), ParallelCluster, or self-managed EC2/EKS GPU instances. It adds three things. First, a GPU evidence coverage audit that proves per node whether kernel Xid logs and HyperPod health-agent detections were actually arriving, hour by hour, so "no errors found" is never reported from a silent log. Second, a node verdict (replace, reboot, or leave alone) against an explicit evidence bar, so an application Xid is never headlined as hardware. Third, a pre-flight readiness check before a long run, covering Capacity Block or training plan end time versus run length, spare capacity to replace a failed node, NodeRecovery, deep health checks, EFA, log coverage, idle reserved GPUs. Activate on Xid or ECC errors, slow training or FSx for Lustre slowness on a GPU cluster, NCCL hangs or TCP fallback, NVLink or Fabric Manager errors, nodes in Failure or Pending, nodes terminating at once, or "is my cluster ready for a multi-day run".
- License
- Apache-2.0
- Metadata
- author: nzuresh · version: 1.0.6 · aws-devops-agent-skills.agent-types: CHAT, INCIDENT_RCA · aws-devops-agent-skills.aws-services: Amazon SageMaker HyperPod, AWS ParallelCluster, Amazon EC2, Amazon FSx for Lustre, Elastic Fabric Adapter, Amazon EKS, AWS Health · aws-devops-agent-skills.technical-domains: Machine Learning, GenAI, High Performance Computing
- Instructions
- 304 lines in SKILL.md · view on GitHub
Files (117)
- .skilleval.yaml
- CHANGELOG.md
- README.md
- SKILL.md
- benchmark.json · evals/best-practices/v10/
- best-practices-tests-results.json · evals/best-practices/v10/iteration-1/
- best-practices-tests-results.json · evals/best-practices/v10/iteration-2/
- best-practices-tests-results.json · evals/best-practices/v10/iteration-3/
- evals.json · evals/
- benchmark.json · evals/functional/v5/
- evals.json · evals/functional/v5/
- functional-tests-results.json · evals/functional/v5/iteration-1/capacity-block-expiry/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/capacity-block-expiry/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/capacity-block-expiry/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/capacity-block-expiry/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/control-plane-log-dead/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/control-plane-log-dead/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/control-plane-log-dead/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/control-plane-log-dead/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/fsx-training-slowdown-cause/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/fsx-training-slowdown-cause/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/fsx-training-slowdown-cause/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/fsx-training-slowdown-cause/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/gpu-log-coverage-audit/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/gpu-log-coverage-audit/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/gpu-log-coverage-audit/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/gpu-log-coverage-audit/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/hyperpod-application-xid-verdict/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/hyperpod-application-xid-verdict/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/hyperpod-application-xid-verdict/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/hyperpod-application-xid-verdict/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/negative-bedrock-throttling/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/negative-bedrock-throttling/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/negative-load-balancer-choice/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/negative-load-balancer-choice/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/preflight-long-run-readiness/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/preflight-long-run-readiness/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/preflight-long-run-readiness/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/preflight-long-run-readiness/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/xid-48-reboot-first/with_skill/
- journal_records.json · evals/functional/v5/iteration-1/xid-48-reboot-first/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-1/xid-48-reboot-first/without_skill/
- journal_records.json · evals/functional/v5/iteration-1/xid-48-reboot-first/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/capacity-block-expiry/with_skill/
- journal_records.json · evals/functional/v5/iteration-2/capacity-block-expiry/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/capacity-block-expiry/without_skill/
- journal_records.json · evals/functional/v5/iteration-2/capacity-block-expiry/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/control-plane-log-dead/with_skill/
- journal_records.json · evals/functional/v5/iteration-2/control-plane-log-dead/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/control-plane-log-dead/without_skill/
- journal_records.json · evals/functional/v5/iteration-2/control-plane-log-dead/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/fsx-training-slowdown-cause/with_skill/
- journal_records.json · evals/functional/v5/iteration-2/fsx-training-slowdown-cause/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/fsx-training-slowdown-cause/without_skill/
- journal_records.json · evals/functional/v5/iteration-2/fsx-training-slowdown-cause/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/gpu-log-coverage-audit/with_skill/
- journal_records.json · evals/functional/v5/iteration-2/gpu-log-coverage-audit/with_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/gpu-log-coverage-audit/without_skill/
- journal_records.json · evals/functional/v5/iteration-2/gpu-log-coverage-audit/without_skill/outputs/
- functional-tests-results.json · evals/functional/v5/iteration-2/hyperpod-application-xid-verdict/with_skill/
- …and 57 more
SKILL.md (first lines)
# GPU Cluster Evidence, Readiness, and Fault Verdicts
For GPU clusters on SageMaker HyperPod (Slurm or EKS), AWS ParallelCluster, and self-managed
EC2 or EKS. Generic investigation finds the obvious signals; this skill adds what it gets
wrong: silent evidence, wrong-headline hardware verdicts, and predictable failures before a
long run. **Read-only.** Never reboot, replace, update, or delete anything, and never read
training data, checkpoints, or model weights.
## Critical rules R1 to R11 (apply in every mode, in this order)
R1. **Answer in one pass, and always leave room to answer.** In chat, do not stop to ask a
question and do not hand off to a separate investigation before answering. If an input is
missing, use the default (impact window: last 24 hours; run length: evaluate 24, 48, and
72 hours), state the assumption, and mark dependent checks `Needs input`. For "slow" or
performance questions with no time given, use the last 72 hours. Offer follow-ups only
after the answer.
**Budget the evidence gathering so the answer always gets written.** An investigation that
runs out of room before it reports is worth nothing to the operator, and it is worse than a
partial answer because it looks like a failure rather than a finding. So: collect the
mandatory evidence for the mode first (R2, R4, R5, and for Mode P the P1 to P6 core), then
write the report. Pick up the optional checks only with what is left. If you notice you are
deep into tool calls and have not yet produced an answer, **stop collecting and report what
you have**, marking everything unreached as `Not checked` with the call that would close
it. Never end a turn with evidence gathered and no verdict.
R2. **Inventory and capability profile.** HyperPod: `sagemaker.DescribeCluster` and
`ListClusterNodes` (paginate). Read `NodeProvisioningMode` from `DescribeCluster`: if it is
`Continuous`, also pull `sagemaker.ListClusterEvents` for the window (see rule R11), which
is the only timeline source that survives broken log delivery. On any other value the call
is unsupported and must be skipped, not retried.
EC2/ParallelCluster/EKS: `ec2.DescribeInstances`. For every
GPU instance type: `ec2.DescribeInstanceTypes` (strip HyperPod `ml.`): GPU count,
`EfaSupported`, `MaximumEfaInterfaces`; per EC2 node, attached `efa`/`efa-only` interfaces.
Report `<attached> of <max>`, where attached = interfaces with `InterfaceType` `efa` or
`efa-only` (the primary ENA interface does not count unless it is `efa`). HyperPod nodes
are not visible to `DescribeInstances`: say so. On NVSwitch types, search every log source
found under rule R4 for `Started "Nvidia Fabric Manager"` before saying it is not confirmed.
R3. **Node identity survives replacement.** A HyperPod reboot keeps the instance ID; a replace
gives the node a **new instance ID in the same instance group**, so the current ID will
never appear in the replace request. Query CloudTrail **by event name, not by instance
ID**: `cloudtrail.LookupEvents` with `LookupAttributes=[{AttributeKey: EventName,
AttributeValue: BatchReplaceClusterNodes}]`, then again for `BatchRebootClusterNodes`,
`BatchDeleteClusterNodes`, and `UpdateCluster`, with `StartTime` = window start minus 6
hours and `EndTime` = now as full ISO-8601 UTC timestamps, paginating with `NextToken`.
Keep events whose `requestParameters.clusterName` is this cluster. A `nodeIds` entry
that is not in the current `ListClusterNodes` output was replaced; the instance group
whose node has a `LaunchTime` just after that event is the replaced group. That operator
or automatic call is the explanation for the node going `Pending` (Branch E), not hardware.
R4. **Find every log source by substring, not prefix.** Call `logs.DescribeLogGroups` with
`logGroupNamePattern` (case-sensitive substring) = the cluster name, then again for
`kernel`, `messages`, `syslog`, `journal`, and `gpu`, paginating with `nextToken`. Never
search only `/aws/parallelcluster` or `/aws/sagemaker` prefixes: customer pipelines use
other names (for example `/aws/<pipeline>/<cluster>/kernel`). Evaluate every source found.
R5. **Prove coverage before any "no errors".** For each node and source: find the stream that
carries `kernel:` lines, then bin **that exact stream** by hour across the window padded by
one hour. **Always name the evidence you used: quote the full log group name and the exact
log stream name for every node in the coverage table, and again in the answer text.** A
coverage claim without the group and stream it rests on is not auditable, so the operator
cannot re-run it. Any empty hour means `Not observable` for that hour. First and last event times
are not proof, and the time of the **last `kernel:` line** is not when logging stopped:
a healthy kernel goes quiet. Liveness comes only from the hourly bins of all lines in
that stream. A node is `Measured` if one source passes. HyperPod: a missing
`SagemakerHealthMonitoringAgent/<group>/<instance-id>` stream means `No HMA detections`
when the cluster log group is otherwise live. NCCL transport with no `NCCL INFO` lines
anywhere is `Not observable`; never infer it from the instance type.
R5a. **Name every resource you looked at, by ID.** A finding the operator cannot re-run is
not a finding. Whatever you analysed, put its identifier in the answer: the FSx file system
(`fs-...`) behind any storage claim, the instance IDs (`i-...`) behind any node claim, the
cluster name, the capacity reservation (`cr-...`) behind any capacity claim, and the log
group and stream behind any log claim as R5 already requires. "The file system was
saturated" or "the metrics looked fine" names nothing and cannot be checked. This applies
to the resource you cleared as much as the one you blamed, since ruling something out is
only useful if the reader knows what was ruled out.
R6. **Verdict per node, headline to match.** `REPLACE`, `REBOOT`, `LEAVE ALONE`, `MONITOR`, or
`NOT OBSERVABLE`, against the evidence bar in `references/incident-branches.md` (Step 4b).
Application-class Xids (for example 13, 31) or HMA `reason: XidUserAppError` with the node
`Running` is `LEAVE ALONE`. Never headline "hardware error" unless the verdict is `REPLACE`
or `REBOOT` on hardware grounds.
R7. **Label every cause** `Proven` (measured signal on the affected node, before the failure,
nothing competing) or `Hypothesis (to validate)` with the one confirming measurement. A
spike at the same time is correlation. FSx without a saturated metric is not a proven cause.
Only a `Proven` cause may be called the root cause, in the headline or in a branch table.
Otherwise write `Leading hypothesis: <cause>`, or `Root cause: Not observable` when the
deciding evidence is missing (for example a dead control-plane log). Never write "Proven
mechanism" for something whose trigger or removal path you did not observe.
Utilization metrics from FSx (`NetworkThroughputUtilization`, `DiskIopsUtilization`, and
similar) and `GPUPowerUtilization` are already percent from 0 to 100: a value of `0.9` is
0.9 percent. Quote the raw value with a percent sign.
R8. **Recovery questions** always state three things: whether automatic node recovery is on
(`NodeRecovery`), what it does (reboot or replace the node), and that the **job** resumes
only with checkpoints plus the orchestrator's auto-resume (Slurm on HyperPod:
`srun --auto-resume=1`).
R9. **Capacity Blocks** begin terminating instances 30 minutes before the end time (60 for
UltraServers); blocks end at 11:30 UTC and termination starts at 11:00 UTC on the last day.
For a planned run, write out: usable until = end time minus the lead time; run end = start
plus run length; hours covered = usable until minus start. Give every value as a full UTC
date and time, and check the latest safe start is not already in the past.
R10. **Rule out the frequent non-GPU causes** in `references/cluster-edge-cases.md` before
blaming hardware: subnet IP or network interface exhaustion, ParallelCluster bootstrap
failures and protected mode, EFA nodes in a public subnet, a Capacity Block not yet
active, and the FSx maintenance window. HyperPod does not export system metrics to
CloudWatch, so HyperPod GPU activity is `Not observable` there.
R11. **When the logs are dead, ask the control plane.** On a HyperPod cluster with
`NodeProvisioningMode = Continuous`, `sagemaker.ListClusterEvents` gives you a node and
cluster timeline that owes nothing to a log agent, so it keeps answering when a stream has
gone silent or a node has disappeared. Filter the window with `EventTimeAfter` and
`EventTimeBefore`, narrow with `NodeId` or `InstanceGroupName`, sort with
`SortBy=EventTime`, and page through `NextToken`. Where a `Description` is not
self-explanatory, `DescribeClusterEvent` has the detail. Note that the response has no
severity or level field at all, so any grouping you apply is your own and should be
described that way. If `NodeProvisioningMode` is anything other than `Continuous` the call
is not supported; write `ListClusterEvents not supported` in the coverage table and carry
on. What you must not do is report a dead log as "no events" without either trying this
source or saying it was unavailable.
## Pick the mode
| The user asks | Mode | Steps to run |
|---------------|------|--------------|
| Something failed, hung, slowed, or lost nodes | **I: Incident** | Steps 1 to 7 |From aws/tools-for-devops-agent, Apache-2.0.
More from aws/tools-for-devops-agent
- 0.784score
cloudtrail-cost-optimization
holmallaOfficial
Identify and quantify AWS CloudTrail cost optimization opportunities.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
config-cost-optimization
holmallaOfficial
Identify and quantify AWS Config cost optimization opportunities.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
agentcore-observability-setup
vggargavOfficial
Validates and bootstraps Amazon Bedrock AgentCore observability so customers can trace agent reasoning, detect silent failures, and measure performance before…
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
aiml-access-diagnostics
tamrishOfficial
Use this skill when diagnosing IAM and access failures for Bedrock and SageMaker.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
analytics-opensearch-expertise
genealpeOfficial
Amazon OpenSearch Service domain health assessment.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
aws-backup-coverage-review
vediyappan-kkOfficial
AWS Backup coverage and data protection posture review.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
aws-eks-operations-review
shyamkulkarniOfficial
Use this skill when someone wants an Amazon EKS cluster graded against best practices.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
aws-health-events
udid-awsOfficial
ALWAYS use this skill in the beginning of any incident investigation, root cause analysis, or operational troubleshooting.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
aws-routing
midakinOfficial
Analyze and troubleshoot AWS routing and BGP path selection - how AWS chooses a network path, why traffic takes an unexpected route, and how to steer it.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
agentcore-ops-review
pamvasOfficial
Comprehensive operational review procedures for Amazon Bedrock AgentCore resources aligned with the AWS Well-Architected Framework.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
bedrock-operation-review
smnixonOfficial
Comprehensive Amazon Bedrock review aligned with the AWS Well-Architected Framework and Bedrock best practices.
SkillAFreshness: A★ 116Claude Code +9 - 0.784score
database-migration-service-expertise
tabhimanOfficial
AWS Database Migration Service (DMS) operational review and troubleshooting skill.
SkillAFreshness: A★ 116Claude Code +9
Signals
- Stars
- 116
- Forks
- 85
- Open issues
- 8
- Last commit (this folder)
- Oct 22, 2026 (6 days ago)
- Last release
- Sep 25, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.0.6
- License
- Apache-2.0
- Repository
- github.com/aws/tools-for-devops-agent
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Cite this page
aiml-gpu-training-cluster-investigation skill. Agent Mart. https://agentmart.dev/skills/aws-aiml-gpu-training-cluster-investigation (last updated 2026-10-24)