基于FPGA 的量化CNN 加速系统设计

2022-03-12 05:56杰,赵烁,何虎,邓
计算机工程 2022年3期
关键词:加速器定点卷积

巩 杰,赵 烁,何 虎,邓 宁

(清华大学微电子学研究所,北京 100084)

0 概述

卷积神经网络(Convolutional Neural Network,CNN)凭借强大的图像处理能力,被广泛应用于图像识别、目标检测[1-2]等多个领域,但同时其网络规模、参数量与计算量不断增加,如何将CNN 高效地部署至硬件平台成为当下重要的研究课题。

目前多数CNN 都是在CPU/GPU 平台以32 位的浮点数形式进行运算,但CPU 在并行计算方面存在缺陷,并不适用于CNN 的计算,GPU 虽然在并行计算方面有巨大优势,但是高能耗的特点导致其在便携式移动设备环境下也不适用。现场可编程门阵列(Field Programmable Gate Array,FPGA)不仅能满足并行计算与低功耗的需求,而且还具有高度的灵活性,可适用于不同场景,因此,FPGA 可为CNN 部署提供有效的解决方案[3]。

在研究CNN 硬件加速方法的过程中,学者们一直力求于低功耗、高能效[4-5]。一种常见的方法是通过压缩模型来达到减小模型体积和降低硬件资源消耗的目的。目前,使用更低位宽如8 位、16 位的定点数来表示原始的32 位浮点数进行推理计算已经被证明有效且得到广泛应用[6-8]。将高精度参数替换为低精度参数能有效降低存储、内存带宽等硬件资源需求且几乎不影响模型准确率。在模型压缩方面,学者们还使用网络剪枝[9]、模型蒸馏[10]等方法来达到减少模型参数、提高计算效率的目的。另一种常见方法是通过面向CNN 中占比大的计算操作如卷积计算、全连接层计算、激活函数计算等设计专门的硬件进行计算加速[11],主要有面向并行计算、针对数据通路的加速器设计等[12-14]。

针对目前浮点数CNN 模型规模和硬件资源消耗大的问题,本文设计一种通用的CNN 动态定点量化方法及加速系统,并以VGG-16 与ResNet-50 网络为例部署至FPGA 平台进行实验验证。

1 算法分析

1.1 网络参数与计算量

CNN 的主要计算有卷积计算、全连接计算、批归一化(Batch Normalization,BN)、激活函数、池化计算等。本文所选用的VGG-16 网络包含13 层卷积层与3 层全连接层,ResNet-50 网络包含49 层卷积层与1 层全连接层。对网络参数与计算量进行统计分析,由表1 可以看出,本文所选用的2 个网络参数量都非常大,VGG-16 对一张图片的推理所需乘加操作达到10G 级,虽然ResNet-50 中的残差连接一定程度上减少了计算量,但是对于通用处理器来说这样的规模同样巨大,因此,必须设计专用加速器。

表1 网络参数与计算量Table 1 Parameters quantity and calculation quantity of the networks

1.2 网络运算时间

为使加速器设计更有针对性,对网络中各层所占用的运行时间进行分析。使用C 语言搭建2 个模型,选用单张3×224×224 像素大小的图像作为输入,分别进行前向推理计算并统计运算时间。由表2 可知,在CNN 中,绝大部分的计算操作都是卷积计算以及全连接层的计算,而全连接层实际上可以看作是特殊的卷积操作,本文重点在于对卷积参数做有效量化并结合硬件设计进行加速计算。

表2 网络各层计算量与运行时间Table 2 Calculation quantity and running time of each layer in the networks

2 网络量化

2.1 网络预处理

目前绝大多数的CNN 卷积操作都是按照卷积、BN、ReLU 的顺序进行的,引入BN 层的目的是在训练时加快模型收敛速度以及避免过拟合[15]。BN 的计算公式如式(1)所示:

其中:γ为缩放因子;μ和σ2为当前Batch 的均值和方差;xi为卷积计算结果;ε为防止分母为0 所添加的十分小的正数;β为偏置。由式(1)可以看出,在前向推理计算时,BN 层增加了不必要的参数量,同时还会消耗一定的硬件资源。为了加快计算速度,本文将卷积与BN 层的参数进行融合。卷积计算公式如式(2)所示:

其中:Wconv为卷积核参数;bconv为偏置。同时,将式(1)改写为式(3)所示形式:

BN 的输入实际为卷积计算的输出,因此,将式(2)、式(3)合并,得到卷积和归一化融合后的式(4):

2.2 量化方法

量化这一方法在神经网络加速运算的研究领域很常见,目前常用的量化方法主要分为基于码本的量化与定点量化两种[16-18]。基于码本的量化是将张量中的每个值通过缩放因子与零值映射到一个有限集合的某个元素,此集合即为码本。定点量化是将单精度浮点网络参数以低位定点数来替代。以VGG-16 为例,其网络参数与层间结果分布如图1 所示。

图1 VGG-16 网络数据分布Fig.1 Data distribution of VGG-16 network

从图1 可以看出,VGG-16 网络中不同层的参数范围有较大出入,并且层间结果相对于网络参数来说都过大。因此,本文采用动态定点量化方法,即针对不同结构选择合适的参数分别对其进行量化以达到最优效果。为了避免量化位宽不够的情况,通过式(5)的方法寻找合适的整数位:

其中:x为待量化数;lint为整数位长度。由此可以得到小数位长度lfloat=lbw-lint,其中,lbw为量化后位宽。

图2 为2 个8 位定点数的例子。上半部分的小数位为4,其表示的数为22+21+2-1+2-2+2-4=6.812 5。下半部分的小数位为-1,其表示的数为27+26+24+23+21=218。通过小数位所在位置,能够有效地将定点数还原至其十进制数值,同时在后续过程中使用定点8 位数替代浮点数运算。

图2 8 位定点数结构Fig.2 Structure of 8 bit fixed-point

对待量化参数进行量化处理,如式(6)所示:

其中:s为符号位值;x为有效位值。

3 定点量化卷积加速器设计

基于上文提出的动态定点量化方法设计加速器结构,如图3 所示。加速器主要包含控制器、片上缓存、传输单元、计算核4 个部分,其中:控制器通过总线从CPU 获取数据传输、缓存、计算的相关配置信息并分别进行配置,保证整个计算流程稳定、准确;片上缓存暂存来自DDR 的输入和网络权重以及计算输出数据;传输单元用于传输内存与偏上缓存间的数据;计算核则完成整个加速过程的核心计算。

图3 加速器计算结构Fig.3 Computing structure of accelerator

3.1 片上缓存与传输单元

片上缓存主要分为输入、输出和权重的缓存,计算核中同时还有暂存卷积计算中间结果的缓存和暂存定点处理模块输入数据的缓存。数据缓存能有效地降低DDR 和加速器的数据传输频率,不但能满足卷积核参数复用的需求,而且还能降低数据搬运的能耗。

输入输出与权重的缓存分别使用2 个不同的传输单元控制以提高数据传输的并行度,其中权重的数据传输采用ping-pong 模式进行,即同时进行DDR 到缓存的数据传输和计算核的加速计算,提高了加速效率。

3.2 计算核

计算核是加速器的核心模块,包含3 个子模块,分别为MAC 模块、量化处理模块(Quantization Process Module,QPM)和激活函数模块,其结构如图4 所示。

图4 计算核结构Fig.4 Structure of computing core

MAC 模块主要由乘加阵列构成,其作用为将卷积核与对应输入特征映射的部分乘加结果与其对应通道的部分乘加结果累加,通过提高卷积计算并行度和阵列循环展开计算来提高计算效率。

QPM 为量化处理模块,主要负责量化运算,具体由移位、加偏置、舍入和截断4 个部分组成。QPM计算过程如图5 所示,为了避免溢出,卷积乘加结果以32 位形式暂存,与偏置求和时,因为定点数小数点位置不同,所以需要先进行移位操作使两者小数位相同,再进行加操作,随后判断是否有进位产生,最后移位至小数点位置与输出小数点位置相同并截断至8 位位宽,完成一次卷积计算,这样整个计算流程都是以定点数形式进行,而不需要将定点数反量化为浮点数再进行计算。

