TT Lab
Blog

한국어 English 日本語 中文

Get started
Blog

Blog

GPU Hardware and Driver Failure Diagnosis

Status: Draft (Updated on 2026-10-06). Descriptions confirmed by official documentation serve as the basis, and only the parts confirmed as read-only on three consumer GPU models (the "Actual Measurements" at the end of Section 10) are values directly verified. Data center GPUs and actual failure events were not measured. Please read "Verified Versions and Dates" and "Unverified Items" at the end of the post first. Writing rule: Actual measured data is the baseline, and unmeasured items are marked as "Unmeasured".

Table of Contents

Summary

GPU failure diagnosis is the process of reading three streams of signals: XID messages in kernel logs, DCGM (Data Center GPU Manager) and nvidia-smi metrics, and Kubernetes node states.

What you can explain in an interview after reading this article:

  1. How to read XIDs in the order of "number, catalog immediate action bucket, and whether it occurred solo" to distinguish between application errors and hardware errors
  2. Which metrics and codes reveal ECC, NVLink, throttling, and PCIe degradation, and how to find a single slow GPU
  3. The architecture of an automatic isolation and recovery pipeline, and criteria for deciding when to page versus when to leave a ticket

1. Path of Signal Flow

GPU + 드라이버(NVML)
 ├─ 커널 로그 "NVRM: Xid (PCI:0000:ca:00): 79, ..." ─► 로그 수집기(syslog 모니터)
 ├─ NVML 이벤트(XID) ─► 디바이스 플러그인 ─► 장치 unhealthy ─► kubelet allocatable 감소
 └─ DCGM ─┬─ dcgm-exporter :9400/metrics ─► Prometheus ─► 알림
          └─ health watch, dcgmi diag (능동 점검)

These are used for diagnosis from the dcgm-exporter default metrics file (default-counters.csv, main). Parentheses indicate default states.

Domain Metric How to Read
Utilization & Memory GPU_UTIL, FB_USED/FB_FREE/FB_RESERVED(MiB) Memory can be allocated even if utilization is 0
Temperature, Power, Clock GPU_TEMP, MEMORY_TEMP, POWER_USAGE, SM_CLOCK, MEM_CLOCK Clock drops suggest throttling
XID XID_ERRORS (enabled) A gauge holding the "last XID value", not a counter
ECC & Remapping ECC_*_TOTAL, RETIRED_*(disabled), *_REMAPPED_ROWS, ROW_REMAP_FAILURE(enabled) Remapping failures require immediate action
PCIe & NVLink PCIE_REPLAY_COUNTER, NVLINK_BANDWIDTH_TOTAL(enabled), NVLink CRC/REPLAY/RECOVERY (disabled) Look at growth rates. Error families must be enabled in the CSV
Throttle Time POWER_VIOLATION, THERMAL_VIOLATION and others (disabled, ns counter) Cumulative time by reason

Since DCGM API documentation field names (e.g., ..._TEMP_CELSIUS) may differ from exporter metric names, base your work on the CSV of the exporter you are using.

2. Consumer GPUs vs. Data Center GPUs

Category Data Center GPU Consumer GPU
DCGM Full features "Limited features" (DCGM official documentation)
Profiling PROF_* Volta and later data center GPUs Not supported (exporter CSV comment)
Error isolation and dynamic page offlining GA100, GH100, GB10x Absent in GA10x and Ada columns (documentation table)
Row remapping Supported Shown in GA10x and Ada columns (model-specific support unconfirmed)

This is an actual measurement in an experimental environment. In the raw dcgm-exporter output for an 8GB laptop GPU (driver 595.91.07), the XID_ERRORS and PROF_* lines were absent, and the MEMORY_TEMP and remapping row metrics were 0. We could not verify whether 0 meant "supported and healthy" or "unsupported thus 0", nor whether the absence of the XID line was due to the exporter version or consumer GPU constraints. The "Applicable Products" column in the XID catalog also lists only A100 and newer data center products.

