本发明涉及在硬件中实现神经网络。
背景技术:
1、许多神经网络(nn)包括输入层、输出层和多个隐藏层,例如卷积nn。一些nn具有多于一个输入层和/或输出层。在运行时,nn中的层通常采用输入数据阵列,并且应用权重阵列来生成输出数据阵列。对于除了输出层之外的层,来自该层的输出数据形成针对nn中的后一层的输入数据。例如,取决于nn结构以及是否有任何分支,此层可以是nn中的下一层和/或nn中的后一层。对于输入层,输入数据是针对nn的输入数据,并且对于输出层,输出数据是来自nn的输出数据。
2、对于nn中的每一层,预先计算权重(或系数)阵列(例如作为训练阶段的一部分,因为该权重在nn的执行期间保持不变),并且将该权重阵列存储在存储器中,使得该权重可以在运行时被使用。权重阵列可以是多维权重阵列,并且输入数据可以是多维数据阵列。输入数据和权重的读取以及输出数据的写入会导致使用非常大的存储器带宽,并且在从存储器(并且特别是片外存储器)中多次读取相同数据(无论是输入数据还是权重)时,此情况更加严重。
3、下文描述的实施方案仅借助于示例来提供,并且不限制解决将神经网络映射到硬件以及处理神经网络的输入数据和输出数据的已知方法的任何或所有缺点的具体实现。
技术实现思路
1、提供本
技术实现要素:
是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
2、描述了在硬件中实现神经网络的方法。所述神经网络包括多个层,并且所述层被分组成多个层组,每个层组包括神经网络的一个或多个层,所述一个或多个层在通过硬件的单个遍次中被处理。将层组分组成多个图块组,每个图块组包括在执行神经网络时被评估的层组集合。所述方法包括将针对图块组中的第一层组的输入数据的一部分预取到片上存储器中的缓冲槽中;以及随后在针对第一层组的输出数据已被写入到存储器之后释放缓冲槽。
3、第一方面提供了一种用于在硬件中实现神经网络的方法,所述神经网络包括多个层,其中所述层被分组成多个层组,每个层组包括神经网络的在通过硬件的单个遍次中被处理的一个或多个层,并且所述层组被分组成多个图块组,每个图块组包括在执行神经网络时被评估的层组集合,所述方法包括:将针对图块组中的第一层组的输入数据的一部分预取到片上存储器中的缓冲槽中;以及随后在针对第一层组的输出数据已被写入到存储器之后释放缓冲槽。
4、可以选择性地执行预取,其中如果实现神经网络将导致针对图块组中的第一层组的输入数据被从片外存储器中读取必要次数,并且所述必要次数等于或大于阈值次数,则执行针对图块组中的第一层组的输入数据的预取。在针对图块组中的第一层组的输入数据已被读取必要次数之后,随后可以释放缓冲槽。
5、可以在执行第一层组之前预取输入数据的一部分。
6、对输入数据的所述部分的预取可以在执行第一层组之前开始,并且可以在执行第一层组期间结束。
7、可以在执行在第一层组之前的层组期间预取输入数据的一部分。
8、在第一层组之前的层可以是在前一图块组中的最后一个层组。
9、针对第一层组的输入数据可以细分成多个块,输入数据的所述部分可以包括第一块,并且可以在执行第一层组之前被预取。
10、针对第一层组的输入数据可以细分成多个块,输入数据的所述部分可以包括第一块,并且可以在执行在第一层组之前的层组期间被预取。
11、所述方法还可以包括:将针对图块组中的第一层组的输入数据的第二块预取到片上存储器中的第二缓冲槽中,其中在执行针对输入数据的第二块的第一层组之前预取第二块;以及随后在针对第一层组的输出数据和输入数据的第二块已被写入到存储器之后释放第二缓冲槽。
12、所述方法还可以包括:将针对图块组中的第一层组的输入数据的第二块预取到片上存储器中的第二缓冲槽中,其中在执行针对输入数据的第一块的图块组中的层组期间预取第二块;以及随后在针对第一层组的输出数据和输入数据的第二块已被写入到存储器之后释放第二缓冲槽。
13、针对第一层组的输入数据可以细分成多个块,输入数据的所述部分可以包括多个块中的第二块或后一块,并且可以在利用输入数据的所述部分执行第一层组之前预取输入数据的所述部分。
14、针对第一层组的输入数据可以细分成多个块,输入数据的所述部分可以包括多个块中的第二块或后一块,并且可以在执行针对多个块中的前一块的图块组中的层组期间预取输入数据的所述部分。
15、所述硬件可以包括一个或多个核,并且针对第一层组的输入数据可以细分成多个块,其中输入数据的所述部分包括针对核中的每个核的第一块,并且在执行第一层组之前被预取。
16、所述硬件可以包括一个或多个核,并且针对第一层组的输入数据可以细分成多个块,其中输入数据的所述部分包括针对核中的每个核的第一块,并且在执行在第一层组之前的层组期间被预取。
17、所述方法还可以包括:将针对用于图块组中的第一层组的多个核中的每个核的输入数据的第二块预取到片上存储器中的第二缓冲槽中,其中在执行针对用于多个核中的每个核的输入数据的第二块的第一层组之前预取针对多个核中的每个核的第二块;以及随后在针对第一层组的输出数据和输入数据的第二块已被写入到存储器之后释放第二缓冲槽。
18、所述方法还可以包括:将针对用于图块组中的第一层组的多个核中的每个核的输入数据的第二块预取到片上存储器中的第二缓冲槽中,其中在执行针对输入数据的第一块的图块组中的层组期间预取针对多个核中的每个核的第二块;以及随后在针对第一层组的输出数据和输入数据的第二块已被写入到存储器之后释放第二缓冲槽。
19、所述硬件可以包括多个核,并且针对第一层组的输入数据可以细分成多个块,输入数据的所述部分可以包括针对多个核中的每个核的多个块中的第二块或后一块,并且可以在利用输入数据的所述部分执行第一层组之前预取输入数据的所述部分。
20、所述硬件可以包括多个核,并且针对第一层组的输入数据可以细分成多个块,输入数据的所述部分可以包括针对多个核中的每个核的多个块中的第二块或后一块,并且可以在执行针对多个块中的前一块的图块组中的层组期间预取输入数据的所述部分。
21、第二方面提供了一种神经网络加速器,所述神经网络加速器被配置成在硬件中实现神经网络,所述神经网络包括多个层,其中所述层被分组成多个层组,每个层组包括神经网络的在通过硬件的单个遍次中被处理的一个或多个层,并且所述层组被分组成多个图块组,每个图块组包括在执行神经网络时被评估的层组集合,所述神经网络加速器包括:片上存储器;硬件逻辑,所述硬件逻辑布置成将针对图块组中的第一层组的输入数据的一部分预取到片上存储器中的缓冲槽中;以及硬件逻辑,所述硬件逻辑布置成随后在针对第一层组的输出数据已被写入到存储器之后释放缓冲槽。
22、所述神经网络加速器可以体现在集成电路上的硬件中。可以提供一种在集成电路制造系统处制造神经网络加速器的方法。可以提供一种集成电路定义数据集,所述集成电路定义数据集在于集成电路制造系统中被处理时将所述系统配置成制造神经网络加速器。可以提供一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有集成电路的计算机可读描述,所述计算机可读描述在被处理时使得布局处理系统生成在集成电路制造系统中用于制造神经网络加速器的电路布局描述。
23、可以提供一种集成电路制造系统,所述集成电路制造系统包括:非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有描述神经网络加速器的计算机可读集成电路描述;布局处理系统,所述布局处理系统被配置成处理集成电路描述以便生成体现神经网络加速器的集成电路的电路布局描述;以及集成电路生成系统,所述集成电路生成系统被配置成根据电路布局描述来制造神经网络加速器。
24、可以提供用于执行本文中描述的方法中的任何方法的计算机程序代码。可以提供一种非暂时性计算机可读存储介质,所述非暂时性计算机可读存储介质上存储有计算机可读指令,所述计算机可读指令在于计算机系统处被执行时使得所述计算机系统执行本文中描述的方法中的任何方法。
25、如对本领域技术人员将显而易见,上述特征可以适当地组合,并且可与本文所描述的示例的各方面中的任一方面进行组合。
1.一种用于在硬件中实现神经网络的方法,所述神经网络包括多个层,其中所述层被分组成多个层组,每个层组包括所述神经网络的在通过所述硬件的单个遍次中被处理的一个或多个层,并且所述层组被分组成多个图块组,每个图块组包括在执行所述神经网络时被评估的层组集合,所述方法包括:
2.根据权利要求1所述的方法,其中在执行所述第一层组之前预取所述输入数据的所述部分。
3.根据权利要求1所述的方法,其中对所述输入数据的所述部分的所述预取在执行所述第一层组之前开始,并且在执行所述第一层组期间结束。
4.根据权利要求1所述的方法,其中在执行在所述第一层组之前的层组期间预取所述输入数据的所述部分。
5.根据权利要求4所述的方法,其中在所述第一层组之前的所述层是在前一图块组中的最后一个层组。
6.根据权利要求1所述的方法,其中针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括第一块,并且在执行所述第一层组之前被预取。
7.根据权利要求1所述的方法,其中针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括第一块,并且在执行在所述第一层组之前的层组期间被预取。
8.根据权利要求6所述的方法,所述方法还包括:
9.根据权利要求6所述的方法,所述方法还包括:将针对所述图块组中的所述第一层组的所述输入数据的第二块预取到片上存储器中的第二缓冲槽中,其中在执行针对所述输入数据的所述第一块的所述图块组中的层组期间预取所述第二块;以及
10.根据权利要求1所述的方法,其中针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括所述多个块中的第二块或后一块,并且在利用所述输入数据的所述部分执行所述第一层组之前预取所述输入数据的所述部分。
11.根据权利要求1所述的方法,其中针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括所述多个块中的第二块或后一块,并且在执行针对所述多个块中的前一块的所述图块组中的层组期间预取所述输入数据的所述部分。
12.根据权利要求1所述的方法,其中所述硬件包括多个核,并且针对所述第一层组的所述输入数据细分成多个块,所述输入数据的所述部分包括针对所述多个核中的每个核的第一块,并且在执行所述第一层组之前被预取。
13.根据权利要求1所述的方法,其中所述硬件包括多个核,并且针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括针对所述多个核中的每个核的第一块,并且在执行在所述第一层组之前的层组期间被预取。
14.根据权利要求12所述的方法,所述方法还包括:
15.根据权利要求12所述的方法,所述方法还包括:将针对用于所述图块组中的所述第一层组的所述多个核中的每个核的所述输入数据的第二块预取到片上存储器中的第二缓冲槽中,其中在执行针对所述输入数据的所述第一块的所述图块组中的层组期间预取针对所述多个核中的每个核的所述第二块;以及
16.根据权利要求1所述的方法,其中所述硬件包括多个核,并且针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括针对所述多个核中的每个核的所述多个块中的第二块或后一块,并且在利用所述输入数据的所述部分执行所述第一层组之前预取所述输入数据的所述部分。
17.根据权利要求1所述的方法,其中所述硬件包括多个核,并且针对所述第一层组的输入数据细分成多个块,所述输入数据的所述部分包括针对所述多个核中的每个核的所述多个块中的第二块或后一块,并且在执行针对所述多个块中的前一块的所述图块组中的层组期间预取所述输入数据的所述部分。
18.一种神经网络加速器,所述神经网络加速器被配置成在硬件中实现神经网络,所述神经网络包括多个层,其中所述层被分组成多个层组,每个层组包括所述神经网络的在通过所述硬件的单个遍次中被处理的一个或多个层,并且所述层组被分组成多个图块组,每个图块组包括在执行所述神经网络时被评估的层组集合,所述神经网络加速器包括:
19.根据权利要求18所述的神经网络加速器,其中所述神经网络加速器在集成电路上的硬件中体现。
20.一种计算机可读存储介质,所述计算机可读存储介质上编码有计算机可读代码,所述计算机可读代码被配置成在运行所述代码时使得如权利要求1至17中任一项所述的方法得以执行。