aihot  2017-06-18 22:40:52  深度学习 |   查看评论   
3. CNN硬件加速方案
 
  作为一种经典有监督学习算法,CNN使用前馈处理用于识别,反馈用于训练。
 
  在工业实践中,很多应用设计者离线训练CNN,然后用训练好的CNN实现实时任务。因此,前馈计算速度是比较重要的。本文关注用基于FPGA的加速器设计前馈计算加速。下面是几个方案。
 
1.面向卷积核的并行流水线卷积器【2】
 
  Yann LeCun 2009 年的论文【2】中介绍了低端FPGA 上高效实现 ConvNets 的工作。利用了 ConvNets 内在并行性和 FPGA 上多个硬件乘累加单元。整个系统使用单个 FPGA 以及外部存储模块实现,没有其他额外单元。架构如下图所示。
卷积神经网络的硬件加速
  CNP 包括一个控制单元(CU, Control Unit),一个并行流水线向量算法逻辑单元(VALU, Vector Arithmetic and Logic Unit),一个 I/O 控制单元和一个存储器接口。CU 实际上是一个麻雀虽小五脏俱全的 32位软核 CPU,基于 PowerPC 架构,用来将 VALU 进行序列化操作。VALU 实现了卷积网络相关操作,包括二维卷积,空域下采样,逐点非线性函数,以及其他更通用的向量操作(平方根,除法)。VALU 包括其他指令(除法,平方根,乘法),用作图像预处理。完整视觉系统需要的其他运算可以在通用软核 CPU 上完成。
 
  VALU 上二维卷积的实现:
 
  二维卷积器如下图所示,增加了后累加,允许将多个卷积器组合。
卷积神经网络的硬件加速
  在一个时钟周期内,完成如下计算:
卷积神经网络的硬件加速
  这里xij是输入图像值, wmn是K×K卷积核的值, yij是待累加值,zij是输出图像值。
 
  输入图像值进入K个片上 FIFO,尺寸为图像宽度减去卷积核宽度。
 
  在 FIFO 中移动这些值等价于在输入图像上移动卷积窗口。在每个时钟周期,送入一个值,输入图像窗口与卷积核进行点积并行计算。换句话说,卷积器每个时钟周期可以同时执行K^2次乘累加计算(计入加上累加临时图像 )。
 
  于是,完整卷积运算所需时钟周期数等于输出图像值数目 + 填充 FIFO 必须的延迟(大概等于输入图像宽度乘以卷积核高度)。
 
  所有运算中卷积核都以 16 位定点数表示。中间累加值以 48 位保存在 FIFO 中。
 
  低端 FPGA 有126 个乘累加单元,最大实现 11 x 11 卷积核或两个 7 x 7 卷积核,相应理论最大速率为每秒 24.5  次运算(时钟为 250 MHz)。然而试验中使用了单个 7 x 7 卷积器,因为当时使用的网络不需要更大的卷积核,相应理论最大速率每秒 12 G次运算。
 
2.Zynq SoC嵌入式方案 nn-X【9】
 
  在这篇文章《A 240 G-ops/s Mobile Coprocessor for Deep Neural Networks》中使用 Zynq SoC 实现了 CNN 加速器,架构如下图所示。
卷积神经网络的硬件加速
  卷积器的架构没有给出,但根据文章描述,推测与方案一基本一致。所有计算都以定点格式 Q8.8 进行。该方案实现了 8 路 并行引擎,每个引擎提供 10 x 10 卷积器,等效计算能力达到每秒 227 G 次运算(乘加为两次运算)。由于使用 Q8.8 定点形式计算,每个乘加器都可以使用一个 DSP 单元实现,共需要 800 个 DSP单元(总共 900 个)。
 
3.方案三:SIMD 卷积引擎【3】
 
  前面两种方案均为面向卷积核的卷积器,具有如下缺点:当卷积核尺寸变化时(如AlexNet 第一个卷积层尺寸为 11 x 11,而后面卷积核逐渐缩小为 5 x 5 和 3 x 3),不能充分发挥硬件的并行计算性能,造成大量的资源浪费。随着新型网络更多奇异的卷积核(如NIN 中的 1 x 1 卷积核、 1 x N 或 N x 1卷积核),资源浪费情况会越来越严重,甚至变为串行计算结构。方案三则采用很多算法技巧,包括将大图像分块、通道优先累加、兼顾访存和计算等,实现了 SIMD 型计算架构,不再与具体卷积核尺寸挂钩,运行时计算资源利用率更高。
