1、结合 GPU和 FPGA训练深度学习 Nicole Hemsoth 过去几年,很多文章都报道了 GPU在深度学习训练方面的用处,影响程度较小的定制 ASIC 和 FPGA也有用。与传统只用 CPU的方法相比,这种方式的性能表现更优越,效率更高,但是,对它们进行编程向来是个挑战。撇开编程上的障碍不谈,目前标准的模式就是在加速器上训练深度学习,但这种方法只局限于一种选择 GPU或者更低端的扩展, FPGA。 现在,一个来自圣巴巴拉加利福尼亚大学的团队提出了一种新型中间软件平台,能把这两种加速器组合起来,放在一个能为它们提供足够硬件抽象的普通编程环境中,这样卷积神经网络就能轻松地平衡两种器件。 把
2、FPGA 这样的可编程器件与 GPU结合就能使编程工作 变得轻松,这听起来有点牵强附会。但是,该研究团队已经用一块 Altera DE5 型 FPGA 和一个英伟达 K40 型 GPU 的组合取得了很不错的成效,他们表示,这种方法可以在不增加程序员负担的前提下,为各种应用提供一个通用框架和有效支持。 与 GPU 加速器相比, FPGAs 和 ASIC 这样的硬件加速器能用更低功耗完成最低要求的任务。然而, FPGAs 和 ASIC 的计算资源、内存和 I/O带宽都相对有限。因此,在硬件加速器上发展复杂和庞大的深度神经网络是很麻烦的。直到现在,为不同架 构提供有效中间软件支持的问题始终没有真正解
3、决。 他们也从能耗、吞吐量、性能密度及其他因素方面考虑了两者的相对差异和各自的优劣。他们发现可以通过在某部分工作中更多使用某方面性能更好的器件来平衡整个架构。 API向主代码中的调度中间件发送请求,卸掉 CUDA 或 OpenCL核心的部分执行线程。这些核心有一个共享的内存空间。从程序员视图中抽象出了进程安排和运行时间支持,送入 API中处理,对于任何一个器件的应用,它都相当于中间桥梁。 CNNLab 用 CUDA 把应用绘制到核心, OpenCL 用 该团队开发的中间件作为神经网络和加速器间的桥梁。这种架构很灵活,可以把任务分配给任一个器件,而且两种架构采用了共同的运行时间。 在开发这个中间
4、件框架的过程中,该团队为理解不同深度学习方式下GPUs 与 FPGAs之间的相对差异,用英伟达和 Altera 的零件构造了一个原型硬件,把它作为基准去对比 GPUs 和 FPGAs在执行时间、吞吐量、功率、能耗以及性能密度方面的差异。单单这个结果就很值得研究了。 他们的结果显示 GPU的加速率 (10x) 和吞吐量 (10x) 更高,但FPGA节约的功耗 (50x) 更多 。他们也注意到,两种器件上运行卷积神经网络的能耗很接近。在性能密度方面,二者相差也不大, FPGA每瓦 100亿次浮点运算而 GPU是每瓦 140亿次。不过,他们发现 GPU的运作效率更高。 对卷积神经网络, GPU 和
5、FPGA在一系列指标上的对比 虽然该团队已经在他们的平台上实现了加速,他们也意识到有些方面还有待提高。如果用更好的压缩网络模型,两种器件都能进一步提速。他们也考虑到了用 Spark 或 TensorFlow作数据处理主干的情况下如何配对这些加速器的问题。 这是一项很有 意义的工作,他们创造出了一个能为 FPGA 和 GPU这两种器件工作的双向软件层,使性能和效率得到提升。而且通过一点努力,就能把两种器件都集成在带有低功耗处理器的电路板上,并把它们捆绑起来支撑卷积神经网络的运行。但如果 FPGA真的这么容易对话,OpenCL/CUDA界面也真的这么容易结合的话,你可能会奇怪为什么之前没有人尝试这么做呢,而事实上,以前确实没有过。 在这个团队开发的中间件框架之外,更大的问题是两种加速器的特性(上面图标中显示的那些指标)如何才能堆叠起来。 Microsoft 的 Catapult 和 其他的系统都在用 FPGA做深度学习,堆叠问题对于这个领域来说并不会经常被吹捧。由于 Intel收购了 Altera,并且主要方向集中在了机器学习上,我们期望在未来一两年内这个领域能取得更多进展。