基于低精度浮点数的CNN量化方法、前向计算方法及装置
技术领域
本发明涉及深度卷积神经网络量化领域,尤其是基于低精度浮点数的CNN量化方法、前向计算方法及装置。
背景技术
近年来,AI(Artificial Intelligence,人工智能)的应用已经渗透到很多方面,如人脸识别、游戏对战、图像处理、仿真模拟等等,虽然提高了处理准确性,但由于神经网络包含很多层和大量参数,需要非常大的计算代价和存储空间。对此,技术人员提出了神经网络压缩处理方案,即通过改变网络结构或利用量化、近似的方法来减少网络的参数或存储空间,在不大影响神经网络性能的情况下,降低网络代价和存储空间。
现有技术中的专利号:CN109740737A、专利名称:卷积神经网络量化处理方法、装置及计算机设备,方法包括步骤:获取卷积神经网络中各卷积层的最大权值及最大偏差量;计算所述最大权值的第一动态比特位精度值,及最大偏差量的第二动态比特位精度值,所述第一动态比特位精度值与所述第二动态比特位精度值不同;利用各卷积层对应的所述第一动态比特位精度值和所述第二动态比特位精度值,对相应卷积层的权值和偏差量进行量化;基于各卷积层中量化后的权值及量化后的偏差量,得到所述卷积神经网络的卷积结果。上述方案采用双精度量化处理方法提高量化后的准确率,具体的,获取卷积神经网络中卷积层的最大权值及最大偏差量,分别计算最大权值的动态比特位精度值及最大偏差量的动态比特位精度值,之后,利用这两个动态比特位精度值实现卷积计算,由于本申请从卷积层的权值和偏差值两方面进行量化,避免了单精度量化,容易导致权值或偏差值精度损失,影响量化准确性的情况发生。
虽然目前技术对量化进行改进,提高量化准确性,但仍然存在几个方面的限制:1)对于量化深度卷积神经网络(卷积层/全连接层的数量超过100层),需要重新训练来保证准确率;2)量化需要使用16比特浮点数或者8比特定点数来保证准确率;3)在不使用重新训练和保证准确率的前提下,目前技术在一个DSP中,最多只能实现两个乘法运算,从而导致FPGA上加速性能较低。
因此,需要一种基于低精度浮点数的CNN量化方法、前向计算方法及装置,克服以上问题,实现在不需要重新训练的情况下,找到最优的数据表示形式,保证量化后卷积神经网络的准确率和提升定制电路或者非定制电路的加速性能。
发明内容
本发明的目的在于:本发明提供了一种基于低精度浮点数的CNN量化方法、前向计算方法及装置,使用低精度浮点数的表示形式,在不需要重新训练的情况下,保证量化后卷积神经网络的准确率和提升定制电路或者非定制电路的加速性能。
本发明采用的技术方案如下:
基于低精度浮点数的CNN量化方法,包括在卷积神经网络进行的如下步骤:
步骤1:定义所述网络的低精度浮点数表现形式MaEb,所述低精度浮点数表现形式包括符号位、尾数和指数,其中,a、b均为正整数;
步骤2:在优化低精度浮点数表示形式过程中,同时更改比例因子、更改a和b的组合和计算所述网络每一层量化前后的权重和激活值均方差,根据量化前后的权重和激活值均方差最小值获取最优的低精度浮点数表示形式和所述表示形式下的最优比例因子;
步骤3:基于上述低精度浮点数表示形式和最优比例因子,完成单精度浮点数量化为低精度浮点数。
优选地,所述a、b满足0<a+b≤31,当a=4或者5时,用此低精度浮点数表示形式量化的网络即为最优结果。
优选地,所述步骤1中低精度浮点数表现形式的十进制值计算如下:
其中,Vdec表示低精度浮点数表现形式的十进制值,S,M和E分别表示符号位,尾数和指数,均为无符号的值,Eb表示指数的偏置,用于为指数引入正数和负数,表示为:
其中,DWE表示指数的位宽,尾数和指数的位宽均为非固定的。
优选地,所述步骤2包括如下步骤:
步骤2.1:将单精度浮点数乘以比例因子映射至低精度浮点数能够表示的动态范围内,将映射后的数四舍五入成最接近的低精度浮点数,并将超过动态范围的数据保留成最大值或者最小值,计算公式如下:
其中,Vlfp和Vfp32表示由低精度浮点数和单精度浮点数形式表示的十进制的值,MINlfp和MAXlfp表示低精度浮点数能够表示的最小值和最大值,sf表示比例因子,quan(x,MIN,MAX)表示对任意浮点数x在范围MIN到MAX之间进行量化,round(x)表示表示对任意浮点数x进行四舍五入;
步骤2.2:计算量化前后权重和激活值均方差MSE,所述量化前后的权重和激活值均方差表示量化误差,计算如下:
其中,N表示权重和激活值的数量;
步骤2.3:更改比例因子,重复步骤2.1和2.2;
步骤2.4:更改低精度浮点数表示形式即MaEb中a和b的组合,重复步骤2.1、2.2和2.3;
步骤2.5:将权重和激活值均方差最小值对应的低精度表示形式和比例因子作为最优的结果。
优选地,所述低精度浮点数表现形式的十进制值在当E=0时的非规约数时,其计算为:
一种卷积层前向计算方法,包括在卷积神经网络中进行如下步骤:
步骤a:将单精度浮点数的输入数据量化为低精度浮点数表现形式的MaEb的浮点数,所述输入数据包括输入激活值、权重和偏置,其中,a、b均为正整数;
步骤b:将MaEb的浮点数分发至浮点数功能模块中并行的Nm个低精度浮点数乘法器进行前向计算得到全精度浮点数乘积,其中,Nm表示浮点数功能模块中一个处理单元PE低精度浮点数乘法器的数量;
步骤c:将所述全精度浮点数乘积传输至数据转换模块获取无精度损失的定点数结果;
步骤d:将所述定点数结果分配至并行的4T个定点数加法树后,将定点数加法树结果和输入数据中的偏置经过后处理单元依次进行累加、池化和激活完成卷积层计算,其中,T为正整数。
优选地,所述步骤a、b、c包括如下步骤:
原始图片、权重通过低精度浮点数表现形式量化为MaEb的浮点数,偏置量化为16比特的定点数,将上述量化后的原始图片、权重和偏置输入所述网络并存储至外部存储器,其中,0<a+b≤31;
将量化后的图片和权重进行低精度浮点数乘法运算得到(2a+b+4)比特浮点数后,将上述(2a+b+4)比特浮点数转换为(2a+2(b+1)-1)比特定点数后进行累加计算,将上述累加计算结果与所述偏置量化的16比特的定点数相加得到32比特定点数;
将上述32比特定点数转换为MaEb的浮点数作为所述网络下一层的输入,并保存至外部存储器。
优选地,所述原始图片、权重量化为MaEb的浮点数如下包括步骤:
定义所述网络的低精度浮点数表现形式MaEb,所述低精度浮点数表现形式包括符号位、尾数和指数;
在优化低精度浮点数表示形式过程中,同时更改比例因子、更改a和b的组合和计算所述网络每一层量化前后的权重和激活值均方差,根据量化前后的权重和激活值均方差最小值获取最优的低精度浮点数表示形式和所述表示形式下的最优比例因子;
基于上述低精度浮点数表示形式和最优比例因子,完成将原始图片、权重的单精度浮点数量化为以低精度浮点数表现形式MaEb表示的浮点数。
优选地,当a=4或者5时,用此低精度浮点数表示形式量化的网络即为最优结果。
优选地,所述MaEb的浮点数进行低精度浮点数乘法运算包括如下步骤:
将MaEb的浮点数拆分为一个a比特的乘加器和一个b比特的加法器,计算公式如下:
其中,Mx,My,Ex,Ey分别表示X和Y的尾数与指数,式子0.Mx×0.My+(1.Mx+0.My)由一个a比特的无符号定点数乘加器实现,式子Ex+Ey可以由一个b比特的无符号定点数加法器实现;
基于DSP实现的乘加器P=A×B+C,在输入端口添加的空白比特实现若干个a比特的乘加器,其中,A、B、C表示DSP的三个输入端,所述A、B、C比特位宽最大取值分别为25、18、48。
一种装置,包括定制电路的浮点数功能模块或者非定制电路的浮点数功能模块;所述浮点数功能模块,用于将输入数据分发至不同的处理单元PE并行计算通过低精度浮点数表现形式量化为MaEb浮点数的点积,完成卷积层的前向计算;
所述浮点数功能模块包括n个并行处理单元PE,所述处理单元PE通过DSP实现Nm个MaEb浮点数乘法器,其中,n为正整数,a、b均为正整数,Nm表示一个处理单元PE低精度浮点数乘法器的数量。
优选地,所述每个处理单元PE包括4T个并行支路,所述每个并行支路包含Nm/(4T)个乘法器、Nm/(4T)个数据转换模块、1个定点数加法树和1个后处理单元PPM,所述乘法器、数据转换模块、定点数加法树、后处理单元依次连接,其中,T为正整数。
优选地,所述a、b满足0<a+b≤31,当a=4或者5时,用此低精度浮点数表示形式量化的网络即为最优结果。
优选地,所述定制电路包括ASIC或者SOC,所述非定制电路包括FPGA。
综上所述,由于采用了上述技术方案,本发明的有益效果是:
1.本发明使用低精度浮点数表现形式MaEb,在不需要重新训练的情况下,可以找到最优的数据表示形式,只需要4比特或者5比特的尾数,保证top-1/top-5的准确率丢失可以忽略不计,top-1/top-5准确率的丢失量分别在0.5%/0.3%以内;
2.本发明在使用一个4比特的乘加器和一个3比特的加法器的方式实现一个8比特的低精度浮点数的乘法运算,并且在一个DSP内实现4个这种方式的低精度浮点数乘法运算,相当于在一个DSP内部实现四个卷积运算中的乘法运算,比起现有最多只能用一个DSP实现两个乘法运算,实现在保证准确率的情况下,大大提升定制电路(如ASIC或者SOC)或者非定制电路(如FPGA)上加速的性能;
3.本发明的吞吐量相比于Intel i9 CPU提升了64.5倍,相比于现有的FPGA加速器提升了1.5倍;针对VGG16和YOLO卷积神经网络而言,本申请与现有的六个FPGA加速器相比,在吞吐量方面,分别提升了3.5倍和27.5倍,在单个DSP吞吐量方面,分别提升了4.1倍和5倍;
4.本发明的数据表示形式也可以运用在ASIC方面,在ASIC设计中,实现低精度浮点数乘法器比8比特定点数乘法器,需要的标准单元数量更少;
5.本发明基于量化方法进行卷积层的前向计算时,将累加结果定点数转换为浮点数,利于节省存储资源;将浮点数累加转换为定点数累加,可以节省大量定制电路或者非定制电路资源,从而提升定制电路或者非定制电路实现的吞吐量。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明的量化方法流程图;
图2为本发明的量化后卷积神经网络的前向计算数据流示意图;
图3为本发明的浮点数功能模块的全流水结构示意图;
图4为本发明的卷积计算示意图;
图5为本发明的DSP端口的输入形式示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明,即所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以下结合实施例对本发明的特征和性能作进一步的详细描述。
实施例1
针对现有技术中需要重新训练来保证准确率,量化需要使用16比特浮点数或者8比特定点数来保证准确率,本申请的量化方法实现使用低精度浮点数表现形式MaEb,在不需要重新训练的情况下,可以找到最优的数据表示形式,只需要4比特或者5比特的尾数,保证top-1/top-5的准确率丢失可以忽略不计,top-1/top-5准确率的丢失量分别在0.5%/0.3%以内,具体如下:
基于低精度浮点数的CNN量化方法,包括在每一个卷积神经网络的每一层进行的如下步骤:
步骤1:定义所述网络的低精度浮点数表现形式MaEb,所述低精度浮点数表现形式包括符号位、尾数和指数,其中,a、b均为正整数;
步骤2:在优化低精度浮点数表示形式过程中,同时更改比例因子、更改a和b的组合和计算所述网络每一层量化前后的权重和激活值均方差,根据量化前后的权重和激活值均方差最小值获取最优的低精度浮点数表示形式和所述表示形式下的最优比例因子;
步骤3:基于上述低精度浮点数表示形式和最优比例因子,完成单精度浮点数量化为低精度浮点数。
优选地,所述a、b满足0<a+b≤31,当a=4或者5时,用此低精度浮点数表示形式量化的网络即为最优结果。
步骤1中低精度浮点数表现形式的十进制值计算如下:
其中,Vdec表示低精度浮点数表现形式的十进制值,S,M和E分别表示符号位,尾数和指数,均为无符号的值,Eb表示指数的偏置,用于为指数引入正数和负数,表示为:
其中,DWE表示指数的位宽,尾数和指数的位宽均为非固定的。
步骤2包括如下步骤:
步骤2.1:将单精度浮点数乘以比例因子映射至低精度浮点数能够表示的动态范围内,将映射后的数四舍五入成最接近的低精度浮点数,并将超过动态范围的数据保留成最大值或者最小值,计算公式如下:
其中,Vlfp和Vfp32表示由低精度浮点数和单精度浮点数形式表示的十进制的值,MINlfp和MAXlfp表示低精度浮点数能够表示的最小值和最大值,sf表示比例因子,quan(x,MIN,MAX)表示对任意浮点数x在范围MIN到MAX之间进行量化,round(x)表示表示对任意浮点数x进行四舍五入;
步骤2.2:计算量化前后权重和激活值均方差MSE,所述量化前后的权重和激活值均方差表示量化误差,计算如下:
其中,N表示权重和激活值的数量;
步骤2.3:更改比例因子,重复步骤2.1和2.2;
步骤2.4:更改低精度浮点数表示形式即MaEb中a和b的组合,重复步骤2.1、2.2和2.3;
步骤2.5:将权重和激活值均方差最小值对应的低精度表示形式和比例因子作为最优的结果。
优选地,所述低精度浮点数表现形式的十进制值在当E=0时的非规约数时,其计算为:
如图1所示,针对每个卷积神经网络,为其寻找最优的低精度浮点数数据表示形式(不同的尾数和指数的位宽组合),从而保证量化误差最小;CNN的量化过程中,针对每一层可以选择量化或者不量化,同时在量化时,每一层的低精度浮点数表示形式可以不同,即a和b只需满足0<a+b<=31即可。具体来说,针对每一个需要量化的卷积神经网络,优化低精度浮点数表示形式的过程中(优化可采用遍历或者其他搜索方式),为卷积神经网络每一层的权重和激活值,寻找该低精度浮点数表示形式下的最优的比例因子,保证量化前后权重和激活值的均方差最小;通过本申请的量化方法实现不需要重新训练的情况下保证准确率的原因在于:对于量化前的卷积神经网络,它本身有一个准确率的结果,通常把这个结果定义为标准值。本申请目的是在保证这个标准的准确率的前提下,量化卷积神经网络;量化前网络的权重和激活值,这些数据更接近于一个高斯分布,伽马分布等非均匀分布,即这些值集中出现在某一个范围内,而在这个范围外出现的概率较小;量化权重和激活值,就是用更低精度的数去近似表示原来的数据,本申请提出的用低精度浮点数去做量化,低精度浮点数的特点是在零附近能够表示的数更多,而往两边则能够表示的数更少即低精度浮点数的特点更接近于量化前权重和激活值的分布。将量化前后的数据进行对比,当量化后的数据越接近于量化前的数据,则该量化后的网络会带来的准确率的丢失会更小。而均方差就能够表示量化后的数据与量化前的数据之间的差别,均方差越小,代表量化后的数据更接近于量化前的数据。所以能够说明,均方差最小的情况,能够保证准确率丢失最小从而实现在不需要重新训练的情况下。通过本申请的量化方法可以找到最优的数据表示形式,只需要4比特或者5比特的尾数,保证top-1/top-5的准确率丢失可以忽略不计,top-1/top-5准确率的丢失量分别在0.5%/0.3%以内。
实施例2
基于实施例1,本实施例提供一种卷积层前向计算方法,包括在卷积神经网络中进行如下步骤:
步骤a:将单精度浮点数的输入数据量化为低精度浮点数表现形式的MaEb的浮点数,所述输入数据包括输入激活值、权重和偏置,a、b均为正整数;
步骤b:将MaEb的浮点数分发至浮点数功能模块中并行的Nm个低精度浮点数乘法器进行前向计算得到全精度浮点数乘积,其中,Nm表示浮点数功能模块中一个处理单元PE低精度浮点数乘法器的数量;
步骤c:将所述全精度浮点数乘积传输至数据转换模块获取无精度损失的定点数结果;
步骤b:将所述定点数结果分配至并行的4T个定点数加法树后,将定点数加法树结果和输入数据中的偏置经过后处理单元依次进行累加、池化和激活完成卷积层计算,T为正整数。
如图2所示,所述步骤a、b、c包括如下步骤:
原始图片、权重通过低精度浮点数表现形式量化为MaEb的浮点数,偏置量化为16比特的定点数,将上述量化后的原始图片、权重和偏置输入所述网络并存储至外部存储器,其中,0<a+b≤31,a、b均为正整数;
将量化后的图片和权重进行低精度浮点数乘法运算得到(2a+b+4)比特浮点数后,将上述(2a+b+4)比特浮点数转换为(2a+2(b+1)-1)比特定点数后进行累加计算,将上述累加计算结果与所述偏置量化的16比特的定点数相加得到32比特定点数;
将上述32比特定点数转换为MaEb的浮点数作为所述网络下一层的输入,并保存至外部存储器。
如图1所示,所述原始图片、权重量化为MaEb的浮点数如下包括步骤:
定义所述网络的低精度浮点数表现形式MaEb,所述低精度浮点数表现形式包括符号位、尾数和指数,其中,0<a+b≤31,a、b均为正整数;
优化低精度浮点数表示形式过程中,同时更改比例因子、更改a和b的组合和计算所述网络每一层量化前后的权重和激活值均方差,根据量化前后的权重和激活值均方差最小值获取最优的低精度浮点数表示形式和所述表示形式下的最优比例因子;
基于上述低精度浮点数表示形式和最优比例因子,完成将原始图片、权重的单精度浮点数量化为以低精度浮点数表现形式MaEb表示的浮点数。
如图3、4、5所示,所述MaEb的浮点数进行低精度浮点数乘法运算包括如下步骤:
将MaEb的浮点数拆分为一个a比特的乘加器和一个b比特的加法器,计算公式如下:
其中,Mx,My,Ex,Ey分别表示X和Y的尾数与指数,式子0.Mx×0.My+(1.Mx+0.My)由一个a比特的无符号定点数乘加器实现,式子Ex+Ey可以由一个b比特的无符号定点数加法器实现;
基于DSP实现的乘加器P=A×B+C,在输入端口添加的空白比特实现多个a比特的乘加器,其中,A、B、C表示DSP的三个输入端,所述A、B、C比特位宽最大取值分别为25、18、48。
量化后神经网络的前向计算数据流如图1所示。为清晰的解释该数据流,在图1中使用M4E3的低精度浮点数表示形式作为例子即a为4,b为3,列出数据流中每一个步骤的数据位宽;所有的输入图片,权重以及偏置都是用单精度浮点数表示的。首先,原始图片和权重都用M4E3的数据表示形式进行量化,而偏置则是量化成16比特定点数,为了减小量化误差,将量化后的输入图片,权重以及偏置存储在外部存储器中。其次,针对量化后的图片和权重,进行低精度浮点数乘法运算,其乘积保存为15比特的浮点数M10E4。随后,15比特浮点数乘积被转化为23比特的定点数,结合偏置量化的16比特定点数进行累加计算,累加的最后结果保存为32比特定点数。上述操作有两个优点:1、在整个过程中不会有任何精度损失,从而保证最后推理结果的准确率;2、将浮点数累加转化为定点数累加,可以节省大量定制电路或者非定制电路资源,从而提升定制电路或者非定制电路实现的吞吐量。最后,在被另一个CNN层使用前,最终的输出结果会被重新转化为M4E3的浮点数,并且保存到外部存储器,节约存储空间。在整个数据流中,只有最后的数据转化步骤会带来比特位宽的减少和精度损失。而这部分的精度损失并不会给最后的精度带来影响,根据实验可验证。
每个PE中的乘法器,都是针对低精度浮点数设计的。根据低精度浮点数的表示形式,两个低精度浮点数的乘法可以分成三个部分:1)符号位异或;2)尾数相乘;3)指数相加。以MaEb的形式为例。我们需要一个a比特的无符号数乘加器和一个b比特的无符号数加法器来实现这两个数的乘法。尽管在考虑到第一个隐藏比特后(规约数是1,非规约数是0),尾数的相乘应该使用(a+1)比特的乘法器,本申请将其设计为a比特的乘加器,这是为了提升DSP的使用效率。与此同时,指数偏置并没有包含在加法中,这是因为本申请的实施例中所有数据的表示形式都是一样的,那么指数偏置也是一样的,这样可以在最后一步处理,从而简化加法器的设计。
如图4所示,在卷积计算过程中,输出通道每一个像素点由下式计算得到:
其中,IC表示输入通道的数量,KW和KH表示卷积核的宽和高,x,y,w和b分别表示输入激活值,输出激活值,权重和偏置。由于用一个DSP实现4个低精度浮点数乘法,并按以下方式计算:(a+b)×(c+d)=ac+bc+ad+bd,因此,每个PE都是设计成可以同时计算两个输出通道,并且在每个输出通道上,可以同时计算两个卷积结果,如图4所示。具体来说,在第一个周期,在IC个输入通道上的第一个像素点和对应的第一个卷积核的值被送入PE进行计算,在图4中分别标记为a和c。为了遵从四个乘法器中的并行计算模式,在IC个输入通道上的第二个像素点(图4中标记为b)和用于计算另一个输出通道的对应的卷积核的值(图4中标记为d)同样被送入到PE中进行计算。这样,a和b是重复使用的,可以计算出相同输出通道上不同位置的值,而c和d是共用的,可以计算出不同输出通道上的值。在第二个周期,按照同样的方式,输入第二个位置的数据。这样,在KW×KH个周期后,一个PE就可以计算出四个卷积结果。
在本申请中,每个PE中使用Nm个乘法器,所以IC的值设计为Nm/4,因此,在每个PE内并行计算Nm/4个输入通道。在使用对应的权重和偏置过后,并行计算两个输出通道,每个输出通道上的两个像素点。当输入通道的数量大于Nm/4时,或者每个输出通道上的数量大于2时或者输出通道的数量大于2时,需要多轮计算来完成一次卷积运算。由于PE和CNN卷积层的规模,很多时候CNN卷积层并不能在PE上通过一次计算得到最后结果,计算会将卷积层分成多个部分,先将其中一部分放在PE上计算,这个计算结果就是中间结果。这个中间结果就会存储在OFMB中,等到计算下一个部分的时候,从OFMB中取出中间结果进行计算。为了能够提升并行度,本设计中使用Np个PE在不同的PE之间,可以送入不同输入特征图上面的像素点和不同的权重来进行不同维度的并行计算。举例来说,所有的PE可以共享相同的输入特征图和使用不同的权重,从而并行计算不同的输出通道。或者所有的PE共享相同的参数和使用不同的输入特征图来并行计算输入通道。参数Nm和Np是考虑CNN网络结构,吞吐量,带宽需求来决定。
根据PE中的计算模式,IFMB和WB都设置为每个周期分别向每个PE提供Nm/2个输入激活值和权重,同时OFMB每个周期需要保存四个输出激活值。尽管在输出特征图上的每个像素点最后都会保存成低精度浮点数形式,但是在中间结果时,保存成16bit以减少精度损失。这样,对于每个PE来说,OFMB的比特位宽需要设置为64比特。由于输入激活值或权重在不同的并行计算模式下,可以被不同的PE共享,定义Pifm和Pofm(Pifm×Pofm=Np)这两个参数来分别表示用于并行计算输入特征图和输出特征图的PE的数量。因此,Pifm个PE会共享相同的权重,Pofm个PE会共享相同的输入激活值。对于IFMB,WB,和OFMB的位宽,则需要分别设置为:和64Np,其中,BW代表低精度浮点数的位宽。参数Nm,Pifm和Pofm是均衡考虑吞吐量,带宽需求,资源使用来决定的。这三个片上缓存的大小也是综合考虑吞吐量和资源使用决定的。在处理器设计中,均衡考虑吞吐量,带宽要求,资源使用,可扩展性,从而确定缓存大小为能够保证隐藏DMA传输时间即可。在非定制电路实现中,比如FPGA,用块存储(block RAM)来实现IFMB和OFMB,用分布式存储(distributed RAM)来实现WB,这是因为分布式存储可以提供更大的贷款。在CNN推理过程中,只有当所有的输入特征图都被使用,或者所有的权重都被使用了,或者OFMB满了,才会访问外部存储器来读取新的输入特征图或者权重或者保存输出特征图。
一个DSP中实现4个乘法器的具体实现方式。在定制电路或者非定制电路实现中,使用M4E3这种数据表示形式。为了能够更清楚的解释在一个DSP中实现四个低精度浮点数乘法器,使用两个规约数的乘法作为例子。两个数的乘积的尾数可以表示为:
其中Mx,My,Ex,Ey分别表示X和Y的尾数与指数,式子0.Mx×0.My+(1.Mx+0.My)可以由一个4-bit的无符号定点数乘加器实现,式子Ex+Ey可以由一个3-bit的无符号定点数加法器实现。由于Xilinx 7系列FPGA中的DSP可以实现一个乘加器P=A×B+C(其中A,B,C的最大比特位宽分别为25,18和48),在每个输入端口中添加空白比特,从而充分使用DSP来实现四个4-比特的乘加器,DSP每一个端口的具体输入形式如图5所示。在计算过程中,小数点位置设定在最右边,也就是说0.Mx和0.My转化成4比特的正数,1.Mx+0.My转化为10比特的正数以确保在计算过程中不会出现重叠的情况。以这样一种方式,在使用少量的查找表(LUT)和少量的触发器(FF)来实现指数以及式子1.Mx+0.My的加法的情况下,可以使用一个DSP来实现4个M4E3数据表示形式的数的乘法,从而大大增加单个DSP的吞吐量。
综上,本实施例基于低精度浮点数表示形式和最优比例因子,将原始图片、权重的单精度浮点数量化为以低精度浮点数表现形式MaEb表示的浮点数,所述MaEb的浮点数进行低精度浮点数乘法运算包括将MaEb的浮点数拆分为一个a比特的乘加器和一个b比特的加法器;基于DSP实现的乘加器P=A×B+C,在输入端口添加的空白比特实现a比特的乘加器。比如使用一个4比特的乘加器和一个3比特的加法器的方式实现一个8比特的低精度浮点数的乘法运算,并且在一个DSP内实现4个这种方式的低精度浮点数乘法运算,相当于在一个DSP内部实现四个卷积运算中的乘法运算,比起现有最多只能用一个DSP实现两个乘法运算,实现在保证准确率的情况下,大大提升定制电路或者非定制电路上加速的性能;吞吐量相比于Intel i9 CPU提升了64.5倍,相比于现有的FPGA加速器提升了1.5倍;针对VGG16和YOLO卷积神经网络而言,本申请与现有的六个FPGA加速器相比,在吞吐量方面,分别提升了3.5倍和27.5倍,在单个DSP吞吐量方面,分别提升了4.1倍和5倍;同时,基于量化方法进行卷积层的前向计算时,将累加结果定点数转换为浮点数,利于节省存储资源;将浮点数累加转换为定点数累加,可以节省大量定制电路或者非定制电路资源,从而更加利于提升定制电路或者非定制电路实现的吞吐量。
实施例3
基于实施例1或者2,本实施例提供一种装置,如图3所示,包括定制电路的浮点数功能模块或者非定制电路的浮点数功能模块;所述浮点数功能模块,用于将输入数据分发至不同的处理单元PE并行计算通过低精度浮点数表现形式量化为MaEb浮点数的点积,完成卷积层的前向计算;
所述浮点数功能模块包括n个并行处理单元PE,所述处理单元PE通过DSP实现Nm个MaEb浮点数乘法器,其中,n为正整数,a、b均为正整数,Nm表示一个处理单元PE低精度浮点数乘法器的数量。
所述每个处理单元PE包括4T个并行支路,所述每个并行支路包含Nm/(4T)个乘法器、Nm/(4T)个数据转换模块、1个定点数加法树和1个后处理单元PPM,所述乘法器、数据转换模块、定点数加法树、后处理单元依次连接,其中,T为正整数。
a、b满足0<a+b≤31,当a=4或者5时,用此低精度浮点数表示形式量化的网络即为最优结果。
定制电路包括ASIC或者SOC,所述非定制电路包括FPGA。
a、b取值4、3时,MaEb为M4E3,T为1,Nm为8,每个处理单元PE包括4个并行支路,所述每个并行支路包含2个乘法器、2个数据转换模块、1个定点数加法树和1个后处理单元PPM。
将MaEb的浮点数分发至浮点数功能模块中并行的Nm个低精度浮点数乘法器进行前向计算得到全精度浮点数乘积,其中,Nm表示浮点数功能模块中一个处理单元PE低精度浮点数乘法器的数量;将所述全精度浮点数乘积传输至数据转换模块获取无精度损失的定点数结果;将所述定点数结果分配至并行的四个定点数加法树后,将定点数加法树结果和输入数据中的偏置经过后处理单元依次进行累加、池化和激活完成卷积层计算。
综上,基于MaEb浮点数实现不进行重新训练即可保证量化后卷积神经网络的准确率,所述处理单元PE通过DSP实现Nm个MaEb浮点数乘法器;实现在保证准确率的情况下,大大提升定制电路或者非定制电路上加速的性能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。