技嘉5090遇到Xid79显卡掉线
先交代一下硬件配置:
- 显卡:技嘉 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/12.8
最近在跑深度学习训练时,接连遇到几类不同表现的黑屏和 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 左右就桌面崩溃”的情况,就说明大概率是散热或通风问题;如果仍然不好,再考虑联系售后或上门维修。
实际上,此时早已意识到,此问题与显存大小,使用情况根本无关,显存爆了的话只会报OOM,而不是直接黑屏。
三、再次出现问题:开训 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 显示就会冻结(黑屏),风扇也可能因为失去控制进入 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 小时以上,没有再次黑屏或掉盘。
这个实验基本确认了根因:
RTX 5090 在满功耗下的瞬时功耗尖峰触发供电保护或瞬时掉电,导致 GPU 掉出 PCIe 总线(Xid 79)。限制功耗上限后,尖峰被削平,系统恢复稳定。
这与显存不足、训练代码、数据集本身都无关。降功耗主要影响训练速度,不影响模型精度结果,仍然可以正常用于论文复现和实验对比。
六、短期解决方案:先稳定训练
1. 临时设置
每次重启电脑后手动执行:
1 | sudo nvidia-smi -pm 1 |
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 |
但是其实我也没有写这个系统服务,因为,这台5090几乎不怎么重启。
七、可能的长期治本方案
如果后续想恢复更高功耗,甚至接近满血 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 |
每一档都要跑训练观察稳定性,找到能稳定训练的最高功耗值。
八、未来再次崩溃时的快速自查命令
如果之后再次崩溃,可以优先看上一次启动的 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:更偏向显存、非法访问或软件层面问题,与这次现象不同。
2026.7.15再次更新
又碰到了黑屏问题,原因是电脑重启了,400W的功率限制失效了,我忘记手动设置,于是跑代码就黑屏了,这次也让我意识到,这终究不是一个长期办法,所以这次打算彻底解决。上述可能的长期解决方案其实只是AI说的,没有什么切实的排查和数据记录,接下来打算彻底核查解决
1.做了CPU压力测试,显然CPU风冷在压力测试下,发出一些不好听的动静,问了客服,大概是有东西卡住了风扇,但整体没有什么问题,通过完整测试,温度也正常,跑完后冷却也正常,也没有黑屏,CPU可以排除
2.接下来师兄建议直接关闭Linux图形界面,用命令行跑代码尝试会发生什么
3.装机师傅建议,第一补齐32GB内存双通道,并不是不够用,而是AM5平台单通道内存会带来非常多的平台稳定性隐患,第二,他建议我直接把5090显卡换到师姐那边,运行代码尝试,这样可以隔离环境,单独测试GPU,毕竟师姐那边跟我的配置一模一样,而他没有这个功率和黑屏的问题,这确实合理,但麻烦点在于要手动拆两个显卡,还要再装显卡,我怕自己拆装不熟练,先暂时不考虑,放到最后优先级
4.gpt-5.6sol建议之一,更新驱动到最推荐的595-open,我已经更新了,不限制功率的情况下,还真的跑了几分钟,虽然实际上也不需要600W,根据终端监控显示450w/600w,但是好景不长,几分钟后又关机了;
5.这给了一个提醒,我去看了师姐的驱动版本是580,所以可能真的是驱动版本的bug,接下来打算装回580版本,但显然有个问题是,换驱动版本没那么简单,我刚刚换到595,其实是590还在,两套共存了,有点问题,准备问ai解决
6.驱动已经完整回退到580,只要功率超过400w,还是不行,果然还是595状态下成功运行的那几分钟给了我错觉,看来显然与驱动无关
7.谷歌搜索5090出现Xid79错误,也能搜到一些帖子,帖子2,帖子2较为详细,也是技嘉的显卡5090,他甚至返修换了新显卡还是不行,电源他用的是1200w还没有我的高,结合一切信息,我认为找人来也不一定能修好,大概率指向线缆/电源供电链路等等问题。还有这一篇但我没看懂,这边英伟达官方里的帖子更加详细。