At large scale, GPU failures aren't rare exceptions — they're mathematically guaranteed.
Using a conservative 1% annualized failure rate per GPU, the probability of at least one failure in a job is:
P(at least one failure) = 1 - (1 - failure_rate)^(N × T/365)
Where:
| Job Size | Duration | Failure Probability |
|---|---|---|
| 256 GPUs | 30 days | ~19% |
| 1,024 GPUs | 30 days | ~57% |
The question isn't if a failure will happen — it's when, and whether your system can handle it.
Not all failures are equal. They differ in how visible they are and how much damage they cause before detection.
What happens:
The problem:
Error: NCCL watchdog timeout
This message tells you the symptom, not the cause. The actual root cause could be:
Recovery: Restart from last checkpoint
What happens:
Causes:
| Signal | Cause |
|---|---|
HW_SLOWDOWN | General hardware throttling |
HW_THERMAL_SLOWDOWN | Overheating |
| Link downgrade | Persistent interconnect errors |
| Memory bandwidth drop | Accumulated memory faults |
Why it's dangerous: Wastes compute and money for hours without any obvious alert
What happens:
How it surfaces:
Key distinction: ECC fixes many transient faults automatically, but not all
A training run crashed 7 hours in with a NCCL timeout.
The culprit was a single InfiniBand port that went down once and recovered — never flapping again.
Stack Layer | Timeout | Default Duration
---------------------|----------------------|------------------
PyTorch (top) | NCCL watchdog | ~10 minutes
InfiniBand (bottom) | NCCL_IB_TIMEOUT | ~7 seconds
The critical insight:
NCCL_IB_TIMEOUTfires long before the PyTorch watchdog. If a port stays down longer than ~7 seconds, the connection is already dead before the watchdog even notices.
A single long flap = same damage as many short flaps
NCCL_IB_TIMEOUT defaults for better resiliencegpu-monitor)Different failures are catchable at different times, so checks run at different stages.
┌─────────────────────────────────────────────────────┐
│ Layer 1: Active Bootstrap Checks (node startup) │
├─────────────────────────────────────────────────────┤
│ Layer 2: Passive Continuous Checks (during jobs) │
├─────────────────────────────────────────────────────┤
│ Layer 3: Periodic Multi-Node Checks (between jobs) │
└─────────────────────────────────────────────────────┘
When: At node provisioning AND between every customer workload
Purpose: Catch deterministic failures — things a targeted test can reliably surface
What's checked:
Outcome if failed:
Node fails check → Quarantined → Reset → Re-tested → Return to fleet OR permanent removal
Every workload is guaranteed to start on a node that just passed the full suite
When: Constantly, while workloads are running
Purpose: Catch non-deterministic failures that only emerge under sustained load
What's monitored:
HW_SLOWDOWN, HW_THERMAL_SLOWDOWN, HW_POWER_BRAKE)Outcome if triggered:
Node flagged → Cordoned → Drained → Same quarantine process as Layer 1
When: Periodically, on idle nodes between customer workloads
Purpose: Validate inter-node fabric — issues no single node can detect alone
Why separate from Layer 1:
NCCL uses different code paths for different message sizes, and hardware issues often appear in only one path.
Message Size | Protocol Used | Key Metric | Why
----------------|----------------------|-----------------|---------------------------
Small (KB) | LL / LL128 | p95 latency | Latency-dominated
Medium (MB) | Tree → Ring switch | p95 latency | Algorithm transition point
Large (MB-GB) | Chunking/pipelining | BusBW | Bandwidth-dominated
| Metric | What It Measures |
|---|---|
| AlgBW (Algorithm Bandwidth) | Throughput as the application sees it |
| BusBW (Bus Bandwidth) | Actual link utilization (accounts for data moving multiple times across fabric) |
BusBW is the better indicator of hardware health because all-reduce moves each byte across the fabric multiple times
| Payload | Pass Criterion | What It Catches |
|---|---|---|
| 1 KB | p95 latency ≤ 250 µs | Latency spikes in low-latency path |
| 16 MB | BusBW ≥ 50 GB/s AND p95 ≤ 750 µs | Algorithm transition issues |
| 1 GB | BusBW ≥ 250 GB/s | Bandwidth degradation at scale |
| 2 GB | BusBW ≥ 350 GB/s | Full pipelining health |
Scale makes failures inevitable (Concept 1)
↓
Failures come in 3 forms with different visibility (Concept 2)
↓
Real failures are complex and multi-layered (Concept 3)
↓
A 3-layer system catches failures at the right time (Concept 4)
↓
Fabric validation requires testing across payload sizes (Concept 5)
Detect early, contain fast, recover cleanly — because at GPU scale, the system must be designed around the assumption that something is always failing somewhere.