APP下载

面向ZYNQ SoC的卷积神经网络加速器研究

2022-12-06武世雄尹震宇张飞青徐福龙

小型微型计算机系统 2022年12期
关键词:加速器运算权重

武世雄,高 巍,尹震宇,张飞青,徐福龙

1(沈阳化工大学 计算机科学与技术学院,沈阳 110000)

2(中国科学院 沈阳计算技术研究所,沈阳 110168)

3(辽宁省国产基础软硬件工控平台技术研究重点实验室,沈阳 110168)

1 概 述

近年来,卷积神经网络(Convolutional Neural Network,CNN)能够实现图像识别、目标检测和自动翻译等任务,已经被广泛应用于智能制造、自动驾驶和航天航空等领域[1-5].由于神经网络模型层数的不断加深以及结构复杂度的不断提高,使用中央处理器(Central Processing Unit,CPU)或者图像处理器(Graphics Processing Unit,GPU)通常会遇到功耗较高、便携性不足等问题.为有效缓解这些问题,在网络层面上提出了很多减少模型参数的方法,如参数量化[6]、网络剪枝[7]等;在硬件层面上,由于严格的计算、存储和能耗等资源的限制,现场可编程门阵列(Field Programmable Gate Array,FPGA)成为CPU和GPU的可替代方案,利用其并行性[8]和可灵活配置[9]等特点加速卷积神经网络,可以大大提高计算的性能并降低功耗.

由于FPGA片上资源有限,如何提高计算的并行度并降低片上存储资源成为当前卷积神经网络加速器面临的主要问题.通常卷积运算由乘法器和加法器构成,但是使用FPGA实现乘加运算需要更多的硬件资源.Zhang等人提出了Roofline模型以优化资源利用率,有效的提高了循环流水的性能[10].Ma等人提出一种从输出特征图数、高度和宽度展开的架构,并且优化循环操作和数据流操作进行卷积神经网络加速,但该文将输入特征图和权重参数都缓存在片上,很难在低端FPGA上运行[11].Han等人提出,在不损失准确率或准确率损失较小的情况下,用位数较低的数据如4-8位的数据代替全精度浮点数是可行的[12,13].Qiu等人提出了参数重排及数据量化的方法,并设计了一种在卷积核长宽二维展开的加速器架构,但建模时没有考虑传输时延,导致实际性能与理论相差较大[14].上述研究提出各种方法通过并行计算和内存优化,以达到计算单元利用率和缓存数据复用率的最大化,进而实现计算性能的提高和片上内存的优化.

本文在前人的研究基础上,针对目前卷积神经网络结构复杂、参数较多导致硬件资源消耗较大等问题,设计了面向ZYNQ SoC的卷积神经网络加速器,包括:

1)通过软硬件协同配合,能够对图像进行识别分类,采用滑动窗口间并行策略提高了并行计算能力;

2)该加速器进行了参数量化,在精度损失很小的情况下,大大节省了片上存储资源;

3)同时进行了权重参数的重排序,能够以较大的突发长度进行传输,有效的减少了访存次数,提高了带宽的利用率.

2 卷积神经网络

卷积神经网络通常以反馈的方式训练,以前馈方式进行图像分类,而FPGA更适合神经网络算法的推理阶段,其工作流程为逐层提取输入图像的特征,最终通过分类器得到所需要的结果,CNN主要有卷积计算、全连接计算、批归一化(Batch Normalization)计算、激活函数处理和池化计算.

卷积神经网络主要由多个卷积层组成,整个神经网络百分之九十以上的计算量来源于卷积层,卷积层是整个神经网络的主体部分,其主要作用是对输入的图像数据进行特征提取,其计算公式如下:

(1)

公式(1)中:Qn(i,j)为第n张输出图像上(i,j)处的输出特征;wmn(x,y)为卷积核(x,y)处的权重值;gm(s0i+x,s0j+y)为第m张输入图像在(s0i+x,s0j+y)处的特征值;bn为第n张输出特征的偏置值;Mn为输入图像的通道数,Xn和Yn为卷积核的长宽,S0为步长.

