深夜报错"No HIP GPUs available"?别急着重装系统

凌晨两点,屏幕上的红色报错 No HIP GPUs available 格外刺眼。这大概是每个刚接触 AMD ROCm 生态的开发者都经历过的“至暗时刻”。很多人第一反应是怀疑硬件故障,或者干脆暴力重装系统,结果折腾半天发现只是漏了一个用户组配置。

ROCm 作为开源栈,灵活性高但也意味着环境依赖更敏感。在我多次踩坑并成功救回无数台“假死”服务器的过程中,总结出三个最高频的启动失败场景。如果你正被这个问题折磨,不妨先放下重装系统的念头,按下面的思路一步步排查。

案例一:驱动与内核版本“错位”引发的静默失败

现象还原 程序运行直接抛出 No HIP GPUs available,但执行 rocminfo 却能正常列出 GPU 信息。这种“半生不死”的状态最让人迷惑:硬件明明被识别了,为什么运行时说没有?

深度诊断 这种情况通常是内核模块(KFD)与用户态运行时库版本不匹配导致的。ROCm 强依赖 Linux 内核模块 amdgpukfd 的正确加载。

首先,不要只看应用层报错,直接去查内核环形缓冲区:

dmesg | grep -i kfd

如果你看到类似 kfd: failed to initialize 或者版本冲突的警告,说明内核模块加载失败。接着检查当前加载的驱动版本:

modinfo amdgpu | grep version

再对比已安装的 ROCm 包版本:

dpkg -l | grep rocm

很多时候是因为系统自动更新了 Linux Kernel,但 ROCm 的内核模块没有重新编译适配,导致接口断裂。

解决方案 不需要重装系统,只需重新安装对应内核版本的 DKMS 模块,或者锁定内核版本。如果是 Ubuntu 系统,尝试重新触发 DKMS 构建:

sudo dkms autoinstall
sudo reboot

重启后再次运行 dmesg | grep -i kfd,确认没有报错后再测试 HIP 程序。

案例二:被遗忘的“视频组”权限陷阱

现象还原 这是新手最容易栽跟头的地方。rocminfo 能跑,rocm-smi 也能显示显卡状态,但一旦运行需要调用 GPU 计算资源的代码(如 PyTorch 或自定义 HIP 程序),立刻报 No HIP GPUs available

深度诊断 Linux 的权限管理非常严格。默认情况下,普通用户没有权限直接访问 /dev/kfd/dev/dri/renderD* 设备文件。如果用户不在 videorender 用户组,HIP 运行时就无法打开设备句柄,从而返回“无可用设备”的假象。

ls -l 查看设备权限:

ls -l /dev/kfd
ls -l /dev/dri/renderD128

如果显示 crw-rw---- 1 root video,而你的当前用户不在 video 组,问题就找到了。

解决方案 将当前用户加入必要的用户组:

sudo usermod -aG video $USER
sudo usermod -aG render $USER

注意:这一步完成后,必须注销并重新登录(或者重启),组权限才会生效。很多开发者输完命令直接跑代码,发现还是报错,就是因为会话没刷新。验证是否生效可以用 groups 命令查看当前所属组。

案例三:环境变量冲突与“隐形”的 CUDA 残留

现象还原 机器上曾经装过 NVIDIA 驱动或 CUDA Toolkit,后来换了 AMD 卡。虽然卸载了旧驱动,但运行 ROCm 程序时依然行为诡异,时而报错,时而指向错误的库。

深度诊断 动态链接库的加载顺序是罪魁祸首。系统可能还在优先加载残留的 CUDA 库,或者 LD_LIBRARY_PATH 中混杂了冲突路径。

使用 ldd 工具检查你的可执行文件或 Python 解释器依赖:

ldd $(which python3) | grep -i hip
ldd ./your_hip_program | grep -i cuda

如果输出中出现了 libcudart.so 或者找不到 libhiprtc.so,说明环境变量污染了。此外,HSA_OVERRIDE_GFX_VERSION 设置错误也会导致旧版 ROCm 无法识别新架构显卡(如 MI300 系列)。

解决方案 清理环境变量,显式指定 ROCm 路径。在 ~/.bashrc/etc/environment 中确保以下配置正确(以 ROCm 6.0+ 为例):

export PATH=/opt/rocm/bin:$PATH
export LD_LIBRARY_PATH=/opt/rocm/lib:$LD_LIBRARY_PATH
# 针对特定架构可能需要强制指定 GFX 版本
export HSA_OVERRIDE_GFX_VERSION=9.4.2 

如果是多版本共存环境,务必检查 /etc/ld.so.conf.d/ 下是否有指向 CUDA 的配置文件,必要时将其移除或重命名,然后执行 sudo ldconfig 刷新缓存。

一份标准化的自查清单

遇到 No HIP GPUs available,请按照以下顺序操作,通常能解决 90% 的问题:

  1. 查内核日志dmesg | grep -i kfd,确认无初始化错误。
  2. 查设备权限ls -l /dev/kfd,确认用户在 videorender 组,且已重登。
  3. 查库依赖ldd 检查是否有 CUDA 残留或未找到的 HIP 库。
  4. 查环境变量:确认 PATHLD_LIBRARY_PATH 指向 /opt/rocm
  5. 查架构兼容:若是新卡旧驱动,检查是否需要 HSA_OVERRIDE_GFX_VERSION

ROCm 的调试过程虽然繁琐,但一旦理清了驱动、权限和依赖这三条线,你会发现它其实逻辑严密。下次再看到这个报错,先别慌,打开终端,让日志告诉你真相。

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