ROCm 1.8.2 的 TensorFlow upstream(1.9.0-rc0) 编译尝试(CIFAR10 11500个样例/秒 @ VEGA56 80W. 截至2018年7月22日)

2019年7月16日更新:最近,pip install tensorflow-rocm已经足够可用,因此如果只是想在ROCM中使用TensorFlow,请使用pip。


如果是中国人,应该会希望在中华民国的环境下使用TensorFlow吧!

让我们挑战一下吧!

追加注:至2018年9月23日为止,从TensorFlow1.9版本开始,已经提供了预编译版本,可以通过pip等方式进行安装。如果您想先尝试在ROCm上运行TensorFlow,我们推荐使用预编译版本。

截至2018年9月23日,ROCm 1.9 + TensorFlow 1.10是最新版本。

截至2018年7月21日,AMD ROCm官方发布的是TensorFlow 1.3版本,这已经有点过时了。

有一个名为tensorflow-upstream的代码库,需要构建它。

可以参考tensorflow-upstream/rocm_docs中的ROCm构建文档等。

    ROCm 1.8.2

ROCm 最初只支持 PCI Gen3 的架构,但考虑到虚拟货币挖矿的需求,现在也能在 PCI Gen2 上运行。
(令人惊讶的是,甚至旧款的 FirePro W9100(Hawaii)GPU 也虽不被推荐使用,但却成为了兼容的GPU)

只要在此在SandyBridge计算机上安装时,tensorflow构建时nasm出现非法指令错误等问题。 如果稍微修改tensorflow-upstream的配置,暂时可以解决这个问题(请参考下面的说明)。

构成

    • Ubuntu 16.04

 

    • Python 3.5 (conda)

 

    • ROCm 1.8.2

 

    • そこそこ最新のアーキテクチャ(ROCm のページにあるサポート対象アーキテクチャ)の CPU

 

    • RX 580(gfx803), VEGA(gtx900)

 

    Bazel

请提供相关的信息

谢谢你的参考,我会好好利用。

如果要在深度学习中进行训练,只选择NVIDIA吗?不,还有AMD这个选项呢。

Note: The translation above is provided in simplified Chinese.

使用AMD制造的GPU,结合ROCm、OpenCV和TensorFlow来创建GPU计算环境。

安装

首先,参考 ROCm 网站,先安装 ROCm。

请前往以下网址下载RadeonOpenCompute/ROCm软件包:
https://github.com/RadeonOpenCompute/ROCm (安装指令:apt-get install rocm-dev)

我会加入类似于blas的东西。

$ sudo apt install rocrand rocfft rocblas

我将安装MIOpen(类似于cuDNN的计算加速库)。

$ sudo apt install miopen-hip miopengemm

用Python 3.5准备环境(也可能适用于3.6版本)
这次使用了(mini)conda。

$ conda create -n py35 python=3.5
$ source activate py35

如果在python模块的构建过程中失败,请适当安装numpy和six库。

