ROCm 7.2.1 + RX 6900 XT 坑多多

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: 4gfx_target_version: 100306,算力正常。

为什么独显是哑的,核显是活的?


第二层:MES 才是关键

我翻了一圈,找到了关键参数:

$ cat /sys/module/amdgpu/parameters/mes
0

MES(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: 160gfx_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 DKMS6.16.13
ROCm7.2.1
显卡AMD Radeon RX 6900 XT (gfx1030, 16GB)
CPUAMD Ryzen 7 7800X3D
拾柒
“ 做自己 ”
 喜欢文章
头像