这篇文章的最初问题是:如何让 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 有 3 个选项:Std Tensorflow(稳定)、Benoits Steiner 的 Tensorflow-opencl(开发性)和 Luke Iwanski 的 Tensorflow-opencl(高度实验性),您可以从 github 获取。另请注意,如果您决定从任何 opencl 版本构建,使用 opencl 的问题将丢失,因为假定您正在使用它。相反,这意味着如果您从标准 tensorflow 进行配置,则当配置脚本要求您使用 opencl 和 CUDA 时,您需要选择“是”。
-
然后像这样运行测试:
$ bazel test --config=sycl -k --test_timeout 1600 -- //tensorflow/...
-//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 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)。
以下是使用 MY SETUP 的 CIFAR10 数据集(带有 iGPU 的 A10-7850)计算 1 个 epoch 的一些数字。您的里程几乎肯定会有所不同!
- Tensorflow(通过 pip 安装):~ 1700 s/epoch
- Tensorflow (w/ 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 中表示,使用上述内容,应该可以做深在 AMD GPU 上学习。事实上,不仅计划支持 Tensorflow,还计划支持 Cafe2、Cafe、Torch7 和 MxNet。