卷积神经网络的硬件加速
  该方案下全部系统都放在了单个FPGA芯片,使用DDR3 DRAM用于外部存储。
卷积神经网络的硬件加速
 
卷积神经网络的硬件加速
  MicroBlaze是一个RISC处理器软核,用于帮助CNN加速器启动,与主机CPU通信,以及计时。MicroBlaze和CNN加速器使用中断机制来提供精确的计时。AXI4lite总线用于传输命令,AXI4总线用于传输数据。CNN加速器作为AXI总线上一个IP。它从MicroBlaze接收命令和配置参数,与定制的数据传输引擎通过FIFO接口通信,该数据传输引擎可以获取通过AXI4总线外部存储。
 
  上图是SIMD 加速器实现,该计算引擎部分显示了实现的模块图。所有数值都以单精度浮点表示。每个引擎由7个乘法器和7个加法器组成,每个加法器消耗2个DSP,每个乘法器消耗3个DSP,每个引擎总共消耗35个DSP。系统一共实现了64个引擎,故消耗 64 x 35 = 2240 个 DSP 单元(FPGA 上共有 2800 个 DSP)。整个系统峰值计算能力达到 64 x 15 x 100 MHz = 96 GFLOPS,实测达到了 61.62 GFLOPS。
 
4.传统 CPU 服务器 + FPGA 加速板卡方案【4】
 
  上面三种方案都是以独立 FPGA 板卡完成所有计算和控制功能。其中方案一和方案三使用软核 CPU 实现控制部分(方案一为 32 位 PowerPC 架构软核 CPU,方案三为 32 位 MicroBlaze 架构软核 CPU),而方案二使用 SoC 内嵌的硬核ARM Cortex A9 CPU 实现控制部分。三种方案缺陷比较明显:无论软核 CPU 还是硬核 CPU,主频都比较低(< 1 GHz),无法适应云端服务(大规模图像识别、在线语音识别等)加速的场景,而只能用于嵌入式产品。
 
  方案四是云端服务 FPGA 加速的方案,具有高可扩展性、高效率的特点。
 
  2014年微软宣布了Catapult项目,成功展示了用FPGA在数据中心使Bing Ranking加速了近2倍。利用这个基础,微软研究院开发了高吞吐CNN FPGA加速器,在很低的服务器功耗下获得了优异性能。下图给出了用于高效计算卷积层前向传播的CNN FPGA加速器高层次概览。
卷积神经网络的硬件加速
  上图中高亮的加速器位于双插槽Xeon服务器,安装了一个Catapult FPGA卡,上有中等规模Stratix D5 FPGA和8GB DDR3-1333。每个FPGA卡都支持高达8GB/s带宽的PCIe 3x8,以及支持21.3GB/s带宽的本地DRAM。这样可以从服务器 CPU 获得计算负载,并在 FPGA 上完成计算,将结果返回 CPU 内存。通过 FPGA 加速 CNN 可以降低服务器功耗。
 
  该方案并没有给出具体实现细节,只透露了关键特征如下:
(1)软件可配置的引擎,支持多层运行时配置(无需硬件重编程);
(2)高效数据缓冲体制和片上分发网络,将片外访存降至最低;
(3)处理单元(PE)构成的空间分布阵列,可很容易扩展到上千个单元;
 
  在正常模式下,CNN加速器可以同时获取输入图像并连续处理多个卷积层。在初始阶段,输入图像像素从本地DRAM流入片上,存储到多个bank输入缓冲区。之后,数据流入多个PE阵列,实现3D卷积步骤中的独立点乘操作。顶层控制器完成序列化、寻址、分发数据到每个PE阵列。最终,累加结果发送到特定片上网络,将计算输出循环送入输入缓冲区用于下一轮的计算(虽然前图中没有显示,但存在额外的逻辑处理pooling和ReLU操作)。
 
  更多硬件描述可参考Catapult论文【10】。
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自【阿里集团卜居深度解析】卷积神经网络的硬件加速

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]