Tensorflow: OpenCL 支持

创建于 2015-11-09  ·  541评论  ·  资料来源: tensorflow/tensorflow

我了解 TensorFlow 仅支持 CUDA。 添加 OpenCL 支持需要做什么?

contributions welcome

最有用的评论

奇怪的是,谷歌放弃了开放的 OpenCL 来支持专有的 CUDA。
im-just-saying

所有541条评论

奇怪的是,谷歌放弃了开放的 OpenCL 来支持专有的 CUDA。
im-just-saying

至少, Eigen库必须支持 OpenCL。

:+1:

:+1:

:+1:

竖起大拇指等等。

我将对使用 OpenCL 扩展 Tensor Flow 感兴趣。 因为我们已经发布了 OpenCL caffe。 https://github.com/amd/OpenCL-caffe。 希望它可以以轻巧的方式集成吗? 有人有兴趣在这方面合作吗?

@gujunli很高兴在这里看到 AMD。 /cc @naibaf7 @lunochod

会很好。

:+1:

/cc @lukeiwanski用于 Eigen/OpenCL/SYCL

@gujunli当然有兴趣做出贡献。 请让我知道你打算什么时候开始。

大家好,

在 Codeplay,我们正在研究使用 SYCL(Op​​enCL 之上的现代 C++ 层)在 GPU 上运行的 Eigen 的张量。 从我们目前收集到的信息来看,GPU 张量设计与 CUDA 非常紧密地结合在一起,它需要针对另一种编程模型进行接口更改,特别是 SYCL 和 OpenCL 1.2 版本。

如果有人有兴趣深入挖掘/提供帮助,我们肯定有兴趣做出贡献。

谢谢,
卢克

@lukeiwanski感谢您的反馈。 我认为@benoitsteiner在 eigen 的张量扩展部分工作。

:+1: 如果有人制定计划,将工作划分为任务等,我可以帮助编写一些 OpenCL/SYCL。我建议使用 Boost.Compute 作为 OpenCL 的包装器(它使运行内核、测试、模板变得更容易)。

+1

:+1:

大家好,

为了让您了解最新情况,我们仍在研究如何更改 Eigen 接口以更好地适应 SYCL/OpenCL 1.2 编程模型。
一旦我们提出了针对异构编程模型(不仅是 OpenCL / SYCL)的合理方法,我们将创建一个提案。

谢谢,
卢克

请让我更新。 我为 AMD 开发了 opencl-caffe。 我也在看
张量流。

谢谢。
君路
2015 年 12 月 8 日上午 10:19,“Luke Iwanski” [email protected]写道:

大家好,

只是为了让您及时了解,我们仍在研究如何更改
特征接口更好地适应 SYCL/OpenCL 1.2 编程模型。
一旦我们想出一个合理的方法,我们将创建一个提案。

谢谢,
卢克


直接回复此邮件或在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -162967662
.

/cc @ptillet @gongzg英特尔对此有兴趣吗? 我真的希望我们不要像在 Caffe 中那样将 OPENCL 碎片化,我们有一个 AMD 分支、英特尔未合并的 PR、另一个半非官方的 AMD PR 和一个长期的用户 PR(加上两个旧的废弃 Opencl 工作)。 如果有人对历史感兴趣,可以查看https://github.com/BVLC/caffe/pull/2610评论。

@bhack我们确实对此感兴趣。 谢谢你让我知道。 如果有关于 Eigen 的 OpenCL/SYCL 实施的建议,我们将看到我们可以从英特尔方面做些什么。

:+1:

https://github.com/ptillet/isaac上的一个有趣的倡议,如果我们在这里依赖 Eigen 张量扩展。

我也想投稿。 @benoitsteiner你能组织一下吗?

这包含在路线图中,但也标记为贡献,因此方向/引导可能非常有用。

我可以为组织它做出贡献。 谁负责 OpenCL 支持
现在张量流?

非常感谢。
军力

2016 年 1 月 19 日星期二上午 7:50,bhack [email protected]写道:

这包含在路线图中,但也标记为贡献,因此
方向/引导可能非常有用。


直接回复此邮件或在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -172894538
.


顾俊丽--谷俊丽
协调科学实验室
伊利诺伊大学厄巴纳-香槟分校


我只是假设 Benoit 是因为他自己分配了这个功能,但我认为你已经明白了 Junli! 也许从感兴趣的各方的电子邮件或论坛线程开始?

@benoitsteiner更了解可能未展示的相关方
在这个线程(或这个问题)中。 我会等他协调
确保我们避免重复工作。

2016 年 1 月 19 日星期二上午 11:42 Dan McLaughlin [email protected]
写道:

我只是假设 Benoit 是因为他自己分配了这个功能,但我认为
君丽,你懂的! 也许从电子邮件或论坛主题开始
利益相关方?


直接回复此邮件或在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -172963537
.

我很感兴趣。 有路线图吗?

2016 年 1 月 19 日上午 11:46,Martin Wicke [email protected]写道:

@benoitsteiner更了解可能未展示的相关方
在这个线程(或这个问题)中。 我会等他协调
确保我们避免重复工作。

2016 年 1 月 19 日星期二上午 11:42 Dan McLaughlin [email protected]
写道:

我只是假设 Benoit 是因为他自己分配了这个功能,但我认为
君丽,你懂的! 也许从电子邮件或论坛主题开始
利益相关方?


直接回复此邮件或在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -172963537
.


直接回复此邮件或在 GitHub 上查看。

是否有 Tensorflow 依赖的 CUDA 依赖库列表?

这将有助于了解我们是否可以立即使用 OpenCL 替代方案。

@hsaputra
有 clFFT、clBLAS(或者 ViennaCL)。 随机数生成器有点棘手(没有 curand),要么使用 CPU 生成器并传输到 GPU,要么使用另一个现有的 RNG 内核。

最大的陷阱将再次是高效的卷积实现(类似于 cuDNN)。

这里有关于此类问题的经验:
https://github.com/BVLC/caffe/pull/2610
https://github.com/BVLC/caffe/pull/2195
https://github.com/amd/OpenCL-caffe

Tensorflow 使用上游到 Eigen 的张量扩展。 所以我认为需要对 Eigen 提供 Opencl/Sycl 支持。 看到这个线程

谢谢@naibaf7。 是的,我认为目前 OpenCL 的 cuDNN 没有可行的替代方案。

创建网站http://opencl.org是为了支持这些开源移植项目! 我们目前正在网站上安装所有必要的工具,并在https://github.com/OpenCL/上为存储库提供空间 - 稍后我们将添加构建服务器来测试多种类型的硬件,并可以提供我们在以下方面的专业知识如何编写在众多硬件上全速运行的代码。

下周我们将启动 GEGL 移植计划,但我们也很高兴为您提供支持。

来自该线程的@bhack ,这里似乎@lukeiwanski正在调查它。 我认为我们有足够的人愿意为此工作,我们只需要@benoitsteiner@lukeiwanski@gujunli进行协调。 Benoit 一直很安静,也许他在度假。

我很乐意为这项倡议做出贡献。

大家好,

我们将协调将 Eigen 的张量模块移植到 OpenCL 的 SYCL 的工作,因为我们已经有一些主要工作的东西,但还没有准备好进行审查。

我们赞成这种方法,因为它将减少对代码库的入侵。 SYCL 支持 eigen 已经使用的单源 C++ 模板模型。

路线图设计正在进行中,所以现在应该不会太长。

谢谢,
卢克

@lukeiwanski您在工作或与上游有联系吗? 你认为在 Eigen 上游会被接受吗?

+1

好消息@lukeiwanski ,让我们知道您需要的任何帮助。

我猜你正在使用你自己的 SYCL 实现——开发人员/研究人员可以使用吗? 在哪些平台上?

考虑到与 Eigen 相关的模板元编程的数量, @lukeiwanski SYCL 似乎是正确的方法。 我是一位经验丰富的 c++ 开发人员,具有通过开发自己的神经网络和线性代数库获得的 OpenCL 经验。 我很乐意为这项工作提供帮助,并开始使用 SYCL 进行开发。

@bhack我们正在与@benoitsteiner联系,但我们会在投入过多精力之前与上游维护者讨论我们的提案。

@ DanMcLaughlin ,@ville-k 我们正在开发 SYCL 的实现,ComputeCpp (https://www.codeplay.com/products/computecpp)。 如需更多信息,您能否通过我个人资料上的电子邮件地址与我联系?

@lukeiwanski是否有关于计划的更新/估计?

+1。
我的笔记本电脑中有一个 AMD GPU 和一个 Intel GPU。 我认为两者都有 OpenCL 驱动程序,而且 AMD 的支持似乎要好得多。 我会有更高的性能,因为我有 2 个 OpenCL 设备。 我希望您可以使用 OpenCL 设备进行扩展。

大家好,

感谢您的关注!
在这一点上,我们正在设置我们的测试基础设施,以确保我们所做的任何事情都不会引入回归。
我们与@benoitsteiner保持联系,以确保我们与他迄今为止所做的事情保持同步。

我们仍在为集成流程编制路线图——应该在几周内完成,因为有几个业务细节需要澄清。

我们的目标是在今年年底之前通过 Eigen 将 OpenCL 引入 TensorFlow。

谢谢,

感兴趣的。 很想贡献。

好的,实际上这似乎是 Codeplay 的一种努力,与 Google 内部进行了某种同步。 AMD 和 Intel 用户在这里扮演什么角色?

/cc @keryell如果您对 SYCL/FPGA 世界对此感兴趣

我很抱歉最近没有为这个讨论做出更多贡献,在过去的两周里,我的盘子已经满了。

我将在 TensorFlow 方面协调 OpenCL 工作。 我们目前的想法是:

  • TensorFlow 依赖于 c++11 并采取了“单一来源”的方法,因此 SYCL 似乎非常适合。
  • 我们在内部没有很多 OpenCL 经验,因此我们正在与 Codeplay 密切合作以弥合这一差距。 特别是,Codeplay 目前正在努力为 Eigen 张量库添加对 SYCL 的支持。
  • TensorFlow 依靠 cuDNN 库来计算 NVidia GPU 上的卷积。 如果有人有兴趣贡献 OpenCL 等价物,我们很乐意提供帮助。

为了帮助组织这项工作,我创建了一个邮件列表: [email protected]

@bhack肯定我对 FPGA 上的高端 C++ 感兴趣 :-)
TensorFlow 听起来也是 triSYCL 的一个很好的验证用例。
顺便说一句,如果这里有人正在寻找一些关于这个主题的实习,我有一些职位。 如果我相信他们的网站,看起来 Codeplay 也在寻找一些人。

我对@karlrupp@hughperkins 的意见非常感兴趣。 我希望他们想加入关于新谷歌小组的讨论。

@benoitsteiner感谢您的更新。 如果@KhronosGroup中的所有相关合作伙伴(Google、Nvidia、Amd、Intel、Codeplay、Xilinx 等)都能够以标准化的方式推广类似 cudnn 的 API,那就太好了。 一种 Khronos openvx计算机视觉标准化工作,但用于深度学习。

@bhack哪个新的 Google 群组?

除此之外,OpenCL 和 CUDA 是完全不同的编程方法。 CUDA 的工作方式是因为一家公司可以完全控制一切,所以它可以嵌入二进制 blob,谁知道最终可执行文件中的内容。 这不能用 OpenCL 完成,除非沿着 SyCL 路径(我有我的担忧......)并且 SyCL 编译器供应商可以完全控制所有可能的目标架构(在实践中不太可能或不可能)。 总的来说,我的观点是,一个好的支持 OpenCL 的库需要的不仅仅是这里和那里的一些调整。 可能不是你想听到的,但你征求我的意见:-)

@karlrupp请参阅 google 组末尾的https://github.com/tensorflow/tensorflow/issues/22#issuecomment -176406416。
我询问您的意见,因为您在使用 ViennaCL 连接具有多个后端(CPU、GPU、MIC)的代数库方面拥有丰富的经验。 Tensorflow 依赖于 Eigein 库及其由 Google 上游贡献的新张量扩展(但仅限于 CUDA 后端)。 我认为在这几年的发展中,他们并没有经历太多你在 ViennaCL 中遇到的所有陷阱。

@bhack我们目前正在本周在西雅图举行面对面会议,但我当然不能说我们是否在谈论 DNN 库...... :-)

@keryell尝试在西雅图推动事业;)

@karlrupp你是对的,OpenCL 和 CUDA 是太不同的编程方法。 从软件工程的角度来看,在 CUDA 和 OpenMP 4.5 中发现的单源方面非常强大。 这就是为真正的 C++ 程序员提供这个 SYCL 标准的原因。 SYCL 可以看作是 CUDA 上没有任何语言扩展和一些 OpenMP 方面(任务)的类固醇。 典型的 SYCL 设备编译器预计会生成 SPIR-V 内核。

您对可移植性的担忧与 SPIR-V 标准(Vulkan 和 OpenCL 世界中的 nVidia PTX/AMDIL/... 的便携式等效物)相比,该标准在 OpenCL 2.1 和 Vulkan 中是强制接受的。 所以美妙之处在于,如果你有一个生成 SPIR-V 的前端,你不需要对运行硬件的细节有特别的了解。 LLVM IR 和 SPIR-V 之间有一个 Khronos 开源双向翻译器,因此它开辟了相当新的领域。

@keryell我同意 SPIR-V 是向前迈出的一步。 但是,它并没有解决穷举抖动的所有问题。

您不需要特别了解硬件的详细信息即可运行

这是来自 OpenCL 1.0 营销的复制粘贴,声称完全相同? 如果您的目标是获得最佳性能,您将_总是_需要深入了解底层硬件的细节。 在快速张量收缩的情况下尤其如此。

...正如@scott-gray 用霓虹灯展示的那样

@karlrupp

这是来自 OpenCL 1.0 营销的复制粘贴,声称完全相同?

哈哈。 :-)

如果您的目标是获得最佳性能,您将始终需要深入了解底层硬件的细节。 在快速张量收缩的情况下尤其如此。

当然,但在进行二阶优化之前,让整个模板化 C++ 代码的大部分以某种加速方式运行是很有用的。

对于优化,您可以将优化的二进制内核 à la NervanaSys 缝合,或者,由于 SYCL 是纯 C++,您可以在其中使用 asm("...") 和大量 #ifdef 来测试目标架构。 :-) 也就是说,SPIR-V 本身是可扩展的,我不明白为什么我们不能在某些时候将内联 VHDL 或 Verilog 放入其中。 :-)

但更具体地说,最近引入的子组操作应该有助于以可移植的方式实现良好的性能,并且使用简单的内置 ad-hoc 函数可能会有所帮助。

C++ 增加了有趣的元编程特性,允许替换大多数使用的代码生成器,例如 clBLAS 或其他框架,以生成更适合 X 或 Y 硬件的代码。

c++17中的N4355也可以迟早进入游戏

@karlrupp@bhack张量流方法是依赖硬件抽象(张量模块)来完成典型神经网络所需的大部分操作,同时依赖专门的库(例如 cudnn)来完成少数操作非常关键的性能明智。 硬件抽象使我们能够一次实现大多数 TensorFlow 操作,并让它们在性能足够好的加速器上运行。

@bhack是的,我喜欢多维数组。 同样在我们感兴趣的领域中,C++ 委员会中的 SG14 试图让所有对这些问题感兴趣人都融入标准。
https://groups.google.com/a/isocpp.org/forum/#!forum/sg14
当然,SYCL 正在讨论中。 :-)

@benoitsteiner主要在 cudnn 上进行池化和卷积。 我认为,如果每个供应商都将使用自己的硬件为该操作使用自己的二进制程序集来生产 API,那么这将不是一种可扩展的方法。 这就是为什么我认为一些对性能至关重要的 API 调用以某种方式标准化会更好。

@keryell在新的 SG14 c++ 中,特别是在向量/SIMD 调用议程中,矩阵/张量确实很有趣。 但似乎没有人谈论卷积、池化和其他有用的“稳定”深度学习接口。 在我看来,在这个特定的标准化子组中,有来自 Nvidia、Intel、Amd、CodePlay 等的人。但如果在其他组中,也没有来自 Google。

:+1:

@bhack是的,SG14 中还没有机器学习风格的提案。 但是参与是开放的,所以你可以发送一些建议。 :-) 但也许 SG6(数字主题)更相关。 我认为他们还没有自己的邮件列表/论坛。

@gujunli OpenCL Caffe 是否在 Android 上运行? 很抱歉在这里问这个问题,但我没有找到其他地方可以问这个问题:) 使用在 Android 设备上运行的深度学习库会很棒_并且_可以使用 GPU,但目前似乎没有。 (如果我错了纠正我!)

@krikru
官方(但实验性的)OpenCL Caffe 分支可以在 Android GPU 上运行,但目前的性能远非最佳。 请参阅https://github.com/sh1r0/caffe-android-lib/issues/23https://github.com/BVLC/caffe/tree/opencl。

cudnn 的真正替代方案可能是扩展OpenVx 标准对象,支持 Tensor、NdConvolution、NdPooling 运算符和(可能)其他一些可以被认为是可标准化的运算符。
cudnn 团队还需要对他们将在每个版本中引入的新 API 和运算符做出一些选择。 当然,标准不能像 cudnn 发布那样快,但我认为一些操作和对象有足够的“引用历史”来标准化。

@hughperkins目前,我还没有尝试过任何深度学习库; 我只是在做一些侦察,看看我可以使用哪个库。 您是否在 Android 上尝试过 cltorch 和 DeepCL? 我只是假设 cltorch 确实可以在 Android 上运行,因为有一个专门用于 Android 的 Torch 实现。 如果已经有一个既可以在 Android 上运行又可以使用 OpenCL 的实现,你为什么会有这样的实现,对吧? 但也许我应该知道得更好。

@hughperkins出于某种原因,我认为torch-android是Android 的官方Torch 实现,这意味着没有其他Torch 实现(至少不是官方的)可能在Android 上顺利运行,包括cltorch。 我不知道为什么我会这么想,这当然没有任何意义。

嗯... Soumith 有点协调火炬的发展。 他在 Facebook AI Research 工作。 所以,由于 torch-android repo 属于 Soumith,我会说它非常接近官方。 但由于某种原因,它可能不是核心的一部分。 我想您可以在该存储库或https://groups.google.com/forum/#!forum/torch7中将问题作为问题提出,实际上,因为 Soumith 是处理https 中请求的主要人员: //groups.google.com/forum/#!forum/torch7 ,我认为您可能想在那里发布您的问题。

这意味着没有其他 Torch 实现(至少不是官方的)可能在 Android 上顺利运行,包括 cltorch

请注意,cltorch 不是torch 的实现。 它是一个插件,它提供了 OpenCL。 你需要两者。

请注意,cltorch 不是torch 的实现。 它是一个插件,它提供了 OpenCL。 你需要两者。

啊,谢谢你的澄清。

@naibaf7除了名称之外, OpenCL Caffe分支和 AMD 的OpenCL Caffe实现有什么共同点吗? 您是否将两者进行了比较,或者您知道性能是否有任何差异? 您写道,OpenCL 分支远未达到最佳性能。 这是什么意思,为了改进它需要什么? 在 Android 上试用它会很有趣。

我们跑题了

@bhack是的,很抱歉劫持了这个帖子。 我只是不知道在哪里问这个问题。

@krikru
请在 Caffe 分支上提出有关它的问题,用 Android 和 OpenCL 标记它。 然后我们可以进一步讨论这个问题。 谢谢。

@keryell看来3 月份的下一次 f2f SG14 会议将由 Google 主持。 那里会有任何张量流吗?

/cc @jfbastien

也许@benoitsteiner可以过来,因为他是本地人。
但在此活动之前,月底将在佛罗里达州杰克逊维尔举行完整的 C++ F2F。
https://isocpp.org/files/papers/N4568.pdf
不幸的是,我将无法参加其中的任何一个。

我不知道 CppCon 2015 talk C++ Multi-dimensional Arrays for Computational Physics and Applied Mathematics 是否产生了一些论文跟进。

+1

@bhack感谢您指出关于多维数组的演讲。 它很有趣并解决了真正的问题,但看起来过于临时,无法在 C++ 中按原样批准。 我个人使用 Boost.MultiArray,而且我对 Boost.MultiArray 的完善版本更有信心。

WG21 也有一些论文。 正如您所见,Google 的@jfbastien在 WG21 上进行了一些活动,并帮助在 3 月份在 Google 举办了 SG14 f2f 会议。

@bhack @keryell我认为值得将此讨论带到SG14 邮件列表,因为细节与 OpenCL / tensorflow 无关。

是的,这里的所有细节可能不再那么严格了。 除了 Eigen/sycl 支持是否有 cudnn 调用的计划?

+1 非常有趣的话题。 希望它快点到来。

这个线程非常有趣。 我一直在尝试让 caffe 在 android 上工作。 结果似乎令人惊讶:使用 Mali gpu 运行的 caffe 似乎比 cpu 慢 2-3 倍,但能效提高约 4-5 倍。 该测试在 Galaxy S6(Mali T760,Peak Performance 200 GFlops)上运行。

由于 GEMM 是 caffe 中卷积的核心,所以我决定在 Android 上分析它的性能。 看来 ViennaCL 的效率不如一些简单的内核。 现在,对于大型矩阵 (2k x 2k),我能够让 GPU 运行得与 CPU 一样快。 这仍然是违反直觉的,因为通常我们希望 GPU 更快。

看:
https://github.com/strin/mocha-profile

内核实现可以在这里找到:

GEMM 的 OpenCL 内核: https ://github.com/strin/gemm-android

有什么想法吗?

@strin您是否已经关注了此线程https://community.arm.com/thread/4935?

@bhack感谢分享。 这个线程看起来很有趣。 我尝试按照建议关闭 DVFS,但在 ViennaCL 中没有看到 sgemm 的显着性能。

+1

@strin您是否尝试过 MALI SDK 中的最后一个 sgemm 版本?

这将对策略产生影响:http: //lists.llvm.org/pipermail/llvm-dev/2016-March/096576.html?
编辑:
“StreamExecutor 目前被用作谷歌绝大多数内部 GPGPU 应用程序的运行时,它的快照包含在开源 TensorFlow_ 项目中,用作 GPGPU 运行时。”

+1

希望从事它的人能够在 tensorflow 接近 1.0 时克服 CUDNN 替代问题

@martinwicke为什么这个问题被关闭了?

我不认为你的提交解决了这个问题。

您不能总是在不同的存储库中使用相同的提交评论;) https://github.com/tensorflow/skflow/issues/22

哦 GitHub

@vrv既然您已经超级通知我们,您可以就流执行器策略提供一些反馈吗? ;)

我只是将一切归咎于 GitHub,包括缺乏 OpenCL 支持。 ;)

@benoitsteiner或许可以发表更多评论。 我真的不知道您所说的“流执行者”策略是什么意思。 我们目前使用一个版本的流执行器和 CuDNN 和 Eigen,它们都可以很好地协同工作,所以我不确定 OpenCL 方面的计划有什么变化

我是说:
“什么是 StreamExecutor?
=========================
StreamExecutor是围绕CUDAOpenCL主机端编程模型(运行时)的统一包装器。 它允许主机代码以具有相同功能的数据并行内核的 CUDA 或 OpenCL 设备为目标。”

罐头操作
===================
StreamExecutor 为常见的数据并行操作提供了几个预定义的内核。
支持的操作类别是:

  • BLAS:基本线性代数子程序,
  • DNN:深度神经网络,
  • FFT:快速傅里叶变换,以及
  • RNG:随机数生成。

@keryell嗨,我也有兴趣使用 Xilinx C++ 或 OpenCL 等高级编程语言在 FPGA 上实现 TensorFlow。 如果你有一些计划,我很乐意贡献。

@henline你能解释一下 StreamExecutor 在 Opencl 和相关 Canned 上的作用吗?
TensorFlow 的操作。 我仍然看不到这将如何与 Eigen 和 cudnn 上的 SyCL 计划集成(替换?)

:+1: 我也想为此做出贡献。

@bhack StreamExecutor 提供与 CUDA 运行时和一些 CUDA 库(例如 cublas 或 cudnn)等效的功能。 但是,您仍然需要编写您的 GPU 内核,这就是我们使用 Eigen 的目的。

@benoitsteiner那么是否仍然需要编写两个内核,一个用于 CUDA,一个用于 Opencl?

@benoitsteiner那么您内部是否还有一个 tensorflow/tensorflow/stream_executor/opencl/ 对应项? “罐头操作员”呢?

@bhack Eigen 使您能够编写一个表达式来描述您想要执行一次的计算,并自动生成一个内核(我们称之为评估器)来评估 CPU 上的表达式和另一个内核来评估 CUDA 设备上的表达式。 一旦我们在 Eigen 中支持 OpenCL(我们即将接近),也可以自动生成 OpenCL 内核。
对于一些对性能至关重要的 TensorFlow 操作(例如卷积),我们使用手动优化的内核和/或第三方库。 在这些情况下,我们需要对这些操作进行良好的 OpenCL 实现。

:+1:

是否有计划在https://bitbucket.org/benoitsteiner/eigen-opencl 中推送更多代码? sycl 编译器呢? 似乎没有发布开源 GPU 目标实现。

@bhack @benoitsteiner
我很快就会为 Caffe 上的 OpenCL 发布一个 cuDNN 替代品(只有卷积部分,因为它是最关键的性能和内存)。 也许它也可以用于 Tensorflow 端口。

@bhack :Codeplay 在 opencl 方面取得了很大进展。 请继续关注在接下来的几周内对https://bitbucket.org/benoitsteiner/eigen-opencl的大力推动。

@naibaf7 :卷积运算的快速实现在 TensorFlow 中将非常有帮助。 期待它。

@benoitsteiner我如何才能简单地删除 cuda 实现? 因为“#ifdef GOOGLE_CUDA”太复杂了。 它有时意味着 CUDA,有时意味着 GPU。

由于此问题已进入路线图(请参阅_Platforms_):我们是否大致了解 OpenCL 支持何时会影响 TensorFlow? 喜欢版本 0.9 / 1.0? 2016 年第三季度/第四季度? 还是 2017 年更现实?

@benoitsteiner eigen-opencl https://bitbucket.org/benoitsteiner/eigen-opencl是否准备好支持 opencl 张量流开发?

tensorflow 是否仅依赖于 Eigen 张量或是否存在 Eigen 的任何其他依赖项?

@NEELMCW Codeplay 刚刚发布了对 OpenCL 到特征张量的部分支持。 该代码可在此bitbucket 存储库中找到。 在大多数情况下,TensorFlow 依赖于特征张量。 线性代数运算对 Eigen 有额外的依赖性,但我们不必提供这些运算的 OpenCL 兼容实现(至少最初不是)。 因此,我们可以开始在 TensorFlow 中支持 OpenCL。

