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

一种神经网络处理器和数据处理方法与流程

2022-02-24 18:02:58 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种神经网络处理器和数据处理方法。


背景技术:

2.神经网络是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型,这种网络由大量的节点(或称神经元)之间相互连接构成,通过调整内部大量节点之间相互连接的关系,利用输入数据、权值产生输出数据模拟人脑的信息处理过程处理信息并生成模式识别之后的结果。
3.对于神经网络运算来说,如果该神经网络运算具有多层运算,多层运算的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络正向运算下层中的神经元即为输入神经元,处于网络正向运算上层中的神经元即为输出神经元。以卷积神经网络模型为例,设一个卷积神经网络有l层,k=1,2,...,l-1,对于第k层和第k 1层来说,我们将第k层称为输入层,其中的神经元为输入神经元,第k 1层称为输出层,其中的神经元为输出神经元。即除最顶层外,每一层都可以作为输入层,其下一层为对应的输出层。
4.在神经网络模型的计算过程中,神经网络模型中前一层计算得到的输出结果会作为后一层计算的输入。一般情况下,处理器将神经网络模型中前一层计算得到的输出结果存入处理器内部的输出数据缓存器中,在进行后一层的计算时,处理器需要先读取输出数据缓存器中存储好的前一层的输出结果,然后将其作为当前层的输入进行计算。然而,在前一层计算得到的中间计算结果的数据量庞大的情况下,由于受输出数据缓存器的容量限制,中间计算结果只能保存在处理器之外的存储器中,当进行后一层的计算时,处理器需要先从外部存储器中获取存储好的前一层的中间计算结果,然后将其作为当前层的输入进行计算。
5.现有技术中,处理器在对中间计算结果进行压缩时,往往对中间计算结果进行全部压缩,然后,将压缩后的中间计算结果存储在处理器之外的存储器中。在进行神经网络的下一层计算时,需要对压缩后的中间计算结果进行解压,以获得解压后的数据,然后,使用解压后的数据参与计算。由于在处理器中增加了压缩以及解压缩操作,降低了从处理器中搬运中间计算结果到存储器的数据量,然而,申请人在实际中发现,针对某些神经网络层来说(例如,第一层神经网络),由于第一层数据的稀疏率通常较低,通过上述描述的压缩以及解压缩方式对第一层数据进行处理时,会带来较小的i/o带宽收益,并且还带来因压缩以及解压缩的复杂度所带来的功耗损失,因此,如何在保证i/o带宽收益的情况下,减少压缩以及解压缩操作的复杂度是亟需解决的技术问题。


技术实现要素:

