如何在非 NVIDIA 设置上加速深度学习?
How can I speed up deep learning on a non-NVIDIA setup?
由于我只有 AMD A10-7850 APU,没有足够的资金购买 800-1200 美元的 NVIDIA 显卡,因此我正在努力利用我所拥有的资源来加快深度通过 tensorflow/keras.
学习
最初,我使用的是预编译版本的 Tensorflow。 InceptionV3 大约需要 1000-1200 秒来计算 1 个纪元。它一直很慢。
为了加快计算速度,我先用优化器(使用AVX,和SSE4指令)自己编译了Tensorflow。这导致计算时间减少了大约 40%。上面执行的相同计算现在只需大约 600 秒即可完成计算。这几乎可以忍受 - 有点像你可以看着油漆变干。
我正在寻找进一步减少计算时间的方法。我只有一个集成的 AMD 显卡,它是 APU 的一部分。 (如何)(C/c)我利用这个资源来进一步加速计算?
更一般地说,假设还有其他人具有类似的货币限制和英特尔设置。没有独立的 NVIDIA 卡的人如何利用他们的集成图形芯片或其他非 NVIDIA 设置来实现比 CPU 更快的性能?那可能吗? Why/Why 不是吗?需要做什么来实现这个目标?或者这在不久的将来(2-6 个月)是否可能?怎么样?
如果您的平台支持 opencl,您可以考虑将其与 tensorflow 一起使用。在 this github repository. Some preliminary instructions are at the documentation section of of this github repository 的 Linux 上有一些实验支持。
研究这个话题几个月后,我看到了 3.5 条可能的前进道路:
1.) Tensorflow + OpenCl 如上面的评论所述:
这个领域似乎有一些动向。在 Codeplay,Lukasz Iwanski 刚刚发布了一个关于如何使用 opencl 将 tensorflow 获取到 运行 的综合答案(我将只提供如上所述的 link,因为那里的信息可能会更改):https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
使用集成显卡的潜力非常诱人。探索这种组合与 APU 的使用也很值得。但我不确定这将如何工作,因为 OpenCl 支持仍处于开发初期,而且硬件支持非常有限。此外,OpenCl 与手工制作的优化代码库不同。 (2017 年 4 月 24 日更新:在 运行 之后,我得到了要编译的代码,遇到了一些问题 here!)不幸的是,希望提高速度 在我的设置中(iGPU) 没有实现。
CIFAR 10 数据集:
- Tensorflow(通过 pip ak 未优化):1700 秒/纪元,390% CPU
利用。
- Tensorflow(SSE4、AVX):1100 秒/纪元,390% CPU
利用。
- Tensorflow(opencl + iGPU):150% 时 5800 秒/纪元 CPU
和 100% 的 GPU 利用率。
您的里程可能会有很大差异。所以我想知道其他人对您的设置有什么看法(未优化与优化与 opencl)?
需要注意的是:opencl 实现意味着所有繁重的计算都应该在 GPU 上完成。 (更新于2017/4/29)但实际情况并非如此,因为某些功能尚未实现。这导致 unnecessary copying back and forth of data between CPU and GPU ram. Again, imminent changes 应该改善这种情况。此外,对于那些有兴趣提供帮助和想要加快速度的人,我们可以做一些对 tensorflow with opencl 的性能产生可衡量影响的事情。
但就目前而言:1 个 iGPU << 4 CPUS 与 SSE+AVX。也许具有更大 RAM and/or opencl 2.0 实现的更强大的 GPU 可能会产生更大的差异。
在这一点上,我应该补充一点,至少 Caffe and/or Theano + OpenCl 也在进行类似的努力。在所有情况下,限制步骤似乎是将 CUDA/cuDNN 功能手动移植到 openCl 范例。
2.) RocM + MIOpen
RocM 代表 Radeon Open Compute,似乎是 is/will 使深度学习在非 NVIDIA(主要是 Radeon 设备)上成为可能的举措的大杂烩。它包括 3 个主要组成部分:
- HIP:一种将 CUDA 代码转换为 AMD GPU 可以使用的代码的工具。
- ROCk:用于 AMD CPU+GPU 设备的 64 位 linux 内核驱动程序。
- HCC:一个 C/C++ 编译器,可将代码编译成适用于异构系统架构环境 (HSA) 的代码。
显然,RocM 旨在发挥 AMD 在 CPU 和 GPU 技术方面的优势。他们加速深度学习的方法利用了这两个组件。作为 APU 所有者,我对这种可能性特别感兴趣。但请注意:Kaveri APU 的支持有限(仅支持集成图形)。未来的 APU 尚未发布。看来,要使这个项目达到成熟状态,这里还有很多工作要做。鉴于 AMD 已宣布他们的 Radeon Instinct 卡将于今年(2017 年)发布,大量工作有望在一年内使这种方法可行。
我的问题是 RocM 正在提供用于构建深度学习库的工具。它们本身并不代表深度学习库。作为一个不专注于工具开发的数据科学家,我只想要一些有用的东西。并且不一定对构建我想要的然后进行学习感兴趣。在我所在的公司,一天中没有足够的时间来做好这两件事。
NVIDIA 当然有 CUDA 和 cuDNN,它们是针对 NVIDIA GPU 优化的手工汇编代码库。所有主要的深度学习框架都建立在这些专有库之上。 AMD 目前根本没有类似的东西。
我不确定 AMD 在这方面能否达到 NVIDIA 的水平。但在 Carlos Perez 于 2017 年 4 月 3 日发表的一篇文章 here. A recent lecture at Stanford 中可以看出 AMD 的意图,该文章还笼统地谈到了 Ryzen、Vega 和深度学习的结合。从本质上讲,这篇文章指出 MIOpen 将代表这个为 AMD 设备手工制作的优化深度学习函数库。这个库定于 2017 年上半年发布。我不确定这些库将在多长时间内被纳入主要的深度学习框架,以及此时功能实现的范围是什么。
但显然,AMD has already worked with the developers of Caffe to "hippify" the code basis。基本上,CUDA 代码通过 HIP 自动转换为 C 代码。自动化处理了绝大多数代码基础,只有不到 0.5% 的代码必须更改并需要人工关注。将其与手动翻译成 openCl 代码进行比较,人们开始觉得这种方法可能更可持续。我不清楚的是低级汇编语言优化的用武之地。
(更新2017-05-19)不过随着AMD Vega卡的发布在即(首先是非消费级的专业Frontier Edition卡),有迹象表明今天发布的major deep learning frameworks will be supported through the MIOpen framework. A Forbes article进展顺利就性能而言,MiOpen 刚刚接管了过去几个月:它看起来很重要。
(更新2017-08-25) MiOpen正式发布。我们在这里不再谈论假设。现在我们只需要试试这个框架的效果如何。
3.) 霓虹灯
Neon is Nervana's (now acquired by Intel) open-source deep-learning framework. The reason I mention this framework is that it seems to be fairly straightforward to use. The syntax is about as easy and intuitive as Keras. More importantly though, this framework has achieved speeds up to 2x faster than Tensorflow on some benchmarks 由于对这些计算进行了一些手工编写的汇编语言优化。潜在地,将计算时间从 500 secs/epoch 减少到 300 secs/epoch 是不容小觑的。 300 秒 = 5 分钟。所以一个人可以在一小时内完成 15 个纪元。在大约 3.5 小时内完成了大约 50 个纪元!但理想情况下,我想在一小时内完成这些类型的计算。要达到这些水平,我需要使用 GPU,而在这一点上,只有 NVIDIA 在这方面提供全面支持:Neon 在 GPU 可用时也使用 CUDA 和 cuDNN(当然,它必须是 NVIDIA GPU ).如果您可以访问其他英特尔硬件,这当然是一种有效的追求方式。毕竟,开发 Neon 的动机是让事情在非 NVIDIA 设置上也能以最佳方式工作(比如 Nervana 的自定义 CPUs,现在是英特尔 FPGA 或 Xeon Phis)。
3.5.) 英特尔 Movidius
2017-08-25 更新:我遇到了 this article。英特尔发布了基于 USB3.0 棒的 "deep learning" 加速器。显然,它与 Cafe 一起工作,并允许用户执行常见的基于 Cafe 的网络微调和推理。重要的是要强调:如果你想从头开始训练自己的网络,这里的措辞非常模糊。因此,我假设,除了微调网络之外,训练本身仍然应该在具有更多并行计算的东西上进行。真正令人兴奋的是:当我查看定价时,这根棍子的价格仅为 79 美元。与普通 NVIDIA 1070-80(ti) 卡的成本相比,这不算什么。如果你只是想使用一些相关任务已经可用的通用网络拓扑来解决一些视觉问题,你可以使用这个棒来微调它以适应你自己的使用,然后编译代码并将它放入这个棒中以快速进行推理。许多用例都可以用这根棍子覆盖,而且 79 美元也是值得的。这是英特尔,他们提议全力以赴。他们的模型是使用云(即 Nervana Cloud)进行训练。然后,使用该芯片进行原型推理或能耗重要的推理。这是否是正确的方法留给 reader 来回答。
目前看来深度学习没有NVIDIA还是很难实现。一些有限的速度增益是困难的,但通过使用 opencl 可能是可能的。其他举措听起来很有希望,但需要时间来理清这些举措将产生的真正影响。
由于我只有 AMD A10-7850 APU,没有足够的资金购买 800-1200 美元的 NVIDIA 显卡,因此我正在努力利用我所拥有的资源来加快深度通过 tensorflow/keras.
学习最初,我使用的是预编译版本的 Tensorflow。 InceptionV3 大约需要 1000-1200 秒来计算 1 个纪元。它一直很慢。
为了加快计算速度,我先用优化器(使用AVX,和SSE4指令)自己编译了Tensorflow。这导致计算时间减少了大约 40%。上面执行的相同计算现在只需大约 600 秒即可完成计算。这几乎可以忍受 - 有点像你可以看着油漆变干。
我正在寻找进一步减少计算时间的方法。我只有一个集成的 AMD 显卡,它是 APU 的一部分。 (如何)(C/c)我利用这个资源来进一步加速计算?
更一般地说,假设还有其他人具有类似的货币限制和英特尔设置。没有独立的 NVIDIA 卡的人如何利用他们的集成图形芯片或其他非 NVIDIA 设置来实现比 CPU 更快的性能?那可能吗? Why/Why 不是吗?需要做什么来实现这个目标?或者这在不久的将来(2-6 个月)是否可能?怎么样?
如果您的平台支持 opencl,您可以考虑将其与 tensorflow 一起使用。在 this github repository. Some preliminary instructions are at the documentation section of of this github repository 的 Linux 上有一些实验支持。
研究这个话题几个月后,我看到了 3.5 条可能的前进道路:
1.) Tensorflow + OpenCl 如上面的评论所述:
这个领域似乎有一些动向。在 Codeplay,Lukasz Iwanski 刚刚发布了一个关于如何使用 opencl 将 tensorflow 获取到 运行 的综合答案(我将只提供如上所述的 link,因为那里的信息可能会更改):https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl
使用集成显卡的潜力非常诱人。探索这种组合与 APU 的使用也很值得。但我不确定这将如何工作,因为 OpenCl 支持仍处于开发初期,而且硬件支持非常有限。此外,OpenCl 与手工制作的优化代码库不同。 (2017 年 4 月 24 日更新:在 运行 之后,我得到了要编译的代码,遇到了一些问题 here!)不幸的是,希望提高速度 在我的设置中(iGPU) 没有实现。
CIFAR 10 数据集:
- Tensorflow(通过 pip ak 未优化):1700 秒/纪元,390% CPU 利用。
- Tensorflow(SSE4、AVX):1100 秒/纪元,390% CPU 利用。
- Tensorflow(opencl + iGPU):150% 时 5800 秒/纪元 CPU 和 100% 的 GPU 利用率。
您的里程可能会有很大差异。所以我想知道其他人对您的设置有什么看法(未优化与优化与 opencl)?
需要注意的是:opencl 实现意味着所有繁重的计算都应该在 GPU 上完成。 (更新于2017/4/29)但实际情况并非如此,因为某些功能尚未实现。这导致 unnecessary copying back and forth of data between CPU and GPU ram. Again, imminent changes 应该改善这种情况。此外,对于那些有兴趣提供帮助和想要加快速度的人,我们可以做一些对 tensorflow with opencl 的性能产生可衡量影响的事情。
但就目前而言:1 个 iGPU << 4 CPUS 与 SSE+AVX。也许具有更大 RAM and/or opencl 2.0 实现的更强大的 GPU 可能会产生更大的差异。
在这一点上,我应该补充一点,至少 Caffe and/or Theano + OpenCl 也在进行类似的努力。在所有情况下,限制步骤似乎是将 CUDA/cuDNN 功能手动移植到 openCl 范例。
2.) RocM + MIOpen
RocM 代表 Radeon Open Compute,似乎是 is/will 使深度学习在非 NVIDIA(主要是 Radeon 设备)上成为可能的举措的大杂烩。它包括 3 个主要组成部分:
- HIP:一种将 CUDA 代码转换为 AMD GPU 可以使用的代码的工具。
- ROCk:用于 AMD CPU+GPU 设备的 64 位 linux 内核驱动程序。
- HCC:一个 C/C++ 编译器,可将代码编译成适用于异构系统架构环境 (HSA) 的代码。
显然,RocM 旨在发挥 AMD 在 CPU 和 GPU 技术方面的优势。他们加速深度学习的方法利用了这两个组件。作为 APU 所有者,我对这种可能性特别感兴趣。但请注意:Kaveri APU 的支持有限(仅支持集成图形)。未来的 APU 尚未发布。看来,要使这个项目达到成熟状态,这里还有很多工作要做。鉴于 AMD 已宣布他们的 Radeon Instinct 卡将于今年(2017 年)发布,大量工作有望在一年内使这种方法可行。
我的问题是 RocM 正在提供用于构建深度学习库的工具。它们本身并不代表深度学习库。作为一个不专注于工具开发的数据科学家,我只想要一些有用的东西。并且不一定对构建我想要的然后进行学习感兴趣。在我所在的公司,一天中没有足够的时间来做好这两件事。
NVIDIA 当然有 CUDA 和 cuDNN,它们是针对 NVIDIA GPU 优化的手工汇编代码库。所有主要的深度学习框架都建立在这些专有库之上。 AMD 目前根本没有类似的东西。
我不确定 AMD 在这方面能否达到 NVIDIA 的水平。但在 Carlos Perez 于 2017 年 4 月 3 日发表的一篇文章 here. A recent lecture at Stanford 中可以看出 AMD 的意图,该文章还笼统地谈到了 Ryzen、Vega 和深度学习的结合。从本质上讲,这篇文章指出 MIOpen 将代表这个为 AMD 设备手工制作的优化深度学习函数库。这个库定于 2017 年上半年发布。我不确定这些库将在多长时间内被纳入主要的深度学习框架,以及此时功能实现的范围是什么。
但显然,AMD has already worked with the developers of Caffe to "hippify" the code basis。基本上,CUDA 代码通过 HIP 自动转换为 C 代码。自动化处理了绝大多数代码基础,只有不到 0.5% 的代码必须更改并需要人工关注。将其与手动翻译成 openCl 代码进行比较,人们开始觉得这种方法可能更可持续。我不清楚的是低级汇编语言优化的用武之地。
(更新2017-05-19)不过随着AMD Vega卡的发布在即(首先是非消费级的专业Frontier Edition卡),有迹象表明今天发布的major deep learning frameworks will be supported through the MIOpen framework. A Forbes article进展顺利就性能而言,MiOpen 刚刚接管了过去几个月:它看起来很重要。 (更新2017-08-25) MiOpen正式发布。我们在这里不再谈论假设。现在我们只需要试试这个框架的效果如何。
3.) 霓虹灯
Neon is Nervana's (now acquired by Intel) open-source deep-learning framework. The reason I mention this framework is that it seems to be fairly straightforward to use. The syntax is about as easy and intuitive as Keras. More importantly though, this framework has achieved speeds up to 2x faster than Tensorflow on some benchmarks 由于对这些计算进行了一些手工编写的汇编语言优化。潜在地,将计算时间从 500 secs/epoch 减少到 300 secs/epoch 是不容小觑的。 300 秒 = 5 分钟。所以一个人可以在一小时内完成 15 个纪元。在大约 3.5 小时内完成了大约 50 个纪元!但理想情况下,我想在一小时内完成这些类型的计算。要达到这些水平,我需要使用 GPU,而在这一点上,只有 NVIDIA 在这方面提供全面支持:Neon 在 GPU 可用时也使用 CUDA 和 cuDNN(当然,它必须是 NVIDIA GPU ).如果您可以访问其他英特尔硬件,这当然是一种有效的追求方式。毕竟,开发 Neon 的动机是让事情在非 NVIDIA 设置上也能以最佳方式工作(比如 Nervana 的自定义 CPUs,现在是英特尔 FPGA 或 Xeon Phis)。
3.5.) 英特尔 Movidius
2017-08-25 更新:我遇到了 this article。英特尔发布了基于 USB3.0 棒的 "deep learning" 加速器。显然,它与 Cafe 一起工作,并允许用户执行常见的基于 Cafe 的网络微调和推理。重要的是要强调:如果你想从头开始训练自己的网络,这里的措辞非常模糊。因此,我假设,除了微调网络之外,训练本身仍然应该在具有更多并行计算的东西上进行。真正令人兴奋的是:当我查看定价时,这根棍子的价格仅为 79 美元。与普通 NVIDIA 1070-80(ti) 卡的成本相比,这不算什么。如果你只是想使用一些相关任务已经可用的通用网络拓扑来解决一些视觉问题,你可以使用这个棒来微调它以适应你自己的使用,然后编译代码并将它放入这个棒中以快速进行推理。许多用例都可以用这根棍子覆盖,而且 79 美元也是值得的。这是英特尔,他们提议全力以赴。他们的模型是使用云(即 Nervana Cloud)进行训练。然后,使用该芯片进行原型推理或能耗重要的推理。这是否是正确的方法留给 reader 来回答。
目前看来深度学习没有NVIDIA还是很难实现。一些有限的速度增益是困难的,但通过使用 opencl 可能是可能的。其他举措听起来很有希望,但需要时间来理清这些举措将产生的真正影响。