如果您有兴趣贡献,我已开始跟踪此电子表格中需要完成的工作

@benoitsteiner我是 C++11 OpenCL BLAS 库 (https://github.com/CNugteren/CLBlast) 的作者,目前正在那里实现半精度支持。 我很高兴为本项目的 BLAS/GEMM 部分做出贡献和/或修改 CLBlast 以更好地满足您的需求。

@CNugteren
CLBlast 现在也可以在 OpenCL-Caffe 中使用,你看到了吗? :)
您是否也有机会查看 libDNN 卷积?

@naibaf7我看到了,是的! :) 到目前为止我还没有看过 libDNN,但我不确定你的确切意思。 我假设卷积是使用 GEMM 实现的?

@CNugteren
是的,我只是认为如果您可以查看它并可能对 libdnn 提供一些改进或调整提示会很好。
(https://github.com/naibaf7/caffe/blob/master/src/caffe/greentea/libdnn.cpp)。
它正在使用 GEMM,但是是隐式的(不是通过 BLAS,只有工作组级别的小型 GEMM),因此可以实现更高级别的并行性,并且不需要中间缓冲区(将数据展开到 GEMM 方案中)。

大家好,

@benoitsteiner感谢您提及我们的推动! 希望它会有用!

要编译此代码,您需要一个 SYCL 编译器。 目前,唯一支持的编译器是 Codeplay 的 ComputeCpp,可通过 Codeplay 的评估程序获得。 ComputeCpp 将在 2016 年晚些时候作为公开测试版免费提供,然后在 2017 年发布免费版本(ComputeCpp 社区版)。这将允许任何人在 OpenCL 设备上编译和开发 TensorFlow,例如 AMD 或英特尔 GPU和 CPU。

顺便提一句。 这个问题不应该有 OpenCL 标签吗? :)

谢谢,
卢克

我真的希望也可以使用开源工具进行编译。 @keryell你的新Opencl 分支进展如何

@bhack很高兴看看它是否可以首先在 CPU OpenMP 主机设备模式下与 triSYCL 一起使用。 但是我现在没有进入 TensorFlow/Eigen 构建系统的带宽。 :-(如果有人想尝试,请随意。:-)

https://github.com/keryell/triSYCL/commits/opencl应该允许很快在 OpenCL 互操作模式下运行 OpenCL 内核,但不是在我们都梦想的 SYCL 单源模式下,因为我们还没有 Clang/LLVM 大纲从 SYCL 中提取内核。 但是 Khronos 最近开源了来自 AMD 和 Intel 的组件,以支持作为其基础的 OpenCL C++ 2.2 和 SPIR-V。 所以这“只是”一个时间问题......

有人可以估计 Tensorflow 何时能够与 OpenCL(AMD GPU)一起运行吗? 随着时间的推移,性能/可用性曲线是什么样的? 很难将所有过去的信息解析为可操作的硬件购买信息。 :)

提前致谢!

@djan92
不幸的是,我会说给它一年的时间,直到它可以使用。 看起来它将建立在非常先进的库和技术上,其中大多数还没有准备好。
我也只会在完整的工具堆栈作为开源而不是之前可用时立即加入。

@naibaf7

不幸的是,我会说给它一年的时间,直到它可以使用。 看起来它将建立在非常先进的库和技术上,其中大多数还没有准备好。
我也只会在完整的工具堆栈作为开源而不是之前可用时立即加入。

为什么不在等待 SYCL 端口准备好时先实现 CL 版本? 我想这里有不少人愿意提供帮助。 一年听起来太长了。

@djan92
是的,你是对的,#22 已经快 8 个月大了,并且有超过 100 个帖子! 信息可能会被淹没!

有人可以估计 Tensorflow 何时能够与 OpenCL(AMD GPU)一起运行吗?

TensorFlow 使用 Eigen 库进行张量计算(在张量模块中)。 我们已经使用 SYCL(https://bitbucket.org/benoitsteiner/opencl 分支 Codeplay)提交了 OpenCL 1.2 的部分实现。 我们在这项工作中使用 SYCL 的原因是 TensorFlow 的这一部分使用了 C++ 表达式树,这对于 OpenCL 的 SYCL 是可能的,但直接使用 OpenCL C 是不可能的。 TensorFlow 的其他组件,例如卷积或 BLAS,可以直接使用 OpenCL C。

目前,我正在将 ComputeCpp(Codeplay 的 SYCL 编译器)集成到 bazel 构建系统中。 这应该很快就准备好了(按照这个仓库:https://github.com/benoitsteiner/tensorflow-opencl/)。 完成之后,TensorFlow 应该在支持 OpenCL SPIR 的系统(例如 AMD 或 Intel)上使用 ComputeCpp 进行加速。 进一步的工作将继续加速更多的 TensorFlow,以及支持更多的 OpenCL 实现和 triSYCL 开源 SYCL。 SYCL 和 OpenCL 是多供应商、免版税的开放标准,因此可以使用这种方法支持许多平台和设备(不仅仅是 AMD GPU)。

ComputeCpp 社区版编译器将在 2016 年晚些时候免费提供(测试版:完全一致性将于 2017 年初免费发布)。

加速 TensorFlow 的非 C++ 部分(例如 BLAS 和卷积)的工作可以在没有 SYCL 的情况下完成并单独实现。 不同的硬件供应商可能对这些特性有自己的优化库,可以帮助加速。 或者,我们可以将 Eigen 与 C++ 结合使用来实现这些功能。

随着时间的推移,性能/可用性曲线是什么样的?

我们相信业绩将稳步改善。 为了在各种设备上加速,我们需要更有效地管理数据,这就是为什么有一个“托管张量”工作项,以便可以更有效地管理主机和多个设备之间的数据移动。 目前很难预测各种设备的性能将如何变化。 目前,加速的很少,但我们正在准备好基础设施,以便在 TensorFlow 中实现开放标准加速。

@naibaf7

不幸的是,我会说给它一年的时间,直到它可以使用。

基本操作应该很快就到了。 我们在代码中放置了基本的基础设施,以支持基于开放标准的加速。 我们相信,在社区的支持下,一个加速可用的版本将在不到一年的时间内准备好。

我也只会在完整的工具堆栈作为开源而不是之前可用时立即加入。

ComputeCpp 将在 2016 年免费公开提供。开源 triSYCL 支持应该紧随其后。 pocl、Shamrock、Clover、Beignet 已经支持开源 OpenCL。

@robertwgh
如果没有 SYCL,Eigen 中的 C++ 张量代码将不容易移植到 OpenCL C,但还有其他功能可以在 OpenCL C 上很好地工作。看看这个电子表格: https ://docs.google.com/spreadsheets/d

在公开发布之前,我们将提供 ComputeCpp 的评估版。 如果你想要一个,请给我发电子邮件:)

@lukeiwanski太好了,感谢您的更新。 我希望你在不到一年的时间内完成它的功能是正确的。

LLVM中Streamexecutor的又一步

有机会在 rx 480 上获得加速吗?

@benoitsteiner
LibDNN 独立版可用于集成:
https://github.com/naibaf7/libdnn

很高兴阅读此内容正在处理中。 如果 Beignet 2.0 得到完善,那将会有所帮助。 Skylake 和 Iris 现在有很大的潜力。

如果有人想看看,最近在https://github.com/benoitsteiner/tensorflow-opencl/pull/1添加了一个拉取请求。

Imagination(GPU) 的 OpenCL SDK 需要 NDA 才能访问,我们只有共享库。 是否可以基于此库运行 tensorflow?

@alephman
您不需要供应商特定的头文件来构建任何 OpenCL 程序。 尝试来自https://www.khronos.org/registry/cl/api/1.2/cl.hpp的 cl.hpp 和来自任何其他 SDK 的 opencl.h/cl.h。 例如 - 我至少有 3 个 OpenCL 平台,所有这些平台都可以与一个共享的 /usr/include/CL/cl.h 一起使用

我们还不支持在 OpenCL 上运行 TensorFlow。 这是一项正在进行的工作。 目前我们正在研究 AMD GPU。 应遵循 PowerVR 支持。 如果您想为开发做出贡献,您应该直接联系我们(Codeplay)。 如果你想在 PowerVR 上运行 TensorFlow,你应该等待更多的进展。

@inferrna谢谢,它看起来类似于隐藏供应商特定实现的 OpenGL。

@andrewrichards我喜欢贡献开发,如何与您联系?

最简单的是,如果您点击我们页面上的“注册您的兴趣”: https ://www.codeplay.com/products/computecpp
这将使您进入我们的开发人员计划,我们可以在这个@alephman 上一起工作

如果您愿意,您也可以共同贡献以使用开源替代方案进行编译。 见https://github.com/tensorflow/tensorflow/issues/22#issuecomment -221841173

大家好!
很高兴听到 Tensorflow 支持扩展到 Nvidia Cuda 之外。 我想知道你是否也考虑让它在这样的 APU 上工作: http ://www.amd.com/en-us/products/processors/laptop-processors#sectionOne?

@kgocheva
APU 确实支持 CPU 和 GPU 部分的 OpenCL。
当 OpenCL 支持准备就绪时,这应该可以开箱即用。
同时,如果您已经拥有一个 APU 并想尝试另一个 ML 框架,那么 BVLC OpenCL Caffe 已经可以工作了。

@naibaf7感谢您的澄清。 我正在寻找具有成本效益的硬件/软件组合以在本地运行 Tensorflow,并且肯定会遵循 OpenCL 的开发进度。

@hughperkins
是的可能是个问题,但我认为如果 GCLA 确实存在问题,im2col/col2im 和其他卷积实现等部分也可以作为外部 API 插入。 对于此类作品的原始作者来说,这也可能更好。

@hughperkins我们正在努力通过 SYCL for OpenCL 1.2 将 OpenCL 引入 TensorFlow。
请查看https://docs.google.com/spreadsheets/d/1YbHn7dAFPPG_PgTtgCJlWhMGorUPYsF681TsZ4Y4LP0/edit#gid =1625897530 了解“待办事项”和进度。
最近我们为 SYCL https://www.codeplay.com/products/computesuite/computecpp发布了一个名为 ComputeCpp 社区版的编译器。 人们可以试试看!
同样,我们专注于 Eigen 库https://bitbucket.org/benoitsteiner/opencl/branch/ComputeCpp - 使其达到 TensorFlow 的 MNIST 所需的阶段 - 还有一些事情要做。
至于限制,当前的 ComputeCpp CE 版本已经针对英特尔(CPU、GPU)和 AMD(CPU、GPU)进行了测试,我们支持 Ubuntu 14.04 64 位和 CentOS 64 位的平台。
ComptueCpp 可免费下载,可用于商业和开源项目。
因为我们 <3 个开放社区 :)

@lukeiwanski很抱歉在线程中讨论/询问这个问题,但我认为其他人可能也会感兴趣:我知道 Codeplay 对 OpenCL 实现的 SYCL 非常感兴趣,我已经听说其他人对这项工作感兴趣你也是。 例如,我阅读了 Movidius 官员的一些帖子。 但是,我想问一下谷歌对这件事的真正贡献是什么? 由于 Movidius 除了 AMD 等都被列为 Codeplay 的合作伙伴,我可以理解他们鼓励甚至支持 SYCL for OpenCL,但据我所知,Google 不是您的合作伙伴,到目前为止还没有做出贡献?!

不要误会我的意思,我很喜欢你的工作,但巩固你的努力,集中资源,尝试与谷歌合作不是一个好主意吗? 在我看来,很多各方都对 TensorFlow 的 OpenCL 感兴趣,但巨大的潜力没有被利用,因为这些各方不一起发展?!

我可能错了,如果对此进行了充分讨论,请向我道歉,但我仍然不知道谷歌(或其他各方)在此方面进行了任何重大尝试,因此,我仍然不知道社区如何可以通过直接贡献、测试或其他方式帮助或支持(如单身人士)。

@ascenator我们在 Google 已经与 Luke 和他的 Codeplay 同事在这个项目上密切合作了将近 12 个月。 Codeplay 对这项工作的贡献是巨大的,因此我们认为我们应该让他们带头交流与 OpenCL 相关的更新。 这就是为什么你没有从我们这里听到太多关于这个话题的消息:)

现在 ComputeCpp 编译器已经广泛可用,我们计划合并目前已经完成的工作。 但首先,我们想建立一个全面的测试基础设施,以确保我们不会破坏现有代码库的稳定性。

我们欢迎所有对这项工作的贡献,因此,如果您想提供帮助,请随时与我联系。 我们对用于矩阵乘法和卷积的高性能 OpenCL 内核特别感兴趣。 已经提出了几个候选者,但我们还没有开始研究每个候选者的优缺点或如何整合它们。

@benoitsteiner非常感谢您的澄清,并对我的错误信息感到抱歉! 这听起来非常好和有前途! 那我一定会看看ComputeCpp。 我真的很期待 OpenCL 对 TensorFlow 的支持,因为这为机器人技术(这是我正在研究和使用 TensorFlow 进行深度学习应用的领域)提供了很多新的可能性。 我至少会看看早期版本并尝试测试/调试。 我们有一些英特尔芯片和一些等待测试的 ARM CPU;)

@hughperkins ...对不起,但这不是完全偏离主题吗? 我看不出这与 OpenCL TF 有什么关系?

我在这里更感兴趣的是知道是否会对矩阵乘法和卷积核采取调整方法,以及是否会成为 CompiteCpp 的有效开源替代方案,它将产生 SPIR-V。

如果它有帮助,一个更好的 isaac 版本已经出来了: https ://github.com/ptillet/isaac,并且在 Maxwell、Pascal 和 Fiji 上提供了比 clBLAS 和 cuBLAS 显着的加速。 还提供比 Tensorflow 更快(输入感知)的内核,用于一维和二维缩减。

@hughperkins似乎您有更多机会为任何 OpenCL 设备编写 CUDA 编译器,而不是 CUDA-OpenCL 翻译器。

@hughperkins也许 OpenCL 2.0 的 SVM 功能可以解决指针问题? 由于除了 Nvidia(AMD、Intel、ARM、Qualcomm)之外的所有人都开始支持 OpenCL 2.0。 也许这是一个很好的解决方案?

@hughperkins它本身就是一个 blas 实现。 它实现了 clblas 和 cublas 头文件中的一些符号,因此无需重新编译和代码修改。 有必要的。 我还可以为 clblast.h 实现一些符号,因为它使用不同的标头。 Isaac 的一些优点是:

  • 完全动态的,因此它可以使用/同时使用 CUDA 或 OpenCL 而无需重新编译。
  • Input-aware ,它不会为大型方阵调整内核。 它应该在您可以想到的所有形状上都表现良好,而无需重新调整。
  • C++ API 类似于 numpy/arrayfire。 将元素操作与归约相结合的一些融合

@marty1885
并不真地。 AMD 回到了对 AMDGPU-PRO 驱动程序的 1.2 支持。 可能需要一段时间才能全面支持 2.0。 绝对不是那里的短期解决方案。

  • 是的
  • 如果需要,我可以破解一堆操作的兼容性(例如,将 **MV 转发到 GEMV)。 复杂的支持会很棘手。 双重支持已经存在,但没有针对它调整架构。

@hughperkins

似乎我的代码没有违反任何明显的 OpenCL 规则

是的,简单地传递任何包含指针的 __global 结构(如数组或结构)都是不正确的,因为这些指针可以指向另一个设备的内存(OpenCL 支持多设备范例,其中一个设备无法访问另一个设备的内存)。 但似乎有可能在 IR 级别上克服,无需中间转换为 OpenCL 代码 - 这就是我的假设:)

@benoitsteiner@henline ,来自https://github.com/henline/streamexecutordoc ,它表明 streamexecutor 已经支持 CL 版本的罐装操作(如 DNN,BLAS)开箱即用。 这是否表明谷歌已经为 Tensorflow 准备了 clDNN、clBLAS 实现,但还没有开源?

否则,如果您想保持相同的软件架构,OpenCL 2.0+ 和 SYCL 2.2 支持 SVM。
例如,AMD 和 Intel GPU 支持 OpenCL 2.0+。 在嵌入式世界中,即使使用 OpenCL 1.x,它也经常受到副作用的支持,因为出于成本原因,主机和设备存储器通常是相同的。

@keryell
但最著名的平台,Linux + 新的 AMD GPU(RX 480,即将推出的 Vega)目前仅支持 OpenCL 1.2……谁知道什么时候会改变(我的赌注是一年后)。 用于 OpenCL 2.0 的 Beignet(开源 Linux 英特尔)也仍然是一团糟; 稳定版有1.2。
还要考虑到所有制造 OpenCL 兼容芯片的小公司都几乎不支持 1.2。 所以我猜任何依赖 OpenCL 2.0 的东西在实践中都会看到非常糟糕的适应率。

我认为.. 任何硬件厂商都有消耗 SPIR-V 的紧迫性? 我认为对 Vulkan 的图形/着色器压力可以帮助 Opencl 方面..

@naibaf7是否回到关于 OpenCL 2 的讨论,在某些时候必须交付真实的东西......否则已经有运行 TensorFlow 的 nVidia GPU 和 CUDA...... :-)
但当然,没有 SVM 的 TensorFlow 版本也有一些兴趣。

@keryell您认为 Vulkan SPIR-V 有多少驱动程序(已经具有良好的设备覆盖率)将推动现代 Opencl 版本?

@naibaf7 Khronos 会议将于下周在首尔与 OpenCL 和 Vulkan 人员举行,但讨论不公开。 但这听起来是一个好主意,让每个世界都可以改进另一个世界,并且在某些时候对 TensorFlow 有好处。 :-)

@keryell
是的,我希望他们讨论一些对深度学习有益的东西 :)

恭喜! 一定要检查 HIP 项目,因为他们试图解决同样的问题。 他们选择创建一种称为 HIP 的新语言,它定义了需要手动转换的内容(例如通过检查计算级别来检查双精度支持)。 随着项目的推进,人工翻译的数量会减少。 见: https ://github.com/GPUOpen-ProfessionalCompute-Tools/HIP

我对您的建议是使用 HIP 并修复一些阻碍推进 Tensorflow 或您自己目标的错误,因为您现在已经了解 LLVM 可以做到这一点。 这样您就不必解决他们已经解决的问题。

@hughperkins
无法在此https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/get_started/os_setup.md#create -t​​he-pip-package-and-install 之后使用您的 fork 构建 python 模块

INFO: From Compiling tensorflow/core/kernels/gather_functor_gpu.cu.cc:
gpus/crosstool: -x cuda
gpus/crosstool: using cocl
gpus/crosstool: PATH=/usr/bin:/usr/local/bin /usr/local/bin/cocl -D_FORCE_INLINES -gencode=arch=compute_30,\"code=sm_30,compute_30\"   -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DNDEBUG -DEIGEN_MPL2_ONLY -std=c++11  -I. -Ibazel-out/local_linux-py3-opt/genfiles -Iexternal/bazel_tools -Ibazel-out/local_linux-py3-opt/genfiles/external/bazel_tools -Iexternal/eigen_archive -Ibazel-out/local_linux-py3-opt/genfiles/external/eigen_archive  --compiler-bindir=/usr/bin/gcc -I . -fPIC  -x cu  -O2 -c  -o bazel-out/local_linux-py3-opt/bin/tensorflow/core/kernels/_objs/gather_functor_gpu/tensorflow/core/kernels/gather_functor_gpu.cu.pic.o tensorflow/core/kernels/gather_functor_gpu.cu.cc
dirname: invalid option -- 'O'
Try 'dirname --help' for more information.

我在 ubuntu 16.04 上,目录名来自 coreutils-8.25-2ubuntu2

@hughperkins我认为使用此指令调整存储库上的 TF dockerfile 可以简化其他人的设置。

是的,什么时候会有更实用的东西。 基本上,它是您发布的此说明的完全副本和过去。

我正在使用 ATI 6770M(OpenCL 1.2)在 2015 年末的 MacBook 上尝试在 MacOS 10.10.5 上构建它。

我已经安装了 Xcode 8、Anaconda (Python 3.5) 和 macPorts 等价的 clang+llvm:

而不是 apt-get 行,请执行以下操作:

sudo 端口安装 clang-3.8 llvm-3.8

不要使用 /proc/cpuinfo,而是执行以下操作:

NUM_PROCS=$(system_profiler SPHardwareDataType | grep "内核总数" | cut -d ":" -f 2)

然后修改 Makefile 以使用 macports 并运行 make

perl -pi.bak -e 's|(CLANG)=.+|$1=/opt/local/libexec/llvm-3.8/bin/clag++|' 生成文件
perl -pi -e 's|(LLVM_CONFIG)=.+|$1=/opt/local/bin/llvm-config-mp-3.8|' 生成文件
perl -pi -e 's|(LLVM_INCLUDE)=.+|$1=/opt/local/libexec/llvm-3.8/include|' 生成文件

更新到 Macos OpenCL 目录; 未来:使用 /System/Library/Frameworks/OpenCL.framework/Versions/Current/Headers/cl.h '#ifdef APPLE ' 有条件的

grep -Rl 'include "CL/' * | xargs perl -pi.bak -e 's|include "CL/|include "OpenCL/|g'
使 -j ${NUM_PROCS}

这是据我所知:

