ChatGPT解决这个技术问题 Extra ChatGPT

在 AMD GPU 上使用 Keras 和 Tensorflow

我开始学习 Keras,我相信它是 Tensorflow 和 Theano 之上的一层。但是,我只能使用 AMD GPU,例如 AMD R9 280X。

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

我在 OSX 上运行。

我相信新的 Theano backend 将支持 OpenCL 以及 NVIDIA 卡。就 Tensorflow 而言,有一个 open issue 用于 OpenCL 支持;看起来进展不大。
TensorFlow 或大多数其他神经网络包不支持 AMD GPU。原因是 NVidia 投资了神经网络块 (CuDNN) 的快速免费实现,GPU 神经网络的所有快速实现都依赖于 (Torch/Theano/TF),而 AMD 似乎并不关心这个市场。
最近,谷歌宣布他们将购买 AMD GPU 用于他们的数据中心,大概也用于机器学习应用程序。如果没有更通用地支持 gpus 的路线图,那么这样的举动是没有意义的。
在大多数平台(目前是 Mac/Win/Linux)上,您可以在 PlaidML 之上运行 Keras。 PlaidML 是开源的,包括可在大多数 GPU 上运行的 cuDNN 替代方案:github.com/plaidml/plaidml
在 Linux 上安装 Opencl 的简单方法gist.github.com/kytulendu/3351b5d0b4f947e19df36b1ea3c95cbe

H
Hugh Perkins

我正在 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 设备编译它。这是一个非常通用的目标,也是一个非常通用的编译器

cuda-on-cl 目标能够获取任何 NVIDIA® CUDA™ 源代码,并为 OpenCL 1.2 设备编译它。这是一个非常通用的目标,也是一个非常通用的编译器

