这篇文章的原始问题是:如何使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 / contrib / ...-// tensorflow / java / ...-// tensorflow/编译器/ ...

更新:在我的设置上执行此操作会花费很长时间。 需要很长时间的部分是所有测试都在运行。 我不确定这意味着什么,但是我的许多测试都在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提供支持。