技嘉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 里打开终端,尝试重置相关配置:

  1. 清理旧的 xorg 配置文件:

    1
    sudo rm /etc/X11/xorg.conf
  2. 重新生成 NVIDIA 的 xconfig:

    1
    sudo nvidia-xconfig
  3. 关闭 Wayland,强制系统使用 X11 协议。编辑 gdm3 的配置文件:

    1
    sudo nano /etc/gdm3/custom.conf

    找到里面被注释掉的 #WaylandEnable=false 这一行,去掉前面的 # 号,变成 WaylandEnable=false,然后保存退出。

  4. 重启系统:

    1
    sudo reboot

    补充说明:重启的时候,建议给显示器换一个 DP 接口重新插拔一次,通常就能正常点亮。

二、再次复现:batch 增大后频繁掉盘

后续又遇到了一次更稳定且重复出现的问题:batch 设为 6 时,可以轻松跑完 40k 步,此时显存只用约 10GB;将 batch 改为 12 后,显存占用约 18GB,训练跑到约 8000 步时显示器黑屏,nvidia-smi 找不到显卡。

当时 SSH 仍能连上,风扇狂转,训练实际已经停止。物理强制关机重启后一切恢复正常,但再次开跑仍会出现上述情况,这说明它已经不是偶发现象。

最初怀疑过几类原因:

  1. 散热不佳:主机原本放在桌子下面,空间狭小,通风不良。
  2. 电源余量不足:满载时整机功耗过大,1300W 电源可能不够。
  3. 硬件连接问题:显卡支架不稳、供电线插接不牢或弯折过大,但检查后暂未发现明显问题。

当时的计划是先把主机从桌子底下挪到机架上,并加装风扇。如果之后不再出现“显存总共 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
2
3
NVRM: Xid (PCI:0000:01:00): 79, pid=..., name=cursor, GPU has fallen off the bus.
NVRM: GPU 0000:01:00.0: GPU has fallen off the bus.
NVRM: Xid (PCI:0000:01:00): 154, GPU recovery action changed from 0x0 (None) to 0x2 (Node Reboot Required)

其中 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
2
sudo nvidia-smi -pm 1        # 持久模式
sudo nvidia-smi -pl 400 # 功耗上限 400W(该卡可设范围 400–600W)

然后重新启动同一份训练:

结果:同一份配置已经稳定训练 1 小时以上,没有再次黑屏或掉盘。

这个实验基本确认了根因:

RTX 5090 在满功耗下的瞬时功耗尖峰触发供电保护或瞬时掉电,导致 GPU 掉出 PCIe 总线(Xid 79)。限制功耗上限后,尖峰被削平,系统恢复稳定。

这与显存不足、训练代码、数据集本身都无关。降功耗主要影响训练速度,不影响模型精度结果,仍然可以正常用于论文复现和实验对比。

六、短期解决方案:先稳定训练

1. 临时设置

每次重启电脑后手动执行:

1
2
sudo nvidia-smi -pm 1
sudo nvidia-smi -pl 400

2. 开机自动生效

因为 nvidia-smi -pl 400 重启后会失效,如果不固化,下次重启又会恢复 600W,可能再次崩溃。推荐写成 systemd 服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sudo tee /etc/systemd/system/nvidia-powerlimit.service >/dev/null <<'EOF'
[Unit]
Description=Cap NVIDIA GPU power limit to 400W (avoid 5090 transient brownout)
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/bin/nvidia-smi -pm 1
ExecStart=/usr/bin/nvidia-smi -pl 400
RemainAfterExit=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now nvidia-powerlimit.service

检查服务状态:

1
systemctl status nvidia-powerlimit.service

但是其实我也没有写这个系统服务,因为,这台5090几乎不怎么重启

七、可能的长期治本方案

如果后续想恢复更高功耗,甚至接近满血 600W,可以按成本从低到高逐项尝试。

1. BIOS 中将显卡槽降到 PCIe Gen4

这是 50 系显卡掉总线问题中比较常见、也比较有效的稳定性修复方式。

网上也有相关讨论,个人仍旧不敢轻易尝试。

操作路径大致为:

1
2
3
4
5
6
重启按 Del 进入 ASUS BIOS
-> Advanced(高级)
-> PCI Subsystem Settings
-> PCIe Link Speed / PCIEX16_1 Link Speed
-> 从 Auto / Gen5 改成 Gen4
-> 保存并重启

对单卡训练来说,PCIe Gen4 x16 的带宽基本够用,对训练性能影响很小,但可能显著提升稳定性。

2. 更新主板 BIOS

X870E 早期 BIOS 对 Gen5 显卡稳定性可能存在兼容性问题,华硕后续 AGESA 更新修复了不少相关问题。建议去华硕官网下载安装 X870E-PLUS WIFI7 的最新 BIOS。

3. 关闭 ASPM

可以在 GRUB 内核启动参数中追加:

1
pcie_aspm=off

这样可以排除 PCIe 省电状态切换导致掉链路的可能性。不过这一步属于系统配置调整,建议在前面几步无效后再做。

4. 逐步解开功耗上限

完成上面几项后,可以尝试逐步上调功耗上限:

1
2
3
sudo nvidia-smi -pl 500
sudo nvidia-smi -pl 550
sudo nvidia-smi -pl 600

每一档都要跑训练观察稳定性,找到能稳定训练的最高功耗值。

八、未来再次崩溃时的快速自查命令

如果之后再次崩溃,可以优先看上一次启动的 Xid 错误:

1
journalctl -b -1 -k | grep -iE "Xid|fallen off the bus"

实时查看功耗、限频和链路状态:

1
2
nvidia-smi -q | grep -iE "Power Limit|Power Draw|Throttle|Slowdown"
nvidia-smi --query-gpu=pcie.link.gen.current,pcie.link.width.current --format=csv

确认功耗上限服务状态:

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还没有我的高,结合一切信息,我认为找人来也不一定能修好,大概率指向线缆/电源供电链路等等问题。还有这一篇但我没看懂,这边英伟达官方里的帖子更加详细。