$ make -j ${NUM_PROCS}
mkdir -p 构建
mkdir -p 构建
mkdir -p 构建
/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/hostside_opencl_funcs.o -std=c++11 -fPIC -g -O2 -I pwd /include -I pwd /src/EasyCL src/hostside_opencl_funcs.cpp
/opt/local/libexec/llvm-3.8/bin/clang++ -I/usr/lib/llvm-3.8/include -fPIC -fvisibility-inlines-hidden -ffunction-sections -fdata-sections -g -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 -fcxx-exceptions -c -o build/mutations.o -g -I/opt/local/libexec/llvm-3.8/include src/mutations.cpp
/opt/local/libexec/llvm-3.8/bin/clang++ -I/usr/lib/llvm-3.8/include -fPIC -fvisibility-inlines-hidden -ffunction-sections -fdata-sections -g -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 -fcxx-exceptions -c -o build/struct_clone.o -g -I/opt/local/libexec/llvm-3.8/include src/struct_clone.cpp
/opt/local/libexec/llvm-3.8/bin/clang++ -I/usr/lib/llvm-3.8/include -fPIC -fvisibility-inlines-hidden -ffunction-sections -fdata-sections -g -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 -fcxx-exceptions -c -o build/readIR.o -g -I/opt/local/libexec/llvm-3.8/include src/readIR.cpp
在 src/hostside_opencl_funcs.cpp:17 包含的文件中:
/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/include/cocl/cocl.h:91:16:警告:“主机”属性被忽略 [-Wignored-attributes]
属性((host)) 内联 unsigned long long atomicExch(volatile unsigned long long _p, unsigned long long val) {
^
src/hostside_opencl_funcs.cpp:194:33:错误:对成员函数“in”的调用不明确
launchConfiguration.kernel->in(offset);
~~~~~~~~~~~ _ _ _ _
/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:101:15:注意:候选函数
CLKernel in(浮点值);^/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:104:15:注意:候选函数CLKernel *in(int32_t 值);^/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:106:15:注意:候选函数CLKernel *in(int64_t 值);^/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:108:15:注意:候选函数CLKernel *in(uint64_t 值);^/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:110:15:注意:候选函数CLKernel *in(uint32_t 值);^/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:73:15:注意:候选函数不可行:从“size_t”(又名“unsigned long”)没有已知的转换') 到 'easycl::CLArray *'对于第一个论点CLKernel *in(CLArray *clarray1d) { return input(clarray1d);



}^/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/src/EasyCL/CLKernel.h:91:36:注意:候选函数模板不可行:需要2个参数,但提供了1个模板CLKernel *in(int N, const T *data);^生成 1 个警告和 1 个错误。make: *_* [build/hostside_opencl_funcs.o] 错误 1制作: * *等待未完成的工作......
src/struct_clone。 cpp:245 :12: 警告:11 个枚举值未在开关中处理:'HalfTyID'、'X86_FP80TyID'、'FP128TyID'... [-Wswitch]
开关(类型 ID){
^
生成 1 个警告。

launchConfiguration.kernel->in((int64_t)offset);

这个补丁有效。 谢谢你。

应用此之后,继续构建会导致 size_t 命名空间错误:

$ make -j ${NUM_PROCS}
mkdir -p 构建
mkdir -p 构建
/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/hostside_opencl_funcs.o -std=c++11 -fPIC -g -O2 -I pwd /include -I pwd /src/EasyCL src/hostside_opencl_funcs.cpp
/opt/local/libexec/llvm-3.8/bin/clang++ -I/usr/lib/llvm-3.8/include -fPIC -fvisibility-inlines-hidden -ffunction-sections -fdata-sections -g -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 -fcxx-exceptions -o build/ir-to-opencl -g -I/opt/local/libexec/llvm-3.8/include src/ir-to-opencl.cpp build/struct_clone .o build/readIR.o src/ir-to-opencl-common.cpp build/mutations.o /opt/local/bin/llvm-config-mp-3.8 --ldflags --system-libs --libs all
/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/cocl_events.o -std=c++11 -fPIC -g -O2 -I pwd /src/CLBlast/include -I pwd /include -I pwd /src/EasyCL src/cocl_events.cpp
/opt/local/libexec/llvm-3.8/bin/clang++ -I/usr/lib/llvm-3.8/include -fPIC -fvisibility-inlines-hidden -ffunction-sections -fdata-sections -g -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -std=c++11 -fcxx-exceptions -o build/patch-hostside -g -I/opt/local/libexec/llvm-3.8/include src/patch-hostside.cpp build/readIR.o build/ mutation.o build/struct_clone.o src/ir-to-opencl-common.cpp /opt/local/bin/llvm-config-mp-3.8 --ldflags --system-libs --libs all
在 src/hostside_opencl_funcs 包含的文件中。 cpp:17
/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/include/cocl/cocl.h:91:16:警告:“主机”属性被忽略 [-Wignored-attributes]
属性((host)) 内联 unsigned long long atomicExch(volatile unsigned long long _p, unsigned long long val) {
^
/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/cocl_blas.o -std=c++11 -fPIC -g -O2 -I pwd /src/CLBlast/include -I pwd /include -I pwd /src/EasyCL src/cocl_blas.cpp
生成 1 个警告。
/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/cocl_error.o -std=c++11 -fPIC -g -O2 -I pwd /src/CLBlast/include -I pwd /include -I pwd /src/EasyCL src/cocl_error.cpp
在 src/cocl_blas 包含的文件中。 cpp:15
/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/include/cocl/cocl_blas.h:8:9:错误:命名空间“std”中没有名为“size_t”的类型; 你的意思是简单的'size_t'吗?
typedef std::size_t cublasStatus_t;
^ ~ ~
尺寸_t
/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”
typedef SIZE_TYPE size_t;
^
在 src/cocl_blas 包含的文件中。 cpp:15
/Users/erybski/git/tensorflow-cl/third_party/cuda-on-cl/include/cocl/cocl_blas.h:17:5:错误:命名空间“std”中没有名为“size_t”的类型; 你的意思是简单的'size_t'吗?
std::size_t cublasCreate(cublasHandle_t phandle);^ ~ ~尺寸_t/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”typedef SIZE_TYPE size_t;^在 src/cocl_blas 包含的文件中。
你的意思是简单的'size_t'吗?std::size_t cublasDestroy(cublasHandle_t 句柄);^ ~ ~尺寸_t/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”typedef SIZE_TYPE size_t;^在 src/cocl_blas 包含的文件中。
你的意思是简单的'size_t'吗?std::size_t cublasSgemm(cublasHandle_t blas, int transA, int transB, int M, int N, int K,^ ~ ~尺寸_t/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”typedef SIZE_TYPE size_t;^在 src/cocl_blas 包含的文件中。
你的意思是简单的'size_t'吗?std::size_t cublasSetPointerMode(cublasHandle_t 句柄, cublasPointerMode_t 模式);^ ~ ~尺寸_t/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”typedef SIZE_TYPE size_t;^在 src/cocl_blas 包含的文件中。
你的意思是简单的'size_t'吗?std::size_t cublasGetPointerMode(cublasHandle_t 句柄, cublasPointerMode_t *mode);^ ~ ~尺寸_t/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”typedef SIZE_TYPE size_t;^在 src/cocl_blas 包含的文件中。
你的意思是简单的'size_t'吗?std::size_t cublasSetStream(cublasHandle_t 句柄, cudaStream_t streamId);^ ~ ~尺寸_t/opt/local/libexec/llvm-3.8/bin/../lib/clang/3.8.1/include/stddef.h:62:23:注意:此处声明的“size_t”typedef SIZE_TYPE size_t;^/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/cocl_memory.o -std=c++11 -fPIC -g -O2 -I pwd /src/CLBlast/include -I pwd /include -I pwd /src/EasyCL src/cocl_memory.cpp/opt/local/libexec/llvm-3.8/bin/clang++ -c -o build/cocl_device.o -std=c++11 -fPIC -g -O2 -I pwd /src/CLBlast/include -I pwd /include -I pwd /src/EasyCL src/cocl_device.cpp产生 7 个错误。make: *_* [build/cocl_blas.o] 错误 1make: * * 等待未完成的工作....

我们可以推送长登录要点以使线程仍然可读吗?

问题:你们是如何解决地址空间问题的?

@hughperkins SYCL 规范在第 5.8 节(“地址空间扣除”)中描述
实现需要如何处理不同的内存类型。 这
类似于之前为 PlayStation 3 所做的工作,并在
这篇论文:卸载——自动化代码迁移到异构多核系统C++:使用 Clang 支持单源 SYCL 和 HSA 编程模型

希望有帮助。

@hughperkins我可以编译你的 tensorflow-opencl repo 代码来应用我的 ARM 板吗? 我的 ARM 板有支持 opencl 1.2 的 Imagination GPU。

我在搜索 tf/intel 支持时偶然发现了这个线程。

我有一台英特尔 MacBook Pro,我能提供什么帮助? 我不知道 c/c++,但我可以按照构建/编译/测试指令并传回(pastebin)结果......

derek$ system_profiler SPDisplaysDataType
图形/显示:

Intel Iris:

  Chipset Model: Intel Iris
  Type: GPU
  Bus: Built-In
  VRAM (Dynamic, Max): 1536 MB
  Vendor: Intel (0x8086)
  Device ID: 0x0a2e
  Revision ID: 0x0009
  Metal: Supported
  Displays:
    Color LCD:
      Display Type: Retina LCD
      Resolution: 2560 x 1600 Retina
      Retina: Yes
      Pixel Depth: 32-Bit Color (ARGB8888)
      Main Display: Yes
      Mirror: Off
      Online: Yes
      Automatically Adjust Brightness: Yes
      Built-In: Yes
    PL2202W:
      Resolution: 1680 x 1050 @ 60 Hz
      Pixel Depth: 32-Bit Color (ARGB8888)
      Display Serial Number: 05884C7A57014
      Mirror: Off
      Online: Yes
      Rotation: Supported
      Adapter Type: Apple Mini DisplayPort To VGA Adapter
      Automatically Adjust Brightness: No
      Adapter Firmware Version: 1.03

@hughperkins感谢您的指示!
我尝试在 arm 平台上编译你的 cuda-on-cl。 按照您的 cuda-on-cl 指南:
我的 ARM 板信息:
arm64、gcc 4.9、clang 和 llvm 3.5、openCL 1.2

* 一定要使用clang++-3.8版本吗? *
git clone --recursive https://github.com/hughperkins/cuda-on-cl
制作
错误:
clang++-3.8:找不到命令
我像这样编辑 Makefile:CLANG=clang++ LLVM_CONFIG=llvm-config LLVM_INCLUDE=/usr/include/llvm
然后再次制作:
错误:
src/mutations.h:3:10:致命错误:找不到“llvm/IR/Module.h”文件

尝试运行 make run-test-cocl-cuda_sample:
制作:cocl:找不到命令

@hughperkins让我试一试。

使用 tensorflow 测试 keras 时出错

keras$ KERAS_BACKEND=tensorflow pytest3

输出错误:

Invalid kernel name, code -46, kernel _ZN5Eigen8internal15EigenMetaKernelINS_15TensorEvaluatorIKNS_14TensorAssignOpINS_9TensorMapINS_6TensorIfLi1ELi1EiEELi16ENS_11MakePointerEEEKNS_18TensorCwiseUnaryOpINS0_12scalar_rightIffNS0_17scalar_product_opIffEEEEKNS4_INS5_IKfLi1ELi1EiEELi16ES7_EEEEEENS_9GpuDeviceEEEiEEvT_T0_
__internal__ build log: 
"/tmp/OCL11307T1.cl", line 3: error: variable with automatic storage duration
          cannot be stored in the named address space
      local float mem[1024];

代码:

inline float __shfl_down_3(float v0, int v1, int v2) {
    local float mem[1024];
    int tid = get_local_id(0);
    int warpid = tid % 32;
    int warpstart = tid - warpid;
    mem[tid] = v0;
    //barrier(CLK_LOCAL_MEM_FENCE);
    int warpsrc = warpid + v1;
    warpsrc = warpsrc >= 32 ? warpid : warpsrc;
    return mem[warpstart + warpsrc];
}

大家好,我叫 ricardo,我是一名 C++ 程序员,拥有多年 C++ 经验,对 Cuda 了解不多,我很乐意为这项工作做出贡献。 我怎样才能为这份工作做出贡献?

好的,我有一个带有 Mali-T628 MP6(OpenGL ES 3.0/2.0/1.1 和 OpenCL 1.1 完整配置文件)的 Odroid Xu3
在操作系统上运行:LUbuntu 1404 64 位
我将进行完整的安装并将结果发布在这个平台上。
关于错误,有错误列表(类似于 Bugzilla?)或带有错误列表的电子表格?
干杯!

使用 HIP 怎么样?
https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/blob/master/docs/markdown/hip_faq.md#how -does-hip-compare-with-opencl
https://github.com/RadeonOpenCompute/hcc
https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/issues/45
“您的愿望已实现,Eigen 正在通过 HIP 移植到 AMD GPU 上。您请求的第二部分是我们能否带来支持 FLOAT16 的标准化工具,该工具随我们的所有 GFX8 GPU 一起提供,希望得到满足。”
我们的 AMDGPU 编译器开发分支现在支持 Float16 和 Int16 本机指令,而不是使用上转换和下转换指令模拟 FP16/Int16 来从 FP16/Int16 转换为 Float 并返回。

这是斐济硬件上的 f16 测试,成功地执行了带有转换和本机指令的半类型矩阵乘法。”

此外,不相关,但您应该使用 syCL/openCL 2.0 而不是 1.2,因为 CUDA 已经支持 nvidia。 AMD 和 Intel Windows 驱动程序都支持 openCL 2.0。 AMD 还表示,他们将很快为 Linux 开源 un openCL 2.0 驱动程序(英特尔可能会使用开源魔法)(英特尔已经有一个 Linux openCL 2.0 实现,只是需要成熟。)如果你问英特尔和 AMD,也许他们可以加快工作速度,因为 TensorFlow 对他们的经济利益很重要。 他们已经在此评论部分表示他们想提供帮助。 此外,所有主要的 ARM 制造商都支持 openCL 2.0。 这可能会为 Android(这符合 Google 的经济利益)、树莓派、智能电视等提供很多机会

在中期,我们最终可以为不受支持的硬件开发一个 opencl 1.2 后备层。
并且实施也应该使用 openVX(现在所有主要硬件制造商都支持,AMD 有一个开源实施)和https://www.khronos.org/news/press/khronos-launches-dual-neural-network -标准倡议
以及所有的 Spir-V(可以同时被 Vulkan 和 openGL 使用)。
你可以说我正在复制已经说过的内容,但综合很重要。
最后,tensorflow 可以使用 HSA 吗?

http://www.hsafoundation.com
HSA 在 Android 上会很棒。

我不知道 HIP 是否有用。 它仅在某些 AMD 卡上受支持,因此如果我们想要支持所有设备,无论如何都需要 OpenCL 实现。 如果 HIP 实施速度明显更快,它可能仍然值得。 可能是这种情况,但我还没有看到很多基准测试(HIP 与 OpenCL)。 另一个原因可能是 MLOpen(用 HC 编写)作为 cudnn 的替代品,但我也不知道它有多快或它支持哪些功能。

TensorFlow 不会直接使用 HSA,因为它非常底层。 但是 HC(和 HIP)是在它之上实现的,您也可以在 if 之上实现 OpenCL(pocl 这样做)。

relooper 算法在这里有用吗? http://mozakai.blogspot.ca/2012/05/reloop-all-blocks.html

@hughperkins很高兴看到您在编译器方面取得了一些进展,但我认为这对 TensorFlow 来说是题外话。 您应该在编译器项目的 GitHub 页面上启动许多较小的讨论线程。 我猜这会更加专注和富有成效。

还有https://github.com/kripken/emscripten-fastcomp/blob/master/lib/Target/JSBackend/Relooper.cpp

这是相关论文: https ://github.com/kripken/emscripten/blob/master/docs/paper.pdf?raw=true

最初的 OpenCL/SyCL 支持与https://github.com/tensorflow/tensorflow/pull/5267合并到 master 中

恭喜!

@keryell顺便说一句,triSYCL 存储库发生了什么? 它似乎消失了,我只能找到对 Khronos 的 Gitlab 的引用,该引用不可公开访问。

编辑:我找到了你的私人克隆,只有来自 amd 的那个不见了。

@bhack ,opencl-docker 支持 mac 平台吗?

@alephman我没有OSX平台,但我认为稍微调整一下启动命令可能会奏效。

@bhack @alephman :请参阅上面我对 mac 的评论,如果您指向我的构建说明,我会试一试

@olesalscheider :是的,triSYCL 从 AMD 转移到 Xilinx https://github.com/Xilinx/triSYCL但你是对的,我的 GitHub 工作区上的版本也适用于https://github.com/keryell/triSYCL

我们还没有在 TensorFlow 上尝试过 triSYCL。 已经有一个大的构建配置工作要做只是为了尝试......

@keryell tr ​​iSYCL 状态是什么?

英特尔 beignet opencl 2.0 支持即将完成!
http://phoronix.com/scan.php?page=news_item&px=Beignet-Birthday-CL2

@bhack triSYCL 现在主要在 Xilinx 开发。 仍在添加越来越多的功能。 基于 Clang/LLVM 的大纲编译器仍在开发中,以便在设备上获得完整的单源体验。 但是,已经实现的 OpenCL 兼容模式也有一些价值,它通过使用 SYCL 运行时根据访问器表达的依赖关系进行延迟传输来简化主机和内核之间的通信。

我的 mac 与 OpenCL 兼容,那么如何使用 openCL 运行我的 tensorflow? 当我配置新代码时,我刚刚发现 tensorflow 已经支持 opencl。

@hughperkins我的mac中没有clinfo指令,我该怎么办? 但是我可以在这里用 clang 为 opencl 编译测试代码,并得到以下信息:
clang -framework OpenCL dumpcl.c -o dumpcl && ./dumpcl Device Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz supports OpenCL 1.2 Device Intel(R) Iris(TM) Graphics 6100 supports OpenCL 1.2

谢谢@hughperkins ,但我想我昨天已经尝试过computecpp,而且似乎macbook系统仍然不支持computecpp。 所以,也许继续等待新的更新是我唯一能做的(TT)。 顺便说一句,我的 Iris 6100 是八代,这对 OpenCL 1.2 很好。

@hughperkins是的,SYCL 1.2 是 OpenCL 1.2 的先验,SYCL 2.2 是 OpenCL 2.2 的先验。
我说的是“先验”,因为如果您不使用任何需要 SYCL 的 OpenCL 兼容模式的东西,那么 SYCL 根本不需要 OpenCL。 实际上 SYCL 是一种非常通用的异构计算模型,可以在任何东西之上运行。 当然,真正的实现也可能需要 OpenCL。

你好,

我目前正在学习/使用 TensorFlow 和 Keras,我有兴趣获得在 macOS 下工作的 OpenCL 支持……关于围绕 macOS 所做的工作有什么新闻吗?

我成功编译了 TensorFlow,但如果我尝试为 OpenCL 进行配置,它会询问我的 computeCpp 1.2 位置,并且在我看来,macOS 没有 ComputeCpp。

你好。 绝不是 ML / Tensorflow / 甚至 OpenCL 方面的专家,但我是一位经验丰富的 Mac 图形开发人员,他迫切希望在集成和 AMD GPU 使用内置库和简单依赖项的系统上获得更快的 Tensorflow 性能:)

我能提供什么帮助?

在 travis 日志@hughperkins中查看 OS X 上的最后一次编译失败 - 看起来运行 'xcode-select --install' 可能会解决? 它应该重新链接 /usr/include 目录。 我在更新 Xcode beta 以发布时遇到了这个问题,并且在编译一些 C++ 代码时遇到了问题。

似乎 XLA 编译器 (https://www.tensorflow.org/versions/master/resources/xla_prerelease.html) 将提供从数据流图生成 LLVM 代码。 这意味着非常容易访问 spir-v 和 Vulkan 的计算 API。 随着代码生成的整理,我无法想象谷歌不提供 Vulkan 兼容性,因为 Android 上运行着大量未使用的集成 GPU。

@hughperkins

很快:现在我正在自定义 C++/Object-C 代码库上运行 Inception v3,并将解码的视频帧传递到网络。 我对 TF 了解得不够多,无法了解低级需求,但高级别的需求:加载模型、运行会话、期望工作正常。 老实说,我认为这意味着 100% 的兼容性。 我知道这对确定优先级没有帮助。 基本上,使用 TF /InceptionV3 的 C++ 图像识别是我的出发点。

在 Mac 上运行的 cuda-on-cl:我已经查看了 repo,可以帮助在我的系统上调试和运行构建,并在各种硬件上验证结果:我可以使用带有双 D700 的 AMD Mac Pro、Nvidia Mac 笔记本电脑和桌面系统。

感谢您的详细反馈。 我将监控回购,尝试跟进,并尽我所能提供帮助。

休,你可能想看看http://chrec.cs.vt.edu/cu2cl/了解一些函数是如何映射的。

在我的公司 StreamComputing,我们有各种用于构建测试和基准测试的 GPU,我们将其用于我们的客户项目。 我可以将你的 Github 连接到我们的 Jenkins 中进行每周运行。

谢谢你的回答,我这周会在工作上回到这个话题,具体的脚本。

我的用例围绕文本/语法匹配分析,在我的实验中使用 Gensim 和 Keras/tensorflow。

我愿意帮你测试

我有一台带 AMD 卡的 Windows PC
带有 AMD 卡的 MBP
带有 Intel 集成 GPU 的 MB

@hughperkins - 我今晚在 AMD R9 390 8GB 上通过上面的测试集。 到目前为止,我已经得到了一个不同的结果; logistic_regression.py训练并且不返回nan 。 超好的! 最后会出现段错误,所以我将调查脚本或 cl 代码是否有问题。

我应该把我的结果推送到哪里,它们对你最有用?
也许我们可以得到一个标准的“测试脚本”,它会生成一组标准的结果,志愿者可以推送给你(或在本地 CI 上设置或其他)?

py.test是一个很好的解决方案; 它只是一个pip的距离,这是安装tensorflow过程的一部分。

自从开始测试以来,我发现了一些有趣的事情,但是单独使用 Python 输出可能无法调试它们:

  • 对同一脚本的不同调用可能会提前崩溃,或者可能“挂起”(没有输出、没有进度、对Ctrl-C没有响应,进程需要pkill -9 'd),或者可能会延迟崩溃在验证部分或脚本成功完成后。 崩溃(段错误)可能会导致 Xorg 崩溃。
  • 结果似乎无缘无故地发生变化:我可能会调用一个脚本并让它出现段错误,然后再次调用它并且它会起作用。
  • 挂起可能发生在片刻之前正在工作的部分代码中,我曾在训练批次内或之后发生过一次挂起,在数百批次刚刚成功发生之后。

那么,可能是 GPU 端存在未解决的问题,需要一个好的段错误来清除它? 我对 GPU 模型或 OpenCL 还不是很了解,所以在这里我不能做出太多贡献。 但是,可能需要 GPU 调试输出来正确探索正在发生的事情。

另外,我以为您在 github 上使用 AMD,但您似乎是一个“流氓代理”,在自己的时间做这整个 CUDA-on-CL 事情。 真诚地感谢您带头做这件事! 有没有什么方法可以让我和其他人为你的努力做出贡献,比如为你众筹一个 GPU? 或者你可以建立一个 Patreon,我很高兴注册每月对该项目的贡献?

关于 AMD GPU,我们是 AMD 的合作伙伴。 请参阅我 8 天前的消息,您可能错过了:

在我的公司 StreamComputing,我们有各种用于构建测试和基准测试的 GPU,我们将其用于我们的客户项目。 我可以将你的 Github 连接到我们的 Jenkins 中进行每周运行。

我想知道您是否有可能设置一个在每次提交时运行的 CI 服务器?

没问题。 我可能需要对项目进行写访问,因此 Jenkins 可以将日志文件写入构建日志目录。 我只是给你发垃圾邮件,所以我们可以讨论。

大家好,

您可能已经看到,一堆 SYCL 的东西已经被推送到 TensorFlow。 我们还没有完成,还有很多事情要做。 但我们正在努力实现这一目标。

如果您对贡献感兴趣或只是对当前状态感到好奇,请查看下面的细分。

基础设施
Google 捐赠了两台机器,用于定期测试@benoitsteiner的 TensorFlow 分支 (https://github.com/benoitsteiner/tensorflow-opencl)

两者都有 AMD GPU:

CL_DEVICE_NAME:夏威夷
CL_DRIVER_VERSION:1912.5(虚拟机)

CL_DEVICE_NAME:斐济
CL_DRIVER_VERSION:1912.5(虚拟机)

我们在 Codeplay 也希望在明年推出专用机器。 提高 OpenCL 设备分集覆盖率。

如果有人有兴趣为我们支持的相关平台提供测试构建服务器,我们正在寻找这方面的贡献者。
目前,要求是:
- Ubuntu 14.04
- 支持 SPIR(英特尔 CPU/GPU 或 AMD GPU)的 OpenCL 驱动程序

@VincentSC也许你可以帮忙?

测试
在斐济机器( https://ci.tensorflow.org/job/tensorflow-opencl/127/consoleFull )上,我们面临 164 失败。

在夏威夷机器( https://ci.tensorflow.org/job/tensorflow-opencl/129/consoleFull )上,我们失败了 56 次。

我们正在研究修复失败的梯度测试并调查斐济机器上额外失败的原因。

本征
在过去的几个月里,我们一直在积极实现 TensorFlow 所需的功能,包括:重塑、切片、基本缩减等。目前我们正在实现收缩。 可以在https://docs.google.com/spreadsheets/d/1YbHn7dAFPPG_PgTtgCJlWhMGorUPYsF681TsZ4Y4LP0/edit#gid =0 的 Eigen Tensor 选项卡中找到详细的细分。

TensorFlow
已经实现了许多 Coefficient-wise 操作,包括 Abs、Floor、IsFinite、Log、Pow、Mul 等,以及 Reshape、Shape、Identity、Fill 等张量操作。
可以在https://docs.google.com/spreadsheets/d/1YbHn7dAFPPG_PgTtgCJlWhMGorUPYsF681TsZ4Y4LP0/edit#gid =1719702219 的 TensorFlow 内核选项卡中找到详细的细分

组织
上面的电子表格有几个选项卡,用于对项目的工作进行分类,例如:总体计划、特征张量、TensorFlow 内核、模型。

如果您想参与其中,请将您的名字放在您正在处理的项目旁边或添加任何重要的缺失。
谢谢,
卢克

该路线图是否有效?

@lukeiwanski是的,没问题。 通过info@st​​reamcomputing.eu联系我们

在阅读完所有这些之后,我猜在 macOS/OS X 上使用 OpenCL 还没有可靠的解决方案吗? 我尝试使用 OpenCL 支持编译 Tensorflow C++(我假设 SYCL 1.2 需要 ComputeCpp,正如有人指出的那样)。

我环顾四周,似乎找不到下载、编译或构建 SYCL 库的位置。 它在这里https://www.codeplay.com/吗? 我真的不确定如何继续,谢谢...

@dylib据我所知,macOS 仍然没有 ComputeCpp。 所以这意味着 macOS 的 OpenCL 还没有准备好。

仍然无法使用 AMD 卡和催化剂驱动程序在 Ubuntu 16.04 上运行https://github.com/tensorflow/tensorflow/issues/6497。 有什么方法吗?

在尝试使用支持 OpenCL 编译的 TF 之前,我必须查看 /usr/local/computecpp/bin/computecpp_info 输出。 就我而言,它显示

  Device is supported                     : NO - Unsupported vendor
  CL_DEVICE_NAME                          : Pitcairn
  CL_DEVICE_VENDOR                        : Advanced Micro Devices, Inc.

现在有两种在 GPU 上运行 TF 的选择:
在有限(由供应商)数量的设备上工作良好,但专有的 CUDA
在有限的(由computecpp开发人员)数量的设备和专有的computecpp上工作不好
仍然没有 OpenCL 支持。

@inferrna在整个 TensorFlow 文档的OpenCL 特定部分中。 这将很快发布在 tensorflow.org 网站上。

@benoitsteiner opencl 卷积支持的当前状态是什么? 您是否打算直接利用现有的内核? 矩阵乘法呢?

任何预计到达时间?

使用 HIP 将 CUDA 代码移植到与平台无关的代码怎么样? https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/blob/master/docs/markdown/hip_porting_guide.md

似乎 AMD 正在为此努力: https ://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/issues/45#issuecomment -269827686

这个怎么样? 我认为这个包可以在 Radeon GPU 上运行。

https://github.com/RadeonOpenCompute/ROCm

@bhack来自https://github.com/tensorflow/tensorflow/issues/6449#issuecomment -269245727

@lukeiwanski XLA 会影响你的努力吗?

XLA 和 SYCL 解决方案在不同情况下是互补的:SYCL 旨在提供完全的可编程性和可定制性。 XLA 用于优化图形中定义明确的模式。

我对 XLA 的理解是它使用 LLVM 编译器在运行时优化了一些现有的 TensorFlow 图。 它需要在编译器中为图中使用的每个算法实现优化传递。
SYCL 方法是唯一能够提供 CUDA 级别编程的方法——这正是开发人员所需要的。

借助 SYCL,我们旨在为所有 TensorFlow Ops 提供支持并简化新操作的开发。

这意味着 SYCL 可以让您非常轻松地编写新的高性能操作,而 XLA 如果支持图中的所有操作,则可以优化整个图。

XLA 后端 LLVM IR 可以通过https://github.com/KhronosGroup/SPIRV-LLVM 转换为 SPIR-V 吗?

我看不出有任何理由说明这是不可能的。

@k-hashimoto:我们在这里讨论将 TensorFlow 移植到 Khronos Group 的标准 OpenCL,实际上更多的是 OpenCL SYCL,Khronos Group 的后现代 C++ 单一源标准。
ROCm 看起来像是来自某个供应商的另一个非标准解决方案。
如果您对专有解决方案感兴趣,那么已经有 TensorFlow 的 CUDA 版本看起来运行良好。 :-)

同意:在 OpenCL 上保持对话/努力,让供应商在该开放标准之上实现他们的任何东西。

2017 年 1 月 17 日 10:01:32 GMT+00:00,Ronan Keryell [email protected]写道:

@k-hashimoto:我们在这里讨论将 TensorFlow 移植到
OpenCL,来自 Khronos Group 的标准,实际上更多的是 OpenCL SYCL,
来自 Khronos Group 的后现代 C++ 单一源代码标准。
ROCm 看起来像是来自某个供应商的另一个非标准解决方案。
如果您对专有解决方案感兴趣,那么已经有一个 CUDA
看起来运行良好的 TensorFlow 版本。 :-)

--
您收到此消息是因为您发表了评论。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -273076892

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

:+1:

👍

:+1:

此消息是由邮件传递软件自动创建的。

您发送的消息无法传递给它的一个或多个
收件人。 这是一个临时错误。 以下地址延期:

[email protected]
域 biosiv.es 已超过允许的每小时最大电子邮件数 (111/100 (111%))。 稍后将重新尝试消息

-------- 这是邮件的副本,包括所有标题。 ------
收到:来自 github-smtp2-ext6.iad.github.net ([192.30.252.197]:48606 helo=github-smtp2b-ext-cp1-prd.iad.github.net)
通过带有 esmtps 的 chi-server32.websitehostserver.net (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256)
(进出口 4.87)
(信封来自[email protected]
id 1cWmiQ-0032as-W9
对于[email protected] 2017 年 1 月 26 日星期四 10:16:03 -0600
日期:2017 年 1 月 25 日,星期三 04:09:21 -0800
DKIM-签名:v=1; 一个=rsa-sha256; c=放松/放松; d=github.com;
s=pf2014; t=1485346161;
bh=N1Pjga2Q9PtEE8ncEMXBtSJzd3kd6HAkJRnj6H2dDEg=;
h= From:Reply-To :To:Cc:In-Reply-To:R eferences:Subject :List-ID:
列表-存档:列表-发布:列表-取消订阅:来自;
b=e5r+VKm/UtpLYj0OCnfEPSYlL6a7xCOd9bN+jS3gify2mRv/g4kofW7ZrEeDyeJT+
GvddVV/w5htZFUbHy9+92pYUHGEYEn2XrmFqc6ZFVoPqBsPW5Cxk31O3Kvi1cwuSPI
g8J4X/qvl1DT+yKrh1es7CeXkr23c8mFNgWkG5qk=
来自:Miguel Ángel [email protected]
回复:tensorflow/tensorflow [email protected]
致:张量流/张量流[email protected]
抄送:订阅[email protected]
消息 ID:
回复:
参考:
主题:回复:[tensorflow/tensorflow] OpenCL 支持(#22)
哑剧版:1.0
内容类型:多部分/替代;
边界="--==_mimepart_5888957158d12_78b73ff902fe113c148134";
字符集=UTF-8
内容传输编码:7bit
优先级:列表
X-GitHub-发件人:migpradel
X-GitHub-Recipient:生物质
X-GitHub-原因:已订阅
列表 ID:张量流/张量流
列表存档: https ://github.com/tensorflow/tensorflow
列表发布: [email protected]
列表退订:,
https://github.com/notifications/unsubscribe/AELU4lfFKxIqjh4jaQkUHuRKD7zj_eKCks5rVztxgaJpZM4Gex3i
X-自动响应-抑制:全部
X-GitHub-收件人地址: [email protected]

----==_mimepart_5888957158d12_78b73ff902fe113c148134
内容类型:文本/纯文本;
字符集=UTF-8
内容传输编码:7bit

image

--
您收到此消息是因为您订阅了此线程。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -275092277
----==_mimepart_5888957158d12_78b73ff902fe113c148134
内容类型:文本/html;
字符集=UTF-8
内容传输编码:7bit

image


您收到此消息是因为您订阅了此线程。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音


----==_mimepart_5888957158d12_78b73ff902fe113c148134--

新来的。 想问一下 tensorflow 以后会不会有 OpenCL 的支持,是不是会支持在 FPGA 上运行 tensorflow?
谢谢

@atinzad :是的,如果 FPGA 环境支持 OpenCL 或 SYCL 版本和源代码。 但由于 TensorFlow 可能是具有各种方式的移植最多的框架,它可能已经在某个地方的 FPGA 上运行了一些部分......

在中期愿景中,sycl 开发工作与针对 SPIR-V 而非 PTX 的 XLA 有什么区别?

多么棒的问题。 可能 - 涉及的人数? 知道会很有趣!

2017 年 2 月 16 日下午 1:35,bhack [email protected]写道:

在中期愿景中,sycl 开发工作与针对 SPIR-V 而非 PTX 的 XLA 有什么区别?


您收到此消息是因为您发表了评论。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

在中期愿景中,sycl 开发工作与针对 SPIR-V 而非 PTX 的 XLA 有什么区别?

@bhack这将是在昨天的 TensorFlow 开发峰会上进行的精彩讨论

您是否询问需要贡献的可用资源/程序员类型?

如果是这样,在 OpenCL/SYCL 方法中,C++ 程序员/OpenCL C 程序员可以快速上手并能够做出贡献。 XLA 方法需要编译器/llvm 经验。

XLA 是谷歌的内部项目,他们有更多的相关资源。 但是,另一方面,他们的任务也更大。编写编译器并不是一件容易的事。

否则,如果您询问模型:

正如我之前在https://github.com/tensorflow/tensorflow/issues/22#issuecomment -272908870 中提到的,我们将这两种努力视为互补的方法,并且都有不同的用例。 我仍然支持这种说法。

例如, @tatatodd在他的演讲中提到,一些 Ops 永远不会将 XLA 作为目标。 我相信我们有可能填补这一空白。

其他要考虑的事情是新平台。 为了这个论点,我将使用移动和嵌入式环境,因为新芯片往往比 GPU 更频繁地弹出(原理相同)。

如果半导体支持 SYCL / OpenCL,您将获得开箱即用的 TF 支持(可能需要进行一些性能调整)。

如果架构是奇特的并且没有 LLVM 后端,但 XLA 需要添加它(这可能不会经常发生,但仍然如此)。 更常见的情况是架构发生了一些变化,然后需要添加新的优化通道或必须修改现有的优化通道以获得收益。 调整内核代码更容易。

我对 XLA 没有深入了解,但我认为 XLA 必须以某种方式调用 CUDA API 才能运行 PTX 内核代码,因此必须移植到 OpenCL 或 Vulkan 才能运行 SPIR-V 内核——我假设将通过 StreamExecutor - 另一个熟悉的框架 - 可能是相当大的努力。

简而言之,我们在非常分散/分散的生态系统中提供统一/稳定的平台,半导体公司和开发人员都可以瞄准。 XLA 必须承诺支持的地方。

@benoitsteiner@drpngx可能能够提供更多关于 XLA 的内部知识,因为我正在处理基于对话的许多假设/结论。

哦,我还创建了 slack 频道来简化沟通https://tensorflowopencl.slack.com/shared_invite/MTQzNDQ0NzgzNzAyLTE0ODcyOTE1NjctMDZhM2RkODRlYg

开斋节:
Slack 链接不再有效。 如果你想加入,请联系我。

我认为这是正确的,部分取决于半导体生产商的发展方向。
“这些后端发出 LLVM IR 以有效方式表示 XLA HLO 计算所必需的,然后调用 LLVM 从这个 LLVM IR 发出本机代码。” 所以LLVM IR 可以转换为 SPIR-V 。 但是 Opencl SPIRV dialect 它与 Vulkan 不同。 Streamexecutor 被推送到 LLVM并行库中,在原始的@henline描述中,原始计划似乎涵盖了 opencl。

/cc@dneto0

http://phoronix.com/scan.php?page=news_item&px=OpenCL-2.0-NVIDIA-Preps
Nvidia 应该很快就会在 Linux 和 Windows 上支持 opencl 2.0,这就是 YUGE !

性能方面,它可能比 CUDA 慢。

还要记住,Noveau 的人正在使用 SPIR-V 独立开发 Opencl 。 状态有点过时,但有新的提交。

Opencl 本质上并不比 Cuda 慢,它只是 nvidia 通过削弱他的 opencl 驱动程序实际上锁定了市场。
但英伟达的领先地位终于走到了尽头,即使是他们不道德的反竞争做法也救不了他们。 使用令人印象深刻的 Cuda 自动翻译器 HIP (https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP)
即将到来的 vega apus 和 dgpus 和 ARM 进入 Windows,Nvidia 没有未来,这就是为什么业界需要尽快大规模支持 opencl/syCL/HIP/HSA。

您好,我计划 tensorflow 将支持新的 AMD Radeon Instinct 吗? (http://instinct.radeon.com/en-us/)

嗨,TF-OpenCL 对 FPGA 的支持有什么进展吗?

@alexivia https://github.com/iteong/tensorflow/blob/master/tensorflow/stream_executor/platform.h#L30几个月前被删除,Streamexecutor 路线图尚不清楚。

@bhack感谢您的快速回复
那么,这是否意味着没有支持,或者无法保证正确操作?
另外,从我在这个线程上读到的内容,我看到测试主要是在 AMD GPU 上......有人用这个 OpenCL 端口在 Nvidia GPU 上训练网络吗?

Streamexecutor 在 LLVM 并行库中重命名,现在是acxxel

任何 Google 成员都可以解释 streamexecutor 和https://reviews.llvm.org/rL285111 之间的区别和路线图吗?

抄送@zheng-xq

@henline@jlebar是回答streamexecutor 和https://reviews.llvm.org/rL285111 之间区别的专家吗?

Axcell 和 StreamExecutor 是独立的项目。 目前没有合并它们的计划。 我让 TensorFlow 的人来决定他们是否打算转换。

那么 StreamExecutor 和 StreamExecutor llvm 也不是同一个项目吗?

正确,它们不是同一个项目。

2017 年 3 月 16 日星期四上午 11:06,bhack [email protected]写道:

那么 StreamExecutor 和 StreamExecutor llvm 也不是同一个项目吗?


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment-287143104
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAJMh_4ODoCVglGRbFBs8UmtSEm6D47_ks5rmXoUgaJpZM4Gex3i
.

@jlebar下次命名的创意单元;)但可能不是缺乏创造力,而只是内部工具的上游努力,该工具与 TF 中维护的工具不同。

@bhack ,我们确实更改了名称,正是当我们意识到我们这样做时
认为将 StreamExecutor 批量迁移到 LLVM 是没有意义的。 它是
现在称为“Acxxel”。

很抱歉造成混乱,感谢您的反馈..
肯定的学习过程。

2017 年 3 月 16 日星期四上午 11:24,bhack [email protected]写道:

@jlebar https://github.com/jlebar下次出个创意单元来命名
;) 但可能不是缺乏创造力,而只是
内部工具的上游工作,该工具偏离了维护的工具
在TF..


你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment-287148247
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAJMh0MMZvdTJ-bUoa71FBrEqHqFpDjvks5rmX5IgaJpZM4Gex3i
.

是的,我在 eigen 中的 StreamExecutor、SyCL、XLA 之间仍然有些混淆(实际上只有一个 CUDA 后端,在某些幻灯片中除了 CPU 和 opencl)

谷歌有没有人与苹果或 AMD 谈过以缓解这种情况? 我猜AMD 人迷失了方向,他们甚至不知道问题出在哪里,他们仍然想知道为什么 Nvidia 拥有如此巨大的市场份额。 我想 Apple AI 团队也很乐意在这里提供帮助……如果 OpenCL 自 2013 年以来不是他们身边的弃用软件,更糟糕的是,他们的老板不会对 Google 生气。

这方面的最新消息是什么?

根据TF 1.1 Release Notes ,Mac GPU(仅限 Nvidia)支持已被弃用。 让我们希望这将有助于改进 OpenCL 方法(对此不是很有信心)。

谢谢! 在过去的几个月里,我一直在关注这个问题。 我对 Apple OpenCL 的承诺没有信心,因为他们自 2013 年以来一直坚持使用 OpenCL 1.2(Apple 尚未提供 SPIR 1.2 支持)。

如果 OpenCL 上的 TensorFlow 对您的工作有所帮助,请告诉我,在我能帮助推进深度学习的研究和实践的范围内,我愿意提供帮助。 作为我们在设备上推理工作的一部分,我的公司已经为 TensorFlow 构建了一个 OpenCL 后端,该后端针对各种 GPU 进行了调整。 我们已经在主要的移动和桌面 GPU 系列上进行了测试,包括 Windows 和 Mac 上的常见配置。 如果有足够的兴趣,我们可能会进行某种公开分发。 我们还有 Metal(Apple GPU)和 LLVM(CPU),以及一种进行零依赖部署的方法。 这里的想法是为每个设备提供对深度学习的大力支持。

@choongng - 所有这些听起来都非常有用和有帮助。 我的个人项目https://github.com/Synopsis/将极大地受益于 OS X 上的 OpenCL,以及用于 iOS 和桌面部署的 Metal。 如果有可能将其引入到 Tensorflow 中,我认为这对大量开发人员来说将是一个巨大的福音。

谢谢你。

@choongng

如果您的公司发布 OpenCL 版本,或者更有趣的是 TensorFlow 的 Metal 版本,我认为这对很多人来说将是一个好消息,我正在使用 NVidia 卡构建 eGPU 以获得 TensorFlow / Keras 在我的 MBP 上运行以完成我的工作......

对于有兴趣的人...去 eGPU.io 社区

@choongng

我很想看到这个,所以我非常感谢你能追求它! 特别是如果它不需要 TF 为 CL 支持选择的粗略的闭源编译器。

2017 年 4 月 26 日 03:33:51 GMT+01:00,Choong Ng [email protected]写道:

如果 OpenCL 上的 TensorFlow 对您的工作有帮助,请告诉我,
我可以在多大程度上帮助推进深度学习的研究和实践
喜欢帮忙。 我的公司已经为 TensorFlow 构建了一个 OpenCL 后端
作为我们在设备上推理工作的一部分,我们针对各种 GPU 进行了调整。
我们已经在主要的移动和桌面 GPU 系列上进行了测试,包括
Windows 和 Mac 上的常用配置。 如果有足够的兴趣,我们
可能会进行某种公共分发。 我们还有 Metal(Apple GPU)
和 LLVM (CPU),以及一种进行零依赖部署的方法。 这
这里的想法是为每个设备提供对深度学习的大力支持。

--
您收到此消息是因为您发表了评论。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -297220160

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

我认为这将是革命性的;)

@choongng如果你和这些人联手,也许会有所帮助
https://github.com/benoitsteiner/tensorflow-opencl

@cathalgarvey您建议使用的开源编译器是什么? 很难找到一个兼容 OpenCL 的开源解决方案来处理野外的许多设备......
我们需要在某个时候以某种方式引导解决方案......

我没有说这很容易解决。 但是,OpenCL 不是问题所在。 毕竟,CUDA 是完全专有的,甚至比 TensorFlow 选择的 OpenCL 选项还要糟糕。

话虽如此,如果您从头开始,则可以选择 CL 或 cuda 系统,包括可移植的中间件运行时或 arrayfire 等。不过,Tensorflow 与 CUDA 太绑定了。

我发现人们愿意在 CUDA 中编写内核却不愿为 CL 编写内核,这让我感到沮丧,尽管它会接触到更多用户并严重发展市场生态系统。 开放平台对每个人都有直接和间接的好处,从长远来看,可能会为每个人节省大量成本。

如果 SYSCL 最终是这样发生的,那太好了:那么为什么一些大牌不把钱放在开放的 SYSCL 发行版上,而不是购买边缘的专有选项,这会破坏开放标准的目的吗?

2017 年 4 月 28 日 09:13:06 GMT+01:00,Ronan Keryell [email protected]写道:

@cathalgarvey您建议使用的开源编译器是什么?
很难找到兼容 OpenCL 的开源解决方案
在野外解决许多设备...
我们需要在某个时候以某种方式引导解决方案......

--
你收到这个是因为你被提到了。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -297936468

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

在这种情况下,我想问的是:

因此,一些深度学习框架(例如 Tensorflow)有点不温不火地探索使用 opencl 作为 CUDA 的替代方案。 当然,CUDA 只是开发 cuDNN 的“语言”,而这(如果我的理解是正确的)是大多数深度学习语言实际使用的。 在这种情况下,我不确定 cuDNN 的 opencl 版本是什么。

此外,AMD 一直在谈论 CUDA 的开源替代品,他们正在不断开发并称之为 rocM。 他们还在谈论 miOpen 是 cuDNN 等价物(用于常见深度学习功能的手工汇编库),但尚未发布。 AMD 方法更全面:我们不只是将重型计算输出到 GPU。

在这种情况下,我真的很困惑。 像上面列出的那些 opencl 努力是如何结合在一起的? 对于 NVIDIA GPU,这很简单……有 CUDA,还有用 CUDA 编写的 cuDNN。 对于非 NVIDIA/或在这种情况下是 AMD,它似乎不太清楚。 什么时候首选 HIP? 何时首选使用 HCC? 什么时候优先使用opencl? 任何见解将不胜感激!

@cathalgarvey所有这些巨大的软件/硬件基础设施背后都有很多政治...... :-(
即使我们可以梦想一个基于纯科学标准的全新解决方案,我认为我们必须务实。
谷歌不想过多地改变 TensorFlow 架构。 这就是为什么基于 OpenCL 的架构必须非常相似,需要像“CUDA 运行时”这样的单源 C++,而不是较低级别的非单源 OpenCL C 解决方案。 在 Khronos 领域,OpenCL 的单源 C++ 版本称为 SYCL。
例如,当您路过都柏林时,让我们讨论一下这个问题,因为您也希望以爱尔兰为基地。 :-)
同时,请随时为https://github.com/triSYCL/triSYCL以及处理 SYCL 的 TensorFlow 和 Eigen 分支做出贡献...

@keryell你知道XLA:GPU :OpenCL 是否也计划在 SyCL 上?

@benoitsteiner ,关于:

在整个 TensorFlow 文档中的 OpenCL 特定部分。 这将很快发布在 tensorflow.org 网站上。

在 tensorflow.org 上搜索了 OpenCL ,似乎找不到任何重要的东西,这似乎都指向了这里。 “很快”是指在______之前? (_在这里插入有趣的讽刺_)。

我能够编译你的 repo(耶!),虽然我猜它需要其他东西来为 Mac 创建一个工作Tensorflow OpenCL ; 我尝试构建提到的triSYCL编译器,但遗憾的是失败了。

@bhack SI因为我不为谷歌工作,所以我不知道 XLA 的细节......

@dylib不幸的是,这一切都在进行中......

@keryell是的,我知道.. 我只是好奇是否在某些会议上讨论过。

OpenCL 与 CUDA 完全不同。 然而,我肯定会看到这个移植到 HIP。
所以+1对于所有建议它的人。
https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP

HIP 允许开发人员将 CUDA 代码转换为可移植的 C++。 可以编译相同的源代码以在 NVIDIA 或 AMD GPU 上运行

没有多少人知道HIP。
您可以在此处找到有关 tensorflow 和 HIP 的更多信息:
https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/issues/37

https://github.com/GPUOpen-ProfessionalCompute-Tools/HIP/issues/45

边注:
我认为我们不应该为 Nvidia 和 AMD 争吵/吹嘘。 这些都是令人尊敬的公司,他们创造了惊人的硬件和软件时代。 相反,我们应该专注于将 tensorflow 交付给更大的用户群。
通过绑定针对多种语言已经是一个很好的起点,但我们还需要针对尽可能多的硬件。 (即使云解决方案很棒,但它们并不总是答案)

我们在 Stream 有使用 HIP 的经验。 让我看一看。

同意“我的公司更好”的说法。 我想知道 TensorFlow 应该针对哪些 GPU。 它必须是务实和有用的。 例如英特尔 GPU 或嵌入式 GPU(高通、ARM、Imagination)、RaspBerry Pi - 是或否?

AMD Radeon Vega Frontier 版

我们继续积极改进我们的 ROCm 开放软件平台和机器学习库。 我们还支持开放机器智能框架,例如 Caffe(4 月发布)。 本季度晚些时候,我们计划为 Torch 提供支持, Tensor Flow正在开发中。

他们已经发布了 Caffe,很想听听其他人在这个线程上分享他们在构建/测试方面的经验:

https://github.com/ROCmSoftwarePlatform/hipCaffe

我已经开始安装,但遇到了一个障碍,任何需要 CL 的东西都会冻结,甚至是clinfo 。 不确定这是因为某些软件问题,还是 ROCm 根本不支持我的卡 (R9 390)。

2017 年 5 月 17 日 15:18:32 GMT+01:00,Bryan Li [email protected]写道:

AMD Radeon Vega Frontier

我们继续积极改进我们的 ROCm 开放软件平台
和机器学习库。 我们还支持开放式机器
Caffe(4 月发布)等智能框架。 后来这个
季度我们计划为 Torch 提供支持, Tensor Flow正在
作品。

--
你收到这个是因为你被提到了。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -302103815

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

@cathalgarvey我一直在 AMD 的 GPU 上使用 Caffe OpenCL 分支,它工作得很好。 make run test通过了除一项以外的所有测试

很高兴听到; 我可以问一下你的硬件/软件设置吗? 例如,你是什么卡
使用什么发行版/版本的 Linux 等?

我以前有 AMDGPU-pro,但在安装 ROCm 时将其卸载。
可能有一些遗留的东西干扰了我。

--
@onetruecathal / @cathal@ quitter.is

2017 年 5 月 17 日星期三下午 3:50,Bryan Li [email protected]
写道:

@cathalgarvey我一直在 AMD 的 GPU 上使用 Caffe OpenCL 分支和
它工作得很好。 make run test 通过了除一项之外的所有测试


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

@cathalgarvey

  • Caffe OpenCL 分支(测试提交c61d48746b2df1d237c64abc7416342ce98f3251
  • 操作系统:Ubuntu 16.04.2 LTS
  • 在北极星 (RX460)、斐济 (Fury X) 和汤加 (W7100) 上测试
  • 驱动:适用于 Linux 16.40 或以上的 AMDGPU-Pro 驱动
  • 维也纳CL
  • 一般依赖: libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev libblas-dev libgflags-dev libgoogle-glog-dev liblmdb-dev libboost-all-dev cmake python-numpy
  • cmake: cmake -DViennaCL_INCLUDE_DIR=<wherever you downloaded ViennaCL>/ViennaCL-<version> -DOPENCL_INCLUDE_DIRS=<wherever you downloaded ViennaCL>/ViennaCL-<version>/CL/ -DOPENCL_LIBRARIES=/opt/amdgpu-pro/lib/x86_64-linux-gnu/libOpenCL.so.1 ..

是的,除了上面的 OpenCL 分支之外,naibaf7 将(很快)出版一本书,介绍使用 amd 和 hd graphics 对商品硬件进行实时推理。

啊; 我说的是 hipCaffe,而不是 OpenCL 分支:

https://github.com/ROCmSoftwarePlatform/hipCaffe

安装 ROCm 来构建/测试 hipCaffe 需要我卸载
AMDGPU-pro,也许我会再次尝试香草分支。 很差
不幸的是,记录在案。我想我会尝试盲目的“制作”并看看。

所以,我仍然很想听听其他人对 AMD 的体验
ROCm/HIP 堆栈; 如果他们正在开发 Tensorflow 分叉,那就太好了,
前提是它实际上适用于超过 3/4 型号的 AMD 卡
荒野。

--
@onetruecathal / @cathal@ quitter.is

2017 年 5 月 17 日星期三下午 4:09,Bryan Li [email protected]
写道:

@cathalgarvey

Caffe OpenCL 分支(测试提交
c61d48746b2df1d237c64abc7416342ce98f3251)
操作系统:Ubuntu 16.04.2 LTS
在北极星 (RX460)、斐济 (Fury X) 和汤加 (W7100) 上测试
驱动:适用于 Linux 16.40 或以上的 AMDGPU-Pro 驱动
维也纳CL
一般依赖:libprotobuf-dev libleveldb-dev libsnappy-dev
libopencv-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev
libblas-dev libgflags-dev libgoogle-glog-dev liblmdb-dev
libboost-all-dev cmake git python-numpy cmake

你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

@cathalgarvey我确实希望他们正在开发一个时髦的后端,而不是一个完整的分叉。 那将是可悲的,只会分散工作量。
已经有足够的工具了:/

@YvanDaSilva AMD 目前的工作协调性有点差(是的,所有分叉)。 此外,与 Caffe 的 OpenCL 分支不同,它在各种设备上似乎还不能很好地工作,例如......

@naibaf7我完全同意。
老实说,他们似乎真的缺乏人力资源,他们在各个方面都在努力。
顺便说一句:不知道 ETH 有神经信息学;)很好!

@cathalgarvey您能否为像我这样的外行详细说明 ROCm/HIP 堆栈。 我一直在用我的 Sea Islands 卡玩 AMGPU-pro 和 AMDGPU,所以我确信我可以发布一些有用的结果。

@YvanDaSilva
他们赞助了我最初的 Caffe OpenCL 项目,不幸的是没有很好地协调,所以 AMD 的研究人员和 AMD 的一个独立人员也同时在 OpenCL 端口上工作——以前的 AMD 研究团队现在已经解散,他们中的大多数人实际上为特斯拉工作(自动驾驶汽车项目)现在......这是一个不幸的事件链。
不过,我仍在与他们合作和联系。 维加会很有趣:)

@naibaf7很好,你很幸运! 希望我在 Heig-vd 时有这样的研究肯定会继续攻读硕士学位。

是的......这就是我的想法。 工作量如此之大,这些领域可用的人力资源却如此之少。

所有这些听起来都很棒,但让我们重新讨论让 TensorFlow 与 OpenCL SYCL 一起工作,而不仅仅是供应商特定的解决方案...... :-)
我希望 RoC 和其他 HiP 有自己的 GitHub 来讨论自己的问题...
@naibaf7 :至少我还在 OpenCL 领域。 再次加入俱乐部! :-)

@keryell我认为关于 HIP 的讨论是有效的,如果有一个用于 Tensorflow 的 HIP 端口正在开发中。 毕竟,官方的 Tensorflow-on-CL 解决方案是使用专有的 SYCL 框架,但平台和内核支持非常有限,因此它并不比提供 CUDA 新出路的“供应商特定”HIP 解决方案更好。

HIP 可能主要是 AMD 现在正在做的事情,但 AFAIK 它是一个开放标准吗? 也许我错了。 如果是这样,并且如果 AMD 可以提供 tensorflow-on-HIP 端口,它将立即比官方的 tensorflow-on-SYCL 端口更开放。

HIP 是 CUDA 的一个子集,因此它与 CUDA 一样开放。

好的; HIP-the-API 是 CUDA-the-API 的一个子集,但除非 NVidia 足够勇敢地开始引导 Oracle,否则我怀疑这将是一个问题。 我指的是 HIP 的运行时/编译器,我认为 AMD 是开放的。

编辑:对不起,如果上面的内容听起来很粗鲁; 只是想澄清我上面的立场!

Vulkan 和Opencl 会融合吗?

@cathalgarvey讨论显然是有效的,但不是在这里......
您在此处的 GitHub 上,正在使用 Khronos Group 标准讨论 TensorFlow 和 Eigen 的移植。
这不是 Twitter 或你的 Facebook 墙...... :-)
所以请为这些项目做出一些贡献! :-)

