4、ROCm安装与部署实战:Linux环境下的驱动安装、ROCm软件包管理、Docker容器化部署、常见安装踩坑记录

说实话,安装 ROCm 这件事,说难不难,说简单也不简单。

我见过太多人卡在第一步——驱动装不上,或者装上了跑不起来。其实大部分问题,都是环境没对齐。今天我就把这几年的实战经验掰开揉碎,跟你聊聊。

4.1 硬件与系统环境检查

动手之前,先确认三件事:显卡、内核、操作系统。

检查项 推荐配置 我的建议
GPU AMD Instinct MI250 / MI210 / MI100 / RX 7900 XTX 优先选数据中心卡,消费卡也能用但坑多
操作系统 Ubuntu 22.04 / RHEL 9.2 Ubuntu 最省心,我踩过的坑最少
内核版本 5.15+ / 6.2+ 太老的内核会导致驱动编译失败
磁盘空间 至少 50GB 空闲 ROCm 全套装下来大概 15GB,但编译缓存很吃空间

怎么查?几条命令搞定:

# 查看 GPU 型号
lspci | grep -i amd

# 查看操作系统版本
cat /etc/os-release

# 查看内核版本
uname -r

# 查看可用磁盘空间
df -h /

嗯,这里要注意:如果你用的是虚拟机,记得开启 IOMMU 和 PCIe Passthrough。我之前在一台老服务器上折腾了两天,最后发现是 BIOS 里没开虚拟化支持。

4.2 驱动安装:两种主流方式

驱动安装我推荐两种方式,你根据场景选。

方式一:使用 AMD 官方安装脚本(推荐新手)

AMD 提供了一个一键安装脚本,说白了就是帮你省事。

# 下载安装脚本
wget https://repo.radeon.com/amdgpu-install/latest/ubuntu/jammy/amdgpu-install_6.0.60002-1_all.deb

# 安装脚本
sudo dpkg -i amdgpu-install_6.0.60002-1_all.deb

# 执行安装
sudo amdgpu-install --usecase=rocm

我个人习惯用 --usecase=rocm 这个参数,它只装 ROCm 需要的组件,不会把显卡驱动全家桶都塞进来。

小技巧: 如果你同时做 AI 训练和图形渲染,可以用 --usecase=rocm,graphics。但注意,这样会多装几百兆的图形驱动。

方式二:手动安装(适合有洁癖的工程师)

我不太推荐手动装,除非你很清楚自己在做什么。但如果你非要自己来,流程是这样的:

  1. 添加 AMD 软件源
  2. 安装内核头文件
  3. 安装 DKMS 驱动包
  4. 重启并验证
# 添加源
echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/6.0 jammy main' | sudo tee /etc/apt/sources.list.d/rocm.list

# 导入 GPG 密钥
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add -

# 安装
sudo apt update
sudo apt install rocm-dkms rocm-dev

装完后重启,然后跑一下验证:

sudo reboot
# 重启后
rocm-smi

如果看到 GPU 温度、功耗等信息,说明驱动装好了。

注意: 我曾经遇到过重启后黑屏的情况。原因是内核模块冲突。解决办法是进 recovery mode,卸载掉旧的 amdgpu 模块再重装。别慌,这问题很常见。

4.3 ROCm 软件包管理

驱动装好了,接下来就是 ROCm 的软件栈。我一般把它分成三层:

  • 底层: rocm-dkms(内核模块)、rocm-device-libs(设备库)
  • 中间层: rocm-llvm(编译器)、rocminfo(信息查询)
  • 应用层: rocBLAS(线性代数)、MIOpen(深度学习)、RCCL(通信库)

你想想看,如果你只是跑跑 PyTorch,其实只需要装 rocm-dkms 和 rocm-dev。但如果你要做底层优化,那 rocBLAS 和 rocFFT 就得单独装。

常用的包管理命令:

# 查看已安装的 ROCm 包
dpkg -l | grep rocm

# 安装指定版本
sudo apt install rocm-dkms=5.7.0

# 卸载
sudo apt remove rocm-dkms

# 查看可用版本
apt list -a rocm-dkms

核心原则: 驱动版本和 ROCm 版本必须匹配。比如 ROCm 6.0 需要 amdgpu 6.0 驱动。混装会导致 rocminfo 检测不到 GPU。

