TT Lab
博客

한국어 English 日本語 中文

开始
博客

博客

GPU硬件与驱动故障诊断

状态:草稿(更新于2026-10-06)。 本文内容主要基于官方文档确认的表述, 仅在三种消费级GPU上以只读方式确认过的内容(第10节末尾的“实测”部分) 是直接确认的值。未能测量数据中心GPU及真实的故障事件。 请先阅读文章末尾的“确认的版本和日期”与“未确认的内容”。 编写规则:以实测数据为基础,未能测量的内容标注为“未实测”。

目录

摘要

GPU故障诊断本质上是读取三路信号的工作:内核日志中的XID消息、DCGM(Data Center GPU Manager)与 nvidia-smi 指标,以及Kubernetes的节点状态。

读完本文后在面试中能够阐述的内容

  1. 如何按照“编号、目录中的立即处理桶、是否单独发生”的顺序读取XID,从而区分应用错误与硬件错误
  2. ECC、NVLink、降频、PCIe降级会通过哪些指标和代码体现出来,以及如何找出拖慢整体的慢速GPU
  3. 自动隔离与恢复流水线的构建,以及哪些情况触发页寻呼(Page)告警、哪些情况作为工单保留的标准

1. 信号流经的路径

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 (능동 점검)

这是dcgm-exporter默认指标文件(default-counters.csv, main)中用于诊断的指标。括号内为默认状态。

区域 指标 读取方法
使用率·内存 GPU_UTIL, FB_USED/FB_FREE/FB_RESERVED(MiB) 即使使用率为0,内存也可能已被占用
温度·功率·时钟 GPU_TEMP, MEMORY_TEMP, POWER_USAGE, SM_CLOCK, MEM_CLOCK 时钟下降疑似降频
XID XID_ERRORS (开启) 记录“最新XID值”的仪表盘,而非计数
ECC·重映射 ECC_*_TOTAL, RETIRED_*(关闭), *_REMAPPED_ROWS, ROW_REMAP_FAILURE(开启) 重映射失败属于立即处理对象
PCIe·NVLink PCIE_REPLAY_COUNTER, NVLINK_BANDWIDTH_TOTAL(开启),NVLink CRC·REPLAY·RECOVERY(关闭) 观察增长率。错误系列需在CSV中开启
降频时间 POWER_VIOLATION, THERMAL_VIOLATION 等(关闭,ns计数器) 按原因累计的时间

由于DCGM API文档中的字段名(例如: ..._TEMP_CELSIUS)可能与exporter指标名不同,请以所使用的exporter的CSV为准。

2. 消费级GPU与数据中心GPU

项目 数据中心GPU 消费级
DCGM 完整功能 “受限功能”(DCGM官方文档)
性能剖析 PROF_* Volta及以上数据中心 不支持(exporter CSV注释)
错误隔离·动态页面下线 GA100、GH100、GB10x GA10x·Ada列中没有(文档表格)
行重映射 支持 显示在GA10x·Ada列中(各产品的支持情况未确认)

这是实验环境中的实测结果。在8GB级笔记本GPU(驱动595.91.07)的dcgm-exporter原文中没有 XID_ERRORS 和 PROF_* 行,且 MEMORY_TEMP 与重映射行指标为0。0是代表“支持且正常”还是“不支持故为0”,以及XID行缺失的原因是exporter版本问题还是消费级GPU限制,均未确认。XID目录的“适用对象”列也仅限A100及以上数据中心产品。

3. 如何读取XID

格式为 NVRM: Xid (PCI 주소): 번호, 부가 정보 。读取顺序为:① 目录中的立即处理桶,② 是单独(solo)发生还是与其他XID一同发生(45也会作为其他错误的结果被记录),③ 在同一个GPU上是否重复发生。处理桶包括 RESTART_APP(仅重启应用)、 RESET_GPU, RESTART_BM(重启节点)、 IGNORE, CONTACT_SUPPORT 。Xid 154 会告知所需的恢复操作(None, Drain P2P, Drain and Reset, GPU Reset Required, Node Reboot Required)。

