常见GPU故障问题排查步骤
2026-02-11
故障实例
00
请注意,本文编写于 52 天前,最后修改于 5 天前,其中某些信息可能已经过时。

目录

一、故障症状速查表
二、分层排查流程图
三、逐层详细排查
第一层:驱动层(最常见)
3.1.1 快速诊断
3.1.2 常见问题与修复
3.1.3 驱动重装(保留配置)
第二层:硬件识别层
3.2.1 PCIe 链路检查
3.2.2 物理定位
3.2.3 掉卡/链路降级处理
第三层:散热与功耗层
3.3.1 温度监控
3.3.2 压力测试验证散热
3.3.3 散热故障处理
第四层:显存与计算层(ECC 错误)
3.4.1 ECC 错误查询
3.4.2 显存压力测试
3.4.3 ECC 错误处理流程
3.4.4 显存行重映射(Row Remapping)
第五层:软件与应用层
3.5.1 CUDA 与驱动兼容性
3.5.2 应用级调试
四、故障定位速查命令集
五、典型故障案例
案例 1:训练中途 loss 突变为 NaN
案例 2:8 卡集群随机掉卡
案例 3:新装机 nvidia-smi 无输出
六、预防性维护建议

一、故障症状速查表

现象可能层级紧急程度
nvidia-smi 报错 / 无输出驱动/内核🔴 高
GPU 温度 > 90°C / 降频散热🟡 中
显存不足 OOM应用/配置🟡 中
ECC 单比特错误 (SBE)显存老化🟡 中
ECC 双比特错误 (DBE)显存损坏🔴 极高
训练 loss 异常 / 结果不对计算单元🔴 高
PCIe 报错 / 掉卡硬件连接🔴 高
功耗不达标 / 电源告警供电🟡 中

二、分层排查流程图

展开代码
┌─────────────────┐ │ 现象观察 │ │ nvidia-smi / │ │ 应用报错 / │ │ 系统日志 │ └────────┬────────┘ ▼ ┌─────────────────┐ Y ┌─────────────────┐ │ 驱动是否正常? │ ─────────→│ 驱动层排查 │ │ nvidia-smi 有输出│ │ 重装/降级/补丁 │ └────────┬────────┘ └─────────────────┘ │ N ▼ ┌─────────────────┐ Y ┌─────────────────┐ │ 能否识别硬件? │ ─────────→│ 硬件层排查 │ │ lspci 有 NVIDIA │ │ 重插/换槽/换卡 │ └────────┬────────┘ └─────────────────┘ │ N ▼ ┌─────────────────┐ Y ┌─────────────────┐ │ 温度/功耗异常? │ ─────────→│ 散热/供电排查 │ │ │ │ 清灰/换硅脂/查电源│ └────────┬────────┘ └─────────────────┘ │ N ▼ ┌─────────────────┐ Y ┌─────────────────┐ │ 显存/计算错误? │ ─────────→│ ECC/计算单元排查│ │ ECC 报错 / loss 异常│ │ 隔离故障卡/报修 │ └────────┬────────┘ └─────────────────┘ │ N ▼ ┌─────────────────┐ │ 软件/应用层 │ │ CUDA 版本 / │ │ 代码逻辑 / │ │ 集群调度 │ └─────────────────┘

三、逐层详细排查

第一层:驱动层(最常见)

3.1.1 快速诊断

展开代码
# 基础检查 nvidia-smi # 无输出 = 驱动问题 dmesg | grep -i nvidia # 内核报错 cat /var/log/nvidia-installer.log # 安装日志 # 驱动状态 modinfo nvidia # 驱动模块信息 lsmod | grep nvidia # 模块是否加载 cat /proc/driver/nvidia/version # 驱动版本

3.1.2 常见问题与修复

现象根因修复
nvidia-smiFailed to initialize NVML驱动与内核不匹配重装驱动或降级内核
modprobe: ERROR: could not insert 'nvidia'Secure Boot 阻止BIOS 关闭 Secure Boot
新内核启动后失效DKMS 未自动编译sudo dkms autoinstall
CUDA 版本不匹配多版本冲突update-alternatives 管理

3.1.3 驱动重装(保留配置)

展开代码
参考该篇文章 http://8.148.180.168:4000/post/87

第二层:硬件识别层

3.2.1 PCIe 链路检查

展开代码
# 查看 GPU 是否在总线上 lspci | grep -i nvidia # 输出示例:0000:41:00.0 3D controller: NVIDIA Corporation GV100GL [Tesla V100 PCIe 32GB] # 详细链路状态 sudo lspci -vv -s 0000:41:00.0 | grep -E "LnkCap|LnkSta" # LnkCap: 链路能力(支持 PCIe 3.0 x16) # LnkSta: 当前状态(实际协商速度) # 关键:若 LnkSta 显示 x4 或 PCIe 1.0 = 插槽/线缆问题

3.2.2 物理定位

展开代码
# 获取槽位信息(用于带外定位) sudo dmidecode -t slot | grep -B2 -A2 "Bus Address: 41" # 或结合温度定位(跑压力测试后看 BMC 温度) ./gpu_burn 60 & # 然后到 IPMI/BMC 查看各 PCIe 设备温度,最高即目标卡

3.2.3 掉卡/链路降级处理

展开代码
# 1. 软件层面重扫描(无需重启) echo 1 | sudo tee /sys/bus/pci/rescan # 2. 若无效,热卸载后重识别(内核 4.19+) sudo nvidia-smi drain -p 0000:41:00.0 -m 1 # 卸载 echo 1 | sudo tee /sys/bus/pci/rescan # 重扫 sudo nvidia-smi drain -p 0000:41:00.0 -m 0 # 重新启用 # 3. 仍无效 = 物理重插或换槽