(py35) $ (pip install numpy six

安装Bazel beforehand.

我将确认tensorflow-upstream的分支是develop-upstream。

配置。

可选的

在tensorflow-upstream中,默认的优化选项为-march=haswell。尽管可以在configure中更改它,但由于其他地方使用了-march=haswell,因此在某些CPU上无法正常工作(即使是较小型的Celeron,例如G3930之类的haswell及其后续架构的CPU也存在部分功能缺失,因此会出现NG)。具体来说,用于构建tensorflow所需的依赖程序protoc和nasm在运行时会因非法指令而崩溃。

(2018年9月23日更新)针对这个问题的修补程序已经被合并到 https://github.com/ROCmSoftwarePlatform/tensorflow-upstream/pull/81,并得到修复。

在configure.py中将-march=native和–host_copt=-march=native配置为以下选项可能更好。

diff --git a/configure.py b/configure.py
index fc33325..45971da 100644
--- a/configure.py
+++ b/configure.py
@@ -486,7 +486,7 @@ def set_cc_opt_flags(environ_cp):
   elif is_windows():
     default_cc_opt_flags = '/arch:AVX'
   else:
-    default_cc_opt_flags = '-march=haswell'
+    default_cc_opt_flags = '-march=native'
   question = ('Please specify optimization flags to use during compilation when'
               ' bazel option "--config=opt" is specified [Default is %s]: '
              ) % default_cc_opt_flags
@@ -496,7 +496,7 @@ def set_cc_opt_flags(environ_cp):
     write_to_bazelrc('build:opt --copt=%s' % opt)
   # It should be safe on the same build host.
   if not is_ppc64le() and not is_windows():
-    write_to_bazelrc('build:opt --host_copt=-march=haswell')
+    write_to_bazelrc('build:opt --host_copt=-march=native')
   write_to_bazelrc('build:opt --define with_default_optimizations=true')

如果已经在其他地方构建了 tensorflow,最好删除 $HOME/.cache/bazel 目录下的缓存文件,然后运行以下配置命令以确保顺利运行。

运行 configure,进行初始设置。
大体上是按默认方式进行的,但有些修改的地方是将 XLA JIT 设置为 n(也可以使用 Y)。

$ 
$ ./configure
You have bazel 0.15.2 installed.
Please specify the location of python. [Default is /home/syoyo/miniconda3/envs/py35/bin/python]: 


Found possible Python library paths:
  /home/syoyo/miniconda3/envs/py35/lib/python3.5/site-packages
Please input the desired Python library path to use.  Default is [/home/syoyo/miniconda3/envs/py35/lib/python3.5/site-packages]

Do you wish to build TensorFlow with jemalloc as malloc support? [Y/n]: Y
jemalloc as malloc support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Google Cloud Platform support? [y/N]: N
No Google Cloud Platform support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Hadoop File System support? [y/N]: N
No Hadoop File System support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Amazon AWS Platform support? [y/N]: N
No Amazon AWS Platform support will be enabled for TensorFlow.

Do you wish to build TensorFlow with Apache Kafka Platform support? [y/N]: N
No Apache Kafka Platform support will be enabled for TensorFlow.

Do you wish to build TensorFlow with XLA JIT support? [Y/n]: N
No XLA JIT support will be enabled for TensorFlow.

Do you wish to build TensorFlow with GDR support? [y/N]: N
No GDR support will be enabled for TensorFlow.

Do you wish to build TensorFlow with VERBS support? [y/N]: N
No VERBS support will be enabled for TensorFlow.

Do you wish to build TensorFlow with OpenCL SYCL support? [y/N]: N 
No OpenCL SYCL support will be enabled for TensorFlow.

Do you wish to build TensorFlow with ROCm support? [Y/n]: Y
ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: N
No CUDA support will be enabled for TensorFlow.

Do you wish to download a fresh release of clang? (Experimental) [y/N]: N
Clang will not be downloaded.

Do you wish to build TensorFlow with MPI support? [y/N]: N
No MPI support will be enabled for TensorFlow.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 


Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]: N
Not configuring the WORKSPACE for Android builds.

使用 build_python3 脚本进行构建。

(py35) $ ./build_python3

如果在build_python3脚本的最后一步安装pip wheel时出现权限错误,请在–user处进行安装。

(py35) $ pip3 install --user /tmp/tensorflow_pkg/tensorflow-1.9.0rc0-cp35-cp35m-linux_x86_64.whl

确认动作

使用GPU
https://www.tensorflow.org/guide/using_gpu

我将尝试运行一个简单的加法程序。