3. How to Read XIDs

The format is NVRM: Xid (PCI 주소): 번호, 부가 정보 . The reading order is: ① immediate action bucket from the catalog, ② whether it is solo or accompanied by other XIDs (45 can also be logged as a result of other errors), and ③ whether it repeats on the same GPU. The buckets are RESTART_APP(restart app only), RESET_GPU, RESTART_BM(restart node), and IGNORE, CONTACT_SUPPORT . Xid 154 indicates the required recovery action (None, Drain P2P, Drain and Reset, GPU Reset Required, Node Reboot Required).

XID Catalog Name Immediate Action Interpretation
13 Graphics Engine Exception RESTART_APP Usually out-of-bounds access by application. Inspect hardware if repeating in the same TPC/GPC
31 GPU memory page fault RESTART_APP MMU fault. Hardware issue if repeating on the same GPU, application issue if across different GPUs
43 GPU stopped processing IGNORE Terminated due to application software error, GPU is healthy
45 Preemptive cleanup RESTART_FM if solo, otherwise IGNORE Result of other errors or app termination
48 Double Bit ECC Error WORKFLOW_XID_48 Uncorrectable ECC. Reset or reboot required; DRAIN_AND_RESET if accompanied by 63 or 64
63 / 64 Memory remapping event / failure IGNORE / RESET_GPU Remapping record success / record failure
74 NVLink Error WORKFLOW_NVLINK_ERR A failure in the peer GPU may appear as 74 on this side
79 Fallen off the bus RESTART_BM GPU inaccessible via PCIe
94 / 95 Included / non-included memory error RESTART_APP / RESET_GPU 94 affects a single app, 95 affects multiple apps

Since the catalog states that 31 is frequently app-related while the GPU debug guide terms it "Suspected Hardware Problems", one must explicitly branch: single occurrences are app issues, while repeated occurrences are hardware issues. The device plugin hardcodes 13, 31, 43, 45, 68, and 109 as "application errors" to be ignored, and marks devices as unhealthy on the remaining XIDs that NVML reports as critical (source). Since a FIXME in the source notes there is no recovery path from unhealthy, we infer that resetting followed by restarting the plugin is required (unconfirmed).

4. ECC, Row Remapping, and Retirement

Single-bit errors are corrected by hardware, while double-bit errors are only detected. Counters are divided into volatile (since driver load) and aggregate (lifetime cumulative). Since Ampere, row remapping has replaced page retirement (older models max 64), supporting up to 512 remappings, and application requires a GPU reset. The remapping failure flag is triggered when attempting to remap a bank that already has 8 rows remapped, attempting to remap an already remapped row, or reaching a total of 512 remappings, serving as the basis for RMA decisions. The reference documentation is based on A100 and later.

nvidia-smi -q -d ECC,ROW_REMAPPER,PAGE_RETIREMENT

Fabric Manager (FM) unifies all GPUs into a single memory fabric in NVSwitch systems and monitors links. On HGX A100 systems, starting CUDA before FM initialization results in cudaErrorSystemNotReady . Starting from Hopper, GPUs and switches perform self-link training and do not require FM for resets. FM must share the same version as the driver. When 74 occurs, use nvidia-smi nvlink -e to check CRC, replay, and recovery error counters. Fatal SXids abort CUDA tasks and leave both 74 and 45. Blackwell series uses XIDs 144 through 150 for NVLink 5, and SXids do not apply. Ampere NVSwitch systems can reset GPUs individually only while FM is running; otherwise, all GPUs bound via NVLink must be reset together.

6. Throttling and PCIe Degradation

