背景技术
随着深度学习模型参数数目从数百万(如计算机视觉中的ResNet系列)到甚至数千亿(如自然语言处理中的BERT或GPT-3)的快速演变,庞大的计算量成为深度神经网络(deep neural network,DNN)部署到实际应用中的主要障碍之一。尽管具有更深层次和更复杂神经元连接的模型为不断增长的精度需求提供了良好保障,但对于更重要的实时性要求,却没有跟随DNN的发展。这一问题在资源受限设备上尤为突出。
针对上述问题,神经网络剪枝技术被公认为是可获得模型良好精度和减少计算量的有效方式。但是几乎所有传统的剪枝方法都依赖于软件层面,此类剪枝通常包括以下步骤:(1)根据重要性指标,确定神经元的重要性;(2)根据预设的压缩比,删除不重要的部分神经元;(3)微调网络以恢复精度,或者在精度低的情况之下调整重要性指标并再次重新开始剪枝。
然而,由于深度学习应用的多样性,难以找到一种通用的基于软件的剪枝方法。因此,终端用户必须根据DNN的超参数和结构化参数重新考虑针对特定应用的剪枝标准,并从头重新实施以上步骤进行剪枝。这种繁琐耗时的重复工作限制了DNN在实际使用中的快速部署。此类剪枝方法的问题及其原因主要存在于以下三个方面:
(1)从模型角度来看,DNN模型自身的稀疏性并不利于软件剪枝。具体而言,剪枝利用一个重要性指标来确不重要的参数。该指标衡量的是权值和激活值在不同角度下的稀疏性。比如:激活值中0的比例、基于L1-norm判断滤波器的重要性、以及滤波器的信息熵等。此类指标试图剪枝零或接近零的参数,然后重新训练模型,直到达到最佳精度。然而,一个指标可能适用于某些DNN模型,但对其他的DNN却并不适用。此外,模型自身的稀疏性空间也不总是足够的。因此,一些剪枝方法必须进行耗时的稀疏训练以增加参数的稀疏性。在精度损失之后重新训练或者微调来弥补丢失的精度。
(2)从效率的角度来看,软件剪枝方法在微调/重训练阶段耗时耗力,因为剪枝剩下的参数并不能保证模型可以达到剪枝前的原始精度。因此传统的方法必须依赖于在同样的数据集上进行重训练/微调来弥补精度丧失。但是重训练/微调通常需要经历长达数日或数周的迭代,并且上述程序通常是逐层实现的。如果我们将剪枝应用于VGG-19,则需要重新训练模型19次,每次迭代几十个epoch,来恢复损失的精度。耗时的迭代阻碍了将剪枝模型部署到设备上。并且若剪枝之后精度较差,则需要重复上述步骤。考虑到其他具有上百层的通用网络(ResNet、DenseNet),或者是具有更多、更复杂连接的3D卷积、非局部卷积、可形变卷积,开发者通常面临着同时获取良好精度和花费较短时间这一不可回避的挑战。
(3)从加速器的角度来看,首先,非结构化剪枝极大依赖于硬件。之前的研究提出了大量针对特定剪枝的加速器。如,针对解决非结构化剪枝不规则性的Cambricon-S,针对全连接层的EIE,针对长短期记忆网络(long short-term memory,LSTM)模型的ESE,但这些加速器都不支持卷积神经网络推理计算中的主体——卷积层计算。其次,加速器的设计还依赖于不同的稀疏化方法。SCNN探索了神经元和突触稀疏性,然而Cnvlutin仅支持神经元稀疏性。则若软件开发者改变了剪枝策略或仅仅是从结构化剪枝调整到非结构化剪枝,硬件部署也必须改变,这将引入移植开销。
理想情况下,预训练的DNN应当尽可能快速地在硬件上剪枝,更进一步的,硬件应当能以一种高效便捷的方式直接实施剪枝,而并非通过繁琐的软件层面操作来加速DNN推理。对于大部分软件剪枝方法,传统的剪枝步骤包括识别和剪枝不重要的参数。然而,正如前文所述,基于值的稀疏性空间十分有限,如果压缩比设置过大,则不可避免地会导致严重的精度损失。如若这样的情况发生,则传统剪枝会采用以下两种方案:①降低压缩比,从头重新进行剪枝;②采用稀疏训练,为剪枝创造更多稀疏空间。软件层面剪枝耗时的原因也源于此。
发明内容
本发明的目的是解决上述现有技术的剪枝效率问题,提出了一种针对DNN参数比特进行硬件剪枝的方法—BitX,并设计了实施BitX剪枝算法的硬件加速器。本发明包括以下关键技术点:
关键点1,BitX硬件剪枝算法,本发明提出的剪枝是基于有效bit的剪枝方法,并提出了多种如何判断bit有效的方法;技术效果,本申请判断bit有效度的方法无需借助软件层面进行剪枝、独立于现有软件剪枝方法并且支持多精度DNN,即基于有效bit的剪枝可以基于硬件实现;
关键点2,硬件加速器架构设计;技术效果,硬件加速器可在硬件层面实现BitX剪枝算法。
具体来说针对现有技术的不足,本发明提出一种神经网络实时剪枝方法,其中包括:
步骤1、获取神经网络模型中待矩阵乘的比特矩阵,并以比特矩阵比特行与比特列的欧氏距离乘积,作为该比特矩阵中各比特行在矩阵乘运算中的重要度;
步骤2、根据该重要度将比特矩阵的每个比特行划分位重要行或非重要行,并将该比特矩阵的非重要行中为1的比特位置零后得到的矩阵,作为该比特矩阵的剪枝结果。
所述的神经网络实时剪枝方法,其中该步骤1包括通过下式得到该比特矩阵中各比特行在矩阵乘运算中的重要度:
式中pi为该比特矩阵中第i个比特行在矩阵乘运算中的重要度,Ei为第i个比特行元素的比特位值,BitCnt(i)为第i个比特行中有效比特数,l为该比特矩阵的列数。
所述的神经网络实时剪枝方法,其中在执行该步骤1之前,获取多个待矩阵乘运算的原始权重,判断该原始权重是否属于定点数,若是则执行该步骤1,否则将该原始权重所有尾数统一对齐到该多个原始权重的最大阶码,并将对齐后的矩阵作为该比特矩阵,执行该步骤1。
所述的神经网络实时剪枝方法,其中该比特矩阵为权重矩阵和/激活矩阵;且该步骤2包括:将该比特矩阵中重要度最高的N个比特行划分为重要行,N为正整数且小于该比特矩阵的比特行总数。
本发明还提出了一种神经网络实时剪枝系统,其中包括
模块1,用于获取神经网络模型中待矩阵乘的比特矩阵,并以比特矩阵比特行与比特列的欧氏距离乘积,作为该比特矩阵中各比特行在矩阵乘运算中的重要度;
模块2,用于根据该重要度将比特矩阵的每个比特行划分位重要行或非重要行,并将该比特矩阵的非重要行中为1的比特位置零后得到的矩阵,作为该比特矩阵的剪枝结果。
所述的神经网络实时剪枝系统,其中该模块1包括通过下式得到该比特矩阵中各比特行在矩阵乘运算中的重要度:
式中pi为该比特矩阵中第i个比特行在矩阵乘运算中的重要度,Ei为第i个比特行元素的比特位值,BitCnt(i)为第i个比特行中有效比特数,l为该比特矩阵的列数。
所述的神经网络实时剪枝系统,其中在调用该模块1之前,获取多个待矩阵乘运算的原始权重,判断该原始权重是否属于定点数,若是则调用该模块1,否则将该原始权重所有尾数统一对齐到该多个原始权重的最大阶码,并将对齐后的矩阵作为该比特矩阵,调用该模块1。
所述的神经网络实时剪枝系统,其中该比特矩阵为权重矩阵和/激活矩阵;且该模块2包括:将该比特矩阵中重要度最高的N个比特行划分为重要行,N为正整数且小于该比特矩阵的比特行总数。
本发明还提出了一种神经网络加速器,其用于上述神经网络实时剪枝系统。
所述的神经网络加速器,其中包括由多个CU组成的PE,每个CU接受多个权重激活值对作为输入,输入的权重值由该模块2进行剪枝处理。
所述的神经网络加速器,其中CU中提取器extractor的每个选择器selector针对一个剪枝后的二进制权重,且选择器extractor记录每个重要行中比特位的实际位值,用于对相应激活值进行移位。
本发明还提出了一种包括存储介质的服务器,其中该存储介质用于存储执行上述神经网络实时剪枝方法。
对于本发明提出的BitX加速器,可根据不同配置形成了BitX-mild和BitX-wild加速架构,技术效果如下:
(1)速度提升:BitX-mild和BitX-wild在32位浮点数模式下相比未剪枝的模型可获得2.61~4.82倍加速,在16位定点数模式下可以达到2.00倍加速。针对物体检测,与原始模型—YoloV3相比速度提高了4.98倍和14.76倍。
(2)准确率:在ImageNet数据集,利用BitX-mild和BitX-wild剪枝,准确率损失分别为0.13%和0.44%;在Cifar-10数据集上为0.09%和0.15%。以上精度数据均基于32位浮点数模式。在16位定点模式下,对于BitX-mild,准确率比原始DenseNet121和ResNext101模型高0.9%和0.2%;对于BitX-wild高0.8%和0.1%。对于YoloV3,BitX-mild的准确率比原始模型高0.06%和0.07%;BitX-wild则低0.31%和1.64%。
(3)加速器性能:与其他最先进的加速器设计相比较。BitX加速器实现了2.00倍和3.79倍的性能提升。在TSMC 28nm工艺下,加速器面积为0.039平方毫米,功率分别为68.62毫瓦(32位浮点数模式)和36.41毫瓦(16位定点数模式)。
具体实施方式
考虑到传统剪枝的缺陷以及剪枝高效需求的必要性,我们重新思考了现存的剪枝方法,在比特层面对参数进行了稀疏性分析。并探索了一种新的剪枝方式,提高了剪枝效率。比特层面参数稀疏性分析结果主要结果如下:
表1:不同预训练模型权重/比特稀疏性比较,权重由32位浮点数表示,比特稀疏性明显大于权重稀疏性
如上述表1所示,权值稀疏性通过小于10-5的权重值的数目与权重总数相比得到。比特稀疏性通过尾数中比特为0的数目与总比特数目相比得到。显而易见的是对于两种稀疏性指标,所有的模型都展示出了明显的区别。大部分模型的权值稀疏性都在1%以下,比特稀疏性却达到了49%。这为在比特层面上探索稀疏性提供了一个良好的机会。因为49%以上的比特都是0,剪枝这些无效比特毫无疑问对精度不会产生任何影响。本发明将充分利用这一良好条件来加速DNN推理。
49%的比特为0同时意味着51%的比特是1,也占据了参数比特很大的一部分。但是并非所有的比特1都会对最终的精度产生影响。因此比特1中一部分为实际数值极度微小的比特1,是影响计算效率的一个因素(这一因素在此前的研究中,从没有被考虑过)。因此,在探索完比特层面的稀疏性之后,我们进一步将技术方向移向无效(影响微小)的比特1。
因此,我们以比特分布(每10个阶码范围作为一个分片)为单位来研究比特1的分布。如图1所示,x轴表示的是二进制(以32位浮点表示)权值的比特分片,每个比特分片表示其位置上的位值。假设某个权重位1.1101×2-4,其二进制表示为0.00011101,我们所记录得到的四个有效比特1的位值分别是2-4、2-5、2-6、2-8。
如图1所示,4个基准DNN模型都呈现类似分布:三维图峰值在横坐标处于2-21~2-30时达到,说明此范围的位值涵盖了大部分的bit 1(约40%),但其中大部分bit 1对推理精度影响微弱。本发明BitX旨在剪枝这些比特,以加速推理。在经过二进制转换之后,比特分片的范围从29~20变化到2-61~2-70。所有的模型都在每层上都呈现为“拱形”。大部分(40%)的比特1位于比特分片的中部。以2-21~2-30为例,其对应的十进制范围为0.000000477(约为10-8)到0.000000000931(约为10-11)。但实际上,此类微小的比特1值对于模型精度影响很小。因此,本发明旨在精确识别重要的比特并在加速器上剪枝大部分影响微小的比特,以达到精度损失很小的条件下减少计算量的目标。
浮点操作数由三部分组成:符号位、尾数和指数,遵循工业界最常用的浮点标准—IEEE754标准。若采用单精度浮点数(fp32),则尾数位宽为23位、指数位宽8位,剩下一位为符号位。一个单精度的浮点权重可以被表示为:fp=(-1)s1.m×2e-127,e的大小为浮点数小数点实际位置加127。
以6个未对齐的32位单精度浮点权重为例,将尾数表示为如图2所示。将得到一个权重比特矩阵,矩阵中每列代表内存中实际存储的二进制尾数值。图例中的不同颜色表示了从2-1到2-9的bit位值(20位值表示尾数中的隐藏1)。在权重比特矩阵中,根据不同的指数,我们利用不同的背景颜色来表示该比特位上实际的位值。例如,W2中最上边的深灰色代表了位值2-3。
如图2(b)所示,根据指数将所有的尾数对齐,则在矩阵上部会出现大量补齐的0。第一,这样的现象导致补0之后稀疏性增大,为比特层面剪枝提供了良好的条件。第二,大部分的比特1都被移至位值小于2-6的尾部。此类比特1对于最终的MAC(Multiply-Accumulateoperation,乘加累计运算量)影响微乎其微。若对这些不重要的比特1进行剪枝,大量的比特级运算可以被省去,进而加速推理。如图2(c)所示,红色方框代表了被剪枝的1,仅仅留下了几个关键的比特1形成了剪枝之后的权重:W'1、W'3、W'4和W'5,这些比特则被称为“essential bits”。
利用图2(c)中的“essential bits”是在比特层面上简化MAC的有效方式。然而,对于数以百万计的参数,单独一个比特对于整个网络的影响将难以评估。因此本发明提出了一个有效但硬件友好的机制BitX来充分利用无效的比特,并且在不借助耗时耗力的软件剪枝方式条件下仍能保持原始精度。
(1)BitX剪枝方法:
给定一个n×l矩阵A和l×n矩阵W,A×W的结果可以由n个秩1矩阵的和表示。A×W的结果可以通过Fast Monte-Carlo Algorithm得到(Fast Monte-Carlo Algorithm随机抽样其中一些秩一矩阵来近似矩阵乘积,最常见的抽样方法是计算相应概率来选择这些秩一矩阵)。如公式(1)所示,A(i)表示A矩阵的第i行,W(i)表示W矩阵的第i列。本发明通过计算A(i)和W(i)欧氏距离乘积作为抽样概率,其反映了某个秩一矩阵乘法在n个秩一矩阵乘积和中的重要性。
从FastMonte-CarloAlgorithm得到启发,我们在BitX中采用抽样概率来衡量权重中bit的重要性而非值的重要性。与同一权重值中的其他更重要的比特相比,具有较小概率的bit在与激活相乘时影响微小。因此,本发明将图2(a)中的比特矩阵抽象为W,在图2(b)中寻找(不)重要的比特行,利用公式(1)中的概率对W中的每一个比特行进行采样,并确定要剪枝的比特行,进而简化MAC计算。
在权重矩阵中,本发明针对的是n个32位浮点权重值的尾数部分,每个权重的尾数被实例化为由其比特值组成的列向量。对于MAC,n个权重意味着相应有n个激活值。n个激活值组成了另一个列向量[A1,A2…Aj…An]T。将激活值矩阵的列向量与权重矩阵的行向量两个向量带入公式1,可以得到公式2:
Aj是激活值向量的元素,vj是权重比特矩阵第i行向量的第j元素。权重比特矩阵中的同一行具有相同的指数(阶码)。因此用公式(2)中的表示第j元素的阶码。则行向量的欧氏距离通过/>计算。
BitX中的对阶操作与浮点加法中的对阶几乎一致。唯一不同的是BitX将一组数同时对齐到最大阶,而并非在一个一个权重/激活值间进行。因此,在对阶之后,权重比特矩阵中的同一行具有相同的指数(阶码),如图2(b)所示。我们使用统一的Ei来表示第i行比特向量的实际阶码。且本发明的剪枝方案可应用于权重矩阵和/或激活矩阵。
v表示W的比特行向量,如果v中的某一元素vj等于0,则对于计算欧式距离不产生任何影响,进而对pi无影响。因此,计算欧式距离被转化为计算第i行向量的比特1数目。使用BitCnt(i)来表示这一数值。因此pi可改写为如公式3:
在公式3中,Ei表示i行向量的阶码。而矩阵A中的所有列向量均相同。因此|A(i’)|等于|A(i)|。对于给定的具有l个列向量的矩阵W,为常数,因此令最终pi将被化简为公式4:
公式4中pi反映了比特矩阵中比特行i在计算中的重要性。因为Ei反映了i行元素的比特位值大小,BitCnt(i)则反映了i行中有效比特的数目,其中有效比特即bit1,与之对应的,无效比特即bit0。较大的Ei和BitCnt(i)对最终的MAC有更大影响。BitX利用公式4确定了重要的比特,同时直接在加速器中剪枝掉不重要的bit。
(2)BitX剪枝程序:
本发明算法详述为上述算法1,BitX首先提取出32浮点数权重的阶码E和尾数M作为输入(第1行~3行),然后将所有尾数统一对齐到最大阶码emax(第4行),再计算pi,并对pi降序排序(第5行~10行)。输入参数N表示W经过剪枝之后中剩余的比特行向量数目,即BitX挑选出了具有最大的N个pi的比特行。挑选出的N行的索引将存储在数组I中(第13行)。剪枝最终由mask来实现。剪枝之后,BitX提取出所有关键的比特1,并存回W'。
算法中的设计参数N控制了剪枝的粒度。较小的N会控制算法产生较大的比特稀疏性,进一步剪枝更多的行,最终通过跳过更多的0来加速推理。
(3)BitX硬件剪枝加速器
加速器的系统结构如图3所示。"E-alignment"和"Bit-Extraction"模块用来执行Bit剪枝算法。每16个CU(计算单元computing unit)组成一个BitX PE(运算单元processing element)。每个CU接受M个权重/激活值对作为输入。输入的权重由"Bit-Extraction"模块进行预处理,实际数值微小的比特剪枝为0。对于定点DNN来说,E-alignment模块是不需要的,因为定点运算不涉及指数对齐操作,所以原始权重直接输入至"Bit-Extraction"。
①E-alignment模块
E-alignment模块实现将所有权重对阶到最大阶码。此模块主要由数据移位部件和零比特填充部件组成。对于浮点数据,权重参数首先被改写为相应的尾数和阶码。并得到最大阶码,其他权重统一对阶到最大阶码。数据移位部件通过对第i个尾数右移Emax-Ei来完成这一操作。由移位导致在尾数较前部分出现的空位通过填充部件被填充为比特零(在图3中标记为浅灰色)。对于不同的权重,Ei可能不完全相同,因此通过零比特填充之后,所有参数的位宽并不一致。为了处理这种情况,零比特填充也会将一系列零位填充至最大位宽(在图3标为深灰色)。
②Bit Extraction模块
由E-alignment模块输出的尾数被输入到Bit-Extraction模块中进行比特剪枝。这个模块的第一个功能部件是BITCNT,用来实现公式(4)中的BitCnt函数。Bit-Extraction模块的第二个功能是对移位后的BitCnt(i)进行排序,并选择前n个pi最大的行,其他行权重则被剪枝。最终得到了剪枝之后的权重。
③Compute Unit(CU)部件
剪枝后的权重比特稀疏性空间得到了提高,因此本设计在"Bit-Extraction"模块的"extractor"中设计了一个跳零机制,并进一步将关键比特送入计算单元(CU)模块。
CU的微结构如图4所示。提取器extractor中的每个"selector"针对一个剪枝后的二进制权重(共M个权重),k表示剪枝后权重中的essential bit。extractor记录了每个essential bit位的实际位值,用s表示,用于对相应激活值进行移位。
激活值可以是浮点数据或定点数据。定点激活值可以直接进行移位。但是对于浮点激活值来说,移位操作是激活值中的阶码进行累加,实际上也是定点运算。因此,移位器不会引入大的开销。加法树执行最后的部分和累加,同时也用来区分不同的精度。
以下为与上述方法实施例对应的系统实施例,本实施方式可与上述实施方式互相配合实施。上述实施方式中提到的相关技术细节在本实施方式中依然有效,为了减少重复,这里不再赘述。相应地,本实施方式中提到的相关技术细节也可应用在上述实施方式中。
本发明还提出了一种神经网络实时剪枝系统,其中包括
模块1,用于获取神经网络模型中待矩阵乘的比特矩阵,并以比特矩阵比特行与比特列的欧氏距离乘积,作为该比特矩阵中各比特行在矩阵乘运算中的重要度;
模块2,用于根据该重要度将比特矩阵的每个比特行划分位重要行或非重要行,并将该比特矩阵的非重要行中为1的比特位置零后得到的矩阵,作为该比特矩阵的剪枝结果。
所述的神经网络实时剪枝系统,其中该模块1包括通过下式得到该比特矩阵中各比特行在矩阵乘运算中的重要度:
式中pi为该比特矩阵中第i个比特行在矩阵乘运算中的重要度,Ei为第i个比特行元素的比特位值,BitCnt(i)为第i个比特行中有效比特数,l为该比特矩阵的列数。
所述的神经网络实时剪枝系统,其中在调用该模块1之前,获取多个待矩阵乘运算的原始权重,判断该原始权重是否属于定点数,若是则调用该模块1,否则将该原始权重所有尾数统一对齐到该多个原始权重的最大阶码,并将对齐后的矩阵作为该比特矩阵,调用该模块1。
所述的神经网络实时剪枝系统,其中该比特矩阵为权重矩阵和/激活矩阵;且该模块2包括:将该比特矩阵中重要度最高的N个比特行划分为重要行,N为正整数且小于该比特矩阵的比特行总数。
本发明还提出了一种神经网络加速器,其用于上述神经网络实时剪枝系统。
所述的神经网络加速器,其中包括由多个CU组成的PE,每个CU接受多个权重激活值对作为输入,输入的权重值由该模块2进行剪枝处理。
所述的神经网络加速器,其中CU中提取器extractor的每个选择器selector针对一个剪枝后的二进制权重,且选择器extractor记录每个重要行中比特位的实际位值,用于对相应激活值进行移位。
本发明还提出了一种包括存储介质的服务器,其中该存储介质用于存储执行上述神经网络实时剪枝方法。