ROCm 7.2.1 + RX 6900 XT 排障记:当显卡变成"哑巴"
引子
给家里的 Ubuntu 机器装了 AMD ROCm 7.2.1,硬件是一块 RX 6900 XT(16GB,gfx1030,RDNA2 架构)。安装过程很顺利,rocm-smi 能看到卡,温度正常,显认正常。
但当我跑 rocminfo 的时候,它冷冷地甩了一句:
HSA_STATUS_ERROR_OUT_OF_RESOURCES: The runtime failed to allocate
the necessary resources.GPU 认到了,但用不了。就像一个站在那里的哑巴——嘴在,但说不出话。
第一层:显卡的"算力"去哪了?
我用 rocminfo 看 KFD(内核融合驱动)的拓扑,发现一个诡异的现象:
RX 6900 XT 被注册成了一个零算力设备:
simd_count: 0 ← 应该是 160
gfx_target_version: 0 ← 应该是 100300
gpu_id: 0 ← 根本不应该为 0但它有 16GB VRAM,显存完全正常。也就是说,系统认到了显卡的内存,但完全认不到它的算力。
与此同时,板载的 iGPU(gfx1036,2 CU)倒是正常得很,simd_count: 4,gfx_target_version: 100306,算力正常。
为什么独显是哑的,核显是活的?
第二层:MES 才是关键
我翻了一圈,找到了关键参数:
$ cat /sys/module/amdgpu/parameters/mes
0MES(Micro-Engine Scheduler)是关着的。
这是 ROCm 7.x 对 RDNA2 架构的一个关键变更:从这一代开始,GPU 的 KFD 硬件队列调度依赖 MES 微引擎。MES 不启动,GPU 的 compute 队列就建不起来,GPU 在 KFD 眼里就是一个"只有显存的内存设备",没有算力。
那为什么 iGPU 没事?因为 iGPU(gfx1036)的 MES 初始化路径和独显不同,核显即使 mes=0 也能走另一条路把算力暴露出来。
解决思路很清晰:把 MES 打开。
# /etc/modprobe.d/amdgpu.conf
options amdgpu mes=1然后……发现 MES 还是 0。重启了也没用。
因为 /etc/modprobe.d/ 的参数可能被 initramfs 里内置的模块覆盖了,所以还要加到 GRUB 内核命令行:
# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.mes=1"然后执行:
sudo update-grub
sudo update-initramfs -u重启后,mes 确实是 1 了。KFD 拓扑里的 RX 6900 XT 也有了算力:simd_count: 160,gfx_target_version: 100300。
但 rocminfo 还是报 HSA_STATUS_ERROR_OUT_OF_RESOURCES。
第三层:节能模式在搞鬼
为什么 MES 开了、算力也有了,HSA 还是报错?
答案藏在 dmesg 里:
[ 71.854509] amdgpu 0000:03:00.0: amdgpu: Fail to disable thermal alert!
[ 71.854512] amdgpu 0000:03:00.0: amdgpu: suspend of IP block <smu> failed -22
[ 72.241212] amdgpu 0000:03:00.0: can't suspend (amdgpu_pmops_runtime_suspend returned -22)GPU 在启动后约 65 秒,Linux 的运行时节能机制(Runtime Power Management)试图让 GPU 进入低功耗挂起状态。但 SMU(系统管理单元)挂起失败,thermal alert 关不掉,电源配置文件切换失败——GPU 的状态被搞坏了。
之后 HSA 运行时再想初始化,GPU 已经不在一个正常的状态里了,所以报 OUT_OF_RESOURCES。
解决:禁用运行时节能。
# /etc/modprobe.d/amdgpu.conf
options amdgpu mes=1 runpm=0
# /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.mes=1 amdgpu.runpm=0"再次 update-grub + update-initramfs + 重启。
结果
这一次,rocminfo 完美输出:
Agent 2
Name: gfx1030
Marketing Name: AMD Radeon RX 6900 XT
Device Type: GPU
Compute Unit: 80
SIMDs per CU: 2
Shader Engines: 4
ISA: amdgcn-amd-amdhsa--gfx1030 ✅rocm-smi:温度 38°C,功耗 11W(待机正常)- OpenCL:2 个设备(独显 + iGPU)
- 连续运行 3 次
rocminfo,零错误
总结
对于在 ROCm 7.x 上使用 RDNA2 显卡(RX 6000/6000 XT/6900 XT 等),如果你遇到 HSA_STATUS_ERROR_OUT_OF_RESOURCES:
# 1. 创建 modprobe 配置
echo "options amdgpu mes=1 runpm=0" | sudo tee /etc/modprobe.d/amdgpu.conf
# 2. 添加 GRUB 内核参数
sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 amdgpu.mes=1 amdgpu.runpm=0"/' /etc/default/grub
# 3. 更新引导和 initramfs
sudo update-grub
sudo update-initramfs -u
# 4. 重启
sudo reboot两个参数缺一不可:
mes=1— 启用微引擎调度器,让 GPU 暴露算力runpm=0— 禁用运行时节能,防止 GPU 挂起后状态损坏
环境信息
| 项目 | 值 |
|---|---|
| 操作系统 | Ubuntu 24.04 |
| 内核 | 6.17.0-20-generic |
| amdgpu DKMS | 6.16.13 |
| ROCm | 7.2.1 |
| 显卡 | AMD Radeon RX 6900 XT (gfx1030, 16GB) |
| CPU | AMD Ryzen 7 7800X3D |