Claude
Skills
Sign in
Back

hyperpod-nccl

Included with Lifetime
$97 forever

Diagnose NCCL failures and adjacent training-pod failures on HyperPod GPU clusters (EKS or Slurm) — training hangs, AllReduce / collective-op timeouts, EFA or libfabric errors, rendezvous failures, EFA TCP fallback, /dev/shm or memlock issues, NCCL version mismatch across pods, container OOM / exit-137 / OOMKilled, GPU OOM (CUDA out of memory), CrashLoopBackOff / Pending pods, MASTER_ADDR DNS, NetworkPolicy blocking. Not for single-node hardware faults (→ hyperpod-node-debugger § G) or cluster-creation EFA / SSM failures (→ hyperpod-cluster-debugger § A / § F).

Backend & APIsscripts

What this skill does


# HyperPod NCCL Debugger

**Operating policy.** Run read-only diagnostics yourself. Never run a command that changes cluster, node, or workload state — present each one as a **Suggested command (run this yourself)** block and wait for the customer. Destructive order: **investigate → reboot → replace** (replace destroys root + secondary volumes; not supported on Slurm controller nodes). Never discard training state on speculation.

Diagnose NCCL failures on SageMaker HyperPod (EKS and Slurm). `scripts/nccl-diagnose.sh` reads state via AWS APIs, kubectl, and SSM, then prints each issue as `[FAIL] ... → references/<file>.md § <section>`. Read-only.

**Signal sourcing:** `list-cluster-events` carries infrastructure-level state only (lifecycle, bootstrap, EFA health check, capacity, replacement, reboot, AMI rollback). It does **not** carry NCCL timeouts, GPU XID/ECC, or per-pod training signals — those come from pod logs, CloudWatch training streams, on-node SSM probes, and NCCL env audit. "No events" on a training-time NCCL issue is expected, not a clean bill of health.

---

## Workflow

1. Collect cluster name, region, namespace/job (EKS), exact NCCL error string.
2. Run the diagnostic (always — the output drives everything else).
3. For every `[FAIL]` line, `Read` the referenced section.
4. Present finding, root cause, and the Suggested-command block with concrete values (instance IDs, SG IDs, namespaces) filled in from the script output. Wait for customer approval.
5. Re-run the diagnostic to confirm.

If a finding has no matching section, report it as a bug — do not invent a fix.

## Step 1: Authenticate kubectl (EKS)

```bash
EKS_ARN=$(aws sagemaker describe-cluster --cluster-name <HYPERPOD-NAME> --region <REGION> \
  --query 'Orchestrator.Eks.ClusterArn' --output text)
EKS_NAME=$(echo "$EKS_ARN" | awk -F'/' '{print $NF}')
aws eks update-kubeconfig --name "$EKS_NAME" --region <REGION>
kubectl get nodes
```

## Step 2: Run the diagnostic

```bash
# Basic:
bash scripts/nccl-diagnose.sh --cluster <HYPERPOD-NAME> --region <REGION>

# Scope to an EKS job/namespace:
bash scripts/nccl-diagnose.sh --cluster <NAME> --region <REGION> --namespace <NS> --job <JOB>

# Force orchestrator:
bash scripts/nccl-diagnose.sh --cluster <NAME> --region <REGION> --orchestrator slurm

# Larger hardware sample (default 3):
bash scripts/nccl-diagnose.sh --cluster <NAME> --region <REGION> --sample-nodes 10

# Specific node only:
bash scripts/nccl-diagnose.sh --cluster <NAME> --region <REGION> --node i-0abc123def456
```

Tags: `[PASS]` · `[FAIL]` (counted in `Issues Found`, has reference pointer) · `[WARN]` · `[INFO]`. Priorities: **P0** blocks training · **P1** degraded · **P2** informational.

---

## Remediation index

Each `[FAIL]` line in the script already points directly at the right section. This table is a lookup for manual triage.

