Songqian Li's Blog

去历史上留点故事

目前 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
2
3
4
5
sudo apt update
sudo apt upgrade -y
sudo apt install libnuma-dev -y
sudo apt autoremove -y
sudo reboot

快速的网络连接(可选)

  1. 系统连接 Shadowsocks 服务器。这里建议使用 shadowsocks-qt5 客户端,点击【这里】下载 shadowsocks-qt5 可执行文件
  2. 将下载完成的文件放到你喜欢的位置,然后在这个目录打开终端,给文件添加可执行权限:
    chmod a+x Shadowsocks-Qt5-3.0.1-x86_64.AppImage
  3. 启动 shadowsocks-qt5 客户端:
    ./Shadowsocks-Qt5-3.0.1-x86_64.AppImage
  4. 在下图所示的客户端图形配置界面里面填写正确的服务器信息,注意本地代理类型推荐使用 socks5。完成后点击连接按钮。
  5. 安装 tsocks。使用以下命令安装 tsocks:sudo apt install tsocks -y. 修改/etc/tsocks.conf文件使得最后三行设置和你 shadowsocks-qt5 中本地代理的设置相同,默认情况应该是这样:
1
2
3
server = 127.0.0.1
server_type = 5
server_port = 1080
  1. 安装 git。Ubuntu 默认是没有 git 的,所以使用以下命令安装 git:sudo apt install git -y.
  2. 配置 git 使其通过 shadowsocks 加速。通过以下配置,让 git 走 shadowsocks 的 socks5 代理:
1
2
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

安装依赖

  1. 确保 ROCm 的包已经安装完全:
1
sudo apt updatesudo apt install rock-dkms rocm-dev rocm-libs miopen-hip hipsparse hip-thrust rccl
  1. 安装编译所需要的工具,编译完成后可以选择删除:
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
  1. 安装 anaconda(可选,建议)。具体步骤请参考【这个链接】。如果安装了 anaconda,使用以下命令创建并进入 pytorch 专用环境:
1
conda create --name pytorch python=3.6source activate pytorch
  1. 安装 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
  1. 添加 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
  1. 通过 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
  1. 为你的用户添加 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
  1. 将 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. 检查是否正确安装:
1
/opt/rocm/bin/rocminfo /opt/rocm/opencl/bin/x86_64/clinfo
  1. 可选。安装 radeontop 来监测 GPU 使用情况。
1
sudo apt install radeontopsudo radeontop

编译安装 PyTorch on ROCm

  1. 正如最开始说的,目前 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 平台修复此问题,请忽略该步骤。

  1. 拉取 PyTorch 的源代码。建议拉取 AMD ROCm software 团队的 fork 仓库:
1
git clone https://github.com/ROCmSoftwarePlatform/pytorch.git
  1. 拉取 PyTorch 的子模块
1
cd pytorchgit submodule update --init --recursive

正常情况下,步骤 2 和步骤 3 大约需要下载 500MB 的数据。

  1. 配置 GPU 类型。通过设置环境变量,指明编译针对的 GPU 类型,例如我的 RX 550 为 gfx803,则我的设置为:export PYTORCH_ROCM_ARCH=gfx803
  2. (可选,仅针对使用 anaconda)删除 conda 环境中的 ld。conda 环境中自己有一个 ld,会覆盖系统中自带的/usr/bin/ld,会导致编译出问题。通过重命名的方式使其不影响编译:
1
cd ~/anaconda3/envs/pytorch/compiler_compatmv ld ld-tmpcd -

在编译完成后可以改回。

  1. 使用 AMD 提供的脚本将 PyTorch 中的 CUDA 函数重用为 ROCm 中的 hip 函数。
1
python tools/amd_build/build_amd.py
  1. 编译安装 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清空编译环境后再重新编译。

  1. 编译会比较耗时间。在此期间请不要使用内存占用过高的程序,避免因为内存不足导致编译失败。
  2. 编译安装 torchvision
1
git clone https://github.com/pytorch/visioncd visionpython setup.py installcd ..
  1. 运行 PyTorch 测试
1
PYTORCH_TEST_WITH_ROCM=1 python test/run_test.py --verbose

可以发现,通过的测试数量比上次 Docker 安装的更加多了。说明这次的 PyTorch 安装功能更加完整,理论上能提供更好的开发体验。

  1. ~/anaconda3/envs/pytorch/bin/python设置为你开发环境的解释器

REFERENCE

相关文章
评论
分享
  • 语雀文档自动同步到hexo博客

    前提 阅读本文之前,需要已经正常搭建好 hexo 博客和语雀账号。 同时我们需要准备: 一个 GitHub 账号 一个腾讯云账号 hexo 安装了 yuque-hexo 插件且能正常运行 实现思路: 利用语雀的webhook触...

    语雀文档自动同步到hexo博客
  • Chrome自动将http切换为https

    原因 新版的 Chrome 已经默认实行强制 https 策略了,访问网页中 src 资源时中自动由 http 转为 https,但如果引用的资源无法通过 SSL 访问,Chrome 浏览器会阻断这个资源,就导致了多媒体播放失败,外...

    Chrome自动将http切换为https
  • Jetbrains快捷键

    代码整体向后缩进 选中多行代码 - 按下 Tab 代码整体向前缩进 选中多行代码 - 按下 Shift + Tab 查找下一条代码差异 F7 查找上一条代码差异 Shift + F7

    Jetbrains快捷键
  • 小知识

    Nginx 跨域(不安全,但快捷) 123add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Headers X-Requested-Wi...

    小知识
  • iCloud同步新版Edge书签

    现在 edge 和 ICloud 同步已经原生支持,最新:win10 的 edge、Chrome 如何让书签与 Safari 双向同步? 注意手机需要在 iCloud 中打开同步 Safari 浏览器 旧方法: 打开注册表编辑器,定...

    iCloud同步新版Edge书签
  • FRP-windows客户端配置

    准备 frp 客户端文件,包括:frp 客户端,winsw 局域网内可远程连接的 Windows 计算机 开始 修改客户端配置 打开 frpc.ini 文件,将文件按照需求更改如下: 123456789101112131415...

    FRP-windows客户端配置
  • CentOS下安装Redis

    准备 CentOS Linux release 7.2 gcc 编译器 yum install gcc-c++ TCL yum install -y tcl redis 安装包 4.0.8 版本 安装 下载 redis 安装...

    CentOS下安装Redis
  • CentOS6下yum修复及python安装

    CentOS6 中自带的 yum 依赖的 python 版本是 2.6.6 版本,而 python core team 已不再提供支持,且 pip 至少要求 2.7 版本,因此系统上应该有 2.6,2.7 两个版本的 python 并...

    CentOS6下yum修复及python安装
  • 《操作系统真象还原》:第十章 输入输出系统

    上一章中我们遇到的字符混乱和 GP 异常问题,根本原因是由于临界区代码的资源竞争,这需要一些互斥的方法来保证操作的原子性。 10.1 同步机制——锁 10.1.1 排查 GP 异常,理解原子操作 多线程执行刷屏时光标值越界导致...

    《操作系统真象还原》:第十章 输入输出系统
  • 《操作系统真象还原》:第九章 线程

    线程和进程将分两部分实现,本章先讲解线程。 9.1 实现内核线程 9.1.1 执行流 在处理器数量不变的情况下,多任务操作系统采用多道程序设计的方式,使处理器在所有任务之间来回切换,这称为“伪并行”,由操作系统中的任务调度器决定当...

    《操作系统真象还原》:第九章 线程