APP下载

基于异构平台的卷积神经网络加速系统设计*

2024-01-24秦文强吴仲城

计算机工程与科学 2024年1期
关键词:加速器流水卷积

秦文强,吴仲城,张 俊,李 芳

(1.安徽大学物质科学与信息技术研究院,安徽 合肥 230601; 2.中国科学院合肥物质科学研究院强磁场科学中心,安徽 合肥 230031;3.强磁场安徽省实验室,安徽 合肥 230031)

1 引言

随着深度神经网络算法的发展[1,2],智能应用不再局限于在云端服务器上运行,诸如智慧城市、智能安防等应用场景,对算法的移动嵌入式计算提出了迫切需求[3]。卷积神经网络CNN(Convolutional Neural Network)的前向推理过程是计算密集型任务,由于网络参数量和推理计算量大,使其难以高效地部署于资源有限的低功耗嵌入式设备。近年来,卷积神经网络在终端和边缘侧的应用处于快速发展阶段,模型的加速计算通常可采用CPU、GPU、专用ASIC、FPGA 4类芯片实现。直接使用CPU进行CNN的前向运算,很难满足实时性的要求;基于GPU的运算虽然速度快,但该类硬件平台一般体积大、成本高、功耗高。专用ASIC通过定制化可以有效提升模型运算速度,但开发周期长、难度大,一次性成本高。而FPGA因其高并行、低功耗、灵活可编程的优势,成为嵌入式设备部署智能应用的主要选择[4]。

在基于FPGA的嵌入式设备上实现高效的CNN模型部署,业界主要聚焦于研究如何降低网络在硬件上的实现复杂度,并实现高并行计算,减少访存开销,提升系统的吞吐率,同时保证模型推理精度。文献[5]采用量化的方法,降低资源消耗;文献[6]利用循环展开实现并行计算,利用流水化操作提升计算效率,但由于数据加载和卷积计算是串行进行,系统吞吐率较低;文献[7]利用循环优化增大并行度,同时提出了一种数据路由器,减少了内存访问的开销,但是该文献中的方法将权重参数全部导入片上BRAM,消耗大量资源,导致该方法难以应用于资源受限的平台,伸缩性较差。

目前,大部分神经网络加速器[8,9]都是针对大型CNN模型(如VGG16、ResNet50)进行设计的,硬件资源消耗较多且难以获得较高性能。近年来,一些研究人员开始研究轻量化网络的加速,文献[10]实现了轻量化模型SqueezeNet的FPGA加速器,利用特征图的稀疏性,采用跳过零激活及数据共享的方法,减少了计算量,但其批标准化在FPGA上实现,导致硬件复杂度和资源开销较大。文献[11]针对轻量化MobileNet设计了一个并行加速单元,并在卷积层之间实现了流水化操作,但由于其数据读取的速度不能很好地与计算并行度相匹配,导致计算效率不高。

针对以上问题,本文分别从网络模型优化以及硬件加速优化2个方面进行研究,通过批标准化融合和动态定点数量化对模型进行预处理,降低硬件实现复杂度;利用卷积分块策略,使系统具有较好的伸缩性;通过循环展开、流水化、数组分割的方法实现高效并行卷积计算,同时通过数据流优化的方法,提升了系统吞吐率。根据MobileNet网络结构特点,基于FPGA分别设计了标准卷积、逐点卷积、深度卷积、残差连接、池化和全连接IP (Intellectual Property)核,并结合CPU进行资源调度,实现了基于异构平台的MobileNet神经网络加速系统。

2 MobileNet神经网络

MobileNet系列网络模型[12-14]的主要特点是引入了深度可分离卷积的设计理念[15]。深度可分离卷积由深度Dw(Depthwise)卷积和逐点Pw(Pointwise)卷积组成,分别起到滤波和转换通道的作用。相比标准卷积操作,Dw卷积的卷积核负责单个通道的特征提取,通道间不叠加;Pw卷积是卷积核为1*1的标准卷积,通过将特征图在深度方向上进行加权组合,实现通道间信息的融合。该系列模型中,MobileNetV2网络采用线性瓶颈的反向残差结构,对特征空间先升维再降维,在移动应用上可提供高效的内存实现[13]。如图1所示,反向残差结构分为卷积步长分别为1和2的2种类型,图1中BN(Batch Normalization)为批标准化操作,ReLU6和Linear为激活函数。

Figure 1 Structure of reverse residual图1 反向残差结构

MobileNetV2网络整体配置如表1所示。其中,Conv 为标准卷积,bottleneck为线性瓶颈的反向残差结构,Avgpool 为平均池化,c为输出通道数,n为该模块重复次数,s为步长。

3 网络模型优化

3.1 批标准化融合

网络中每个卷积层的结构包括:卷积计算、批标准化和激活函数。本文将批标准化作为一个线性的操作融合到卷积计算中,融合过程如下所示。

卷积计算公式如式(1)所示:

y=w*x+b

(1)

其中,w为权重,b为偏置。

批标准化计算公式如式(2)所示:

(2)

其中,mean为均值,var为方差,γ为缩放系数,β为偏移系数。

将式(1)和式(2)进行结合得到式(3):

(3)

融合后,得到的卷积层新参数权重w_new和偏置b_new分别如式(4)和式(5)所示:

(4)

(5)

批标准化融合之后,在FPGA上,只需要让融合后得到的权重参数w_new和b_new参加卷积计算即可,省去了批标准化运算在FPGA端的实现以及批标准化参数传输的开销,同时降低了FPGA资源的消耗,提升了网络在硬件上的执行效率。

3.2 量化

神经网络训练完成后得到的参数是浮点型的,而在FPGA上进行浮点数运算,需要消耗大量的DSP资源和较多的时钟周期。因此,本文采用动态定点数量化方法[16],将32位的浮点型参数量化为16位的定点数,以减少资源的消耗和数据传输的开销,加快网络的推理速度。浮点数转化为定点数如式(6)所示:

xfixed=(int)(xfloat*2wd)

(6)

其中,wd为定点数中小数部分的位宽。

量化流程如下所示:

(7)

(2)确定第i层参数和特征图数据的整数位宽Ii,如式(8)所示:

(8)

(3)确定第i层参数和特征图数据的小数位宽Fi,如式(9)所示:

Fi=16-Ii

(9)

前向推理时,权重参数是固定的,但由于不同的网络输入,得到的每层输出不同。为了能保证最终结果的精度,本文用1 000幅图像进行推理,通过对每一层的输出求平均值,使特征图的数据范围更加准确。

4 硬件加速系统设计与优化

XILINX公司推出Vivado高层次综合HLS(High Level Synthesis),可以将高级抽象语言如 C、C++转换成 VHDL硬件描述语言,方便用户进行FPGA电路的设计、调试,提高开发效率[17,18]。本文利用Vivado HLS和C语言进行MobileNet加速器的FPGA设计与优化。

4.1 系统总体架构及功能划分

本文利用软硬件协同设计的方法。其中,CPU负责完成上层应用程序的执行以及系统的调度和控制,FPGA负责加速神经网络的前向推理,充分结合CPU的逻辑控制能力和FPGA的并行计算优势。异构系统需要在FPGA中设计软核处理器,虽然会消耗一定的FPGA资源,但可以实现软硬件设计的分离,底层的硬件开发人员负责对FPGA进行设计并封装,软件开发人员负责编写应用驱动程序,调用设计好的硬件模块。同时,在面对不同的上层应用需求时,无需再对底层的硬件设计进行不断的修改和调试,实现硬件模块的复用,较好地满足终端设备复杂的应用需求,非常适合人工智能在嵌入式边缘场景中的应用。

Figure 2 Overall framework of accelerated system图2 加速系统总体框架

图2为加速系统总体框架。在CPU端,设计应用驱动程序,完成推理前的准备工作。根据网络结构调用加速器中的相应模块完成前向推理,主要包括:系统初始化;为网络参数分配内存空间,加载参数到内存;对输入图像进行归一化、量化等预处理;将网络各层的配置参数传给加速器并调用具体功能模块进行计算;对加速器返回的图像分类结果进行评估。在FPGA端,根据MobileNet网络的结构特点,设计神经网络加速器,主要包括:标准卷积模块、深度卷积模块、逐点卷积模块、残差连接模块、池化模块、全连接模块。同时,在FPGA的片上BRAM中分别设计输入缓存、输出缓存、权重缓存,然后将FPGA加速器与CPU集成,构建模型加速SoC(System on a Chip)异构系统。加速器通过AXI4总线与CPU的AXI_HP接口连接,缓存与DDR3内存之间通过AXI4总线进行数据交互;通过AXI_Lite总线与CPU的AXI_GP接口连接,CPU利用AXI_Lite总线对加速器内部寄存器进行配置。内存DDR与AXI接口之间的数据交互主要由DDR控制器负责控制。

4.2 卷积加速架构设计

4.2.1 卷积分块

由于神经网络每层具有不同的规模,为了使设计具有一定的伸缩性,本文采用卷积分块策略[19],设计一个固定规模大小的通用卷积块单元,对卷积进行分块计算。如图3所示,输入的分块变量表示包括通道数Tn、宽Tic和高Tir,卷积核分块表示包括通道数Tm*Tn、宽Tkc和高Tkr,输出的分块变量表示包括通道数Tm、宽Toc和高Tor。其中,输入和输出分块变量满足如下关系:Tir=(Tor-1)*S+Tkr,Tic=(Toc-1)*S+Tkc,其中S为卷积核移动步长。

Figure 3 Computation in blocks of convolution图3 卷积分块计算

卷积块单元每次进行固定块大小的卷积计算,同时通过滑动窗口的方式对卷积块单元进行分时复用,从而完成所有输出特征图的计算。卷积块单元规模的确定需要综合考虑整个网络中所有卷积层的特征图尺寸、卷积核尺寸、输入和输出通道大小以及硬件开发平台的资源情况。在理想情况下,规模越大,并行计算时计算并行度越高,前向推理速度越快,但同时消耗的DSP和片上BRAM等硬件资源也越多。考虑到本文使用的目标硬件Zynq-7020芯片共有220个DSP,BRAM数量也较少,还需要给其他模块预留空间和资源,最终确定标准卷积的分块变量大小为:Tm=8,Tn=3,Tkc=Tkr=3,Toc=Tor=28。在实际应用中,需要在推理速度和资源消耗上进行折衷考虑。通过调节卷积块单元规模,使设计具备一定的伸缩性,以适应不同资源规模的平台。

4.2.2 并行卷积计算

卷积计算主要由输出特征图(高、宽)、输出通道、输入通道、卷积核(高、宽)6个维度嵌套的循环结构组成。本文通过调整卷积块内的嵌套循环顺序,将输出通道和输入通道的循环置于最内层,并且通过UNROOL指令对这2个维度进行循环展开,让编译器创建多组相同的硬件计算单元来实现并行计算,以此提高卷积计算效率。同时,通过PIPELINE指令进行流水化(如图4所示),使读数据(RD)、计算(CMP)和写数据(WR)流水化进行,增大吞吐率[20]。

Figure 4 Schematic diagram of pipelining图4 流水化示意图

Figure 5 Core hardware structure of parallel computing图5 并行计算的核心硬件结构

4.2.3 缓存分割

卷积块内的计算并行度分别为Tn、Tm*Tn和Tm,为了满足并行计算,需要在一个周期内完成数组中多个数据的同时读写。然而,数组在BRAM中是连续存放的,最多只有2个数据端口,为实现数据同时读写,本文采用了缓存分割的设计。如图6所示,ARRAY PARTIRION指令将输入缓存、权重缓存、输出缓存分别分割为具有Tn个读端口、Tm*Tn个读端口、Tm个写端口的BRAM区块,由此增加其读写端口的数量,从而实现了并行读写。图6中,Tm表示分割后BRAM区块的个数,[Tor][Toc]表示分割后BRAM区块的大小为Tor*Toc,[Tor]表示数组的行数,[Toc]表示数组的列数,其他变量的含义类似。

Figure 6 Schematic diagram of cache segmentation图6 缓存分割示意图

4.3 数据流优化

4.3.1 数据传输优化

由于FPGA 访问内存DDR会有较大的延时,为了减少访存开销,本文在设计上增加了读取数据的接口数量和接口位宽。如图7所示,将数据地址空间平均划分为4块,将每一块的首地址作为每个通道的入口地址,利用4个AXI接口并行读取数据,增加数据传输带宽,并且设置每个接口的位宽最大为64 bit。由于量化后的每个数据位宽为16 bit,所以每个通道可以同时传送4个数据,数据到达缓存后按16 bit分解为单个数据,并同时送入PE阵列进行运算。

Figure 7 Schematic diagram of data transmission optimization图7 数据传输优化示意图

同时,将数据在内存中以行优先的方式排布,使数据的读取顺序与数据在内存中的排布方式一致。在并行传输数据的同时,通过较长的突发传输长度抵消读地址通道握手的时间和一个数据读出所需等待的时间,以减少数据传输延迟。

Figure 8 Ping-pong caching mechanisms图8 “乒乓”缓存机制

4.3.2 任务级流水化

卷积分块计算可分为3个阶段:加载数据、卷积计算和写回结果。为了掩盖数据传输的时间,本文采用“乒乓”缓存机制实现任务级流水化。如图8所示,在FPGA的片上BRAM中设置2块同样大小的输入缓存、权重缓存和输出缓存,当缓存1加载数据时,PE阵列处理缓存2中的数据,并将结果写回;当缓存2加载数据时,PE阵列处理缓存1中的数据,并将结果写回。通过这种方式,使数据传输时间与计算时间重叠,减少了延迟并改善吞吐量,进一步提高了加速系统的性能。图8中的×代表没有数据流,该通路不工作。

Vivado HLS的综合结果分析界面如图9所示。可以看到,经过缓存分割和数据流优化后,模块的数据加载、卷积计算和写回结果3个过程同时执行。

Figure 9 Synthesis results analysis of Vivado HLS图9 Vivado HLS综合结果分析

4.4 其它模块设计

4.4.1 深度卷积模块

深度卷积计算方式与标准卷积不同,一个卷积核只负责卷积特征图的一个通道。因此,深度卷积只需要5个维度嵌套的循环,其它实现方法与标准卷积基本一致。首先,进行卷积分块,根据深度卷积层的特征,确定分块大小为:Tm=8,Tkc=Tkr=3,Toc=Tor=7,然后,在输出通道上进行循环展开、流水化、数组分割操作,并利用数据传输优化和“乒乓”缓存机制进行数据流优化,以提高计算的并行度和吞吐率。

4.4.2 逐点卷积模块

逐点卷积与标准卷积计算方式一致。卷积核尺寸为1*1。先进行卷积分块,确定分块大小为:Tm=Tn=8,Toc=Tor=14,之后将块内的计算变为二维矩阵的乘法运算,即A[14*14][8]*B[8][8]=C[14*14][8]。然后,在输入、输出通道2个维度上进行循环展开、流水化、数组分割操作,利用数据传输优化和“乒乓”缓存机制进行数据流优化。

4.4.3 残差连接模块

该模块用来完成反向残差结构中的支路残差求和,输入2幅同样大小的特征图,将2幅图对应位置的数据相加取和,得到输出数据。通过在通道维度上使用循环展开和流水化的方法来加快运算过程。

4.4.4 池化模块

池化部分采用一种基于“部分和缓存”的多路并行计算方法,池化核大小为7*7,内部逻辑如图10所示,计算原理如下所示:

(1)模块先从DDR读取数据到In_buf中,用通道指针来控制数据读取的位置,在设计中使用5个部分和缓存Psum存储中间结果。

(2)将每个通道的数据两两相加,放入Psum中,并通过PIPELINE指令使部分和间的计算并行流水进行,得到最终的平均池化值,送入Out_buf。

(3)同时,在输入通道维度进行循环展开和流水化,设置通道并行度T=32,直到完成所有通道的池化计算。

该池化操作通过多路通道并行的部分和累加计算,加快了池化计算的速度。

Figure 10 Pooling operation process图10 池化运算过程

4.4.5 全连接模块

全连接用于最终的分类输出。本文使用的ImageNet数据集共有1 000个类别。全连接计算的实质为:向量A[1280]与矩阵B[1280][1000]相乘得到向量C[1000]。本文对矩阵的行、列2个维度进行循环展开和流水化,设置并行度为:Tn=32和Tm=10,并使用“乒乓”缓存机制来加快计算过程。