目前,实现了以下功能:每个元素的操作,使用 Eigen over OpenCL,(更多信息在 https://bitbucket.org/hughperkins/eigen/src/eigen-cl/unsupported/test/cuda-on-cl /?at=eigen-cl ) blas / 矩阵乘法,使用 Cedric Nugteren 的 CLBlast https://github.com/cnugteren/CLBlast 减少,argmin,argmax,再次使用 Eigen,根据之前的信息和链接学习,培训师,梯度.至少,StochasticGradientDescent 训练器正在工作,其他的都已提交,但尚未测试

每个元素的操作,使用 Eigen over OpenCL,(更多信息在 https://bitbucket.org/hughperkins/eigen/src/eigen-cl/unsupported/test/cuda-on-cl/?at=eigen-cl )

blas / 矩阵乘法,使用 Cedric Nugteren 的 CLBlast https://github.com/cnugteren/CLBlast

减少,argmin,argmax,再次使用 Eigen,根据之前的信息和链接

学习,培训师,梯度。至少,StochasticGradientDescent 训练器正在工作,其他的都已提交,但尚未测试

它是在 Ubuntu 16.04(使用 Intel HD5500 和 NVIDIA GPU)和 Mac Sierra(使用 Intel HD 530 和 Radeon Pro 450)上开发的

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


我想知道:仅构建对 Opencl 1.2 的支持的理由是什么。 Opencl 2.0 中似乎有许多可用于深度学习的功能:developer.amd.com/tools-and-sdks/opencl-zone/…
有没有人没有专门的 GPU 测试过,当使用集成 GPU(Intel 或 AMD)而不是仅使用 CPU 时,张量流的速度会提高多少?
@Thonhale 的基本原理是:瞄准可移植性。例如,Mac Sierra Radeon Pro 450 驱动程序仅支持 OpenCL 1.2,英特尔 HD 530 驱动程序也支持同一平台。 (这基本上是一个全新的 Mac Book Pro)
T
Thornhale

这篇文章的最初问题是:如何让 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/... - //张量流/编译器/...

更新:在我的设置上执行此操作需要很长时间。需要很长时间的部分是所有正在运行的测试。我不确定这意味着什么,但我的很多测试都在 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(带 SSE + AVX):~ 1100 s/epoch

Tensorflow (w/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。


我很想看到 AMD 采取行动——我个人拥有所有 AMD 卡——但我们被告知的时间太长了(并不是说 AMD 可以控制 TensorFlow 等是否实现它)。 AMD 是否有任何您偶然知道的“问题跟踪器”等价物?
你知道自从你写下这个答案后场景发生了怎样的变化?
T
Talha Junaid

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


我一直使用 plaidML,并根据 GPU 进行了一些基准测试。它在我所有的 Mac 上都运行良好。
这三个命令在每个脚本的顶部起作用:import plaidml.keras plaidml.keras.import_backend() from keras import backend as K
我收到一个错误,已通过 github.com/plaidml/plaidml/issues/1027#issuecomment-617032218 修复
S
Selly

这是一个老问题,但自从我过去几周试图自己解决这个问题以来:

OpenCL 对 Theano 的支持屡试不爽。他们添加了一个似乎仍然有问题的 libgpuarray 后端(即,该进程在 GPU 上运行,但答案是错误的——比如 MNIST 上 8% 的准确度,而 DL 模型在 CPU 或 nVidia 上的准确度高达 95% 以上CUDA)。此外,由于 nVidia 堆栈上约 50-80% 的性能提升现在来自 CUDNN 库,因此 OpenCL 将被遗忘。 (见下文!):) ROCM 看起来很酷,但是文档(甚至是关于 ROCM 是什么/它做什么的明确声明)很难理解。他们正在尽力而为,但他们落后了 4 年以上。它不适用于 RX550(在撰写本文时)。所以不要浪费你的时间(这是一周中的一周去的地方:))。起初,ROCM 似乎是驱动程序集的新成员(取代 AMDGPU-Pro 或增强它),但实际上它是一个内核模块和一组库,基本上取代了 AMDGPU-Pro。 (认为这相当于 Nvidia-381 驱动程序 + CUDA 某种库)。 https://rocm.github.io/dl.html(老实说,我还没有测试过性能或试图让它与更新的 Mesa 驱动程序一起工作。我会在某个时候这样做。将 MiOpen 添加到 ROCM,然后本质上是 CUDNN。他们也有一些非常清晰的迁移指南。但更好的是。他们创建了“HIP”,这是一个从 CUDA/CUDNN 到 MiOpen 的自动翻译器。它似乎工作得很好,因为他们将 API 直接排列为可翻译的。有些概念不是完美的地图,但总的来说它看起来不错。

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


欢迎提供指向解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及它存在的原因,然后引用您链接的页面中最相关的部分以防目标页面不可用。 Answers that are little more than a link may be deleted.
仅供参考,您链接的页面不再存在,并重定向到其他不完全包含答案的地方。
让我回顾下一周的最新状态以更新答案。
n
nemo

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

Most 的操作已经实现,主要是调整和优化给定的操作。

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

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


在这方面,过去 6 个月有什么变化吗?
Theano 已停产
@ErikAigner 正式。错误仍然得到修复,社区能够做出贡献。
u
user1917768

AMD ROCm 堆栈支持 Tensorflow 1.3:

https://github.com/ROCmSoftwarePlatform/tensorflow

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

https://hub.docker.com/r/rocm/tensorflow/


K
Kruft Industries

如果您可以访问其他 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 支持选项。如果 opencl 实现有效,即使您没有 gfx8+ 或 Polaris gpu,我也会说调查链接。这是一个冗长的过程,但是遵循一个写得很好的指令一到三个小时(取决于硬件)并不会太浪费时间。


A
Ayaan

从技术上讲,如果您使用 OpenCL 之类的东西,您可以,但 Nvidia 的 CUDA 更好,而且 OpenCL 需要其他可能有效也可能无效的步骤。如果您有 AMD gpu,我建议您使用 Google Colab 之类的东西,他们提供免费的 Nvidia GPU,您可以在编码时使用。