XID 目录名称 立即处理 解析
13 Graphics Engine Exception RESTART_APP 通常为应用越界访问等。若在同一TPC·GPC中重复发生,则需检查硬件
31 GPU memory page fault RESTART_APP MMU故障。若在同一GPU上重复发生则为硬件问题,若在不同GPU上则为应用问题
43 GPU stopped processing IGNORE 因应用软件错误而终止,GPU正常
45 Preemptive cleanup 单独发生则为RESTART_FM,否则为IGNORE 其他错误·应用终止的结果
48 Double Bit ECC Error WORKFLOW_XID_48 不可纠正的ECC。需要重置或重启,若伴随63·64则需DRAIN_AND_RESET
63 / 64 内存重映射事件/失败 IGNORE / RESET_GPU 重映射记录成功/记录失败
74 NVLink Error WORKFLOW_NVLINK_ERR 对端GPU故障在此处可能表现为74
79 Fallen off the bus RESTART_BM 通过PCIe无法访问GPU
94 / 95 包含/不包含内存错误 RESTART_APP / RESET_GPU 94影响单个应用,95影响多个应用

由于目录称31更常见于应用侧,而GPU调试指南将其称为“Suspected Hardware Problems”(疑似硬件问题),因此需要直接建立“单次出现为应用、重复出现为硬件”的分支判断。设备插件将13、31、43、45、68、109硬编码为“应用错误”并予以忽略,而在NVML发出Critical告警的其余XID中将设备标记为unhealthy(源码)。由于源码中的FIXME提到没有从unhealthy恢复的路径,因此推测重置后需要重启插件(未确认)。

4. ECC、行重映射与退役

单比特错误由硬件纠正,双比特错误仅用于检测。计数器分为驱动加载后的volatile(易失性)和终身累计的aggregate。Ampere之后,行重映射替代了页面退役(旧型号最多64个),最多可重映射512次,应用时需要重置GPU。重映射失败标志会在以下情况出现:向已重映射8行的bank再次尝试、向已重映射的行再次尝试、或者总次数达到512次,这是进行RMA(退货授权)判断的依据。依据文档以A100及之后为准。

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

Fabric Manager(FM)在NVSwitch系统中将所有GPU绑定为一个内存结构(Memory Fabric)并监控链路。HGX A100如果在FM初始化之前启动CUDA,则会产生 cudaErrorSystemNotReady 。Hopper之后,GPU和交换机会自行进行链路学习,重置时不再需要FM。FM必须与驱动版本保持一致。如果出现74,则通过 nvidia-smi nvlink -e 查看CRC、replay、recovery错误计数器。致命的SXid会中断CUDA任务并同时留下74和45。Blackwell系列针对NVLink 5使用XID 144到150号段,且不再应用SXid。Ampere NVSwitch系统仅在FM运行时才能逐个重置GPU,否则需要将NVLink绑定的GPU一同重置。

6. 降频与PCIe降级

clocks_event_reasons 是一个位掩码。其取值分别为:GPU空闲 0x1、应用程序时钟 0x2、软件功率上限 0x4、硬件减速 0x8、同步提升 0x10、软件散热 0x20、硬件散热 0x40、硬件功率刹车 0x80、显示时钟 0x100、板卡限制 0x200、可靠性 0x400(go-nvml)。其中 0x8 和 0x40 会将核心时钟降至一半以下,0x80 是外部电源刹车信号,意义重大。Llama 3论文记载,由于正午气温原因,吞吐量呈日周期性变化1%到2%。PCIe需对比 pcie.link.gen.current 和 pcie.link.gen.max, pcie.link.width.current ,但根据手册说明,当前值在空闲时可能会降低,因此必须在负载状态下测量。重试次数为 PCIE_REPLAY_COUNTER ,DCGM health的示例输出将每分钟超过8次视为警告。

7. 一个慢速GPU拖慢整体

Meta报告称,在Llama 3 405B历时54天的区间内,发生了466次中断(其中意外中断419次),约78%的意外中断由硬件原因引起(其中GPU占58.7%)。查阅论文原文发现,正文中虽然记录了58.7%,但这是将表5中打印的比例相加得出的;若按表中具体次数重新统计,GPU分类对应的次数为268次,占419次的64.0%(表中“Faulty GPU”的30.1%似乎是与148次这一计数不符的印刷错误,按计数算为35.3%)。这些内容已整理在下文的“外部依据”中。同一篇文章指出,运行正常但速度缓慢的落后者很难被发现,单个慢速GPU会拖慢数千个GPU,并且表现为通信迟缓。排查顺序为笔者整理:① 比较各Rank的步骤及集合通信时间(PyTorch flight recorder)。② 将慢速Rank GPU的降频原因、温度、功率、PCIe代际与宽度、NVLink错误并排对照。③ 清空节点后,使用 dcgmi diag -r 3(包含targeted_stress、nvbandwidth、nccl_tests)进行确认。DCGM文档明确指出,这并不能替代全面的硬件诊断以及RMA的依据。

8. Kubernetes应对策略:隔离与自动恢复

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["사람 호출"]

