使用Keras和Tensorflow与AMD GPU

Nyx*_*nyx 63 python opencl python-2.7 keras tensorflow

我开始学习Keras,我认为它是Tensorflow和Theano之上的一层.但是,我只能访问AMD GPU,例如AMD R9 280X.

如何设置我的Python环境,以便通过Keras/Tensorflow支持OpenCL来使用我的AMD GPU?

我在OSX上运行.

Hug*_*ins 66

我正在为Tensorflow编写一个OpenCL 1.2后端,网址是https://github.com/hughperkins/tensorflow-cl

这个OpenCL的tensorflow分支具有以下特征:

  • 它针对任何/所有OpenCL 1.2设备.它不需要OpenCL 2.0,不需要SPIR-V或SPIR.不需要共享虚拟内存.等等 ...
  • 它基于一个名为'cuda-on-cl'的底层库,https://github.com/hughperkins/cuda-on-cl
    • cuda-on-cl目标是能够采用任何 NVIDIA®CUDA™源代码,并为OpenCL 1.2设备编译.这是一个非常通用的目标,也是一个非常通用的编译器
  • 目前,实现了以下功能:
  • 它是在Ubuntu 16.04(使用Intel HD5500和NVIDIA GPU)和Mac Sierra(使用Intel HD 530和Radeon Pro 450)上开发的

这不是Tensorflow唯一可用的OpenCL分支.还有一个由Codeplay https://www.codeplay.com开发的分支,使用Computecpp,https: //www.codeplay.com/products/computesuite/computecpp 他们的分支比我自己更强,就我而言知道,就其工作的特定GPU设备而言.您需要检查平台支持说明(在hte computecpp页面的底部),以确定您的设备是否受支持.codeplay fork实际上是一个官方的Google fork,它位于:https://github.com/benoitsteiner/tensorflow-opencl

  • 有没有专门的GPU测试过使用集成GPU(Intel或AMD)代替CPU时,张量流的速度有多快? (2认同)
  • @Thonhale理由是:定位可移植性.例如,Mac Sierra Radeon Pro 450驱动程序仅在同一平台上支持OpenCL 1.2和Intel HD 530驱动程序.(这是一款全新的Mac Book Pro基本上) (2认同)

Tho*_*ale 34

这篇文章的原始问题是:如何让Keras和Tensorflow与AMD GPU一起运行.

这个问题的答案如下:

1.)如果您可以使Tensorflow正常工作(可选择在您的虚拟/ conda环境中),Keras将起作用.

2.)要像其他人所说的那样让Tensorflow在AMD GPU上工作,这种方法可以用来编译Tensorflow来使用OpenCl.为此,请阅读以下链接.但为简洁起见,我将在此总结所需的步骤:

  • 您将需要AMD专有驱动程序.这些目前仅在Ubuntu 14.04上可用(Ubuntu决定改变UI呈现方式之前的版本).支持Ubuntu 16.04正在编写此帖子,仅限于通过AMDProDrivers的几个GPU.想要深入学习AMD GPU的读者应该注意这一点!

  • 使用OpenCl支持编译Tensorflow还需要您获取并安装以下先决条件:OpenCl头文件,ComputeCpp.

  • 满足先决条件后,配置您的构建.请注意,有三个选项可用于编译Tensorflow:Std Tensorflow(稳定),Benoits Steiner的Tensorflow-opencl(开发)和Luke Iwanski的Tensorflow-opencl(高度实验性),您可以从github中获取.另请注意,如果您决定从任何opencl版本构建,那么使用opencl的问题将会丢失,因为假设您正在使用它.相反,这意味着如果从标准张量流进行配置,则当配置脚本要求您使用opencl时,您需要选择"是",并且对于CUDA使用"否".

  • 然后像这样运行测试:

    $ bazel test --config = sycl -k --test_timeout 1600 - // tensorflow/... - // tensorflow/contrib/... - // tensorflow/java/... - // tensorflow/compiler/...