有一个新版本的设置指南,用于使用 ComputeCpp 编译 TensorFlow,Codeplay 的 SYCL 实现,以便可以使用 OpenCL 设备。 我们将不胜感激您能给我们提供的任何反馈。 https://www.codeplay.com/products/computesuite/computecpp/guides/how-to-setup-tensorflow-with-computecpp

您知道在未经测试的 AMD gpus 上运行此功能的成功率是多少吗? 如果它已经过 AMD Radeon Pro 460 @rodburns 测试,我特别感兴趣。 如果对未经测试的 GPU 有任何希望,我会很乐意花几个小时在我的 Macbook 笔记本电脑上运行 ubuntu

@samhains我们尚未对此进行测试,但您可以尝试一下。 您将需要在支持 SPIR 扩展的 Ubuntu 上使用一些较旧的 AMD 驱动程序。 我还没有弄清楚那些是什么驱动程序。

@samhains如果代码播放路线无法交付,请不要错过tf- coriander ,它终于在 Ubuntu/Mac 上处于实际使用状态。

我目前正在 convnets、双向 rnns 等上对其进行测试,一切似乎都运行良好。 它在“vanilla”OpenCL 1.2 上运行,因此应该可以在大量相对较旧的硬件上启用 Tensorflow。

目前,问题在于它基于 Tensorflow 0.11。

