A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks

A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks Compared With Titan X GPU

  • Abstart
  • 1.Introduction
  • 2.Background
    • 2.1 Related Work
    • 2.2 FPGA实现方法
    • 2.3 CNN_FPGA
  • 3.基于FPGA的CNN加速并行、流水线建模
    • 3.1 三维卷积运算的高速并行设计
    • 3.2 CNN加速的并行、流水线设计
    • 3.3 流水线结构中的数据依赖
  • 4.基于FPGA加速的CNN流水线结构设计优化
    • 4.1 循环迭代数据依赖
    • 4.2 行数据的依赖
    • 4.3 层间数据依赖关系
  • 5.基于FPGA的CNN加速节约能耗与带宽优化
    • 5.1 混合定点数据表示
    • 5.2 结合BN与SB操作
    • 5.3 CNN物体检测加速器
  • 6.实验

Abstart

  卷积神经网络(CNNs)的深度学习算法需要高数据流和计算强度。对于实时工业应用,需要克服诸如高数据带宽要求和硬件平台上的功耗等问题。本文详细分析了CNN加速器中的数据依赖性,并提出了具体的流水线操作和数据组织方式,在FPGA上设计了一个高吞吐量CNN加速器。

1.Introduction

  卷积计算量很大,标准的卷积层是通过乘法累加(MAC)运算来实现的。例如在YOLO V2框架的前向推理过程中,92%的执行时间花费在MAC上。
  处理计算量大的网络可以使用GPU,尽管现代高端GPU在DNN性能上具有很高的计算吞吐量,但它也具有较高的功耗,并且与工作站协作的工作量太大,难以携带,降低了其在工业领域的实用性。FPGA是替代GPU的解决方案之一,它具有处理单元大、功耗低、可重构、便携等特点。
  但是FPGA也有缺点:与GPU不同,FPGA上的内存没有缓存结构,带宽比高端GPU旧两代(例如FPGA Arria 10上的DRAM是DDR3, GPU Titan X上的内存是GDDR5)。数据依赖和内存带宽等设计挑战使得它很难像高端GPU那样实时快速工作,特别是在低功耗设备上。此外,片上内存大小的限制也是FPGA的瓶颈。片内存储器和片外存储器(例如DRAM)之间的数据移动将引入大的功耗和延迟。
  本文主要研究点就是设计一款高吞吐量、低功耗、低延迟的基于FPGA的CNN加速器。主要内容包括:

  1. 详细分析了CNN加速器中的数据依赖性,提出了一种基于CNN的高吞吐量FPGA加速器。使用流水线的MAC操作结构来消除循环携带的数据依赖性。我们还提出了Zigzag提取单元来消除行数据的依赖性;
  2. 为实现高功率效率,我们提出了批量归一化(BN)和规模/偏差(SB)的离线预处理和近似表达式相结合的核计算;
  3. 在目标检测任务中使用了8-16位混合定点数据表示;
  4. CNN加速器提供了一个可定义的接口来轻松地重新配置新的CNN模型,并且它支持Caffe框架;

2.Background

2.1 Related Work

  CNN加速器可以分成三类:处理计算内核中的优化问题、处理带宽优化以提高吞吐量、模型优化。

2.2 FPGA实现方法

  实现CNN在FPGA运行的方法有两类:第一类是高层次综合(HLS)方法,指的是C/System C合成,大多数CNN—FPGA都使用HLS。该方法能够加快设计速度,易于仿真,并能自动生成Verilog/VHDL代码。Xilinx ZYNQ极大地改变了FPGA的开发步骤,因为每个FPGA都与计算处理单元(ARM)连接。第二类是传统的寄存器传输级(RTL)设计方法。这种方法开发周期较长,但可以在没有冗余的情况下充分利用FPGA资源,并且在循环级上具有较好的顺序逻辑控制。

2.3 CNN_FPGA

  在FPGA上实现CNN加速有些限制:

  1. 从全局内存(DDR3)取数据到FPGA芯片内内存的延迟限制;
  2. FPGA硬件资源的限制;
  3. 数据之间的依赖性;

  CNN一些模块:

  1. FU:它通过滑动窗口获取权值和特征映射,并将其排列成一个卷积对,为MAC操作做准备。
  2. MAC:传统的输入权值可以看作是一个四维超立方体,第1维和第2维是同一权值平面上的水平和垂直方向。我们可以在FPGA上应用第三维和第四维的并行机制IFMP和OFMP。
  3. BN:该模块接收卷积结果并进行批处理归一化操作。
  4. SB:该模块接收BN后的结果,与参数尺度相乘,加偏置,然后将数据发送给下一个模块。
  5. ACT:此模块将在SB后接收结果并执行激活操作。在该加速器中,我们采用了漏整流线性单元(LReLU)函数。
  6. PL:用于对输入数据进行降采样。流行的想法是使用行缓冲区逐行存储和处理输入数据。FPGA上有一个开关来控制该模块的工作与否。
  7. WB:将输出数据写回外部存储器。

