在三个或更多个维度中的加窗运算的硬件实施方式的制作方法

文档序号:29459012发布日期:2022-03-30 14:12阅读:158来源:国知局
在三个或更多个维度中的加窗运算的硬件实施方式的制作方法

1.本发明涉及在硬件加速器中执行加窗运算。


背景技术:

2.加窗运算诸如2-d卷积和池化是众所周知的,并且广泛用于神经网络的上下文中—特别是卷积神经网络(cnn)。例如,这些2-d运算支持将基于神经网络的算法应用于图像处理/分析/理解任务。硬件加速器是本领域中已知的,其被优化以用于执行这些2-d运算。
3.在处理2-d图像的cnn中使用的张量通常具有两个以上的维度数量。通过与每个图像相关联的输入信道的数量、待应用于每个信道的滤波器的数量等来添加附加的维度。示例性张量具有四个维度:批次、信道、高度和宽度。应用于该张量的对应的2-d卷积内核还具有四个维度:输出信道的数量、输入信道的数量、内核高度和内核宽度。
4.值得注意的是,不管表示2-d信号的张量的维度数量如何,所执行的加窗运算(例如,卷积或池化)本质上是二维的。也就是说,窗口(例如,内核)仅跨两个维度(即,高度维度和宽度维度)中的步幅移位。称这两个维度被窗口“遍历”。其他维度,诸如批次维度和信道维度,也可以存在。


技术实现要素:

