See the signal
Every incident carries the evidence that opened it — the raw XID, the counter, the alert, the node.
How it works
A fast path reads kernel XIDs on the node within seconds. A slow path catches trends through dcgm-exporter and Alertmanager. Both converge on a single incident per target and failure class, so a GPU falling off the bus never opens three tickets.
Watches kernel events on each GPU node. XID observed in seconds.
Events reported over the agent's existing outbound channel.
Correlates, deduplicates, applies safety gates, and drives the workflow.
ECC counters, row remap state, thermals, NVLink and PCIe health.
Threshold and trend rules, each carrying a runbook URL.
Every incident carries the evidence that opened it — the raw XID, the counter, the alert, the node.
The escalation ladder is a versioned GPUPlaybook resource, reviewed in a pull request like any other config.
Run in dry-run, compare what it would have done against what you did, then decide which rungs deserve to act on their own.
The escalation ladder
Seven rungs, climbed one at a time and only as far as the evidence justifies. The tread darkens as the step gets destructive, and the climb stops at rung five until a person says otherwise.
Count, correlate, threshold.
Most signals stop here.
Contained fault — evict just the affected pod.
Device-level recovery, optionally deferred until idle.
Move work off first, then reset the device.
Approval-gated. The rung most teams keep human.
Reinstall or roll back when the fault follows the driver.
Quarantine, collect a diagnostic bundle, prepare the RMA evidence.
Proven on real hardware
On an EKS node carrying an NVIDIA Tesla T4, an injected XID 79 opened an incident, cordoned the node, drained its workloads with PodDisruptionBudgets respected, waited for a named human to approve, terminated the actual EC2 instance through a run-scoped IAM role, let the node group replace it, and closed the incident only after verifying the replacement — with the approver's identity on the record.
The fault was injected. The recovery was not. What this does not prove: per-device GPU reset, which a virtualised instance cannot perform and the agent refuses on measured evidence rather than pretending; and anything at all on AMD silicon, where detection ships but has never run on an AMD device. Read the release evidence →
Signal catalog
A row remap failure will never be fixed by a reset — that GPU needs to leave the fleet. A contained ECC error only ruins one workload's context. Encoding that difference is the entire point.
| XID | Meaning | Response | Why |
|---|---|---|---|
| 79 | GPU has fallen off the bus | drain → reboot | The device vanished from PCIe. A reset can't reach it — only a reboot or power cycle can. |
| 94 | Contained ECC error | workload-restart | Contained to one context. Evict that workload, keep the GPU serving everything else. |
| 64 | Row remap failed | drain → reset → re-check | The remap could not be recorded. Drain and reset, then re-check remap state; a recurrence after a clean reset is what escalates to quarantine and RMA. |
Three of the classes the catalog knows. Each maps a vendor-native code to a neutral
(vendor, code) pair, so a second accelerator vendor describes the same
problem in the same vocabulary instead of forking the policy.
See the full failure catalog →
Build the safe path first
Read the source, run the dry-run ladder, and tell us where the policy model breaks.