从零开始:Ubuntu 下 ROCm 7.x 环境搭建实录

最近入手了一块 AMD Instinct 显卡,准备在 Ubuntu 上搭建 ROCm 7.x 环境跑大模型。本以为照着官方文档敲几行命令就能搞定,结果在实际操作中踩了不少“隐形坑”。很多教程只给了理想状态下的命令,却忽略了权限配置、密钥验证以及重启后的设备识别等关键细节。这篇文章就记录我从零开始搭建全过程的真实经历,重点复盘那些文档里没细说但决定成败的步骤,希望能帮刚接触 AMD GPU 的朋友少走弯路。

软件源配置与密钥验证:别跳过这一步

安装 ROCm 的第一步是添加官方软件源。很多人直接复制 echo 命令追加到 sources.list,却忽略了 GPG 密钥的导入验证,这在后续更新时极易报错。

正确的操作是先下载并验证密钥指纹,确保来源可信:

wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/rocm.gpg > /dev/null

接着添加源列表。注意 ROCm 7.x 对 Ubuntu 版本有严格要求,推荐使用 22.04 LTS:

echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ jammy main' | sudo tee /etc/apt/sources.list.d/rocm.list
sudo apt update

如果在 apt update 时看到 GPG 签名错误,大概率是密钥导入路径不对或网络问题导致密钥损坏,此时切勿强行安装,否则后续组件依赖会全部断裂。

用户组权限:被忽视的"video"与"render"

安装核心组件前,有一个极易被忽略但至关重要的步骤:将当前用户加入 videorender 用户组。ROCm 驱动通过这两个组控制用户对 GPU 设备的访问权限。如果漏掉这一步,即使安装成功,运行 rocminfo 也会提示"No devices found"或直接无输出。

执行以下命令并务必重启系统使权限生效:

sudo usermod -aG video $USER
sudo usermod -aG render $USER
# 必须重启,仅重新登录终端无效
sudo reboot

重启后,可以通过 groups $USER 确认是否已包含上述两个组。这是解决"GPU 未识别”问题最高频的方案,比重装驱动有效得多。

自动化安装脚本:一键部署 PyTorch ROCm 版

环境依赖就绪后,我们可以编写一个 Shell 脚本来自动化安装 ROCm 核心组件及 PyTorch。手动逐条输入容易出错,脚本化能确保环境一致性。

创建 install_rocm_pytorch.sh

#!/bin/bash

set -e

echo ">>> 开始安装 ROCm 7.x 核心组件..."
sudo apt install -y rocm-hip-sdk rocblas hipblas miopen-hip

echo ">>> 配置环境变量..."
# 将 ROCm 路径写入 bashrc,避免每次手动 export
if ! grep -q "ROCM_PATH" ~/.bashrc; then
    echo 'export PATH=/opt/rocm/bin:$PATH' >> ~/.bashrc
    echo 'export HSA_OVERRIDE_GFX_VERSION=11.0.0' >> ~/.bashrc
    source ~/.bashrc
fi

echo ">>> 安装 PyTorch ROCm 版本..."
# 指定 index-url 确保下载的是 ROCm 编译版而非 CUDA 版
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm6.2

echo ">>> 安装完成,请运行验证脚本。"

赋予执行权限并运行:chmod +x install_rocm_pytorch.sh && ./install_rocm_pytorch.sh。脚本中显式指定了 rocm-hip-sdk 等关键包,防止默认安装遗漏编译器;同时自动配置 HSA_OVERRIDE_GFX_VERSION,这对某些非最新架构的显卡兼容至关重要。

深度排查:当 rocminfo 无输出时怎么办

重启后运行 rocminfo 是检验环境的金标准。如果命令执行后没有任何输出,或者卡在等待状态,请按以下逻辑排查:

  1. 检查内核模块加载:运行 lsmod | grep amdgpu。若无输出,说明驱动未加载。尝试 sudo modprobe amdgpu,若报错则需检查内核版本是否与 ROCm 7.x 匹配(通常需 5.15+)。
  2. 查看设备节点权限:执行 ls -l /dev/kfd /dev/dri/render*。确认当前用户是否有读写权限(crw-rw----),若无,回到上一步检查用户组配置是否生效。
  3. dmesg 日志分析:使用 dmesg | grep -i amdgpu 查看启动日志。若出现"VCN decode/encode disabled"或固件加载失败信息,可能需要手动更新 linux-firmware 包。

最终验证:用代码说话

一切配置妥当后,我们用一段 Python 代码做最终验收。这段脚本不仅检测 PyTorch 是否识别到 ROCm,还尝试进行一次简单的矩阵运算,确保计算链路畅通。

import torch

def verify_rocm():
    print(f"PyTorch 版本:{torch.__version__}")
    
    # 检查 ROCm 可用性
    if not torch.cuda.is_available(): # 注意:PyTorch 中仍沿用 cuda.is_available() 接口
        print("❌ 错误:未检测到可用的 ROCm 设备")
        return False
    
    print(f"✅ 检测到 ROCm 设备数量:{torch.cuda.device_count()}")
    print(f"🚀 当前设备名称:{torch.cuda.get_device_name(0)}")
    
    # 简单计算测试
    try:
        x = torch.rand(5, 3).to('cuda')
        y = torch.rand(5, 3).to('cuda')
        z = torch.matmul(x, y.T)
        print("✅ 矩阵乘法测试通过,GPU 计算正常!")
        return True
    except Exception as e:
        print(f"❌ 计算测试失败:{e}")
        return False

if __name__ == "__main__":
    verify_rocm()

运行结果显示设备名称且无报错,才算真正大功告成。ROCm 的搭建过程虽然有些琐碎,尤其是权限和内核模块的配合需要细心对待,但一旦跑通,AMD GPU 在大模型推理上的性价比优势是非常明显的。希望这份避坑指南能让你的一次性成功率大幅提升。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