卷积层输出的结果需要经过批量归一化和激活函数处理.批量归一化处理可以有效避免数据在激活之前被转化成相似的模式,从而使得非线性特征分布趋于同化,可以解决梯度爆炸的问题,加速网络的收敛;激活函数的作用是将特征保留并映射出来,用来增强卷积神经网络的非线性,本文选择ReLU函数作为非线性激活函数.除此之外,还需要经过池化层进行特征选择和信息过滤,池化层包括最大池化和平均池化,本文选择最大池化来降低数据的维度,防止图像过拟合.

最后进入全连接层,该层将特征图进行整合和分类以得到整个图像的信息,该层权重参数较多,访存较频繁,可以看作特征图与卷积核在做1×1的卷积操作,以实现特征分类.最后经过Softmax逻辑回归函数得到分类结果,其计算公式如下:

(2)

公式(2)中w为神经元的权值,K为要分类的类别数,T为转置,x为上一层的输出平铺后的结果,i为预测的类别,p为当输入为x预测类别为i的概率.

VGG-16网络是一种典型的深度CNN模型,由Simonyan和Zisserman在2014年提出的,在ImageNet2014分类大赛中Top-5错误率仅为7.4%[15],仅次于GoogleNet的6.7%,是一种非常强大的深度卷积神经网路,能够提取图像中的更深层特征,分类能力突出.在此之后,不断出现层数更多的网络结构,如VGG-19,是通过加深网络结构来提高网络分类的性能.因为网络越深,梯度退化阻碍了网络的收敛.所以,本文采用VGG-16,标准的VGG-16网络包含13个卷积层和3个全连接层,使用3×3的卷积核,并通过2×2最大池化来减小运算规格.其网络结构如图1所示.

图1 VGG-16卷积神经网络结构

3 硬件系统设计

3.1 总体设计框架

本文所提出的系统整体硬件架构如图2所示,卷积神经网络加速器在PS(Processor System)端对整个加速器进行控制操作,在PL(Programmable Logic)端进行卷积神经网络的并行计算.PS端主要包含串口控制模块、流程控制模块和存储控制模块;PL端主要包含直接内存存取(Direct Memory Access,DMA)模块、卷积运算模块、特征增强模块、全连接模块、逻辑回归模块和中断模块.

图2 系统整体硬件架构图

串口控制模块主要用于接收运算结果并打印结果信息;流程控制模块是ARM处理器对整体系统进行控制;存储控制模块主要用于对动态随机存储器(Double Data Rate,DDR)的控制操作;DMA用于DDR与片上缓存器之间数据传输;卷积运算模块用于对CNN中卷积层进行运算操作;特征增强模块进行非线性处理运算,用于实现参数的量化操作、反量化操作、ReLU运算、批量归一化(Batch Normalization,BN)运算和池化运算;全连接模块用于实现图像分类;回归模块用于完成回归模块概率运算并且给出预测结果最大的前五个概率和标号;中断模块为全局中断控制模块,负责接收卷积运算模块、特征增强模块、全连接模块和逻辑回归模块相对应的中断,并对接收到的中断进行整合操作.

本文所设计的卷积神经网络硬件加速器运算流程图如图3所示,首先需要对神经网络图像数据和权重参数进行量化处理,接着将权重数据和图像数据加载到DDR中,并且分别对卷积模块、特征增强模块、全连接模块和回归模块的寄存器进行配置.

图3 运算流程图

然后,使用DMA将部分图像数据和权重参数写入片上缓存,通过中断模块对卷积、池化和全连接运算进行控制,直到整个卷积神经网络中所有层运算完成之后,将运算的结果通过DMA写回到DDR;最后,进行Softmax运算,通过寄存器的方式将预测结果传回串口并打印.

3.2 数据预处理模块设计

3.2.1 感知量化前向传播过程

CNN训练过程通常会采用多种方法来提高训练结果的准确度,在进行模型前向推理的过程中,会对卷积神经网络的参数进行预处理,可以减少前向推理的计算量,有利于对模型进行量化处理,提高运算的速度.

