FPGA 实现卷积神经网络加速器①

2023-11-20 08:36张立国黄文汉
高技术通讯 2023年10期
关键词:浮点单通道池化

张立国 黄文汉 金 梅

(燕山大学电气工程学院 秦皇岛 066004)

0 引言

近年来,深度学习[1]被广泛应用于安全防护[2]、医疗康养[3-5]、自动驾驶[6-8]等领域。卷积神经网络(convolutional neural network,CNN)是深度学习中的一种重要架构。目前,实现卷积神经网络加速器的平台以中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、专用集成电路(application specific integrated circuit,ASIC)和现场可编程门阵列(field programmable gate array,FPGA)为主[9]。其中,CPU 受限于内存带宽,计算CNN 的大量数据时效率较低;GPU 拥有大量计算核心和高速内存带宽,主要用于加速图像数据的运算,在深度学习训练阶段的优势明显;ASIC[10-12]是可以实现特定算法的加速器,在计算效率、功耗和面积上表现最好;但是,ASIC 只能为既定的算法加速,昂贵的开发成本不能适应愈发复杂和深层次的网络结构。相比之下,FPGA 具有高并行度、低功耗、灵活编程和短开发周期等特点,这些综合优势使FPGA 相较于其他3 个平台更适合深度学习的前向推理过程。

本文设计基于FPGA 的卷积神经网络加速器,神经网络结构为LeNet-5[13],使用Verilog 硬件描述语言,数据格式为IEEE 754 标准的16 bits 浮点类型。

近年来,已有许多对FPGA 实现卷积神经网络的相关研究。

文献[14]使用异构计算架构成功实现了目标检测卷积神经网络的硬件加速。方案选择软核CPU 实例化在FPGA 上,并通过CPU 控制数据调度,使FPGA 能够实现卷积、ReLU 非线性激活、最大值池化等算法的硬件加速。通过按照特定方式排列输入数据,实现了将多维卷积运算转化成一维卷积运算,从而提高了数据并行度。尽管该方案只能为特定神经网络进行加速,但其成功地为硬件加速提供了一种可行的方案。值得注意的是,一旦神经网络结构发生改变,则需要重新搭建加速系统,无法应对复杂多变的神经网络。

文献[15]提出的卷积硬件计算单元设计具有可扩展性,可以在资源有限的情况下复用卷积计算模块,同时采用对应数据分割的形式提高并行度,从而显著提高了第1 层卷积的计算速度。然而,该方案在卷积复用的同时会牺牲速度,因此在要求实时性的应用场景中可能缺乏优势。

文献[16]设计了一个2D 卷积算法,该算法采用较少的寄存器、乘法器、加法器和控制模块,从而节省了大量的硬件开销。该算法使用块浮点(block-floating-point,BFP)算法进行数据处理,数据位宽选择16 位和8 位,相比传统的32 位数据位宽,可以至少降低50%的资源开销。但是,这种算法采用较低精度的数据运算方式,因此不可避免地导致识别精度下降。

1 关键技术设计

1.1 浮点运算单元设计

在大多数对卷积神经网络加速器的硬件设计中,采用量化后的16 位[17]甚至8 位[18]定点数作为参数。这样的设计虽然可以减少数据存储以及计算量,但是不可避免地损失了精度。于是,本文设计浮点运算单元(processing element,PE),它由浮点加法器和浮点乘法器构成。

浮点运算单元相对于定点运算单元的优势有:

(1)可以表示非常大或非常小的数值,以及小数和分数。

(2)可以提供高精度的计算和表示,因为指数位和尾数位的可变性。

(3)通过硬件的优化,在消耗一定资源的同时,可以减少延时,且达到几乎等同于神经网络最优的精度效果。

在浮点数加法器硬件电路设计中,为了减少资源开销,设计预移位(pre-shifting)功能:如果2 个操作数指数不相等时,将较小的数值通过右移操作使指数相等。

在浮点乘法器的设计中,有效数字的乘法运算占运算时间的比重最大,因此,将指数计算与有效数字计算并行,消去了指数计算时间,提高了计算效率。

将浮点加法器串联在浮点乘法器后组成浮点运算单元,并且加入3 个寄存器用以寄存输入和输出。

1.2 并行度优化设计

卷积神经网络中的三维图像卷积运算是卷积神经网络中的重点。图像的三维卷积运算可以按不同维度进行拆解,从而达到不同程度的并行度。图1所示为卷积层多层嵌套循环模型图。

图1 卷积层多层嵌套循环模型图

将图像卷积运算按照不同维度展开可以得到不同的并行度。

(1)卷积核内的并行

卷积核内的并行是指在卷积运算中,对于每一个卷积核内的元素,都可以独立地进行计算,从而加速卷积运算。具体来说,假设卷积核的大小为K×K,那么在卷积运算的过程中,可以同时计算卷积核内的所有元素,而不需要逐个进行计算。这种并行计算的方式可以有效地提高卷积运算的速度。

(2)特征图内的并行

