RTX 5090 深度学习环境显卡掉线排查记录
先交代一下这套深度学习环境的硬件配置:
- 显卡:技嘉 RTX 5090 纯血版(国外背回来的)
- CPU:AMD 9950X
- 主板:华硕 X870E-PLUS WIFI7
- 固态:三星 990 Pro 2TB
- 机械硬盘:西部数据紫盘 2TB
- 机箱:安钛克 FLUX SE
- 电源:安钛克 NE 1300 金牌(1300W,ATX 3.0,原生 12V-2x6)
- 风冷散热:九州风神 阿萨辛4
- 内存:美商海盗船 DDR5 5200 32G×2
- 系统:Ubuntu 24.04.4 LTS,内核 6.17.0-29-generic
- 驱动:NVIDIA 590.48.01(开源内核模块 + GSP),CUDA Runtime 13.1
最近在跑深度学习训练时,接连遇到几类不同表现的黑屏和 GPU 掉盘问题。起初我以为在 BIOS 里禁用核显就能解决,但实际测试下来发现问题仍然存在。经过日志排查和限功耗验证,最终确认:这不是显存不足,也不是代码问题,而是 RTX 5090 满功耗下的瞬时功耗尖峰触发供电保护,导致 GPU 掉出 PCIe 总线(Xid 79)。
一、最初遇到的三类现象
情况一:直接掉盘,找不到 GPU 节点
这是比较棘手的一种情况。当时正在跑训练,中途桌面突然消失,机箱风扇维持高转速。通过终端 SSH 连进去后,输入 nvidia-smi 提示找不到显卡设备,表现为典型的 GPU 掉盘。
初步分析,这多半是在负载突变或者供电出现瞬时波动时,触发了主板或电源的某种保护机制,导致 PCIe 设备被系统断开。针对这种硬件级别的保护掉线,最直接的恢复方式只能是硬重启机器。
情况二:能识别显卡,但无信号输入且无桌面
这种情况表现为:开机后 nvidia-smi 能正常找到显卡并输出状态,但是显示器提示无信号输入,使用 ToDesk 远程连接时也显示没有桌面环境。
遇到这种状况,我的处理方式是彻底断电重置:关机,拔掉主机电源线,静置等待一分钟左右,然后再插上电源开机。通常这样操作一次就能恢复正常。推测可能是主板静电或某些电容的残余电荷干扰了显示输出,拔电静置可以帮助主板彻底放电。
情况三:远程有桌面,但本地显示器黑屏
第三种情况有些特殊:本地显示器依然毫无反应(无输入信号),但是通过 ToDesk 远程连接,居然可以正常看到并操作 Ubuntu 桌面。
经过摸索,这主要可能是 Ubuntu 下的显示服务器配置异常,或者显卡驱动与 Wayland 发生冲突。可以在 ToDesk 里打开终端,尝试重置相关配置:
-
清理旧的 xorg 配置文件:
1
sudo rm /etc/X11/xorg.conf
-
重新生成 NVIDIA 的 xconfig:
1
sudo nvidia-xconfig
-
关闭 Wayland,强制系统使用 X11 协议。编辑 gdm3 的配置文件:
1
sudo nano /etc/gdm3/custom.conf
找到里面被注释掉的
#WaylandEnable=false这一行,去掉前面的#号,变成WaylandEnable=false,然后保存退出。 -
重启系统:
1
sudo reboot
补充说明:重启的时候,建议给显示器换一个 DP 接口重新插拔一次,通常就能正常点亮。
二、再次复现:batch 增大后频繁掉盘
后续又遇到了一次更稳定可复现的问题:batch 设为 6 时,可以轻松跑完 40k 步,此时显存只用约 10GB;将 batch 改为 12 后,显存占用约 18GB,训练跑到约 8000 步时显示器黑屏,nvidia-smi 找不到显卡。
当时 SSH 仍能连上,风扇狂转,训练实际已经停止。物理强制关机重启后一切恢复正常,但再次开跑仍会出现上述情况,这说明它已经不是偶发现象。
最初怀疑过几类原因:
- 散热不佳:主机原本放在桌子下面,空间狭小,通风不良。
- 电源余量不足:满载时整机功耗过大,1300W 电源可能不够。
- 硬件连接问题:显卡支架不稳、供电线插接不牢或弯折过大,但检查后暂未发现明显问题。
当时的计划是先把主机从桌子底下挪到机架上,并加装风扇。如果之后不再出现“显存总共 32GB、刚用了 20GB 左右就桌面崩溃”的情况,就说明大概率是散热或通风问题;如果仍然不好,再考虑联系售后或上门维修。
三、关键复现:开训 14 秒就崩溃
后来我已经把机器搬到了机架上,也更换了工位。再次启动训练时,又遭遇桌面突然消失、显示器黑屏、风扇狂转,而且这次仅仅开训 14 秒就崩了。
这时基本可以确定:这不是普通的显存 OOM。OOM 通常只会让 Python 进程报错退出,不会让整机黑屏、GPU 掉盘、风扇狂转并且必须硬关机。
崩溃前内核日志出现大量 NVIDIA GSP 相关错误:
1 | NVRM: _issueRpcAndWait: rpcSendMessage failed with status 0x0000000f for fn 76 |
这表示 NVIDIA GSP(GPU System Processor)固件 RPC 通信失败或超时。换句话说,GPU 的 GSP 固件已经挂掉,驱动只能疯狂重试。一旦 GSP 死掉,挂在 GPU 上的 Xorg 显示就会冻结(黑屏、ToDesk 掉线),风扇也可能因为失去控制进入 100% 失效保护状态。
继续往前看崩溃第一现场,在 16:12:16,也就是启动训练那一刻,出现了更关键的日志:
1 | NVRM: Xid (PCI:0000:01:00): 79, pid=..., name=cursor, GPU has fallen off the bus. |
其中 Xid 79 = GPU 从 PCIe 总线上掉了。这基本可以解释所有现象:GPU 整个从总线消失后,后面那一大片 GSP RPC 失败只是驱动在对一个“已经不存在的 GPU”疯狂重试的连锁反应。Node Reboot Required 也解释了为什么必须硬关机才能恢复。
几个关键细节:
- 训练日志目录时间戳是 16:12:02,而 GPU 掉总线发生在 16:12:16,开训仅 14 秒就崩了。
- 崩溃前没有过热迹象,
HW Thermal Slowdown全程为 0。 - 崩溃前无任何 PCIe AER 报错,属于“毫无征兆瞬间掉总线”。
- 当前 GPU 功率上限为 600W,最低可限制到 400W。
- 当时 PCIe 链路状态为
pcie.link.gen.current = 5,也就是 PCIe Gen5 x16。
四、排除项与根因判断
1. 排除显存不足
显存不足只会让 Python 进程报错退出,最多导致训练进程中断,不会导致整机黑屏、ToDesk 掉线、风扇狂转,也不会让 GPU 从 PCIe 总线上消失。
因此,这次问题不是普通 OOM,也不是配置文件里 batch 太大导致的常规训练错误。
2. 排除单纯过热
虽然最初怀疑过散热,但这次关键复现只训练了 14 秒就崩溃,而且日志里没有 HW Thermal Slowdown。GPU 还没来得及热起来,因此单纯过热不是主要原因。
3. 排除电源容量不足,但保留瞬时尖峰判断
安钛克 NE1300G 是 1300W 金牌 ATX 3.0 电源,带 RTX 5090 + AMD 9950X 的额定容量理论上绰绰有余。同时,电源线是原生 12V-2x6,并且已经重新检查确认插紧。
所以“电源额定容量不够”基本可以排除。但 RTX 5090 标称功耗约 575–600W,毫秒级瞬时尖峰可能冲到 900W+,仍然可能触发电源 OCP 或造成瞬时掉电,让 GPU 掉出 PCIe 总线。
4. PCIe Gen5 链路也曾被怀疑
因为当前 GPU 正跑在 PCIe Gen5 x16,而 RTX 50 系 + AM5 / X870E 平台对信号完整性要求很高,所以也曾怀疑过 PCIe Gen5 链路在满载瞬间不稳定。
不过,后续限功耗实验给出了更直接的判断:限制功率上限到 400W 后,同一份训练配置已经稳定运行 1 小时以上。这说明主因更偏向满功耗下的瞬时功耗尖峰,而不是显存、代码、驱动或单纯 PCIe Gen5 链路问题。
五、决定性验证:限制功耗到 400W 后稳定训练
执行以下命令,将 RTX 5090 的功耗上限从 600W 限制到 400W:
1 | sudo nvidia-smi -pm 1 # 持久模式 |
然后重新启动同一份训练:
1 | cd /home/kxh/Projects/gqa |
结果:同一份配置已经稳定训练 1 小时以上,没有再次黑屏或掉盘。
这个实验基本确认了根因:
RTX 5090 在满功耗下的瞬时功耗尖峰触发供电保护或瞬时掉电,导致 GPU 掉出 PCIe 总线(Xid 79)。限制功耗上限后,尖峰被削平,系统恢复稳定。
这与显存不足、训练代码、数据集本身都无关。降功耗主要影响训练速度,不影响模型精度结果,仍然可以正常用于论文复现和实验对比。
六、短期解决方案:先稳定训练
1. 临时设置
每次重启后手动执行:
1 | sudo nvidia-smi -pm 1 |
验证当前功耗上限:
1 | nvidia-smi -q | grep "Current Power Limit" |
如果显示接近 400.00 W,说明设置已经生效。
2. 开机自动生效
因为 nvidia-smi -pl 400 重启后会失效,如果不固化,下次重启又会恢复 600W,可能再次崩溃。推荐写成 systemd 服务:
1 | sudo tee /etc/systemd/system/nvidia-powerlimit.service >/dev/null <<'EOF' |
检查服务状态:
1 | systemctl status nvidia-powerlimit.service |
七、在稳定前提下兼顾速度
400W 相比满血 600W 可能会慢一些,大约影响训练速度 10–20%,但不影响精度。如果后续希望兼顾速度,可以用二分法逐步上探稳定功耗:
1 | sudo nvidia-smi -pl 480 |
跑训练观察至少 30 分钟:
- 如果崩溃,就退回 400W;
- 如果稳定,可以再尝试 500W、520W 或更高;
- 找到稳定值后,把 systemd 服务里的
-pl 400改成该值。
不过在论文复现和实验验证阶段,建议先稳定在 400W,把实验完整跑完。速度优化可以之后再做。
八、长期治本方案
如果后续想恢复更高功耗,甚至接近满血 600W,可以按成本从低到高逐项尝试。
1. BIOS 中将显卡槽降到 PCIe Gen4
这是 50 系显卡掉总线问题中比较常见、也比较有效的稳定性修复方式。
操作路径大致为:
1 | 重启按 Del 进入 ASUS BIOS |
对单卡训练来说,PCIe Gen4 x16 的带宽基本够用,对训练性能影响很小,但可能显著提升稳定性。
2. 更新主板 BIOS
X870E 早期 BIOS 对 Gen5 显卡稳定性可能存在兼容性问题,华硕后续 AGESA 更新修复了不少相关问题。建议去华硕官网下载安装 X870E-PLUS WIFI7 的最新 BIOS。
3. 关闭 ASPM
可以在 GRUB 内核启动参数中追加:
1 | pcie_aspm=off |
这样可以排除 PCIe 省电状态切换导致掉链路的可能性。不过这一步属于系统配置调整,建议在前面几步无效后再做。
4. 逐步解开功耗上限
完成上面几项后,可以尝试逐步上调功耗上限:
1 | sudo nvidia-smi -pl 500 |
每一档都要跑训练观察稳定性,找到能稳定训练的最高功耗值。
九、是否需要联系售后
当前暂时不需要。
限功耗到 400W 后能够稳定运行,说明硬件大概率没有直接损坏。更像是 5090 满功耗瞬态尖峰叠加默认功耗上限带来的稳定性问题,先通过软件层面限制功耗即可解决。
只有在以下情况才建议考虑联系售后或上门检测:
- 已经限制功耗到 400W;
- 已经将 PCIe 从 Gen5 降到 Gen4;
- 已经更新主板 BIOS;
- 必要时也关闭了 ASPM;
- 但系统仍然频繁黑屏、掉盘、需要硬关机。
如果这些操作都无效,才更可能是这块 5090 或这台电源存在个体瑕疵,再走保修、换件检测会更有意义。
十、训练和测试命令
功耗限制固化后,可以正常训练和测试。
训练(论文对齐 B2):
1 | cd /home/kxh/Projects/gqa |
分尺度测试(对齐论文口径):
1 | python tools/smoke_test_multiscale.py \ |
十一、未来再次崩溃时的快速自查命令
如果之后再次崩溃,可以优先看上一次启动的 Xid 错误:
1 | journalctl -b -1 -k | grep -iE "Xid|fallen off the bus" |
实时查看功耗、限频和链路状态:
1 | nvidia-smi -q | grep -iE "Power Limit|Power Draw|Throttle|Slowdown" |
确认功耗上限服务状态:
1 | systemctl status nvidia-powerlimit.service |
常见 Xid 速查:
- Xid 79:GPU 掉出总线,常见于供电、链路或接触问题。
- Xid 154:GPU 恢复需要节点重启。
- Xid 13 / 31 / 43:更偏向显存、非法访问或软件层面问题,与这次现象不同。
十二、状态总览
| 项目 | 状态 |
|---|---|
| 根因 | 已确认:满功耗瞬态尖峰导致 GPU 掉总线(Xid 79) |
| 短期方案 | 功耗限制到 400W,已稳定训练 1h+ |
| 固化方案 | 建议配置 nvidia-powerlimit.service 开机自动限功耗 |
| 长期优化 | 可选:BIOS 降 Gen4、更新 BIOS、关闭 ASPM 后逐步解锁功耗 |
| 是否维修 | 暂不需要 |
| 对实验结果影响 | 不影响精度,只影响训练速度,可正常与论文对比 |
总结
这次问题的关键不是“显存不够”,也不是训练代码本身,而是 RTX 5090 满功耗瞬时尖峰导致 GPU 从 PCIe 总线上掉了(Xid 79)。
目前最稳妥的处理方式是:先把功耗上限固定在 400W,保证训练稳定完成;等实验跑完后,再考虑通过 BIOS 降 Gen4、更新 BIOS、关闭 ASPM、逐步上调功耗上限等方式,寻找速度和稳定性的平衡点。