前言
由于之前一直玩黑苹果,老黄的显卡只能停留在 High Sierra 系统,所以我一直用的 AMD 的显卡 Vega 56,最近由于期末大作业要炼丹,不得不说 AI 届 A 卡无人权,几乎完全都是老黄 CUDA 的天下,老黄这一手提前布局,高啊。
正值双十一和双十二的时期,本来打算入手一枚 3070 或 3080,但无奈,当猴当的太称职了,抢了好久都没有买到,只能用已有的显卡炼丹了。要用 A 卡炼丹,只能用 ROCm,但 ROCm 支持的框架很少,不过幸好 Tensorflow 是有社区分支支持的。
在配置环境过程踩了不少坑,这里记录一下。
安装 ROCm
先给出官方文档地址
更新系统安装依赖
sudo apt update sudo apt dist-upgrade sudo apt install libnuma-dev sudo reboot
重启后继续执行下一步
添加 ROCm 的 ppa repo
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | sudo apt-key add - echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list
更新源并安装 rocm-dkms
sudo apt update sudo apt install rocm-dkms
源速度较慢,这里建议挂代理
sudo vi /etc/apt/apt.conf.d/proxy.conf Acquire{ HTTP::proxy "http://127.0.0.1:1080"; HTTPS::proxy "https://127.0.0.1:1080"; }
装好后记得删掉
设置权限
sudo usermod -a -G video $LOGNAME sudo usermod -a -G render $LOGNAME sudo reboot
必须要重启!
添加 ROCm 环境变量
echo 'export PATH=$PATH:/opt/rocm/bin:/opt/rocm/rocprofiler/bin:/opt/rocm/opencl/bin' | sudo tee -a /etc/profile.d/rocm.sh sudo reboot
测试
/opt/rocm/bin/rocminfo /opt/rocm/opencl/bin/x86_64/clinfo
你应该可以从结果中看到你的显卡
安装 tensorflow-rocm
同样,先给出官方文档地址
- 首先就是在系统上安装 python 环境,随你喜欢就行,你可以用 conda 也可以用 pyenv 当然直接用系统自带的 python3 也可以
- 创建符合 tensorflow 的虚拟环境,建议 python3.7
安装依赖包
sudo apt update sudo apt isntall rocm-libs miopen-hip rccl
安装 tensorflow-rocm
pip install tensorflow-rocm
测试
import tensorflow as tf tf.__version__ tf.test.is_gpu_available()
可能遇到的错误
添加 ROCm 的 ppa repo 时
wget -q -O - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add - echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list
不要自作聪明的把
xenial
改成bionic
重启出现 HSA_STATUS_ERROR_OUT_OF_RESOURCES
Failed to get user name to check for video group membership hsa api call failure at: /data/jenkins_workspace/compute-rocm-rel-2.9/rocminfo/rocminfo.cc:1102 Call returned HSA_STATUS_ERROR_OUT_OF_RESOURCES: The runtime failed to allocate the necessary resources. This error may also occur when the core runtime library needs to spawn threads or create internal OS-specific events.
相关 ISSUE : https://github.com/RadeonOpenCompute/ROCm/pull/1005
血红血红的。而且第一句特别蠢,怎么连用户名也没拿到啊(实际上这句话没什么影响)?这种情况下
clinfo
也无法执行,但是rocm-smi
仍旧完全正常。根据上面那个 ISSUE 的说法,是用户组问题。我看也是。这个 ISSUE 关联的 Pull Request 中修改了 README.md ,提供了一套解决方法: https://github.com/RadeonOpenCompute/ROCm/pull/1005/files 但我测试并没有效果。我是怎么解决的呢?我翻遍了 Google 前三页都没解决,然后在 CSDN 上看到了一句话: sudo 一下试试。
sudo rocminfo
(其实这样是没有环境变量的,所以一开始应该是sudo /opt/rocm/bin/rocminfo
)……成了。
天知道为什么可以,我的 root 肯定不在 video 组,更不要说上面 ISSUE 认为需要的 render 组了。反正今后
sudo su
就能用。何乐而不为啊!在
apt install rocm-dkms
过程中出现Error! Bad return status for module build on kernel
Building initial module for 5.3.0-46-generic Error! Bad return status for module build on kernel: 5.3.0-46-generic (x86_64) Consult /var/lib/dkms/amdgpu/3.3-19/build/make.log for more information.
啥事都没有,放心好了。这个 log 又长又什么都看不出来。 ROCm 也安装好了也能用。忽略就行。至少我这行。
官方
amdgpu
/amdgpu-pro
驱动安装卸载相关问题
这其实是一个根本不存在的问题,尤其是如果你从全新系统开始。 ROCm 是不需要提前手动装其他驱动的。
不必要提前安装驱动。不是 docker 版本不需要提前屏蔽驱动。
但是!也不能没有驱动。 ROCm 需要有一个 amdgpu 驱动在运行。屏蔽驱动的方法是:sudo vim /etc/modprobe.d/blacklist.conf #: blacklist amdgpu sudo vim /etc/modprobe.d/blacklist-radeon.conf #: blacklist radeon # 这一行也可以手动直接写在上面的文件,但是如果安装过官方驱动,就会自动创建这个文件
告诉你这个是为了让你明白……不要屏蔽驱动。如果不知道什么情况下屏蔽了就去注释掉。
不过如果你不知道为什么装过其中一个驱动,你就会在后面
sudo apt install rocm-dkms
的时候碰到:dpkg: error processing archive /var/cache/apt/archives/rock-dkms_1.8-151_all.deb (--unpack): trying to overwrite '/usr/share/dkms/modules_to_force_install/amdgpu', which is also in package amdgpu-dkms 18.10-572953 dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
去网上搜一圈这里会有教你强制 overwrite 的。但恕我对 dpkg 一窍不通,我觉得并没有什么用。还是建议直接把驱动卸载掉。
官方驱动安装方法以 Radeon VII 为例(应该都大同小异),VII 驱动下载地址 ,下载后
tar xf amdgpu-*-ubuntu-18.04.tar.xz
解压然后cd amdgpu*
进入文件夹。如果你要安装普通版驱动,那么
./amdgpu-install
。不需要提前 sudo ,后面会叫你输入密码的。如果是 Pro 驱动,那么./amdgpu-pro-install
就好了。就是这么简单,快捷,以及人性化。 AMD 万岁。……要是真的话就好了。官方驱动强制卸载方法
这个脚本有一万种情况可以出错然后喊你用
amdgpu-uninstall
/amdgpu-pro-uninstall
命令或者直接在安装脚本后面加--uninstall
命令来清理不正确的安装否则就完全不能继续,包括但不限于你挂了代理(是的,以我个人经验,建议请务必在下载 rocm 的时候打开 apt 代理,而同时务必在安装驱动(不,你根本就不应该装,除非……你是为了完整的安装以便卸载干净它……)的时候关掉代理), apt 缓存的包有问题,编译哪里掉了链子以及其他一切。虽然几率其实不高,但是一旦发生了 ……你会遇到这种错误:
You might want to run 'apt --fix-broken install' to correct these. The following packages have unmet dependencies: amdgpu-dkms : Depends: amdgpu-core but it is not going to be installed amdgpu-lib-hwe : Depends: amdgpu-core (= 19.30-934563) but it is not going to be installed amdgpu-pro-core : Depends: amdgpu-core but it is not going to be installed gst-omx-amdgpu : Depends: amdgpu-core but it is not going to be installed libdrm-amdgpu-common : Depends: amdgpu-core but it is not going to be installed libdrm2-amdgpu:i386 : Depends: amdgpu-core:i386 libdrm2-amdgpu : Depends: amdgpu-core but it is not going to be installed libegl1-amdgpu-mesa:i386 : Depends: amdgpu-core:i386 libegl1-amdgpu-mesa : Depends: amdgpu-core but it is not going to be installed libgbm1-amdgpu:i386 : Depends: amdgpu-core:i386 libgbm1-amdgpu : Depends: amdgpu-core but it is not going to be installed ... E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
(有人会叫你
sudo dpkg -i --force-overwrite /var/cache/apt/archives/rock-dkms_2.10-14_all.deb
)还有这种错误:
dpkg: error processing package amdgpu (--remove): dependency problems - not removing Errors were encountered while processing: amdgpu
还有前面提过的 overwrite 错误:
Preparing to unpack .../libdrm-amdgpu-common_1.0.0-633530_all.deb ... Unpacking libdrm-amdgpu-common (1.0.0-633530) ... dpkg: error processing archive /var/opt/amdgpu-pro-local/./libdrm-amdgpu-common_1.0.0-633530_all.deb (--unpack): trying to overwrite '/opt/amdgpu/share/libdrm/amdgpu.ids', which is also in package ids-amdgpu 1.0.0-606296 Errors were encountered while processing: /var/opt/amdgpu-pro-local/./libdrm-amdgpu-common_1.0.0-633530_all.deb
(参考 askubuntu post )
…… 还有长成各种各样的。这不重要,总而言之,最为行之有效的解决方案是 StackExchange 的 某个帖子 藏在评论区的某个角落里的方法:
sudo apt-get install synaptic
是的你没看错,就是传说中的 新 立 德 。GUI,打开! Edit > Fix Broken Packages !然后在 Package 列表中用 Broken 过滤器,全部 Mark Completion Removal !这还没完,去列表里定位
amdgpu
或者amdgpu-pro
,刚才出错的是那个就右键 Mark for Installation 哪个,记得点顶上的 Apply ,安装!这可比 amdgpu-install 那脚本好使多了。吭哧吭哧安装上了,很好。那么,可以愉快的
amdgpu-install --uninstall
了…… (是的,这个安装不会在命令行添加amdgpu-uninstall
命令)报 apt lock 冲突的话别忘记把 synaptic gui 关掉啊。
elementrary 或者其他野鸡 OS 适配
一个无足轻重的小问题。稍有常识的人都能自己想到的凑字数段落。
如果安装脚本报告
Unsupported DEB-based OS: elementary
,那么用一个你趁手的编辑器打开脚本,搜索ubuntu|linuxmint|debian
并改成ubuntu|linuxmint|debian|elementary
。其他系统同理。
4 条评论
请问博主,我卸载重新装了以便,还是/opt/rocm/bin/rocminfo报错,大佬知道是沙原因吗?我现在怀疑是不是我的显卡不支持。。。我用的是荣耀magicbook 2019 锐龙版,显卡是Radeon Rx Vega10 Graphics.求大佬们解答一下,卑微毕设人。
根据项目里的说明https://github.com/RadeonOpenCompute/ROCm#Hardware-and-Software-Support
你的GPU应该是支持的
具体什么原因我也不太清楚,我也是刚接触这个框架,并且这个框架目前来看还是有很多bug的
你可以到github上发个issue,询问下开发者
感谢大佬
/opt/rocm/bin/rocminfo 报错:
ROCk module is loaded
Unable to open /dev/kfd read-write: Bad address
cfl is member of render group
hsa api call failure at: /src/rocminfo/rocminfo.cc:1142
Call returned HSA_STATUS_ERROR_OUT_OF_RESOURCES: The runtime failed to allocate the necessary resources. This error may also occur when the core runtime library needs to spawn threads or create internal OS-specific events.