| Finding                                    | Section                                                                                             |
| ------------------------------------------ | --------------------------------------------------------------------------------------------------- |
| SG missing inbound/outbound self-reference | [operations.md § 8](references/operations.md)                                                       |
| Blocking NetworkPolicy / allow-all missing | [operations.md § 8](references/operations.md)                                                       |
| Slurm node DOWN / DRAINING / RemoveIPC     | [operations.md § 7](references/operations.md)                                                       |
| GPU XID / SYSTEM_ERROR / hardware fault    | [hyperpod-node-debugger § F / § G](../hyperpod-node-debugger/references/node-diagnostics-detail.md) |
| GPU row-remap / DCGM Fail / silent NaNs    | [hyperpod-node-debugger § G.1.a/b](../hyperpod-node-debugger/references/node-diagnostics-detail.md) |
| NCCL timeout / rendezvous / straggler      | [debugging-guide.md § 1](references/debugging-guide.md)                                             |
| EFA configuration / not used               | [debugging-guide.md § 6](references/debugging-guide.md)                                             |
| EFA TCP fallback (`NET/OFI Using TCP`)     | [debugging-guide.md § 13](references/debugging-guide.md)                                            |
| NCCL version mismatch across pods          | [debugging-guide.md § 10](references/debugging-guide.md)                                            |
| Container OOM (pod killed, exit 137)       | [debugging-guide.md § 4](references/debugging-guide.md)                                             |
| GPU OOM (`CUDA out of memory`)             | [debugging-guide.md § 11](references/debugging-guide.md)                                            |
| RDMA memlock / `/dev/shm` too small        | [debugging-guide.md § 17](references/debugging-guide.md)                                            |
| MASTER_ADDR DNS / headless Service         | [debugging-guide.md § 12](references/debugging-guide.md)                                            |
| NVLS / PXN / topology tuning               | [debugging-guide.md § 19](references/debugging-guide.md)                                            |
| Any NCCL / EFA / rendezvous log pattern    | [error-patterns-quick-ref.md](references/error-patterns-quick-ref.md)                               |
| Performance / nccl-tests / bandwidth       | [performance-testing.md](references/performance-testing.md)                                         |

---

## Prerequisites

- `aws` CLI v2.13+ authenticated (`aws sts get-caller-identity`)
- `jq`, `python3`, `bash` 4.2+
- `unbuffer` (from the `expect` package: `yum install expect` / `apt install expect`)
- `kubectl` authenticated to the EKS cluster (K8s checks skipped if absent)
- `session-manager-plugin` for on-node hardware checks

## Defaults

- **Region** — required: pass `--region` or set `$AWS_DEFAULT_REGION`.
- **Orchestrator** — auto-detected; override with `--orchestrator eks|slurm`.
- **Namespace / job (EKS)** — all namespaces; scope with `--namespace <NS> --job <JOB>`.
- **Hardware sampling** — 3 nodes over SSM (capped at 50). `--node <ID>` for a specific node. Node probes run **serially** (180 s per node): `--sample-nodes 10` can take ~30 min.
- **CloudWatch window** — last 2 hours.
- **Colors** — auto-disabled on non-TTY or `TERM=dumb`.

## Error handling

| Failure                             | Script                                                | Tell the customer                                                         |
| ----------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------- |
| `aws sts get-caller-identity` fails | Exit 1 with the AWS error                             | "Fix AWS credentials and rerun."                                          |
| `describe-cluster` AccessDenied     | Warn, add `Missing IAM for sagemaker:DescribeCluster` | "Grant `sagemaker:DescribeCluster` (operations.md § 2)."                  |
| Cluster not found                   | Exit 1 after listing region's clusters                | "Confirm HyperPod cluster name and region."                               |
| `kubectl` absent / unauthenticated  | Warn, skip K8s checks                                 | "`aws eks update-kubeconfig --name <EKS> --region <R>`."                  |
| SSM plugin absent                   | Warn, skip on-node hardware checks                    | "Install session-manager-plugin."                                         |
| SSM times out (180s)                | Partial output, mark node unreachable                 | "Rerun with `--node <ID> --sample-nodes 1`; check SSM agent on the node." |
| CloudWatch log group not found      | Skip CloudWatch scan                                  | "Enable CloudWatch on the cluster (operations.md § 4)."                   |
| Cluster events A

Related in Backend & APIs