一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

针对稀疏化CNN神经网络模型的游程编码加速器及方法与流程

2022-02-20 00:57:00 来源:中国专利 TAG:

针对稀疏化cnn神经网络模型的游程编码加速器及方法
技术领域
1.本发明涉及一种针对稀疏化cnn神经网络模型的游程编码加速器及其方法,属于数字信号处理及硬件加速神经网络算法领域。


背景技术:

2.神经网络是当前人工智能领域的研究热点,lenet是最早的卷积神经网络之一,并且推动了深度学习领域的发展。由于受到计算机性能的影响,虽然lenet在图像分类中取得了较好的成绩,但并没有引起关注。cnn是在lenet的基础上加深了网络的结构,学习更丰富更高维的图像特征。cnn使用更深的网络结构,即卷积层 卷积层 池化层来提取图像的特征,并用relu替换之前的sigmoid作为激活函数。在2010年的imagenet lsvrc-2010上,cnn取得了惊人的成绩。
3.然而由于cnn模型相较更大,卷积运算所需的数据规模庞大,导致了其在数据传输上产生了极大的能量消耗,并且在传统计算机上的运行速度较慢。常用的硬件加速优化方法有增加硬件运算过程中的并行度,提高运算速度,缺点是占用过多硬件资源。此外现有的硬件优化方法还有近似处理数据,即对复杂的激活函数用近似函数处理,优点是减少了计算量,缺点是降低了精度。
4.存内计算(cim)通过并行乘法累加(mac)操作和采用片上缓存的方式减少内存访问提高能耗效率,但是,大规模的神经网络所需容量远超过片上存储器的容量,因此,基于存内计算(cim)的处理器仍会遇到内存瓶颈。
5.模型优化是一种常用的解决方法,在训练过程中,基于大小的权重剪枝会逐渐将模型权重减小为零,实现模型稀疏性,而稀疏模型易于压缩。


技术实现要素:

