欢迎光临
我们一直在努力

GPU服务器显存报错

数据中心 GPU 服务器“显存报错”排查全攻略:怎么看日志 · 怎么定位 · 怎么处理

摘要:在数据中心(A100 / H100 / V100 / L40 / 4090 混布,K8s 或 Slurm 调度)场景里,“显存报错”是 GPU 故障告警里最容易被误判的一类。它既可能是应用层 CUDA 越界访问(软件问题,GPU 健康),也可能是 HBM 出现不可纠正 ECC(硬件问题,需要隔离 / RMA)。本文基于 NVIDIA 官方文档和本人多个集群的运维实践,给出一套“看日志 → 判类别 → 定位 → 处理 → 回归”的完整闭环,所有命令均可直接复制执行。


一、先梳理:用户说的“显存报错”到底是哪一种

接到告警或用户反馈时,先别急着换卡。把“显存报错”拆成三类,排查方向完全不同:

类别典型表现性质处理方式
应用层报错 CUDA error、OOM、illegal memory access,nvidia-smi 正常 软件 / 用户程序 退还给业务方,GPU 不用动
ECC / 显存硬件错误 Xid 48/63/64/92/94/95,ECC 计数增长、页退役 硬件退化 隔离、reset、评估 RMA
掉卡 / 链路错误 nvidia-smi 显示 ERR! / N-A,Xid 74/79 PCIe / NVLink / 电源 / 卡硬件 重启、排查 riser / 电源,RMA

核心判断原则:Xid 13 / 31 / 43 基本是应用层;Xid 48 / 63 / 64 / 74 / 79 / 92 / 94 / 95 才是硬件层。第一步永远是抓 Xid,而不是重启。


二、日志在哪里:5 个必看的信息源

定位显存问题,下面 5 个来源按优先级看,缺一不可。

1. 内核日志(Xid 的真相来源)

NVIDIA 驱动的所有 Xid 事件都写进内核日志,这是第一现场。

# 实时/历史 Xid 事件(最常用)
dmesg -T | grep -iE "NVRM: Xid"
journalctl -k –since "2 hours ago" | grep -iE "nvidia|nvrm|xid"

# 传统 syslog 路径(CentOS/RHEL)
grep "Xid (PCI" /var/log/messages
# Debian/Ubuntu
grep "Xid (PCI" /var/log/kern.log

输出形如:NVRM: Xid (PCI:0000:3b:00): 48, An uncorrectable double bit error (DBE) has been detected。其中 48 是错误码,PCI 地址定位到具体哪张卡。

2. nvidia-smi:ECC / 页退役 / 行重映射

这是本文的主战场,第四、五节详讲,先把命令列全:

nvidia-smi -q -d ECC,PAGE_RETIREMENT,ROW_REMAPPER # 单卡加 -i 0
nvidia-smi -q | grep -i 'bit ecc'
nvidia-smi –query-retired-pages=gpu_uuid,retired_pages.address,retired_pages.cause –format=csv

3. DCGM / dcgm-exporter(监控与诊断)

dcgmi health -s a # 开启全部健康监控
# 等待 >=60s 或复现一次后查看
dcgmi health -c

# 诊断分级:1=秒级快速,2=约2分钟,3=约15分钟硬件压测,4=长时间
# 二级及以上务必在节点排空后跑
dcgmi diag -r 1 -i 0
dcgmi diag -r 3 -j > diag.json

说明:dcgmi diag 是官方“这张卡到底健不健康”的权威工具;-r 3 会对显存做读写校验(默认占用 75% 显存、5 种 pattern),生产务必先 drain 节点。

4. 系统层:PCIe、电源、温度

lspci -vvv -s 0000:3b:00.0 | grep -iE "LnkSta|width|speed"
nvidia-smi –format=csv –query-gpu=index,temperature.gpu,power.draw,pcie.link.width.current

# IPMI / BMC 看电源与主板事件(关键:Xid 79 先看这里)
ipmitool sel list | grep -iE "power|voltage|thermal"

5. 完整 bug report(提工单必备)

nvidia-bug-report.sh # 生成 nvidia-bug-report.log,连同 DCGM 日志一起提交厂商