更新:在我的设置上执行此操作需要很长时间才能完成设置.需要很长时间的部分都是运行的测试.我不确定这意味着什么,但我的很多测试都是在1600秒的时间内完成.可能会缩短持续时间,但会以更多测试超时为代价.或者,您可以在不进行测试的情况下构建张量流.在撰写本文时,运行测试已经花了2天时间.

或者像这样构建pip包:

bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package
Run Code Online (Sandbox Code Playgroud)

请实际阅读Codeplay上的博文:Lukas Iwansky在2017年3月30日发布了一篇关于如何让Tensorflow与OpenCl一起工作的综合教程.所以这是一篇非常近期的帖子.还有一些我在这里没有写的细节.

如上面的许多帖子所示,在整个互联网中传播了一些信息.Lukas的帖子在价值方面增加的是所有信息都汇集到一个地方,这应该使Tensforflow和OpenCl设置不那么令人生畏.我只会在这里提供一个链接:

https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

这里发布了一个稍微完整的演练:

http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/

它主要区别在于明确告诉用户他/她需要:

  • 创建符号链接到子文件夹
  • 然后通过"python setup.py develop"命令实际安装tensorflow.

注意上面使用tensorflow-cl提到了另一种方法:

https://github.com/hughperkins/tensorflow-cl

虽然看起来这种方法不太活跃,但我现在无法辨别哪种方法更好.发布的问题较少,解决这些问题的对话也较少.去年出现了重大推动.自2016年11月以来,额外的推动已经开始减少,尽管Hugh在撰写此帖后几天似乎已经推出了一些更新.(更新:如果你阅读了一些文档自述文件,这个版本的tensorflowo现在只依赖于社区支持,因为主要的开发人员忙于生活.)

更新(2017-04-25):我有一些基于测试tensorflow-opencl的注释.

  • 该软件包的未来用户应该注意,使用opencl意味着计算方面的所有繁重工作都转移到GPU.我之所以提到这一点,是因为我个人认为计算工作量会在我的CPU和iGPU之间共享.这意味着GPU的功能非常重要(特别是带宽和可用的VRAM).

以下是使用我的SETUP的CIFAR10数据集(带有iGPU的A10-7850)计算1个纪元的一些数字.你的里程几乎肯定会有所不同!

  • Tensorflow(通过pip安装):~1700 s/epoch
  • Tensorflow(w/SSE + AVX):~1100秒/纪元
  • Tensorflow(w/opencl和iGPU):~5800秒/纪元

您可以看到,在这种特殊情况下,性能更差.我将此归因于以下因素:

  • iGPU只有1GB.这导致在CPU和GPU之间来回复制很多.(Opencl 1.2还没有通过指针传递数据的能力;而是必须来回复制数据.)
  • iGPU只有512个流处理器(和32 Gb/s内存带宽),在这种情况下比使用SSE4 + AVX指令集的4个CPU要慢.
  • tensorflow-opencl的开发处于起步阶段,SYCL等的许多优化尚未完成.

如果您使用的是具有更多VRAM和更多流处理器的AMD GPU,您肯定会获得更好的性能数字.我有兴趣阅读人们正在实现的数字,以了解什么是可能的.

如果/当更新被推送时,我将继续保持这个答案.

3.)目前正在暗示使用AMD的RocM计划和miOpen(cuDNN等效)库的替代方法.这些/将是开源库,可实现深度学习.需要注意的是,RocM支持目前仅适用于Linux,并且miOpen还没有发布到野外,但是Raja(AMD GPU头)已经在AMA中表示使用上述内容,应该可以做深入学习AMD GPU.实际上,不仅计划支持Tensorflow,还计划支持Cafe2,Cafe,Torch7和MxNet.


Tal*_*aid 11

可以通过PlaidML Keras后端使用AMD GPU。

最快:PlaidML通常比流行平台(例如TensorFlow CPU)快10倍(或更多),因为它支持所有GPU,独立于品牌和型号。PlaidML加速了AMD,Intel,NVIDIA,ARM和嵌入式GPU上的深度学习。

最容易的:PlaidML易于安装并且支持多个前端(当前为Keras和ONNX)

