APP下载

基于多并行计算和存储的CNN加速器

2019-07-23李宗凌汪路元禹霁阳程博文张伟功

计算机技术与发展 2019年7期
关键词:加速器卷积架构

李宗凌,汪路元,禹霁阳,程博文,郝 梁,张伟功

(1.北京空间飞行器总体设计部,北京 100094;2.首都师范大学 信息工程学院,北京 100048)

1 概 述

深度卷积神经网络(CNN)模型在目标分类、识别、视频分析以及自然语言处理等方面应用越来越广泛[1-3]。同时,CNN需要进行大量的类矩阵、向量计算,算法复杂度高、程序设计难度大,对算法实时性提出了极高的要求。目前,CNN计算主要基于通用处理器(CPU)、通用图形处理器(GPU)或专用处理器,通过软件方式实现。

CNN是一种高度并行的混联网络结构,尤其是近年来新兴流行的深度网络,采用CPU计算往往会导致频繁的数据交互和相同数据的多次搬移,很难提高计算效率。利用GPU实现CNN,有编程简单、运行速度快等优点,但存在功耗过高、散热困难等问题。例如,NVIDIA GTX-1080 Ti GPU虽具有向量数据搬移操作,在内部计算过程中具备上千个节点对数据进行并行计算,但这一过程占用了巨额的硬件资源,同时也耗费了大量的能量功耗,峰值功耗达到250 W。其他加速处理器,类似文献[4]在处理过程中的输入输出结果必须经由MLU模块,并通过对译码过程不同指令类型的判断,完成选通输入输出操作,这种加速方式通过多个模块的并行操作,并结合HotBuf及ColdBuf减少或同化相同参数和操作的卷积计算,必然影响处理器计算效率。深鉴科技公司[5]设计的AI处理器具有硬件资源可变的特点,借助于DPU节点,通过编译器优化计算流程,压缩参数,降低计算量,但这种功能必须有相应的程序结构进行配套执行才能达到最优速度,而在实际深度卷积计算过程,中间计算过程数据常常被其他进程调用,很难对所有复杂卷积网络形成实际优化。

此外,当前商用GPU计算机及微处理器均是基于对并行寄存器的计算处理,针对深度卷积网络的加速的算法实施,只能依靠多个计算单元的并行计算完成,且核心技术都在国外大公司手中。例如,Google公司推出的TPU处理器[6],性能优越,但仅限于内部使用,不对外供货。由此可知,现有商用处理器无法满足星上应用需求,设计基于多并行计算和存储架构的CNN加速器,已经成为当前嵌入式、小型化研制过程的迫切需要。

现有的深度学习网络加速计算主要从三个工程实现角度来进行优化。第一,减少量化位宽,以牺牲计算结果精度来减少硬件资源的占用,通过降低量化位宽到8位,提高设计的最大可执行频率,降低芯片面积的占用[7];第二,建立多级缓存机制,结合内外部缓存,分配计算过程中“冷”、“热”参数和计算过程,提高缓存使用效率[8];第三,通过统计或简单判别的方式,减少零值参数或无效参数的访问和计算,提高计算单元的处理效率[9]。

当前常用处理位宽设计集中在8 bits到2 bits,单纯降低位宽会造成计算精度的大幅下降,而位宽的选择与网络应用需求有关。多级缓存的设计,往往需要考虑片内、片外缓存,网络卷积核大小及层间并行度情况,很难形成统一的设计模式。零值和无效数值计算的跳过,虽然能够降低计算次数,但在设计过程容易造成控制电路部分的复杂化。

在CNN硬件加速设计过程中,需要从系统架构、位宽、存储和内部总线进行整体考虑,在减少各计算、存储模块交互传输的基础上,提高计算的并行度。文中对CNN模型结构进行基本的研究,重点分析网络并行结构和多层次缓存实现方式,设计出一种运算效率高、占用资源少、通用性强、高能效比的CNN模型前向传播的加速器,并通过实现两种存储资源复用度差异巨大的加速器对比分析,得出数据重用是提升加速器能效比的关键因素。以此为基础,搭建功能验证系统,在FPGA上布置CNN模型加速器,利用ImageNet图像数据集进行测试,并与通用I7-6700-CPU和GTX-1050-GPU实现结果进行对比分析,在分类结果一致的情况下,相对于CPU能效比提升2 700倍以上;相对于GPU,能效比提升290倍以上。该加速器可布置在当前星载信息处理平台中,有效解决硬件开销、速率、精度和热耗的矛盾,具有广泛的应用前景。

2 CNN模型

VGG-16网络是一种典型深度CNN模型,由Simonyan和Zisserman在2014年提出,在ImageNet 2014分类大赛上Top-5错误率仅为7.4%,仅次于GoogleNet的6.7%,是一种非常强大的深度卷积神经网络,能提取图像中的更深层特征,分类能力突出。

标准VGG-16网络包含13个卷积层和3个全连接层,使用不断增加的3×3卷积层,并通过2×2最大池化(Maxpooling)来减小运算规格。首先是13个卷积层,然后是两个4 096节点和1个1 000节点的全连接层,最后是一个Softmax分类器,能够实现1 000类目标分类。VGG-16网络运算规律性强,便于实现并行加速。

3 加速器架构设计

3.1 整体架构

根据VGG-16模型结构,CNN加速器按功能分为控制层、卷积层和输出层。加速器的整体控制由控制层完成,主要包含数据流控制模块、通信控制模块、存储控制模块、特征图运算控制模块;卷积、池化以及激活运算由卷积层完成,主要包含卷积模块、最大池化模块以及Relu激活模块;全连接运算以及Softmax分类由输出层完成,主要包含FC-X模块和Softmax模块。加速器所有模块设计均采用全流水并行设计思想,通过数据流驱动,便于后续模块复用和构建参数化的加速架构。

CNN加速器的整体框架如图1所示。具体工作流程为:中心控制器(Central controller)负责解析数据通信协议,将传输过来的原始图像、卷积核、全连接层、偏置值等参数数据放入DDR3存储器的相应地址段进行存储。所有参数数据更新完毕后,中心控制器调度卷积计算单元(Conv)进行卷积计算。卷积层运算完成后,中心控制器调度全连接层计算单元(PE)进行三层全连接层计算。最后,对计算结果进行SoftMax处理,输出分类结果和相应的置信度值,从而完成VGG-16网络的全部运算。

图1 VGG-16模型加速器整体框架

3.2 卷积运算

卷积运算是CNN模型的核心计算,其实现决定了CNN模型计算单元的整体结构。由于CNN模型层间运算具有独立性且各层运算具有高度相似性,因此,可以通过复用单层运算资源来实现完整的CNN模型卷积计算,在实现过程中只需实现单层的卷积计算结构,即可通过构建并行计算和存储架构实现加速。

文中选用的CNN模型为VGG-16,其卷积核大小均为3×3,因此,基本的卷积运算模块均可实现复用。单个卷积核并行运算流程如下:9个卷积参数寄存器在处理数据输入前完成更新,图像数据按行输入卷积运算模块,通过行数据缓存,构建循环移位存储器。当第3行图像数据输入时,通过寄存器调整数据时序,开始乘加运算,输出卷积结果[9-10]。由以上运算流程可知,该卷积的基本运算为全并行流水架构,为后续流水处理加速架构的构建奠定了基础。

标准VGG-16模型总共包含1 634 496次卷积核大小为3×3的二维卷积运算,如此庞大的卷积运算可通过卷积核并行运算及多个卷积核共用一组外部存储器的方式实现卷积运算的并行加速。

为达到最佳加速比,存储带宽与计算能力需匹配,然而,频繁的片外数据访问会产生大量的功耗。为降低功耗,需减少卷积运算对外部数据存储器的访问频率,为此,多组卷积核共用一组特征图数据的方法可以显著减少对片外存储器的访问次数[11-13],从而大大提升加速器的能效比。

卷积运算的并行度须由外部存储带宽、加速器的内部存储和计算资源共同决定。为平衡计算精度和硬件资源的需求,文中的卷积运算采用16位定点量化数据格式,输入图像大小可调。表1分析了卷积组内和卷积组间不同并行度对外部存储带宽、计算(DSP48e)和内部存储(Block RAM)资源的需求,并可估算出卷积运算时间。为了更好地对比分析硬件资源和数据复用度对能效比的影响,文中实现了两种并行度和数据复用度(n=16,m=1和m=16)的加速器。

表1 卷积组并行加速及硬件资源对比 (输入图像为224×224)

通过表1分析可得,外部存储器的位宽Mem_wide需求由单组卷积核的并行度n和数据位宽data_wide决定,计算方式为:

Mem_wide=3*n*data_wide

(1)

Dsp48e使用个数Dsp48e_num计算方式为:

Dsp48e_num=n*m*s_conv

(2)

其中,n为单组卷积核并行个数;m为卷积组并行个数;s_conv为单个卷积使用乘法器个数,与运算数据类型有关,文中为9。

每一层卷积占用内部存储容量的计算方式为:

Mem_num=a*b* data_wide*m+(k-1)*

n*a*data_wide

(3)

其中,Mem_num为单层卷积存储器使用量;a和b分别为该层卷积的特征图像尺寸;k为卷积核大小,文中为3;n为单组卷积核并行个数;m为卷积组并行个数。各层存储资源可复用,只需占用单层最大存储容量。

每一层卷积运算时间计算方式为:

T=a*(b+1)*num_cov/(n*m*freq)

(4)

其中,a和b分别为该层卷积的特征图像尺寸;num_cov为该层卷积次数;n为单组卷积核并行个数;m为卷积组并行个数;freq为运算频率。式4成立的前提为存储带宽与运算能力相匹配,可实现流水处理。

3.3 全连接运算

全连接层[14]可利用快速流水架构实现,将乘累加运算设计成全流水处理,流水延时不超过20个处理时钟。为保证计算的精度,全连接层数据格式采用单精度浮点。可以通过增加运算单元(PE)的个数实现全连接层的加速,全连接层运算单元(PE)的并行度不同,可以实现的加速效果也不同,占用外部存储资源也会不同[15]。根据外部存储资源的实际情况,文中选用运算单元(PE)的个数为16,相应的对外部参数存储位宽为512比特。

3.4 小 结

本节对加速器进行完整的设计。在此框架下,对CNN模型计算单元进行了详细的设计讨论。卷积层加速架构结合了三种并行特征,以平衡各种并行特征实现结构的运算效率和存储带宽需求,并分析了多种并行架构的硬件资源占用及性能指标情况。全连接层采用多路并行、流水累加架构,有效提升了处理效率。

4 功能验证

4.1 硬件平台

文中设计的加速器功能验证模式为PC+FPGA,在FPGA上布置该加速器,PC机控制软件通过PCIe总线给加速器传输模型参数和待处理图像数据,加速器将处理结果通过PCIe总线发送给PC机控制软件,控制软件将对应图像和分类结果显示,并与标准解进行比对,验证该加速器功能。加速器验证框图如图2所示。

验证流程如下:图像存储在PC机上,VGG-16模型的反向训练在PC机上完成,图像和训练完成的权值直接通过PC机的PCIe总线下载到FPGA。中心控制器负责解析PC机输入的图像、VGG-16模型参数,将其存储至外部存储器(DDR3)。控制层接收到PC机的开始运算指令后,调度卷积层和输出层相应模块完成VGG-16模型运算。当前向传播计算完成后,输出层的结果由FPGA控制输回PC机。

实验中,FPGA使用Xilinx公司的XC7VX690T器件,采用Digilent公司NetFPGA-SUME开发板作为验证平台,软件开发工具为Vivado。与FPGA实现作对比的是通用CPU和GPU平台下的软件实现方式,VGG-16模型与FPGA实现完全一致。CPU采用I7-6700四核八线程处理器,基准主频为3.4 GHz,内存为32 GB DDR4。软件开发工具采用Visual Studio 2013。GPU采用NVIDIA公司的GTX1050,软件开发工具采用CUDA7.0,核心基准频率1 354 MHz,显存为4 GB DDR5。

图2 加速器验证架构

4.2 验证数据集

ImageNet数据集是一个用于视觉对象识别软件研究的大型可视化数据库,在目前深度学习图像领域应用较多。关于图像分类、定位、检测等研究工作大多基于此数据集展开。ImageNet数据集文档详细,有专门的团队维护,使用非常方便,是目前全世界最大的带有标记的图片数据库,在计算机视觉领域研究论文中应用非常广,成为了目前深度学习图像领域算法性能检验的“标准”数据集。

4.3 验证结果

为验证文中设计的基于FPGA的VGG-16网络加速器的功能正确性,随机选择ImageNet数据集的100幅图进行分类结果验证,模型参数选用公开数据模型,加速器的分类结果正确,证明该加速器功能正确。

5 性能分析

5.1 硬件及时间开销

将两种并行度(并行度1为单组卷积核个数16,卷积组为1;并行度2为单组卷积核个数16,卷积组为16,全连接层加速架构一致)的加速器布置在FPGA中。通过软件开发平台得到两种并行度处理器的编译报告,通过分析报告可得知:并行度1功耗为11.493 W,乘法器(DSP48e)使用165个,内部存储器(36k BRAMs)223.5个;并行度2功耗为13.301 W,乘法器(DSP48e)使用2 336个,内部存储器(36k BRAMs)833.5个,并行度1与并行度2外部存储资源一致,IO功耗一致,在并行度提升16倍的情况下,功耗仅提升了1.808 W,不到16%。