三、Xid 错误码速查表(必须背下来的几个)

完整清单见 NVIDIA 官方 Xid Errors 文档,下表是数据中心最高频、且与显存直接相关的一组:

Xid含义是否硬件故障建议动作
13 Graphics Engine Exception(多为越界访问) 退回业务方,排查 CUDA 代码
31 GPU memory page fault(非法地址) 通常否 偶发重启应用;反复出现再收集日志
43 GPU 停止处理,应用被终止 应用层,忽略
45 Robust channel 清理 伴随其他 Xid 才关注
48 Double Bit ECC(不可纠正) 见第五节流程
63 页退役 / 行重映射已记录成功 是(退化信号) reset 或重启使其生效
64 页退役 / 重映射记录失败 reset GPU,失败则 RMA 候选
74 NVLink 错误(卡/交换机间) 排查链路、重做 NVLink 连接
79 GPU has fallen off the bus 重启节点、查 PCIe/电源/riser
92 High single-bit ECC rate 是(预警) 监控趋势,加速则计划换卡
94 Contained ECC error(Hopper+) 仅该应用受影响,重启应用
95 Uncontained ECC error 该卡近期输出均可能污染,谨慎

经验:Xid 79 在 4/8 卡通过 riser 转接的服务器上,大概率不是 GPU 本体,而是 PCIe riser / 电源接头热胀冷缩松动。优先 re-seat(重新插拔)、换供电线、复测,再考虑 RMA,能省掉大量误换卡。


四、怎么看 ECC / 显存状态:逐条解读 nvidia-smi

1. ECC 计数:volatile vs aggregate

nvidia-smi –query-gpu=index,ecc.errors.corrected.volatile.total,\\
ecc.errors.uncorrected.volatile.total,\\
ecc.errors.corrected.aggregate.total,\\
ecc.errors.uncorrected.aggregate.total –format=csv

解读要点:volatile = 自驱动加载以来(reset/重载清零),看“增量”;aggregate = 累计(烧录在 infoROM,生命周期口径),看“历史”。确认新事件看 volatile 差值,评估换卡看 aggregate 趋势。

2. Retired Pages(页退役)

nvidia-smi -i 0 -q -d PAGE_RETIREMENT
# …
# Retired pages
# Single Bit ECC : 2
# Double Bit ECC : 0
# Pending Page Blacklist : Yes

  • Single Bit ECC(SBE):可纠正,会累积,增长过快才是问题;
  • Double Bit ECC(DBE):不可纠正,出现即严重,触发 Xid 48;
  • Pending Page Blacklist:
    • No = 坏页已全部隔离,不影响后续;
    • Yes = 有待隔离的坏页,需重启节点或 reset GPU 才会生效,在此之前坏地址仍可被分配到。

3. Row Remapper(Ampere 及以后,行重映射)

nvidia-smi -q -d ROW_REMAPPER

重点关注三个值:Remapped Rows(已重映射行数)、Pending(Yes = 需 reset 生效)、Remapping Failure Occurred(Yes = 备援行已耗尽,无法自愈,RMA 候选)。


五、标准化处理流程(Runbook)

下面是可直接落地为 SOP / 自动化脚本的流程。触发条件:出现 Xid 48/63/64/74/79/92/94/95,或 dcgmi diag 失败,或 row remapper 报 pending/failure。

步骤 1:保留现场证据(reset 前必做)

NODE=gpu-19.dc1 GPU=3
ssh $NODE 'dmesg -T | grep -i "NVRM: Xid"'
ssh $NODE nvidia-smi –query-gpu=index,uuid,serial,pci.bus_id –format=csv
ssh $NODE nvidia-smi -i $GPU -q -d ECC,ROW_REMAPPER,PAGE_RETIREMENT
# 复制出来归档,reset 会清空 volatile 计数!

步骤 2:判类别(应用 vs 硬件)

Xid 13/31/43 → 退回业务方(compute-sanitizer / cuda-gdb 排查),GPU 保持健康,不要走 RMA;其余 → 继续本流程。

步骤 3:隔离节点(避免新任务调度进来)

# K8s
kubectl cordon $NODE
kubectl drain $NODE –ignore-daemonsets –delete-emptydir-data –timeout=15m

