目前 ROCm 已支持 TensorFlow 和 Pytorch,无需自行编译:
https://www.amd.com/en/technologies/infinity-hub/pytorch
https://www.amd.com/en/technologies/infinity-hub/tensorflow
-----------2020.04 更新-----------
准备
支持的 GPUs
ROCm 正式支持使用以下芯片的 AMD GPU:
- GFX8 GPUs
- “Fiji” chips, such as on the AMD Radeon R9 Fury X and Radeon Instinct MI8
- “Polaris 10” chips, such as on the AMD Radeon RX 580 and Radeon Instinct MI6
- “Polaris 11” chips, such as on the AMD Radeon RX 570 and Radeon Pro WX 4100
- “Polaris 12” chips, such as on the AMD Radeon RX 550 and Radeon RX 540
- GFX9 GPUs
- “Vega 10” chips, such as on the AMD Radeon RX Vega 64 and Radeon Instinct MI25
- “Vega 7nm” chips
有关硬件支持的更详细列表,见Hardware to Play ROCm
使用的 OS
Ubuntu
安装系统后保证系统是最新的:
1 | sudo apt update |
快速的网络连接(可选)
- 系统连接 Shadowsocks 服务器。这里建议使用 shadowsocks-qt5 客户端,点击【这里】下载 shadowsocks-qt5 可执行文件
- 将下载完成的文件放到你喜欢的位置,然后在这个目录打开终端,给文件添加可执行权限:
chmod a+x Shadowsocks-Qt5-3.0.1-x86_64.AppImage
- 启动 shadowsocks-qt5 客户端:
./Shadowsocks-Qt5-3.0.1-x86_64.AppImage
- 在下图所示的客户端图形配置界面里面填写正确的服务器信息,注意本地代理类型推荐使用 socks5。完成后点击连接按钮。
- 安装 tsocks。使用以下命令安装 tsocks:
sudo apt install tsocks -y
. 修改/etc/tsocks.conf
文件使得最后三行设置和你 shadowsocks-qt5 中本地代理的设置相同,默认情况应该是这样:
1 | server = 127.0.0.1 |
- 安装 git。Ubuntu 默认是没有 git 的,所以使用以下命令安装 git:
sudo apt install git -y
. - 配置 git 使其通过 shadowsocks 加速。通过以下配置,让 git 走 shadowsocks 的 socks5 代理:
1 | git config --global http.proxy 'socks5://127.0.0.1:1080' |
安装依赖
- 确保 ROCm 的包已经安装完全:
1 | sudo apt updatesudo apt install rock-dkms rocm-dev rocm-libs miopen-hip hipsparse hip-thrust rccl |
- 安装编译所需要的工具,编译完成后可以选择删除:
1 | sudo apt install git python-pip libopenblas-dev cmake libnuma-dev autoconf build-essential ca-certificates curl libgoogle-glog-dev libhiredis-dev libiomp-dev libleveldb-dev liblmdb-dev libopencv-dev libpthread-stubs0-dev libsnappy-dev sudo vim libprotobuf-dev protobuf-compiler |
- 安装 anaconda(可选,建议)。具体步骤请参考【这个链接】。如果安装了 anaconda,使用以下命令创建并进入 pytorch 专用环境:
1 | conda create --name pytorch python=3.6source activate pytorch |
- 安装 PyTorch 的 Python 依赖包:
1 | pip install enum34 numpy pyyaml setuptools typing cffi future hypothesis |
安装 AMD ROCm 平台
由于 AMD ROCm 包含了单独的驱动,而且和普通的游戏驱动不能共存,所以首先确保系统中不存在 AMD GPU-PRO 版显卡驱动。如果有,使用以下命令删除驱动并重新启动:
1 | sudo amdgpu-pro-uninstallsudo apt autoremove -ysudo reboot |
- 添加 ROCm 的 apt 仓库。使用以下命令将 ROCm 的官方 apt 仓库添加到你的 apt 源中:
1 | wget -qO - 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 |
- 通过 apt 安装 rocm-dkms 包。使用以下命令安装 rocm-dkms 包:
1 | sudo apt updatesudo apt install rocm-dkms |
安装大约要下载 400MB 的数据。如果你发现你的下载速度特别慢,这时候就可以用到上面安装和配置的 tsocks 来加速 apt。使用以下命令来代替刚才的命令:
1 | sudo tsocks apt updatesudo tsocks apt install rocm-dkms |
- 为你的用户添加 GPU 访问权。使用以下命令将你的用户添加到可以访问 GPU 的用户组中:
1 | sudo usermod -a -G video $LOGNAME |
使用以下命令可以让你以后为系统新添加的用户都有 GPU 访问权:
1 | echo 'ADD_EXTRA_GROUPS=1' | sudo tee -a /etc/adduser.confecho 'EXTRA_GROUPS=video' | sudo tee -a /etc/adduser.conf |
- 将 ROCm 添加到 PATH 环境变量中
1 | echo 'export PATH=$PATH:/opt/rocm/bin:/opt/rocm/profiler/bin:/opt/rocm/opencl/bin/x86_64' | sudo tee -a /etc/profile.d/rocm.sh |
- 检查是否正确安装:
1 | /opt/rocm/bin/rocminfo /opt/rocm/opencl/bin/x86_64/clinfo |
- 可选。安装 radeontop 来监测 GPU 使用情况。
1 | sudo apt install radeontopsudo radeontop |
编译安装 PyTorch on ROCm
- 正如最开始说的,目前 ROCm 平台还存在一些缺陷,因此编译 PyTorch 需要修改 ROCm 平台。修改后的 ROCm 平台可能不能编译或者运行其他深度学习框架。在 root 权限下运行以下命令:
1 | sed -i 's/find_dependency(hip)/find_dependency(HIP)/g' /opt/rocm/rocsparse/lib/cmake/rocsparse/rocsparse-config.cmakesed -i 's/find_dependency(hip)/find_dependency(HIP)/g' /opt/rocm/rocfft/lib/cmake/rocfft/rocfft-config.cmakesed -i 's/find_dependency(hip)/find_dependency(HIP)/g' /opt/rocm/miopen/lib/cmake/miopen/miopen-config.cmakesed -i 's/find_dependency(hip)/find_dependency(HIP)/g' /opt/rocm/rocblas/lib/cmake/rocblas/rocblas-config.cmake |
请各位读者注意,若新版的 ROCm 平台修复此问题,请忽略该步骤。
- 拉取 PyTorch 的源代码。建议拉取 AMD ROCm software 团队的 fork 仓库:
1 | git clone https://github.com/ROCmSoftwarePlatform/pytorch.git |
- 拉取 PyTorch 的子模块
1 | cd pytorchgit submodule update --init --recursive |
正常情况下,步骤 2 和步骤 3 大约需要下载 500MB 的数据。
- 配置 GPU 类型。通过设置环境变量,指明编译针对的 GPU 类型,例如我的 RX 550 为 gfx803,则我的设置为:
export PYTORCH_ROCM_ARCH=gfx803
- (可选,仅针对使用 anaconda)删除 conda 环境中的 ld。conda 环境中自己有一个 ld,会覆盖系统中自带的
/usr/bin/ld
,会导致编译出问题。通过重命名的方式使其不影响编译:
1 | cd ~/anaconda3/envs/pytorch/compiler_compatmv ld ld-tmpcd - |
在编译完成后可以改回。
- 使用 AMD 提供的脚本将 PyTorch 中的 CUDA 函数重用为 ROCm 中的 hip 函数。
1 | python tools/amd_build/build_amd.py |
- 编译安装 PyTorch:
1 | export USE_NINJA=1 # 可选USE_ROCM=1 USE_LMDB=1 BUILD_CAFFE2_OPS=0 BUILD_TEST=0 USE_OPENCV=1 MAX_JOBS=N python setup.py install |
其中,N 为编译时使用的线程数。N 越大则编译速度越快,但是要注意的是,请不要把 N 设的太大,在编译过程中,进程最高会占用 5GB 的内存,因此请保证 5*N 小于你的内存总量。否则内存要是超出了可是会死机的。如果因为 N 设置过大导致编译失败,请使用命令python setup.py clean
清空编译环境后再重新编译。
- 编译会比较耗时间。在此期间请不要使用内存占用过高的程序,避免因为内存不足导致编译失败。
- 编译安装 torchvision
1 | git clone https://github.com/pytorch/visioncd visionpython setup.py installcd .. |
- 运行 PyTorch 测试
1 | PYTORCH_TEST_WITH_ROCM=1 python test/run_test.py --verbose |
可以发现,通过的测试数量比上次 Docker 安装的更加多了。说明这次的 PyTorch 安装功能更加完整,理论上能提供更好的开发体验。
- 将
~/anaconda3/envs/pytorch/bin/python
设置为你开发环境的解释器