@rodburns。 我尝试按照链接https://www.codeplay.com/products/computesuite/computecpp/guides/how-to-setup-tensorflow-with-computecpp上列出的步骤进行操作
我收到以下错误:
错误:/home/sayantan/.cache/bazel/_bazel_sayantan/6f05f78a1e215999d72e42c1e87a8c1d/external/protobuf/ BUILD:609 :1: 规则'@protobuf//:python/google/protobuf/internal/_api_implementation.so中未声明的包含':
实际上,如果我尝试从源代码编译 tensorflow,我会遇到同样的错误。 我之前编译过它,但不确定发生了什么变化。

@rahasayantan包含什么内容? 在没有 --config=sycl 的情况下编译时你也得到它吗?

@lukeiwanski :据我了解,问题是 Bazel 正在尝试编译 Protobuf,但它没有找到或下载子目录。 我对递归子模块进行了拉动,但它仍然存在相同的问题。 如果没有 --config = sycl,它也有同样的问题。 事实上,当我从 tensorflow 主项目执行 git pull 时,我也面临同样的问题。 我认为这与 openCL 无关,它与我进行拉动的方式存在一些问题。 当我在没有 git 的情况下从您的 repo 手动下载项目 zip 并编译时,它可以正确编译,但随后出现分段错误。 我已经在您的 GIT 项目中提出了这个问题,我们正在那里讨论,我将提供与该线程上的分段错误相关的更新(没有必要重复)。 感谢您的答复。

开源 triSYCL 即将到来。 见https://github.com/triSYCL/triSYCL/pull/45

我是新来的。 非常有兴趣看到 TF 支持 OpenCL。 我如何从这个线程中获取更新?

emmm...有趣,但为什么呢? 我的意思是为什么 Tensorflow 一开始就选择 cuda 而选择 opencl? 我猜是什么商业原因?

嗨@tensorflower-gardener,

@hughperkins创建了可以在 OpenCL 1.2 设备上运行 NVIDIA® CUDA™ 代码的Coriander 。 您可能想看看这是否适合您将 TF 连接到 OpenCL 1.2 设备的需要。 如果您打算使用他的作品,请注明他的名字和他的贡献。

似乎看到对 Mac 的OpenCL支持的希望已经从很少变为tf.zero 。 我刚刚读到 TensorFlow Mac 显然将不再有任何GPU 支持(1.2+):

Note: As of version 1.2, TensorFlow no longer provides GPU support on Mac OS X.

wtf

https://www.tensorflow.org/install/install_mac

TF-Coriander 在 Mac 上进行了测试,所以如果/当它达到版本奇偶校验时,你应该能够使用它。

2017 年 6 月 22 日 11:46:51 CEST,dylib [email protected]写道:

似乎看到OpenCL支持 Mac 的希望已经从
很少到tf.zero 。 我刚刚读到 Mac 将不再有
任何GPU 支持显然(1.2+):

Note: As of version 1.2, TensorFlow no longer provides GPU support on
Mac OS X.

wtf

https://www.tensorflow.org/install/install_mac

--
你收到这个是因为你被提到了。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -310331281

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

很遗憾,因为现在有了 eGPU 和 n Nvidia 980 Ti,我们可以让驱动程序正常工作,而 Cuda 可以正常工作

我现在还没有时间在我的配置中尝试 Tensor Flow。

我的计算机上安装了 webdriver 和 Cuda 工具包,并且 Cuda 示例运行良好

https://youtu.be/JN9fDmqf010

@cathalgarvey你说你在 tf-coriander 上测试了 convnets,但似乎 convnets 还没有工作。 您能否澄清一下您是否设法使用 tf-coriander 让 convnets 在 GPU 上运行?

为什么 tensorflow 在 OS X 上不再支持 GPU? 我正计划将 Tensorflow 与我订购的 eGPU 设置一起使用。

@justinrmiller他们声称他们无法再在 mac os 上对其进行测试,因此决定停止支持。 但是,我很难相信这一点。 随着 egpus 在高山上的广告和新的 nvidia 驱动程序的发展,情况将不再如此。

@tscholak是的。 我打算用我的新 egpu 外壳永远抛弃我的 windows 盒子。

请记住,尽管 Nvidia 卡可以在 eGPU 机箱中使用,但 Apple 只会在其开发套件中正式支持 RX580,因此对 OpenCL 的需求不会消失。

Mac 上的 OpenCL 是 1.2,这意味着似乎没有活动的驱动程序
发展。 我认为给 TF 添加 Metal 支持是一个艰苦的过程
(启用 Eigen 和流执行器)但可行。

2017 年 7 月 16 日星期日下午 3:17 Ferdia McKeogh [email protected]
写道:

请记住,尽管 Nvidia 卡在 eGPU 外壳中工作,Apple
只会在他们的开发套件中正式支持 RX580,所以需要
OpenCL 不会消失。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment-315634166
或使线程静音
https://github.com/notifications/unsubscribe-auth/ACFkv3bmDr_KFSydC-QW_xbuR008pvLXks5sOm_kgaJpZM4Gex3i
.

我对放弃对 macOS 的 GPU 支持感到非常难过。

仍在寻找对 macOS 上 GPU 的 OpenCL 支持,因为显然,Apple 不会很快改用 Nvidia GPU。

TensorFlow 是我选择的引擎。 在我的 MacBook Pro 或未来的 iMac Pro 上本地使用 GPU 加速会很棒。

对于微软来说,破坏苹果是有道理的,但由于谷歌没有桌面操作系统,他们只会伤害自己。

老实说,比我聪明的人应该考虑集成 Mac OS 10.13 的 MPS - Metal Performance Shaders,它支持大量开箱即用的神经网络原语。 这将允许用于移动和桌面 iOS 和 macOS Tensorflow 推理部署的最新高性能 GPU。

据我了解,您无法使用 Apples 原语进行训练(它们不提供任何东西),但是借助 Tensorflow 支持也许您可以? 我想这对 Apple 平台上的人们来说将是一个福音。

我认为 Google 不会在内部提供此功能,而且我几乎没有必要的技能来亲自尝试它。 发布这个想法,以便人们比我可能接受的更有才华。

:)

Apple 的唯一目标是销售 Apple 设备。 谷歌旨在雇佣谷歌大规模服务。

如果你愿意在一台设备上做人工智能(学习),比如一台苹果笔记本电脑,你会做“表面学习”而不是“深度学习”,所以你最好放弃做任何事情,除了教程。 推理会为单个用户、单个设备(即使是在不太多的多核手机中)生成一个训练有素的模型,通过 GPU 可以很好地完成,但只有 CPU 才能完美实现。

另一方面,如果您要提供非常大的数据集进行学习,或者您要为非常大的并发客户群提供训练有素的推理,则绝对需要 GPU。

尽管如此,由于网络问题,以这样的规模进行操作并不是那么容易。 看看 TPU-Pods 物理架构。 它位于笔记本电脑的对立面(每个内存过载的多核服务器有几个 GPU,具有用于服务器间通信的专用光纤)。

我有一台 MacBook Pro。 这是一个很好的到达云端的终端:-D

我看到 Metal 上的 TF 也可以扩展到 iOS。 如果有人有兴趣选择它,我建议先向 Eigen 添加 Metal 支持(可以使用 OpenCL 作为参考)。

@rogerpasky对于学校,我不得不使用 Tensorflow 来训练模型,而不仅仅是评估模型。 我将不得不在不久的将来再次重复这一点。 对于像我这样的学生,GPU 培训是必须的,可以节省大量时间。 服务多个并发用户不仅仅是一件事情。

@rogerpasky这是关于在 Mac 上本地开发模型和解决方案的能力

@rogerpasky恭敬地不同意。 虽然基于云的多 GPU 解决方案非常适用于互联网服务,但我的目标是专业视频制作管道,其中推理在数小时的专业分辨率和未压缩的高清、2K、4K 素材上运行,a) 没有制作公司将上传到云,b)他们不希望谷歌或任何人拥有他们的数据,c)他们在本地有很多支持多 GPU 的系统(Mac 和 Windows)的房间,他们想利用这些系统,以及 d)同时对单个图像的推理在 CPU 上很好,运行整个电影以通过多个图形进行推理 100% 看到使用 MPS 与 CPU 之类的东西会提高性能。 由于社区拒绝支持/接受标准,而是使用仅 Nvidia 的代码,现实世界的用例被归为一类,这真是一种耻辱。

这不是来自运行教程的业余爱好者的空闲请求 - GPU 推理很重要,因为支持不同的 GPU / CPU 系列以在现实世界硬件上进行不同的工作负载。 我真的希望谷歌认真对待这一点,因为能够坚持使用像 TF 这样的单一库会很棒,这太棒了。

感谢您听到我的声音,我不是要咆哮,而是要为社区提供另一种观点。

@pldelisle@tscholak@vade请不要误会我的意思。 我很想拥有它,如果你在这个线程中搜索我作为支持者加入,但就我一直关注它而言,我得出了我写的结论,不仅仅是因为我这么认为(我猜如果使用数千个视频进行训练,MacBook 会崩溃 :-D),但要使用实际的行业事实。 不要等到在短时间内解决它(恕我直言,它永远不会得到解决,因为苹果和谷歌自从 iPhone/Android 问题以来就互相憎恨)。

@rogerpasky Mac OS 上已经支持 nvidia GPU。 它刚刚在 1.2 中被删除。

Note: As of version 1.2, TensorFlow no longer provides GPU support on Mac OS X.

我已经取消了 eGPU(Sonnet's)的订单,并且将在我的游戏设备上双启动 Linux,但是停止支持人们正在使用的东西有点糟糕。 真的希望通过 eGPU(模型训练)在我的 Mac 上做到这一点,但我想现在不会发生: https ://github.com/lengstrom/fast-style-transfer

@rogerpasky呃,你知道CoreML 支持通过Keras 导入张量流模型吗? 苹果不“讨厌”谷歌,生意就是生意,苹果的供应商之一是三星。 读一读。 谷歌、苹果、三星都是企业,会做赚钱的事。 作为旁注。 顺便说一句,我的 MacBook Pro 并没有因对数千部电影进行推理而消失。我怀疑 CUDA 的采用非常方便,Nvidia 的持续支持和错失 AMD 的机会让我们走到了现在。 我不认为它是邪恶的,只是做出改变的成本与性能增量与坚持下去的成本。

我怀疑会有一些天才来帮助解决这个问题。

我创建了一个 Google 小组,用于协作讨论将深度学习带入 OpenCL、Mac、iOS、CoreML、Vulkan 等新领域。如果您想帮助实现这些目标,请加入并在您使用时发布说明案例或您正在处理的问题的哪一部分。 已经有人非常努力地将 TF 引入更多平台,包括 MIOpen、Codeplay 的作品、TF-Coriander 以及我公司的一个内部项目 (Vertex.AI)。 将开发人员和用户集中在一个地方会很棒,因为这些努力都是密切相关的。

https://groups.google.com/forum/#!forum/deep -learning-everywhere

@benoitsteiner @hughperkins @cathalgarvey
@rogerpasky @vade @tscholak @pldelisle @adityaatluri @chocol4te @justinrmiller

@justinrmiller我有一个运行 Tensorflow 1.2.1(CUDA 8,cuDNN 6)的 Sierra 上的 eGPU(在 Sonnet 外壳中的 Titan Xp),如果您不介意从头开始构建,这不会太麻烦。 如果您有任何问题,请告诉我。

tensorflow/core/common_runtime/gpu/gpu_device.cc:1045] Creating TensorFlow device (/gpu:0) -> (device: 0, name: TITAN Xp, pci bus id: 0000:4f:00.0)

In [5]: tf.__version__
Out[5]: '1.2.1'

@danbarnes333太棒了! 谢谢(你的)信息!

@danbarnes333你是如何用 cuDNN 6 构建 tf 1.2 的? 你用过 LLVM 吗? 海合会? 我只设法让它用 cuDNN 5 构建......

仅供参考, https: //machinelearning.apple.com/

@tscholak我不会在此处发布以将其保留在 OpenCL 上,但会在此处总结步骤。

@choongng我加入了 Google 群组,但似乎很安静。 所以我会在这里咆哮;-)

  1. 机器学习/高性能/GPU计算是一个竞争激烈的市场。 不管你喜不喜欢,NVidia 都在市场上占据主导地位,让他们的显卡和软件接近于背心。 如果您有预算和截止日期,那么您现在或多或少地坚持使用 NVidia。

  2. 我有一张老式的 AMD 卡(“Bonaire”)和预算 - 爱好者。 截至昨天,我已经在 Arch Linux 上使用专有的 AMD OpenCL 2 实现运行了caffe ,而今天早上我刚刚让 AMD 的开源MIOpen以同样的方式运行。 那会让我训练一些模型; Bonaire 的峰值约为 1800 GFLOPS 单精度。 因此,如果 TensorFlow 不能在 Bonaire 上与 OpenCL 一起运行,我将不会使用 TensorFlow。

  3. 如果预算突然出现,我会购买 Intel CPU 和 NVidia 卡并运行供应商支持的专有软件。 我已经完成了为 Google、Red Hat、Canonical 和 AMD 等供应商提供的无偿 QA。

    我花了三个月的时间(以及三个发行版——Fedora 25、Ubuntu 16.04 LTS 和 Arch)从我使用了三年的 GPU 中获得了一些东西。 Fedora 的错误跟踪器中有未修复的错误,上面有我的名字。 Ubuntu 和 Freedesktop.org 也是如此。 大多数修理它们的人也没有得到报酬,或者他们得到报酬去做其他事情。

    是的,AMD 的新 CPU 令人印象深刻,是的,他们的大部分软件都是开源的,但是预算和截止日期会改变一切。 支持是关键。 支持就是一切!

@znmeb我什至不知道您可以将 GCN 之前的硬件用于 TF。
使用我的 Tahiti,我只支持 throw 一个发行版(ubuntu 14.01.x),因为 AMD 专有驱动程序仅适用于 GCN1 的较旧 linux 内核。 (我通过 SYCL 获得 TF + openCL(在 7970 上未经测试))

在我工作的地方,整个研发部门都运行着绿色团队。 他们都有 PHD,几乎没有人写过一行 cuda(也没有 OCL)。 但是这里的工具可以加速他们的Keras工作量。 我有点奇怪,我回收的采矿 GPU 试图从中榨取第二次生命。

tl;只有在 AMD GPU 市场份额出现时才会出现绿色团队支持以外的博士。
这是一个先有鸡还是先有蛋的问题。 我对 vega 抱有希望……但是是的……不是 1080Ti 杀手。

@acoye FWIW 这是 GitHub 帖子,自 4 月以来,我在经历了翻腾和谷歌搜索后,这个周末让我继续前进: https ://github.com/BVLC/caffe/issues/5804#issuecomment-318789942。 另请参阅https://github.com/cdeterman/gpuR/issues/77#issuecomment-318814154 。 那是我最初的问题 - 尝试使用我的 Bonaire 来加速 R 上的线性代数。

@acoye
您可以继续使用最新的 Linux 发行版并使用最近的自定义编译内核,例如 4.11/4.12,启用 AMDGPU 驱动程序,禁用 RADEON 并在内核配置中设置CONFIG_DRM_AMDGPU_SI=Y和/或CONFIG_DRM_AMDGPU_CIK=Y ,加上 initramfs 中用于 7970 (Tahiti) 的 AMD 固件 => 最新的 AMDGPU-PRO OpenCL 将适用于任何 GCN 卡。 忘记 FGLRX(在较旧的 Linux 发行版上)和通过 RADEON 驱动程序的 Clover,两者都低于标准。
也忘掉pre-GCN卡吧。 我在 Windows 上使用 OpenCL for Caffe 对它们进行了测试,对于这样的旧卡,性能不值得付出努力。 无论如何,2012 年之后的所有 AMD 卡都应该是 GCN。

@naibaf7我昨天花了几个小时试图让 AMD 的开源堆栈正常工作。 我得到了MIOpen及其依赖项,但hcc仍然缺少一些位。 我可能需要进行自定义内核构建以获取所有内容。 我不太关心移植 CUDA 代码或在 GPU 上运行已编译的 C++——我想对其进行数字运算。 ;-)

我还在他们的网站上看到了一些关于用汇编程序编程的东西——我可能对此感兴趣,因为从汇编程序到 FORTH 很容易。 ;-)

@znmeb是的,我也在尝试让一些 MIOpen 和 TensorFlow 的东西在我的 RX 480 上运行,但我不想破坏我的主要开发平台,所以我使用 IOMMU 虚拟化并使用可以使用的 Ubuntu 16.04 虚拟机RX 480。AMD 驱动程序对虚拟化非常友好(与为游戏卡制作的 nVidia 驱动程序不同,只有 Quadro 驱动程序可以)。

@znmeb你要做的就是sudo apt-get install rocm miopen-hip

@adityaatluri它在 Arch 用户存储库中,但它没有安装 - 它也没有从 GitHub 源安装。 它看起来很简单——它找不到一些依赖项。

@znmeb你能在这里创建一个问题(https://github.com/RadeonOpenCompute/ROCm/issues)以便我们在那里讨论吗? 谢谢!

@adityaatluri当然-我要去吃晚饭,但是我回来后会归档

@ebrevdo 有什么方法可以在带有 AMD 处理器的 Mac 中使用 tensorflow GPU 吗?

我的公司一直致力于 OpenCL 深度学习,我们有一些早期的成果要展示。 我们在短期内专注于 Keras,但我们也建立了(非常)实验性的 TensorFlow 支持,并将在我们的初始版本之后重新审视它。 此处的更多详细信息包括 AMD 的初始吞吐量数字:http: //vertex.ai/blog/bringing-deep-learning-to-opencl

凉爽的!

Tiny nitpick:AFAIK,MIOpen 不是 AMD 特定的,因为它可以链接到 OpenCL 以及 ROCm。 后者可能更快,但仍然; MIOpen 是“GPU 上的开源神经网络”宣传的一大进步,如果它在 OpenCL 上运行良好,AMD 应该得到巨大的赞誉。

2017 年 8 月 14 日下午 5:19,“Choong Ng”写道:
我的公司一直致力于 OpenCL 深度学习,我们有一些早期的成果要展示。 我们在短期内专注于 Keras,但我们也建立了(非常)实验性的 TensorFlow 支持,并将在我们的初始版本之后重新审视它。 更多详细信息,包括 AMD 的初始吞吐量数字:http: //vertex.ai/blog/bringing-deep-learning-to-opencl (http://vertex.ai/blog/bringing-deep-learning-to-opencl)

你收到这个是因为你被提到了。
直接回复这封邮件,在 GitHub 上查看(https://github.com/tensorflow/tensorflow/issues/22#issuecomment-322235416),或者静音线程(https://github.com/notifications/unsubscribe-auth /ABHR3VYHXFDEX0gPHTGLSbFeHjPfEfsXks5sYHOGgaJpZM4Gex3i)。

@cathalgarvey感谢您的更正,我的评论基于 MIOpen 文档(https://rocmsoftwareplatform.github.io/MIOpen/doc/html/install.html#prerequisites)中的系统要求,但如果有,我很乐意更新更好的链接。

等等,我已经阅读这个线程/问题 10 分钟了。 我完成了一半,我跳过了剩下的部分。 是否支持 AMD GPU?

使用仅适用于内核/操作系统(代码播放)的一个非常古老的组合的挑剔的封闭源代码:是的

使用旧版本的 tensorflow 并且不支持某些非线性(tf-coriander):是的。

真的:不是正式的。 虽然 AMD 正在移植到 HIP,但我希望在 3 个月左右的时间内取得进展。 由于他们的努力,其他框架已经运行良好。

2017 年 8 月 18 日 02:09:55 GMT+01:00,abrad1212 [email protected]写道:

等等,我已经阅读这个线程/问题 10 分钟了。 我中途了
通过,我跳过了其余的。 是否支持 AMD GPU?

--
你收到这个是因为你被提到了。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -323233294

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

FWIW 我相信最新版本的 PyGpu 可以使用 CUDA 或 OpenCL。 我的 Arch 盒子上安装了所有软件,但我还没有测试过。

@abrad1212是的,这个问题已经存在了一段时间了。 正如@cathalgarvey提到的,这项工作是巨大的,很多人都试图“让它发挥作用”。

我们这边的一些更新。 您应该能够在 Ubuntu 16.04 的 AMDGPU-pro 驱动程序堆栈上使用 ComputeCpp 0.3.0,可以在此处找到说明: http ://deep-beta.co.uk/tensorflow-1-3-on-ubuntu-16

同样,我们现在专注于不同模型的性能改进 - 有很多工作要做,但我们正在实现目标。

@lukeiwanski你的基准测试方法是什么? 我们对 Keras 中包含的模型进行计时,并针对 TF+cuDNN+K80 进行标准化,因为这是一种常见且优化良好的配置。 我们的方法类似于 Max Woolf (http://minimaxir.com/2017/06/keras-cntk/),代码不多,但我们很乐意分享。 我们的网站 (http://vertex.ai) 上有一些吞吐量数据,我们的代码在 Xception 推理上比 TF 1.2 稍快一些,并排比较更多方法会很有趣。

是否有任何 Windows 解决方案? 我会在我的 PC 上安装 Ubuntu,但我目前没有足够的空间来安装它。

Ubuntu 14.04
张量流主分支
构建 opencl 支持,并且只安装了 opencl intel cpu runtime。
python2.7
按照https://developer.codeplay.com/computecppce/latest/getting-started-with-tensflow指南
执行 pythonclassify_image.py
似乎没有调用opencl驱动程序。 (我添加了我的 opencl icd 包装器,没有看到任何东西)
是否需要在 python 代码中添加任何配置?
像 sess.graph.device('/cpu0')

但是如果我使用 Eigen skcl 指南可以在支持 OpenCL 的 cpu 上运行。 (另外这个指南代码有点过时,需要修改)
https://developer.codeplay.com/computecppce/latest/getting-started-with-eigen

任何人都可以帮助检查 tensorflow python 接口如何在 OpenCL 支持下运行。

并且使用此选项集构建 tensorflow 不会真正生成 tensorflow 二进制文件。 --config=sycl
只需在此命令中构建 tensorflow:
bazel build -c opt /tensorflow/tools/pip_package :build_pip_package

也许我忘记了 --config=sycl
我将尝试构建命令并验证它是否可以调用 OpenCL 库。 得到结果后,我会在这里发布。
bazel build -c opt tensorflow/tools/pip_package :build_pip_package

@ joe8086如果您使用以下内容修改 tf.Session 创建,它将在终端中显示一个日志,这是在任何地方提到 SYCL 吗?
tf.Session(config=tf.ConfigProto(log_device_placement=True))

对于 Eigen 指南,您有什么具体的反馈意见已经过时了吗?

@rodburns谢谢。
我的错误是构建 tensorflow 未配置选项 --config=sycl
使用此分支代码添加此选项后https://github.com/lukeiwanski/tensorflow.git
我可以看到 tensorflow 使用 OpenCL 后端运行。

对于 Eigen 指南,主要错误在于:
1、没有给出正确的包含文件。
2、对于array、Tensor、TensorMap没有给出正确的模板参数。
3、对于static_cast不给出数据类型。

添加更多信息,这可能会给这个讨论主题一些帮助。
1、Main tensorflow 不能用--config=sycl 正确构建tensorflow。
2、使用CPU OpenCL,在我的环境下,速度大约是普通CPU工具的4x~8x倍。

时间python分类图像.py
2017-09-07 16:56:29.076054: I tensorflow/core/platform/cpu_feature_guard.cc:137] 您的 CPU 支持未编译此 TensorFlow 二进制文件以使用的指令:SSE4.1 SSE4.2 AVX
2017-09-07 16:56:29.077967: W ./tensorflow/core/common_runtime/sycl/sycl_device.h:49] 没有找到受 ComputeCpp 支持的 OpenCL GPU,尝试使用 OpenCL CPU
2017-09-07 16:56:29.159775: I ./tensorflow/core/common_runtime/sycl/sycl_device.h:66] 发现以下 OpenCL 设备:
2017-09-07 16:56:29.159825: I ./tensorflow/core/common_runtime/sycl/sycl_device.h:68] id: 0, type: CPU, name: Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz,供应商:Intel(R) Corporation,配置文件:FULL_PROFILE
2017-09-07 16:56:30.213375:W ./tensorflow/core/framework/op_def_util.cc:333] Op BatchNormWithGlobalNormalization 已弃用。 它将在 GraphDef 版本 9 中停止工作。使用 tf.nn.batch_normalization()。
大熊猫、熊猫、熊猫熊、浣熊、Ailuropoda melanoleuca(得分 = 0.89107)
indri, indris, Indri indri, Indri brevicaudatus (分数 = 0.00779)
小熊猫、小熊猫、熊猫、熊猫、猫熊、Ailurus fulgens(得分 = 0.00296)
奶油苹果(分数 = 0.00147)
地球之星(得分 = 0.00117)

真正的 1m44.473s
用户 2m8.980s
系统 1m20.024s

伙计们,我不会阅读整个线程,但是如果有人可以回答我的问题,那就太好了! 我可以在 AMD GPU 上使用 Tensorflow 吗? 如果是这样,在什么操作系统中,我可以用 RX Vega 做吗? 谢谢!

@M3L0NM4N嗯......我没有关注这个线程,但看起来现在可能有可测试的 OpenCL 代码,至少在CPU OpenCL 上。 我有一个较旧的 AMD GPU(“Bonaire”),并且我在 GPU 和 CPU 上都运行了 OpenCL,所以我可以对此进行测试。 我可能会在周末试一试; 我真的很想在我的 GPU 上使用 OpenCL TensorFlow。

macos 上有任何 tensorflow 1.3 gpu/opencl 支持吗?

最新消息:我已经从 GitHub 源代码中使用 OpenCL 成功构建了 TensorFlow 1.3.1。 文档中有很多缺失的部分,我还没有尝试在 GPU 中运行任何东西,但它至少适用于非 OpenCL CPU。 顺便说一句,我没有安装 CPU OpenCL,只安装了 GPU OpenCL。

有没有人有任何带有 OpenCL GPU 的 TensorFlow 测试用例? 我最终将不得不为自己建造一个,但我希望能快速检查一下。