6.为了克服存内计算神经网络过程中仍需大量访问内存同时产生大量耗能的问题,本发明针对稀疏化的cnn模型,提出一种利用游程编码的加速器及其加速方法。
7.本发明加速器采用的技术方案如下:
8.针对稀疏化cnn神经网络模型的游程编码加速器,包括:
9.顶层控制器,用于识别输入输出数据类型并进行分组处理,将权重数据和激励数据传输给游程编码模块;
10.游程编码模块,用于压缩计算模块输出的结果数据,并将压缩编码后的计算结果传输给外部存储器;
11.游程解码模块,用于解压缩从外部存储器中读取的数据,并将数据传输给数据门控;
12.数据门控,用于识别输入激励数据和权重数据的零值,并为零值跳过乘加操作;
13.计算模块,用于对数据门控传输的权重数据和激励数据执行乘加操作并给出计算结果。
14.本发明利用上述游程编码加速器的加速方法,包括如下步骤:所述顶层控制器对输入图像进行处理,将待压缩的数据传输给游程编码模块,并将接收的待解压缩数据传输给游程解码模块;所述游程编码模块对所述顶层控制器传来的数据进行压缩,并将压缩后的结果数据存入外部存储器;所述游程解码模块解压缩从外部存储器写入计算模块的输入激励数据和权值数据,然后将得到的数据传输给所述数据门控,所述数据门控记录解压缩后输入激励数据和权值数据中的零值,并为零值跳过后面的乘加运算操作。
15.进一步地,所述游程编码模块进行数据压缩的具体方法如下:
16.1)将连续零值记录为“游程”,“游程”的最大长度为32,因此连续零值的位数可以以一个二进制5bit数表示;
17.2)将零值后的非零数表示为一个16位二进制数;
18.3)重复步骤1)的操作,继续计数零值游程编码;
19.4)重复步骤2)的操作,继续非零值编码;
20.5)每一组5bit零值的“游程”后都是一组16bit的非零数,为5 16bit的一组数组,一个编码数据包共有三组该21bit类型的数组,在三组数组的后一位以一个1bit数表示该数据包是否是全部编码的最后一个数据包,是表示为“1”,否则为“0”,即每一组编码数据包都为3*(5 16) 1即64bit的二进制数组;
21.6)除首次输入到卷积层的数据外,其余特征图数据都以步骤1)至5)的方法得到的格式存储在外部存储器中。
22.进一步地,所述游程解码模块对于cnn模型的第一层不进行解压缩,对于cnn模型第一层以外的卷积层,所述游程解码模块解压缩的具体方法如下:
23.1)每收到一组64bit压缩数据包,分别拆分其中的三组“游程”,即得到三组5 16bit和一位判断传输是否结束标志;
24.2)记录三组5bit的“游程”,展开三个非零数,依次传入数据门控;
25.3)数据门控接收连续零值的位数,并将其记录,对应零值在特征图展开为一维数组或多维向量后的位置,为这些位置的像素点跳过乘加运算,而非零值则写入计算模块进行运算。
26.本发明的加速器方法利用游程编码模块可以降低数据规模,实现减少对dram的访问,降低存储带宽需求,并且利用数据门控可以跳过对零值的计算,节省大量功耗及算力,具有高能效,体积小,无需频繁访问片外存储的优点。
附图说明
27.图1是本发明一种针对cnn模型的加速器硬件结构框图;
28.图2是本发明一种针对cnn模型的加速器运算方法流程图;
29.图3是本发明实施例中加速器编码格式示意图。
具体实施方式
30.下面结合附图对本发明进行详细说明。
31.如图1所示的一种针对稀疏化cnn神经网络模型的游程编码加速器结构框图,该加速器包括:顶层控制器,用于识别输入输出数据类型并进行分组处理,将权重数据和激励数
据等输入传递给游程编码模块;游程编码模块,用于压缩计算模块输出的结果数据,并将压缩编码后的计算结果传输给外部存储器(dram);游程解码模块,用于解压缩从外部存储器中读取的数据,并将数据传输给数据门控;数据门控,用于识别解码后的输入激励数据和权重数据中的零值,记录零值在数据展开为向量数组中的位置,并为其跳过乘加操作;计算模块,用于对数据门控传输的权重数据和激励数据执行乘加操作并给出计算结果。顶层控制器分别与解码模块、编码模块、数据门控相连;编码模块分别与计算模块、dram、顶层控制器相连;解码模块分别与顶层控制器、数据门控、计算模块相连;数据门控分别与顶层控制器的门控、解码模块的门控、计算模块相连。
32.如图2所示为卷积网络运算方法流程示意图,顶层控制器控制信号流,控制输入数据经解码模块解码、经数据门控展开权重数据和输入激励的存放与分发。对于从外部存储器发送的输入数据,权重和激励数据以及其所属的层数由上位机通过64bit接口位宽发送到加速器,首先由顶层控制器判断输入是否经过编码,具体逻辑为卷积层第一层为未编码,其余层为已编码;对于已经编码的数据,由解码模块解编码并发送给数据门控模块执行展开和跳零操作。
33.其中,解编码的处理步骤为:对于一个64bit的数据包,首先将其按位截取为3组“游程”和非零的组合,具体为:[63:59]位为第一组连续零值的个数,[58:43]为第一个非零数,[42:38]为第二组连续零值的个数,[37:32]为第二个非零数,[31:17]为第三组连续零值的个数,[16:1]为第三个非零数,第0位则为数据传输结束标志,当该位为1时,代表本次解编码结束。数据门控模块接收解编码模块发送的3组“游程”和非零数的组合,其中,非零数将被数据门控模块传输给计算模块进行后续的乘法累加操作,“游程”则用于判断非零数被送往计算模块的位置。
[0034]
数据门控进行跳零操作的具体实施方式为:对于计算模块,其包含多个计算单元,每一个计算单元执行单个权值和激励的乘法操作;数据门控按照接收到的“游程”,即连续零值的个数,将拉低对应连续多个计算单元的使能信号,即该单元不执行运算操作;数据门控接收的非零数,则将被传输给已被跳过的计算单元的下一个计算单元执行运算操作。计算模块将所有乘法运算结果累加,经过激活函数操作后传给编码模块。
[0035]
对于从计算模块发送到编码模块的计算结果,由于经过激活函数操作后其中产生了大量零值,故按照游程编码的方法对其进行编码操作,步骤为:对于从计算模块输出的计算结果,为其执行并入串出操作,即将所有的计算结果多次编码为64bit游程编码的形式传输给外部存储器,具体地:
[0036]
1)依次扫描计算模块输出的每一个中间结果,若为零,则记录为一个“游程”长度,将连续的零值个数记录为游程,其中“游程”的最大长度为32,“游程”以一个5bit二进制数表示,若连续零值超过32个,将仅记录前32个连续零值的游程为“11111”。例如:0,0,0,0,0,13,经编码后游程即为5’b00101;0,0
……
0(33个0),经编码后游程为5’b11111。
[0037]
2)一组连续零值的“游程”记录完毕后,对于其后的非零值或第33个零值,将这个数表示为16bit二进制数,即若该数为非零数,则表示为其本身的二进制,若该数仍为零,则记录为零;例如:0,0,0,0,0,13,经编码后游程即为001010000000000001101;0,0
……
0(33个0),经编码后游程为0000
……
00(21个0)。
[0038]
3)重复步骤1)和2)操作两次,继续计数连续零值的个数并进行编码。
[0039]
4)在三次编码后,新的数据流将会由3组5 16bit=63bit的数据包形式组成,若此组数据为计算模块给的最后一组计算结果,则在这63bit的数据包后放置“1”,代表该组数据为所有数据包的末位,编码结束,否则,若计算模块的计算结果仍未完成,则在63bit数组后放置“1”,代表数组未结束。
[0040]
如图3所示为编码模块的编码方法示意图。对于经计算模块的激活函数处理后的输出数据,开始计数值为“0”的位数,将连续“0”值的位数记为一个5bit数,在连续“0”值后的非零值或第33个“0”值则以其16位二进制数记,并在此值后继续计数“0”的个数,每计数一组连续“0”值和非零值为一组21位数,每三组这样的21位数后为1位的末尾判断位,即21*3 1=64位数为一个编码数组,其最后的一位表示这组数是否为数据的最后一组,若是,则表示为“1”,若不是,则表示为“0”。例如,0,0,0,0,25,0,0,68,0,0,71的编码为“4,25,2,68,2,71”对应的二进制数,其中,4、2、2为“0”的游程,即连续零值的位数。除首次输入到卷积层的数据外,其余数据都以游程编码的压缩格式存储在外部存储器中,加速器从外部存储器中读取已编码的输入特征图,并通过解码模块对其进行解压缩,然后经数据门控发送到计算模块。计算模块给出的计算结果,由编码模块进行压缩,然后将其传输到外部存储器。
[0041]
除输入图片外,其余cnn模型每一层的输出特征图都经过上述编码方法后以压缩格式存储在外部存储器中,从外部存储器读取特征图并返回计算模块需要解压缩数据,数据解压缩的具体方法如下:(1)对于cnn模型第一层,顶层控制器将输入原始图片直接传输到后续模块;(2)对于除cnn模型第一层以外的卷积层或全连接层等,顶层控制器控制输入特征图经解码模块解码的具体方法如下:
[0042]
对于一个64bit的数据包,首先将其按位截取为3组“游程”和非零的组合,具体为:[63:59]位为第一组连续零值的个数,[58:43]为第一个非零数,[42:38]为第二组连续零值的个数,[37:32]为第二个非零数,[31:17]为第三组连续零值的个数,[16:1]为第三个非零数,第0位则为数据传输结束标志,当该位为1时,代表本次解编码结束。
[0043]
数据门控模块接收解编码模块发送的3组“游程”和非零数的组合,其中,非零数将被数据门控模块传输给计算模块进行后续的乘法累加操作,“游程”则用于判断非零数被送往计算模块的位置。
[0044]
综上所述,利用本发明提出的一种针对cnn模型的硬件加速器,可以有效的减少内存访问需求,节约硬件资源,提高运算速度,编码模块的使用保证了低内存访问和较小的占用面积,总体结构能使系统达到更高的吞吐率,同时节约能耗,有效通过硬件加速神经网络。。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献