# Slurm
scontrol update nodename=$NODE state=drain reason="XID hardware fault"

步骤 4:排空并重置 GPU

nvidia-smi –query-compute-apps=pid,process_name,used_gpu_memory –format=csv
# 确认无进程占用后
nvidia-smi -i $GPU -r # 单卡 reset
# Xid 79(掉卡)时 reset 无效,必须整机重启

步骤 5:回归验证

dcgmi diag -r 3 -i $GPU -j > diag-after.json # 约15分钟硬件压测
# 或仅显存专项
dcgmi diag -r memory -p "memory.is_allowed=True;memory.l1_is_allowed=True"

判定:diag 全 Pass 且 ECC 计数不再增长 → 解除隔离、放回生产;仍 Fail 或出现 Xid → 进入 RMA 评估。

步骤 6:RMA 判定标准(NVIDIA 官方口径)

指标建议 RMA 阈值
Double Bit ECC(30 天内) ≥ 5
Double Bit ECC(保修期内累计) ≥ 10
SBE + DBE 合计(保修期内累计) ≥ 60
Row Remapping Failure = Yes 立即 RMA 候选
同一节点反复 Xid 48/79 换卡 + 排查主板/电源

提 RMA 时一并附上:机型 / OS / 驱动版本、GPU 序列号与 UUID、PCI bus id、完整 dmesg、nvidia-bug-report.log、DCGM diag 日志、应用框架与版本。信息越全,厂商响应越快。


六、解决思路:三个真实场景对照

场景现象定位路径处置
训练偶发 CUDA error 仅 Xid 13/31,ECC 全 0 查用户 CUDA 越界 / OOM 退回业务方
单卡 ECC 持续增长 Xid 48 + 63,DBE 递增 对比同节点其他卡 ECC 趋势 drain → reset → 监控,达阈值 RMA
整机某卡消失 nvidia-smi ERR!,Xid 79 IPMI 电源事件 + lspci 是否可见 重插 riser/供电,复测,否则 RMA

通用心法:对比法 + 趋势法。数据中心的价值在于“同型号、同负载、同环境”的横向对比——某一张卡 ECC 计数明显偏离同伴,基本可以定性为硬件退化,比任何单次告警都可靠。建议把 ECC、温度、功耗、PCIe width、throttle reason 全部接入 Prometheus,做差分告警而不是绝对值告警。


七、防呆:常见坑

  • reset 前没 drain,K8s 把新 Pod 调度到坏卡上,训练又崩;
  • 只看 aggregate 不看 volatile,误判“一直在出错”;
  • Pending=Yes 没重启,以为已隔离其实坏页还能被分到;
  • 把 Xid 13/31 当硬件故障,浪费 RMA 配额;
  • 二级以上 dcgmi diag 直接在生产跑,压测打爆在线任务;
  • HGX / NVSwitch 机型只换一张卡没协调 Fabric Manager,NVLink 域起不来。

  • 八、一句话总结

    看日志先抓 Xid → 用 nvidia-smi 看 ECC / Retired Pages / Row Remapper → 区分应用层与硬件层 → drain + reset + dcgmi diag 回归 → 按阈值评估 RMA。

    把这条链路做成自动化 Runbook,数据中心 GPU 运维就从“救火”变成“可度量、可预测的容量管理”。


    参考资料

  • NVIDIA Xid Errors 官方文档:docs.nvidia.com/deploy/xid-errors/
  • NVIDIA GPU Debug Guidelines:docs.nvidia.com/deploy/gpu-debug-guidelines/
  • Dynamic Page Retirement:docs.nvidia.com/deploy/dynamic-page-retirement/
  • DCGM Diagnostics 命令参考:docs.nvidia.com/datacenter/dcgm/latest/reference/command-line-reference/dcgmi/dcgmi-diag.html
  • DCGM GPU Memory Plugin(显存专项测试):docs.nvidia.com/datacenter/dcgm/latest/user-guide/diag-memory-plugin.html

  • 原创内容,转载请注明出处。如有勘误欢迎在评论区交流。

    赞(0)
    未经允许不得转载:171主机测评 » GPU服务器显存报错
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址