卷积神经网络计算涉及的操作数一般默认是32位或者是64位的浮点数,但是Han等人的相关实验证实,在不损失准确率或者准确率损失较小的情况下,对于卷积神经网络的乘加运算,用定点数代替浮点数进行运算是可行的,而且将定点数的数据位宽调整到16位或8位[12].相比于浮点数,使用位数相对较少的定点数,可以有效减少数据带宽,增加FPGA片上存储的数据,减少访问DDR的次数,同时还可以增加吞吐量和计算的性能.

本文对权重参数和输入特征图进行8位定点量化,如下以一层卷积运算进行ReLU和全连接运算为例.一个浮点数f需要量化到(0,N-1)的范围内,本文采用的量化位宽为8,那么N为256.f表示浮点数,q表示量化后的定点数,浮点数和量化后定点数转换公式如下:

f=S(q-Z)

(3)

(4)

其中S表示缩放系数,为任意大于0的浮点数;Z表示零点,当Z为0时,f为q的量化值.其公式如下:

(5)

(6)

其中fmax和fmin分别表示浮点矩阵的最大值和最小值,qmax和qmin分别表示量化后定点数矩阵的最大值和最小值.

(7)

假设第1层卷积的中间结果为a1,经过ReLU之后的结果为a2,卷积运算公式如下:

(8)

(9)

(10)

M≈(int)(2-n×M0)

(11)

其中M0为[0.5,1)之间的定点数;n是正整数,为乘以2的次数.

对于ReLU来说,计算公式不再是qa2=max(qa1,0),而是qa2=max(qa1,Za1),并且Sa1=Sa2,Za1=Za2.量化后的全连接层为如下公式:

(12)

通过上述过程的量化中间结果,可以用定点数的移位和乘加来拟合浮点数的乘加运算,除了推理过程中的预处理和后处理外,在FPGA端使用量化后的定点数进行计算和传输,这将会大大提高传输速度和计算速度.

3.2.2 参数重排

对于权重参数,在本文的加速器中,将预先训练好的权重参数加载到DDR.在未排序的情况下如图4(a)所示,将分配64个长度为900的缓存区,在进行卷积层的计算时,权重参数会逐个填充到缓冲区,导致DMA频繁读取DDR中的权重参数,为了减少DMA频繁启动和在进行全连接层的计算时,读取数据保持较长的突发长度,将在DDR中进行权重数据的重排.Qiu等人采用参数排序方式如图4(b)所示,该排序是将整个矩阵分成64个9×100的块,需要按箭头的顺序从DDR读取100×9大小的权重参数64次,但是由于参数不连续,需要访存100×64次,每次的突发长度为9[14];而本文采用的排序方式如图4(c)所示,由于每次读取的参数的存放是连续的,只需要访存64次,每次传输的突发长度为100×9.采取本文所述的参数重新排序后,增大了突发长度并且减少了大量的访存次数,保证带宽有较高的利用率,减少了数据传输带来的开销.在DMA读取DDR的权重参数到片上缓存时,设置了片上双缓存,利用“乒乓”数据传输机制,可以有效的用计算时间掩盖数据的传输时间,减少了程序整体的执行时间.

图4 DDR中权重参数排序

3.2.3 滑动窗口间并行

本文加速器中卷积部分的运算数据流,采用滑动窗口间并行策略.首先进行图像的预处理,该预处理模块与徐欣等人[16]采用的结构相似,对图像数据进行重组和对齐,实现图像数据的高度并行传输和计算.文中使用W表示图像的宽度,M表示数据传输的并行度,即一个时钟周期内并行传输的数据个数;N表示数据计算的并行度,为一个卷积核在图像上可同时计算的结果个数;K为卷积核的大小.预处理单元由3个先进先出线性缓存器(FIFO)组成,目的是缓存图像数据,使得输入数据为行对齐结构,满足卷积运算对数据格式的要求.