5 实验及结果分析

实验采用XILINX公司推出的 PYNQ-Z2开发板作为测试平台,该平台采用ZYNQ-7020芯片,芯片内部资源如表2所示,FPGA端的时钟频率为125 MHz,ARM端的时钟频率为667 MHz。

Table 2 Chip resources表2 芯片资源

本文首先在PC端用ImageNet数据集训练MobileNetV2网络,得到网络每层的权重参数和批标准化参数;然后经过批标准化融合和量化将最终的权重参数导入开发板中。实验对比了分别利用CPU和CPU+FPGA进行CNN推理的性能表现。CPU方案是指在ARM端安装TensorFlow深度学习框架,搭建MobileNetV2网络模型,只利用CPU进行网络前向推理;CPU+FPGA方案是指不使用深度学习框架,利用本文设计的加速器进行前向推理。

加速系统的实验流程设计如下:

(1)首先,基于FPGA使用Vivado HLS完成加速器各模块IP核的设计;

(2)然后,利用Vivado将加速器IP核结合CPU搭建加速系统,验证设计并生成比特流,加载到开发板;

(3)最后,在CPU端设计应用驱动程序,调用加速器完成神经网络的前向推理。

实验结果如表3所示。可以看到,基于MobileNet神经网络的加速系统对单帧图像的推理时间为0.18 s,相对于仅使用ARM单核处理器实现了128倍的加速效果。本文采用了动态定点数量化的方法,将32位浮点型参数量化为16位的定点数。为了比较量化前后模型的准确率,采用1 000幅图像进行测试。结果表明,量化后的准确率仅下降了0.3%,说明本文采用的量化方法对模型的精度影响较小;加速系统运行时的平均功耗为2.62 W,满足低功耗的设计要求。

Table 3 Experimental results表3 实验结果

各模块资源占用情况如表4所示,可以看到加速系统整体资源消耗较少。由于本文采用了卷积并行计算和任务级流水化等方法使卷积部分资源消耗占比较大,其中卷积部分消耗的DSP资源占总耗资源的97%,消耗的BRAM资源占总耗资源的65%。

Table 4 Resource usage of each module表4 各模块资源占用情况

表5对比了本文工作与相关工作的综合性能。其中,文献[8]提出了一种数据重排方法,提高了外部存储器带宽的利用率,但由于其加速的网络为参数量较大的VGG16,在占用较大资源的情况下,单帧推理时间较长且功耗较高;文献[11]实现了卷积层之间的流水化,增大了系统的吞吐率,整体设计消耗的资源较少,系统功耗也较低,但系统的推理延迟较大;文献[21]在FPGA中直接用32位的浮点数进行运算,尽管通过通道间并行计算提升了卷积计算效率,同时采用DMA加快了数据在内存和FPGA片上缓存之间的交互,减小了访存延迟,但最终的推理延迟较大。在量化策略上,本文和文献[8]、文献[11]的设计中都将网络参数量化为16位定点数。可以看出,本文单帧推理速度是文献[11]的16.08倍,是文献[21]的99倍。

6 结束语

本文提出了一种新的基于异构平台的卷积神经网络加速架构,设计并实现了基于MobileNet的轻量化卷积神经网络加速系统,利用动态定点数量化和批标准化融合的方法,减少了硬件复杂度和资源开销;利用卷积分块、并行卷积计算、数据流优化的方法,提高了卷积运算效率,增大了系统吞吐率,使系统具有较好的伸缩性。在PYNQ-Z2平台的实验结果表明,该系统具有高效的计算内核,图像识别速度快,加速效果明显且功耗低,可以将Mobilenet网络高效地应用于资源有限的嵌入式设备。下一步利用卷积神经网络加速系统研制面向行业应用的视觉检测智能终端,将系统部署于实际应用场景中。

Table 5 Comparison of system design synthesis results表5 系统设计综合对比

猜你喜欢

加速器流水卷积
莫比斯加速器众创办公空间
知识快餐店 科学加速器
基于3D-Winograd的快速卷积算法设计及FPGA实现
全民小康路上的“加速器”
流水
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
流水有心
等待“加速器”
前身寄予流水,几世修到莲花?