aiml-gpu-training-cluster-investigation

aiml-gpu-training-cluster-investigation is a skill for Claude Code, Codex from aws/tools-for-devops-agent. It costs 236 tokens per session (5,300 once invoked), scanned A, original, Apache-2.0.

A read-only investigation process for GPU training and inference clusters on AWS SageMaker HyperPod, ParallelCluster, or self-managed EC2 and EKS. It checks whether hardware and health evidence is present before judging a cluster or run.

In plain words
What is it for?
Use it to audit GPU error logs and health-agent reports, investigate slow or failed training runs, assess recent impact windows, and report what could not be verified.
Why use it?
It helps distinguish a real hardware problem from missing monitoring data and identifies likely failures before a long machine-learning run. It does not reboot, update, replace, or delete anything.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

Good fit Use it to audit GPU error logs and health-agent reports, investigate slow or failed training runs, assess recent impact windows, and report what could not be verified.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add aws/tools-for-devops-agent --skill aiml-gpu-training-cluster-investigation
Clone the repo
git clone --depth 1 https://github.com/aws/tools-for-devops-agent

Made for: Claude Code, Codex.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for aiml-gpu-training-cluster-investigation

README.md
[![agentmods](https://agentmods.dev/badge/skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation/github.svg)](https://agentmods.dev/skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation)
Your own site
<a href="https://agentmods.dev/skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation"><img src="https://agentmods.dev/badge/skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for aiml-gpu-training-cluster-investigation

Your own site · 80×15
<a href="https://agentmods.dev/skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation"><img src="https://agentmods.dev/badge/skills/aws/tools-for-devops-agent/aiml-gpu-training-cluster-investigation.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 236 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 5,300 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00236 $0.05300
Opus 5.5 $0.00094 $0.02120
Sonnet 5.5 $0.00047 $0.01060
Haiku 4.5 $0.00024 $0.00530

Measured 10d ago against content hash 2c6551e1648f, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

aiml-gpu-training-cluster-investigation scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 10d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/aiml-gpu-training-cluster-investigation/SKILL.md · 325 lines

How it starts

The opening of the file, as written. The whole thing — 325 lines — stays where its author put it; the contents beside it link to each section on GitHub.

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.

Read the full file on GitHub · 325 lines

Files

What ships with it

60 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 10d ago First seen · 325 lines · 236 tokens per session scan A 2c6551e1648f

Subscribe to this mod's changes

aiml-gpu-training-cluster-investigation is a skill published in the GitHub repository aws/tools-for-devops-agent (107 stars, last pushed today), licensed Apache-2.0. It adds 236 tokens to every session and 5,300 once invoked, about $0.0009 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-06.

Related

Other skills, from other repositories

model-deployment

Generates code that deploys fine-tuned models from SageMaker Serverless Model Customization to SageMaker endpoints or Bedrock. Use when the user says "deploy my model", "create an endpoint", "make it available", or asks about deployment options. Identifies the correct deployment pathway (Nova vs OSS), generates…

awslabs/agent-plugins · 76 tokens

azure-storage-file-datalake-py

Azure Data Lake Storage Gen2 SDK for Python. Use for hierarchical file systems, big data analytics, and file/directory operations. Triggers: "data lake", "DataLakeServiceClient", "FileSystemClient", "ADLS Gen2", "hierarchical namespace".

microsoft/skills · 63 tokens

airunway-aks-setup

Set up AI Runway on AKS — from bare cluster to running model. Covers cluster verification, controller install, GPU assessment, provider setup, and first deployment. WHEN: "setup AI Runway", "onboard AKS cluster", "install AI Runway", "airunway setup", "deploy model to AKS", "GPU inference on AKS", "KAITO setup on…

microsoft/skills · 121 tokens

amplify-workflow

Build and deploy full-stack web and mobile apps with AWS Amplify Gen2 (TypeScript code-first). Covers auth (Cognito), data (AppSync/DynamoDB including schema modeling, enum types, relationships, authorization rules), storage (S3), functions, APIs, and AI (Amplify AI Kit with Bedrock). Supports React, Next.js, Vue…

awslabs/agent-plugins · 214 tokens

dataset-transformation

Generates code that transforms datasets between ML schemas for model training or evaluation. Use when the user says "transform", "convert", "reformat", "change the format", or when a dataset's schema needs to change to match the target format — always use this skill for format changes rather than writing inline…

awslabs/agent-plugins · 110 tokens

hyperpod-cluster-debugger

Diagnose and remediate cluster-wide HyperPod (EKS or Slurm) problems — creation / deployment failures (CloudFormation, EFA health check, lifecycle scripts, capacity), EKS access, node replacement, CloudFormation nested-stack errors, post-maintenance rollback state, dangling nodes, autoscaler conflicts. Includes…

awslabs/agent-plugins · 80 tokens