5.提供本发明内容是为了以简化的形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
6.公开了一种数据处理系统和方法,用于在至少三个遍历维度中实施加窗运算。数据处理系统将至少三个遍历维度中的加窗运算映射到两个遍历维度中的多个组成的(constituent)加窗运算。所述多个2-d加窗运算照此在一个或多个硬件加速器中实施。数据处理系统对组成的2-d加窗运算的结果进行汇编,以产生至少三个遍历维度中的加窗运算的结果。
7.根据一个方面,提供了一种在至少三个遍历维度中实施加窗运算的方法。
8.加窗运算至少部分地在硬件中实施,因为2-d加窗运算在至少一个硬件加速器中实施。至少一个硬件加速器可包括被配置为执行2-d加窗运算的电路系统。汇编部分结果的步骤可以在软件中(例如,通过调用通用可编程电路系统)或者在硬件中(例如,由至少一个硬件加速器)实施。
9.汇编部分结果的步骤可包括以下项中的两项或更多项中的至少一项或任何组合:收集部分结果中的一些或全部,组合部分结果中的一些或全部,以及连接(concatenating)部分结果中的一些或全部。连接部分结果可包括将它们连接成单个张量—特别是将它们连接成具有较高维度的单个张量。组合部分结果可包括不增加维度的逐元素组合。例如,可以通过逐元素的求和、最小、最大或均值运算来组合部分结果。收集部分结果可包括在存储器
中收集部分结果,或者收集部分结果并且将其传递以供进一步处理—例如,收集部分结果并且将其直接传递到后续加窗运算。汇编部分结果的方式通常取决于正在实施的加窗运算。特别地,可取决于加窗运算的类型和窗口的大小。
10.数据包括至少三个遍历维度中的多个元素。除了遍历维度之外,还可以存在其他维度,诸如批次和信道。数据也可以被称为数据张量。当加窗运算为卷积时,内核可包括至少三个维度中的多个权重(系数)。内核可包括多个滤波器,其中每个滤波器对数据单独运算。
11.至少三个遍历维度例如可包括两个空间维度,任选地包括三个空间维度。在一个示例中,所述至少三个遍历维度可包括两个空间维度和一个时间维度,或者由两个空间维度和一个时间维度组成。其他示例也是可能的。可以遍历其他维度,包括但不限于一个或多个频率维度,诸如空间频率或时间频率。
12.加窗运算由窗口限定,该窗口可以在三个遍历维度中的每一个维度中具有至少为一或至少为二的大小。数据可以在三个遍历维度中的每一个遍历维度中具有至少为一、至少为二或至少为三的大小。(据此公开了这些大小的所有排列组合。)
13.在此,切片是指在至少一个维度中具有减小的大小的数据(或窗口)的子集,但在其他维度中包含数据(或窗口)的全部范围。例如,3-d数据的2-d切片在一个维度上减小了数据的大小。4-d数据的2-d切片在两个维度上减小了数据的大小。在本发明的方法中,每个切片可以是2-d切片。张量可以被视为具有多个维度的阵列。张量的“切片”也是张量,包含原始张量的对应于一个或多个指定索引的所有元素。例如,如果张量t具有三个维度,那么在具有索引5的第二维度上获取的t的切片u可以通过以下方式给出:对于{1...a}中的所有a和{1...c}中的所有c,u[a,c]=t[a,5,c],其中a是第一维度的大小,并且c是第三维度的大小。在这种情况下,将u称为3-d张量t的2-d切片。一般来讲,可以在一个或多个维度中的任何一个维度上获取切片。
[0014]
通常,切片在减小的维度上完全不延伸。换句话讲,切片在该维度中的大小为1。在这种情况下,2-d切片包含两个维度(这两个维度为在每个2-d加窗运算中由移位遍历的维度)中的数据的全部范围,并且在由加窗运算的移位遍历的其他维度中不延伸。
[0015]
在将多个组成的2-d加窗运算替换为三个或更多个遍历维度中的加窗运算时,多个组成的2-d加窗运算针对窗口在其余维度(即,除2-d加窗运算的两个维度以外的至少三个遍历维度的维度)中的每个移位可以包括两个或更多个2-d加窗运算。汇编部分结果则可包括针对窗口在其余维度中的每个移位,组合两个或更多个2-d加窗运算的部分结果或由此组成。
[0016]
一般来讲,加窗运算相关的数学运算符具有关联性,这意味着结果不取决于如何将数据分组在一起来执行加窗运算,并且具有交换性,这意味着可以改变执行运算的顺序。在卷积或均值池化的情况下,相关的数学运算符为加法;例如,在最大池化或最小池化的情况下,相关的数学运算符为最大运算符或最小运算符。
[0017]
至少一个硬件加速器可以是固定功能硬件加速器。在此上下文中,“固定功能”是指硬件的特性,即,在制造之后硬件所实施的逻辑无法被重新配置(或者至少无法被广泛地重新配置)。这与例如可重新配置的现场可编程逻辑形成对比。至少一个硬件加速器可以包括在专用集成电路(asic)中。固定功能硬件的行为可以是可编程的。
[0018]
至少三个遍历维度中的加窗运算可以由计算图定义,并且映射可以包括重新绘制计算图以将加窗运算展开/铺展为多个组成的2-d加窗运算。
[0019]
在每个2-d加窗运算中,完整的2-d加窗运算可以在被配置为实施2-d加窗运算的硬件加速器上在单个遍次中执行。在此上下文中,“遍次”需要包括供硬件加速器执行的一个或多个运算的工作单元。可以在单个遍次中一起执行的运算取决于硬件加速器的架构。例如,图10中的硬件加速器可以在单个遍次中处理一系列运算,诸如2d卷积、偏置相加和池化。单个遍次可能需要多个硬件指令和多个存储器访问来完成。
[0020]
方法可包括:选择至少三个遍历维度的两个维度;以及将加窗运算映射到所选择的两个维度中的多个组成的2-d加窗运算。
[0021]
这可以包括例如选择窗口移位数量最大的两个维度。这将趋于最小化汇编步骤的负担(因为相比于对维度的其他选择,部分结果和汇编运算的数量将较低),并且最小化所需2-d加窗运算硬件遍次的数量。
[0022]
方法还可以包括:当在至少一个硬件加速器中实施多个2-d加窗运算中的一个运算时,将数据的切片的至少一部分或窗口的切片的至少一部分存储在至少一个硬件加速器的本地存储器中;以及随后在至少一个硬件加速器中实施多个2-d加窗运算中的另一个运算时,重复使用所存储的部分。
[0023]
当加窗运算为卷积运算时,窗口的切片可以是卷积内核的切片。
[0024]
加窗运算可以是卷积运算,其中2-d加窗运算中的每一个运算是2-d卷积运算,并且其中汇编部分结果包括通过对部分结果求和来组合部分结果。汇编单元可被配置为组合部分结果。
[0025]
在一些示例中,加窗运算可以是转置的卷积运算(有时在神经网络文献中称为“反卷积”或步幅卷积(strided convolution))。此类运算可用于例如数据的上采样。在其他示例中,加窗运算可以是分组卷积,其中输入数据张量中的信道组被单独处理。
[0026]
加窗运算可以是最大运算,其中2-d加窗运算中的每一个运算是最大运算,并且其中汇编单元被配置为通过标识部分结果中的最大部分结果来组合部分结果。
[0027]
加窗运算可以是最小运算,其中2-d加窗运算中的每一个运算是最小运算,并且其中汇编单元被配置为通过标识部分结果中的最小部分结果来组合部分结果。
[0028]
加窗运算可以是均值池化运算,其中2-d加窗运算中的每一个运算是均值池化运算,并且其中汇编单元被配置为通过计算部分结果的均值来组合部分结果。
[0029]
加窗运算可包括偏置相加运算,其中变换单元被配置为将偏置相加映射到2-d加窗运算中的所选择的一个运算,其中偏置相加在至少一个硬件加速器中执行,作为所选择的2-d加窗运算的一部分。
[0030]
汇编可至少部分地由硬件加速器的被配置为对张量执行逐元素运算的部件完成。
[0031]
加窗运算可以作为包括多个层的神经网络的一部分来执行,方法包括:在多个层中标识至少三个遍历维度中的加窗运算,至少一个硬件加速器不支持这些加窗运算;将神经网络映射到重构的神经网络;以及由至少一个硬件加速器实施重构的神经网络,其中神经网络中的所标识的加窗运算在重构的神经网络中被产生部分结果的多个2-d加窗运算和组合部分结果的多个逐元素运算替换。
[0032]
在神经网络中,加窗运算可用于对3-d(或更高维度的)数据进行运算的各种有用
任务中的任一个任务中。当输入数据包括视频数据(包括两个空间维度和一个时间维度)时,任务可包括分析或分类任务,诸如空间时间分割、对象识别、手势或动作识别、情绪识别或视频事件分类;或任务,诸如视频压缩。当输入数据包括体积数据(包括三个空间维度)时,任务可包括分析或分类任务,诸如3-d分割或3-d对象识别;或任务,诸如3-d体积数据压缩。如果输入数据包括4-d数据,该数据包括三个空间维度和一个时间维度,则任务可包括分析或分类任务,诸如3-d空间时间分割、3-d对象/动作/手势/情绪识别或3-d事件分类;或4-d数据的数据压缩。加窗运算还可以用于在三个或更多个维度中对数据进行恢复、去噪、增强、帧插补或超级解析度,包括但不限于视频数据、包括三个空间维度和一个时间维度的4-d数据。具有两个空间维度的数据不限于自然图像数据—它可以包括诸如由雷达、激光雷达或声学传感器产生的深度/测距数据。可以通过将时间维度添加到此类数据来形成3-d数据。在上文描述为对视频数据执行的任务中的任何任务都可以在时间上变化的测距图像的3-d数据集上有效地执行。
[0033]
还提供了一种用于在至少三个遍历维度中实施加窗运算的数据处理系统。
[0034]
数据可包括以下各项中的一项或其导数:包括两个空间维度和一个时间维度的视频数据;以及体积数据,包括三个空间维度。
[0035]
数据处理系统可以在集成电路上的硬件中体现。在一些实施方案中,数据处理系统可以是神经网络加速器(nna)的一部分。在其他实施方案中,nna可以形成数据处理系统的一部分。
[0036]
汇编单元可以在至少一个硬件加速器中实施。特别地,至少一个硬件加速器可包括被配置为组合部分结果的逐元素运算模块。汇编单元可被配置为通过将部分结果写入到布置为单个张量的存储器来连接部分结果。
[0037]
替代地,在一些其他示例中,汇编单元可以在通用可编程电路系统中实施。例如,通用可编程电路系统可包括cpu。
[0038]
至少一个硬件加速器可包括以下项中的两项或更多项中的任何一项或任何组合:一个或多个卷积引擎,包括被配置为执行卷积计算的电路系统;池化单元,包括被配置为执行池化运算的电路系统;逐元素运算模块,包括被配置为对两个或更多个张量的元素执行逐元素运算的电路系统;以及激活单元,包括被配置为实施神经网络层的激活函数的电路系统。
[0039]
这些部件中的每一个部件可以包括单独的专用电路系统。在一些实施方案中,至少一个硬件加速器可以例如包括nna或由其组成。至少一个硬件加速器可以是固定功能硬件加速器,如上文所概述。
[0040]
神经网络可包括层,该层包括至少三个遍历维度中的第一此类加窗运算,以及另一个层,所述另一个层包括至少三个遍历维度中的第二此类加窗运算,其中变换单元被配置为将神经网络映射到重构的神经网络,其中第一加窗运算被映射到第一多个组成的2-d加窗运算,并且第二加窗运算被映射到第二多个组成的2-d加窗运算。至少一个硬件加速器可进一步被配置为实施第二多个组成的2-d加窗运算。变换单元可被配置为选择至少两个遍历维度的两个维度,并且将加窗运算映射到所选择的两个维度中的多个组成的2-d加窗运算。
[0041]
第二多个组成的2-d加窗运算中的每一个运算可产生相应的第二部分结果,其中
汇编单元被配置为汇编第二部分结果以产生第二加窗运算的结果。至少一个硬件加速器可包括被配置为适当地组合第二部分结果中的一些或全部的逐元素运算模块。
[0042]
变换单元可被配置为在将神经网络映射到重构的神经网络时标识第一加窗运算和第二加窗运算不受至少一个硬件加速器的支持,并且作为响应,分别将它们映射到第一多个和第二多个组成的2-d加窗运算。变换单元可被配置为映射第一加窗运算和第二加窗运算中的每一个运算,使得所述每一个运算在重构的神经网络中被替换成产生部分结果的多个2-d加窗运算和组合部分结果的多个逐元素运算。
[0043]
数据处理系统还可以包括零填充优化单元,并且数据可以包括零填充数据,其中零填充优化单元被配置为从多个组成的2-d加窗运算中排除将应用于仅由零组成的零填充数据的切片的2-d加窗运算。零填充优化单元可以是变换单元的一部分。
[0044]
数据处理系统还可以包括存储器,其中数据处理系统被配置为当在至少一个硬件加速器中实施多个2-d加窗运算中的一个运算时,将数据的切片的至少一部分或窗口的切片的至少一部分存储在存储器中,并且当随后在至少一个硬件加速器中实施多个2-d加窗运算中的一个运算时,重复使用所存储的部分。
[0045]
因此,该部分在一个2-d加窗运算期间被存储,并且在随后的2-d加窗运算中被重复使用。所存储的部分可以从存储器检索,而不需要从外部存储器检索。这有助于减少存储器对外部存储器的访问带宽。在许多硬件架构中,从外部存储器读取的运算在时间和/或功率消耗方面可能是成本高昂的。因此,在可能的情况下,减少从外部存储器的读取运算的数量是有利的。
[0046]
存储器可以是本地存储器—例如,与硬件加速器、变换单元和汇编单元在相同的半导体管芯上实施。
[0047]
特别地,如果窗口在(除2-d加窗运算的两个维度之外的)至少一个其余维度中的步幅小于窗口在所述其余维度中的大小,则存储(高速缓存)一部分数据可能是有利的。在这种情况下,窗口的不同切片将应用于不同的2-d加窗运算中的相同的数据元素。
[0048]
至少一个硬件加速器可包括多个卷积引擎,每个卷积引擎被配置为执行卷积计算,并且每个卷积引擎包括乘法逻辑的多个元素和加法逻辑的多个元素;以及多个累加器,每个累加器被配置为对由卷积引擎输出的卷积结果执行累加计算,其中卷积引擎和累加器被配置为执行2-d卷积运算。
[0049]
还公开了神经网络加速器,下文中称为nna,nna被配置为执行如上文所概述的方法或本发明的各方面的方法。
[0050]
还公开了一种使用集成电路制造系统来制造如上文所概述的或本发明的各方面的数据处理系统或如上文所概述的nna的方法。
[0051]
还提供了一种使用集成电路制造系统来制造如上文所概述的数据处理系统或nna的方法,该方法包括:使用布局处理系统处理数据处理系统或nna的计算机可读描述,以便生成体现数据处理系统或nna的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造数据处理系统或nna。
[0052]
还提供了一种计算机可读代码,该计算机可读代码被配置为使得在运行该代码时执行如上文所概述的方法或本发明的各方面的方法。还提供了一种计算机可读存储介质,在其上编码有所述计算机可读代码。
[0053]
可以提供一种用于执行本文中描述的任一方法的计算机程序代码。可以提供非暂态计算机可读存储介质,在其上存储有计算机可读指令,所述计算机可读指令在计算机系统处执行时使计算机系统执行本文中描述的任何方法。
[0054]
还提供了一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中处理时,将集成电路制造系统配置为制造如上文所概述的或本发明的各方面的数据处理系统或nna。
[0055]
另外提供了一种非暂态计算机可读存储介质,在其上存储有如上文所概述的或本发明的各方面的数据处理系统或nna的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时使集成电路制造系统制造体现数据处理系统或nna的集成电路。
[0056]
还提供了一种非暂态计算机可读存储介质,在其上存储有如上文所概述的或本发明的各方面的数据处理系统或nna的计算机可读描述,该计算机可读描述在集成电路制造系统中处理时使集成电路制造系统执行以下运算:使用布局处理系统来处理数据处理系统或nna的计算机可读描述,以便生成体现数据处理系统或nna的集成电路的电路布局描述;以及使用集成电路生成系统,根据电路布局描述来制造数据处理系统或nna。
[0057]
还提供了集成电路制造系统,该集成电路制造系统被配置为制造如上文所概述或本发明的各方面的数据处理系统或nna。
[0058]
还提供了一种集成电路制造系统,包括:非暂态计算机可读存储介质,在其上存储有被配置为在至少三个维度中实施加窗运算的数据处理系统或nna的计算机可读描述,该加窗运算包括将具有至少三个维度的窗口应用于具有至少三个维度的数据,其中窗口在所有三个维度中移位;布局处理系统,该布局处理系统被配置为处理计算机可读描述,以便生成体现数据处理系统或nna的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为根据电路布局描述来制造数据处理系统或nna,其中数据处理系统或nna包括:变换单元,被配置为将加窗运算映射到多个组成的2-d加窗运算,每个2-d加窗运算包括将窗口的切片施加到数据的切片,其中窗口的切片在仅两个维度中移位;至少一个硬件加速器,包括被配置为实施多个2-d加窗运算的电路系统,每个2-d加窗运算产生相应的部分结果;以及汇编单元,被配置为汇编部分结果以产生加窗运算的结果
[0059]
布局处理系统可被配置为确定从集成电路描述导出的电路的逻辑部件的位置信息,以便生成体现数据处理系统或nna的集成电路的电路布局描述。
[0060]
如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
[0061]
现在将参考附图详细描述示例,在附图中:
[0062]
图1示出了2-d卷积运算;
[0063]
图2示出了具有多个输出信道的2-d卷积运算;
[0064]
图3a和图3b示出了根据示例的分解为多个2-d卷积的3-d卷积;
[0065]
图4示出了根据另一个示例的用于将3-d卷积实施为多个2-d卷积的计算图;
[0066]
图5a示出了包括偏置相加的计算图;
[0067]
图5b示出了用于实施3-d卷积转置的计算图;
[0068]
图6a是根据第一示例的数据处理系统的简化框图;
[0069]
图6b是根据第二示例的数据处理系统的简化框图;
[0070]
图6c是根据第三示例的数据处理系统的简化框图;
[0071]
图7a是示出实施3-d加窗运算的方法的流程图,该加窗运算可由图6a或图6b的数据处理系统执行;
[0072]
图7b是示出实施神经网络的方法的流程图,该神经网络可以由图6c的数据处理系统执行;
[0073]
图8是根据另一个示例的示出用于实施3-d加窗运算的方法的流程图;
[0074]
图9示出了存储和重复使用内核或数据的一部分的过程;
[0075]
图10是根据示例的用于实施卷积神经网络的硬件加速器的框图;
[0076]
图11示出了图10所示的卷积引擎的示例;
[0077]
图12示出了其中实施数据处理系统的计算机系统;并且
[0078]
图13示出了用于生成体现数据处理系统的集成电路制造系统。
[0079]
附图示出了各种示例。技术人员将理解,附图中所示的元素边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元素可以被设计为多个元素,或者多个元素可以被设计为一个元素。在适当的情况下,贯穿各附图使用共同的附图标号来指示类似的特征。
具体实施方式
[0080]
通过示例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于所属领域的技术人员而言将是显而易见的。
[0081]
如本文所用,“加窗运算”是指根据在一些或所有维度上步进的滑动窗口(简称为“窗口遍历维度”或“遍历维度”),将函数应用于多维输入数据张量中的不同位置的运算。加窗运算生成与输入数据张量相对应的输出数据张量。输入数据张量和输出数据张量可包括除由窗口遍历的维度之外的其他维度(例如,批次维度和/或信道维度)。加窗运算可以由在运算中遍历的维度的数量来指代—例如,“n-d”卷积是具有n个遍历维度的卷积。应当理解,如“遍历”、“步幅”、“滑动”和“移位”等词语不对数据处理顺序施加任何特定限制。例如,可以通过依次执行由窗口的连续递增的移位暗示的计算来执行加窗运算,但这不是必需的。一般来讲,计算可以按任何顺序执行,包括如果相关硬件准许,则彼此并行地执行至少一些计算。现在仅通过示例的方式来描述实施方案。大多数示例将专注于多维卷积的情况。然而,应当理解,本公开的范围不限于作为加窗运算的卷积。
[0082]
2-d卷积是众所周知的并且被广泛实施。它构成了卷积神经网络(cnn)的基础,cnn可用于处理和分析本质上是二维字符的数据。cnn对2-d数据最广泛使用的应用之一是用于图像处理和分析(包括图像理解、对象检测和分割)。
[0083]
图1示出了对高度h和宽度w的包括c
输入
输入信道的输入数据(输入张量)108的2-d卷积运算。在图1所示的示例中,c
输入
=3。例如,这些信道可以表示彩色图像的三个颜色通道。替代地,在神经网络的中间层中,信道可以表示已在前一层上运算的不同滤波器的输出。输入数据108与具有高度kh和宽度kw的内核120进行卷积。在图1中卷积以星号(*)表示。
内核与输入数据具有相同数量的信道c
输入
。2-d卷积运算计算以下加权总和:
[0084][0085]
在此,权重w为内核的系数。数据值由x表示。该计算等于在高度维度和宽度维度这两个维度上使内核跨数据移位(步进),并且针对每个移位,计算内核值的内积,其中数据值在内核所重叠的窗口中。高度维度和宽度维度被称为被内核“遍历”。每个维度中的每个移位的大小被称为步幅。在图1所示的示例中,为了简单起见,假设每个维度的步幅为1。并且为了简单起见,在该示例中没有填充。数据具有h=4和w=4,并且内核具有kh=3和kw=3;因此,输出数据130的大小为2
×
2。
[0086]
在一些示例中,在一个维度或两个维度中可以大于1的步幅执行卷积。例如,在步幅为2的情况下,在每个步骤中内核以两个数据元素(例如,像素)移位。这减少了待执行的内积计算的数量,并且相应地减小了输出的大小。在一些示例中,输入数据可以被填充—例如,用零填充。填充允许内核以位于输入数据的边界处或附近的数据元素为中心,其中内核将延伸超出边界。填充提供了在这些情况下可以由内核的相关元素运算的附加的数据值。与输入张量相比,这可以避免减小输出张量的大小。在没有填充的情况下,内核只能移位,直到内核的边界到达数据张量的边界。在合适的填充和步幅为1的情况下,例如,由内核遍历的两个维度中的输出的大小可以与这些维度中的输入的大小相同。卷积也可以被扩张(也称为“空洞”),意味着除了在内核的每个应用上使用连续输入数据元素之外,样本位置可以分散在较大的输入区域上。在2d卷积中使用填充和除1之外的步幅以及扩张(和其他2d加窗运算)对于本领域的技术人员将是熟知的。因此,在不丧失一般性的情况下,在下面的许多描述中将会忽略它们。应当理解,当使用合适的填充时,所公开的内容也适用于具有任何遍历维度中的任何步幅和任何扩张因素的加窗运算。
[0087]
图2通过将输入数据109与包括两个滤波器122a和122b的内核进行卷积来扩展图1的示例。每个滤波器122a、122b与图1中的内核120具有相同的大小和维度。过滤器的数量确定输出信道c
输出
的数量。如图2所示,c
输出
=2。内核是三维的,如图所示,具有维度[c
输出
、c
输入
、kh、kw]。输入张量109仍是三维的,具有维度[c、h、w]。添加信道维度的卷积计算可以写成:
[0088][0089]
同样,这通过忽略步幅和填充进行了简化,而不丧失一般性。输出数据132的大小为2
×2×
2(即,输出信道的数量、高度和宽度,全部等于2)。同样,高度和宽度被称为“遍历”维度。
[0090]
还可以存在附加的维度,称为批次维度,图2中未示出。在这种情况下,输入张量109是四维的,具有维度[b、c、h、w]。添加批次维度的卷积计算可以写成:
[0091][0092]
需注意,虽然内核和输入张量是四维的,但这仍然是2-d卷积,因为内核仅在高度和宽度方向上移位。
[0093]
卷积的一般概念可以延伸到附加的遍历维度。例如,可以添加标记为“d”(针对“深度”)的新的遍历维度。输入张量接着从4-d张量增加到5-d张量:[b、c、d、h、w],深度维度中的大小为d。类似地,内核增加到5-d内核:[c输出、c输入、kd、kh、kw],深度维度中的大小为kd。在卷积计算中引入额外的求和,现在包括跨三个遍历维度[d、h、w]的移位。该3-d卷积计算可以写成:
[0094][0095]
出于清楚和简洁的目的,在该简化公式中再次忽略了步幅和填充,并且不丧失一般性。在四个维度上的求和是计算密集型计算,其中每个步骤在三个维度中的每一个维度上进行。因此期望将其有效地实施。
[0096]
通常在神经网络中实施的其他加窗运算包括池化运算,诸如最小池化、最大池化和平均(或均值)池化。尽管传统上应用为2-d运算(具有两个遍历维度),但网络还可以包含具有三个遍历维度的池化运算。还期望有效地实施这些3-d运算。例如,可以通过以下等式来描述在4-d输入张量[b、c、h、w]上的2-d最大池化运算:
[0097][0098]
类似于卷积的情况,这可以延伸到5-d输入张量[b、c、d、h、w]上的3-d最大池化运算,通过以下等式描述:
[0099][0100]
而在2-d最大池化运算中,存在两个遍历维度(高度和宽度),在3-d最大池化运算中,存在三个遍历维度(深度、高度和宽度)。可针对遍历三个维度的最小池化运算和均值池化运算写出对应的等式。需注意,在最大池化或最小池化的情况下不存在权重—因此,在经典意义上不存在“内核”。然而,在本发明的上下文中,这些仍然是加窗运算,其含义是:它们将多维窗口应用于输入数据张量,并且针对窗口的该移位,仅考虑落入该窗口的数据值以计算对应的输出值。
[0101]
有时在神经网络中实施的又一加窗运算是转置卷积,也称为卷积转置、反卷积或微步幅卷积(fractionally-strided convolution)。应用于4-d输入张量[b、c、h、w]的2-d卷积转置可以通过以下等式描述:
[0102][0103]
这可以延伸到应用于5-d输入张量[b、c、d、h、w]的3-d卷积转置,通过以下等式描述:
[0104]
[0105]
神经网络存在被称为“神经网络加速器”(nna)的固定功能硬件加速器。在此上下文中,“固定功能”是指硬件的特性,在制造之后硬件所实施的逻辑无法被重新配置。这与例如可重新配置的现场可编程逻辑形成对比。固定功能硬件的行为可以是可编程的。例如,固定功能硬件加速器可以是专用集成电路(asic)。nna通常包括用于快速有效地计算2-d运算的专用、优化的硬件,例如卷积和池化。发明人已经认识到,可以利用专门处理2-d加窗运算(包括例如卷积运算和池化运算)的现有nna硬件来有效地实施3-d加窗运算。多个2-d卷积可以被构造和组合为实现3-d卷积。以下等式示出了3-d卷积运算如何被构造成使得遍历维度中的一个维度(在该示例中为深度维度)包括最外环(即,最外求和)。计算的(方括号内部的)内部部分由多个2-d卷积运算,如上文参考图2所引入的那些运算组成。
[0106][0107]
沿一个维度进行这种重构以产生组成的2-d运算的组合可以不同地被称为对维度进行“展开”、“取消分组”或“取消应用因素(factoring out)”。尽管在上文的示例中对深度维度取消应用因素,但应当理解,该方法可普遍适用:三个遍历维度中的任一个遍历维度可被选择并且对其取消应用因素,从而在计算的内部部分中将其他两个遍历维度保留为多个2-d运算。
[0108]
类似地,发明人已经认识到,还可以通过将计算构造成多个2-d运算并且使用现有的nna硬件来实施这些2-d运算来有效地实施其他3-d加窗运算。这适用于例如如上文所讨论的池化。3-d最大池化运算可以计算为如下所述的多个2-d最大池化运算:
[0109][0110]
在该示例中,取消分组同样沿深度维度进行,但相同的技术可同样地应用于高度维度或宽度维度。应当理解,3-d最小池化(或3-d均值池化)运算可以类似方式再计算为多个2-d最小池化运算(或分别为2-d均值池化运算)的组合。
[0111]
同样地,上述3-d卷积转置运算可被构造成多个2-d卷积转置运算,如下所示(再次沿深度维度取消分组,而不受限制或丧失一般性):
[0112][0113]
如可以从前述等式推断的,当3-d加窗运算映射到多个组成的2-d加窗运算时,2-d加窗运算中的每一个运算产生部分结果。这些部分结果需要被汇编以产生3-d加窗运算的结果。汇编部分结果的适当方式取决于正在实施的运算。在卷积的情况下,相关的运算是加法;因此,通过在取消分组的维度上对部分结果进行求和来组合部分结果。在卷积内核在取消分组的维度中具有大小1的特殊情况下(即,在上文的示例中,当kd=1时),不必求和,并且在2-d加窗运算的输出处仅收集或连接部分结果。例如,这将适用于与1
×1×
1内核的卷
积。在最大池化的情况下,相关的运算是最大运算符;因此,将通过使用最大运算符组合部分结果来对它们进行汇编。同样地,对于最小池化,将通过使用最小运算符组合部分结果来对它们进行汇编。在卷积转置运算中,可以通过求和与任选的连接来汇编部分结果。在某些特殊情况下(取决于步幅),3-d卷积转置的部分结果可以完全通过收集来汇编—任选地,通过将它们适当地堆叠在取消分组的维度中来将它们连接,从而将它们聚集到一个张量中。如先前所述,应当理解,可以对遍历维度中的任何遍历维度而非深度维度取消应用因素。
[0114]
神经网络加速器可以包括用于对张量进行逐元素运算的专用硬件。在此,“逐元素”是指二进制运算使得
[0115][0116]
这包括逐元素求和、最大和乘法。用于逐元素运算的硬件可以用来有效地实施部分结果的组合。例如,可以使用逐元素加法来组合来自多个2-d卷积运算的部分结果。可以使用逐元素最大来组合来自多个2-d最大池化运算的部分结果;并且可以使用逐元素最小来组合来自多个2-d最小池化运算的部分结果。
[0117]
图3a至图3b示出了将图2的2-d卷积扩展成三维并且将3-d卷积运算实施为一组2-d卷积的示例。图3a和图3b示出了在深度维度中延伸的输入张量110。在该示例中,它在该深度维度中具有大小d=3。数据110被示出为三个“切片”1101至1103,每个切片在深度维度中的大小为1。这些切片中的每一个切片等同于在图2的示例中使用的输入数据109。如图2所示,批次维度已被抑制。因此,输入张量为5-d张量,[b、c、d、h、w]。卷积中每个维度的含义取决于应用。在一些示例中,三个遍历维度可以是空间维度[d、h、w]。在其他示例中,一个或多个遍历维度不需要是空间维度。例如,遍历维度可以是时间维度或者时间频率维度或空间频率维度。
[0118]
同样地,内核是5-d数据结构[c
输出
、c
输入
、kd、kh、kw],其中在该示例中kd=2。假设内核的步幅在三个维度中的每一个维度中为1。内核被描绘为两个“切片”1221至1222,各自在深度维度中具有大小1。每个切片等同于图2中的内核122。图3a示出了处于第一位置(第一移位)的内核,其中内核的第一切片1221与输入张量的第一切片1101对准,并且内核的第二切片1222与输入张量的第二切片1102对准。当以这种方式呈现时,可以看到,针对第一移位,3-d卷积的计算由两个2-d卷积和随后的逐元素求和组成。输入张量的第一切片1101与内核的第一切片1221进行卷积以产生第一部分结果1321。输入张量的第二切片1102与内核的第二切片1222进行卷积以产生第二部分结果1322。(这些部分结果中的每一个部分结果等同于图2中的2-d卷积的结果132。)为了产生内核在深度维度中的该移位的3-d卷积的输出1521,通过求和块1401对两个部分结果进行求和。
[0119]
图3b示出了根据d维度中卷积的步幅的处于第二位置(第二移位)的内核,其中内核的第一切片1221与输入张量的第二切片1102对准,并且内核的第二切片1222与输入张量的第三切片1103对准。同样,可以看到,针对第二移位的3-d卷积的计算由两个2-d卷积和随后的逐元素求和组成。输入张量的第二切片1102与内核的第一切片1221进行卷积以产生第三部分结果1323。输入张量的第三切片1103与内核的第二切片1222进行卷积以产生第四部分结果1324。为了产生针对深度维度中内核的该移位的3-d卷积的输出1522,通过求和块1402对两个部分结果1323和1324进行求和。因此,可以通过执行四个2-d卷积和随后的由2-d卷积产生的部分结果的两个逐元素求和来生成3-d卷积(具有维度2
×2×2×
2)的完整输出
152。
[0120]
3-d卷积关于多个2-d卷积的重构也可以用计算图的形式表示。神经网络可以被设想成计算图;这种表示的优点是,神经网络中的3-d卷积可以用等效的计算子图替换,使得在支持2-d卷积和逐元素求和的nna上的部署变得简单明了。图4中示出了其示例。在此,原始输入张量510在深度维度中的大小为d=5。输入张量510被示出为五个组成的切片5101至5105,每个切片在深度维度中的大小为1。希望将所述每个切片与深度维度中的大小为kd=3的内核进行卷积。在该示例中,深度维度中的步幅等于2。基于这些参数,输出550在深度维度中的大小将为2。输出550由两个切片5501至5502组成。可以通过执行三个2-d卷积5601至5603来产生第一切片5501,其中输入张量的前三个切片5101至5103分别与内核的三个切片进行卷积。这些2-d卷积的输出在求和块5401处逐元素求和,以产生输出张量的第一切片5501。
[0121]
同样地,可以通过执行三个2-d卷积5604至5606来产生第二切片5502,其中输入张量的最后三个切片5103至5105分别与内核的三个切片进行卷积。这些2-d卷积的输出在求和块5402处逐元素求和,以产生输出张量的第二切片5502。需注意,2-d卷积5601中的权重与2-d卷积5604中的权重相同。在这两种情况下,这些是来自内核的第一切片的权重。同样地,2-d卷积5602中的权重与2-d卷积5605(内核的第二切片)中的权重相同;并且2-d卷积5603中的权重与2-d卷积5606(内核的第三切片)中的权重相同。应当理解,以这种方式,已经在计算图的拓扑中重现对原始3-d卷积的深度维度的处理。
[0122]
图5a示出了另一个示例,其中图4的示例被延伸为包括偏置相加。偏置相加是在cnn中常用的特征,并且期望能够在3-d卷积的上下文中有效地实施偏置相加。支持有效2-d卷积的nna通常支持作为2-d卷积的一部分的偏置相加。本发明的发明人已经认识到3-d卷积中的偏置相加可以包括在产生3-d卷积的部分结果的2-d卷积中的一者中。这可以通过将偏置相加并入nna上的2-d卷积函数的单个遍次中来使该偏置相加能够有效地实施。偏置相加可以并入开始产生3-d卷积的单个输出切片的任何一个2-d卷积中。这可以在图5a的计算图中看到。偏置相加5701包括在卷积5601的输出处,并且偏置相加5702同样并入卷积5604的输出处。在这两种情况下,卷积权重和偏差相同。
[0123]
对于其他3-d加窗运算,诸如池化运算,可以绘制与图3a至图4的图相当的示意图。例如,如果3-d卷积被3-d最大池化运算替换,则图3a至图4的2-d卷积将被2-d最大池化运算替换,并且图3a至图4的逐元素加法运算将被逐元素最大运算替换。
[0124]
图5b示出了计算曲线图的另一个示例,这一次用于3-d卷积转置。如上文所解释的,3-d卷积转置被构造成多个2-d卷积转置运算。原始输入张量511在深度维度中的大小为d=3。该原始输入张量被示出为三个组成的切片5111至5113,每个切片在深度维度中的大小为1。内核在深度维度中的大小为kd=3。在该示例中,深度维度中的步幅为2。基于这些参数,输出551在深度维度中的大小将为7。输出551由七个切片5511至5517组成。可以通过分别对输入张量的第一切片5111执行2-d反卷积5611至5612来产生第一切片5511和第二切片5512。通过分别对输入张量的第一切片和第二切片5111至5112执行两个2-d反卷积5613至5614并且在求和块5411处对结果逐元素求和来产生第三切片5513。通过对输入张量的第二切片5112执行2-d反卷积5615来产生第四切片5514。通过分别对输入张量的第二切片和第三切片5112至5113执行两个2-d反卷积5616至5617并且在求和框5412处对结果逐元素求和来产
生第五切片5515。可以通过对输入张量的第三切片5113分别执行2-d反卷积5618至5619来产生第六切片5516和第七切片5517。应当理解,相同的权重用于反卷积5611、5614和5617(所有这些都使用内核的第一切片);反卷积5612、5615和5618(所有这些都使用内核的第二切片);以及反卷积5613、5616和5619(所有这些都使用内核的第三切片)。
[0125]
图6a至图6c示出了根据示例的数据处理系统的三个变体。图7a至图7b示出了可由数据处理系统实施的相关联的方法的流程图。
[0126]
图6a是根据第一示例的数据处理系统600的框图。图7a示出了根据该示例的由数据处理系统600执行的方法的流程图。数据处理系统包括变换单元610;硬件加速器620;汇编单元630;以及存储器,本地存储器640。数据处理系统还可以包括任选的零填充优化单元650(以虚线轮廓示出),该任选的零填充优化单元可以包括在变换单元610中。变换单元610接收将由数据处理系统600执行的3-d加窗运算的定义以及数据张量的定义。数据张量的定义至少包括每个维度中数据的大小。在该示例中,3-d加窗运算为3-d卷积。在步骤710中,变换单元610从加窗运算的三个遍历维度中选择两个维度。变换单元将在这两个所选择的维度中将3-d卷积映射到一组2-d卷积,如上文参考图4以及图5a和图5b所述。来自2-d卷积的部分结果将沿步骤710中未选择的其余的第三维度来汇编(特别是组合)。在本发明的示例中,变换单元610选择最大的两个维度;因此,3-d卷积将沿最小的维度展开为2-d卷积,并且部分结果的组合也将沿最小的维度展开。以此方式,变换单元610将3-d卷积布置为相对较少数量的相对较大的2-d卷积。(然而,在其他示例中,可以根据不同的规则选择维度。)
[0127]
在步骤720中,变换单元610执行映射。该映射的结果限定输入数据的一组切片和内核的一组切片。这些切片在所选择的维度中延伸,并且在未选择的第三维度中不延伸,即,未选择的第三维度中的每个切片的大小为1。以上文参考图3a至图5b所述的方式,将3-d卷积分解成数据切片和内核切片之间的一组2-d卷积。
[0128]
在该示例中,数据不是用零填充的,并且不使用零填充优化单元。输入数据的切片存储在数据处理系统的本地存储器640中,同时执行相应的2-d卷积。同样地,当执行2-d卷积运算时,表示内核的切片的系数(权重)存储在本地存储器640中。
[0129]
在步骤730中,硬件加速器620的电路系统执行一组2-d卷积运算。即,如上文参考图3a至图5b所解释的,硬件加速器620将输入张量的适当切片与内核的适当切片进行卷积。根据本地存储器的大小,或许不可能在存储器640中同时拟合整个输入张量和内核。因此,数据可以根据需要加载(存储)到本地存储器,以用于当前在任何给定时间实施的2-d卷积。
[0130]
来自每个2-d卷积的输出为部分结果。这些部分结果由硬件加速器620提供给汇编单元630。在步骤740中,汇编单元630汇编(特别是组合)来自各个2-d卷积的部分结果,以产生3-d卷积的最终结果。由于在该示例中3-d加窗运算为3-d卷积,因此汇编单元通过对部分结果求和来组合部分结果。求和的结果是输出的切片(例如,如上文参考图4和图5a所述)。收集这些切片以提供3-d卷积的输出。在一些情况下,收集的切片可以彼此分开地传递到神经网络的下一层。可选地,在一些情况下,可以通过沿展开的维度堆叠切片而将切片连接成单个输出张量。这可以通过将切片写入本地存储器640或外部存储器中的适当的位置来完成—例如,以占据存储器的单个连续块。
[0131]
存在不需要求和的特殊情况,并且仅收集和任选地连接来自2-d卷积的部分结果。这在内核在取消分组的维度中具有大小1时发生。例如,当实施具有1
×1×
1内核的3-d卷积
时,就会出现这种情况。汇编单元630被配置为根据3-d加窗运算的类型和窗口大小,以任何适当的方式汇编部分结果。
[0132]
在图6a的示例中,汇编单元630与硬件加速器620分开示出。在一些实施方式中,情况可能确实如此。例如,汇编单元可以在通用可编程电路系统诸如cpu中实施。cpu可被编程为对2-d卷积的部分结果执行必要的汇编运算。因此,在图6a的示例中,变换单元610指示硬件加速器620执行多个2-d卷积运算,并且指示汇编单元630根据需要对所产生的部分结果进行求和、收集以及任选地连接,以产生原始3-d卷积的结果。
[0133]
在一些情况下,将“汇编单元”的功能集成为硬件加速器的一体式部分可能是有利的。这在图6b中示出,该图是根据第二示例的数据处理系统600’的框图。数据处理系统600’不同于数据处理系统600,因为汇编单元620’是硬件加速器630’的一部分。如果硬件加速器630’在神经网络加速器中实施,则汇编单元的至少一些功能可以由专门用于逐元素运算的专用电路系统来执行。在本发明的示例中,其中3-d加窗运算为卷积,逐元素运算为加法。在数据处理系统600’中,变换单元610’为硬件加速器620’提供一组完整的硬件可实施运算,以实施3-d加窗运算。换句话讲,变换单元610’指示硬件加速器620’执行多个2-d加窗运算,并且指示如何汇编这些2-d运算的结果(包括在3-d卷积的示例中的适当的逐元素求和)。作为3-d卷积的结果,收集和输出逐元素求和的结果。除了这些修改之外,由数据处理系统600’实施的方法与图7a中所示的方法基本上相同。
[0134]
一个或多个3-d加窗运算可以作为包括多个层的神经网络的一部分来执行。在这种情况下,变换单元处理整个神经网络而不是试图将单独的3-d加窗运算分别映射到相应的多个2-d运算可能是有利的。这在图6c中示出,该图示出了根据第三示例的数据处理系统600”的框图。根据该示例执行的方法在图7b的流程图中示出。系统600”类似于图6b的系统600’,因为汇编单元630”是硬件加速器620”的一部分。与图6b的系统600’的不同之处在于,变换单元610”接收完整的神经网络的定义作为输入,该神经网络可以包括一个或多个3-d加窗运算。神经网络的定义还包括在网络中的每一层处处理的数据张量的定义。在步骤705中,变换单元610”标识不被硬件加速器620”支持的神经网络中的任何3-d加窗运算。步骤710”是图7a中的步骤710的扩展—对于所标识的3-d加窗运算中的每一个运算,变换单元610”选择在3-d运算映射到2-d运算时将遍历的两个维度。然后,在步骤720”中,变换单元610”将整个神经网络映射到重构的神经网络。这包括将所标识的3-d加窗运算中的每一个运算映射到相应的多个2-d加窗运算,以及定义如何汇编这些2-d加窗运算的部分结果。2-d加窗运算和汇编运算适合由硬件加速器620”实施(即,支持);因此,重构的神经网络被称为“硬件可实施”。原始神经网络的不包括不被支持的3-d加窗运算的层可以在重构的神经网络中保存为保持不变。在步骤735中,硬件加速器620”实施重构的神经网络。这包括对于所标识的3-d加窗运算中的每一个运算,实施相应的多个组成的2-d加窗运算,并且汇编这些2-d加窗运算的结果。使用汇编单元630”完成汇编,在硬件加速器620”内再次实施汇编。
[0135]
在该示例中,还可以执行零填充优化。一般来讲,可能需要在神经网络内的若干层处执行零填充;因此,不仅将对输入数据张量,而且还对表示中间层的输出的张量执行零填充。这可以由在变换单元610”的控制下起作用的硬件加速器620”来完成。
[0136]
图8示出了扩展由数据处理系统600和600’执行的图7a的方法的流程图。应当理解,由数据处理系统600”执行的图7b的方法可以类似地延伸。根据图8的方法,将包括任选
的偏置相加。偏置相加通常结合卷积进行。还可以在图8的方法中执行任选的零填充优化。与任选的零填充优化相关联的步骤在图8中的虚线轮廓中示出。
[0137]
通常进行神经网络中的张量的零填充,使得层的输出与该层的输入具有相同的维度(取决于步幅)。该原理同样适用于较高维度的加窗运算,诸如本发明的示例的3-d卷积运算。在图8的示例中,假设数据在存储在本地存储器640中之前用零填充。这包括在遍历维度中的每一个遍历维度中的数据的边缘处的零填充。当数据随后以切片为结构时,这将意味着存在完全由零组成的切片。与零阵列的任何卷积将产生零作为结果,因为卷积涉及将输入乘以权重(系数)。这些零对最终结果没有影响,因为部分结果通过相加(并且将零添加到任何内容都不会有影响)来组合。基于这种认识,在本发明的实施方案中,将省略这些不必要的卷积运算。
[0138]
步骤710与图7a中的对应的步骤相同。在步骤720a中,变换单元610将3-d卷积运算映射到一组2-d卷积运算(在所选择的两个维度中),这一次包括如上文参考图5a所述的偏置相加运算。在步骤722中,零填充优化单元650标识由于零填充而将完全对零运算的2-d卷积。在步骤724中,零填充优化单元650从将由硬件加速器执行的运算中排除所标识的、不必要的2-d卷积。换句话讲,当在步骤730a中由硬件加速器620实施2-d运算时,不执行这些运算。省略不必要的运算可以节约计算时间、存储器、带宽和电力。
[0139]
由于完全由零填充组成的切片实际上并未用于2-d加窗运算,因此可能不必将它们存储在本地存储器640中。这可以通过省略冗余数据以及已排除的冗余运算来更有效地使用存储器容量。
[0140]
在图8的示例中,假设当数据存储在本地存储器640中时,该数据已经用零填充。然后,这不是必需的。在其他示例中,数据可以存储在本地存储器640中而不填充,并且可以由硬件加速器620在正在实施多个2-d加窗运算时即时添加零填充(步骤730/730a)。在这种情况下,硬件加速器620也不需要示例化完全由零填充组成的数据的切片。换句话讲,硬件加速器620可以仅在步骤710中选择的两个维度中而不在未选择的维度中添加零填充。
[0141]
图9更详细地示出了步骤730。特别地,图9中所示的过程可用于当硬件加速器620正在执行2-d卷积运算时提高存储器带宽使用的效率。这可以应用于如图7a所示的步骤730和如图8所示的步骤730,以及图7b中的步骤735。增强的依据是,认识到当实施该组2-d卷积时数据和内核权重在一定程度上被重复使用。这在图4和图5a中可以最容易地看到。如前所述,在这些示例中,内核的每个切片用于两个单独的2-d卷积。2-d卷积5601中的权重与2-d卷积5604中的权重相同。在这两种情况下,这些是来自内核的第一切片的权重。同样地,2-d卷积5602中的权重与2-d卷积5605(内核的第二切片)中的权重相同;并且2-d卷积5603中的权重与2-d卷积5606(内核的第三切片)中的权重相同。还可以看到,输入张量的第三切片5103在2-d卷积5603和5604中使用两次。
[0142]
在原始的实施方式中,这种重复使用模式将被忽略—数据的相关切片和内核将从外部存储器加载,并且每次需要它们来进行2-d卷积时存储在本地存储器640中。然而,根据本发明的示例,数据或权重或两者可以在本地存储器640中存储一次,并且针对两个不同的2-d卷积至少使用两次。实际上,这允许数据和/或权重在多个2-d卷积中的不同卷积的高速缓存。这反映在数据处理系统在硬件加速器620中实施2-d卷积时执行的步骤732和步骤734中。在步骤732中,系统将内核的切片(至少一部分)或数据的切片(至少一部分)存储在本地
存储器640中,以供以后在后续的2-d卷积运算中重复使用。在步骤734中,硬件加速器620在随后的2-d卷积运算中重复使用所存储的切片。因此,例如,用于卷积5601的权重(即,内核的第一切片)可以存储在本地存储器中,并且保持在本地存储器中,直到硬件加速器620重复使用权重来执行卷积5604。替代地或另外,输入张量5103的第三切片的至少一部分可以存储在本地存储器640中,并且可以在卷积5603完成之后保持在本地存储器中。当执行卷积5604时,输入张量的该(至少部分)切片接着可重复使用,而不需要从外部存储器进一步读取。所存储和重复使用的数据量可取决于本地存储器640的容量。
[0143]
变换单元610可被配置为对该组2-d卷积运算进行排序,以便增加存储在本地存储器640中的数据和系数的重复使用。例如,变换单元610可以指示硬件加速器620在卷积5602之后立即执行卷积5605,因为这样将允许在这些连续卷积之间重复使用所存储的权重。
[0144]
以上示例已专注于作为加窗运算的3-d卷积运算。然而,本公开不限于3-d加窗运算或卷积运算。相关的数学运算具有关联和交换属性的任何加窗运算可以被分解/展开为多个等效的2-d加窗运算,方式与上文所讨论的3-d卷积类似。应当理解,应该根据正在实施的加窗运算来选择汇编部分结果的步骤。汇编可包括组合部分结果(如在步骤740中)和/或收集或连接部分结果。当实施卷积运算时,组合740基于逐元素求和。对于3-d最大池化运算,组合将基于逐元素最大运算符(即,返回部分结果中的最大部分结果)。类似地,对于3-d最小池化运算,组合将基于逐元素最小运算符。可基于已经提及的那些运算来执行其他加窗运算。例如,均值池化运算可以通过卷积运算来实施。
[0145]
在上文所描述的示例中,待执行的原始加窗运算为3-d加窗运算,并且这在一个维度上展开为多个2-d加窗运算。相同的策略可以应用于较高维度的加窗运算。例如,4-d加窗运算可以在二维上展开为多个2-d加窗运算。这样,任何数量的维度中的较高维度的加窗运算可以被简化为一组2-d加窗运算,这有可能使用硬件加速器来有效地实施2-d加窗运算。
[0146]
因此,数据处理系统600、600’、600”可以用于有效地实施3-d(和更大维度的)运算以及传统的2-d运算。此外,被优化用于2-d加窗运算的系统可以这样使用,无需修改或进行最小修改,以有效地实施3-d和较高维度的加窗运算。应当理解,在前述描述中列出维度(例如,4-d张量表示为“[b、c、h、w]”)的情况下,维度的排序通常不具有特殊意义。在不同的实施方式中,维度在张量中可以不同方式排序。
[0147]
现在将描述适合于有效实施2-d加窗运算(特别是2-d卷积运算)的硬件加速器。
[0148]
图10示出了被配置为实施cnn的硬件加速器200。硬件加速器包括数字逻辑电路系统,该数字逻辑电路系统被配置为接收数据(包括权重和输入张量)以及用于处理数据的命令。硬件加速器200包括存储器接口210、输入缓冲器控制器215、命令解码器220、系数缓冲器控制器225、系数缓冲器230,n输入缓冲器235,n卷积引擎240,n累加器245、激活模块255、归一化模块265、共享缓冲器270、池化模块275和逐元素运算模块285。根据示例,硬件加速器200可用于实施2-d运算并且汇编其部分结果。特别地,适合在图6b或图6c中提供硬件加速器620’或620”。在这种情况下,图6b和图6c的“本地存储器”640由图10中的系数缓冲器230、输入缓冲器235、累积缓冲器250和共享缓冲器270共同提供。
[0149]
存储器接口210被配置为提供硬件加速器200与外部存储器(未示出)之间的接口。外部存储器可被视为与硬件加速器200分开的模块。命令或配置数据可例如包括关于权重和数据大小和格式以及它们在外部存储器中的位置的信息。
[0150]
存储器接口210被配置为从外部存储器接收待在cnn内的计算中使用的权重和数据以及用于控制硬件加速器200的运算的命令信息。所接收的权重(在本文中也称为系数)被传递到系数缓冲器控制器225,并且所接收的数据被传递到输入缓冲器控制器215。所接收的命令被传递到命令解码器220,该命令解码器继而被配置为对命令进行解码并且随后将控制信息发布到硬件加速器的元件,包括系数控制缓冲器控制器225和输入缓冲器控制器215,以控制权重和输入数据存储在缓冲器中的方式。
[0151]
在读取外部存储器期间经由存储器接口210从外部存储器接收的权重和输入数据可形成单个层的仅一部分的权重和输入数据,所有权重和输入数据待用于处理单个层,或者可包括用于处理多个层的权重和输入数据。例如,从外部存储器接收的权重可以形成单个层的权重,并且所接收的输入数据可以仅形成单个层的输入数据的一部分(或反之亦然)。可以在从存储器的单次读取(例如,使用突发读取)中从外部存储器接收跨一个或多个层的数据和权重的任何组合。
[0152]
在实践中,在从外部存储器的单次读取中接收的权重和数据的数量将取决于系数缓冲器230和输入缓冲器235的大小。权重从系数缓冲器控制器225传递到系数缓冲器230,并且所接收的数据从输入缓冲器控制器215传递到多个输入缓冲器235a至235n。输入缓冲器的数量将取决于加速器200的具体实施方式,但可以取任何值。输入数据跨所有输入缓冲器235a至235n共享。输入缓冲器各自形成有效的存储库(bank),使得输入缓冲器的数量可以根据应用而增加或减少。
[0153]
输入缓冲器235a至235n连接到多个多路复用器中的每一个多路复用器,因为每个卷积引擎240a至240n需要访问输入数据的所有有效的“存储库”。多路复用器各自被配置为从输入缓冲器中的一个输入缓冲器选择输出,并且将从所选择的输入缓冲器输出的值传递到相应的卷积引擎240a至240n。另外,来自系数缓冲器230的权重作为第二输入提供到每个卷积引擎240a至240n中。卷积引擎被配置为使用从系数缓冲器230接收的权重对所接收的输入数据执行卷积计算。每个卷积引擎240a至240n的所得输出作为输入提供给多个累加器245a至245n的相应累加器。图11中示出了卷积引擎240n的示例性实施方式,其包括乘法逻辑310的多个元素和加法逻辑320的多个元素。
[0154]
每个累加器245a至245n连接到累积缓冲器250。累积缓冲器250被配置为存储从每个累加器245a至245n接收的累积结果。累积缓冲器250连接到存储器接口210。因而,累积缓冲器250被配置为经由存储器接口210将数据发送到外部存储器以及从外部存储器接收数据。具体地,累积缓冲器250被配置为能够经由存储器接口210存储和恢复其值,如下文将更详细描述的。累积缓冲器250连接到累加器245a至245n的输入,并且被配置为将值馈送回累加器245a至245n中,以使得能够进行累加计算。
[0155]
累积缓冲器250被配置为将累积值传递到激活模块255。激活模块255被配置为执行多个不同激活函数中的至少一个激活函数。在一些实施方式中,激活模块255可被配置为作为整流线性单元(relu)来操作。
[0156]
由激活模块255计算出的所得值被传递以由归一化模块265经由共享缓冲器270处理。归一化模块265被配置为执行许多不同归一化函数中的一个归一化函数。局部响应归一化层函数可以在输入数据的相同平面内执行。还可以跨平面执行局部响应归一化层函数。
[0157]
归一化模块265可被配置为实施上述归一化函数中的一个或多个归一化函数。具
体地,归一化模块265可以是可配置的,使得其能够执行上述三个函数中的任一个函数和任何其他合适的函数。以此方式,归一化模块265可以接收信令以指示归一化模块要执行的函数。这可以使用许多预定义函数中的一个函数来执行,使得由归一化函数接收的控制信令指示归一化模块265应该执行哪些预定义函数。
[0158]
存储在共享缓冲器270中的结果被传递到存储器接口210,该存储器接口可将结果存储在外部存储器中或者将结果传递回输入缓冲器以供进一步处理,而不必首先传递到外部存储器。
[0159]
共享缓冲液270被配置为用于两个目的,即缓冲来自激活模块255的值,直到正确的样本可用于执行归一化以及/或者缓冲来自归一化单元的值,正确的样本可用于执行池化。以此方式,共享缓冲器用于实现存储效率,因为在许多实施方式中,归一化和池化不在同一过程中组合。
[0160]
逐元素运算模块285包括被配置为对从累积缓冲器250和/或激活模块255接收的张量执行逐元素运算的电路系统。支持的逐元素运算包括张量的相应元素的逐元素加法、乘法和最大值(或最小值)。
[0161]
虽然图10的硬件加速器示出了布置模块的特定顺序以及硬件实施方式中的数据处理方式,但应当理解,所需特定计算和跨层处理数据的顺序可以变化。
[0162]
在一些层中,可以执行由激活255、归一化265、池化275和逐元素285模块执行的函数。在其他层中,可以仅执行这些函数中的一个函数,并且不一定按照硬件加速器200中列出的顺序执行。为了实现处理这些函数的可配置顺序,激活255、归一化265、池化275和逐元素285模块中的每一者可被配置为接收将模块配置为旁路模式的控制信令,在旁路模式中不执行函数并且输入值仅经过模块而不发生变化。
[0163]
在一些层中,特定层的数据可能需要首先由卷积引擎240a-n处理,然后根据激活、归一化、池化和逐元素模块255、265、275、285处理。在这些层中,来自卷积引擎240a-n的输出经由累加器245a-n传递到累积缓冲器250,并且接着传递到激活、归一化、池化和逐元素模块255、265、275、285以供进一步处理。在其他层中,可能需要以不同方式处理数据。例如,数据可能需要首先根据激活、归一化、池化和逐元素模块255、265、275、285进行处理,并且其次根据卷积引擎240a-n进行处理。
[0164]
在这些布置中,数据可以经由累积缓冲器250直接传递到激活模块,其中累积缓冲器250已经直接从存储器接口210接收输入数据,该存储器接口已经从外部存储器接收数据。以此方式,有效跳过由卷积引擎240a-n和累加器245a-n执行的处理,并且数据可直接传递到激活255、归一化265、池化275和逐元素285模块。然后,一旦使用激活、归一化、池化和逐元素模块255、265、275、285的处理完成,所得值就可以经由存储器接口210被传递到输入缓冲器控制器215中。在一些布置中,所得值可首先经由存储器接口210传递到外部存储器,并且接着在使用之前从外部存储器检索。
[0165]
在其他布置中,存储器接口210可以将所得值传递到输入缓冲器控制器215,而不将值传递到外部存储器。通过避免需要将使用激活、归一化、池化和逐元素模块255、265、275、285的计算所得的值传递到外部存储器,减小存储器带宽,并且因此也减少处理数据的延迟。
[0166]
通过提供上述特征,硬件加速器200有可能通过提供执行存储器到存储器计算的
能力来处理cnn的各种不同配置。这些存储器到存储器计算不需要与特定层直接相关。换句话说,硬件实施方式200适于待实施的特定cnn。有利地,由于激活、归一化、池化和逐元素模块255、265、275、285线性放置,因此有可能背靠背地执行这些函数,而不必从外部存储器检索数据。
[0167]
在一些实施方案中,激活、归一化、池化和逐元素模块255、265、275、285的连接顺序可以变化。例如,激活、归一化和池化模块255、265、275可以反向连接,使得池化模块连接到累积缓冲器250,并且激活模块连接到存储器接口210。
[0168]
如上文所解释的,可以在多个遍次上采用硬件加速器200以有效地实施多个组成的2-d加窗运算,从而组成较大数量维度中的加窗运算。硬件加速器200还可用于汇编(例如,组合)组成的2-d加窗运算的部分结果。在此上下文中,卷积引擎240和累加器245可用于实施2-d卷积;池化模块275可用于实施2-d最大池化、最小池化或均值池化。逐元素运算模块285可用于组合来自这些2-d运算的部分结果。
[0169]
例如,如果原始3-d运算是均值池化运算,那么这可以由变换单元610’或610”映射到由池化模块275执行的多个组成的2-d均值池化运算。通过计算通过这些2-d均值池化运算产生的部分结果的均值来将它们进行组合。这可以由逐元素运算模块285完成,其中进行逐元素相加和逐元素乘以标量,以实施均值。
[0170]
图12示出了计算机系统,其中可以实施本文所述的数据处理系统。计算机系统包括cpu 902、nna 904、存储器906和其他装置914,诸如显示器916、扬声器918,以及相机919。在nna 904上实施处理块910(对应于数据处理系统600、600’、600”)。在其他示例中,处理块910可以在cpu 902上实施。计算机系统的部件可经由通信总线920彼此通信。存储器906可以提供先前提及的“外部存储器”。
[0171]
图6a至图6c的数据处理系统600、600’、600”被示出为包括许多功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,由数据处理系统形成的本文中描述的中间值不需要由数据处理系统在任何时间点物理地生成,并且可以仅仅表示方便地描述由数据处理系统在其输入与输出之间执行的处理的逻辑值。
[0172]
本文中描述的数据处理系统可以在集成电路上的硬件中体现。本文中描述的数据处理系统可被配置为执行本文所述的任何方法。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实施。本文可以使用术语“模块”、“功能”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能、部件、元件、单元、块或逻辑表示程序代码,该程序代码在处理器上执行时执行指定任务。本文中描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
[0173]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(例如,硬件描述语言或网表),以
及以诸如c、或等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由该代码指定的任务。
[0174]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或它们的集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如cpu、gpu、nna、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0175]
本发明还意图涵盖限定如本文中描述的硬件的配置的软件,诸如hdl(硬件描述语言)软件,用于设计集成电路或用于配置可编程芯片以执行所需功能。也就是说,可以提供一种在其上编码有形式为集成电路定义数据集的计算机可读程序代码的计算机可读存储介质,当在集成电路制造系统中被处理(即,运行)时,该计算机可读程序代码将该系统配置为制造被配置为执行本文所述的任何方法的数据处理系统或nna,或者制造包括本文所述的任何设备的数据处理系统或nna。集成电路定义数据集可以是例如集成电路描述。
[0176]
因此,可以提供一种在集成电路制造系统处制造如本文中描述的数据处理系统或nna的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集在集成电路制造系统中处理时,使制造数据处理系统或nna的方法被执行。
[0177]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由该表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0178]
现在将参照图13描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置为根据示例制造数据处理系统的示例。
[0179]
图13示出了集成电路(ic)制造系统1002的示例,该集成电路制造系统被配置为制造如本文任何示例中描述的数据处理系统。特别地,ic制造系统1002包括布局处理系统1004和集成电路生成系统1006。ic制造系统1002被配置为接收ic定义数据集(例如,定义如本文任何示例中描述的数据处理系统)、处理ic定义数据集以及根据ic定义数据集来生成ic(例如,其体现如本文任何示例中所述的数据处理系统)。通过对ic定义数据集的处理,将ic制造系统1002配置为制造体现如本文任何示例中描述的数据处理系统的集成电路。
[0180]
布局处理系统1004被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,nand、nor、and、or、mux和flip-flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可
以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已经确定电路布局时,其可将电路布局定义输出到ic生成系统1006。电路布局定义可以是例如电路布局描述。
[0181]
如本领域中已知的,ic生成系统1006根据电路布局定义来生成ic。例如,ic生成系统1006可实施生成ic的半导体装置制造工艺,该半导体装置制造工艺可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,掩模可在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1006的电路布局定义可呈计算机可读代码的形式,ic生成系统1006可使用该计算机可读代码来形成用于生成ic的合适的掩模。
[0182]
由ic制造系统1002执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示ic定义数据集的rtl代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
[0183]
在一些实施方案中,集成电路制造定义数据集在集成电路制造系统中处理时,可以使集成电路制造系统生成如本文中描述的装置。例如,由集成电路制造定义数据集以上文参照图13所描述的方式对集成电路制造系统进行的配置可以制造如本文中描述的装置。
[0184]
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13所示的示例中,ic生成系统可以由集成电路定义数据集进一步配置为在制造集成电路时根据在集成电路定义数据集处限定的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
[0185]
与已知的实施方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实施的方法中)的实施方式可以引起性能改进。性能改进可以包括计算性能提高、延迟减少、处理量增大和/或功率消耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实施方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0186]
申请人据此独立地公开了本文中描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可以在本发明的范围内进行各种修改。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1