clocks_event_reasons is a bitmask. The values are GPU idle 0x1, application clocks 0x2, SW power cap 0x4, HW slowdown 0x8, sync boost 0x10, SW thermal 0x20, HW thermal 0x40, HW power brake 0x80, display clock 0x100, board limit 0x200, and reliability 0x400 (go-nvml). 0x8 and 0x40 drop core clocks to half or lower, and 0x80 is significant as an external power brake signal. The Llama 3 paper notes that throughput varied by 1 to 2% on a daily cycle due to midday ambient temperatures. For PCIe, compare pcie.link.gen.current and pcie.link.gen.max, pcie.link.width.current , but since the manual explains that current values may drop during idle times, measurements must be taken under load. Retries are counted in PCIE_REPLAY_COUNTER , and the DCGM health example output warns when exceeding 8 times per minute.

7. A Single Slow GPU Slows Down the Entire Workload

Meta reported 466 outages (419 unexpected) over a 54-day period for Llama 3 405B, with about 78% of unexpected outages attributed to hardware causes (GPU 58.7%). Opening and verifying the original paper, this 58.7% is stated in the text but is the sum of printed percentages in Table 5; recounting by counts from the same table yields 268 GPU-related cases, which is 64.0% out of 419 (the table's "Faulty GPU" figure of 30.1% appears to be a print error inconsistent with the 148 count, which by count is 35.3%). This is summarized in "External Evidence" below. The same article notes that stragglers—which remain operational yet slow—are hard to find, a single one can slow down thousands of GPUs, and they manifest as slow communication. The troubleshooting order is my summary: ① Compare step and collective communication times per rank (PyTorch flight recorder). ② Place the slow rank GPU's throttle reasons, temperature, power, PCIe generation and width, and NVLink errors side by side. ③ After draining the node, verify with dcgmi diag -r 3(including targeted_stress, nvbandwidth, and nccl_tests). DCGM documentation states that this does not substitute for comprehensive hardware diagnostics and RMA evidence.

8. Kubernetes Response: Isolation and Automatic Recovery

flowchart LR
  D["탐지<br/>XID, DCGM, 플러그인"] --> C["분류<br/>카탈로그 버킷, 반복 여부"]
  C --> Q["cordon·taint"]
  Q --> R["drain<br/>PDB 존중"]
  R --> X["복구<br/>GPU 리셋, 노드 재시작, 교체"]
  X --> V["검증<br/>dcgmi diag -r 1 또는 2"]
  V --> U["uncordon"]
  X -. 반복 실패 .-> H["사람 호출"]

Even if a device becomes unhealthy, already assigned pods remain bound to that device (Kubernetes documentation), so draining is required. Kubernetes 1.36 ResourceHealthStatus(beta) exposes device health via container status allocatedResourcesStatus . NVSentinel (v1.25.0, Beta/Stable, Kubernetes 1.34+, requires standalone DCGM) classifies DCGM and syslog XIDs using a built-in catalog to drive cordon, drain, reset, and reboot actions. It features a circuit breaker that halts if 50% of nodes are cordoned within 5 minutes, and defaults to monitoring-only. Amazon EKS's node monitoring agent maps well-known XIDs to node conditions AcceleratedHardwareReady=False to be escalated so that 48 is logged as a reboot, 74 and 79 as a replacement, and unknown XIDs are left only as events. Before contacting the vendor, nvidia-bug-report.sh outputs, FM logs, and DCGM diagnostic logs are collected (GPU Debug Guide).

9. Alert Design

The Google SRE book states, "If a response is mechanical, it is not a page." Below is my proposal applying this.

Severity Target Reason
Page Auto-remediation failure or repetition (recurrence on the same node), available GPUs below threshold, circuit breaker triggered Requires judgment and capacity is threatened
Ticket XID 63 (applied on next reset), pending remapping, increasing ECC trend, PCIe degradation under load, HW thermal slowdown, unknown XID Not urgent and handled during maintenance window
Automated handling and logging only Cordon, drain, and reset for XID 79, 48+64, 74, and 95 Mechanical response
Forwarded to app team 13, 31, 43, 45 single occurrence Not hardware-related

10. Hands-On (Read-Only)

# GPU 가 있는 노드에서 실행
journalctl -k --no-pager | grep -E "NVRM: Xid" | tail   # dmesg 가 막힌 계정에서도 읽힘, 아래 「실측」 참고
nvidia-smi --query-gpu=index,name,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,temperature.gpu,power.draw,clocks_event_reasons.active --format=csv
nvidia-smi -q -d PERFORMANCE,ECC,ROW_REMAPPER | head -80

# 쿠버네티스에서 dcgm-exporter 지표 확인
kubectl -n gpu-operator get po -l app=nvidia-dcgm-exporter -o wide
curl -s http://<파드IP>:9400/metrics | grep -E "XID|REMAP|PCIE_REPLAY|VIOLATION"

Dashboards that only monitor utilization, power, temperature, VRAM, and clock speeds easily miss GPU-specific alert rules. I observed on an 8GB card that a server process's allocator cache grew from 6.4 GB to 7.8 GB in just 6 minutes, and such VRAM trends make great material for practicing alerts.

External Evidence: Verified by Papers and Official Documentation

Since I lack a datacenter GPU and large-scale cluster, I could not measure actual failure incidents. Instead, I opened large-scale operations reports and NVIDIA official documentation to cross-check 11 descriptions. Because external metrics involved different equipment and conditions, I only evaluated whether they aligned in direction.

Topic Material and Verified Location Verified Content and Conditions Relationship with This Article
Llama 3 Outage Statistics Llama Team (Meta), "The Llama 3 Herd of Models", arXiv 2407.21783, Section 3.3.4 and Table 5 Up to 16K H100s, 54 days of pretraining: 466 outages (47 planned, 419 unexpected), 3 human interventions. About 78% of unexpected outages were hardware-related. 268 GPU classifications (64.0%): faulty GPUs 148, HBM3 memory 72, SRAM 19, system processors 17, silent data corruption 6, thermal interfaces and sensors 6. Throughput varied by 1-2% on a daily cycle due to daytime temperatures. Supports. However, "GPU 58.7%" in the main text is the sum of the table's printed percentages, whereas the count-based percentage is 64.0% (a typo in Table 5).
Research Clusters Kokolis et al. (Meta), "Revisiting Reliability in Large-Scale ML Research Clusters", HPCA 2025, arXiv 2410.21680 About 24k A100s, 11 months. Mean time between failures for 8-GPU jobs was 47.7 days, and 7.9 hours for 1,024-GPU jobs. Because the same symptoms stem from multiple causes, it recommends not concluding that an NCCL timeout is strictly a network issue. PCIe errors and XID 79 occurred simultaneously in 43% and 63% of cases. Supports. Aligns with Section 7's "Do not conclude cause from symptoms."
Actual XID Distribution Cui et al., "Story of Two GPUs", SC 2025, arXiv 2503.11901 (NCSA Delta, 448 A100s for 895 days, 608 H100s for 146 days) XID 31 (MMU) had 8,863 occurrences on A100s, while XID 79 occurred only 10 times on A100s. Uncorrectable ECC on H100s had an average interval per GPU about one-third that of A100s. System-wide mean time between errors was 1.4 hours (A100) and 1.9 hours (H100). Node availability was approximately 99.4% and 99.3%. Supports. Provides basis that not encountering XID 79 and row remapping failures in our environment is normal.
Large-Scale Training Diagnostics Jiang et al. (ByteDance), MegaScale, NSDI 2024. Hu et al., NSDI 2024 (arXiv 2403.07648). Dong et al. (Alibaba), C4, HPCA 2025 MegaScale: Error detection and diagnostic checks take less than 10 minutes, recovery from the last checkpoint happens within 15 minutes, and a specific host running about 10% slower in the same forward pass was removed, improving MFU by about 0.7%. Infrastructure failures account for about 11% of occurrences but over 82% of GPU time (Shanghai AI Lab analysis). C4: Without diagnostic tools, about 30% of time is spent on detection, diagnosis, isolation, and restart. Supports. Section 7's statement that a single slow GPU slows down the entire workload.
XIDs and Row Remapping NVIDIA XID Catalog (updated 2026-09-09), GPU Memory Error Management documentation Action classifications for 12 XIDs across 11 papers (13, 31, 43, 45, 48, 63, 64, 74, 79, 94, 95, 154, etc.) and conditions for row remapping up to 512 times and 8 row failures per bank match the documentation. The catalog's applicable targets column lists A100, H100, B100, and GB200. Supports. Error isolation and dynamic page offlining are present only in GA100, GH100, and GB10x; row remapping is indicated for GA10x and Ada as well, but the documentation does not promise it at the product level.
Consumer GPU Metrics DCGM documentation support tables, dcgm-exporter default collection files and sources In consumer product lines, policy alerts are supported only on Tesla, and diagnostics only at Level 1. Profiling metrics are supported only on datacenter Volta and above. Supports. Consistent with the 17 paper descriptions.

Vendor figures were transcribed only when their conditions were stated in the text, and materials whose original papers could not be accessed were omitted.

11. Potential Interview Questions

  1. You encountered XID 79. What do you do? It means the GPU is inaccessible via PCIe, and the catalog bucket is node reboot. Reboot after cordon and drain, and if it recurs, inspect links, power, and system event logs before replacement.
  2. How do you handle XID 13 and 48? 13 is usually an application error so investigate with Compute Sanitizer, and suspect hardware if it repeats on the same TPC/GPC. 48 is an uncorrectable ECC error requiring a reset or reboot, and if accompanied by 63/64, drain and reset.
  3. How do you find a single slow GPU? Narrow down the suspected rank using per-rank communication times and compare that GPU's throttle reasons, temperature, PCIe, and NVLink errors. After clearing the node, verify with dcgmi diag -r 3 .
  4. What should you be careful about in auto-remediation? Prevent mass isolation using concurrency limits and circuit breakers, and escalate repeated failures to humans. Resets require that no processes are using the GPU.
  5. When do you trigger a page? Automate what is handled mechanically and log it only. Page when auto-remediation fails or repeats, or when available GPUs fall below the threshold.

12. Common Misconceptions

13. References and Verified Versions

All accessed on 2026-10-05.

Measurements: Values read from three consumer GPU models (read-only)

Read fields and kernel logs from a 24GB-class desktop (Ampere generation, driver 570.195.03), an 8GB-class laptop (Ada generation, 595.91.07), and a 6GB-class laptop (Ampere generation, 595.91.07). nvidia-smi -q -d ECC,ROW_REMAPPER,PAGE_RETIREMENT, --query-gpu All three were idle and nothing was modified.

Item 24GB-Class Desktop 8GB-Class Laptop 6GB-Class Laptop
ECC Mode and Error Counters N/A N/A N/A
Page Retirement N/A N/A N/A
Row Remapping N/A Has value: Correctable 0, Uncorrectable 0, Pending No, Failed No N/A
Bank Availability Histogram None Max 64 banks, remaining ranges 0 None
remapped_rows.* Query [N/A] 0, 0, No, No [N/A]
NVRM: Xid lines (since boot) 0 counts 0 counts 0 counts

Limitations: Limited to only three consumer models; actual failures such as datacenter GPU ECC, row remapping failures, and XID 79 were not encountered. This test also could not determine why DCGM's XID_ERRORS metrics do not appear on consumer GPUs (whether it is an exporter version issue or a GPU limitation) (unconfirmed).

Verified Versions: DCGM 4.6.1-1 bundled in GPU Operator 26.7.1, DCGM Exporter 4.6.1-4.8.4, Kubernetes stable v1.37.1.

Unverified Items: Actual output of consumer GPU ECC, row remapping, and XID metrics; exporter version in the experimental environment; whether query field names (based on third-party published --help-query-gpu output) are valid in driver 595; and applicability of consumer GPUs in the catalog. The alert severity table and investigation order are my own judgment, not official regulations.

Sign in to like

Comments

No comments yet.

Sign in to leave a comment