SuooL's Blog

蛰伏于盛夏 藏华于当春

AMD 显卡/GPU 深度学习折腾指南

Introduction

鉴于 NVIDIA 的价格和自己的预算, 因此上了 AMD 的船,自此主机组装完成。

AMD 的 CPU 加 AMD 的 GPU, AMD, YES !

装机完成之后,首要问题就是如何在 AMD 的显卡上进行深度学习炼丹?

经过一番配置(折腾),顺利实现上一目标,以下为个人在 Ubuntu 上的折腾指南。

ZheTeng Conditions

由于要使用AMD 的 ROCm 平台, 其对硬件有一定的要求,请确定是否如何下面的条件,如果符合,则可以参考以下的步骤进行配置。

GPU 列表

以下的型号的 GPU 符合条件:
20190731150421.png

更详细的支持的 GPU 列表

CPU 列表

以下型号的 CPU 在支持之列:
20190731150920.png

更详细的说明链接

关于 ROCm

ROCm的英文全称Radeon Open Compute platform, 目标是建立可替代 CUDA 的生态。ROCm 和CUDA 最大的区别在于其开放性,ROCm希望能在各种不同的硬件上运行,同时 ROCm 完全开源

更多关于 ROCm 介绍可以参考这篇文章,这里不是重点,不再细说。

Install on Ubuntu

了解了以上内容,下面开始安装 ROCm。

系统准备

推荐Ubuntu 16.04 或 18.04, 笔者是 18.04

确保系统在最新状态,安装libnuma,再重启:

1
2
3
4
sudo apt update
sudo apt dist-upgrade
sudo apt install libnuma-dev
sudo reboot

安装 ROCm

  1. 如果你的系统已经安装了官方驱动,那么需要运行以下命令删除系统中已有的的AMD GPU 驱动,并重新启动。
    1
    2
    3
    sudo amdgpu-pro-uninstall
    sudo apt autoremove -y
    sudo reboot
  2. 添加 APT源 Add the ROCm apt repository
    使用如下命令:
    1
    2
    3
    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
  3. Install ROCm by apt
    使用 apt 安装 rocm 包

    1
    2
    sudo apt update
    sudo apt install rocm-dkms

    以上过程会非常慢,如果你有科学上网的方法,推荐使用之。我在路由端配置了相关加速,正常情况下大概十分钟完成。

  4. Set user permissions
    设置用户 GPU 使用权限,将当前用户加入到权限组:

    1
    sudo usermod -a -G video $LOGNAME

    为系统以后的用户都添加权限:

    1
    2
    echo 'ADD_EXTRA_GROUPS=1' | sudo tee -a /etc/adduser.conf
    echo 'EXTRA_GROUPS=video' | sudo tee -a /etc/adduser.conf
  5. 测试
    重启系统之后,运行以下命令验证 ROCm 安装是否成功,如果看到你的 GPU 在下面的命令中都有显示,则表示已经安装成功。

    1
    2
    /opt/rocm/bin/rocminfo 
    /opt/rocm/opencl/bin/x86_64/clinfo

    结果如下:
    rocminfo 命令:
    命令一.png

clinfo 命令:
shell 2.png

  1. 环境变量
    将 ROCm 添加到环境变量:

    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
  2. 监控(optional)
    AMD 没有 NVIDIA 类似 nvidia-smi 的命令,只能使用第三方,这里推荐 radeontop,可以直接使用 apt 安装。

    1
    2
    sudo apt-get install radeontop
    sudo radeontop

    如果你的结果全是0, 那么你最好自己编译安装,这里或许比较折腾,因为需要的环境较多。
    显示示例:
    20190731160110.png

Deep Learning on ROCm

当前支持的框架如下:

TensorFlow: TensorFlow for ROCm – latest supported version 1.13

MIOpen: Open-source deep learning library for AMD GPUs – latest supported version 1.7.1

PyTorch: PyTorch for ROCm – latest supported version 1.0

Python 环境管理推荐使用 Anaconda

Tensorflow

Tensorflow 支持较为完善,直接使用 apt 安装即可。具体方法如下:

  1. 安装相关包
1
2
sudo apt update
sudo apt install rocm-libs miopen-hip cxlactivitylogger
  1. apt 安装
1
2
3
sudo apt install wget python3-pip
# Pip3 install the whl package from PyPI
pip3 install --user tensorflow-rocm

PyTorch

  1. 安装依赖包
  • rocrand, hiprand, rocblas, miopen, miopengemm, rocfft, rocsparse, rocm-cmake, rocm-dev, rocm-device-libs,rocm-libs, hcc, hip_base,hip_hcc, hip-thrust
  1. Clone PyTorch repository
1
2
3
git clone https://github.com/ROCmSoftwarePlatform/pytorch.git
cd pytorch
git submodule update --init --recursive
  1. 指定 GPU 型号
    如下:
    20190731163709.png.

通过设置环境变量,指明编译针对的GPU类型,设置为:export PYTORCH_ROCM_ARCH=gfx×××

  1. ‘Hipify’ PyTorch source. 将PyTorch中的CUDA函数 build 为ROCm中的hip函数
1
python tools/amd_build/build_amd.py
  1. 编译安装
1
2
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

MAX_JOBS=N 中的 N 小于你的内存除以4.

  1. torchvision
1
2
3
4
git clone https://github.com/pytorch/vision
cd vision
python setup.py install
cd ..
  1. 测试
1
PYTORCH_TEST_WITH_ROCM=1 python test/run_test.py --verbose

我的测试有一定的问题:
测试结果

Conclusion

AMD, YES!

泡面一杯