从系统底层开始:驱动安装与权限配置
在 Ubuntu 上折腾 AMD 显卡跑大模型,最让人头大的往往不是模型本身,而是环境配置。尤其是 ROCm 7.0 发布后,虽然生态完善了不少,但“一步错步步错”的情况依然常见。很多兄弟在本地 Radeon 或者 Instinct 卡上部署时,卡在驱动识别这一步就直接劝退了。今天我就把自己在 Ubuntu 22.04 LTS 上从零搭建 ROCm 7.0 环境的实录整理出来,重点聊聊怎么避开那些文档里没写清楚的坑,特别是用户组权限和 Ollama 识别显卡这两个高频问题。
首先,别急着去 Github 拉代码,先把操作系统层面的地基打牢。ROCm 对内核版本比较敏感,建议直接使用 Ubuntu 22.04 LTS 或更新版本,老版本内核可能会缺少必要的硬件调度支持。安装前,务必确认当前用户拥有sudo权限。这里有个极易被忽视的细节:用户组归属。ROCm 驱动需要访问/dev/kfd和/dev/dri设备文件,如果当前用户不在video和render用户组里,后续所有命令都会报Permission denied。
执行以下命令将当前用户加入对应组:
sudousermod-aGvideo,render$USER敲完这行别以为就结束了,必须重启系统才能生效。我第一次配的时候就忘了重启,结果后面编译 PyTorch 时报了一堆莫名其妙的链接错误,排查半天才发现是权限问题。重启后,可以用groups $USER确认一下输出里是否包含了video和render。
接下来是添加官方软件源。千万别图省事去下载第三方打包的.deb文件,版本冲突能让你怀疑人生。AMD 官方提供了清晰的源地址,我们直接通过脚本添加。打开终端,依次执行:
wgethttps://repo.radeon.com/amdgpu-install/7.0/ubuntu/jammy/amdgpu-install_7.0.70000-1_all.debsudoaptinstall./amdgpu-install_7.0.70000-1_all.deb源添加好后,不需要安装全家桶,我们只需要核心的开发组件。执行以下命令安装hip-base和相关依赖:
sudoamdgpu-install--usecase=hip,dev --no-dkms加上--no-dkms参数是为了避免在内核更新时自动编译驱动模块导致的不稳定,对于大多数桌面和服务器环境,官方预编译的内核模块已经足够稳定。安装过程可能需要几分钟,期间会拉取一堆依赖包,保持网络畅通即可。
验证环境与解决 Ollama 识别难题
安装完成后,不要急着跑大模型,先验证驱动是否正常工作。ROCm 提供了一个非常直观的工具rocm-smi,它能列出所有被识别的 GPU 及其状态。在终端输入:
rocm-smi如果一切正常,你应该能看到一个表格,清晰地显示 GPU 编号、温度、功耗、显存使用率以及当前的频率策略。比如我的 Radeon RX 7900 XTX 在这里会显示为Card0,显存占用和温度数据实时跳动。如果这里报错或者显示为空,说明驱动加载失败,这时候要去检查dmesg | grep amdgpu的日志,通常能定位到内核模块加载失败的原因。
除了看状态,还要确认架构信息是否匹配。运行rocminfo可以看到详细的硬件架构代号(如gfx1100对应 RDNA3 架构)。这一步很关键,因为后续编译 PyTorch 或 vLLM 时,需要指定这个架构代号,否则生成的二进制文件在当前硬件上无法运行,会报illegal instruction。
环境通了之后,重头戏来了:让 Ollama 跑起来。很多同学在 AMD 卡上运行 Ollama 时发现它根本不用独显,而是慢吞吞地跑在 CPU 上。这是因为 Ollama 默认优先寻找 CUDA 设备,对 ROCm 的支持需要手动“指路”。
解决方法很简单,设置环境变量OLLAMA_HIP_VISIBLE_DEVICES。假设你的rocm-smi显示显卡编号为 0,那么在启动 Ollama 服务前,执行:
exportOLLAMA_HIP_VISIBLE_DEVICES=0ollama serve如果是多卡环境,可以用逗号分隔,比如0,1。设置生效后,观察 Ollama 的日志输出,如果看到类似offloading to GPU的提示,且显存占用开始上升,就说明配置成功了。为了验证效果,可以拉取一个量化模型测试:
ollama run llama3:8b-instruct-q4_0问它几个问题,如果生成速度明显提升(不再是每秒几个字的龟速),那就大功告成。
为了方便大家快速复现和日常检查,我写了一个简单的 Shell 脚本,用来自动检查驱动版本、用户组权限以及 Ollama 的环境变量配置。你可以把它保存为check_rocm.sh:
#!/bin/bashecho"=== ROCm Environment Check ==="# 1. Check User Groupsecho-n"User Groups: "ifgroups$USER|grep-q'video'&&groups$USER|grep-q'render';thenecho"[OK] video & render groups found."elseecho"[FAIL] Missing video or render group! Run: sudo usermod -aG video,render \$USER"fi# 2. Check Driver Versionecho-n"ROCm Version: "ifcommand-vrocm-smi&>/dev/null;thenrocm-smi--showdriverversionelseecho"[FAIL] rocm-smi not found. Is ROCm installed?"fi# 3. Check GPU Visibilityecho"GPU Status:"ifrocm-smi--showproductname&>/dev/null;thenrocm-smi--showproductnameelseecho"[FAIL] No GPUs detected by rocm-smi."fi# 4. Check Ollama Envecho-n"Ollama HIP Env: "if[-n"$OLLAMA_HIP_VISIBLE_DEVICES"];thenecho"[OK] Set to$OLLAMA_HIP_VISIBLE_DEVICES"elseecho"[WARN] Not set. Ollama might run on CPU."fiecho"=== Check Complete ==="给脚本加上执行权限chmod +x check_rocm.sh,每次环境出问题跑一下,基本能覆盖 90% 的排查场景。
其实 AMD 显卡跑大模型的门槛正在快速降低,ROCm 7.0 的稳定性比之前几个版本好了太多。只要把底层的驱动权限理顺,再通过环境变量正确引导上层应用,本地推理的体验并不比 N 卡差多少,尤其是在显存容量占优的情况下,跑一些大参数量的量化模型反而更有优势。剩下的就是根据具体需求去调整 vLLM 或 LLaMA-Factory 的参数了,那是另一个值得深入的话题。
200小时GPU算力已就位,快来领取:https://marketing.csdn.net/questions/Q2604140858304426315?utm_source=AIpaper