@znmeb是的,我报告了有问题的测试应用程序。 https://github.com/hughperkins/tf-coriander/issues/64

你能告诉我它是否适用于你的情况吗?

@unoexperto是的 - 它可以工作(不会崩溃),但没有迹象表明它是否找到了 OpenCL。

 python ./hello-tensorflow.py 
b'Hello, TensorFlow!'

我认为这里最好的做法是提交一个单独的问题来请求文档,因为很明显(当你从源代码运行./configure构建时)有 OpenCL 的代码。 反正我就是这样找到的。

@znmeb我怀疑它是否在您的情况下找到了GPU设备,因为在我的情况下,它在一开始就打印了有关选择GPU设备的调试信息。 也许您可以在tensorflow/core/common_runtime/gpu/gpu_device.cc的某个地方添加printf重新编译到控制台。

@unoexperto我加入了 Google Group 讨论并发布了文档请求。 在我投入更多精力之前,我将等待看看是否有人回应。

@znmeb您遵循什么指示? 你有运行 clinfo 吗? 你有运行 computecpp_info 吗? 这是否表明您的 OpenCL 驱动程序已按预期安装? Ubuntu 14.04 的说明在这里https://developer.codeplay.com/computecppce/latest/getting-started-with-tensflow如果您使用的是 16.04,这里有一些实验说明http://deep-beta.co。英国/tensorflow-1-3-on-ubuntu-16-04-lts/

@rodburns clinfo 和 clpeak 都运行。 我最近没有这样做,但是当我从源代码构建 caffe 并运行测试时,它肯定会影响 GPU。 所以我很确定 OpenCL / GPU 驱动程序 / 库正在工作。

我在 Arch Linux - 内核是他们的 LTS - linux-lts 4.9.52-1。 如果重要的话,“Bonaire”在 32 位模式下的峰值约为 1.7 TFLOPS,属于 AMD GPU 的“海岛”系列。

bin/computecpp_info 
********************************************************************************

ComputeCpp Info (CE 0.3.2)

********************************************************************************

Toolchain information:

GLIBC version: 2.26
GLIBCXX: 20160609
This version of libstdc++ is supported.

********************************************************************************


Device Info:

Discovered 1 devices matching:
  platform    : <any>
  device type : <any>

--------------------------------------------------------------------------------
Device 0:

  Device is supported                     : UNTESTED - Untested OS
  CL_DEVICE_NAME                          : Bonaire
  CL_DEVICE_VENDOR                        : Advanced Micro Devices, Inc.
  CL_DRIVER_VERSION                       : 2442.7
  CL_DEVICE_TYPE                          : CL_DEVICE_TYPE_GPU 

If you encounter problems when using any of these OpenCL devices, please consult
this website for known issues:
https://computecpp.codeplay.com/releases/v0.3.2/platform-support-notes

有人收集测试日志吗? 它说我的设备未经测试,所以我将对其进行测试。 ;-)

我不可能为 Sycl/OpenCL 构建 TensorFlow!

配置:
Ubuntu 16.04
张量流 r1.3
OpenCL 2.0
ComputeCpp CE 0.3.2 (computecpp_info OK)
英特尔核芯显卡 620
巴泽尔 0.5.4

安装说明(OpenCL Intel / ComputeCpp build):
https://software.intel.com/en-us/articles/opencl-drivers#philinux
https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

错误 :

ERROR: /home/erwang/workspace/ia/tf_original/tensorflow/tensorflow/core/kernels/BUILD:1695:1: C++ compilation of rule '//tensorflow/core/kernels:adjust_contrast_op' failed (Exit 1)
In file included from tensorflow/core/kernels/adjust_contrast_op.cc:19:
In file included from ./tensorflow/core/kernels/adjust_contrast_op.h:18:
In file included from ./third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:
In file included from external/eigen_archive/unsupported/Eigen/CXX11/Tensor:14:
In file included from external/eigen_archive/Eigen/Core:299:
In file included from external/local_config_sycl/crosstool/../sycl/include/SYCL/sycl.hpp:20:
In file included from external/local_config_sycl/crosstool/../sycl/include/SYCL/sycl_interface.h:54:
external/local_config_sycl/crosstool/../sycl/include/SYCL/multi_pointer.h:342:3: error: multiple overloads of 'global_ptr' instantiate to the same signature 'void (pointer_t)' (aka 'void (__attribute__((address_space(1))) float *)')

在我的 CPU 上训练模型需要很长时间,我真的需要 OpenCL/GPU 加速......

@ErwanGalline我们正在对 Eigen ( https://bitbucket.org/benoitsteiner/opencl/pull-requests/16/changes-required-for-new-computecpp-ce/diff#comment-None ) 进行升级更改,这将修复您看到的问题。

同样,我们正准备对 Eigen 进行上游性能改进 - 这有点棘手,需要与@benoitsteiner协调以避免合并冲突流 - 但我们正在实现目标。

对于 AMD 用户,我建议尝试我的 fork: https ://github.com/lukeiwanski/tensorflow/tree/dev/amd_gpu
可在此处找到 Ubuntu 16.04 的设置说明:http: //deep-beta.co.uk/tensorflow-1-3-on-ubuntu-16-04-lts/
在前面提到的 Eigen 更改到位后,所有更改都将在 tensorflow 的上游进行。

希望有帮助。

@lukeiwanski你的叉子只支持 AMD R9 Nano / AMD FirePro GPU 吗?

@lukeiwanski是否有一个测试用例可以用来验证我是否正在使用 GPU? 我可以用radeontop监控它,但我想要使用 TensorFlow 本身的东西。

@ZixuanLiang不,不仅..
我们目前在 AMD(R9 380、R9 Nano、FirePro)上进行测试。 我们知道英特尔 GPU 暴露了一些驱动程序错误,但即将修复。 我们已经宣布了瑞萨 R-Car,并期待更多的跟进。

我相信赛灵思正在上游支持 triSYCL https://github.com/tensorflow/tensorflow/pull/12882 - 所以 FPG 的(?) - @keryell应该对此有更多了解

@znmeb bazel test -c opt --config=sycl --test_output=all //tensorflow/python/kernel_tests:basic_gpu_test应该是一个公平的验证.. 输出应该是这样的:
INFO: From Testing //tensorflow/python/kernel_tests:basic_gpu_test: ==================== Test output for //tensorflow/python/kernel_tests:basic_gpu_test: 2017-10-05 10:53:52.727745: I tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA 2017-10-05 10:53:53.059908: I ./tensorflow/core/common_runtime/sycl/sycl_device.h:66] Found following OpenCL devices: 2017-10-05 10:53:53.059926: I ./tensorflow/core/common_runtime/sycl/sycl_device.h:68] id: 0, type: GPU, name: Tonga, vendor: Advanced Micro Devices, Inc., profile: FULL_PROFILE .....

@lukeiwanski谢谢,我会在 AMD GPU 上试试

@lukeiwanski构建和测试似乎正在我的博内尔岛工作。 不过,我使用的是 Python 3.6,并且说明使用的是 Python 2.7。 我需要使用 2.7 还是 3.6 可以工作?

@znmebhttps://github.com/tensorflow/tensorflow/issues/6533#issuecomment -273852647 之后,似乎 Python 3.6 应该可以工作 - 虽然我还没有尝试过

@lukeiwanski那是目前可以构建 TF 的 ComputeCpp 版本吗?
我尝试了 0.3.2 和 0.1.4 之间的各种版本,但都没有工作。 他们都以“'global_ptr'的多个重载实例化到相同的签名”错误告终。
顺便说一句,我在 TF 源中找不到 TensorDeviceSycl.h 文件,这是重命名的吗? 是否可以将补丁应用于当前资源?

提前致谢。

@eLvErDe ComputeCpp 0.3.2 可以构建: https ://github.com/lukeiwanski/tensorflow/tree/dev/amd_gpu

上游缺少修复它的 Eigen 补丁.. 见https://github.com/tensorflow/tensorflow/issues/22#issuecomment -334154564

知道如何在 bazel 构建期间注入此 Eigen 补丁吗? 也许我们应该在 Eigen tgz 版本的某个地方找到固定的版本?

谢谢,亚当。

是的,你应该可以挑选那个

可悲的是,这显然还不够,这里有一些下一个构建失败:

external/eigen_archive/Eigen/src/Core/util/BlasUtil.h:63:63: error: no type named 'ReturnType' in 'Eigen::ScalarBinaryOpTraits<cl::sycl::vec<float, 4>, std::complex<float>, Eigen::internal::scalar_product_op<cl::sycl::vec<float, 4>, std::complex<float> > >'
  typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar>::ReturnType Scalar;
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
external/eigen_archive/Eigen/src/Core/util/BlasUtil.h:69:34: error: invalid operands to binary expression ('const cl::sycl::vec<float, 4>' and 'const std::complex<float>')
  { return conj_if<ConjLhs>()(x) *  conj_if<ConjRhs>()(y); }
           ~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~~~~~~

@eLvErDe您必须提交很少的提交才能使其编译。
我建议使用 dev/amd_gpu 的提示,或者如果您不想更改当前分支.. 您可以将 dev/amd_gpu 合并到它。

实际上,我正在开发我的非官方 Debian/Ubuntu 软件包,所以我正在努力接近官方 1.3.1 版本。 我可以在没有 OpenCL 支持的情况下生活,但我会准备好在它得到正确支持后立即启用它。 也许我会针对您的分支更新软件包以进行测试,但这对于今天来说已经足够了;)

我的矿机中有大约十种不同的 AMD GPU。 (从 7970 到 RX 480 运行 ubuntu 16.04 和 amdgpu-pro)。 让我知道我是否可以通过测试任何东西来做出贡献。

让我知道我是否可以通过测试任何东西来做出贡献。
https://github.com/ROCmSoftwarePlatform/hipCaffe怎么样
https://github.com/ROCmSoftwarePlatform/hipeigen

2017 年 10 月 17 日星期二上午 10:54,slundell [email protected]写道:

我的矿机中有大约十种不同的 AMD GPU。 (从
运行 ubuntu 16.04 和 amdgpu-pro 的 7970 到 RX 480)。 让我知道我是否可以
通过测试任何东西来做出贡献。


您收到此消息是因为您发表了评论。
直接回复此邮件,在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment-337309059
或使线程静音
https://github.com/notifications/unsubscribe-auth/AA6MNxXJ-G3nCQUA9RucrJ8y4vs5NPtLks5stOnbgaJpZM4Gex3i
.

@lukeiwanski你的分叉是否也支持 macOS 上的 AMD GPU?

你好,
我在 Ubuntu16.04 x64 上为启用了 GPU(Mali-T720)的 Android 设备构建 tensorflow API,

我的操作系统信息:
Ubuntu 16.04 x64
电脑显卡:NVIDIA 1080Ti
CUDA 8.0
CUDNN 5.1(虽然我不使用 cuda 或 cudnn 进行构建)
巴泽尔 0.5.2
ComputeCpp CE 0.3.2

我的 build.sh 是:
'
bazel build -c opt --config=sycl //tensorflow/contrib/android:libtensorflow_cc.so --cxxopt="-
std=c++11" --cxxopt="-DTENSORFLOW_DISABLE_META" --verbose_failures --
crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --
cpu=armeabi-v7a
'
在构建之前。 我导出 LD_LIBRARY_PATH=my_sycl_lib_path=$LD_LIBRARY_PATH,没有'--config=sycl' 的构建很好,我得到了正确的 libtensorflow_cc.so,但是使用'--config=sycl',最终结果发现缺少 -lComputeCpp 而没有任何其他编译错误

完整的日志是这样的:

错误:/home/e0024/workspace/tensorflow/tensorflow/contrib/android/BUILD:102:1:规则'//tensorflow/contrib/android:libtensorflow.so'的链接失败:link_dynamic_library.sh失败:执行命令时出错
(cd /home/e0024/.cache/bazel/_bazel_e0024/783dad02ec856015f56356584726dd10/execroot/org_tensorflow && \
执行环境-\
COMPUTECPP_TOOLKIT_PATH=/home/e0024/workspace/source/computeCppForSYCL1.2 \
HOST_CXX_COMPILER=/usr/bin/g++\
HOST_C_COMPILER=/usr/bin/gcc\
LD_LIBRARY_PATH=/home/e0024/workspace/source/computeCppForSYCL1.2/lib:/home/e0024/workspace/caffe/build/lib:/home/e0024/workspace/cudnn/lib64:\
PATH=/home/e0024/bin:/home/e0024/.local/bin:/home/e0024/workspace/Anaconda2/bin:/opt/cuda:/home/e0024/workspace/source/protoc-3.3.0- linux-x86_64/bin:/home/e0024/workspace/bazel/输出:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/游戏:/usr/local/游戏:/snap/bin \
密码=/proc/self/cwd\
PYTHON_BIN_PATH=/home/e0024/workspace/Anaconda2/bin/python \
PYTHON_LIB_PATH=/home/e0024/workspace/Anaconda2/lib/python2.7/site-packages \
TF_NEED_CUDA=0\
TF_NEED_OPENCL=1\
外部/bazel_tools/tools/cpp/link_dynamic_library.sh 没有忽略忽略忽略外部/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -shared -o bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/tensorflow/contrib/android/libtensorflow.so '-Wl,-rpath,$ORIGIN/../../../ _solib_armeabi-V7A / _U @local_Uconfig_Usycl_S_Ssycl_Csyclrt___Uexternal_Slocal_Uconfig_Usycl_Ssycl_Slib'-Lbazel输出/ ARM-Linux的androideabi-4.9-V7A-GNU-libstdcpp-OPT /斌/ _solib_armeabi-V7A / _U @local_Uconfig_Usycl_S_Ssycl_Csyclrt___Uexternal_Slocal_Uconfig_Usycl_Ssycl_Slib轮候册,-whole归档巴泽勒输出/手臂-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/tensorflow/c/libc_api.a -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi- 4.9-v7a-gnu-libstdcpp-opt/bin/tensorflow/core/libandroid_tensorflow_lib.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu -libstdcpp-opt/bin/tensorflow/core/kernels/libandr oid_tensorflow_kernels.lo -Wl,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/tensorflow/core/libandroid_tensorflow_lib_lite.lo -Wl ,-no-whole-archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/tensorflow/core/libprotos_all_cc.a -Wl,-no-whole -archive -Wl,-whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/external/protobuf/libprotobuf.a -Wl,-no-whole-archive -Wl, -whole-archive bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/external/protobuf/libprotobuf_lite.a -Wl,-no-whole-archive -lComputeCpp external/androidndk/ndk/来源/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_static.a 外部/androidndk/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a -landroid -llog -lm -z defs -s -Wl,--gc-sections '-Wl,-soname=libtensorflow.so' -Wl,--version-script tensorflow/c/version_script.lds -lz -static-libgcc -无规范前缀 '-march=armv7-a' -Wl,--fix-cortex-a8 '--sysroot=external/androidndk/ndk/platforms/android-14/arch-arm'): com.google.devtools.build.lib.shell.BadExitStatusException: 进程退出状态 1。
外部/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../.. /arm-linux-androideabi/bin/ld:警告:在搜索时跳过不兼容的 bazel-out/arm-linux-androideabi-4.9-v7a-gnu-libstdcpp-opt/bin/_solib_armeabi-v7a/_U@local_Uconfig_Usycl_S_Ssycl_Csyclrt___Uexternal_Slocal_Uconfig_Usycl_Ssycl_Slib/libComputeCpp.so对于 ComputeCpp
外部/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../.. /arm-linux-androideabi/bin/ld: 错误: 找不到 -lComputeCpp
collect2:错误:ld 返回 1 个退出状态
目标 //tensorflow/contrib/android:libtensorflow.so 构建失败
INFO:经过时间:617.736s,关键路径:54.66s

嗯....我想在启用 GPU(Mali-T720)的手臂拱形中构建 tensorflow API,
感谢有人可以在这里留下一些经验或建议。 谢谢你。

下周来参加我在 Arm TechCon 的演讲, @laMia482http://schedule.armtechcon.com/session/running-tensorflow-machine-learning-on-arm-embedded-hardware/850230

您将需要支持 SPIR-V 的 Mali 驱动程序,这可能还不容易获得。 并且您将需要具有 Arm CPU 支持和 SPIR-V 支持的 Android ComputeCpp 运行时,这也是不可用的(尚不可用)。 所以,你将不得不只是一个_little_有点耐心。

我们 (Vertex.AI) 刚刚开源了 PlaidML,这是我们的深度学习堆栈,支持在 OpenCL 上运行 Keras。 TensorFlow 支持即将到来,欢迎提供帮助。 是的,Mac 支持正在进行中(还有 Windows)。 http://vertex.ai/blog/announcing-plaidml @ggaabe

@choongng我想试一试,但失败了。
pip search plaidml回报

plaidml (0.1.0rc3)        - PlaidML machine learning accelerator

但是pip install plaidmlpip install plaidml==0.1.0rc3
返回

Could not find a version that satisfies the requirement plaidml (from versions: )
No matching distribution found for plaidml

@hy9be我认为在plaidml 存储库而不是在这里提出问题更合适,因为这个问题是关于在 tensorflow 中支持 OpenCL。 此外,通过查看安装说明,您的 pip install 命令可能不正确。

感谢@andrewrichards的关注和会议演讲。

但是现在对我(研究生)来说,要在 Android 设备上使用 Tensorflow 构建应用程序并希望激活 GPU(Mali-T720),需要什么才能获得支持 SPIP-V 的 Mali 驱动程序和带有 Arm CPU 的 Android ComputeCpp 运行时支持和 SPIR-V 支持。

由于我在 CodePlay 主页上下载了 ComputeCpp(Ubuntu16.04 x64 with bin/doc/include/lib/),所以昨天我运行:
bazel build -c opt --config=sycl //tensorflow/contrib/android:libtensorflow_cc.so --cxxopt="-std=c++11" --cxxopt="-DTENSORFLOW_DISABLE_META" --verbose_failures --crosstool_top=//external:android/crosstool --host_crosstool_top=@bazel_tools//tools/cpp:toolchain --cpu=armeabi-v7a
错误说libComputeCpp.so incompatible ,所以我认为我可能需要具有 Arm CPU 支持和 SPIR-V 支持的 Android ComputeCpp,但我找不到任何源代码来构建 Android ComputeCpp,github 上只有示例。

而且您说现在不提供适用于 Android 的 ComputeCpp,那么是否有任何计划支持 Android 设备,或者如果支持,我该如何获得它。

对于 AMD gpu 和 linux 用户,AMD 最近在这里发布了 tensorflow 的 HIP 端口。 你可能会感兴趣。

不过,我还没有测试过。

我可以测试它 - 请继续关注。 看起来它虽然失败了CI。

确实是失败了。 我猜还处于早期阶段。

我对其进行了测试,立即在 MNIST 示例中出现了段错误。
不知道我在这里做错了什么。

$ python ./convolutional.py 
I tensorflow/stream_executor/dso_loader.cc:130] Couldn't open CUDA library libhipblas.so. LD_LIBRARY_PATH: :/home/masa/project/rendering/RadeonProRender-Baikal/Bin/Release/x64:/usr/local/lib64:/opt/CodeXL_2.5-25:/usr/lib/x86_64-linux-gnu/:/opt/CodeXL_2.5-25/RuntimeLibs/QT/
I tensorflow/stream_executor/cuda/cuda_blas.cc:2305] Unable to load HIPBLAS DSO.
I tensorflow/stream_executor/dso_loader.cc:130] Couldn't open CUDA library libhipfft.so. LD_LIBRARY_PATH: :/home/masa/project/rendering/RadeonProRender-Baikal/Bin/Release/x64:/usr/local/lib64:/opt/CodeXL_2.5-25:/usr/lib/x86_64-linux-gnu/:/opt/CodeXL_2.5-25/RuntimeLibs/QT/
I tensorflow/stream_executor/cuda/cuda_fft.cc:344] Unable to load cuFFT DSO.
I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libhip_hcc.so locally
I tensorflow/stream_executor/dso_loader.cc:130] Couldn't open CUDA library libhiprng.so. LD_LIBRARY_PATH: :/home/masa/project/rendering/RadeonProRender-Baikal/Bin/Release/x64:/usr/local/lib64:/opt/CodeXL_2.5-25:/usr/lib/x86_64-linux-gnu/:/opt/CodeXL_2.5-25/RuntimeLibs/QT/
I tensorflow/stream_executor/cuda/cuda_rng.cc:338] Unable to load cuRAND DSO.
I tensorflow/stream_executor/dso_loader.cc:139] successfully opened CUDA library libMIOpen.so locally
Extracting data/train-images-idx3-ubyte.gz
Extracting data/train-labels-idx1-ubyte.gz
Extracting data/t10k-images-idx3-ubyte.gz
Extracting data/t10k-labels-idx1-ubyte.gz
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE3 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/stream_executor/cuda/cuda_driver.cc:633] creating context when one is currently active; existing: 0x7f94fa357e90
I tensorflow/core/common_runtime/gpu/gpu_device.cc:892] Found device 0 with properties: 
name: Fiji [Radeon R9 FURY / NANO Series]
major: 2 minor: 0 memoryClockRate (GHz) 1
pciBusID 1����
Total memory: 4.00GiB
Free memory: 3.75GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:913] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:972] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Fiji [Radeon R9 FURY / NANO Series], pci bus id: 1����)
Initialized!
I tensorflow/core/kernels/conv_ops.cc:604] running auto-tune for Convolve
Invoking clang-ocl on "/tmp/miopen-MIOpenUtilKernels.cl-c377-1df5-8b6a-884c/MIOpenUtilKernels.cl"
/opt/rocm/bin/clang-ocl -DNUM_CH_PER_WG=1 -DNUM_IM_BLKS_X=1 -DNUM_IM_BLKS=4 -DLOCAL_MEM_SIZE=432 -DSTRIDE_GT_1=0 -DTILE_SZ_X=32 -DTILE_SZ_Y=8 -DUSE_IM_OFF_GUARD=1 -mcpu=gfx803 -Wno-everything MIOpenUtilKernels.cl -o /tmp/miopen-MIOpenUtilKernels.cl-c377-1df5-8b6a-884c/MIOpenUtilKernels.cl.o
writing gemm kernel to "/tmp/miopen-tinygemm.cl-836e-c4d4-abd3-b292/tinygemm.cl"
Invoking clang-ocl on "/tmp/miopen-tinygemm.cl-836e-c4d4-abd3-b292/tinygemm.cl"
/opt/rocm/bin/clang-ocl -mcpu=gfx803 -Wno-everything tinygemm.cl -o /tmp/miopen-tinygemm.cl-836e-c4d4-abd3-b292/tinygemm.cl.o
GCN assember path: /opt/rocm/opencl/bin/x86_64/clang
Arugment: --version 
Invoking clang-ocl on "/tmp/miopen-MIOpenConvDirUniC.cl-f5fc-85f4-7079-a024/MIOpenConvDirUniC.cl"
/opt/rocm/bin/clang-ocl -DMLO_HW_WAVE_SZ=64 -DMLO_DIR_FORWARD=1 -DMLO_FILTER_SIZE0=5 -DMLO_FILTER_SIZE1=5 -DMLO_FILTER_PAD0=2 -DMLO_FILTER_PAD1=2 -DMLO_N_OUTPUTS=32 -DMLO_N_INPUTS=1 -DMLO_BATCH_SZ=64 -DMLO_OUT_WIDTH=28 -DMLO_OUT_HEIGHT=28 -DMLO_OUT_BATCH_STRIDE=25088 -DMLO_OUT_CHANNEL_STRIDE=784 -DMLO_OUT_STRIDE=28 -DMLO_IN_WIDTH=28 -DMLO_IN_HEIGHT=28 -DMLO_IN_BATCH_STRIDE=784 -DMLO_IN_CHANNEL_STRIDE=784 -DMLO_IN_STRIDE=28 -DMLO_IN_TILE0=28 -DMLO_IN_TILE1=8 -DMLO_OUT_TILE0=28 -DMLO_OUT_TILE1=8 -DMLO_GRP_TILE0=16 -DMLO_GRP_TILE1=8 -DMLO_ACTIVE_ALUS=112 -DMLO_N_ALUTILES_PERSTACK=2 -DMLO_OUT_PIX_TILE0=2 -DMLO_OUT_PIX_TILE1=2 -DMLO_N_STACKS=1 -DMLO_N_OUT_TILES=8 -DMLO_N_OUT_TILES_PERSTACK=16 -DMLO_N_IN_TILES_PERSTACK=1 -DMLO_N_READ_PROCS=128 -DMLO_CONV_BIAS=0 -DMLO_ALU_VTILE0=14 -DMLO_ALU_VTILE1=4 -mcpu=gfx803 -Wno-everything MIOpenConvDirUniC.cl -o /tmp/miopen-MIOpenConvDirUniC.cl-f5fc-85f4-7079-a024/MIOpenConvDirUniC.cl.o
Invoking clang-ocl on "/tmp/miopen-MIOpenConvFFT.cl-2fbf-2ba2-0088-ebfc/MIOpenConvFFT.cl"
/opt/rocm/bin/clang-ocl -DCFF_TRANSP_WT_MOD16=1 -DCFF_CGEMM_CHOICE_0=1 -DCFF_IMG_SZ_28_28 -DCFF_IMG_H=28 -DCFF_IMG_W=28 -DCFF_BATCH=64 -DCFF_NFILTER=32 -DCFF_CHANNELS=1 -DCFF_HALFW=1148928 -mcpu=gfx803 -Wno-everything MIOpenConvFFT.cl -o /tmp/miopen-MIOpenConvFFT.cl-2fbf-2ba2-0088-ebfc/MIOpenConvFFT.cl.o
Segmentation fault (core dumped)

@masahi - 确保你安装了 rocm 1.6.4 base。

@bensander谢谢,我会升级。

@bensander AMD 堆栈中还有什么我需要的吗? 我现在只有使用开源“amdgpu”驱动程序的 AMD 专有 opencl 库。

@masahi - 如果您安装 rocm 和 rocm-libs(即“apt-get install rocm rocm-libs”),这应该是您所需要的。 repot 中的 rocm_docs 包含完整的说明,包括预期结果。

@bensander我怎么知道我是否正确运行了 rocm 1.6.4(而不是 1.6.3)?

@masahi只是一个猜测:您应该在与您的问题更相关的地方提出问题,例如 AMD 或 RoCM 项目,而不是在这里......

@keryell对,我要跑题了。 我停在这里。
无论如何,我无法让 hiptensorflow 在我的系统上运行。 我稍后会尝试使用干净的 Ubuntu 安装。

@masahi - 在那里打开一个问题,我们会帮你设置。