免费:PlaidML是完全开源的,并且不依赖具有专有和限制性许可证的任何供应商库。

对于大多数平台,开始加速深度学习就像运行一些命令一样容易(假设您已安装Python(v2或v3)):

virtualenv plaidml
source plaidml/bin/activate
pip install plaidml-keras plaidbench
Run Code Online (Sandbox Code Playgroud)

选择您要使用的加速器(许多计算机,尤其是笔记本电脑,有多个):

plaidml-setup
Run Code Online (Sandbox Code Playgroud)

接下来,尝试对MobileNet推理性能进行基准测试:

plaidbench keras mobilenet
Run Code Online (Sandbox Code Playgroud)

或者,尝试培训MobileNet:

plaidbench --batch-size 16 keras --train mobilenet
Run Code Online (Sandbox Code Playgroud)

与keras套装一起使用

os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
Run Code Online (Sandbox Code Playgroud)

想要查询更多的信息

https://github.com/plaidml/plaidml

https://github.com/rstudio/keras/issues/205#issuecomment-348336284


nem*_*emo 5

Theano确实支持 OpenCL,但仍处于早期阶段。Theano 本身对 OpenCL 不感兴趣,依赖社区支持

大多数操作已经实现,主要是调整和优化给定操作。

要使用 OpenCL 后端,您必须自己构建 libgpuarray

根据个人经验,我可以告诉您,如果幸运的话,您将获得 CPU 性能。内存分配似乎非常天真地实现(因此计算会很慢)并且会在内存不足时崩溃。但我鼓励您尝试甚至优化代码或帮助报告错误。

  • Theano 已停产 (5认同)
  • 在过去的 6 个月里,这方面有什么变化吗? (4认同)

小智 5

这是一个老问题,但是因为我花了几个星期的时间试图自己解决这个问题:

  1. 对Theano的OpenCL支持很受欢迎.他们添加了一个libgpuarray后端,看起来仍然是有缺陷的(即,该过程在GPU上运行,但答案是错误的 - 对于DL模型的精度为8%,对于CPU或nVidia获得约95 +%准确度的DL模型CUDA).另外,因为nVidia堆栈上大约50-80%的性能提升来自CUDNN库,OpenCL只会留在尘埃中.(见下文!) :)
  2. ROCM似乎非常酷,但文档(甚至是ROCM是什么/它做什么的明确声明)很难理解.他们正在尽力而为,但他们落后了4年多.它不适用于RX550(截至本文撰写时).所以不要浪费你的时间(这是一周中的一周:)).起初,看起来ROCM是驱动程序集的新增功能(取代AMDGPU-Pro,或者对其进行扩充),但它实际上是一个内核模块和一组库,它们基本上取代了AMDGPU-Pro.(想想这相当于Nvidia-381驱动程序+ CUDA的一些库类).https://rocm.github.io/dl.html(老实说,我还没有测试过性能,或者试图让它与更新的Mesa驱动程序一起工作.我会在某个时候这样做.
  3. 将MiOpen添加到ROCM,这实际上是CUDNN.他们还有一些非常明确的迁移指南.但更好的是.
  4. 他们创建了"HIP",这是一个从CUDA/CUDNN到MiOpen的自动翻译器.它似乎工作得很好,因为它们直接排列API可以翻译.有些概念不是完美的地图,但总的来说它看起来不错.

现在,最后,经过3-4周试图找出OpenCL等,我发现本教程可以帮助您快速入门.这是让hipCaffe正常运行的一步一步.与nVidia不同,请确保您拥有支持的硬件!https://rocm.github.io/hardware.html.认为你可以在没有他们支持的硬件的情况下使用它 祝好运.你被警告过了.一旦你启动并运行ROCM(并运行验证测试),这里是hipCaffe教程 - 如果你有ROCM,你将在10分钟内进行MNIST验证测试 - 甜蜜! https://rocm.github.io/ROCmHipCaffeQuickstart.html


小智 5

AMD ROCm 堆栈已支持 Tensorflow 1.3:

一个预先构建的 docker 镜像也已公开发布: