部署面向GPU计算的开放式软件平台ROCm。
# 序
为了在\(\textbf{AMD}\)平台上炼丹,不惜花了3天学习了 Linux 和 Conda 相关操作。
# 部署Conda
详见此处。
# 安装软件及依赖项并设置权限
0.注意内核版本
不同版本的 ROCm 对\(\textbf{Linux}\)内核可能有不同的要求。
1.安装依赖
sudo apt install wget vim git libstdc++-12-dev
至于 libstdc++-12-dev ,博主在启动依赖机器学习框架的程序时提示MIOpen(HIP) Warning,查阅相关资料发现由于该软件包缺失导致。
2.为ROCm设置用户组
# 将当前用户添加进render和video组
sudo usermod -a -G render,video $LOGNAME
# 若想默认添加未来的所有用户进入render和video组,执行以下命令
echo 'ADD_EXTRA_GROUPS=1' | sudo tee -a /etc/adduser.conf
echo 'EXTRA_GROUPS=video' | sudo tee -a /etc/adduser.conf
echo 'EXTRA_GROUPS=render' | sudo tee -a /etc/adduser.conf
3. 下载并安装AMDGPU Installer
# 下载AMDGPU安装程序
wget https://repo.radeon.com/amdgpu-install/5.7.3/ubuntu/jammy/amdgpu-install_5.7.50703-1_all.deb
# 安装AMDGPU安装程序
sudo apt install ./amdgpu-install_5.7.50703-1_all.deb
请参考官方文档,根据自身系统及版本与机器学习框架所支持的版本下载并安装合适的软件包。具体而言,ROCm列举出一系列支持的系统、系统版本号及内核; 截至\(2024\)年\(9\)月,\(\text{Pytorch}\)支持至\(\text{ROCm}6.1\)。
# 通过AMDGPU Installer安装显卡驱动与ROCm
官方文档指出,当使用Docker容器安装时或安装多版本ROCm时均无需安装内核模式驱动。在此笔者仅安装最新版,因此添加了 –no-dkms 选项。
sudo amdgpu-install --usecase=hiplibsdk,rocm --no-dkms
如果系统中没有安装图形驱动,则可以附带 graphics :
sudo amdgpu-install --usecase=graphics,hiplibsdk,rocm --no-dkms
# 设置环境变量
重启系统后查看环境变量是否已自动添加以下路径。若没有,则需要手动修改以下环境变量: 1.指定查找共享库的路径; 2.执行文件的路径。
# 添加共享库的路径 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/rocm-5.7.3/lib # 添加执行文件的路径 export PATH=$PATH:/opt/rocm-5.7.3/bin:/opt/rocm-5.7.3/rocprofiler/bin:/opt/rocm-5.7.3/opencl/bin
参考此处修改环境变量,具体而言,在.bashrc文件最后添加上述代码。
# 测试ROCm是否成功安装
在终端中输入 rocminfo 及 rocm-smi 后返回当前系统及显卡信息,则说明 ROCm 部署成功。
若ROCm (计算平台)已正常安装,接下来的步骤是安装合适的机器学习框架,如\(\text{Pytorch}\)、\(\text{TensorFlow}\)及其他框架。笔者以\(\text{Pytorch}\)举例。
# 安装\(\text{Pytorch}\)框架
使用 Conda 创建包含所需版本Python的虚拟环境。进入该环境,安装对应 ROCm 版本的\(\text{Pytorch}\)。
# 创建虚拟环境
conda create -n rocm1
# 进入虚拟环境
conda activate rocm1
# 安装Pytorch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm5.7
测试\(\text{Pytorch}\)是否正确安装
import torch print(torch.cuda.is_available())
若返回 True 则意为正确调用GPU。
最后,查看自己的\(\textbf{AMD}\)显卡是否直接受ROCm支持。若不受直接支持,可以根据自己的 RADEON 型号通过环境变量伪装自己的GFX版本,进而正常使用ROCm:
# Radeon VII
export HSA_OVERRIDE_GFX_VERSION=9.0.6
# RX5700XT/RX5700/RX5500XT/RX6750XT/RX6700XT/RX6700/RX6650XT/RX6600XT/RX6600/RX6500XT/RX6400
export HSA_OVERRIDE_GFX_VERSION=10.3.0
# RX7900XTX/RX7900XT/RX7600
export HSA_OVERRIDE_GFX_VERSION=11.0.0
# 框架更新
更新 ROCm+PyTorch 的路线为:首先删除包含旧版\(\text{Pytorch}\)的 Conda 环境;然后分别通过 AMDGPU Installer 和\(\textbf{Package Manager}\)卸载\(\textbf{ROCm}\)和\(\textbf{amdgpu-install}\)程序;最后重复上文步骤安装所需版本的\(\textbf{ROCm}\),新建 Conda 环境,在新环境安装新版\(\text{Pytorch}\)。
# Uninstalling all ROCm Releases
sudo amdgpu-install --uninstall --rocmrelease=all
# 从Package Manager内卸载amdgpu-install程序
apt purge amdgpu-install
# 注意事项
若输入 rocminfo 提示未能装载 ROCk 模块,则需手动开启该模块。
# 提示以下信息
rocminfo
ROCk module is NOT loaded, possibly no GPU devices.
# 则进行如下操作
# 检查是否开启amdgpu
lsmod | grep amdgpu
# 若未开启,则手动开启
sudo modprobe amdgpu
此举还可解决因未正确加载 amdgpu 导致的如分辨率错误等一系列问题。
另一种解决方案是,将 blacklist-amdgpu.conf 从\(\text{/etc/modprobe.d}\)目录中移除。