基于AMD ROCm的深度学习环境搭建及不负责任评测
最近用退休的2700X和来自某鱼的RX580攒了个3A,正好试一试ROCm这套AMD对标CUDA的环境到底怎么样,所以安装了一套ROCm以及tensorflow-rocm,本文即安装记录以及一些简单测试。
ROCm(Platform for GPU-Enabled HPC and Ultrascale Computing)是啥东西,网上介绍也不少,就不说了, 官方地址 在github上。这里先讲讲它的现状:系统支持方面,ROCm目前只能在Linux上运行,对于常用的Ubuntu、Cent/红帽,都提供了软件源,可以直接使用apt/yum安装,还是很方便的;显卡支持方面,看了下文档目前支持AMD庞大的GCN家族,对于新的RDNA貌似还没有提及;深度学习框架支持方面,主要是tf和pytorch两种,tf-rocm版本已经进入pypi源,安装使用方便,pytorch需要在docker下使用。
安装步骤基本上和官方说明一样,只是在配置tensorflow时有个小坑,下面简单罗列一下:
安装ROCm环境
- 系统准备:Ubuntu 18.04 LTS,千万不要事先安装AMD GPU驱动,否则在安装ROCm时会出错。另外最初装系统时早就习惯性禁用了nouveau,所以不知道安装ROCm是否需要禁用nouveau,至少禁用是没问题的。
2. 安装NUMA支持库
sudo apt update
sudo apt dist-upgrade
sudo apt install libnuma-dev
sudo reboot
3. 安装ROCm apt源
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
4. 安装ROCm本体
sudo apt update
sudo apt install rocm-dkms
5. 将当前账户加入video用户组,只有video组的账户才有权限通过ROCm访问显卡
sudo usermod -a -G video $LOGNAME
6. 环境测试
使用以下两个命令检查ROCm环境是否安装成功,只要有正常输出没有报错就代表没问题,如果有问题,purge重装吧。实在不行参考官方 FAQ 、github提issue或者google。
/opt/rocm/bin/rocminfo
/opt/rocm/opencl/bin/x86_64/clinfo
7. 将ROCm路径加入系统PATH环境变量
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
至此,ROCm基础环境就算安装完成了。可以使用一下命令查看ROCm版本:
apt show rocm-libs -a
输出如下:
Package: rocm-libs
Version: 2.7.22
Priority: optional
Section: devel
Maintainer: Advanced Micro Devices Inc.
Installed-Size: 13.3 kB
Depends: rocfft, rocrand, rocblas, hipblas, rocsparse, hipsparse, rocalution
Homepage: https://github.com/RadeonOpenCompute/ROCm
Download-Size: 784 B
APT-Manual-Installed: yes
APT-Sources: http://repo.radeon.com/rocm/apt/debian xenial/main amd64 Packages
Description: Radeon Open Compute (ROCm) Runtime software stack
也可使用类似nvidia-smi的rocm-smi命令查看显卡信息,就是输出内容有些简陋:
========================ROCm System Management Interface========================
================================================================================
GPU Temp AvgPwr SCLK MCLK Fan Perf PwrCap VRAM% GPU%
0 54.0c 122.233W 1380Mhz 2000Mhz 38.82% auto 170.0W 9% 75%
================================================================================
==============================End of ROCm SMI Log ==============================
安装tensorflow-rocm
tensorflow已经推出了适配ROCm的预编译版本并集成至pypi源,所以安装还是比较简单的:
- 安装支持环境
sudo apt update
sudo apt install rocm-libs miopen-hip cxlactivitylogger
2. pip安装tensorflow-rocm本体
pip install --user tensorflow-rocm
我的python环境是基于conda的python3.7环境,因此可直接使用以上命令安装,请自行确认自己的python版本是否有匹配的tensorflow-rocm版本。
3. 安装rccl库
以上所有安装步骤结束后,写代码测试tensorflow是否可用,结果在import tensorflow时报错:
librccl.so: cannot open shared object file: No such file or directory
说明系统缺失rccl库,安装即可:
sudo apt install rccl
注:上述RCOm及tf步骤为完全依照 官方ROCm安装教程 以及 官方tf-rocm安装教程 执行,依然出现rccl缺失的报错,若你在自行安装后未遇到此问题则不需执行本步操作。
非严谨测试
执行了一个简单的NMIST训练例程,该例程之前在1070上训练大概需要100秒,而在本环境中同样程序基本持续170秒上下,即1070比580快了将近一倍,而二者的标称单精度浮点能力均为6T+,根据这一个不严谨的测试,我可以得出一个不负责任的结论,即AMD这套环境相对NV生态来讲,在性能上还是有很大差距,按这个状态,GCN系的最先进显卡Radeon7可能刚刚超过1070的性能,更别说1070上面还有一票10系、20系中高端产品。
不管怎么说,希望在AMD的持续优化与推广下ROCm的性能可以不断进步,生态越来越完善。
最后贴一段tf及GPU初始化阶段的打印内容,这些文字对于用惯tf-gpu的来说还是比较新鲜的。
2019-08-30 23:33:55.364433: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-08-30 23:33:55.368808: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3693095000 Hz
2019-08-30 23:33:55.369475: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x5586a0012060 executing computations on platform Host. Devices:
2019-08-30 23:33:55.369500: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): <undefined>, <undefined>
2019-08-30 23:33:55.369698: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libhip_hcc.so
2019-08-30 23:33:55.402296: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1651] Found device 0 with properties:
name: Ellesmere [Radeon RX 470/480/570/570X/580/580X]
AMDGPU ISA: gfx803
memoryClockRate (GHz) 1.38
pciBusID 0000:07:00.0
2019-08-30 23:33:55.436224: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library librocblas.so
2019-08-30 23:33:55.473369: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libMIOpen.so
2019-08-30 23:33:55.477778: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library librocfft.so
2019-08-30 23:33:55.479500: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library librocrand.so
2019-08-30 23:33:55.479712: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0