特征图内的并行是指在卷积神经网络中,一个特征图与一个卷积核的卷积操作相当于将卷积核在特征图上滑动计算卷积,同时参与计算的滑动窗口的个数称为特征图内的并行度。

(3)输出通道间的并行

特征图与一个卷积核进行卷积运算后输出一张二维的特征图作为输出特征图的一个通道。同时参与卷积计算的卷积核个数即为输出通道间的并行度。

设计卷积核内全并行,特征图内的并行度根据例化卷积运算单元调节,输出通道间的并行度通过例化单通道卷积模块个数调节。因此,本文设计的加速器在卷积运算部分可以在各维度进行并行度调节,适应不同网络结构,可重构性强。

2 系统架构设计及具体实现

2.1 加速器系统总架构

本文设计的卷积神经网络硬件加速系统架构如图2 所示,系统主要由寄存器传输级(register transfer level,RTL)描述的卷积神经网络加速器、直接内存访问模块与处理器组成。卷积神经网络加速器主要负责卷积层、激活函数层、池化层、全连接层和SoftMax 层的计算。直接内存访问模块承担数据的传输。处理器的功能是通过配置总线为整个系统的任务进行调度以及加速器中寄存器的配置。存储器用于存储输入图像数据、特征图缓存数据和输出结果数据。

图2 卷积神经网络加速系统架构

实验实现的卷积神经网络结构为LeNet-5,该卷积神经网络结构的卷积核大小均为5 ×5,步长为1,池化方式采用平均池化,激活函数为ReLU 函数。输入图像尺寸固定为32 ×32。

2.2 可调并行度的浮点基本运算模块设计

LeNet-5 网络共有3 层卷积层,每层卷积层的卷积核种类分别为6、16、120。

图3 是浮点加法器结构图,运算数据为IEEE 754 标准格式的16 bits 浮点数,2 个输入记为操作数1 和操作数2,输出为记为和。按照IEEE 754 标准格式将2 个输入操作数拆包为符号位、指数位和尾数位。在操作数1 或操作数2 的特殊情况下,和分别为操作数2 或操作数1。一般情况下,首先比较2 个操作数的指数部分,以指数大的数为标准,另一个输入操作数通过右移指数差值个位数使指数相等。其次判断两输入的符号位,若符号位相同,则小数部分直接相加;若符号位不同,则用正数减负数。最后结果打包为IEEE 754 标准格式输出。

图3 浮点加法器结构图

图4 是浮点乘法器结构图,2 个输入操作数分别记为操作数1 和操作数2,输出记为乘积。特殊情况下,其中一个输入为0 时,乘积为0。一般情况下,首先用异或判断符号位是否相同,若相同则乘积符号为正;若不同则符号位为负。根据IEEE 754 标准,乘积的指数为操作数1 的指数与操作数2 的指数的和,小数部分直接用一个乘法器相乘,乘积规则化的同时调节指数位。

图4 浮点乘法器结构图

本文设计的浮点乘法器与浮点加法器组合成浮点基本运算单元,如图5 所示。浮点乘法器输入2个16 bits 的数据,浮点加法器把浮点乘法器的结果与上一次累加的结果相加。

设计的卷积运算单元如图6 所示,其中例化浮点基本运算单元,每个浮点基本运算单元运算需要一个周期,根据卷积核的尺寸可以求出卷积运算单元需要的周期数。

图6 卷积运算单元

设计的单通道卷积模块并行结构如图7 所示,其中例化卷积运算单元模块,通过改变例化卷积运算单元模块的数量,可以控制单个卷积核对一个特征图进行卷积运算的并行度。通过滑窗选择模块将输入特征图分割成与卷积核尺寸相同的多个滑窗块,用于同时和卷积核计算。

图7 单通道卷积模块并行结构

本文设计多通道模块并行结构如图8 所示,通过增加例化单通道卷积模块的数量,可以让特征图和不同卷积核同时进行卷积运算,提高了输出通道的并行度。卷积核选择模块从卷积核堆中选择需要运算的卷积核。

图8 多通道卷积模块并行结构

2.3 激活层模块

本设计采用了ReLU 函数作为激活函数。

ReLU 函数公式如式(1)所示。

ReLU 函数图像如图9 所示。

图9 ReLU 函数图像

相较于Sigmoid 函数和tanh 函数,ReLU 函数具有3 个优势。首先,它更贴近于生物学神经元的工作方式。其次,梯度下降和方向传播的效率更高,这有助于避免梯度爆炸和梯度消失等问题。最后,Re-LU 函数的计算较为简单,不需要像其他复杂的激活函数一样进行指数和幂函数运算,降低了资源开销。根据ReLU 函数,数据与0 比较即可得到输出值。

2.4 可调并行度的平均池化模块设计

设计平均池化单元结构如图10 所示,该单元由3 个浮点加法器和1 个移位寄存器组成。当执行采样区域尺寸为2 ×2 的池化运算时,如图所示,将数据1 和数据2 相加、数据3 和数据4 相加,再将2 个和相加,加法器3 的输出结果进入乘法器与常数0.25相乘得到一个池化采样区的结果。

