AI Infra Interviews logo
🩺 Fleet Reliability & Observability
Foundational

GPU Failure Modes and XID Errors

When a GPU misbehaves, the NVIDIA driver writes an XID line to the kernel log, and the number on that line is the first and often the only clue to what happened. Fleet engineers learn a dozen of them the way doctors learn a dozen lab values: 13 and 31 are almost always the application, 48 and 95 are memory that needs a reset, 63 and 64 are the row remapper reporting or failing, 74 is the NVLink fabric, 79 is a GPU that has vanished from the PCIe bus. This page gives the taxonomy, the decision for each (retry, reset, drain, RMA), and the derivation of how often a big fleet should expect each.

TL;DR: An XID is the driver's error code, one line in dmesg of the form NVRM: Xid (PCI:0000:xx:00): NN, .... Read it in three groups. Application faults (13, 31, 43, 45): a kernel touched a bad address or timed out; the job dies, the GPU is fine, retry after checking the code. Memory faults (48, 63, 64, 92, 94, 95): ECC events; 94 is contained and the job restarts, 48 and 95 need a GPU reset, 63 needs a reset to apply a row remap, 64 means the remap failed and the board goes back to the vendor. Hardware and fabric faults (74, 79, 119, 120): NVLink errors, a GPU that fell off the bus, or the GSP firmware hung; drain the node, reset or reboot, and if it recurs, RMA. On a 16,000-GPU fleet, expect an unexpected hardware interruption roughly every three hours, most of them GPUs and their memory.

What an XID is

The NVIDIA kernel driver (nvidia.ko, logged as NVRM) reports errors it detects in the GPU as XID events: an integer code, the PCI address of the GPU, and some context. They appear in the kernel ring buffer and in /var/log/syslog or journalctl -k, and DCGM reports them as a field. The code tells you which subsystem detected the problem; the context (a channel id, an address, a link number) narrows it down; and the count and recurrence tell you whether it is an application bug, a transient, or a board that is dying.

[Tue Sep  1 03:12:44 2026] NVRM: Xid (PCI:0000:4e:00): 79, pid='<unknown>', name=<unknown>, GPU has fallen off the bus.
[Tue Sep  1 03:12:44 2026] NVRM: GPU 0000:4e:00.0: GPU has fallen off the bus.

That line is the canonical fleet-page: the GPU at PCI 4e stopped responding to the host. nvidia-smi will hang or report the GPU missing, and every process using it is stuck.

The taxonomy