为实现并行计算,输入图像的宽度W应为数据传输并行度M的整数倍,如果不满足整数倍需要做Padding操作扩充输入图像,以在W/M个时钟周期内完成输入图像每行数据的传输.这样图像数据就可以以行对齐的方式存储在线性FIFO中,不会产生行错位.然后,行对齐输出要求对FIFO进行同时读取,使不同行的输入位置的数据一起输出.最后,将读取的图像数据组合成卷积矩阵,输入到计算模块,与系数进行卷积运算.

如图5所示的输入图像为8×8,卷积核大小为3×3,其中原始图像大小为6×6,因为要使输出特征图和原始图像一样大,通过padding操作进行像素填充,DMA将输入特征图搬运到片上缓存,首先经过FIFO进行缓存,解决外部图像输入与内部计算电路时钟域异步问题.按行优先的顺序对输入图像进行读取,数据传输的并行度M设置为8,滑动步长为1.图像的边长正好为数据传输并行度的整数倍,所以无需在FIFO中补充无效数据.该例中使用3个FIFO缓存三行输入数据,实现行对齐输出,如图5(b)所示.当卷积核的滑动步长为1时,每个卷积操作的输入矩阵之间有重叠区域,故按照如图5(c)的方式进行组合可得到6个卷积矩阵.然后复用如图5(d)的卷积核与每个输入矩阵进行乘加运算,这样一个时钟周期就可以得到如图5(e)中6×6的输出图像.

图5 滑动窗口间并行

综上所述,虽然卷积层的原始计算模式是计算完一个滑动窗口,再向右移动一个步长,计算新的窗口.本文可以先连续从输入特征图中提取多个相邻的滑动窗口,不同的滑动窗口使用相同的卷积核,大大降低了卷积核的读取次数,并且增加了计算的并行度.

3.3 卷积加速器模块设计

3.3.1 卷积整体架构

卷积模块的整体架构如图6所示,处理单元(Processing Element,PE)主要负责卷积运算过程的乘加运算,数据重组模块对图像数据进行Padding操作和重组对齐.卷积模块的运算过程为:卷积运算模块接收控制模块发送读取数据指令,按照指令进行相关寄存器的配置,并且根据指令要求从卷积权重缓存中读取权重参数传给各个PE模块,同时从图像数据缓存中读取图像数据到数据重组模块,数据重组模块进行图像数据的Padding操作和重组对齐,然后将图像数据传给每个PE模块进行卷积运算.卷积运算完成后,将卷积运算结果通过DMA发送到特征增强模块,进行ReLU运算或者池化运算.

图6 卷积运算模块整体架构

由于不同卷积核对同一输入数据的卷积操作在一个PE中进行计算,因此输入数据只需要从DDR中读取一次便可以在片上多次使用,这有效的提高了片上数据的使用率,一定程度上减少了访存次数.

3.3.2 计算核心单元设计

本文加速器计算核心单元的具体实现细节如图7所示,该加速器是由Poy×Pox×Pkx×Pkx个乘累加(Multiply-Accumulation,MAC)单元组成,每个MAC由一个乘法器和一个加法器组成,从输入数据缓存区读取图像数据由Pox×Pkx×Pkx个MAC单元共享,滑动窗口重叠的数据可以被重用;从权重缓存区中读取的权重参数由Poy×Pkx×Pkx共享.等待权重数据和图像数据进入MAC单元之后,一个时钟周期可以完成2×Poy×Pox×Pkx×Pkx次乘法和加法运算,即MAC单元的并行度为Poy×Pox×Pkx×Pkx.每个MAC将计算结果输出到加法树中进行累加操作,最后加入偏置,输出到输出缓存.

图7 卷积计算核心单元

3.4 控制调度流设计

本文网络的不同卷积层之间参数不同,图像的尺寸、通道数和卷积核的数量也不相同,每一次卷积计算的循环次数和相关寄存器的配置由控制器进行控制与调度,该控制器通过AXI总线控制计算核心单元有序执行,控制DMA将DDR中的数据搬运到片上缓存,从而对不同卷积层进行计算.

如图8所示为本文控制流的处理:将从DDR中读取的权重数据和图像数据写入到片上缓存,卷积模块读取相关数据进行卷积运算,然后交给特征增强模块进行BN运算、ReLU运算和池化运算,最后将运算结果写回到输出缓存,等全部运算结束后将得到的最终结果写回到DDR.