第三层:散热与功耗层

3.3.1 温度监控

展开代码
# 实时温度 watch -n 1 nvidia-smi # 详细温度与限制 nvidia-smi -q -d TEMPERATURE,PERFORMANCE,POWER # 关键字段: # - GPU Current Temp # - GPU Shutdown Temp(硬限制,通常 100°C) # - GPU Slowdown Temp(软限制,通常 85°C) # - Clocks Throttle Reasons(若显示 "HW Slowdown" = 过热降频)

3.3.2 压力测试验证散热

展开代码
# 满载测试 5 分钟 ./gpu_burn 300 # 观察: # - 温度是否持续上升至 90°C+ # - 是否触发 [Clocks Throttle Reasons] "HW Slowdown" # - 功耗是否达到 TDP(如 300W/300W)

3.3.3 散热故障处理

现象处理
温度高但风扇不转检查风扇电源线 / 更换风扇模组
温度高但风速低BIOS 清灰 / 更换轴承老化风扇
温度高、风速高仍降频更换硅脂 / 检查散热器接触
多卡温差 > 15°C检查风道 / 调整卡间距

第四层:显存与计算层(ECC 错误)

3.4.1 ECC 错误查询

展开代码
# 查看 ECC 统计 nvidia-smi -q -d ECC # 或 nvidia-smi ecc --error-correcting-code-config # 关键字段: # - Aggregate ECC Errors # - Single Bit: 可纠正,监控即可 # - Double Bit: 不可纠正,立即更换

3.4.2 显存压力测试

展开代码
# 显存满载测试(触发潜在故障) ./gpu_burn 600 -m 100% # 10 分钟满载 # 同时监控 watch -n 5 'nvidia-smi -q -d ECC,MEMORY | grep -A5 "ECC Errors"'

3.4.3 ECC 错误处理流程

展开代码
发现 SBE(单比特错误) │ ├── 错误数 < 10/天 ──→ 监控,记录趋势 │ └── 错误数 > 10/天 或持续增长 │ ▼ 运行显存压力测试 30 分钟 │ ├── 测试期间无新增 ──→ 继续监控 │ └── 测试期间新增或出现 DBE │ ▼ 标记故障卡 → 隔离任务 → 申请更换

3.4.4 显存行重映射(Row Remapping)

展开代码
# 查看重映射状态 nvidia-smi -q | grep -A10 "Row Remapper" # 关键字段: # - Remapping Failure: Yes = 显存物理损坏,必须换卡 # - Remapped Rows: 计数持续增长 = 老化预警

第五层:软件与应用层

3.5.1 CUDA 与驱动兼容性

展开代码
# 查看 CUDA 版本 nvcc --version cat /usr/local/cuda/version.json 2>/dev/null || ls /usr/local/cuda* # 兼容性矩阵(关键) # CUDA 12.x 需要驱动 >= 525.60.13 # CUDA 11.8 需要驱动 >= 450.80.02 # 若应用报 CUDA error 35 / 999 # = 驱动/CUDA/应用版本三角不匹配

3.5.2 应用级调试

展开代码
# CUDA 内存检查 cuda-memcheck ./your_app # Nsight 详细分析 nsys profile -t cuda,nvtx,osrt -o report.qdrep ./your_app ncu --metrics sm__throughput.avg.pct_of_peak_sustained_elapsed ./your_app

四、故障定位速查命令集

展开代码
# ========== 30 秒快速诊断 ========== nvidia-smi # 基础状态 nvidia-smi -q | grep -E "Serial|Product|Temp|Power|ECC|Remap" # 关键信息 dmesg | tail -50 | grep -iE "nvidia|pcie|error|warn" # 内核日志 lspci | grep -i nvidia # 硬件识别 sudo ipmitool sel list | grep -iE "gpu|pcie|temp|fan" # 带外日志 # ========== 深度诊断 ========== nvidia-smi -q -d ECC,TEMPERATURE,PERFORMANCE,POWER,CLOCK,PCIE # 全维度 cat /proc/driver/nvidia/gpus/*/information # 每卡详情 sudo nvidia-bug-report.sh # 官方诊断脚本 # ========== 压力验证 ========== ./gpu_burn 300 -m 100% # 核心+显存满载 ./gpu_burn 600 # 长时间稳定性

五、典型故障案例

案例 1:训练中途 loss 突变为 NaN

排查结果
nvidia-smi -qECC SBE 计数 10万+
显存压力测试10 分钟内新增 50 个 SBE
根因显存老化,偶发位翻转
处理隔离该卡,更换后正常

案例 2:8 卡集群随机掉卡

排查结果
lspci -vv掉线卡显示 LnkSta: Speed 2.5GT/s, Width x4
正常卡LnkSta: Speed 16GT/s, Width x16
根因PCIe 延长线接触不良,协商降级
处理重插线缆,固定卡扣,正常

案例 3:新装机 nvidia-smi 无输出

排查结果
dmesgNVRM: The NVIDIA probe routine was not called
securebootBIOS 中 Enabled
根因Secure Boot 阻止未签名驱动
处理BIOS 关闭 Secure Boot,正常

六、预防性维护建议

周期动作工具
每日监控 ECC 错误趋势nvidia-smi -q + Prometheus
每周温度/功耗基线对比nvidia-smi dmon
每月压力测试验证稳定性gpu_burn 600
每季物理清灰,硅脂检查目视 + 温度压测
每年全卡 ECC 清零,趋势分析nvidia-smi --ecc-reset

本文作者:zzz

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!