2018-07-21 22:05:25.506635: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX512F
2018-07-21 22:05:25.507760: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1500] Found device 0 with properties: 
name: Device 67df
AMDGPU ISA: gfx803
memoryClockRate (GHz) 1.35
pciBusID 0000:65:00.0
Total memory: 8.00GiB
Free memory: 7.75GiB
2018-07-21 22:05:25.507806: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1611] Adding visible gpu devices: 0
2018-07-21 22:05:25.507838: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1031] Device interconnect StreamExecutor with strength 1 edge matrix:
2018-07-21 22:05:25.507854: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1037]      0 
2018-07-21 22:05:25.507870: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1050] 0:   N 
2018-07-21 22:05:25.507938: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1168] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 7539 MB memory) -> physical GPU (device: 0, name: Device 67df, pci bus id: 0000:65:00.0)
2018-07-21 22:05:25.523000: E tensorflow/core/common_runtime/gpu/gpu_device.cc:264] Illegal GPUOptions.experimental.num_dev_to_dev_copy_streams=0 set to 1 instead.
Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: Device 67df, pci bus id: 0000:65:00.0
2018-07-21 22:05:26.074124: I tensorflow/core/common_runtime/direct_session.cc:288] Device mapping:
/job:localhost/replica:0/task:0/device:GPU:0 -> device: 0, name: Device 67df, pci bus id: 0000:65:00.0

MatMul: (MatMul): /job:localhost/replica:0/task:0/device:GPU:0
2018-07-21 22:05:26.075049: I tensorflow/core/common_runtime/placer.cc:935] MatMul: (MatMul)/job:localhost/replica:0/task:0/device:GPU:0
a: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2018-07-21 22:05:26.075094: I tensorflow/core/common_runtime/placer.cc:935] a: (Const)/job:localhost/replica:0/task:0/device:GPU:0
b: (Const): /job:localhost/replica:0/task:0/device:GPU:0
2018-07-21 22:05:26.075117: I tensorflow/core/common_runtime/placer.cc:935] b: (Const)/job:localhost/replica:0/task:0/device:GPU:0
[[22. 28.]
 [49. 64.]]

看哪~!有一些实验性错误出现了,但是它还是正常工作了!

CIFAR10 可以被简洁的解释为中文识别图像十个分类数据集。

我将使用CIFAR10进行学习。
尽管在rocm-smi下降了时钟速度,但VEGA56以80W的功耗运行,每秒生成11500个样例。

ROCe tensorflow-upstream 项目在训练 CIFAR10 方面取得了成功!㊗️㊗️㊗️㊗️㊗️㊗️㊗️??????????????????????????? VEGA56 setsclk 3 在 80W 下达到了 1150 个 example/秒。谢谢。pic.twitter.com/lpNfF5FDWE— Syoyo Fujita (@syoyo) July 22, 2018

在TF1.8中,125W功耗限制下,1080 Ti的每秒处理的范例数在10500至11500之间。

由于与NV GPU相比,VEGA的性能差不多,所以性价比似乎很高,尽管它的内存容量较小(VEGA56为8GB,1080 Ti为11GB),但这不是问题。因为CIFAR10能正常运行,所以至少包括CNN在内的学习应该没有问题,应该可以在AMD GPU上运行。

问题所在

导入tensorflow太重了,非常困难…(大约需要5-6秒). 想知道是不是有某个模块被设置成了调试版本?

构建失败示例

如果 hipcc 的设置(或者 clang 的安装?)出现了问题,那么有可能出现 hipcc 调用 nvcc(CUDA)导致构建失败的情况(即使在设置环境变量为 hcc 的情况下,在 bazel 环境中会被改写成 nvcc)。

例如,存在以下类似问题。

对于这个问题我不是很清楚。如果遇到这种情况,似乎只能尝试清除缓存或重新安装包。

把以下内容用中文进行本地化改写,只需要一种选项:

待办事项

    • CIFAR10 学習の精度を NVIDIA GPU と比較する.

 

    • 仮想通貨マイニングプログラムとカーネルフージョンし, 機械学習しつつマイニングするスキームを確立したい.

 

    • pytorch を ROCm でビルドする(ビルドオプションはあるが, 実際に動くかどうか)

 

    • InfiniBand(VERBS) 有効にし, GPU クラスタで並列学習したい.

優秀な機械学習若人さまが, 優秀な ROCm 機械学習若人さまへと人類史上最速で昇華なされるスキームを極める旅に出たい.

广告
将在 10 秒后关闭
bannerAds