嗨,我只想提一下,感谢@bensander和 AMD 的其他人,我能够让 hiptensorflow 正常工作。 我可以在他们的快速入门指南中运行所有示例。

谢谢

对于那些想在 AMD 硬件上使用 ROCm 尝试 TensorFlow 的人,我写了一篇博客来描述如何使用 AMD Fury Nano 运行 Fast.ai 笔记本。
http://briansp2020.github.io/2017/11/05/fast_ai_ROCm/

👍等不及了!

ROCm 1.7 即将推出,听起来像是适当的 Tensorflow 支持!

https://www.phoronix.com/scan.php?page=news_item&px=AMD-ROCm-1.7-Released

TensorFlow 端口到 AMD GPU:
https://github.com/ROCmSoftwarePlatform/hiptensorflow/blob/hip/README.ROCm.md

这对我很有效。 我的硬件设置:
显卡:AMD Radeon RX 480
CPU:英特尔至强 2603 v3
MB:超微x10srl-f

关键是主板和CPU必须支持PCIe v3

它的性能类似于Nvidia 980Ti

我什至无法让“支持的”AMD 驱动程序在我的“支持的”Ubuntu 16.04 LTS 安装上运行。 计划淘汰?

znmeb,你的 AMD GPU 是什么? 如果您有双 GPU,请从 BIOS 中禁用不受支持的 GPU。

无法阅读整个线程... MacOS (sierra +) 上 OpenCL 上 tensorflow 的当前状态是什么? 具体来说,我有一个 Intell Iris GPU,并且希望我可以从源 Tf+Open CL 支持构建它。
此外, tf corrainder 在 1.2 版似乎运行良好。

@varun19299 FWIW 有一个适用于 OpenCL 的英特尔 SDK - 我在我古老的 Sandy Bridge 笔记本电脑上安装了它,但我确信它可以在你的机器上运行。 https://software.intel.com/en-us/intel-opencl

这目前在非 ubuntu linux 系统上是否处于可用状态? 路线图页面只是在这里链接。

@pfc目前在非 Ubuntu Linux 上可用吗? TensorFlow 一般使用 OpenCL? 还是在 AMD GPU 上使用 OpenCL 的 TensorFlow? 我假设是后者,因为这是您想要使用 OpenCL 运行 TensorFlow 的唯一原因。 对于 NVidia GPU,您将使用 NVidia 驱动程序/库,而对于仅 CPU,OpenCL 没有任何好处。

几周前,我在 Arch Linux 上进行了这项工作,使用专有的 ComputeCpp SYCL 库和 AMD “Bonaire”(海岛架构)GPU。 我需要测试一个新的 ComputeCpp 版本,但我猜它会起作用。

事实证明,完成这项工作所需的 AMDGPU Pro 专有库不能在 Ubuntu 16.04.3 上运行。 16.04.2 的升级带来了更新的 Linux 内核和 X 服务器,而 AMD 还没有发布可以在上面运行的东西。 有关详细信息,请参阅http://support.amd.com/en-us/kb-articles/Pages/AMDGPU-PRO-Driver-Compatibility-Advisory-with-Ubuntu-16.04.2-and-16.04.3.aspx 。 我一直无法让 AMD OpenCL 在 Ubuntu 上运行。

有一个实验性的 AMD 版本的 TensorFlow,它使用编译器将 CUDA 代码转换为 OpenCL 代码,但我也没有测试过。 在没有受支持的驱动程序的情况下,它是无用的。

https://github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs是官方支持的在 AMD 硬件上运行张量流的方式。

@bensander ROCm 运行时是否可以在 Ubuntu 16.04.3 上运行? 我无法让它工作。

PS:如果/何时 AMDGPU-Pro 设置可以在 Ubuntu 16.04.3 上运行,您有什么见解吗? 我需要另一个项目。

嗯,我不会(也不会)在任何地方玩 Ubuntu,但我确实有一个带有 repos 的 CentOS 7 和一个 GTX1080TI,运行内核 4.14.x 和最新的 Nvidia beta 驱动程序,所以我可以帮助测试它如果它有帮助,今天在某个时候在那里?

--
山姆麦克劳德

2017 年 12 月 7 日 07:28,M. Edward (Ed) Borasky [email protected]写道:

@bensander ROCm 运行时是否可以在 Ubuntu 16.04.3 上运行? 我无法让它工作。


您收到此消息是因为您发表了评论。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

@sammcj当有非常好的 CUDA 库时,为什么要使用 OpenCL 运行 NVidia GPU?

只是为了帮助您测试它​​!

如果您不需要手动测试,请不要担心,只是想我会提供。 我什至没有用 cuda TBH 尝试过那台机器,我只在 MacOS 上尝试过,目前我无法通过 Docker 使用 OpenCL。

--
山姆麦克劳德

2017 年 12 月 7 日 08:16,M. Edward (Ed) Borasky [email protected]写道:

@sammcj当有非常好的 CUDA 库时,为什么要使用 OpenCL 运行 NVidia GPU?


你收到这个是因为你被提到了。
直接回复此电子邮件,在 GitHub 上查看它,或将线程静音。

@znmeb我打算尝试ComputeCpp SYCL但是他们只提供ubuntu安装程序(我也在arch)并且aur安装脚本被破坏了。 很高兴听到它可以工作。 如果我足够绝望,我可以尝试一下。
@bensander这看起来正是我获得 ADM 支持所需要的,但是我担心此代码尚未向后移植到 TF,并且鉴于我的代码针对 TF 1.4,它的代码最后一次更新是在 2 个多月前。 0
似乎目前 tensorflow 基本上将您与 Nvidia 联系在一起,至少对我们这些“凡人”程序员来说是这样。 缺乏文档/更新的路线图无济于事。 我不介意以任何方式提供帮助,但是到目前为止,我在让事情顺利进行方面收效甚微。

@pfc我得到了在 Arch 上工作的 ComputeCpp SYCL——当我这样做时,他们的网站上有一个二进制 tarball。

在这个关于 SYCL 1.2.1 发布的新闻中
https://www.roboticstomorrow.com/news/2017/12/06/the-khronos-group-releases-finalized-sycl-121-/11107/
它说 :
_新规范融合了从三个独立实现中获得的重要经验以及来自机器学习框架(如 TensorFlow)开发人员的反馈,TensorFlow 现在支持 SYCL 以及原始的 CUDA 加速器后端。_

这是否意味着现在可以在支持构建 SYCL 的 OpenCL 1.2 的 AMD GPU 上“轻松”运行 TensorFlow?

“很容易”,因为 AMD 硬件的一些低级软件/驱动程序/库是大部分损坏的地方,而不是硬件或 TensorFlow 或 OpenCL 标准或 SYCL。 ;-) 如果你有工作的 AMD GPU 驱动程序和工作的 OpenCL 库,你就有了 AMD GPU 上的 TensorFlow。

我的 AMD Bonaire(海岛架构)的工作设置:

加载了amdgpu内核模块并将radeon内核模块列入黑名单的 Arch Linux
Arch 用户存储库包opencl-amd
ComputeCpp 库
TensorFlow 使用@lukeiwanski的 fork 在我的工作站上从源代码构建:

https://github.com/tensorflow/tensorflow/issues/22#issuecomment-334154564

您所说的“如果您有工作的 AMD GPU 驱动程序和工作的 OpenCL 库,那么您就可以在 AMD GPU 上获得 TensorFlow”,这让我有点惊讶。 我知道 TensorFlow“官方”版本没有在 OpenCL 上运行(仅限 CUDA)。 好像我糊涂了。
我很高兴找到 PlaidML 项目,它至少允许一些 Keras 代码在我的带有 AMD Redeon HD 6970 的 iMac 上运行。(https://groups.google.com/forum/#!topic/plaidml-dev/ksFMgxjgKrM ) AFAIK 你也试过那个框架。
如果 Tensorflow 已经在运行(仅限 CPU),我将尝试在 Ubuntu VirtualBox 上运行 TensorFlow。

@PALYGAP我不认为VirtualBox 将OpenCL 从Mac 主机导出到Linux 客户机,并且Ubuntu 16.04.3 现在不能工作。 我没有Mac,所以我没有任何测试方法。

有没有人通过 OpenCL 成功地在 AMD 上尝试使用 TensorFlow 并成功了?

@mohnkhan我有@lukeiwanski叉子工作(Arch Linux) - 请参阅https://github.com/tensorflow/tensorflow/issues/22#issuecomment-349877056 。 在发布博客文章之前,我正在等待更多 AMDGPU-Pro 的工作 - 请参阅https://github.com/corngood/archlinux-amdgpu/pull/54

@znmeb感谢您的投入

@mohnkhan顺便说一句,AMD 正在构建一个完全开源的替代路径 - 使用编译器工具链将 CUDA 代码转换为 OpenCL 代码。 不过,我不确定像我这样的旧卡的状态如何。

如果你要写一篇文章,我想解释一下也无妨(花了 3 个小时来了解整个情况):

  • TF 实际上有一个 SYCL 1.2 后端。 没有*实际* opencl。
  • 反过来,你有两个标准的实现(trisycl看起来很酷,但它的 atm有限
  • 最后,ComputeCpp 'hooks' SPIR /SPIR-V (除了 PTX,但这真的是另一回事

这就是最终让你直接进入你渴望的 OpenCL 1.2(w/cl_khr_spir ext)的原因

相反,HIP 是另一个后端,与 SYCL相对,并且仅针对 ROCm(或者好吧,哈哈,如果您有 nvidia gpu,甚至反过来 cuda .. 但这又是另一个故事了)

AMD 正在构建一条完全开源的替代路径——使用编译器工具链将 CUDA 代码转换为 OpenCL 代码。

没有。 您在谈论 HIP,而且.. 实际上就是这样,您最终将代码转换. 这不是OpenCL。
正如我所说,HIP 然后在 ROCm 上运行......
ROCm 这也是为您运行 OpenCL (在受支持的卡上),但请我强调每个人都注意关系是如何仅从 ROCm 转发的,而不是“子层内”

您可能正在考虑的可能是香菜

不过,我不确定像我这样的旧卡的状态如何。

这里总结一下:完全成熟的 AMDGPU-PRO,amdgpu-pro-opencl-only 驱动程序,就像你现在所做的那样……或者继续等到十年末有人最终使三叶草可用。

另外,fglrx ......但如果这很难推荐用于前 gcn 卡,我想它只是更好地画一个面纱。

@mirh

  1. 我不关心 pre-GCN 卡。 我的是一个海岛,我不打算购买任何更旧的东西。 再说一次,我也不打算购买另一个 AMD GPU。 ;-)
  2. 我不知道 ROCm 是否会在我的工作站上运行 - 没有开源硬件测试仪可以给我一个是或否的答案。 我已经为此打开了一个问题,但没有收到任何回复。
  3. SPIR-V 是一个编译器目标 - 我看了看它并举手,没有预算聘请编译器编写者。

这样就剩下 SYCL ... 或者举起我的另外两只手,用 Keras 做所有事情,它有 TensorFlow、Theano(正在冻结)、CNTK 或 PlaidML 后端。 从纯工程经济学的角度来看,如果我能以某种方式获得 TensorBoard,Keras / PlaidML 是一个大赢家。

@mirh感谢所有链接的精彩总结。 我认为你没有浪费你的 3 个小时...... :-)

我不知道 ROCm 是否会在我的工作站上运行 - 没有开源硬件测试仪可以给我一个是或否的答案。 我已经为此打开了一个问题,但没有收到任何回复。

正如我多次告诉你的那样,不,它不会起作用。
Pre GCN 3rd gen gpus 根本没有 ROCm 执行甚至工作的硬件。

SPIR(-V)..我不确定你在说什么。 关心这些不是你的工作。 Computecpp 是从 SYCL “命令”中生成的,然后它就是所有 (opencl) 驱动程序业务。

你有我暂时称之为 amdgpu-pro-opencl-only 的东西,我不确定那是什么问题。
编辑:为卢克的代码提供某种 ETA 也很酷

@znmeb和大家

我有(L)Ubuntu 17.10,包括。 内核 4.14.x 和来自 AMDGPU Pro 17.40 驱动程序的 OpenCL 库部件正在运行,并且可以在我的 AMD A12-9800E APU 上运行 OpenCL 应用程序,如 clinfo 或 Boinc(例如Engima @Home、Milkyway@Home)而不会出现问题。

我还可以成功编译和使用 tensorflow(当前版本 1.4.1)CPU 版本。 但我未能成功编译 tensorflow 的 OpenCL 版本。 我使用 computecpp 0.5(我可以下载的当前版本,无需注册)与 vanilla tensorflow 1.4.1 以及来自@lukeiwanski的 fork 的“dev/amd_gpu”分支。

那么,能否请成功编译 OpenCL 版本的 tensorflow 的人提供一些信息,即他/她正在使用哪个版本的 computecpp 库以及哪个 tensorflow git 的哪个分支?

谢谢

@AlphasCodes我没有在 Ubuntu 上运行任何东西——我所有的工作都在 Arch 上。 我确实让机器使用 Ubuntu 16.04.3 双启动,但 AMD 专有库还不能在那里工作。 据我所知,它们在 17.10 上不受支持,但如果您的 OpenCL 部件在 17.10 上运行,我可能会添加第三次引导 - 我有足够的磁盘空间。 ;-)

你得到什么样的错误? 如果它们是构建错误,则可能是 Bazel 不兼容。 Bazel 像 TensorFlow 一样不断向前发展,有时一个会领先另一个。

你的意思是,“不支持”?

.
至于 ubuntu,据说只支持 16.04.3 (至少在当时是正式的,考虑到即使是 arch 也可以在一些脚本魔法之后让它工作)
编辑:“完整”AMDGPU-PRO 驱动程序需要内核 4.9,这可能是问题所在

如果有人关心,AMDGPU-Pro 驱动程序 17.40 到 Arch 的移植正在进行中,并且在 GitHub 上非常活跃,网址为https://github.com/corngood/archlinux-amdgpu/pull/54

我们真的应该关闭这个问题,因为正如@mirh指出的那样,TensorFlow 使用的是 SYCL,而不是 OpenCL。 也许我们应该再开一个,“AMD 卡上的 TensorFlow”??

不,这是完全合法的。
您希望 tensorflow最终在 opencl 设备上运行,这就是目标。 合法和结束。
说它实际上是在使用 SYCL 只是我做出的技术上的挑剔,因为所有这些神奇随机技术的首字母缩略词都让我抓狂。
编辑:我还要感谢所有 codeplay 人员的出色工作

如果您想要为 amd 专门设计的东西,我建议您查看他们的hiptensorflow 。 仅 ROCm。 拜托,让我们抛开这个论点。

好的,我不知道我是否有足够的时间再次进行构建并在周末之前提供编译错误。 但是我将现有的文档添加到了新的 github 存储库中。

有关详细信息,请参阅https://github.com/AlphasCodes/DeepLearning (我的硬件/软件设置 + AMD OpenCL 设置 + Tensorflow 设置)。

@mirh澄清“神奇随机技术的首字母缩写词 [...] 让 [你] 发疯”:

在 Khronos Group 领域,OpenCL 是低级非单源 API,SYCL 是高级单源C++ 领域特定嵌入式语言 (DSeL)。 SYCL 预计将构建在 OpenCL 之上,因此当您使用 SYCL 时,通过传递性,您通常会使用 OpenCL。

由于 TensorFlow 使用 Eigen,它使用单源C++ 方法和单源CUDA,当它后来移植到 OpenCL 时,选择了 SYCL,因为它是 Khronos Group 拥有单源C++ 的标准方式。

但如果你想到 CUDA,它就更加微妙了。

几乎每个人都使用 CUDA 的高级单源版本,它实际上被命名为“CUDA Runtime API”。 这在某种程度上类似于 SYCL。
但实际上有一个鲜为人知的低级非单源CUDA 版本,称为“CUDA Driver API”,类似于 OpenCL,例如由“CUDA Runtime API”实现本身使用。

由于它是一种常见问题解答,我澄清了一点https://en.wikipedia.org/wiki/SYCLhttps://en.wikipedia.org/wiki/CUDA

ComputeCpp 是您与 TensorFlow 一起使用的 SYCL 实现,尚不支持 Ubuntu 17.10。 您需要坚持使用当前 LTS 的 Ubuntu 16.04。 说明和先决条件在这里https://developer.codeplay.com/computecppce/latest/getting-started-with-tensflow

顺便说一句,OpenCL 对 TensorFlow 的支持不仅仅意味着对 AMD 设备的支持。 SYCL 集成还支持其他 OpenCL 设备。 作为我们使用 TensorFlow 所做工作的一部分,当这些公司的最新驱动程序可用时,将提供对 ARM 和 Intel GPU 的支持。 我们还在努力为 R-Car 平台启用对瑞萨加速器处理器的支持。

@rodburns谢谢! 我使用 Arch 用户存储库中的 opencl-amd 库在 Arch Linux(4.14.4 内核)上工作。 该卡是博内尔岛(GCN 2.0)。 我将在该页面上运行测试以验证它是否在做它应该做的事情。

GCN 第二代(又名 1.1)如果有的话,2.0 不存在。
(应该弯腰如此迂腐)

成功!

@lukeiwanski fork 中最新的“dev/amd_gpu”分支提交修复了我的 Tensorflow OpenCL 编译问题。 我认为这是与 SysCL 1.2.1 相关的提交。

我成功编译了一个 Tensorflow OpenCL 版本,可以使用了。 有关详细信息,请参阅我的Tensorflow 设置文档

我还添加了一个基准测试页面,您可以在其中找到未来在不同 Tensorflow 设置(非 CPU 优化、CPU 优化、OpenCL)下我的设置的一些基准测试。

AMDGPU Pro 驱动程序版本 17.50 也适用于我。 我更新了相关的AMD OpenCL 设置文档。

感谢所有贡献者。

我做了一些基准测试,除了matmul_bench.py​​ 基准测试之外,iGPU 似乎比 4 个可用的 CPU 线程慢。

OpenCL Tensorflow 运行的初始化也比仅 CPU 的 OpenCL Tensorflow 运行慢得多。 CPU 需要 5 秒,OpenCL 需要 1-2 分钟。

有人可以确认这样的结果吗?

好的,我做了更多的故障排除。

  • 我使用了 Tensorflow MNIST 示例,请参阅Validate a Tensorflow Setup文档
  • 我使用“sudo cat /sys/kernel/debug/dri/0/amdgpu_pm_info”来检查/观察 iGPU 时钟/负载和“top”来检查 CPU 负载
  • 直到步骤 0 的初始化阶段大约需要 6 分钟,iGPU 负载约为 0%,iGPU 时钟为 300 MHz(最小可用时钟),python 进程 CPU 使用率约为 200%(= 2 个线程)
  • 从第 0 步开始,iGPU 负载约为 90%,iGPU 时钟始终从 654 MHz - 720 MHz - 800 MHz - 900 MHz(最大可用时钟)切换回来,python 进程 CPU 使用率约为 100%(= 1 CPU线)

我仍在尝试在 Arch 上进行编译。

我昨天用的。
14 小时后(是的,我的土豆很慢)我得到了这个二进制文件,如果你想试试的话。

我试图弄清楚发生了什么,但不幸的是我无法做到。 如果知道以下内容的人可以帮助我加快速度,我将不胜感激!

上面的大部分讨论都与让 Tensorflow 在 AMD 芯片上运行 OpenCL 加速有关。 我这样说对吗? 如果我想使用支持 opencl 的集成显卡 (intel HD 5000) 获得 gpu 加速 tensorflow,我的方法应该是什么?

提前致谢!

@znmeb嗨,埃德,感谢您的回复。 我已经下载了 OpenCL 并在我的系统上运行。 但我的问题是 - 我如何编译 tensorflow 以实际使用 OpenCL 库?

@AlphaCodes感谢您发布您的结果。 关于初始化时间,OpenCL的工作方式是代码在执行前编译,所以启动时间就是编译过程。

@brainwave对于英特尔设备,这里有一个带有@mirh的线程,它解释了如何消除对运行设备的限制。 我们已经看到英特尔驱动程序存在问题,这就是这些设备类型受到限制的原因,但我们希望更新的驱动程序能够很快用于改进支持的英特尔设备。 同时,您可以使用更改重新编译 TensorFlow 以测试您自己的英特尔硬件。 我们正在考虑删除代码库中的设备限制。

@AlphasCodes伙计们,我为可能幼稚的问题道歉,但为什么只构建 AMD GPU? OpenCL 不应该是标准的吗? 我是否正确理解它不能在安装了 OpenCL 2.0 驱动程序的 Intel Carbon X1 上运行?

如果您阅读了两次链接的问题,您会发现 amd gpu 没有任何内容。
英特尔目前被排除在外,但这与想要强迫用户无关,并且有一个临时的解决方法 - 如果真的有的话,请在那里讨论。

当我将 amd_gpu 分支与 jupyter 笔记本一起使用时,似乎有一个剩余线程。 即使在计算完成后,python 仍然使用 100% 的 CPU。 重新启动内核完成了杂散线程。 有没有其他人经历过这个?

@brainwave @unoexperto
抱歉,我无法为 Intel OpenCL 提供帮助,因为我只有 AMD OpenCL 硬件。

@desperadoduck
我还没有使用jupyter。 我使用普通的 bash shell 和虚拟 Python 3 环境(请参阅我的 Python 3 + Tensorflow 设置)。 但我无法重现该问题。 计算完成后,python 进程没有 CPU 使用率。

@rodburns
感谢您的信息。 是否可以加快初始编译时间? 例如,使用所有可用的 CPU 线程而不是仅 50%。

@brainwave @rodburns
对于 Linux 下的英特尔 GPU (Gen9),在使用 PlaidML 上的通用视觉网络进行基准测试时,我们发现英特尔的开源 Beignet 实现与封闭源代码相比明显更好的 DNN 性能。 Beignet 也更容易安装,这很好。

它是否支持 ubuntu17.10 上的英特尔图形 hd615(第 7 代 cpu)?

用于 linux64 的 opencl 驱动程序 SRB5.0 在 ubuntu17.10 上运行良好。

而且很久没更新了:
https://bitbucket.org/mehdi_goli/opencl/branch/IntelGPU

看在上帝的份上,您不能只阅读上面的 2(两个!)帖子吗?
在此处讨论缺乏 intel gpu(或 amd cpu)支持https://github.com/codeplaysoftware/computecpp-sdk/issues/78

@znmeb目标是充分利用各种计算资源(例如 cpu、gpu、DSP、任何其他协处理器)。
实际上,这取决于硬件供应商的支持:驱动程序和操作系统。
据我所知,由于视频驱动程序的限制,您可能无法同时为视频启用英特尔 GPU 和英伟达 GPU。 (您也许可以在它们之间切换)。
但是,opencl 可以同时使用它们。 它们都是其中的“设备”。

@choongng知道这很有趣,我们做了一些工作来帮助启用 Beignet,但这个项目的活动似乎有点安静。

@znmeb是的,任何 GPU 在小问题上的表现都可能不会好很多,不过很高兴你取得了一些进展!

@unoexperto带有 TensorFlow 的 ComputeCpp 可以被任何支持 SPIR OpenCL 中间指令的硬件使用,其中包括英特尔 GPU,但是就像这里的线程一样,我们故意阻止它运行,因为我们认为当前的驱动程序目前没有工作. 您可以删除该限制,因为听起来有些用户已经让它与不同的英特尔驱动程序一起使用。 我们还致力于为具有 OpenCL 驱动程序的ARMRenesas处理器启用此功能。

@sxpc722那应该可以了。 顺便说一句,新机器是 Windows 10,我不打算用 Linux 双重引导它,直到我绝对必须这样做! 我厌倦了为供应商寻找驱动程序和库错误(看着你,AMD)。 事实上,出于同样的 AMD 原因,我可能会在我的工作站上放置一个 Windows 分区。 ;-)

已经 14 天没有活动,并且此问题有受让人。请相应地更新标签和/或状态。

根据我的测试,Tensorflow AMD OpenCL 的性能非常慢。 所以我用另一个深度学习框架做了一些基本的测试。 您将在我的 GitHub 页面上找到我设置和基准。

长话短说。 另一个深度学习框架目前比 Tensorflow AMD OpenCL 快 10 倍左右。

@AlphasCodes @znmeb我知道 TF 团队更喜欢只保留 TF 线程,我们很高兴在 PlaidML 项目上主持 PlaidML 特定的对话。 也就是说,我们确实希望最终支持 TensorFlow 本身以及非 OpenCL 平台(例如 Apple 的 Metal for iOS,目前以原型形式存在)。

https://github.com/plaidml/plaidml

@choongng感谢我相应地编辑了我的消息的信息。

@znmeb AMD A12-9800E iGPU 应该是 GCN v3。

我进行基准测试/测试的主要原因和唯一原因是在我的问题“留在 AMD 或切换到 Nvidia 进行深度学习冒险”中找到答案。

答案是。 我真的很喜欢 AMD 的开源方法,但由于两个因素,我可能会转向 Nvidia。 首先,对于英伟达来说,深度学习软件堆栈(例如 Tensorflow)要成熟得多。 其次,显卡满足我非常特殊的需求(必须适合 Dan A4 SFX 机箱,并且必须非常安静/在满载数小时内几乎无噪音)非常有限,甚至在 AMD 方面不存在。

是否支持英特尔 GPU? 我认为我的 Iris Pro 可以加快长期训练的速度。

在 codeplaysoftware/computecpp-sdk#78 讨论缺乏 intel gpu(或 amd cpu)支持

https://github.com/codeplaysoftware/computecpp-sdk/issues/82

只是想了解一下这个问题的状态。 我可以说这个回购:

https://github.com/lukeiwanski/tensorflow

...使用 ComputeCpp 构建,是当前构建具有通用 AMD GPU 支持的 Tensorflow 的最佳选择吗? 如果是这样,是否有任何基准证据表明此构建提供了 CPU 的加速?

取决于“一般 AMD GPU 支持”的含义。 如果您的意思是非常旧的 dGPU 或 APU,我不知道。 但是如果你有更新的(第 2 代 GCN 或更新的),在 ROCm 上运行的 hipTensorFlow (v1.0.1) 运行良好。

@briansp2020是的,我已经看到 AMD 在 ROCm 上的工作。 不幸的是,他们只支持 Linux,而且他们的路线图上似乎也不支持任何其他操作系统。 我希望有一些支持 Windows 的东西。

@mjmax是否有适用于 Windows 的 GPU 加速 tensorflow 包? 我想,如果你想要 GPU 加速的深度学习,Linux 是唯一的选择。 如果将 TensorFlow 移植到 OpenCL,是否会更容易移植到 Windows? 我不确定为什么在支持 CUDA 的情况下,TensorFlow 在具有 GPU 加速的 Windows 上不可用。