3.基于FPGA的CNN加速并行、流水线建模

3.1 三维卷积运算的高速并行设计

  并行地实现在一个周期完成所有MAC将花费大量的数字信号处理器(DSP)块和查找表(LUTs),对于有限的硬件资源来说,充分利用并行性是不可接受的。在处理能力和硬件资源或设计领域之间存在权衡。高度的并行化将消耗大量的计算单元。取数据单元必须并行加载大量数据并存储片上内存。

3.2 CNN加速的并行、流水线设计

A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第1张图片
  上图a是一个具有M次分配和k次迭代的基本循环,如果这个循环的每次分配都需要一个时钟周期,那么整个循环的延迟为M × k个周期。这种结构使用的资源最少,但执行时间最长。图b描述了完全展开的循环,其中包含M次赋值和k次迭代。整个循环有M个周期的延迟。然而,它在硬件上复制每个赋值k次。这种结构速度最快,但耗费的资源最多,在设计中往往难以承受。图7c是一种理想的管道结构。然而CNN加速器由于数据依赖性,无法实现理想的管道结构。

3.3 流水线结构中的数据依赖

  数据依赖是指一个变量依赖于前一个状态的情况。在管道设计中存在三种类型的数据依赖:循环数据依赖、行数据依赖和层间数据依赖。

  图8显示了CNN加速器的k级管道图。我们假设有M个计算单元并行获取数据/权重。在MAC操作之后,在BN之前有一个中断,因为BN必须等待k2次MAC操作来准备一个卷积,其中k是核大小。在ACT和PL之间有第二次中断,因为池操作需要准备好线路数据(假设线路的长度为W)。第3次中断发生在WB和下一层的FU之间,因为在传统的CNN操作中,FU会等待整个OFMs就绪后再进行。

4.基于FPGA加速的CNN流水线结构设计优化

4.1 循环迭代数据依赖

A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第2张图片
  在上面FIFO MAC操作中有以下特点:

  1. 声明多个空缓冲区(以FIFO结构排列);
  2. 所有缓冲区值初始化为零;
  3. 使用数组中的最后一个缓冲区(FIFO中最左边)存储乘法值;
  4. 使用移位寄存器执行移位操作,将最后一个缓冲区中的值传递到每个时钟周期的前一个缓冲区中;
  5. 将第一个缓冲区的值相加,在下一个时钟周期相乘;
  6. 将最终值写入结果;

4.2 行数据的依赖

A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第3张图片

  FU过程使用Zigzag 扫描,如上图b所示。

4.3 层间数据依赖关系

  通常在现代先进的大型CNN模型中有几十个层。要在下一层处理CNN,通常需要等到当前层的所有特征图都得到之后。

5.基于FPGA的CNN加速节约能耗与带宽优化

5.1 混合定点数据表示

  FPGA支持大量的逻辑单元来实现浮点运算。原始数据类型为单精度浮点(32位)CNN正向计算,实现MAC操作需要耗费大量硬件资源。数据的定点表示可以节省硬件资源的数量。定点数据类型的目的不仅是减少片上存储器和dsp等硬件资源,而且由于传输数据的大小减少,提高了数据传输速度。此外,还有助于降低能耗。

5.2 结合BN与SB操作

  此外,外部存储器和FPGA片上存储器之间传递的期望参数和方差参数会带来较大的延迟。有两种方法可以解决这个问题,第一种方法是将BN/SB合并到MAC操作中。第二种方法是结合BN和SB运算来简化计算。

5.3 CNN物体检测加速器

A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第4张图片

  如图16所示,我们基于cnn的FPGA加速卡有五个管道阶段,第一个阶段是ZFU,它使用锯齿扫描将数据和权值从全局存储器并行获取到FPGA片上缓冲。数据从摄像机中捕获并调整为固定的输入大小(例如,416 × 416)。第二阶段是MAC操作与FIFO结构相结合,以利用循环携带的数据依赖性。在第三阶段,我们合并了BN、SB和ACT。特别是,我们对BN和SB进行脱机预处理,并将运算减少为乘法和加法。第四阶段,我们使用比较器得到两个输入之间的最大值。我们设置了一个计数器来控制池结果的输出。如果计数器到达P2,输出将被写入一个输出缓冲区。否则,比较国将继续工作。在第五阶段,输出数据将被送回全局内存。

6.实验

  一种计算吞吐量(GOPS)的方法:
A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第5张图片

  其他部分主要介绍了可以达到多高的性能:

A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第6张图片
A Novel FPGA Accelerator Design for Real-Time and Ultra-Low Power Deep Convolutional Neural Networks_第7张图片

你可能感兴趣的:(Paper,人工智能)