XIDWhat it meansWho is at faultWhat to do
13graphics engine exception: a kernel faulted (illegal instruction, out-of-range access)almost always the applicationjob dies; fix the kernel; retry on the same GPU
31GPU memory page fault: a kernel read or wrote an unmapped addressthe application (a bad pointer, an out-of-bounds index) in the vast majority of casessame as 13; if it recurs across unrelated jobs on one GPU, suspect the board
43GPU stopped processing: a channel was reset after an errorapplication, following a 13 or 31retry
45preemptive cleanup after a prior errora consequence, not a causelook at the XID before it
48double-bit ECC error (DBE): uncorrectable memory corruption detectedhardware (HBM)GPU reset required; the driver also records a row remap; if DBEs recur, RMA
63row remapping event recordedhardware, handledthe remap applies at the next reset; schedule a reset; the GPU is fine afterwards
64row remapping failure: a remap entry could not be recordedhardware, and not automatically terminalreboot first, since the remap may apply cleanly on the next reset; if it recurs, drain and run field diagnostics, then RMA on the vendor criteria
74NVLink error: a link failed training or reported fatal errorsfabric (cable, connector, NVSwitch port, or the GPU's link block)drain; reset; check the link counters; if it recurs, RMA the GPU or the switch tray
79GPU has fallen off the bus: no response over PCIehardware, power or thermaldrain and reboot; if it recurs, RMA
92high single-bit ECC error ratehardware, early warningwatch; the remapper will handle it; RMA if the rate keeps climbing
94contained ECC error (Ampere and later): the error was isolated to the affected contexthardware, containedthe job dies and restarts; the GPU keeps running; no reset needed
95uncontained ECC errorhardwareGPU reset required; if it recurs, RMA
119, 120GSP firmware RPC timeout or error (the GPU System Processor stopped responding)firmware or hardwarereset; firmware update; if it recurs, RMA

The first thing a good engineer does with an unknown code is look it up in NVIDIA's XID catalogue; the second thing is to check which of the three groups it falls in, because the group decides the action long before the exact code does.

The three decisions

Sorted by what you actually do, rather than by which subsystem reported it, the whole taxonomy fits on one card:

XID CODE, AND WHAT YOU DO ABOUT IT Retry the job the GPU is healthy; check the kernel and the addresses XID 13 · 31 · 43 · 45 · 94 application fault, or a contained ECC error Reset the GPU nvidia-smi -r on an idle GPU; seconds to minutes XID 48 · 63 · 92 · 95 uncorrectable ECC, or a row remap awaiting a reset Drain the node reboot to re-enumerate the bus; the job restarts elsewhere XID 74 · 79 · 119 · 120 NVLink, fallen off the bus, GSP firmware hung Return the board diagnostics confirm it, or it keeps recurring any of the above recurring after a reset XID 64 reaches here only if it repeats

Retry, reset, or replace. Application faults (13, 31, 43, 45) get a retry after the code is checked: the GPU did what it was told. The fleet signal to watch is one GPU throwing 31s under many different jobs, which flips the diagnosis from application to hardware.

Memory faults split by containment. A 94 is the good case introduced with Ampere: the error is confined to the process that touched the bad page, the process is killed, the GPU continues and the page is retired. A 48 or 95 requires a GPU reset (nvidia-smi -r, which needs the GPU idle, or a node reboot on a full NVSwitch system where per-GPU reset is often not practical). A 63 means the remapper recorded a repair that applies on the next reset, so the node is scheduled for one at the next idle window. A 64 means a remap entry could not be recorded, and the tempting reading is that the board is out of spare rows and finished. That is a conclusion, not an observation: the failure to record is what the driver reports, and the cause may be transient. The vendor guidance is a reset or reboot first, because the pending remap frequently applies cleanly; then, if the error returns, drain the node and run the field diagnostics, which is what actually establishes whether the spare rows are exhausted. RMA follows the vendor criteria and that evidence, not the first occurrence. Treating a single 64 as an automatic return sends back working boards and, worse, trains a fleet team to skip the diagnosis (ECC, Row Remapping and Memory Errors).

Hardware and fabric faults get a drain, a reset or reboot, and a recurrence rule: the same GPU or link failing twice in a window (a week is common) goes to RMA rather than back into the pool. A 79 is the sharpest: the GPU is gone from the bus, so nothing short of a reboot brings it back, and a GPU that falls off the bus twice is almost always a board or a power delivery problem. A 74 points at the NVLink fabric (NVLink and Fabric Faults); the counters say whether it was the GPU end, the cable, or the switch.

How often, and why that number matters

The public reference point is Meta's Llama 3 training report: 16,384 H100s over 54 days saw 466 job interruptions, 419 of them unexpected, and about 78% of the unexpected ones were confirmed or suspected hardware. Of those, GPUs and their HBM were the largest share (faulty GPU about 30%, HBM about 17%), with software bugs, network switches and cables, host maintenance, GPU SRAM, and the GPU system processor behind them.

unexpected interruptions: 419 in 54 days
  rate = 419 ÷ 54 ≈ 7.8 per day ≈ one every 3.1 hours across the whole fleet
per-GPU MTBF, treating every interruption as one GPU-attributable event (an overestimate of GPU blame):
  MTBF_gpu ≈ 16,384 GPUs × 3.1 h ≈ 50,800 GPU-hours ≈ 5.8 GPU-years between failures
so on a fleet of N GPUs, the expected time between unexpected stops is
  T ≈ 50,800 h ÷ N
  N = 1,024: ≈ 50 h (about two days);  N = 16,384: ≈ 3.1 h;  N = 100,000: ≈ 30 min
sanity: a per-GPU lifetime of several years sounds fine, and at 100k GPUs it becomes a stop every
        half hour, which is why checkpoint cadence and automatic restart dominate at scale.

This is the derivation behind every fleet reliability design: failures that are rare per device are continuous per fleet, and the arithmetic gives the interval that checkpointing and restart have to beat (Training Uptime and Interruption Statistics).

Working it in the room

"You see XID 79 on a node at 3am; walk me through it" wants the recognition (GPU fell off the bus), the immediate action (drain the node, requeue the job from its last checkpoint, reboot), the diagnosis (power, thermal, board; check the BMC log and the PCIe link state), and the recurrence rule (twice, and it is an RMA). The follow-up held back is "how do you tell an application page fault from a bad GPU?", answered with the pattern across jobs: one job faulting on many GPUs is code; many jobs faulting on one GPU is hardware. The answer that sounds right and fails is "reboot everything and move on": without the recurrence rule the same board comes back into the pool and stops the next job.

What to remember

  • An XID is the driver's error code in dmesg; read the group first: application (13, 31, 43, 45), memory (48, 63, 64, 92, 94, 95), hardware and fabric (74, 79, 119, 120).
  • 94 is contained (restart the job); 48 and 95 need a GPU reset; 63 applies a remap at the next reset; 64 is an RMA.
  • 79 is a GPU gone from the bus: drain and reboot; twice and it is replaced. 74 is the NVLink fabric.
  • One job faulting on many GPUs is code; many jobs faulting on one GPU is hardware.
  • Llama 3's 419 unexpected interruptions in 54 days on 16,384 H100s give one every 3.1 hours and about 50,800 GPU-hours per failure; scale by N for your fleet.
RELATED CONCEPTS
LESSONS THAT TEACH THIS
PRACTICE THIS IN REAL QUESTIONS