这篇文章的最初问题是:如何使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。
0
我开始学习Keras,我认为它是Tensorflow和Theano之上的一层。但是,我只能访问AMD GPU,例如AMD R9 280X。
如何设置我的Python环境,以便可以通过对OpenCL的Keras / Tensorflow支持来使用我的AMD GPU?
我在OSX上运行。