图5 加速器量化计算流程Fig.5 Quantization computing process of accelerator

激活函数运算模块由控制信号决定进行ReLU、LeakyReLU 和ByPass 中的一种操作。其中:ReLU由选择器实现,当输入小于0 时,输出为0,否则保持不变;LeakyReLU 由选择器与移位器实现,即输入小于0 时,将数据右移3 位得到输出值。

3.3 多核扩展加速器SoC

最终设计的CNN加速器片上系统(System on Chip)结构SoC如图6所示,主要包含DDR,Zynq系统和可扩展的加速器等模块,其中,数据通过AXI4-Full总线传输,控制信号通过AXI4-Lite总线传输。为了提高计算效率,将计算核的数量扩展至4个,SRAM 的大小也相应提高为原来的2倍,总算力相较于单核加速器提升近4倍。

图6 多核扩展加速器SoC 结构Fig.6 SoC structure of multi-core expansion accelerator

4 实验结果与分析

使用基于caffe深度学习框架的VGG-16与ResNet-50 预训练模型,以ImageNet ILSVRC2012 为数据集,单张图片大小设置为3×224×224 像素进行量化,得到不同位宽下网络Top-1 准确率,如图7 所示。

图7 Top-1 准确率随量化位宽的变化趋势Fig.7 Change trend of Top-1 accuracy with quantization bit

从图7 可以看出,将卷积权重和中间结果量化为8 位,全连接层权重量化为4 位,可以在Top-1 准确率损失较小的情况下实现更大的压缩率,因此,实验采用上述量化方案,量化结果见表3。可以看出,2 个网络的Top-1 准确率损失均在1%以内,VGG-16 和ResNet-50分别压缩为原来的13.8%和24.8%,表明本文量化方法效果显著。

表3 量化结果Table 3 Quantization results

提取量化后的模型参数,使用C 语言搭建前向推理计算网络模型,输入量化后的ImageNet ILSVRC2012 验证集。使用Vivado 搭建本实验的仿真环境并将生成的bitstream 文件导入XilinxZCU102开发板,处理器与加速器的工作频率分别为100 MHz 和300 MHz。之后在VivadoSDK 中实现网络,输入图像进行预测。

加速器SoC 各资源利用情况如表4 所示。本文加速系统运行VGG-16 的性能与其他加速器的比较如表5 所示。可以看出,在300 MHz 工作频率下,VGG-16 和ResNet-50 完成单张图片推理所需时间分别为166.2 ms 与109.6 ms,与其他FPGA 的实现相比,本文系统在峰值性能和能效上均有较大提升,其中峰值性能最高可达614.4 GOPs,提升了4.5 倍,能耗比达113.99 GOPs/W,提升了4.7 倍。

表4 加速器SoC 各资源利用情况Table 4 Utilization of each resource in accelerator SoC

表5 加速性能对比Table 5 Acceleration performance comparison

5 结束语

本文通过对CNN 的参数结构和计算特性进行分析,设计一种通用的动态定点量化与计算加速系统,并对计算核进行4 核扩展以提高加速性能。在ImageNet ILSVRC2012 数据集上进行性能测试,结果表明,量化后网络的Top-1 准确率损失在1%以内,VGG-16 和ResNet-50 网络模型分别压缩至原来的13.8%和24.8%。与其他加速系统相比,本文设计的加速系统峰值性能达614.4 GOPs,最高提升4.5 倍,能耗比达到113.99 GOPs/W,最高提升4.7 倍。后续将优化量化方法,并将计算核扩展至8 核,进一步提升加速系统的整体性能。

猜你喜欢
加速器定点卷积
莫比斯加速器众创办公空间
知识快餐店 科学加速器
例谈圆锥曲线中的定点定值问题
定点帮扶让村民过上美好生活
解析几何中定点问题的处理策略
基于3D-Winograd的快速卷积算法设计及FPGA实现
全民小康路上的“加速器”
直线过定点的5种特优解法
卷积神经网络的分析与设计
从滤波器理解卷积