我想这现在已经离题了,但是如果有人知道用于 GPU 加速的 Windows 的 TensorFlow 和/或 PyTorch,我也想知道它......

@briansp2020据我所知,Tensorflow 已经支持 Windows 上的 Nvidia GPU 加速。

CL tensofrflow 在 linux 上已经是一团糟了,别指望很快会有什么。
如果你想在那里加速,只有 plaidML。
(拜托,我们已经有 500 条评论了.. 让我们尝试只在真的、真的有必要时才发布)

@mirh OpenCL Caffe 可以在 Windows 上运行。 当然,就功能而言,它不是 TensorFlow,但对于必须部署在任何地方的软件来说,它是相当可靠的。

用 AMD 支持的 HIP 端口替换 openCL 端口怎么样?

https://github.com/ROCmSoftwarePlatform/hiptensorflow

哈哈! @LifeIsStrange生活其实很奇怪……你在为 AMD 的 HiP 营销团队工作吗? :-)
请查看本期主题:“OpenCL 支持”。

这意味着它是关于 Khronos 标准https://en.wikipedia.org/wiki/OpenCL(Op ​​enCL Khronos 工作组的另一个 SYCL 标准出现在“概述”部分的末尾)。

当然,在这个问题之外还有一个世界,但它是……在外面! :-)

请尽量不要通过在这个已经太冗长的讨论上发布一些随机帖子来不加考虑地增加宇宙的熵...... :-)
顺便说一句,这条评论适用于这里的其他一些海报,不仅仅是你。
这是一个解决技术问题的 GitHub 问题:让 TensorFlow 在支持 OpenCL 标准的设备上运行,而不是关于人们如何喜欢或不喜欢工具 A 或 B 的 Facebook 页面。:-)
但请随时发送一些与此问题相关的 git 提交,我们可以查看...

有一个支持 OpenCL 的 TensorFlow 分支https://github.com/hughperkins/tf-coriander

当然还有@benoitsteiner的工作https://github.com/benoitsteiner/tensorflow-opencl

恕我直言,主流 TF 仍然没有合并他们的工作是荒谬的。

这里的重点是让它像 lomg-as-it-is-OpenCL 一样运行,还是让它实际上运行得更快? 我宁愿没有一场圣战,而是专注于让它在几个 GPU 上快速运行。 LifeIsStrange 的重点是让它在 AMD GPU 上运行,然后 HIP 才有意义。 对于其他人来说,重点是让它在英特尔 GPU 或 Android 上运行,然后 OpenCL 更有意义。 GPU 语言一团糟,所以请保持实用,

如果我在这里阅读了一些评论,性能是 OpenCL 端口的问题。 但不幸的是,我看不到很多基准。 还有比这个更多的基准吗? https://github.com/AlphasCodes/DeepLearning/blob/master/Tensorflow_Benchmarks.md

据我了解,如果将 CUDA 与 OpenCL 进行比较,基准测试会很困难,因为您必须使用不同的硬件。 据称,nVidia 故意制造/允许他们的 OpenCL 实现在某种程度上被破坏,因此在相同硬件上进行基准测试总是会导致 CUDA 看起来很棒。

2018 年 2 月 12 日 14:26:11 GMT+00:00,VincentSC [email protected]写道:

这里的重点是让它像 lomg-as-it-is-OpenCL 一样运行,还是
让它实际上运行得更快? 我宁愿没有一场圣战,但
专注于让它在多个 GPU 上快速运行。 奇异人生
重点是让它在 AMD GPU 上工作,然后 HIP 变得很好
感觉。 对于其他人来说,重点是让它在英特尔 GPU 或
Android,然后是 OpenCL 更有意义。 GPU 语言是一种
乱七八糟,所以请保持实际,

如果我在这里阅读了一些评论,性能是一个问题
OpenCL 端口。 但不幸的是,我看不到很多基准。
还有比这个更多的基准吗?
https://github.com/AlphasCodes/DeepLearning/blob/master/Tensorflow_Benchmarks.md

--
你收到这个是因为你被提到了。
直接回复此邮件或在 GitHub 上查看:
https://github.com/tensorflow/tensorflow/issues/22#issuecomment -364936498

--
使用 K-9 Mail 从我的 Android 设备发送。 请原谅我的简短。

仅比较 2 个数字是没有信息的 - 如果 NVidia 上的 OpenCL 在其他 GPU 上以 4 倍速度运行,谁会在乎它是否以一半速度运行?

我认为我们需要这些基准:

  1. NV GPU 上的 CUDA(参考基准)
  2. https://github.com/hughperkins/tf-coriander在 AMD、Nvidia 和 Intel GPU 上
  3. https://github.com/benoitsteiner/tensorflow-opencl在 AMD、Nvidia 和 Intel GPU 上
  4. https://github.com/lukeiwanski/tensorflow在 AMD、Nvidia 和 Intel GPU 上

参考基准很容易找到。 我们这里有一些高端 GPU,所以只需要一个放置数字的地方(带有建筑文档的链接)。

OpenCL 支持 它必须成为现实。

cuda 太有限了,nvidia 不想分享。
cuda 仅适用于 Nv gpus。
这对 TensorFlow 来说是死胡同,
如果另一个“TensorFlow”出来但比 TensorFlow 支持更多。
如果 TensorFlow 仍然只支持 windows 中的 cuda。
你必须意识到 TensorFlow 不是唯一的选择。

为什么 OpenCL 比 HIP 更好? 我认为 OpenCL 未能获得关注,此时支持 OpenCL 可能会适得其反,并且会占用整个社区/行业的资源。 我宁愿看到 TensorFlow 直接支持 HIP,并让编译器/工具/库来处理可移植性。

软件支持一种语言/编程模型不是更好吗?

软件必须支持它必须支持的内容才能涵盖每个用例。
如果您有支持的硬件,那么 HIP 就是所有的花里胡哨(至少在纸面上)。 但是这个世界不仅仅是“更新的 AMD 和 nvidia 卡”。

现在,看在上帝的份上,请在这里抱怨任何问题。
在这里为所有对这个问题的延续感兴趣的人。

我认为,SPIR-V 将直接取代 CUDA 作为跨硬件替代方案:
http://alphanew.net/index.php?section=alphanew&site=overview&lang=eng&newsID=111

为什么谷歌仍然依赖 CUDA?

这些能帮上忙吗?

OpenCL 随机数生成(Thomas Wang's):

uint wang_hash(uint seed)
{
               seed = (seed ^ 61) ^ (seed >> 16);
               seed *= 9;
               seed = seed ^ (seed >> 4);
               seed *= 0x27d4eb2d;
               seed = seed ^ (seed >> 15);
               return seed;
}

void wang_rnd_0(__global unsigned int * intSeeds,int id)                
{
               uint maxint=0;
               maxint--;
               uint rndint=wang_hash(id);
               intSeeds[id]=rndint;
}

float wang_rnd(__global unsigned int * intSeeds,int id)                
{
               uint maxint=0;
               maxint--;
               uint rndint=wang_hash(intSeeds[id]);
               intSeeds[id]=rndint;
               return ((float)rndint)/(float)maxint;
}


// initialize each thread's own random number seed
__kernel void rnd_0(__global unsigned int * intSeeds)
{
               int id=get_global_id(0);
               wang_rnd_0(intSeeds,id);     
}

// get a new random value by each thread
__kernel void rnd_1(__global unsigned int * intSeeds)
{
               int id=get_global_id(0);
               float randomFloat=wang_rnd(intSeeds,id);
}

OpenCL SHA3hashing(忘了是谁写的)

https://gist.github.com/tugrul512bit/c8170f74846e36e350607664f12c525c

请删除受让人,因为此问题正在邀请外部贡献。 否则,删除contributions welcome标签。 谢谢你。

请删除受让人,因为此问题正在邀请外部贡献。 否则,删除contributions welcome标签。 谢谢你。

支持 OpenCL 符合 Google 的利益,
通过将特定(公司/品牌/供应商)的特定硬件作为软件的依赖项,您强制自己为硬件支付更多费用,市场竞争降低了成本。
谷歌从一开始就一直关注商品硬件,这对谷歌的成功(市场主导地位)至关重要,它具有较低的数据中心运营成本,支持革命性的慷慨基本上免费的服务产品,如 Gmail(存储空间)和谷歌照片(存储空间和自动标记)。

@wesamco不,这不一定符合 Google 的利益。 他们制造自己的硬件——称为“TensorBoard”,IIRC。 他们可以绕过 OpenCL 和 CUDA / CUDnn 并让开发板运行原始 TensorFlow 代码。

原始 TensorFlow 代码。

没有这样的东西——它不像未加工的食物。 TPU 需要自己的 DNN 库来处理不同类型的调用。

似乎是时候将上述讨论再次压缩到一个列表中了:

  • CodePlay 正在开发 SYCL 后端
  • Hugh Perkins 正在研究 tf-coriander
  • AMD 正在开发 HIP 后端
  • PlaidML 目前仅支持 CPU。
  • 对英特尔 GPU 的支持状态尚不清楚。

所以选择一个你喜欢的项目并开始支持他们。 也许每个小组都可以提供他们项目的状态更新?

请理解 OpenCL 已从完整语言转换为以 SPIRV(内核)表示的语言定义/硬件规范,然后可以在 OpenCL 驱动程序等平台上运行,然后也可以在 Vulkan 驱动程序上运行(平台)。 所以通过支持 SYCL,你也支持了 OpenCL。

完美的总结,但 plaidml 也可以在 gpus 上运行。
只是目前它们是 keras 的后端,而不是 tensorflow。 所以那里有点过时了。

大家好,
@VincentSC感谢您对不同努力的总结!

所以选择一个你喜欢的项目并开始支持他们。 也许每个小组都可以提供他们项目的状态更新?

SYCL 方法现在支持各种平台/设备。 我可以提到的是:

  • AMD GPU(FirePro W8100、R9 Nano 和 R9 380 系列)说明可在此处此处获得
  • 此处提供 ARM Mali (HiKey 960) 说明
  • 带有 Intel NEO OpenCL 驱动程序的 Intel GPU(SkyLake 系列)

谈到 AMD,目前上面提到的 GPU 正在使用 AMDGPU-Pro 驱动程序 17.40-xxx 并启用了旧版 OpenCL。
我看不出其他系列无法正常工作的任何明显原因(假设支持 SPIR / SPIR-V)

我们关注的主要平台是 Linux - 但是,我们将继续努力在未来启用 Windows。 我们没有计划在不久的将来支持 OSX。 我知道悲伤的脸。

我们的重点是提高 CNN 的性能。 当前的性能尚未优化,与我们看到的结果相去甚远。 也就是说,我们已经在不同目标上击败了大多数模型的 CPU 性能。

为了加快开发周期并减少 TensorFlow 的整体编译时间(以及提高可移植性),我们正在开发 Eigen、BLAS 和 DNN 库。
这些库旨在解决性能问题,并建立一个可移植库的生态系统,可以轻松地与 TensorFlow 等复杂项目集成。

下面,请参阅我们目前可以分享的性能图表。 它们取自我的 fork https://github.com/lukeiwanski/tensorflow/tree/dev/amd_gpu ,地址为 271093b21cc5ca38e8699e154b5cada96bd7ac0d。
使用的基准是https://github.com/tensorflow/benchmarks

cpuvssycl
图表标准化为 Intel i7-4790K 结果。

一旦发生这种情况,我们将在 TensorFlow 中跟进对 Eigen 的更改。

希望有帮助,
卢克

对于支持 GPU/OpenCL 的移动设备上的深度学习推理,您可以查看MACE ,它针对 Adreno、Mali 和 PowerVR GPU 进行了优化。 以下是一些基准测试结果

@keryell @benoitsteiner ,集成需要哪个版本的 tensorflow 和 trisycl。 我在使用最新的 trisycl 版本构建 tensorflow (1.9) 时遇到问题。

不幸的是,最新的 TensorFlow 使用了比当前 triSYCL 可以处理的更高级的功能,因此您必须使用 ComputeCpp,这是目前唯一完全兼容的 SYCL 实现......

Tensorflow 由 Google Brain 支持,Google 与 nVidia 有合作关系,我想我们不会期望 Tensorflow 支持 OpenCL
需要大的 OpenCL 社区努力

请支持 OpenCL!

OpenCL 也更适合我们。

@Makhaon我也是。 我买不起带有 NVIDIA 显卡的机器。

除了以上 2 篇文章,我想补充一点,现在 AMD 的 Vega GPU(包括 Raven Ridge APU 内部的那些)可以以两倍的 FLOPS 执行 FP16,所以如果 TF 可以支持它们(通过 OpenCL),它真的可以帮助人们更少的预算。 还有很多人是学生,如果我们让他们使用 TF 作为他们 DNN 之旅的起点,他们可能会在以后坚持使用 TF,甚至会告诉其他人有关 TF 的信息; 这是帮助扩展这个项目的好方法。

我认为这个线程对开发人员来说几乎没有意义(噪音太大 - 我会添加更多;-)但我认为很多评论都忽略了这一点:
如果你想用 AMD 卡运行 Tensorflow,OpenCL 不是你想要的——请前往https://github.com/ROCmSoftwarePlatform/并安装 ROCm 堆栈。 AFAIK AMD 目前的策略是基于 ROCm 而不是 OpenCL for Tensorflow/pytorch

通用 OpenCL 维护过多/没有提供足够的性能优势,不值得 AMD。 因此,仅当您正在运行(例如)仅使用 OpenCL 的 ARM 平台时,此票证才有意义

(免责声明:只是一个局外人,对 Tensorflow 开发没有真正的了解,所以上面的信息可能完全错误且具有误导性。如果你知道得更好,请随意抨击我。)

只是想一想,带有新 GPU 卸载的 llvm 怎么样? 这将在 tensorflow 和 cuda 特定代码之间进行高度抽象。

你们所有人只阅读了上面的 10 篇文章并注意到已经有一个 lukeiwanski/codeplaysoftware 的 fork 可以尝试吗?
(我也向小米致敬,曾经为一些严肃的开源工作做出过贡献)

@FelixSchwarz只是让您知道 ROCm 使用 OpenCL,它是 AMD 在 Linux 上的用户空间 OpenCL 驱动程序(这就是它不支持 Windows 的原因),所以如果您不知道 AMD 在 Linux 上的驱动程序生态系统是如何工作的,他们有他们的内核端驱动程序 AMDGPU 和 AMDKFD(现在正在合并到 AMDGPU)然后是用户空间驱动程序 RadeonSI(用于 OpenGL)RadV/AMDVLK(用于 Vulkan)和 ROCm(用于 OpenCL)。

从这个错误和其他分支的动态来看,谷歌对此的兴趣为零,并且永远不会在官方存储库中实现这一点。 我会投票赞成关闭这个问题(或锁定它),以免给每个人任何错误的希望。

问题应该在这里至少指向所有愿意的人
不可避免地再次打开它。

2018 年 9 月 15 日星期六 09:45 Anton Kochkov [email protected]写道:

从这个 bug 和其他分叉的动态来看,谷歌为零
对此感兴趣,并且永远不会在官方中实施
存储库。 我会投票赞成关闭这个问题(或锁定它)
不要给每个人任何虚假的希望。


您收到此消息是因为您订阅了此线程。
直接回复此邮件,在 GitHub 上查看
https://github.com/tensorflow/tensorflow/issues/22#issuecomment-421535747
或使线程静音
https://github.com/notifications/unsubscribe-auth/AB1qNyDrfbiQ4h3kQyqObEfpK3O0FqRGks5ubKIBgaJpZM4Gex3i
.

有一个支持 Movidius Pi Hat 的 TensorRT。 而那个 Movidius Pi Hat 就是谷歌 45 美元的“AIY Vision Kit”。 谷歌链接到目标购买它。

这与 CUDA 或 Nvidia 没有任何联系? 说它使用英特尔芯片。 从本质上讲,也许芯片是 FPGA? 有人知道更多吗?

我对大型 Movidius 单元了解很多——它只是推理,它运行 TensorFlow 或 Caffe 预编译模型。 IIRC 它们都处于 16 位模式。

Movidius 芯片本身功能更强大,但您必须是合格的合作伙伴才能获得 SDK。

有更新吗? 这个问题已经超过 3 年了。

是的,只看最后几个帖子。

@filips123不,没有更新,并且永远不会在任何可预见的未来 - 这种可能性低于外星人入侵并找到一种及时旅行的方式。

这个英特尔计划 PlaidML 运行良好,值得一试。
https://github.com/plaidml/plaidml
它在 mac 上的 opencl OR metal 上运行。 它适用于我一直在寻找的 Macbook Pro AMD gpus。
同时,你们能帮忙投票支持 PlaidML 中的 Pytorch 吗? https://github.com/plaidml/plaidml/issues/63

PlaidML 肯定很好而且花花公子(我,一方面,不知何故,在 opencl 上的 nvidia gpu 上可以获得比 tf 的 cuda 本身更高的性能)..
但它是 keras 的后端? 完全替代 tensorflow,你知道,这是我们正在讨论的 repo?
(据我所知,最新的 tf 版本可以直接将模型导出到 keras 吗?就是这样..)

无论如何,第四次该死的,如果你想要一个关于 opencl的最新解决方案并且仍在积极开发中的东西(以及有实际机会在这里真正合并的东西),那么只有代码播放堆栈。
再次:
https://developer.codeplay.com/computecppce/latest/tensorflow-overview
https://github.com/Rbiessy/tensorflow/tree/dev/amd_gpu

PlaidML 肯定很好而且花花公子(我,一方面,不知何故,在 opencl 上的 nvidia gpu 上可以获得比 tf 的 cuda 本身更高的性能)..
但它是 keras 的后端? 完全替代 tensorflow,你知道,这是我们正在讨论的 repo?
(据我所知,最新的 tf 版本可以直接将模型导出到 keras 吗?就是这样..)

无论如何,第四次该死的,如果你想要一个关于 opencl的最新解决方案,并且某些东西仍在积极开发中(_还有_有实际机会在这里真正合并的东西),只有代码播放堆栈。
再次:
https://developer.codeplay.com/computecppce/latest/tensorflow-overview
https://github.com/Rbiessy/tensorflow/tree/dev/amd_gpu

抱歉,我没有意识到没有 tensorflow 支持。 我假设的大脑认为 keras gpu 支持 == tensorflow 支持。

plaidML 超级酷。 在 keras 上工作。
当然,我必须将一些 tf 代码传输到纯 keras 才能在 plaidML 后端工作(例如 tf.image.ssim)
但结果 - 我的代码适用于 NVIDIA 和 AMD 卡。

plaidML 也是研究人员的天堂。 它会自动为您将在“Tile”语言上编写的任何函数生成渐变,并且它将以 80% 的 tensorflow 速度在您的 GPU 上运行。

所以我不明白为什么 ML 研究人员仍在使用 PyTorch? 让我们用英特尔的 plaidML 来推动 ML 科学吗?

@iperov想知道为什么几乎没有人使用 PlaidML 吗?

  1. 与 Tensorflow 的 CUDA 后端相比,它在 AMD 的 OpenCL 实现上运行速度非常慢,因此至少有一半的理由使用它。 性能如此糟糕以至于使用带有 CPU 的 Tensorflow 具有竞争力,甚至完全击败使用 PlaidML 的硬件?

  2. 没有人对维护他们专门的 Tile 编程语言感兴趣,只有像纯数学教授这样的人才会编造这种语言,所以 PlaidML 的代码质量只会付诸东流,没有头脑正常的认真程序员会想要处理过于聪明的代码......

  3. 这几乎与#2 相关,但自从英特尔收购 Vertex.AI 以来,他们不再关心 PlaidML。 英特尔的 GPU 计算加速机器学习解决方案正在引入一种专门用于深度学习的新编译器,现在称为nGraph ,以将 Tensorflow、PyTorch 或其他深度学习框架作为它们的后端。 当他们拥有 nGraph 时,他们没有理由继续开发 PlaidML 作为他们的中介......

人们使用 PyTorch 是出于其他原因,例如可维护性或其他功能,因此总结 PlaidML 是英特尔的工具,他们可能不打算让它在他们计划的最后部分发挥任何作用。 nGraph 当前的 Intel GPU 后端基于 OpenCL 2.1,其中只有 Intel 有一个符合要求的实现,因此 Intel 的存在只是为了寻找自己,而不是纯粹为了改进机器学习。 当英特尔继续进一步开发 nGraph 时,我看不到他们继续仅将其 GPU 后端基于 OpenCL 2.1,因为许多深度学习框架具有与 OpenCL、Metal 或 Vulkan 的单独源编程模型不兼容的模板内核,所以它可能仅用于实验目的。 英特尔的最终 GPU 后端可能要么基于 SYCL 2.2,要么基于其他完全不同的东西,比如 OpenMP,也许他们甚至会带来供应商特定的解决方案......

至于 AMD,谁在乎? OpenCL 与他们无关,他们终于在 HIP 上展示了一些成果......

@iperov想知道为什么几乎没有人使用 PlaidML 吗?

  1. 与 Tensorflow 的 CUDA 后端相比,它在 AMD 的 OpenCL 实现上运行速度非常慢,因此至少有一半的理由使用它。 性能如此糟糕以至于使用带有 CPU 的 Tensorflow 具有竞争力,甚至完全击败使用 PlaidML 的硬件?
  2. 没有人对维护他们专门的 Tile 编程语言感兴趣,只有像纯数学教授这样的人才会编造这种语言,所以 PlaidML 的代码质量只会付诸东流,没有头脑正常的认真程序员会想要处理过于聪明的代码......
  3. 这几乎与#2 相关,但自从英特尔收购 Vertex.AI 以来,他们不再关心 PlaidML。 英特尔的 GPU 计算加速机器学习解决方案正在引入一种专门用于深度学习的新编译器,现在称为nGraph ,以将 Tensorflow、PyTorch 或其他深度学习框架作为它们的后端。 当他们拥有 nGraph 时,他们没有理由继续开发 PlaidML 作为他们的中介......

人们使用 PyTorch 是出于其他原因,例如可维护性或其他功能,因此总结 PlaidML 是英特尔的工具,他们可能不打算让它在他们计划的最后部分发挥任何作用。 nGraph 当前的 Intel GPU 后端基于 OpenCL 2.1,其中只有 Intel 有一个符合要求的实现,因此 Intel 的存在只是为了寻找自己,而不是纯粹为了改进机器学习。 当英特尔继续进一步开发 nGraph 时,我看不到他们继续仅将其 GPU 后端基于 OpenCL 2.1,因为许多深度学习框架具有与 OpenCL、Metal 或 Vulkan 的单独源编程模型不兼容的模板内核,所以它可能仅用于实验目的。 英特尔的最终 GPU 后端可能要么基于 SYCL 2.2,要么基于其他完全不同的东西,比如 OpenMP,也许他们甚至会带来供应商特定的解决方案......

至于 AMD,谁在乎? OpenCL 与他们无关,他们终于在 HIP 上展示了一些成果......

手机和树莓派 odroid 等 arm 机器内的所有 GPU 怎么样?
他们不支持opencl?
谷歌应该关心在 android 上的 gpu 上插入 tensorflow。
最大的神经网络训练库只运行在 Nvidia gpu 上,它只会让 Nvidia gpu 越来越贵(因为人们和公司只购买它用于专业的神经网络训练),然后谷歌将因此损失更多的钱。

@Degerz你来自哪个星球?
您如何比较 tf-CPU 和 AMD GPU ?
plaidML x30 上的 AMD GPU 比 tf-CPU 快

  1. 与 Tensorflow 的 CUDA 后端相比,它在 AMD 的 OpenCL 实现上运行速度非常慢,因此至少有一半的理由使用它

在我的 deepfakes 测试中,OpenCL 只慢了 20%,但在一些迷你网络中,OpenCL 快了 20%。

我的项目 DeepFaceLab 有很多用户一直在等待 AMD 的支持。 当 deepfakes 终于可以在 AMD 卡上进行训练时,有多少人感到高兴。
plaidML 也是开箱即用支持 AMD/IntelHD 的 keras 的唯一后端。
如果出现新的 keras AMD 后端,我的项目当然会切换到它。
PyTorch 没有未来。

plaidML 需要维护什么? Ops 是可自动区分的,无需维护。

只有像纯数学教授这样的人才会编造的平铺编程语言

机器学习是由数学教授发明的,不是吗?

@talregev ARM 或 Broadcom 怎么样? 前者可能有低于标准的 OpenCL 实现,而后者甚至没有正式提供 OpenCL 驱动程序! 为硬件供应商创建和维护一个称职的计算堆栈不是 Google 的责任……

@iperov您意识到在 PlaidML 上使用嵌入层训练神经网络很痛苦,对吧? PlaidML 也有许多其他限制,例如不是非常适合 DenseNets,或者它的计算图是静态的,而且 PlaidML 甚至可以很好地与 RNN 配合使用吗?

至于你的项目,不用担心。 您将继续使用像 Tensorflow 这样更好的东西,因为一旦 MIOpen 进入上游,AMD 将很快为其提供原生 GPU 后端,这是他们用于深度神经网络的 GPU 加速原语库,类似于他们的竞争对手的 cuDNN 库,两者都将使 PlaidML 留在性能方面的灰尘。 反正谁在乎英特尔 iGPU? 如果英特尔真正致力于在其未来的独立显卡硬件上提供高性能深度学习,那么他们将像之前的其他公司(AMD/HIP 和 Nvidia/CUDA)一样提供单一来源选项......

PyTorch 没有未来。

羡慕多吗? PyTorch 比 PlaidML 流行约 10 倍,DL 中的最新技术可以在 PyTorch 上轻松实现,大量不同的贡献者,并且一直由 Facebook 积极开发,而英特尔近一个月没有为 PlaidML 做出贡献?

plaidML 需要维护什么? Ops 是可自动区分的,无需维护。

所以我认为 PlaidML 在未来不应该收到任何新的修复或新功能? 如果您没有看到改进代码的价值,那么说服您承认 PlaidML 的明显缺陷毫无意义......

机器学习是由数学教授发明的,不是吗?

这并不意味着我们必须使用它们组成的任何编程语言,尤其是在 Tile 的情况下,优雅显然比可读性更受青睐。 难怪为什么这么多潜在的贡献者害怕贡献...

耶稣,我希望你们 STFU 并重新开始工作。 我将不得不退订票,因为收到带有火焰战争的电子邮件令人难以忍受。 太糟糕的维护者不会使线程静音。

@gunan @caisq @sanjoy你能做点什么吗?

此页面是否有帮助?
0 / 5 - 0 等级