即使变为unhealthy状态,已分配的Pod仍然绑定在该设备上(Kubernetes文档),因此必须进行排水(Drain)。1.36的 ResourceHealthStatus(Beta版)通过容器状态 allocatedResourcesStatus 告知设备健康状况。NVSentinel(v1.25.0,Beta/Stable,Kubernetes 1.34+,需要独立版DCGM)使用内置目录对DCGM和syslog的XID进行分类,进而串联起cordon、drain、重置与重启流程,并且如果节点在5分钟内有50%被cordon则会触发熔断器停止操作,默认仅开启监控。Amazon EKS的node monitoring agent将常见的XID映射为节点条件 AcceleratedHardwareReady=False 提升至 48 则执行重启,74 和 79 则记录为更换,未知的 XID 仅作为事件保留。在联系厂商之前, nvidia-bug-report.sh 请收集输出、FM 日志以及 DCGM 诊断日志(参考 GPU 调试指南)。

9. 告警设计

Google SRE 书中提到:“如果响应是机械化的,那它就不是 Page。”以下是我据此提出的建议。

级别 对象 原因
Page 自动恢复失败/重复(同一节点再次发生)、可用 GPU 低于阈值、断路器触发 需要人工判断且容量受到威胁
Ticket XID 63(下次重置时生效)、等待重映射、ECC 呈上升趋势、负载期间 PCIe 降级、硬件热降频、未知 XID 不紧急,在维护窗口处理
仅自动处理与记录 XID 79、48+64、74、95 的 cordon、drain、重置 机械化响应
转交给应用团队 13、31、43、45 单次发生 并非硬件问题

10. 动手尝试(只读)

# 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"

在仅查看使用率、功耗、温度、VRAM 和时钟的仪表盘中,很容易漏掉 GPU 专用的告警规则。笔者曾观察到在 8GB 卡上,服务器进程的分配器缓存仅在 6 分钟内就从 6.4 GB 增长到了 7.8 GB,这种 VRAM 趋势是练习配置告警的极佳素材。

外部依据:通过论文和官方资料确认的内容

由于没有数据中心 GPU 和大规模集群,我们无法直接测量实际故障事件。相反,我们翻阅了大规模运营报告和 NVIDIA 官方文档,比对叙述了 11 篇资料。由于设备和条件不同,外部数据仅用于判断方向是否一致。

主题 资料与确认位置 确认的内容与条件 与本文的关系
Llama 3 的中断统计 Llama Team (Meta), 《The Llama 3 Herd of Models》, arXiv 2407.21783, 第 3.3.4 节与表 5 最多 16K H100,预训练 54 天:中断 466 次(计划内 47 次,意外 419 次),人工介入 3 次。约 78% 的意外中断由硬件引起。GPU 分类 268 起(64.0%):缺陷 GPU 148 起,HBM3 内存 72 起,SRAM 19 起,系统处理器 17 起,静默数据损坏 6 起,热界面与传感器 6 起。气温导致吞吐量呈日周期性波动 1%~2% 支持。 但正文中的“GPU 58.7%”是表格打印比例的总和,按条数计为 64.0%(表 5 中的印刷错误)
研究集群 Kokolis 等 (Meta), 《Revisiting Reliability in Large-Scale ML Research Clusters》, HPCA 2025, arXiv 2410.21680 约 24k 张 A100,11 个月。8 GPU 任务平均故障间隔 47.7 天,1,024 GPU 任务 7.9 小时。由于相同的症状可能由多种原因引起,建议不要断定 NCCL 超时就是网络问题。PCIe 错误与 XID 79 同时出现的比例为 43%、63% 支持。 与第 7 节“切勿通过症状断定原因”方向一致
实际 XID 分布 Cui 等, 《Story of Two GPUs》, SC 2025, arXiv 2503.11901 (NCSA Delta, 448 张 A100 运行 895 天,608 张 H100 运行 146 天) A100 的 XID 31 (MMU) 高达 8,863 起,而 XID 79 仅有 10 起。H100 无法纠正的 ECC 每张 GPU 的平均间隔约为 A100 的三分之一。系统整体平均错误间隔为 1.4 小时(A100)、1.9 小时(H100)。节点可用率约为 99.4%、99.3% 支持。 证明在我们环境中未遇到 XID 79 和行重映射失败并不奇怪的依据
大规模训练的诊断 Jiang 等 (ByteDance), MegaScale, NSDI 2024. Hu 等, NSDI 2024 (arXiv 2403.07648). Dong 等 (Alibaba), C4, HPCA 2025 MegaScale:错误检测与诊断检查平均不到 10 分钟,在 15 分钟内从最后检查点恢复,特定主机在同一前向传播中慢约 10%,移除后 MFU 提升约 0.7%。基础设施故障占约 11%,但占 GPU 时间的 82% 以上(上海人工智能实验室分析)。C4:若无诊断工具,约 30% 的时间用于检测、诊断、隔离和重启 支持。 与第 7 节中“单张慢 GPU 会拖慢整体”的描述一致
XID 与行重映射 NVIDIA XID 目录(2026-09-09 更新)、GPU Memory Error Management 文档 11 篇资料中 12 个 XID(13、31、43、45、48、63、64、74、79、94、95、154 等)的处置分类,以及行重映射最多 512 次、每个 bank 8 个行失败的条件与文档一致。目录的应用对象列包含 A100、H100、B100、GB200 支持。 错误隔离和动态页面下线功能仅存在于 GA100、GH100、GB10x 中,行重映射在 GA10x 和 Ada 上也有显示,但文档并未以产品级别作出承诺
消费级 GPU 的指标 DCGM 文档的支持表、dcgm-exporter 的默认收集文件与源码 在消费级产品线中,策略告警仅在 Tesla 上提供,诊断仅支持 1 级。分析指标仅在数据中心的 Volta 及以上架构中支持 支持。 与第 17 篇资料的描述一致