6.本技术提供了一种神经网络处理器和数据处理方法,可以降低从神经网络处理器中搬运中间计算结果到外部存储器的数据量,还可以减少压缩操作的复杂度,为后续减少
解压缩操作的复杂度提供了便利。
7.第一方面,提供了一种神经网络处理器,该神经网络处理器可以包括:第一缓存单元、第二缓存单元、运算单元、压缩单元和存储单元访问控制器;其中,第一缓存单元,用于存储第一输入数据,具体来说,第一输入数据,可以是初始输入给神经网络处理器进行推理运算的原始数据,比如,图片数据、语音数据等,也可以是神经网络处理器在执行神经网络运算过程中所产生的中间数据(又称中间计算结果);第二缓存单元,用于存储权重数据;运算单元,与上述第一缓存单元和第二缓存单元相连,用于对第一输入数据和权重数据进行矩阵乘运算,可以得到中间计算结果,其中,中间计算结果是指,神经网络处理器在执行神经网络运算过程中所产生的计算结果;压缩单元,用于对上述中间计算结果进行处理,得到处理后的数据;处理后的数据包括压缩后的数据和未压缩的数据;存储单元访问控制器,与压缩单元相连,用于将上述处理后的数据存储至审计网络处理器之外的存储器中。
8.实施本技术实施例,神经网络处理器中增加了压缩单元,压缩单元在对运算单元计算得到的中间计算结果进行处理时,可以得到压缩后的数据和未压缩的数据,之后,通过存储单元访问控制器将处理后的数据存储在外部存储器中。相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器的i/o带宽;另一方面,减少了压缩操作的复杂度,为后续减少解压缩操作的复杂度提到了便利。
9.在一种可能的实现方式中,该神经网络处理器还可以包括解压缩单元,其中,解压缩单元与上述存储单元访问控制器相连,用于接收由存储单元访问控制器从存储中获取的待解压数据,然后,对待解压数据中压缩后的数据进行解压,对待解压数据中未压缩的数据不进行解压,并将解压后的数据和未压缩的数据作为第二输入数据存储于第一缓存单元中,从而,运算单元可以从第一缓存单元中获取第二输入数据以进行矩阵乘运算。实施本技术实施例,神经网络处理器中增加了解压缩单元,降低了从存储器中搬运中间计算结果到该神经网络处理器中进行下一次计算的数据量,由于解压缩单元只需对压缩后的数据进行解压,无需对未压缩的数据进行处理,可以较少解压缩操作的复杂度。
10.在一种可能的实现方式中,上述未压缩的数据的长度小于分块长度,未压缩的数据包括第一数据和第二数据,第一数据和所述第二数据存储在存储器的同一个首地址对应的存储空间中;其中,第一数据为上一层中间计算结果的最后一个分块数据;第二数据为当前层中间计算结果的第一个分块数据。举例来说,分块长度为4kb,第一数据的数据长度为3kb,第二数据的数据长度为1kb,采用本技术描述的方法,将上述第一数据和第二数据存储在一块4kb的存储空间中。实施本技术实施例,存储器在对压缩单元处理后的数据进行存储时,可以将上一层数据的最后一个分块数据和当前层的第一个分块数据存储至同一个存储空间中,可以节省存储器的存储空间。
11.在一种可能的实现方式中,上述最后一个分块数据为上一层中间计算结果的第一地址到终止地址之间的数据,第一地址为满足分块长度的整数倍的地址;上述第一个分块数据为当前层中间计算结果的起始地址到第二地址之间的数据,第二地址为与第三地址相邻的前一个地址,第三地址为满足分块长度的整数倍的地址。
12.在一种可能的实现方式中,上述压缩单元可以具体用于:在中间计算结果对应的
起始地址不是分块长度的整数倍的情况下,将起始地址到第一分块地址的中间计算结果分块得到第一分块数据,从第二分块地址开始按分块长度对中间计算结果进行分块并压缩,得到处理后的数据;其中,第二分块地址为满足分块长度的整数倍的地址;第一分块地址为与第二分块地址相邻的前一个地址;第一分块数据不压缩;当最后一个分块的数据长度小于分块长度的情况下,最后一个分块的数据不压缩。举例来说,中间计算结果对应的起始地址为19kb、数据长度为5kb、终止地址为23kb,分块长度为4kb。神经网络处理器确定该中间计算结果对应的起始地址不是分块长度的整数倍,将19kb对应的数据确定为第一分块数据,将20kb-23kb之间的数据确定为第二分块数据,其中,第一分块数据的数据长度为1kb,第二分块数据的数据长度为4kb,在这种情况下,对第一分块数据不压缩,对第二分块数据进行压缩。实施本技术实施例,神经网络处理器可以根据中间计算结果对应的起始地址、数据长度以及确定好的分块长度进行分块,得到分块数据,在满足分块数据的数据长度等于分块长度的情况下,对该分块数据进行压缩;在满足分块数据的数据长度小于分块长度的情况下,对该分块数据不压缩,从而可以得到压缩后的数据和未压缩的数据,之后,通过存储单元访问控制器将处理后的数据存储在外部存储器中。相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器的i/o带宽;另一方面,减少了压缩操作的复杂度,为后续减少解压缩操作的复杂度提到了便利。
13.在一种可能的实现方式中,上述待解压数据在存储器中按预设对齐方式进行存储;解压缩单元在对处理后的数据进行处理时,可以包括:在待解压数据对应的起始地址不是分块长度的整数倍的情况下,获取第一对齐地址到第二对齐地址之间的第二分块数据,从第二对齐地址开始按分块长度获取分块数据,并对分块数据进行解压;第一对齐地址和第二对齐地址为满足分块长度的整数倍的地址;第一对齐地址为在起始地址之前的一个对齐地址;第二对齐地址为在起始地址之后的一个对齐地址;其中,第二分块数据不解压,获取起始地址之后的数据;在最后一个分块中,获取最后一个分块对应的对齐地址与待解压数据对应的终止地址之间的数据。举例来说,待解压数据的起始地址为19kb、数据长度为5kb、终止地址为23kb,分块长度为4kb,解压缩单元确定待解压数据对应的起始地址不是分块长度的整数倍,接收由存储单元访问控制器从存储器中获取的16kb-23kb之间的待解压数据,其中,第一对齐地址为16kb(第一对齐地址为起始地址之前的一个对齐地址),第二对齐地址为20kb,在第一个分块数据中,对第一个分块数据不解压,获取起始地址19kb之后的数据;在第二个分块数据中,对第二个分解数据进行解压,得到解压后的数据。实施本技术实施例,解压缩单元可以根据待解压数据对应的起始地址和分块长度获取相应地分块数据,在分块数据为压缩后的分块数据时,对该压缩后的分块数据进行解压;在分块数据为未压缩的分块数据时,无需对该未压缩的分块数据进行解压处理,由于解压缩单元只需对压缩后的数据进行解压,无需对未压缩的数据进行处理,可以较少解压缩操作的复杂度。
14.在一种可能的实现方式中,压缩后的数据包括压缩后的分块数据,未压缩的数据包括未压缩的分块数据;针对压缩后的分块数据,生成一个与压缩后的分块数据对应的第一标识信息,第一标识信息用于表征分块数据压缩成功和分块数据压缩后的数据长度;其中,第一标识信息由存储单元访问控制器进行控制,存储至存储器中;针对未压缩的分块数
据,生成一个与未压缩的分块数据对应的第二标识信息,第二标识信息用于表征分块数据压缩失败;其中,第二标识信息由存储单元访问控制器进行控制,存储至存储器中。实施本技术实施例,经过压缩单元处理后的分块数据包括各自对应的标识信息,以便解压缩单元根据每个分块数据各自对应的标识信息进行解压缩,可以提高解压缩的效率。
15.在一种可能的实现方式中,解压缩单元在对待解压数据进行处理时,可以接收由存储单元访问控制器从存储器中获取的待解压数据;在分块数据对应的标识为压缩成功的标识信息时,对分块数据进行解压,并将解压后的数据作为第二输入数据存储至第一缓存单元中;在分块数据对应的标识为压缩失败的标识信息时,将分块数据作为第二输入数据存储至第一缓存单元中。
16.第二方面,本技术实施例提供了一种数据处理方法,该方法可以应用于神经网络处理器,该神经网络处理器可以包括第一缓存单元、第二缓存单元、运算单元、压缩单元和存储单元访问控制器,该方法可以包括如下步骤:首先,通过运算单元对第一缓存单元中获取的第一输入数据和从第二缓存单元中获取的权重数据进行矩阵乘运算以得到中间计算结果;之后,通过压缩单元对中间计算结果进行处理,得到处理后的数据;处理后的数据包括压缩后的数据和未压缩的数据;最后,通过存储单元访问控制器将上述处理后的数据存储至神经网络处理器之外的存储器中。
17.实施本技术实施例,实施本技术实施例,神经网络处理器中增加了压缩单元,压缩单元在对运算单元计算得到的中间计算结果进行处理时,可以得到压缩后的数据和未压缩的数据,之后,通过存储单元访问控制器将处理后的数据存储在外部存储器中。相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器的i/o带宽;另一方面,减少了压缩操作的复杂度,为后续减少解压缩操作的复杂度提到了便利。
18.在一种可能的实现方式中,上述神经网络处理器还包括解压缩单元;在这种情况下,上述方法还可以包括如下步骤:通过解压缩单元接收由存储单元访问控制器从存储器中获取的待解压数据,对待解压数据中压缩后的数据进行解压,并将解压后的数据和未压缩的数据作为第二输入数据存储于第一缓存单元中;通过运算单元对从第一缓存单元中获取的第二输入数据进行矩阵乘运算,从而实现了下一层神经网络的计算。
19.在一种可能的实现方式中,未压缩的数据的长度小于分块长度,未压缩的数据包括第一数据和第二数据,第一数据和第二数据存储在存储器的同一个首地址对应的存储空间中;其中,第一数据为上一层中间计算结果的最后一个分块数据;第二数据为当前层中间计算结果的第一个分块数据。
20.在一种可能的实现方式中,最后一个分块数据为上一层中间计算结果的第一地址到终止地址之间的数据,第一地址为满足分块长度的整数倍的地址;第一个分块数据为当前层中间计算结果的起始地址到第二地址之间的数据,第二地址为与第三地址相邻的前一个地址,第三地址为满足分块长度的整数倍的地址。
21.在一种可能的实现方式中,通过压缩单元对中间计算结果进行处理,得到处理后的数据的实现过程可以包括:在中间计算结果对应的起始地址不是分块长度的整数倍的情况下,将起始地址到第一分块地址的中间计算结果分块得到第一分块数据,从第二分块地
址开始按分块长度对中间计算结果进行分块并压缩,得到处理后的数据;其中,第二分块地址为满足分块长度的整数倍的地址;第一分块地址为与第二分块地址相邻的前一个地址;第一分块数据不压缩;当最后一个分块的数据长度小于分块长度的情况下,最后一个分块的数据不压缩。
22.在一种可能的实现方式中,待解压数据在存储器中按预设对齐方式进行存储;对待解压数据中压缩后的数据进行解压,包括:在待解压数据对应的起始地址不是分块长度的整数倍的情况下,获取第一对齐地址到第二对齐地址之间的第二分块数据,从第二对齐地址开始按分块长度获取分块数据,并对分块数据进行解压;第一对齐地址和第二对齐地址为满足分块长度的整数倍的地址;第一对齐地址为在起始地址之前的一个对齐地址;第二对齐地址为在起始地址之后的一个对齐地址;其中,第二分块数据不解压,获取起始地址之后的数据;在最后一个分块中,获取最后一个分块对应的对齐地址与待解压数据对应的终止地址之间的数据。
23.在一种可能的实现方式中,压缩后的数据包括压缩后的分块数据,未压缩的数据包括未压缩的分块数据;方法还可以包括如下步骤:针对压缩后的分块数据,生成一个与压缩后的分块数据对应的第一标识信息,第一标识信息用于表征分块数据压缩成功和分块数据压缩后的数据长度;其中,第一标识信息由存储单元访问控制器进行控制,存储至存储器中;针对未压缩的分块数据,生成一个与未压缩的分块数据对应的第二标识信息,第二标识信息用于表征分块数据压缩失败;其中,第二标识信息由存储单元访问控制器进行控制,存储至存储器中。
24.在一种可能的实现方式中,上述方法还可以包括如下步骤:接收由存储单元访问控制器从存储器中获取的待解压数据;在分块数据对应的标识为压缩成功的标识信息时,对分块数据进行解压,并将解压后的数据作为第二输入数据存储至第一缓存单元中;在分块数据对应的标识为压缩失败的标识信息时,将分块数据作为第二输入数据存储至第一缓存单元中。
附图说明
25.图1为本技术实施例提供的一种卷积神经网络(cnn)100的结构示意图;
26.图2为本技术实施例提供的另一种卷积神经网络(cnn)100的结构示意图;
27.图3为本技术实施例提供的第一应用场景的示意图;
28.图4为本技术实施例提供的第二应用场景的示意图;
29.图5a为本技术实施例提供的一种神经网络处理器50的硬件结构图;
30.图5b为本技术实施例提供的另一种神经网络处理器50的硬件结构图;
31.图6a为本技术实施例提供的一种神经网络处理器中运算单元503的结构示意图;
32.图6b为本技术实施例提供的一种神经网络处理器中向量计算单元的结构示意图;
33.图7a为本技术实施例提供的一种中间计算结果对应的分块结果的示意图;
34.图7b为本技术实施例提供的一种分块数据压缩的示意图;
35.图7c为本技术实施例提供的另一种分块数据压缩的示意图;
36.图7d为本技术实施例提供的一种存储空间对齐设置的示意图;
37.图7e为本技术实施例提供的一种存储器存储第一中间计算结果和第二中间计算
结果的示意图;
38.图8a为本技术实施例提供的一种数据处理方法的流程示意图;
39.图8b为本技术实施例提供的另一种数据处理方法的流程示意图;
40.图9为本技术实施例提供的一种控制神经网络处理器进行压缩的方法流程示意图。
具体实施方式
41.下面结合附图对本技术实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。
42.本技术的说明书以及附图中的术语“第一”和“第二”等是用于区分不同的对象,或者用于区别对同一对象的不同处理,而不是用于描述对象的特定顺序。此外,本技术的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一些列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。需要说明的是,本技术实施例中,“示例性地”或者“例如”等词用于表示作例子、例证或说明。本技术实施例中被描述为“示例性地”或者“例如”的任何实施例或设计方法不应被解释为比其他实施例或设计方案更优地或更具优势。确切而言,使用“示例性地”或者“例如”等词旨在以具体方式呈现相关概念。在本技术实施例中,“a和/或b”表示a和b,a或b两个含义。“a,和/或b,和/或c”表示a、b、c中的任一个,或者,表示a、b、c中的任两个,或者,表示a和b和c。
43.为了便于更好的理解本技术所描述的技术方案,下面先解释本技术实施例所涉及的技术术语:
44.(1)卷积神经网络。
45.卷积神经网络(cnn,convolutional neuron network)是一种带有卷积结构的深度神经网络,是一种深度学习(deep learning)架构,深度学习架构是指通过机器学习的算法,在不同的抽象层级上进行多个层次的学习。作为一种深度学习架构,cnn是一种前馈(feed-forward)人工神经网络,该前馈人工神经网络中的各个神经元对输入其中的图像中的重叠区域作出响应。
46.如图1所示,卷积神经网络(cnn)100可以包括输入层110,卷积层/池化层120,其中池化层为可选的,以及神经网络层130。下面对其进行详细介绍:
47.卷积层/池化层120:
48.卷积层:
49.如图1所示卷积层/池化层120可以包括如示例121-126层,在一种实现中,121层为卷积层,122层为池化层,123层为卷积层,124层为池化层,125为卷积层,126为池化层;在另一种实现方式中,121、122为卷积层,123为池化层,124、125为卷积层,126为池化层。即卷积层的输出可以作为随后的池化层的输入,也可以作为另一个卷积层的输入以继续进行卷积操作。
50.以卷积层121为例,卷积层121可以包括很多个卷积算子,卷积算子也称为核,其在图像处理中的作用相当于一个从输入图像矩阵中提取特定信息的过滤器,卷积算子本质上
可以是一个权重矩阵,这个权重矩阵通常被预先定义,在对图像进行卷积操作的过程中,权重矩阵通常在输入图像上沿着水平方向一个像素接着一个像素(或两个像素接着两个像素
……
这取决于步长stride的取值)的进行处理,从而完成从图像中提取特定特征的工作。该权重矩阵的大小与图像的大小相关,需要注意的是,权重矩阵的纵深维度(depth dimension)和输入图像的纵深维度是相同的,在进行卷积运算的过程中,权重矩阵会延伸到输入图像的整个深度。因此,和一个单一的权重矩阵进行卷积会产生一个单一纵深维度的卷积化输出,但是大多数情况下不使用单一权重矩阵,而是应用维度相同的多个权重矩阵。每个权重矩阵的输出被堆叠起来形成卷积图像的纵深维度。不同的权重矩阵可以用来提取图像中不同的特征,例如一个权重矩阵用来提取图像边缘信息,另一个权重矩阵用来提取图像的特定颜色,又一个权重矩阵用来对图像中不需要的噪点进行模糊化
……
该多个权重矩阵维度相同,经过该多个维度相同的权重矩阵提取后的特征图维度也相同,再将提取到的多个维度相同的特征图合并形成卷积运算的输出。
51.这些权重矩阵中的权重值在实际应用中需要经过大量的训练得到,通过训练得到的权重值形成的各个权重矩阵可以从输入图像中提取信息,从而帮助卷积神经网络100进行正确的预测。
52.当卷积神经网络100有多个卷积层的时候,初始的卷积层(例如121)往往提取较多的一般特征,该一般特征也可以称之为低级别的特征;随着卷积神经网络100深度的加深,越往后的卷积层(例如126)提取到的特征越来越复杂,比如高级别的语义之类的特征,语义越高的特征越适用于待解决的问题。
53.池化层:
54.由于常常需要减少训练参数的数量,因此卷积层之后常常需要周期性的引入池化层,即如图1中120所示例的121-126各层,可以是一层卷积层后面跟一层池化层,也可以是多层卷积层后面接一层或多层池化层。在图像处理过程中,池化层的唯一目的就是减少图像的空间大小。池化层可以包括平均池化算子和/或最大池化算子,以用于对输入图像进行采样得到较小尺寸的图像。平均池化算子可以在特定范围内对图像中的像素值进行计算产生平均值。最大池化算子可以在特定范围内取该范围内值最大的像素作为最大池化的结果。另外,就像卷积层中用权重矩阵的大小应该与图像大小相关一样,池化层中的运算符也应该与图像的大小相关。通过池化层处理后输出的图像尺寸可以小于输入池化层的图像的尺寸,池化层输出的图像中每个像素点表示输入池化层的图像的对应子区域的平均值或最大值。
55.神经网络层130:
56.在经过卷积层/池化层120的处理后,卷积神经网络100还不足以输出所需要的输出信息。因为如前所述,卷积层/池化层120只会提取特征,并减少输入图像带来的参数。然而为了生成最终的输出信息(所需要的类信息或别的相关信息),卷积神经网络100需要利用神经网络层130来生成一个或者一组所需要的类的数量的输出。因此,在神经网络层130中可以包括多层隐含层(如图1所示的131、132至13n)以及输出层140,该多层隐含层中所包含的参数可以根据具体的任务类型的相关训练数据进行预先训练得到,例如该任务类型可以包括图像识别,图像分类,图像超分辨率重建等等。
57.在神经网络层130中的多层隐含层之后,也就是整个卷积神经网络100的最后层为
输出层140,该输出层140具有类似分类交叉熵的损失函数,具体用于计算预测误差,一旦整个卷积神经网络100的前向传播(如图3由110至140的传播为前向传播)完成,反向传播(如图1由140至110的传播为反向传播)就会开始更新前面提到的各层的权重值以及偏差,以减少卷积神经网络100的损失及卷积神经网络100通过输出层输出的结果和理想结果之间的误差。
58.需要说明的是,如图1所示的卷积神经网络100仅作为一种卷积神经网络的示例,在具体的应用中,卷积神经网络还可以以其他网络模型的形式存在,例如,如图2所示的多个卷积层/池化层并行,将分别提取的特征均输入给神经网络层130进行处理。
59.(2)神经网络中的运算
60.在本技术实施例中,对于神经网络中的运算可以为神经网络中的一层的运算,对于多层神经网络,其实现过程是,在正向运算中,当上一层人工神经网络执行完成之后,下一层的运算指令会将运算单元中计算出的输出神经元作为下一层的输入神经元进行运算(或者是对该输出神经元进行某些操作再作为下一层的输入神经元),同时,将权值也替换为下一层的权值;在反向运算中,当上一层人工神经网络的反向运算执行完成后,下一层运算指令会将运算单元中计算出的输入神经元梯度作为下一层的输出神经元梯度进行运算(或者是对该输入神经元梯度进行某些操作再作为下一层的输出神经元梯度),同时将权值替换为下一层的权值。
61.上述神经网络运算还可以包括支持向量机运算,k-近邻(k-nn)运算,k-均值(k-means)运算,主成分分析运算等等。为了描述的方便,下面以人工神经网络运算为例来说明机器学习计算的具体方案。
62.对于人工神经网络运算,如果该人工神经网络运算具有多层运算,多层运算的输入神经元和输出神经元并非是指整个神经网络的输入层中神经元和输出层中神经元,而是对于网络中任意相邻的两层,处于网络正向运算下层中的神经元即为输入神经元,处于网络正向运算上层中的神经元即为输出神经元。以卷积神经网络为例,设一个卷积神经网络有l层,k=1,2......,l,对于第k层和第k 1层来说,我们将第k层称为输入层,其中的神经元为输入神经元,第k 1层称为输出层,其中的神经元为输出神经元。即除最顶层外,每一层都可以作为输入层,其下一层为对应的输出层。
63.(3)输入数据
64.在本技术实施例中,输入数据,可以是初始输入给神经网络处理器进行推理运算的原始数据,比如,图片数据、语音数据等,也可以是神经网络处理器在执行神经网络运算过程中所产生的中间数据(又称中间计算结果),由于中间数据的数据量通常较大,因此,神经网络处理器会将神经网络上一层计算得到的中间数据存入外部存储器,在执行神经网络下一层计算时,再从存储器中读取该中间数据,并加载到神经网络处理器中进行计算。
65.(4)权重数据
66.在本技术实施例中,权重数据,是指对神经网络进行训练后,得到的权重数据。具体来说,神经网络的训练过程就是不断对权重进行调整的过程。
67.(5)中间计算结果
68.在本技术实施例中,中间计算结果是指,神经网络处理器在执行神经网络运算过程中所产生的计算结果,可以是神经网络处理器中运算单元运算后输出的数据,也可以是
向量计算单元对运算单元输出的数据进行再次运算得到的数据。需要说明的是,中间计算结果也是一种输入数据,神经网络上一层的中间计算结果往往作为输入数据参与到神经网络下一层的计算。
69.下面示例性地描述卷积神经网络100可以适用的应用场景。
70.第一应用场景:
71.在本技术实施例中,卷积神经网络100可以应用于各类电子设备中。在一种具体的实施场景,如图3所示,智能手机302和304已内置卷积神经网络100相关的处理器。移动智能手机客户301向移动智能手机客户305发起语音呼叫,语音信号经智能手机302发出,经基站303转送给智能手机304,由于发起语音呼叫时暴雨骤起且伴有强烈的电闪雷鸣,导致输入信号306被严重削弱且含有较大的噪声,该输入信号可以为一维数字语音信号,智能手机304中配备有卷积神经网络100,该神经网络可以是以专用电路的形式在芯片中实现,也可以是运行在中央处理单元(central processing unit,cpu)或其他处理器中的程序指令。输入信号306在智能手机304中的卷积神经网络中经过处理,该处理包括噪声去除以及有效信号增强等,得到输出信号307,该输出信号完整的保留了主叫用户传送的语音信息,避免了恶劣自然环境对信号的干扰。
72.第二应用场景:
73.本技术实施例提供该卷积神经网络100的另一种具体的实施场景,如图4所示,一轿车403在道路上高速行驶,一路人401使用数码相机402拍下了该轿车403的车牌号,但是由于轿车403具有较高的车速v,数码相机的输入信号404发生了运动模糊现象,该输入信号为二维数字图像信号,该数码相机402中配备有卷积神经网络100,该神经网络可以是以专用电路的形式在芯片中实现,也可以是运行在图像信号处理器中的软件模块。输入信号404在数码相机402中的卷积神经网络中经过处理后,该处理包括轿车运动模型估计、运动模糊去除等,得到输出信号405,输出信号中包含的车牌号信息清晰度得以提高,可得到准确辨识。
74.如前所述,在图像识别、音频识别等领域广泛应用的卷积神经网络往往需要执行大量的矩阵乘法运算,执行矩阵乘法运算需要非常高的存储带宽且运算量很大。现有技术中,神经网络处理器在确定无需对中间计算结果进行压缩时,直接将中间计算结果存储在处理器之外的存储器中,并且将获取到的中间计算结果作为输入数据参与到神经网络的下一层计算中,此时,神经网络处理器无需对中间计算结果进行解压缩。神经网络处理器在确定需要对中间计算结果进行压缩时,往往对中间计算结果进行全部压缩,然后,将压缩后的中间计算结果存储在神经网络处理器之外的存储器中。在进行神经网络的下一层计算时,需要对压缩后的中间计算结果进行解压,以获得解压后的数据,然后,使用解压后的数据参与计算。本技术与之不同。为了充分利用硬件的处理能力,在本技术实施例中,通过对前一层计算得到的中间计算结果进行处理,得到压缩的数据和未压缩的数据,然后,将上述压缩的数据和未压缩的数据存储至外部存储器中,当进行后一层的计算时,处理器先从外部存储器中获取待解压数据,然后对其进行解压缩操作,例如,对待解压数据中压缩后的数据进行解压,对待解压缩数据中未压缩的数据不进行处理,上述经过解压缩单元处理后的数据参与到下一层神经网络的计算。相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器
中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器的i/o带宽;另一方面,减少了压缩操作的复杂度。此外,由于解压缩单元只需对压缩后的数据进行解压,无需对未压缩的数据进行处理,可以较少解压缩操作的复杂度。
75.图5a,为本技术实施例提供的一种芯片的硬件结构图,该芯片可以包括人工智能处理器(neural network processing unit,npu)50,又可以称为神经网络处理器50,用于实现卷积神经网络100的运算功能。本技术实施例中的神经网络处理器可以应用到手机、平板电脑、服务器、可穿戴设备等可执行矩阵乘法运算的各类设备中。
76.在本技术实施例中,人工智能处理器50可以是npu,谷歌的张量处理器(tensor processing unit,tpu),或者图形处理器(graphics processing unit,gpu)等一切适合用于大规模异或运算处理的处理器。以npu为例:npu可以作为协处理器挂载到主cpu(host cpu)上,由主cpu为其分配任务。
77.在本技术实施例中,npu的核心部分为运算电路50,通过控制器504控制运算电路503提取存储器中的矩阵数据并进行乘法运算。例如,控制器504控制运算电路503提取输入存储器501或权重存储器502中的数据并进行运算。
78.在一些实现中,运算电路(亦称为运算单元)503内部包括多个处理单元(process engine,pe)。在一些实现中,运算电路503是二维脉动阵列。运算电路503还可以是一维脉动阵列或者能够执行例如乘法和加法这样的数学运算的其它电子线路。在一些实现中,运算电路503是通用的矩阵处理器。
79.举例来说,假设有输入矩阵a,权重矩阵b,输出矩阵c。运算电路从权重存储器502中取矩阵b相应的数据,并缓存在运算电路中每一个pe上。运算电路从输入存储器501中取矩阵a数据与矩阵b进行矩阵运算,得到的矩阵的部分结果或最终结果,保存在累加器508accumulator中。
80.统一存储器506用于存放输入数据以及输出数据。权重数据直接通过存储单元访问控制器505direct memory access controller,dmac被搬运到权重存储器502中。输入数据也通过dmac被搬运到统一存储器506中。
81.biu为bus interface unit即,总线接口单元510,用于axi总线与dmac和取指存储器509instruction fetch buffer的交互。
82.总线接口单元510(bus interface unit,简称biu),用于取指存储器509从外部存储器获取指令,还用于存储单元访问控制器505从外部存储器获取输入矩阵a或者权重矩阵b的原数据。
83.dmac主要用于将外部存储器ddr中的输入数据搬运到统一存储器506或将权重数据搬运到权重存储器502中或将输入数据数据搬运到输入存储器501中。
84.向量计算单元507可以对运算电路503的输出做进一步处理,如向量乘,向量加,指数运算,对数运算,大小比较等等。主要用于神经网络中非卷积/fc层网络计算,如pooling(池化),batch normalization(批归一化),local response normalization(局部响应归一化)等。
85.在一些实现种,向量计算单元能507将经处理的输出的向量存储到统一存储器506。例如,向量计算单元507可以将非线性函数应用到运算电路503的输出,例如累加值的向量,用以生成激活值。在一些实现中,向量计算单元507生成归一化的值、合并值,或二者
均有。在一些实现中,处理过的输出的向量能够用作到运算电路503的激活输入,例如用于在神经网络中的后续层中的使用。
86.控制器504连接的取指存储器(instruction fetch buffer)509,用于存储控制器504使用的指令;
87.控制器504,用于调取取指存储器中缓存的指令,实现控制该神经网络处理器50的工作过程。
88.一般地,统一存储器506,输入存储器501,权重存储器502以及取指存储器509均为on-chip存储器。外部存储器私有于该npu硬件架构。例如,外部存储器可以为双倍数据率同步动态随机存储器(double data rate synchronous dynamic random access memory,ddr sdram)、高带宽存储器(high bandwidth memory,hbm)或其他可读可写的存储器。
89.在本技术实施例中,输入存储器501是第一缓存单元,权重存储器502是第二缓存单元,取指存储器509是第三缓存单元,统一存储器506是第四缓存单元。
90.上述神经网络处理器在实现卷积和fc运算时,由于运算涉及的中间计算结果的数据量较大,无法全部保存在统一存储器506中,因此,该神经网络处理器在执行运算的过程中,需要实时的从外部存储器中导入中间计算结果来进行计算,导出和导入中间计算结果都将占用神经网络处理器的输入/输出(i/o)带宽,如果i/o带宽成为瓶颈,将导致该神经网络处理器的计算功能空置,降低了神经网络处理器的运算性能。
91.需要说明的是,图1和图2所示的卷积神经网络中各层的运算可以由矩阵计算单元212或向量计算单元507执行。
92.图5b是本技术实施例提供的一种神经网络处理器50的硬件结构示意图,相较于图5a所示的神经网络处理器50来说,其增加了压缩单元511和解压缩单元512。
93.其中,输入存储器501,用于存储输入数据;权重存储器502,用于存储权重数据;运算电路503,用于将从输入存储器501中获取的输入数据和从权重存储器502中获取的权重数据进行矩阵乘运算以得到中间计算结果,该中间计算结果被保存在累加器508中,向量计算单元507可以从累加器508中取出中间计算结果做进一步处理,比如,向量乘、向量加、指数运算、对数运算和大小比较等,并且向量计算单元507将经过处理后的中间计算结果存储到统一存储器506中。
94.压缩单元511,用于从统一存储器506中获取中间计算结果,并且对中间计算结果进行处理,得到处理后的数据,其中,处理后的数据包括压缩后的数据和未压缩的数据,再由存储单元访问控制器505将压缩单元511处理后的数据搬运至外部存储器中。
95.进一步地,由于上述处理后的数据是神经网络处理器50在对神经网络的某层进行计算后的计算结果,处理后的数据可以作为输入数据参与到神经网络处理器50的下一次计算。因此,该神经网络处理器50还可以包括解压缩单元512,用于通过存储单元访问控制器505从外部存储器中获取上述压缩单元511处理后的数据,对其中的压缩后的数据进行解压,将解压后的数据和未压缩的数据作为输入数据存储在输入存储器501中。运算电路503将根据从输入存储器501中获取的输入数据和从权重存储器502中获取的权重数据进行矩阵乘计算,
96.由上可知,由于神经网络处理器50中增加了压缩单元511和解压缩单元512,具体来说,可以通过压缩单元511对前一层计算得到的中间计算结果进行处理,得到处理后的数
据,其中,处理后的数据包括压缩的数据和未压缩的数据,由存储单元访问控制器505将压缩单元511处理后的数据搬运至外部存储器中,当进行后一层的计算时,由存储单元访问控制器505先从外部存储器中获取上述压缩单元511处理后的数据,然后通过解压缩单元512对其进行处理,例如,对其中压缩后的数据进行解压,对未不压缩的数据不解压,并将解压后的数据和未解压的数据存储至输入存储器501中,从而运算单元503可以从输入存储器501中获取第二输入数据以进行下一层的计算,相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器50的io带宽,使得神经网络处理器中的运算单元不出现空置现象,提升了处理器的计算性能;另一方面,减少了压缩以及解压缩操作的复杂度。
97.如图6a所示,运算单元(亦称为运算电路)503可以包括一个或多个矩阵乘法电路5031和一个或多个加法电路5032,一个加法电路5032可以对应一个矩阵乘法电路5031,一个加法电路5032也可以对应多个矩阵乘法电路5031。运算单元503中包括的多个矩阵乘法电路5031可以各自独立的进行矩阵乘法运算。参见图6a,图6a中以运算单元503包括2个矩阵乘法电路5031为例进行绘制。矩阵乘法电路5031包括m个由运算块组成的运算组,每个运算组中包括k个运算块,每个运算块包括n个运算单元,运算单元设有两路输入,分别用于接收不同存储器(如输入存储器501、权重存储器502)发送的数据,并将两路数据相乘;加法电路5032用于对属于同一运算块的运算单元的计算结果进行累加得到每个运算块的计算结果。
98.图6b为向量计算单元507的结构,向量计算单元507用于生成归一化的值、合并值,或二者均有。处理过的输出的向量能够用作到运算单元503的激活输入,例如用于在神经网络中的后续层中的使用,其主要包括激活电路、归一化电路和池化电路。
99.激活电路5071,将非线性函数应用到每个累加值,以生成激活值,如非线性双曲函数tanh(x);
100.归一化电路5072,根据激活值生成归一化值;
101.池化电路5073,将聚集函数应用到归一化值以生成池化值,比如,在一些实现中,聚集函数是返回归一化值集合中最大值、最小值或平均值的函数。
102.在本技术实施例中,在图5b所示的神经网络处理器中,由指令控制器504来对取指存储器509中存储的控制指令进行解析,根据解析的结果对压缩单元511、统一存储器506、解压缩单元512以及存储单元访问控制器505做出不同的控制操作,在一些可能的实现方式中,指令控制504也可以不执行对该控制指令的解析,将控制指令的解析交由神经网络处理器50中的压缩单元511和解压缩单元512处理。
103.在一个示例中,取指存储器509存储有控制指令(例如,压缩指令),具体地,该控制指令用于指示压缩单元511对数据1进行处理,数据1的起始地址为a,数据长度为m,指令控制器504将该控制指令发送给压缩单元511。之后,压缩单元511解析上述控制指令,对中间计算结果进行处理,得到处理后的数据;处理后的数据包括压缩后的数据和未压缩的数据,之后,由存储单元访问控制器505将上述处理后的数据搬运至神经网络处理器之外的存储器20中。
104.在一个示例中,取指存储器509存储有控制指令(例如,解压缩指令),具体地,该控
制指令用于指示解压缩单元512对数据2进行处理,数据2在存储器中的起始地址为b,数据长度为n,指令控制器504将该控制指令发送解压缩单元512。之后,解压缩单元512解析该控制指令,接收由存储单元访问控制器从存储器中获取的待解压数据,对待解压数据中压缩后的数据进行解压,对待解压数据中未压缩的数据不处理,并将解压后的数据和未压缩的数据作为第二输入数据存储于第一缓存单元(也即输入存储器501)中。
105.基于图5b所示的硬件结构,下面具体阐述在本技术实施例中,压缩单元511如何实现压缩的功能,以及,解压缩单元512如何实现解压缩的功能。
106.在本技术实施例中,压缩单元511用于根据中间计算结果对应的起始地址、数据长度以及确定好的分块长度对中间计算结果进行分块处理,得到多个分块;之后,在分块的数据长度等于分块长度的情况下,对该分块进行压缩;在分块的数据长度小于分块长度的情况下,对该分块不进行压缩。在对分块数据进行压缩时,对每个分块数据来说,可以采用独立的压缩算法对其进行压缩。
107.需要说明的是,本技术对压缩单元511采用的压缩算法不做具体限定,例如,压缩单元511可以根据数据中的0值进行压缩,由于压缩单元511是运行在神经网络处理器50的硬件逻辑电路上,因此,压缩算法的选择需要考虑硬件的资源、功耗和性能等,本技术对于压缩单元511采用哪种压缩算法不作限定。
108.具体地,压缩单元511在中间计算结果对应的起始地址不是分块长度的整数倍的情况下,将起始地址到第一分块地址的中间计算结果分块得到第一分块数据,从第二分块地址开始按分块长度对中间计算结果进行分块并压缩,得到处理后的数据;其中,第二分块地址为满足分块长度的整数倍的地址;第一分块地址为与第二分块地址相邻的前一个地址;第一分块数据不压缩;当最后一个分块的数据长度小于分块长度的情况下,最后一个分块的数据不压缩。压缩单元511在中间计算结果对应的起始地址是分块长度的整数倍的情况下,从起始地址开始按分块长度对中间计算结果进行分块并压缩,得到处理后的数据;其中,当最后一个分块的数据长度小于分块长度的情况下,最后一个分块的数据不压缩。
109.下面结合具体的实例进行阐述:
110.在一个示例中,中间计算结果对应的起始地址a=19kb,数据长度m=13kb,分块长度=4kb。其中,起始地址a不是分块长度l的整数倍,将起始地址19kb对应的数据确定为分块1,从地址20kb开始,按分块长度对剩余的中间计算结果进行分块,得到分块2、分块3以及分块4,其中,分块2包括地址20kb到地址23kb之间的数据,分块3包括地址24kb到地址27kb之间的数据,分块4包括地址28kb到地址31kb之间的数据。例如,该分块结果可以如图7a所示。由于分块1的数据长度小于分块长度l,对分块1不进行压缩。由于分块2、分块3以及分块4各自对应的数据长度等于分块长度l,压缩单元511对上述3个分块分别进行压缩,得到3个压缩后的分块数据。例如,如图7b所示,分块1不压缩,将分块2压缩为3kb的数据,将分块3压缩为1kb的数据,将分块4压缩为2.5kb的数据。由于分块5的数据长度小于分块长度l,对分块5不进行压缩。
111.在一个示例中,中间计算结果对应的起始地址a=19kb,数据长度m=7kb,分块长度l=4kb。其中,起始地址a不是分块长度l的整数倍,将起始地址19kb对应的数据确定为分块1,将地址20kb到地址23kb之间的数据确定为分块2,将地址24kb到地址25kb之间的数据确定为分块3。由于分块1以及分块3各自对应的数据长度小于分块长度l,对上述2个分块不
进行压缩。由于分块2对应的数据长度等于分块长度l,对分块2进行压缩。
112.在一个示例中,中间计算结果对应的起始地址为a=0kb,数据长度为m=19kb,分块长度为l=4kb。其中,起始地址a是分块长度l的整数倍,从该起始地址开始,按分块长度l对中间计算结果进行分块,得到分块1、分块2、分块3、分块4以及分块5。其中,分块1包括起始地址0kb到地址3kb之间的数据,分块2包括地址4kb到地址7kb之间的数据,分块3包括地址8kb到地址11kb之间的数据,分块4包括地址12kb到15kb之间的数据,分块5包括地址16kb到地址18kb之间的数据。由于分块1、分块2、分块3以及分块4各自对应的数据长度等于分块长度,压缩单元511对上述4个分块分别进行压缩,得到4个压缩后的分块数据。例如,如图7c所示,将分块1压缩为2kb的数据,将分块2压缩为3kb的数据,将分块3压缩为1kb的数据,将分块4压缩为2.5kb的数据。由于分块5的数据长度小于分块长度l,对分块5不进行压缩。
113.在本技术实施例中,存储器在存储压缩单元511处理后的数据时,可以按照预设对齐方式进行存储,例如,该预设对齐方式可以为字节对齐方式。如图7d所示,存储空间1-存储空间4这4个存储空间进行字节对齐设置,在存储数据时,将分块1存储在存储空间1中,将分块2存储在存储空间2中,将分块3存储在存储空间3中,将分块4存储在存储空间4中。
114.在本技术实施例中,以前述举例第一中间计算结果对应的起始地址为a=0kb,数据长度为m=19kb,分块长度为l=4kb,第二中间计算结果对应的起始地址a=19kb,数据长度m=13kb,分块长度=4kb为例,第一中间计算结果为上一层中间计算结果,第二中间计算结果为当前层中间计算结果,压缩单元511在对第一中间计算结果进行处理时,对分块1-分块4这4个分块进行压缩,分块5不压缩;压缩单元511在对第二中间计算结果进行处理时,分块1不压缩,对分块2-分块4这3个分块进行压缩。此时,未压缩的数据为第一中间计算结果中的分块5(也即,第一数据,第一数据为第一中间计算结果的最后一个分块数据)和第二中间计算结果中的分块1(也即:第二数据,第二数据为第二中间计算结果的第一个分块数据),存储器在对上述第一数据和第二数据进行存储时,如图7e所示,将第一数据和第二数据存储在存储器的同一个首地址对应的存储空间中。通过这一实现方式,可以节省存储器的存储空间。
115.具体来说,上述最后一个分块数据为第一中间计算结果的第一地址(16kb)到终止地址(18kb)之间的数据,其中,第一地址为满足分块长度l的整数倍的地址。第一个分块数据为第二中间计算结果的起始地址(19kb)到第二地址之间的数据,第二地址为与第三地址相邻的前一个地址,第三地址为满足分块长度的整数倍的地址。
116.在本技术实施例中,针对压缩后的分块数据,生成一个与压缩后的分块数据对应的第一标识信息,该第一标识信息用于表征分块数据压缩成功和分块数据压缩后的数据长度。针对未压缩的分块数据,生成一个与未压缩的分块数据对应的第二标识信息,第二标识信息用于表征分块数据压缩失败。其中,上述压缩成功的标识以及压缩失败的标识通过存储单元访问控制器505存入存储器中。
117.由上可知,经过压缩单元511处理后的数据会出现压缩成功和压缩失败的情形,对解压缩单元512来说,当解压缩单元512接收到由存储单元访问控制器从存储器中获取的待解压数据之后,对分块数据各自对应的标识进行识别,在分块数据对应的标识为压缩失败的标识时,直接将该分块数据作为输入数据存储在输入存储器501中,即不进行解压缩处理;在分块数据对应的标识为压缩失败的标识时,对该分块数据进行解压,以得到解压后的
数据,并且将解压后的数据作为输入数据存储在输入存储器501中。
118.需要说明的是,解压缩单元512中采用的解压缩算法为与压缩单元511采用的压缩算法相对应的算法。
119.在本技术实施例中,当存储单元访问控制器505将外部存储器ddr存储的数据搬运至解压缩单元512时,可以通过解压缩单元512对其进行处理,以实现下一层神经网络的计算。
120.具体地,解压缩单元512在待解压数据对应的起始地址不是分块长度的整数倍的情况下,获取第一对齐地址到第二对齐地址之间的第二分块数据,从第二对齐地址开始按分块长度获取分块数据,并对分块数据进行解压;第一对齐地址和第二对齐地址为满足分块长度的整数倍的地址;第一对齐地址为在起始地址之前的一个对齐地址;第二对齐地址为在起始地址之后的一个对齐地址;其中,第二分块数据不解压,获取起始地址到第二对齐地址之后的数据;在最后一个分块中,获取最后一个分块对应的对齐地址与待解压数据对应的终止地址之间的数据。解压缩单元512在待解压数据对应的起始地址是分块长度的整数倍的情况下,获取起始地址到第三对齐地址之间的数据,从起始地址开始按分块长度获取分块数据,并对分块数据进行解压,第三对齐地址为满足分块长度的整数倍的地址,在最后一个分块中,获取最后一个分块对应的对齐地址到待解压数据对应的终止地址之间的数据。
121.下面结合具体实例进行阐述:
122.在一个示例中,待解压数据对应的起始地址b=1kb,数据长度n=7kb,分块长度l=4kb。其中,起始地址不是分块长度l的整数倍,获取第一对齐地址(0kb)到第二对齐地址(4kb)之间的第一个分块数据(即:0kb-3kb),从第二对齐地址(4kb)开始,获取地址4kb到地址7kb之间的第二个分块数据(即:4kb-7kb),在上述第一个分块数据中,直接获取起始地址(1kb)之后的数据(也即:1kb-3kb);在上述第二个分块数据中,对第二个分块数据进行解压,得到数据长度为4kb的数据。从而,解压缩单元512可以实现数据的解压缩,并将上述解压后的数据和未压缩的数据作为输入数据存储在输入存储器501中。
123.在一个示例中,待解压数据对应的起始地址b=1kb,数据长度n=10kb,分块长度l=4kb。其中,起始地址不是分块长度l的整数倍,获取第一对齐地址(0kb)到第二对齐地址(4kb)之间的第一个分块数据(即:0kb-3kb),从第二对齐地址(4kb)开始,获取地址4kb到地址7kb之间的第二个分块数据(即:4kb-7kb),获取地址8kb到第三对齐地址(11kb)之间的第三个分块数据(即:8kb-11kb)。在上述第一个分块数据中,直接获取起始地址(1kb)之后的数据(也即:1kb-3kb);在上述第二个分块数据中,对第二个分块数据进行解压,得到数据长度为4kb的数据,在上述第三个分块数据中,直接获取地址8kb到终止地址(10kb)之间的数据(也即:8kb-10kb)。从而,解压缩单元512可以实现数据的解压缩,并将上述解压后的数据和未压缩的数据作为输入数据存储在输入存储器501中。
124.在一个示例中,待解压数据对应的起始地址b=0kb,数据长度为9kb,从起始地址开始按分块长度获取分块数据,例如,分块1(分块1包括起始地址为0kb到地址为3kb之间的数据)、分块2(分块2包括地址为4kb到地址为7kb之间的数据)和分块3(分块3包括地址位8kb到对齐地址11kb之间的数据),分别对上述分块1和分块2进行解压缩,得到解压后的数据;在分块3中,获取地址8kb对应的数据。从而,解压缩单元512可以实现数据的解压缩,并
将上述解压后的数据和未压缩的数据作为输入数据存储在输入存储器501中。
125.需要说明的是,上述举例均只是作为一种示例,不应构成限定。例如,分块长度l可以为2kb,也可以为8kb,等等。
126.实施本技术实施例,实施本技术实施例,神经网络处理器中增加了压缩单元和解压缩单元,压缩单元在对运算单元计算得到的中间计算结果进行处理时,可以得到压缩后的数据和未压缩的数据,之后,通过存储单元访问控制器将处理后的数据存储在外部存储器中。相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器的i/o带宽;另一方面,减少了压缩操作的复杂度。此外,由于解压缩单元只需对压缩后的数据进行解压,无需对未压缩的数据进行处理,可以较少解压缩操作的复杂度。
127.需要说明的是,以卷积神经网络为例,由于卷积神经网络中特征数据生成的长度极大程度上是没有规律的,当下一层进行计算时,使用的特征数据的长度也是没有规律的,本技术实施例描述的通过压缩单元511对数据进行处理,得到压缩后的数据和未压缩的数据,以及通过解压缩单元512对待解压数据进行处理的方法,可以支持任意起始位置、任意数据长度的压缩和解压缩,提高了数据压缩以及数据解压缩的通用性。
128.基于图5b所示的硬件结构图,下面结合图8a所示的本技术实施例提供的一种数据处理方法的流程示意图,具体说明在本技术实施例中是如何实现数据处理的,该方法应用于神经网络处理器,神经网络处理器包括第一缓存单元、第二缓存单元、运算单元、压缩单元和存储单元访问控制器该方法可以包括但不限于如下步骤:
129.步骤s800通过运算单元对从第一缓存单元中获取的第一输入数据和从第二缓存单元中获取的权重数据进行矩阵乘运算以得到中间计算结果。
130.步骤s802:通过压缩单元对中间计算结果进行处理,得到处理后的数据;处理后的数据包括压缩后的数据和未压缩的数据。
131.步骤s804:通过存储单元访问控制器将处理后的数据存储至神经网络处理器之外的存储器中。
132.在本技术实施例中,关于步骤s800-步骤s804的具体实现,请参考前述描述,此处不多加赘述。
133.在图8a所示的方法流程图的基础上,如图8b所示,本技术实施例还提供了另外一种数据处理方法,该方法阐述了如何对外部存储器ddr存储的数据进行解压缩,以实现神经网络的计算,该方法可以包括但不限于如下步骤:
134.步骤s806:通过解压缩单元接收由存储单元访问控制器从存储器中获取的待解压数据,对待解压数据中压缩后的数据进行解压,并将解压后的数据和未压缩的数据作为第二输入数据存储于第一缓存单元中。
135.步骤s808:通过运算单元对从第一缓存单元中获取的第二输入数据进行矩阵乘运算。
136.在本技术实施例中,关于步骤s806-步骤s808的具体实现,请参考前述描述,此处不多加赘述。
137.实施本技术实施例,神经网络处理器中增加了压缩单元和解压缩单元,压缩单元
在对运算单元计算得到的中间计算结果进行处理时,可以得到压缩后的数据和未压缩的数据,之后,通过存储单元访问控制器将处理后的数据存储在外部存储器中。相较于现有技术而言,由于无需对中间计算结果进行全部压缩,而是针对中间计算结果中的部分数据进行压缩,一方面,降低了从该神经网络处理器中搬运中间计算结果到外部存储器的数据量,节省该神经网络处理器的i/o带宽;另一方面,减少了压缩操作的复杂度。此外,由于解压缩单元只需对压缩后的数据进行解压,无需对未压缩的数据进行处理,可以较少解压缩操作的复杂度。
138.以图5b为例,图5b除了提供神经网络处理器50的结构外,也给出了主cpu10的结构,基于此,本技术实施例还提供了一种控制神经网络处理器进行压缩的方法,如图9所示,该方法可以包括但不限于图如下步骤s901-步骤s909,其中,步骤s901-步骤s904由主cpu执行,步骤s905-步骤s909由神经网络处理器执行。
139.步骤s901、判断是否对神经网络中每层中间计算结果进行压缩和解压缩。
140.在实际应用中,cpu可以分析训练后所形成的神经网络的特征(该训练后所形成的神经网络即为神经网络处理器执行推理运算的神经网络),比如,通过算法分析或实测数据,然后,根据分析得出的神经网络的特征推断出该神经网络过程中每层输入数据的稀疏率,根据每层输入数据的稀疏率确定是否对该层的中间计算结果进行压缩和解压缩,具体地,可以通过将每层输入数据的稀疏率和阈值进行比较来确定是否对该层的中间计算结果进行压缩和解压缩。例如,在cpu确定神经网络第i层输入数据的稀疏率大于阈值时,确定第i层中间计算结果需要通过上述压缩单元511进行处理,以及将第i层中间计算结果作为第i 1层输入数据执行第i 1层计算时需要解压缩单元512对其进行解压缩;在cpu确定神经网络第i层输入数据的稀疏率不大于阈值时,确定第i层中间计算结果不需要通过上述压缩单元511进行处理,以及将第i层中间计算结果作为第i 1层输入数据执行第i 1层计算时不需要解压缩;其中,i为大于1且小于n的整数,n为神经网络的层数。
141.上述阈值可以根据i/o带宽的收益和功耗代价确定,其中,i/o带宽的收益是指神经网络处理器对中间计算结果进行压缩和解压缩处理所减少的i/o带宽,功耗代价是指神经网络处理器对中间计算结果进行压缩和解压缩处理所增加。
142.具体地,该阈值可以预先确定,例如,在预先的测试中,当输入数据的稀疏率等于临界值时,神经网络处理器50开启压缩和解压缩所带来的i/o带宽的收益等于功耗代价,则可以将该临界值确定为阈值。在实际应用中,考虑到希望i/o带宽的收益更多,可以对该临界值进行调整,以确定阈值的大小,本技术对阈值的确定不做具体限定。
143.需要说明的是,针对不同的神经网络模型,上述预设的阈值可以不同。
144.步骤s902、生成控制指令。
145.具体地,cpu可以根据上述判断结果生成控制指令,该控制指令用于指示神经网络处理器50是否对神经网络中每层运算得到的中间计算结果进行压缩和解压缩。
146.步骤s903、将控制指令存储在存储器中。
147.具体地,cpu可以将生成的控制指令存储在神经网络处理器之外的存储器20中。
148.步骤s904、将控制指令置于神经网络处理器中的取值存储器中。
149.具体地,cpu可以将存储在存储器中的控制指令搬运到神经网络处理器50中的取指存储器509中。
150.步骤s905、读取取值存储器中的控制指令。
151.具体地,神经网络处理器50从取指存储器509中读取控制指令。
152.步骤s906、对神经网络中每层进行计算,得到中间计算结果。
153.具体地,可以通过神经网络处理器50中的运算电路503来执行运算。
154.步骤s907、根据控制指令确定是否对中间计算结果进行压缩和解压缩处理。
155.具体地,神经网络处理器在接收到控制指令之后,解析该控制指令,然后根据控制指令确定是否对神经网络中每层的中间计算结果进行压缩和解压缩处理,若是,则执行步骤s908;若否,则执行步骤s909。
156.步骤s908、通过压缩单元对中间计算结果进行处理,得到处理后的数据;处理后的数据包括压缩后的数据和未压缩的数据;将处理后的数据存储在存储器中;在执行下一层神经网络计算时,对从存储器中获取的中间计算结果进行解压缩,以得到输入数据。
157.具体地,神经网络处理器在确定需要对中间计算结果进行压缩时,通过压缩单元511对中间计算结果进行处理,得到处理后的数据,并且将上述处理后的数据存储在存储器中,在执行神经网络的下一层计算时,神经网络处理器从存储器中获取中间计算结果,通过解压缩单元512对其进行解压缩处理,将解压后的数据和未压缩的数据作为输入数据参与到神经网络的下一层计算中。
158.步骤s909、将中间计算结果存储在存储器中,在执行下一层神经网络计算时,将从存储器中获取的中间计算结果作为输入数据。
159.具体地,神经网络处理器在确定无需对中间计算结果进行压缩时,直接将中间计算结果存储在存储器中,在执行神经网络的下一层计算时,神经网络处理器从存储器中读取中间计算结果,并且将获取到的中间计算结果作为输入数据参与到神经网络的下一层计算中,此时,神经网络处理器获取到的中间计算结果无需通过解压缩单元512进行处理。
160.从而可以知道的是,针对神经网络中稀疏率较低的输入数据,如果神经网络处理器启动压缩和解压缩,压缩收益低。通过本技术所描述的方法,cpu在判断神经网络中某层输入数据的稀疏率较大时,才控制神经网络处理器对该层得到的中间计算结果进行压缩和解压缩,可以提高i/o带宽的压缩收益。
161.需要说明的是,本技术实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
162.本技术实施例装置中的模块可以根据实际需要进行合并、划分和删减。
163.可以理解,本领域普通技术人员可以意识到,结合本技术各个实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
164.本领域技术人员能够领会,结合本技术各个实施例中公开描述的各种说明性逻辑框、模块和算法步骤所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,那么各种说明性逻辑框、模块、和步骤描述的功能可作为一或多个指令或代码在计算机可读媒体上存储或传输,且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于有形媒体,例如数据存储媒体,或包括任何促进将计算机程序从
一处传送到另一处的媒体(例如,根据通信协议)的通信媒体。以此方式,计算机可读媒体大体上可对应于(1)非暂时性的有形计算机可读存储媒体,或(2)通信媒体,例如信号或载波。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本技术中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可包含计算机可读媒体。
165.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
166.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
167.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
168.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
169.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
170.以上所述,仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
再多了解一些

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

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

相关文献