由上述分析可知,加速器能量主要消耗在存储和IO通信上,内部逻辑、存储及运算资源消耗能量占比较少,通过增加运算并行度复用外部存储资源的方式可有效提高能效比。可根据自身需要和硬件资源情况灵活选择加速器的并行度。

由表2可知,对同样的输入图像数据,该加速器并行度1能效比为CPU-I7-6700的260倍以上,相对于GPU-GTX1050能效比为28倍以上;并行度2能效比为CPU-I7-6700的2 700倍以上,相对于GPU-GTX1050能效比为290倍以上。并和当前业内采用FPGA实现CNN的加速方案进行了对比,相同条件下,均有不小优势。

表2 主要实现方案技术指标对比(输入图像大小为224×224)

5.2 处理精度

为验证加速器的处理精度指标,从ImageNet数据集中随机抽取100幅图片,通过“分类结果”及相应“置信度”两个关键指标作为加速器处理精度的考核对象。将加速器的“分类结果”及“置信度”两种处理结果与Matlab采用双精度浮点数据的相应处理结果进行对比。对比结果见图3和图4。

图3 加速器与Matlab处理分类结果差值

图4 加速器与Matlab分类结果的置信度差值

由图3可知,加速器与Matlab分类结果的差值为0,表明加速器分类结果与Matlab的处理结果完全一致。由图4可知,加速器与Matlab分类结果的置信度差值不大于0.05。由此可证明,文中设计的加速器处理结果的精度与双精度浮点数据处理结果的置信度虽然有一定精度损失,但是不影响最终分类结果,可满足使用要求。

6 结束语

目前,实现CNN网络模型主要基于通用处理器,采用软件编程实现,但基于软件方式无法充分挖掘CNN神经网络的并行性,在实时性和功耗方面都不能满足应用的需求。在卫星或导弹等嵌入式应用环境中,采用可编程逻辑电路实现CNN网络是一个非常好的选择,在成本、可靠性、研制周期、灵活性以及性能等方面均能达到良好平衡。

文中从深度学习网络入手,结合星载应用特点,对深度学习网络进行解析重构,设计了一种基于全并行流水、权重量化的深度学习加速器,具备内部硬件资源占用少、运算效率高、通用性强、适合ASIC抗辐照设计等特点,可满足星载环境使用要求。

对CNN模型进行了电路实现分析,着重分析了卷积运算的并行性和全连接层并行实现方案。卷积运算具备多种并行特征,从运算效率和数据载入带宽需求两方面,对每一种并行特征进行了实现分析;同时对多种并行性的组合实现做了简单的实现分析。用户可以根据处理平台资源情况,灵活选择并行度,达到不同实现性能。

在实现分析的基础上,采用PC+FPGA的验证架构,完成了VGG-16模型加速器的功能验证。加速器实现了完整的前向传播过程,采用全并行流水处理设计思想有效提高整体性能。卷积运算单元结合了多种并行度,以获得数据带宽需求和运算效率的平衡;配置了乒乓式的缓存结构,利用数据重用提高运算效率;同时对全连接层计算进行了优化,实现了全流水处理。

在基于ImageNet数据集分类实验中,该加速器每周期最多运行2 304次乘累加运算,在150 MHz的工作频率下,峰值运算速率可达到691.2 Gops,能效比为i7-6700-CPU的2 700倍以上,为GTX1050-GPU的290倍以上。从上述结果可以看出,相比软件实现方案,可编程逻辑电路实现CNN模型有着效率、功耗、成本等多方面的优势。

在取得以上成果的同时,文中研究也存在许多不足。首先,没有深度挖掘数据格式选择对卷积模型精度的影响,在运算效率和处理精度平衡上仍有更多的挖掘空间;第二,在实验中仅测试了一种CNN模型,不同模型对加速性能的影响缺乏实际效果的说明;第三,网络剪枝可以有效降低模型参数量,稀疏网络,降低处理计算量,提升处理性能。文中在此方面还没有做研究,在后续运算效率上,加速器还有很大提升空间。

猜你喜欢

加速器卷积架构
莫比斯加速器众创办公空间
基于全卷积神经网络的猪背膘厚快速准确测定
知识快餐店 科学加速器
国内外医用直线加速器可靠性对比研究
一种基于卷积神经网络的地磁基准图构建方法
基于3D-Winograd的快速卷积算法设计及FPGA实现
一种并行不对称空洞卷积模块①
功能架构在电子电气架构开发中的应用和实践
基于B/S架构的图书管理系统探究
构建富有活力和效率的社会治理架构