4.4 Docker 容器化部署

说实话,我强烈推荐用 Docker 部署 ROCm。为什么?因为环境隔离太方便了。你想想看,一个项目用 ROCm 5.7,另一个用 6.0,直接在宿主机上切换多麻烦。

Docker 部署分三步走:

第一步:安装 Docker 和 nvidia-container-toolkit(别笑,AMD 也用这个)

# 安装 Docker
sudo apt install docker.io

# 安装 AMD 的容器运行时
sudo apt install rocm-docker

第二步:拉取官方镜像

# 拉取 ROCm 6.0 镜像
docker pull rocm/dev-ubuntu-22.04:6.0

# 查看镜像
docker images | grep rocm

第三步:启动容器并挂载 GPU

# 启动容器
docker run -it --rm \
  --device=/dev/kfd \
  --device=/dev/dri \
  --group-add video \
  rocm/dev-ubuntu-22.04:6.0 \
  /bin/bash

进容器后,跑一下 rocminfo 验证:

rocminfo | grep "Name:"
# 如果看到 GPU 型号,说明挂载成功
我的习惯: 我会在 Dockerfile 里把常用库预装好,比如 pytorch、tensorflow、jupyter。这样每次启动容器就能直接干活,不用等 pip install。

4.5 常见安装踩坑记录

这部分我花了不少时间总结,你仔细看。

坑1:驱动装完后 rocm-smi 报错 "No devices found"

原因: 内核模块没加载,或者 GPU 被其他进程占用了。

解决:

# 检查模块是否加载
lsmod | grep amdgpu

# 手动加载
sudo modprobe amdgpu

# 检查 GPU 是否被占用
sudo lsof /dev/dri/*

我曾经遇到过 Xorg 占用了 GPU,导致 ROCm 拿不到设备。解决办法是停掉 Xorg 服务,或者用 --device=/dev/kfd 绕过。

坑2:编译 HIP 程序时报 "undefined reference to hipMalloc"

原因: 链接库路径没配好。

解决:

# 设置环境变量
export HIP_PATH=/opt/rocm
export LD_LIBRARY_PATH=$HIP_PATH/lib:$LD_LIBRARY_PATH

# 编译时加上 -L 和 -lhip
hipcc -o test test.hip -L/opt/rocm/lib -lhip_hcc

坑3:Docker 容器内无法识别 GPU

原因: 容器运行时没挂载 /dev/kfd/dev/dri

解决: 启动容器时加上 --device=/dev/kfd --device=/dev/dri --group-add video。如果还不行,检查宿主机的 /dev/dri/ 目录下有没有 renderD128 文件。

坑4:安装时提示 "依赖关系不满足"

原因: 软件源没更新,或者源里没有对应版本。

解决:

# 更新源
sudo apt update

# 强制安装
sudo apt install -f

# 如果还不行,手动下载 .deb 包安装
wget https://repo.radeon.com/rocm/apt/6.0/pool/main/r/rocm-dkms/rocm-dkms_6.0.0.60000-1_amd64.deb
sudo dpkg -i rocm-dkms_6.0.0.60000-1_amd64.deb
最后提醒: 安装前最好备份一下系统。我见过有人装驱动把系统搞崩了,最后只能重装。用 Timeshift 做个快照,也就几分钟的事。

4.6 本章知识体系

下面这张图,是我梳理的 ROCm 安装部署全流程。你照着走,基本不会出大问题。

ROCm 安装部署全流程 1. 环境检查 2. 驱动安装 3. 软件包管理 GPU / 内核 / 系统 BIOS 虚拟化开启 一键脚本安装 手动安装(DKMS) 验证:rocm-smi 底层:rocm-dkms 中间层:rocminfo 应用层:rocBLAS 4. Docker 容器化 拉取镜像 + 挂载 GPU 5. 踩坑记录 No devices / 链接错误 建议按顺序执行,跳过任何一步都可能出问题

嗯,以上就是 ROCm 安装部署的全部核心内容。你照着这个流程走,基本能一次搞定。如果遇到问题,别慌,先看看是不是环境没对齐,再查查内核模块有没有加载。实在不行,翻翻 AMD 的官方文档,或者来问我。


公众号:蓝海资料掘金营,微信deep3321