将Keras&Tensorflow与AMD GPU结合使用
keras
python
python-2.7
tensorflow
6
0

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

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

我在OSX上运行。

参考资料:
Stack Overflow
收藏
评论
共 7 个回答
高赞 时间 活跃

这是一个古老的问题,但是由于我花了最后几个星期试图自己解决这个问题:

  1. OpenCL对Theano的支持屡见不鲜。他们添加了一个libgpuarray后端,该后端似乎仍然有问题(即,该过程在GPU上运行,但答案是错误的-例如,对于DL模型,MNIST的精度为8%,而CPU或nVidia的精度为〜95 +% CUDA)。另外,由于nVidia堆栈上约50-80%的性能提升来自CUDNN库,因此OpenCL只是尘土飞扬。 (见下文!) :)
  2. ROCM看起来很酷,但是文档(甚至清楚地声明了ROCM是什么/做什么)也很难理解。他们正在尽力而为,但落后了4年多。它并非在RX550上不起作用(截至撰写本文时)。因此,不要浪费您的时间(这是一周中的1个时间:))。乍一看,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

收藏
评论

如果您可以访问其他AMD GPU,请参阅此处: https : //github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs

这应该使您朝着ROCm平台上的tensorflow的正确方向前进,但是Selly关于https://rocm.github.io/hardware.html的帖子就是解决此问题的方法。该页面并不是一个详尽的列表,我自己发现Xeon E5 v2 Ivy Bridge与ROCm可以很好地工作,即使它们列出了v3或更高版本,但显卡有些挑剔。 gfx8或更高版本,但随着时间的推移会出现一些小小的例外,例如北极星和其他。

更新-看起来hiptensorflow在配置过程中具有支持opencl的选项。我想说的是,即使您没有gfx8 +或Polaris gpu(如果opencl实现也可以),请调查链接。这是一个漫长的过程,但是遵循一个编写良好的指令一到三个小时(取决于硬件)并不会造成太多损失。

收藏
评论

这篇文章的最初问题是:如何使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。

  • 满足先决条件后,配置构建。请注意,有3种编译Tensorflow的选项:Std Tensorflow(stable),Benoits Steiner的Tensorflow-opencl(正在开发)和Luke Iwanski的Tensorflow-opencl(正在试验),您可以从github中获取。还要注意,如果您决定从任何opencl版本进行构建,则将丢失使用opencl的问题,因为假定您正在使用它。相反,这意味着,如果您从标准tensorflow配置,则当配置脚本要求您对CUDA使用opencl和“否”时,需要选择“是”。

  • 然后像这样运行测试:

    $ 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

请实际阅读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 development”命令实际安装tensorflow。

注意上面提到了使用tensorflow-cl的替代方法:

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

尽管目前看来这种方法不太活跃,但我无法确定哪种方法更好。发布的问题越来越少,解决这些问题的对话也越来越少。去年有很大的推动。自2016年11月以来,更多的推动力减弱了,尽管在撰写本文时,休(Hugh)似乎在几天前已经推动了一些更新。 (更新:如果您阅读了一些文档自述文件,此版本的tensorflowo现在仅依赖社区支持,因为主要开发人员忙于生活。)

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

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

以下是一些数字,用于使用“我的设定”(带有iGPU的A10-7850)的CIFAR10数据集来计算1个历元。您的里程几乎肯定会有所不同!

  • Tensorflow(通过pip安装):〜1700 s / epoch
  • Tensorflow(带有SSE + AVX):〜1100 s / epoch
  • Tensorflow(带有opencl和iGPU):〜5800 s / epoch

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

  • 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中表示,使用以上内容,应该可以在Linux上进行深度学习。 AMD GPU。实际上,不仅支持Tensorflow,而且支持Cafe2,Cafe,Torch7和MxNet。

收藏
评论

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

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

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

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

收藏
评论

可以通过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

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

plaidml-setup

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

plaidbench keras mobilenet

或者,尝试培训MobileNet:

plaidbench --batch-size 16 keras --train mobilenet

与keras套装一起使用

os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"

欲获得更多信息

https://github.com/plaidml/plaidml

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

收藏
评论

AMD ROCm堆栈已支持Tensorflow 1.3:

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

收藏
评论

我在https://github.com/hughperkins/tensorflow-cl上为Tensorflow写一个OpenCL 1.2后端

用于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开发了一个fork,据我所知,他们对fork的要求比我强。知道,它在哪些特定GPU设备上工作。您需要查看平台支持说明(在htecomputecpp页面底部),以确定是否支持您的设备。编解码分叉实际上是Google的官方分叉,位于此处: https : //github.com/benoitsteiner/tensorflow-opencl

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号