神经网络硬件加速器及方法与流程
- 国知局
- 2024-07-31 23:05:30
本发明属于神经网络硬件加速器,具体涉及一种利用张量稀疏性加速的神经网络硬件加速器以及相应的神经网络加速方法。
背景技术:
1、神经网络在越来越多的领域得到了大规模的应用,为提高大型神经网络训练和/或推理的速度,通常采用神经网络硬件加速器来对训练过程和/或推理过程进行加速。目前主流的神经网络有卷积神经网络和注意力神经网络等,在卷积神经网络中,卷积运算是最主要的运算,而在注意力神经网络中,矩阵乘是最主要的运算,这两种运算一般都是通过设计包含乘积累加运算(multiply accumulate,mac)阵列的硬件加速器来实现加速运算的。目前,随着神经网络的发展,卷积运算和矩阵乘运算所需求的性能越来越高,而受限于移动端的尺寸和能耗等原因,硬件加速器在规模扩大上则是有上限的,特别是其中mac阵列的规模,难以再显著提升。另一方面,现有的神经网络硬件加速器的功耗普遍很高,使得其使用受到限制。因此,基于有限的mac阵列规模,如何进一步提高神经网络硬件加速器的性能以及如何降低功耗是当前亟待解决的问题。
2、一方面,现有技术中存在一些采用跳零技术的神经网络硬件加速器,通过跳过运算数据中零所对应的运算来实现功耗的降低,然而,这些技术方案中,mac阵列中的部分运算单元往往会因为跳零而在一些时钟周期中处于闲置等待的状态,也即存在mac阵列的运算资源闲置的情况,硬件加速器的性能提高有限。
3、另一方面,现有技术中还存在采用2:4稀疏跳零技术的神经网络硬件加速器,例如目前市面上的一些gpu中有这样的硬件加速单元。该技术方案中,使输入权重的稀疏度为50%,在此基础上进行数据压缩以及跳零,从而进一步提升硬件加速器的性能并降低功耗。然而,该技术方案要求输入权重中每四个连续的权重数据位中有两个是零,在实际应用中这是很难实现的,在输入权重不满足这一要求时,则会在四个连续的权重数据位中,将值相对较小的两个权重数据位强制置零,而造成神经网络性能上的偏差,为消除这一偏差,该技术方案需要用户在运算后重新训练神经网络,带来了额外的时间和资源上的开销。而在输入权重的稀疏度相对较低的情况,性能上的偏差会较为严重,即使经过重新训练,神经网络也很难达到理想的性能,因此该技术方案有较大的限制性。
技术实现思路
1、本发明是为解决上述问题而进行的,目的在于提供一种利用输入张量稀疏性来对神经网络相关运算进行加速、且对输入数据中零的数量比例及位置分布没有特定要求的更为通用的神经网络硬件加速器以及相应的方法,本发明采用了如下技术方案:
2、本发明提供了一种神经网络硬件加速器,具有这样的技术特征,该神经网络加速器包括:数据排布模块,用于按照预定排布规则对输入的运算数据进行重新排布;跳零模块,用于对排布后的运算数据进行跳零操作,得到跳零后的运算数据;以及乘积累加运算阵列模块,用于基于跳零后的运算数据进行乘积累加运算,得到运算结果,其中,所述运算数据包含输入数据以及对应的输入权重,所述输入数据包含多个数据位,所述输入权重包含多个权重位,所述跳零模块在多个所述数据位中检测零的位置,将非零的数据位按其排布后的顺序拼接成若干个数据位组,将与非零的数据位对应的多个权重位拼接成若干个权重位组,并将若干个所述数据位组和对应的所述权重位组并行地发给所述乘积累加运算阵列模块。
3、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述跳零模块包括:零检测逻辑单元,用于在连续的n个所述数据位中并行地检测并输出零的位置,其中n为4的整数倍;数据用多路复用器,根据所述零的位置,在所述n个数据位中选出非零的数据位,并将其按排布后的顺序拼接成多个数据位组,并将所述多个数据位组并行地发给所述乘积累加运算阵列模块;以及权重用多路复用器,根据所述零的位置,在n个所述权重位中选出非零的数据位所对应的所述权重位,并将其按排布后的顺序拼接成多个权重位组,并将所述多个权重位组并行地发给所述乘积累加运算阵列模块。
4、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述数据用多路复用器根据所述零的位置选出非零的数据位后,按其排布后的顺序将每两个选出的数据位拼接成一个所述数据位组,并将若干个所述数据位组并行地发送给所述乘积累加运算阵列模块,所述权重用多路复用器根据所述零的位置选出与非零的数据位对应的所述权重位后,按其排布后的顺序将每两个选出的权重位拼接成一个所述权重位组,并将若干个所述权重位组并行地发送给所述乘积累加运算阵列模块。
5、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述乘积累加运算阵列模块包含多个运算单元,所述运算单元在每个时钟周期进行两次乘法运算以及一次加法运算,当在一个所述时钟周期中,所述数据用多路复用器选出的非零的数据位小于两个且所述零检测逻辑单元未检测到所述输入数据结束的位置时,所述数据用多路复用器以及所述权重用多路复用器等待下一个所述时钟周期,当在一个所述时钟周期中,所述数据用多路复用器选出的非零的数据位小于两个且所述零检测逻辑单元检测到所述输入数据结束的位置时,所述数据用多路复用器将选出的所述数据位与缺失值作为一个所述数据位组发给所述乘积累加运算阵列模块,所述权重用多路复用器将对应的所述权重位与缺失值作为一个所述权重位组发送给所述乘积累加运算阵列模块。
6、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述运算数据包含多通道的所述输入数据以及多通道的所述输入权重,每个所述数据位对应于一个所述通道,所述数据排布模块按照所述通道数的奇偶,将每个所述输入数据分为两个输入数据部分,将所述输入权重相应地分为两个所述输入权重部分,并将多个所述输入数据部分与对应的所述输入权重部分并行地输出。
7、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述数据排布模块包括:输入用缓冲器,用于暂存所述运算数据;读取状态机,用于读取一批次的所述运算数据,并根据预定的计算顺序输出对应的状态序列信息;以及排布用多路复用器,用于根据所述状态序列信息取出对应的各个所述数据位以及各个所述权重位,并按照所述通道数的奇偶将所述数据位分入对应的所述输入数据部分,以及按照所述通道数的奇偶将所述权重位分入对应的所述输入权重部分,并将多个所述输入数据部分与对应的所述输入权重部分并行地输出。
8、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,多通道的所述输入数据以多个数据块的形式存储在所述输入用缓冲器中,每个所述数据块包含分别对应于各个通道的一个所述数据位,所述排布用多路复用器根据所述状态序列信息读取各个所述数据块,并按照所述通道的奇偶将每个所述数据块分为两个子数据块,将偶数通道的所述子数据块按所述输入数据的其他维度的原始顺序排布形成一个输入数据部分,将奇数通道的所述子数据块按所述输入数据的其他维度的原始顺序排布形成一个输入数据部分,并将所有的所述输入数据部分与对应的输入权重部分并行地输出。
9、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述数据排布模块还包括:数据缓冲器,用于对所述排布用多路复用器输出的多个所述输入数据部分进行暂存;以及权重缓冲器,用于对所述排布用多路复用器输出的多个所述输入权重部分进行暂存。
10、本发明提供的神经网络硬件加速器,还可以具有这样的技术特征,其中,所述输入用缓冲器为直接内存存取缓冲器,所述数据排布模块还包括:直接内存存取控制器,用于控制从内存中读取所述运算数据。本发明提供了一种神经网络硬件加速方法,具有这样的技术特征,该方法包括以下步骤:数据排布步骤,按照预定排布规则对输入的运算数据进行重新排布,得到排布后的运算数据;跳零步骤,对排布后的运算数据进行跳零操作,得到跳零后的运算数据;以及运算步骤,基于跳零后的运算数据进行乘积累加运算,得到运算结果,其中,所述运算数据包含输入数据以及对应的输入权重,所述输入数据包含多个数据位,所述输入权重包含多个权重位,在所述跳零步骤中,在多个所述数据位中检测零的位置,将非零的数据位按其排布后的顺序拼接成若干个数据位组,将与非零的数据位对应的多个权重位拼接成若干个权重位组,在所述运算步骤中,基于所述若干个数据位组和对应的所述若干个权重位组并行地进行运算。
11、发明作用与效果
12、根据本发明的神经网络硬件加速器及方法,神经网络硬件加速器包括数据排布模块、跳零模块以及乘积累加运算阵列模块,其中,由于跳零模块跳过输入数据中的零,并将其他输入数据以及对应的输入权重分别排布成若干个数据位组以及对应的权重位组,并行地发给乘积累加运算阵列模块,因此该神经网络硬件加速器不仅能够通过跳零来省去零数据位对应的运算,从而节省能耗,而且减少了乘积累加运算阵列模块中的部分运算单元在一些时钟周期中因跳零而闲置等待的情况,也即在跳零后仍然能够充分利用乘积累加运算阵列模块的运算资源,从而能够在乘积累加运算阵列模块的运算资源有限的情况下,进一步提升神经网络硬件加速器的性能。
本文地址:https://www.jishuxx.com/zhuanli/20240730/195907.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。