2017-03-31 100 views
8

因为我只有AMD A10-7850 APU,并且没有资金花在800美元到1200美元的NVIDIA图形卡上,所以我试图通过我拥有的资源来加速通过张量流的深度学习/ keras。如何加速非NVIDIA设置的深度学习?

最初,我使用了Tensorflow的预编译版本。 InceptionV3需要大约1000-1200秒来计算1个纪元。它一直非常缓慢。

为了加速计算,我首先用优化器(使用AVX和SSE4指令)自编Tensorflow。这导致计算时间大约减少40%。上面执行的相同计算仅需要大约600秒来计算。它几乎可以忍受 - 有点像你可以看着油漆干燥。

我在寻找进一步减少计算时间的方法。我只有一个集成的AMD显卡,它是APU的一部分。 (如何)(C/c)我是否利用这个资源来加速计算?

更一般地说,假设有其他人有类似的货币限制和英特尔设置。没有独立NVIDIA卡的人如何能够利用其集成的图形芯片或其他非NVIDIA设置来实现比仅CPU性能更快的速度?那可能吗?为什么/为什么不?需要做些什么才能实现这一目标?或者这可能在不久的将来(2-6个月)?怎么样?

回答

15

研究这个话题了几个月后,我可以看到前进3.5可能的路径:

1)Tensorflow + OPENCL在上述意见中提到:

似乎有一些运动回事这个领域。在Codeplay上,Lukasz Iwanski刚刚发表了一篇关于如何在这里使用opencl运行张量流的综合答案(我将仅提供如上所述的链接,因为信息可能在那里改变):https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

可能使用集成图形是诱人的。也值得探讨与APU的组合使用。但我不确定这样做会有多好,因为OpenCl支持还处于开发早期,并且硬件支持非常有限。此外,OpenCl与手工优化代码库不同。 (更新2017-04-24:我得到的代码编译后遇到一些问题here!)不幸的是,希望速度改进ON MY SETUP(iGPU)没有实现。

CIFAR 10数据集:

  1. Tensorflow(经由PIP AK未优化):在390%的CPU利用率 1700sec /时期。
  2. Tensorflow(SSE4,AVX):390%CPU 利用率为1100sec/epoch。
  3. Tensorflow(opencl + iGPU):5800秒/时代150%CPU 和100%GPU利用率。

您的里程可能会有很大差异。所以我想知道其他人在你的设置上相对来说(未优化vs优化vs opencl)是什么?

需要注意的是:opencl的实现意味着所有繁重的计算都应该在GPU上完成。 (更新于2017/4/29)但事实上情况并非如此,因为一些功能尚未实现。这导致unnecessary copying back and forth of data between CPU and GPU ram。再次,imminent changes应该改善这种情况。此外,对于那些有兴趣帮助和想要加速的人,我们可以做一些对opencl的张量性能有显着影响的事情。

但现在它代表:1 iGPU < < 4 CPUS与SSE + AVX。也许更强大的GPU和更大的RAM和/或opencl 2.0实现可能会有更大的差异。

在这一点上,我应该补充一点,至少Caffe和/或Theano + OpenC1正在进行类似的努力。所有情况下的限制步骤似乎都是将CUDA/cuDNN功能手动移植到openCl范例。

2)的ROCm + MIOpen

RocM代表的Radeon开放计算,似乎是举措大杂烩是/将使深学习的非NVIDIA(大部分的Radeon设备)成为可能。它包括3个主要组件:

  • HIP:一种将CUDA代码转换为可供AMD GPU使用的代码的工具。
  • ROCk:AMD CPU + GPU设备的64位Linux内核驱动程序。
  • HCC:将代码编译为异构系统架构环境(HSA)的代码的C/C++编译器。

显然,RocM旨在发挥同时拥有CPU和GPU技术的AMD实力。他们加快深度学习的方法利用了这两个组件。作为APU的老板,我对这种可能性特别感兴趣。但作为警示:Kaveri APU支持有限(仅支持集成Graphcs)。未来的APU尚未发布。而且看起来,这里还有很多工作要做,以使这个项目进入一个成熟的状态。鉴于AMD宣布他们的Radeon Instinct卡将于今年(2017年)发布,很多工作都希望在一年内实现这种方法的可行性。

