原文标题:ABM-SpConv: A Novel Approach to FPGA-Based Acceleration of Convolutional Neural Network Inference
北京交通大学 王东老师团队的成果
1.引言
、、、
主流CNN推理加速器三种:
·SDConv 空间
·FDConv 频域
·SpConv 稀疏(基于剪枝)
峰值吞吐量:FDConv>=SpConv>SDConv
他们都基于MAC资源框架,用光了DSP资源,而其他资源没得到充分利用
我们提出新的、基于累加器的ABM-SpConv
、、、
支持该想法的见解是,量化的CNN模型仅具有固定数量的可能值(例如,对于4位定点数为16个值),
因此可以通过分解来避免卷积中执行的许多乘法。 为此,我们首先开发一种新方法,
该方法在分离的阶段执行卷积的乘法和累加运算。 然后,我们设计了一个异构硬件体系结构,
该体系结构由一个“大”累加器阵列和一个“小”乘法器阵列组成,可以在其上有效地映射卷积的两个阶段。
我们的方案将基于FPGA的CNN加速器的设计空间转换为一个具有2×Nacc×Freq的提高的计算顶数的空间,
其中Nacc是使用的累加器数量,而Nacc远大于Nmac,如图1所示。
总而言之,这项工作的贡献是:
·我们提出了ABM-SpConv,这是一种新的稀疏卷积方案,与乘法相比,它可以实现更高的累加算术强度,
从而使加速器设计空间的计算屋顶随着累加器的约束而转换。
·我们提出了一种FPGA加速器架构,该架构由累加器和乘法器的异构数组组成,以匹配ABM-SpConv的独特计算流程。
开发了几种优化方案,包括半同步并行处理和基于索引的权重编码,以确保高效地利用数据路径,
以及较低的外部存储器带宽要求。
·介绍了用于设计空间探索的完整流程,并开发了用于找到最佳硬件参数的关键设计步骤。
与Stratix-V GXA7 FPGA上的最新设计相比,已实现的加速器在推理吞吐量上提高了1.55倍。
2.背景知识
CNN由多个功能层[11]组成,每个功能层都对输入图像或特征图执行某种类型的算术运算。
作为计算最密集的层,卷积计算由迭代的3维(3-D)MAC操作组成,如下所示:
卷积定义公式1(略)
- THE ABM-SPARSE CONVOLUTION
在本节中,我们介绍“乘前累积稀疏卷积”(ABM-SpConv)方案。
关键思想是分步执行累加和乘法运算,以便通过消除冗余运算来降低乘法的算术强度,因此,在FPGA上实现时,
放宽了对DSP单元的需求。
假设权重W被量化并保持在定点
格式具有q位精度,W最多存在Q = 2^q个不同的值。 通过将这些定点值表示为Wp,其中p = 0,···,Q -1,
我们对等式1进行因式分解,如下所示:公式2
其中FIp(w)表示在卷积核中乘以相同权重Wp的输入特征像素。
基于这个新方程,我们建议在两阶段流中进行卷积计算,如下所示:
(1)对于每个非零的Wp,找到并累加卷积核中的所有特征点FIp(w),总共产生Q − 1个乘积;
(2)将每个部分乘积乘以相应的Wp并进行最终累加以获得当前卷积核的输出值
对所有卷积通道重复执行步骤(1)和(2),将生成所有M×R×C输出特征图像素。
研究[6]表明,可以以8位(或更低)的精度对权重进行量化,而推理精度的降低幅度不到1%。
因此,对于8位量化权重,我们的方案对于每个卷积核最多需要256次而不是N×K×K乘法
(对于修剪后的权重,实际数量很多小于256)。
另一方面,可以轻松地跳过Wp = 0时FIp(w)的累积,
这意味着硬件实现还可以利用稀疏性来减少计算复杂性和权重存储的内存占用。
在表1中,我们报告了在修剪的VGG16模型上执行ABM-SpConv时所需的加法和乘法运算次数[7]。
与SDConv相比,节省了83.6%的总操作(累加和乘法),而FDConv [3]和SpConv [7]的减少分别为47.1%和50%
- 硬件结构设计
4.1 设计挑战
新的卷积方案带来了以下新颖的设计挑战:
(i)不同卷积内核之间的不规则稀疏性模式引入了不平衡的工作量,
这阻止了我们在由紧密同步的执行处理元素组成的加速器体系结构上实现卷积的完全并行性,例如MAC阵列。
(note:不同卷积核可能包含的不同量化值不同,自然导致不同的ABM-SpConv工作量,这就导致快的要等着慢的,资源利用率下降)
(ii)累加和乘法运算具有不同的算术强度,并且在两个不同的计算阶段中执行。
将两种操作都映射到同质的硬件体系结构上会导致计算资源利用率低。
(iii)该算法还需要根据权重的不规则位置随机访问存储器中的特征图数据,这会降低外部存储器带宽的效率,
并且在数据路径设计中需要复杂的数据流控制。
在以下部分中,我们将讨论我们提出的硬件体系结构,该体系结构解决了上述设计挑战。
4.2 结构设计
图2-(a)显示了所提出的ABMSpConv加速器的总体架构,包括任务调度单元,获取/存储单元和多个卷积单元(CU,Convolution Unit)。
任务调度程序检测每个CU的状态,并且每当有空闲CU时,它都会在该CU上启动新的计算任务。
如图3所示,计算任务定义为在输入特征图的预取窗口上执行的一组卷积运算。
每个CU都有自己的循环计数器,因此可以独立地执行工作量各不相同的任务。
仅当使用新数据更新特征图缓冲区时(这种情况很不频繁),才执行CU的同步。
实测的CU利用率数据(请参见第6节)表明,这种半同步CU架构成功解决了第一个设计难题。
Convolution Unit(CU):
为了解决第二个设计问题,我们提出了两个独立的累加器和乘法器阵列的异构CU体系结构,如图2-(b)所示。
累加器阵列累加共享相同权重Wp的输入特征图FIp像素,并将部分结果存储到以下FIFO中。
然后,乘法器读取部分结果,将其与定点Wp相乘,并将乘积发送到Sum / Round逻辑以进行最终处理。
我们进一步将累加器分成几组,以便每Ng个累加器在数据路径中共享一个乘数。
卷积期间,乘法器以循环方式动态选择上游FIFO的输出作为其输入操作数。
通过适当设置FIFO深度,可以有效地流水线进行两级卷积计算。
这种硬件结构使加速器可以使用比DSP多Ng倍的累加器来加速CNN推理计算。
在最终设计中,采用16位累加器和16b x 16b乘法器以确保全精度定点计算,并且在卷积过程中不丢失任何信息,
从而保证了等式(2)的有效性。 在将要素图数据写回到主存储器之前,舍入(Rounding)仅执行一次。
On-Chip Buffer:
图4说明了修剪后的CNN模型是如何编码和存储在一对本地缓冲区中的。
为了减轻数据路径控制的开销,我们建议根据权重缓冲区(WT-Buffer)中相应Wp的顺序对非零权重的索引(n,k,k)进行编码。
另一个小缓冲区(Q-Table)用于存储额外的信息,包括W的固定点值(VAL),索引的相应出现次数(NUM)
和编码权重的出现总数,这些信息 由循环计数器和乘法器使用。
专用的地址生成器旨在即时解码权重,将索引映射到特征图域,并从特征图缓冲区(FTBuffer)加载连续的数据流。
如图3所示,根据预取窗口缓存了批处理的特征图,并对特征矩阵进行了矢量化处理,
以便利用数据级并行性进一步提高加速器的吞吐量。 本地缓冲区FTBuffer,WT-Buffer和Q-Table的宽度分别为8·Svec,16和16位。
Design Parameters:
可以通过以下设计参数配置建议的体系结构,以实现灵活的性能和硬件成本:
(1)Ncu –并行CU的数量; Nknl –可以在一个CU上并行执行的卷积运算的最大数量; Ng –共享相同乘数的累加器数量。
(2)Svec –矢量化输入数据的宽度
(3)Df,Dw和Dq –分别是局部特征的深度,权重和Q-Table缓冲区。
- 设计空间探索
(后面的设计空间探索,Result等有兴趣可以去原文看)