基于FPGA的深度学习加速器优化(一)
神经网络加速神经网络基于FPGA的神经网络加速器设计高速度高能效神经网络加速
神经网络算法相较于传统的深度学习算法在很多方面都有较大的优势,不同的网络模型在图像、视频以及语音等领域发挥出越来越重要的作用,例如卷积神经网络CNN、递归神经网络RNN等等。但对于神经网络模型来说,其计算量和存储需求是非常大的,如下表所示:
因此,针对基于神经网络的应用选择合适的计算平台是非常重要的。典型的CPU平台计算能力约为10-100G FLOP/s,能效通常低于1GOP/J。因此CPU平台既不能满足云端应用高性能的需求也不能满足移动端低能耗的要求。而GPU平台的峰值算力可以达到10TOP/s,同时像Caffe、TensorFlow等框架也提供了针对GPU加速的接口,非常适合于高性能要求的应用,然而其能效比较低。而FPGA平台相较于CPU、GPU具有很高的能效比,同时FPGA灵活性比较高,相较于AISC的实现方式,成本较低,周期短。
但同时基于FPGA的神将网络加速也面临着一些挑战:
(1)FPGA平台相较于GPU其存储空间、I/O带宽、计算资源等通常都是有限的;
(2)目前大多数FPGA平台的工作频率通常在100-300MHz之间,远远低于CPU或者GPU平台工作频率;
(3)神经网络算法在FPGA上的部署难度要大大高于CPU或者GPU平台。
因此,直接简单的部署设计将不能实现高能效和高性能,需要在存储、架构、数据通路等等各方面进行优化。
神经网络
深度神经网络是深度学习概念的一种实现,是人工智能(AI)中的一小块。NN算法将原始的传感器数据按照时间或者空间的形式传进高度抽象的模型中以提取有用的信息。这个过程就叫做推理,推理包括多级非线性处理过程,每一个过程称为一个层(layer),每个层以上一层的输出作为输入,并产生下一层的输入。其基本结构如下图:
在神经网络算法中,尽管有很多种类型的操作,但是在深度学习神经网络中有两种基本的层类型:卷积层(CONV)和全连接层(FC),其结构如下所示:
卷积层CONV针对一系列输入特征图像Fin进行二维卷积计算,并对结果进行累加得到输出特征图像Fout,全连接层以特征图像向量作为输入执行矩阵向量乘的操作。除了卷积层和全连接层之外,神经网络还有池化层(POOLING)、ReLU、Contact等等,但卷积层和全连接层贡献了神经网络的主要的计算量和参数量,以VGG-11为例,其不同层的计算量和参数量贡献如下:
因此大多数针对神经网络的加速主要研究针对卷积层和全连接层的加速。
基于FPGA的神经网络加速器设计
针对推理应用的FPGA加速器的设计主要有两个设计目标:高速度(high throughput and low lantency )以及高能效。
高速度
神经网络加速器的算力可以表示如下:
IPS=OPSactW=fP×ηWIPS =\frac{{OPS_{act}}}{W}=\frac{{fP\times\eta}}{W} IPS=WOPSact=WfP×η
FPGA片上资源是一定的,我们可以通过:
1)通过减少每一个计算单元的size来增加计算单元P的数目;
2)提高时钟频率fff
减小计算单元的size可以通过降低数据精度来实现,但是可能使得模型的准确率下降,需要软硬件协同设计。而提高时钟频率仅仅是硬件设计的工作。高计算单元利用率η\etaη可以通过数据流结构设计、存储设计、数据访问模式设计等方面进行提高。
高能效
对于神经网络推理加速器,能效由下式决定:
Eff=WEtotal(2)Eff=\frac{W}{E_{total}} (2) Eff=EtotalW(2)
Etotal≈W×Eop+NSRAM_acc×EDRAM_acc+Estatic(3)E_{total} \approx W\times E_{op} + N_{SRAM\_acc}\times E_{DRAM\_acc} + E_{static} (3) Etotal≈W×Eop+NSRAM_acc×EDRAM_acc+Estatic(3)
总的能耗主要由两部分组成:计算和存储访问,式(3)中第一项为计算所需要的动态功耗,对于给定的神经网络,计算负载WWW是一定的,可以通过量化(使用更小位宽的数据代替权重或特征图像,quantization)来减小EopE_{op}Eop或者通过稀疏化(将更多的权重数据置为0,Sparsification)来减小计算量。第二项和第三项为存储访问的动态功耗,通常基于FPGA的神经网络加速器需要外部DRAM存储参数,因此分为两项。可以通过量化、稀疏化、高效的片上存储系统设计以及数据流调度等减少存储访问次数来降低功耗。第四项为静态功耗,和FPGA平台以及设计规模相关。
从以上分析可以看出,神经网络加速器的设计需要从神经网络模型的优化以及硬件设计优化两方面着手,下一篇将介绍FPGA加速器设计可优化的方向。