图8 控制调度流

4 实验结果分析

4.1 实验平台

本实验使用的FPGA芯片为Xilinx ZYNQ XC7Z100-2FFG900I(Kintex-7架构).采用的卷积神经网络模型为VGG-16,数据集为ImageNet数据集.本文加速器工作频率为100MHz,使用Xilinx公司的Vivado 2019.1软件进行综合和布局布线,使用Modelsim SE-64 10.7进行仿真.

4.2 SoC系统设计与验证

本文通过Verilog HDL语言完成各个IP核的设计,然后将各个IP核进行配置和连线,完成Block Design设计.在设计输入之后、设计综合之前进行功能仿真,使用Vivado和Modelsim进行联合仿真对电路设计进行验证.对完成的电路添加约束并进行综合,进一步布局布线之后可以得到时序分析报告和资源使用率报告.设计完成后加入调试所需要的集成逻辑分析器(Integrated Logic Analyzer,ILA)进行时序仿真,该仿真可以真实的反映逻辑的时延和功能,综合考虑电路各个路径延迟与门延迟的影响,验证电路能否在一定时序条件下满足设计构想和是否存在时序违规.经过调试验证之后,得到满足时序要求的SoC系统设计.最后将综合后的Bitstream文件导入Vivado SDK中进行软件层面的开发和验证.如表1所示为本文FPGA资源的使用情况.

表1 FPGA资源利用情况

在FPGA中采用32位浮点数进行运算时,需要3个DSP资源才能实现一次乘累加运算;而使用8位定点数进行运算时,只需要一个DSP就可以实现一次乘累加运算.本文实现了8位定点精度的卷积神经网络加速器,相对于32位浮点数,用8位定点数来实现卷积神经网络对网络整体的精度影响较小,如表2所示,采用8位定点数的模型参数量较32位浮点数的参数量减少了75%,大大减少了数据的传输时间和存储资源,同时减少了逻辑资源的使用,进而提升了加速器的性能和运算的速度.

表2 网络参数

本文采用软硬件协同配和的方式对卷积神经网络进行加速,FPGA对卷积神经网络中大量的乘法和加法进行运算,ARM处理器用于初始化卷积神经网络加速过程中各层参数的配置和对FPGA的各个IP核进行调度.如表3所示为本文神经网络加速器与其他加速器在加速VGG-16的性能比较.该加速器工作频率在100MHz下,处理一张224×224的图片所需要的时间为15.10ms(66.21帧/s),功率为2.47W,能耗为0.16KJ,本文功率相比于文献[17]降低了69.13%,较文献[18]降低了74.35%;本文卷积运算的性能为99.5GOPS,峰值性能能够达到306.24GOPS,整个加速过程中的平均性能为80.88GOPS,平均性能较文献[19]提升了0.29倍;性能密度较文献[18]提升了1.76倍,较文献[19]提升了1.14倍;使用的DSP的数量仅为文献[18]的22.05%和文献[19]的59.72%.

表3 相关工作对比

5 结束语

本文通过对卷积神经网络的参数及网络结构进行分析,提出了一种面向ZYNQ SoC的卷积神经网络加速器,对参数进行了8位定点量化和重新排序,使用了滑动窗口并行策略进行加速.实验表明量化后的VGG-16网络参数量减少的同时,该加速器性能有明显的提升.下一步的工作中,将增大硬件加速VGG-16的并行度,灵活使用LUT来代替部分DSP资源,尽可能的去发挥FPGA的并行计算能力.

猜你喜欢

加速器运算权重
莫比斯加速器众创办公空间
知识快餐店 科学加速器
权重望寡:如何化解低地位领导的补偿性辱虐管理行为?*
重视运算与推理,解决数列求和题
全民小康路上的“加速器”
权重常思“浮名轻”
有趣的运算
为党督政勤履职 代民行权重担当
“整式的乘法与因式分解”知识归纳
组织知识传播与共享评价指标体系及其RS权重配置