图10 平均池化单元

设计单通道平均池化模块并行结构如图11 所示。通过改变实例化平均池化单元的数量,可以调整池化采样的并行度。在资源充足的情况下,可以尽可能地提高并行度,以提高运算效率。以LeNet-5网络为例,当处理一张尺寸为N×N的特征图时,最大并行度可以达到(N/2)× (N/2)。

图11 单通道池化模块并行结构

设计多通道平均池化模块结构如图12 所示,通过改变例化单通道平均池化模块的数量而改变同时进行池化特征图的层数。最大并行度即为特征图深度。

图12 多通道平均池化模块并行结构

2.5 优化SoftMax 模块设计以适应FPGA 运算

LeNet-5 神经网络的全连接层后还有一层Soft-Max 函数,其作用是将求得的分类结果归一化,得到每个分类的概率。而实际应用中,只需要知道概率最大的一个或者几个分类,并不需要关心其概率大小,所以为了减少资源开销和提高运算速度,本设计采用比较器选择出最大的一个分类来代替SoftMax模块。

3 实验结果分析

本实验在Vivado 工具上进行仿真和综合,电路最高工作频率为100 MHz,在Xilinx 的Zynq UltraScale+MPSoC ZCU104 开发板上进行验证。

Xilinx FPGA 开发板资源名称说明:查找表(look-up table,LUT);触发器(flip-flop,FF);数字信号处理器(digital signal processing,DSP)。

以下对各模块的资源分配情况进行统计及分析。

3.1 卷积单元模块

资源使用情况如表1 所示,该模块使用205 个LUT,82 个FF,1 个DSP。

表1 C 卷积单元模块资源统计表

由此可以看出,对于1 次卷积运算(1 块卷积区域和1 个卷积核的卷积过程),只需要使用1 个DSP就可以实现。

3.2 单通道卷积模块

资源使用情况如表2 所列,该模块使用6137 个LUT,4296 个FF,28 个DSP。

表2 单通道卷积模块资源统计表

该模块的功能是将输入特征图的一个通道按卷积核尺寸分割成一定数量的待卷积运算的块,其数量可以自由调节。当资源足够,可以增加例化卷积单元的数量提高运算并行度。本实验设置例化卷积单元的数量为28,即将输入特征图分割成28 个待卷积运算的块,同时进行28 个卷积运算。

3.3 多通道卷积模块

资源使用情况见表3,该模块使用98 192 个LUT,68 736 个FF,448 个DSP。

表3 多通道卷积模块资源统计表

该模块的功能通过改变例化单通道卷积模块的个数来改变同时输出特征图的通道数。卷积核选择模块从卷积核堆中选择即将进行卷积的卷积核。在资源允许的情况下,该模块可以通过例化更多的单通道卷积模块,实现多个卷积核之间的运算并行度。

3.4 结果分析

在100 MHz 工作频率下,计算输入特征图尺寸为14×14×6,与16 个尺寸为5 ×5 的卷积核进行卷积运算,例化的卷积单元模块个数为28,单通道卷积模块个数为16,此时加速器峰值算力为44.8 GFLOPS,功率为4.51 W。

本文的硬件加速器性能与CPU、GPU 对比如表4所示,速度显著高于CPU,功耗低于GPU 2 个量级。

表4 CPU、GPU 与硬件加速器性能对比表

本文的加速器性能与其他研究的硬件加速器对比如表5 所示,文献[19]使用16 bits 定点数,精度要低于本文的设计,对比文献[20]的设计,本文的能效比要高2.15倍。

表5 与其他硬件加速器研究比较表

4 结论

根据本文实验部分的结果进行分析可以得出,本文设计的卷积运算单元资源开销极少,核心运算单元DSP 只需要1 个。并且可以通过调节单通道卷积模块和多通道卷积模块中例化子模块的数量来调节并行度,在不同资源的FPGA 上平衡面积、功耗和速度。

未来的研究方向如下:卷积核内的并行度对卷积运算的效率提升有重要的影响,可以考虑脉动阵列等方式使计算效率进一步提升;在数据传输上,可以考虑增加Ping-Pong 以减少数据存取带来的延时。

猜你喜欢
浮点单通道池化
面向神经网络池化层的灵活高效硬件设计
基于Sobel算子的池化算法设计
LEO星座增强GNSS PPP模糊度浮点解与固定解性能评估
卷积神经网络中的自适应加权池化
基于联合聚类分析的单通道腹部心电信号的胎心率提取
基于浮点DSP的铁路FSK信号检测
基于卷积神经网络和池化算法的表情识别研究
基于扩频码周期性的单通道直扩通信半盲分离抗干扰算法
基于FPGA的浮点FIR滤波器设计
采用6.25mm×6.25mm×1.8mm LGA封装的双通道2.5A、单通道5A超薄微型模块稳压器