这里给我的问题是,RocM提供了建立深度学习库的工具。他们本身并不代表深度学习库。作为一个不专注于工具开发的数据科学家,我只想要一些有用的东西。并且我不一定有兴趣去建立我想要学习的东西。没有足够的时间来做好我所在公司的工作。

NVIDIA当然有CUDA和cuDNN,它们是针对NVIDIA GPU优化的手工汇编代码库。所有主要的深度学习框架都建立在这些专有库的基础之上。 AMD目前根本没有这样的东西。

我不确定AMD在这方面将取得怎样的成功。但是,有些光线正在照耀着Carlos Perez在4/3/2017 here上发表的一篇文章中AMD的意图。最近的lecture at Stanford也对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版卡不会为消费者第一),有提示major deep learning frameworks will be supported through the MIOpen framework。今天发布的Forbes article显示MiOpen在过去几个月的表现中取得的进展:看起来很重要。 (更新2017-08-25)MiOpen已正式发布。我们不再在这里假设这里讨论。现在我们只需要尝试一下这个框架的工作情况。

3)霓虹灯

Neon是Nervana的(现已被英特尔收购)的开源深学习框架。我提到这个框架的原因是它似乎相当简单易用。语法和Keras一样简单直观。但更重要的是,由于这些计算的一些手工汇编语言优化,此框架在some benchmarks上的速度比Tensorflow快了2倍。可能将计算时间从500秒/时间减少到300秒/时代是没有什么可打喷嚏的。 300秒= 5分钟。所以一个小时内可以得到15个时代。在大约3.5小时内约有50个时代!但理想情况下,我想在一小时内完成这些计算。为了达到这些水平,我需要使用GPU,此时,只有NVIDIA在这方面提供全面支持:当GPU可用时,Neon也使用CUDA和cuDNN(当然,它必须是NVIDIA GPU )。如果您有权访问其他英特尔硬件,这当然是一种有效的追求方式。最后,Neon的出发点是为了让事情在非NVIDIA设置(如Nervana的定制CPU,现在是Intel FPGA或Xeon Phis)上以最佳方式工作。

3.5)英特尔Movidius

更新2017年8月25日:我看过this article来了。英特尔发布了基于USB3.0的“深度学习”加速器。显然,它与咖啡厅一起工作,并允许用户执行常见的基于咖啡厅的网络微调和推理。这一点很重要:如果你想从头开始训练自己的网络,这里的措辞非常模糊。因此,我将假设,除了对网络进行微调之外,培训本身仍应该用更多的并行计算来完成。真正的踢球者是这样的:当我检查价格时,这根棍子的价格仅为79美元。与普通的NVIDIA 1070-80(ti)显卡相比,这并不算什么。如果您仅仅想使用已经可用于一些相关任务的通用网络拓扑来解决一些视觉问题,那么您可以使用此控制杆将其微调为自己的用途,然后编译代码并将其放入该控制杆中以快速进行推理。许多使用案例可以用这个棒子覆盖,再花79美元就可以了。这就是英特尔,他们提议全力以赴英特尔。他们的模型是使用云(即Nervana Cloud)进行培训。然后,将此芯片用于能耗非常重要的原型推断或推理。读者可以回答这是否正确。

这时,看起来像没有NVIDIA的深度学习仍然很难实现。通过使用opencl,一些有限的速度增益是困难的,但可能是有可能的。其他举措听起来很有希望,但需要时间来梳理这些举措将产生的实际影响。

+0

您能指点我关于如何运行您使用_CIFAR 10数据集引用的基准测试的说明吗? –

2

如果你的平台支持opencl,你可以看看使用tensorflow。在Linux上有一些实验性的支持,其编号为this github repository。一些初步说明在the documentation section of of this github repository

+0

这里有一些关于OpenCL实施状态的高级信息,以防万一也有帮助。但Benoit的分支链接是正确的地方去https://www.codeplay.com/portal/02-14-17-bringing-the-acceleration-of-opencl-to-tensorflow-with-sycl –

+0

希望你不要'不介意......我会在本周末回复。 – Thornhale