DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第1张图片

Title

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family

Proceedings of the 53rd Annual Design Automation Conference


contribution

  1. 根据Caffe脚本生成RTL加速器代码(same)

  2. on-line控制流实现空间和时间的折叠(具体的算法是啥呢?)

  3. 优化输入数据与权重的存储布局,利用存储的局部性实现地址生成单元(具体方式?)

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第2张图片

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第3张图片

Preliminaries and Observation

包含四层的一个卷积网络

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第4张图片


多层感知机(MLP)的硬件加速例子:

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第5张图片


Architecture of DeepBurning

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第6张图片

组件库

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第7张图片

数据驱动相关

  • 时间折叠:单个组件,在不同的时间被不同的网络层复用

  • 空间折叠:单个网络层,拆分成不同的段,在不同的事件共享一个组件

地址生成单元(AGU)

(有点像DMA)

  • Main AGU:on-chip与off-chip之间的数据通信

  • Data AGU: 从on-chip内存中取输入数据或特征数据

    • 起始地址offset

    • 布局:feature=[div_tile_num, width, height, K]

  • Weight AGU: 从on-chip内存中取权重数据

    • weight=[out_channel, kernel_x, kernel_y, div_tile_num, K]

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第8张图片

Approx LUT Generation

近似LUT用于实现激活函数,输入放入LUT的索引中,预先存储输出结果,通过存储的有限样本近似激活函数来进行模拟。编译器解析复杂函数,选择采样点,计算Approx LUT中填写的值。

命中LUT的输入就直接输出LUT的结果,否则通过线性插值生成输入的近似结果

Dynamic Control flow

动态控制流:用数据将实例化的IP核连接运行起来,控制从AGU里取数据,放入IP核里进行计算,得到输出数据,通过AGU写入内存,再调用下一个IP核通过AGU取数据运行,反复上述

硬件感知的数据布局

57*57的特征图,12*12的卷积核,步长为4

问题:如果按照行布局,带宽的利用率很低,取一整行,只有前12个数被用到

方法:

  • 特征图分块为大小为12*12的块tile,块中的数据是被连续放在内存中的,所以就利用了数据的局部性
  • 按照步长分区,减少数据访问次数,提高数据的重用。需要进一步使用partition分区将12*12切割成3*3个块,每个块里面有4*4个点,这16个点连续的放在内存中。

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第9张图片

具体的局部算法:

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第10张图片

  • k=d,对数据分块,分块大小为k*k
    • (s=1怎么办?数据重复访问了)
      • k=d=2: 2 2 2
  • k!=d, s=cd(k, d) ,数据的分块大小为s*s ,tile可以重用,减少重复访问
    • (按照步长分块确实减少了重复的访问,那么数据的重用是否有缓冲区的建立?)
      • k=6,d=4: 2*2 2*2
  • else:f=cd(k,d,s),分块大小为k,d,s的公约数。交错布局
    • k=12,d=6,s=4,那么f=2,造成了带宽的浪费
      • d=6,f=2: 2*2+2 2+2*2

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第11张图片

Evaluation

用于测试的网络模型

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第12张图片


一轮前向传播的运行速度的比较:

  • custom:同一个人手动优化定制的加速模型
  • CPU:Xeon 2.4Ghz
  • DB-S: 低资源开销Z-7020
  • DB-L:高资源
  • DB:中等资源

比CPU快4.7倍

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第13张图片


功耗比较:

DB比custom多1.8倍,DB-L和DB-S和custom差不多,CPU功耗比DB多58倍

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第14张图片


精度比较:

和CPU精度差不多,甚至更好(近似技术可能会消除噪声或抑制过拟合)

通常,DB比CPU的差距为1.5%

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第15张图片


硬件开销:

DeepBurning: automatic generation of FPGA-based learning accelerators for the neural network family_第16张图片

你可能感兴趣的:(FPGA,fpga开发,caffe,人工智能)