厂商数据仅搬运了正文中明确记录条件的资料,未能打开论文正文的资料则未予使用。

11. 面试常见问题

  1. 看到了 XID 79。应该怎么做? 这意味着无法通过 PCIe 访问 GPU,目录分类为重启节点。在执行 cordon 和 drain 后重启,如果反复出现,则检查链路、电源和系统事件日志并进行更换。
  2. XID 13 和 48 该如何处理? XID 13 通常是应用错误,应用 Compute Sanitizer 查看;如果同一 TPC/GPC 中反复出现,则怀疑是硬件问题。XID 48 是无法纠正的 ECC,需要重置或重启;如果伴随 63 或 64,则在 drain 后重置。
  3. 如何找到单张变慢的 GPU? 通过各 rank 的通信时间缩小可疑 rank 范围,并对比该 GPU 的降频原因、温度、PCIe 和 NVLink 错误。在清空节点后, dcgmi diag -r 3 进行确认。
  4. 在自动恢复中需要注意什么? 设置并发上限和断路器,防止一次性隔离过多设备,重复失败的情况则交由人工处理。重置时必须确保没有进程在使用 GPU。
  5. 什么情况下触发 Page? 机械化处理的事件应实现自动化并仅保留记录。当自动恢复失败或重复发生、可用 GPU 低于阈值时,触发 Page。

12. 常见误区

13. 参考资料与确认版本

全部于 2026-10-05 访问。

实测:从三款消费级 GPU 读取的值(只读)

在台式机 24GB 级(Ampere 架构,驱动 570.195.03)、笔记本 8GB 级(Ada 架构,595.91.07)、笔记本 6GB 级(Ampere 架构,595.91.07)中读取了 nvidia-smi -q -d ECC,ROW_REMAPPER,PAGE_RETIREMENT, --query-gpu 字段和内核日志。三者均处于空闲状态,未做任何更改。

项目 24GB 级台式机 8GB 级笔记本 6GB 级笔记本
ECC 模式与错误计数器 N/A N/A N/A
页面停用 N/A N/A N/A
行重映射 N/A 有值:可纠正 0,不可纠正 0,等待 No,失败 No N/A
Bank 可用性直方图 无 最大 64 个 Bank,其余区间为 0 无
remapped_rows.* 查询 [N/A] 0、0、No、No [N/A]
NVRM: Xid 行(开机后) 0 起 0 起 0 起

局限性:仅测试了消费级的三种型号,未能遇到数据中心 GPU 的 ECC、行重映射失败、XID 79 等实际故障。DCGM 的 XID_ERRORS 指标为何不会在消费级 GPU 上显示(是 exporter 版本问题还是 GPU 限制),也无法通过本次测试区分(未确认)。

确认的版本:GPU Operator 26.7.1 捆绑包中的 DCGM 4.6.1-1、DCGM Exporter 4.6.1-4.8.4、Kubernetes 稳定版 v1.37.1。

未确认的事项:消费级 GPU 的 ECC、行重映射、XID 指标的实际输出,实验环境中 exporter 的版本,查询字段名(基于第三方公开的 --help-query-gpu 输出标准)在驱动 595 中是否有效,以及目录是否适用于消费级 GPU。告警等级表和调查顺序并非官方规定,而是本人的判断。

登录后即可点赞

评论

还没有评论。

登录后即可发表评论