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 需要的组件,不会把显卡驱动全家桶都塞进来。
--usecase=rocm,graphics。但注意,这样会多装几百兆的图形驱动。
方式二:手动安装(适合有洁癖的工程师)
我不太推荐手动装,除非你很清楚自己在做什么。但如果你非要自己来,流程是这样的:
- 添加 AMD 软件源
- 安装内核头文件
- 安装 DKMS 驱动包
- 重启并验证
# 添加源
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 温度、功耗等信息,说明驱动装好了。
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 型号,说明挂载成功
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
4.6 本章知识体系
下面这张图,是我梳理的 ROCm 安装部署全流程。你照着走,基本不会出大问题。
嗯,以上就是 ROCm 安装部署的全部核心内容。你照着这个流程走,基本能一次搞定。如果遇到问题,别慌,先看看是不是环境没对齐,再查查内核模块有没有加载。实在不行,翻翻 AMD 的官方文档,或者来问我。
公众号:蓝海资料掘金营,微信deep3321