CN118014031A - 针对多个输入数据集的处理 - Google Patents
针对多个输入数据集的处理 Download PDFInfo
- Publication number
- CN118014031A CN118014031A CN202410319743.9A CN202410319743A CN118014031A CN 118014031 A CN118014031 A CN 118014031A CN 202410319743 A CN202410319743 A CN 202410319743A CN 118014031 A CN118014031 A CN 118014031A
- Authority
- CN
- China
- Prior art keywords
- data set
- output
- layer
- data
- computing task
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000012545 processing Methods 0.000 title claims abstract description 161
- 238000013528 artificial neural network Methods 0.000 claims abstract description 233
- 238000000034 method Methods 0.000 claims abstract description 128
- 230000008569 process Effects 0.000 claims abstract description 47
- 239000000872 buffer Substances 0.000 claims description 117
- 238000003062 neural network model Methods 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 4
- 239000010410 layer Substances 0.000 description 376
- 238000004364 calculation method Methods 0.000 description 44
- 238000007792 addition Methods 0.000 description 12
- 238000003491 array Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000004891 communication Methods 0.000 description 8
- 230000004913 activation Effects 0.000 description 7
- 239000013598 vector Substances 0.000 description 7
- 238000013527 convolutional neural network Methods 0.000 description 5
- 239000011229 interlayer Substances 0.000 description 5
- 239000011159 matrix material Substances 0.000 description 5
- 208000025174 PANDAS Diseases 0.000 description 4
- 208000021155 Paediatric autoimmune neuropsychiatric disorders associated with streptococcal infection Diseases 0.000 description 4
- 240000004718 Panda Species 0.000 description 4
- 235000016496 Panda oleosa Nutrition 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 230000000692 anti-sense effect Effects 0.000 description 2
- 210000004027 cell Anatomy 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 238000011176 pooling Methods 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 238000013529 biological neural network Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000012464 large buffer Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Theoretical Computer Science (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
Abstract
本文公开了用于针对多个上下文执行多层神经网络处理的技术。在一个实施例中,计算引擎被设置成第一配置以实施神经网络的第二层并且处理与第一上下文有关的第一数据以生成第一上下文第二层输出。所述计算引擎可以从所述第一配置切换到第二配置以实施所述神经网络的第一层。所述计算引擎可以用于处理与第二上下文有关的第二数据以生成第二上下文第一层输出。所述计算引擎可以被设置成第三配置以实施所述神经网络的第三层以处理所述第一上下文第二层输出和所述第二上下文第一层输出,从而生成所述第一上下文的第一处理结果和所述第二上下文的第二处理结果。
Description
本发明申请是国际申请号为PCT/US2019/022973,国际申请日为2019年3月19日,进入中国国家阶段的申请号为201980020856.6,名称为“针对多个输入数据集的处理”的发明专利申请的分案申请。
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。可以使用训练数据对人工神经网络进行训练,以了解如何执行某个计算任务。例如,训练数据可以包含与预定对象相关联的图像数据。经训练人工神经网络可以处理表示不同上下文(例如,在不同的地点、不同的时间、由不同的人捕获的,携带不同的信息等)的多个图像(或多个图像集)以确定图像或图像集是否含有预定对象的图像数据。
神经网络可以包含一组处理节点。每个处理节点可以处理一条输入数据以生成输出,并且可以基于所述一组处理节点的输出的组合而生成最终决策。作为处理的一部分,每个处理节点可以执行一组算术运算,例如浮点乘法和加法等。处理节点的算术运算可以由针对高速算术运算优化的电路系统和数据路径(如图形处理单元(GPU))来执行。
附图说明
图1展示了使用本文所公开的技术处理图像的示例数据处理装置;
图2A、图2B、图2C以及图2D是根据本公开的某些方面的使用本文所公开的技术的预测模型的简化框图;
图3A、图3B和图3C是根据本公开的某些方面的用于实施图2的预测模型的设备的内部组件中的一些内部组件的简化框图;
图4和图5展示了根据本公开的某些方面的操作计算系统以执行多个数据集的多层神经网络处理的示例序列;
图6展示了根据本公开的某些方面的操作计算系统以执行多个数据集的多层神经网络处理的方法的示例流程图;
图7A、图7B、图7C、图7D、图7E、图7F以及图7G展示了根据本公开的某些方面的用于调度多个数据集的多层神经网络处理的调度方案的实例;
图8展示了根据本公开的某些方面的调度计算引擎的操作的示例流程图;并且
图9展示了根据本公开的某些方面的计算装置的实例。
具体实施方式
在以下说明中,将描述各个实施例。出于解释的目的,阐述了具体的配置和细节,以便提供对实施例的透彻理解。然而,对于本领域的技术人员还将显而易见的是,可以在没有具体细节的情况下实践这些实施例。此外,可以省略或简化众所周知的特征以免混淆所描述的实施例。
本公开的实施例涉及一种操作计算引擎以对多个上下文的多层神经网络执行计算的方法。所述多层神经网络可以包含第一神经网络层、从第一神经网络层接收数据的第二神经网络层以及从第二神经网络层接收数据的第三神经网络层。在一个实例中,计算引擎可以被配置为第一神经网络层以对第一上下文执行计算,并且然后被配置为第二神经网络层以对第一上下文执行计算,并且可以存储第一上下文的第二神经网络层计算的输出。然后可以将计算引擎切换回到第一神经网络层以对第二上下文执行计算,并且计算引擎然后被配置为第二神经网络层以对第二上下文执行计算。可以存储第二上下文的第二神经网络层的输出。计算引擎然后可以被配置为第三神经网络层以对第一上下文和第二上下文并行执行计算。
本公开的实施例还涉及一种在计算引擎处调度用于对多个上下文执行多层神经网络计算的操作的方法。参考上面的实例,调度方法可以包括确定用于计算不同上下文的不同神经网络层的执行批次。调度可以从最高水平神经网络层(例如,第三神经网络层)开始并且确定最高水平神经网络层的一个或多个执行批次。下面的层的一个或多个执行批次(例如,第二神经网络层)然后可以在最高水平神经网络层的执行批次之前被确定并被调度。对执行批次的确定可以基于可用缓冲空间。如果缓冲器无法为所有上下文提供用于计算一个神经网络层的所需空间,则计算可以被分成多个批次,并且分开可以被执行成使得缓冲器可以提供足够的空间来存储从更早的执行批次(其将提供用于未来执行批次)生成的输出数据以及正在执行的批次的输入数据和输出数据。
人工神经网络(下文中为“神经网络”)可以包含多个处理节点。对于深度神经网络(DNN),处理节点可以被分成包含例如输入层、多个中间层(还被称为隐含层)以及输出层的层。输入层的每个处理节点接收输入集的元素,并且用权重缩放元素以指示元素对输出的影响程度。中间层中的处理节点可以组合从输入层的每个处理节点接收到的经缩放元素以计算一组中间输出。例如,中间层中的每个处理节点可以计算元素权重积的总和,并且然后通过将激活函数应用于总和来生成中间输出。可以将来自一个中间层的每个处理节点的中间输出视为与指示表决影响的权重相关联的已激活的表决(或无表决),以确定下一中间层的中间输出。输出层可以生成来自最终中间层的经缩放中间输出的总和,并且基于经缩放中间输出的总和是否超过一定阈值来生成二进制输出(例如,“是”或“否”)。由于层之间的经缩放元素的组合,较高层(例如,输出层、紧接在输出层之前的中间层等)的大小通常小于较低层(例如,输入层、紧接在输入层之后的中间层等)的大小。
如下文所讨论的,处理节点可以由针对高速算术运算优化的电路系统和数据路径(如图形处理单元(GPU))实施。例如,电路系统可以包含通过数据路径连接在一起的计算单元阵列。计算单元可以从缓冲器中获得一个或多个权重以及一个或多个输入以执行缩放操作(例如,用所述一组权重缩放输入)和/或加法运算(例如,组合从另一个计算单元中接收到的经缩放输入)。为执行多层神经网络处理,数据路径可以被配置成在不同的时间从缓冲器中获得与不同的神经网络层相关联的不同组的权重和输入,并且将权重和输入转发到用于执行计算的计算单元。例如,在第一时间段中,计算单元可以被配置为输入层,并且数据路径可以被配置成从缓冲器获得第一组权重和输入数据集并将所述第一组权重和输入数据转发到计算单元。计算单元可以执行缩放操作和组合操作以计算第一组中间输出,并且在缓冲器处与所述权重和输入数据集分开存储第一组中间输出以避免覆写要递送到计算单元的所述权重和输入数据集。在第二时间段中,计算单元可以被配置为第一中间层以计算第二组中间输出,并且数据路径可以被配置成从缓冲器中获得所述第一组中间输出和第二组权重,并且被配置成向用于执行计算的计算单元发送所述第一组中间输出和第二组权重。处理可以重复,直到计算单元执行对输出层的计算。
尽管此类布置可以减少需要执行神经网络处理的计算单元的数量,但是在处理期间计算单元的利用率可能降低。例如,如上面所讨论的,较高层的大小通常小于较低层的大小。在计算单元阵列被配置成对单个输入数据集执行神经网络处理的情况下,随着数据从较低层传播到较高层,涉及计算的计算单元的数量可能会减少。当正在执行较高层的计算时,计算单元中涉及较低层的计算的一些计算单元可以变得空闲,从而导致计算单元的利用率降低。
为实现较高的利用率,计算单元阵列可以被配置成以锁步(lock-step)方式处理多个输入数据集(或与不同上下文相关联的输入数据)。例如,计算单元阵列可以被配置成对每个上下文按顺序执行较低层(例如,输入层、较低中间层等)的计算,其中较低层的计算涉及较大的输入数据集和权重集并且可以要求更多的计算单元和更多缓冲空间。在完成较低层计算之后,可以将计算结果存储在缓冲器处。然后,计算单元阵列可以被配置成基于存储在缓冲器处的较低层的计算结果对下一层(例如,较高中间层、输出层等)的多个上下文执行并行计算。对下一层的计算可以涉及较小的输入数据集和权重集并且可以由较少数量的计算单元处理,并且缓冲器还可以容纳输入数据和输出数据以用于对较大数量的上下文的下一层计算。
尽管此类布置可以维持相对高的利用率,但是可能需要大的缓冲器以存储神经网络的特定层的整个计算结果,以为下一层的计算提供中间输出。当将较大数量的数据集输入到计算单元阵列中以进一步提高对较高层计算的利用率时,缓冲器的所需大小可以进一步增加。可能需要较大数量的存储器单元和相关联的接口电路系统以实施缓冲器。所有这些可能增加功耗以及芯片空间,这可能严重限制使用神经网络架构对用于计算和解决问题的计算装置和应用的部署。
本公开的实施例涉及一种操作计算引擎以对多个上下文的多层神经网络执行计算的方法。在一个实施中,所述方法包括:使用计算引擎对第一上下文执行与第一神经网络层相关联的第一计算任务以生成第一数据;使用计算引擎并且基于第一数据对第一上下文执行与第二神经网络层相关联的第二计算任务以生成第二数据;将第二数据存储在存储器装置处;使用计算引擎对第二上下文执行与第一神经网络层相关联的第三计算任务以生成第三数据;使用计算引擎并且基于第三数据对第二上下文执行与第二神经网络层相关联的第四计算任务以生成第四数据;将第四数据存储在存储器装置处;以及使用计算引擎并且基于存储在存储器装置处的第二数据和第四数据分别对第一上下文和第二上下文并行执行第五计算任务和第六计算任务,所述第五计算任务与所述第六计算任务与第三神经网络层相关联。
本公开的实施例还涉及一种在计算引擎处调度用于对多个上下文执行多层神经网络计算的操作的方法。参考上面的实例,所述调度方法可以包括确定包括第五计算任务和第六计算任务的第一执行批次;基于存储器装置具有足够的容量来存储第二计算任务的输入数据和输出数据和第四计算任务的输出数据来确定包括第二计算任务的第二执行批次和包括第四计算任务的第三执行批次,所述第二执行批次和所述第三执行批次两者要在所述第一执行批次之前执行;以及基于存储器具有足够的容量来存储第一计算任务的输入数据和输出数据和第四计算任务的输出数据来确定包括第一计算任务的要在第二执行批次与第三执行批次之间执行的第四执行批次。可以遵循上文确定的用于执行对上述多个上下文的多层神经网络计算的示例方法的顺序执行第一执行批次、第二执行批次、第三执行批次和第四执行批次。
与上述锁步方案相比,本公开的实施例可以与用于存储计算的中间输出的较小缓冲器一起操作。作为说明性实例,在锁步方案中,计算引擎可以完成对第一上下文和第二上下文两者的第一神经网络层计算,并且然后继续执行对第一上下文和第二上下文两者的第二神经网络层计算,然后进行执行对第一上下文和第二上下文两者的第三神经网络层计算。计算引擎可以对第一上下文然后对第二上下文执行第一神经网络层计算。为了支持批次处理,缓冲器需要提供用于存储第二上下文的持续的第一神经网络层计算的输入和输出的第一存储空间以及用于存储第一上下文的已完成第一神经网络层计算的输出(在第二上下文的第一神经网络层计算完成之后,作为输入向第一上下文的第二神经网络层计算提供)的第二存储空间。
另一方面,根据本公开的实施例,计算引擎可以完成对第一上下文的第一神经网络层计算和第二神经网络层计算,存储第一上下文的第二神经网络层输出,并且然后继续对第二上下文执行第一神经网络层计算。为了支持对第二上下文的第一神经网络层计算,缓冲器还可能需要为第二上下文的第一神经网络层计算的输入数据和输出数据提供第一存储空间(其与上面所描述的锁步方案的说明性实例所需的第一存储空间相同)。缓冲器还需要提供用于存储第一上下文的已完成第二神经网络层计算的输出的第二存储空间。在此情况下的第二存储空间可以小于上面所描述的锁步方案的实例中的第二存储空间。这是因为第二神经网络层的大小通常小于第一神经网络层的大小,并且第二神经网络层的输出数据大小也通常小于第一神经网络层的输出数据大小。因此,随着计算引擎前进通过各层,可以使用较小的缓冲器来存储中间结果。
根据本公开的实施例,对不同输入数据集的计算可以被布置成使计算资源的利用最大化(例如,通过允许对多个输入数据集的并发高层计算)同时减少缓冲器使用(。因此,较小的存储器装置可以用于支持可以减少芯片空间和功耗的计算。
图1展示了使用本文所公开的技术处理数据序列的示例分类器装置100。分类器装置100可以是例如操作软件应用程序102和预测模型103以预测包含在数据序列中的信息并且基于预测执行预定功能的计算装置。例如,分类器装置100可以是提供用于从图像中标识某些对象(例如,文本、人等)的图像识别服务的一部分。应理解,图像识别服务仅作为说明性实例提供,并且本文所公开的技术可以用于其它数据处理应用,包含例如基于文本的数据处理(例如,搜索查询的处理)、音频数据处理等。
可以在多租户计算服务系统中提供图像识别服务。多租户计算服务系统通常可以包含多个服务器,所述多个服务器可以托管数据并且可以由多个客户端或组织用于运行实例,如虚拟机实例或裸机实例(例如,直接在服务器硬件上运行的操作系统)。在如裸机或虚拟机等实例中,可以将多租户计算服务系统在客户端需要时分配给客户端,并且在不再需要时停止使用,使得可以向其它客户端重新分配资源。在本公开中,术语“租户”、“客户端”和“顾客”可以互换使用,但是此类术语不一定意味着存在任何特定的业务布置。术语“实例”可以指例如直接在服务器硬件上执行的实例或作为虚拟机的实例。不同类型的实例总通常对应于不同的硬件功能和/或硬件布置(例如,不同量的可用存储器和/或处理硬件)。在图1的实例中,多租户计算服务系统可以在客户端需要其时提供图像识别服务并且在不再需要时停止使用,使得可以将支持图像识别服务的资源(例如,对软件应用程序102的访问和用于处理软件应用程序102的底层硬件资源)重新分配给其它客户端。
如在图1中所示出的,软件应用程序102可以从用户接收图像104的像素数据。图像104可以包含像素阵列。软件应用程序102可以对像素数据执行分析,并且预测图像104中描绘的一个或多个对象106。分析可以包含例如将像素数据与一组预定图像特征进行比较。如将在下文更详细地讨论的,软件应用程序102可以采用预测模型203以基于图像104的像素数据计算一组得分。所述一组得分可以表示例如图像104包含预定图像特征的可能性。然后,软件应用程序102可以基于得分确定关于图像104的内容的其它信息。例如,基于得分,软件应用程序102可以确定图像104是熊猫的图像。
预测模型103可以呈人工神经网络的形式。人工神经网络可以包含多个处理节点,并且每个处理节点被配置成处理输入像素数据的一部分,或者被配置成进一步处理来自其它处理节点的中间输出。图2A展示了使用本文所公开的技术的预测模型103的实例。在图2A的实例中,预测模型103可以是如深度神经网络(DNN)、卷积神经网络(CNN)等多层神经网络。预测模型103可以包含输入层207、包含中间层209和中间层211的一组中间层以及输出层(图2A中未示出)。
输入层207可以处理表示图像104的不同部分的像素数据。在图2A的实例中,输入层207可以处理图像104的像素数据。输入层207的每个处理节点被分配为接收与图像104内的预定像素相对应的像素值(例如,x0、x1、x2、…、xn),并且向中间层209传输具有接收到的像素值的一个或多个权重。在预测模型203是DNN的情况下,可以为输入层207的每个处理节点分配基于矩阵W1定义的一组权重。输入层207的每个处理节点可以向中间层209的每个处理节点发送接收到的像素值和所分配的权重。在预测模型103是CNN的情况下,输入层207的处理节点群组可以共享一组权重,并且每个群组可以向中间层209的单个处理节点发送一组权重和由处理节点群组接收到的像素值。
中间层209可以处理来自输入层207的经缩放输出以生成一组中间输出。例如,假设中间层209的处理节点210a连接到输入层207中的n个处理节点,则处理节点210a可以基于以下等式生成从输入层207接收到的经缩放输出的总和:
此处,sum210a表示由处理节点210a生成的总和。W1i×xi表示由输入层207的处理节点用相关联的权重(例如,W10)对特定像素值(例如,x0)的缩放。在预测模型203是DNN的情况下,中间层209的每个处理节点可以基于对来自输入层207的每个处理节点的像素值的缩放生成总和,并且然后通过对经缩放像素值求和来生成总和(例如,Sum210a)。总和还可以表示包括多个元素(例如,像素值)的输入向量与权重向量(例如,W1)之间的点积。
另一方面,在预测模型103是CNN的情况下,中间层209的每个处理节点可以基于对来自输入层207的处理节点群组的像素值的缩放来生成总和。总和可以表示像素值群组与包括权重值的滤波器之间的卷积结果。图2B展示了中间层209可以执行的卷积运算的实例。在图2B中,滤波器230可以包含权重的二维阵列。滤波器230中的权重可以表示要从图像中检测到的某些特征的像素的空间分布。所述二维阵列的高度可以是R行并且宽度可以是S列,并且所述二维阵列通常小于高度为H像素和宽度为W像素的输入图像。可以将每个权重映射到像素值的具有相同R行和S列的矩形块中的像素。中间层209的处理节点(例如,处理节点210a)可以从输入层207的处理节点群组中接收与来自输入图像的像素的第一矩形块相对应的像素值群组240,并且根据等式1基于对滤波器230的每个权重与群组240中的每个对应像素之间的乘法结果的求和生成卷积输出242,以生成由滤波器230表示的矩阵与由群组240表示的矩阵之间的点积。中间层209的另一处理节点还可以从输入层207的另一处理节点群组中接收与来自输入图像的像素的第二矩形块相对应的像素值群组244,并且根据等式1基于对滤波器230的每个权重与群组244中的每个对应像素之间的乘法结果的求和生成卷积输出246,以生成滤波器230的矩阵与由群组240表示的矩阵之间的点积。在一些实例中,图2B中的每个卷积输出(例如,卷积输出242、卷积输出246等)可以对应于中间层209的处理节点的输出。在一些实例中,输入图像中的像素数据可以被称为用于指示像素由对应于某个或某些特征的相同滤波器(或相同滤波器组)处理的输入特征图。卷积输出可以被称为用于指示输出是用滤波器处理输入特征图的结果的输出特征映射。
如图2B中所示出的,卷积运算可以被布置在滑动窗口中,使得第二矩形块与输入图像中的第一矩形块重叠或者以其它方式与其相邻。例如,在图2B的实例中,D可以是每个卷积运算的滑动窗口的步幅距离(按像素计),使得与群组244相对应的像素块可以位于距与群组240相对应的像素块的距离D(用像素表示)处,并且下一像素块也可以位于距群组244相同的距离D处。中间层209的其它处理节点也可以接收与其它矩形块相对应的像素群组并且生成其它中间输出。卷积输出可以是高度为E行并且宽度为F列的卷积输出阵列280的一部分。与输入图像相比,卷积输出阵列可以具有较小的高度和较小的宽度。卷积输出的矩形块可以被进一步分组,并且可以在卷积输出群组与另一组滤波器权重之间的中间层211处执行卷积运算,以生成另一组卷积输出。
在一些实例中,可以在多个图像与多个滤波器之间执行卷积运算。例如,参考图2C,一组C滤波器260可以对应于多个(C)图像270,并且可以在所述一组滤波器260中的每个滤波器与像素块之间对图像270的对应图像执行卷积运算。可以对每个滤波器图像对的卷积结果求和以生成如下卷积输出:
此处,卷积运算涉及图像(或像素阵列)。Xc eD+r,fD+s可以指所述多个(C)图像370内的索引c的图像处的像素值,其中水平像素坐标为eD+r并且竖直像素坐标为fD+s。D是滑动窗口的步幅距离,而e和f对应于卷积输出阵列中输出的位置,e和f还可以对应于特定的滑动窗口。进一步地,r和s对应于滑动窗口内的特定位置。(r,s)位置处的像素和索引c的图像的像素还可以对应于相同(r,s)位置处的相同索引c的对应滤波器中的权重Wc r,s。等式2指示为了计算卷积输出Oe,f,可以将滑动窗口内的每个像素(由(e,f)索引)乘以对应权重Wc r,s。可以计算图像集内的图像中的每个图像的每个滑动窗口内的乘积的部分总和,并且然后可以计算图像集中的所有图像的部分总和的总和。
此外,在一些实例中,可以使用多组滤波器来对图像集执行卷积运算以生成一组卷积输出阵列,每个卷积输出阵列对应于一组滤波器。例如,所述多组滤波器可以对应于要从所述图像集中检测到的多个图像特征,并且每个卷积输出阵列对应于来自所述图像集的每个图像特征的检测结果。例如,在将M组滤波器应用于C图像以生成M个卷积输出阵列的情况下,等式2可以更新如下:
此处,卷积输出Oe,f m和权重Wc,m r,s具有与M组滤波器之一相对应的索引m。
图2D展示了要与M组滤波器(其中M=2)卷积的C组输入数据集(其中C=3)的实例。每个输入数据集对应于像素群组的条目。例如,像素群组282、286和290中的每个像素群组可以对应于一个输入数据集。M组滤波器中的每组滤波器包含与C组输入像素阵列相对应的一组C滤波器。在图2D的实例中,存在两个滤波器组,其中第一滤波器组包括滤波器阵列284a、284b和284c并且第二滤波器组包括滤波器阵列288a、288b和288c。卷积运算生成M组输出数据集,其中每个输出数据集对应于卷积输出阵列。在图2D的实例中,生成两个卷积输出阵列294和296。每个卷积输出阵列对应于将(M组中的)一组滤波器与输入像素阵列进行卷积。例如,卷积输出阵列294的第一元素O0,0 0可以通过像素群组282与滤波器阵列284a之间的点积、像素群组286与滤波器阵列284b之间的点积以及像素群组290与滤波器阵列284c之间的点积的总和生成。
返回参考图2A,中间层209的一个处理节点可以被配置成生成一个卷积输出阵列,并且中间层209的处理节点的组M可以对应于卷积输出阵列的组M。中间层209的处理节点还可以用例如激活函数对每个卷积输出后处理以生成中间层209的最终输出。激活函数可以将卷积输出(或子样品)转化成是否将卷积输出(或子样品)转发到上层的决策。决策的生成可以类似于生物神经元的触发。激活函数的实例可以是根据以下等式定义的修正线性单元(ReLu):
ReLu(y)=max(0,y) (等式4)
中间层209的处理节点(例如,处理节点210a)可以基于等式4用ReLu函数处理卷积输出子样品以生成中间输出。另外,中间层209的处理节点还可以执行其它如池化运算等后处理操作,以减少中间输出的数量。中间层209可以向中间层211提供经后处理中间输出,所述层可以基于不同组滤波器执行另外的卷积运算。可以将来自中间层211的每个处理节点的输出转发到其它较高的中间层,或者转发到输出层(图2A中未示出)。输出层可以形成表示例如某一图像特征包含于图2A的图像104(或由图2D的输入像素阵列组表示的图像集)中的可能性的输出向量,以确定与特定上下文相关联的图像或图像集是否包含熊猫的图像。例如,输出向量可以与和熊猫的鼻子对象相关联的参考向量、或与熊猫相关联的参考向量进行比较,并且基于比较结果生成决策。模型103的多个实例可以用于处理与多个上下文相关联的多个图像(或多个图像集)以生成对上下文中的每个上下文的决策。
图3A示出了根据本公开的一些实施例的设备300。设备300可以是计算机系统的一部分,例如主机服务器。设备300可以是多租户计算服务系统的一部分并且与主机装置通信(图3A中未示出)以为计算服务提供计算资源和存储器资源。例如,返回参考图1,设备300可以为利用预测模型103的计算提供计算资源和存储器资源。主机装置可以操作软件应用程序102并且与设备300通信以基于利用预测模型103的计算执行一个或多个图像识别任务。主机装置可以传输与多个上下文相关联的多个图像数据集,并且向设备300提供所述多个图像数据集,所述设备可以生成多个输出以预测例如所述多个图像数据集中的每个图像数据集是否包含预定对象。
在图3A的实例中,设备300可以包含通过互连件318耦合到存储器312、直接存储器访问(DMA)控制器316以及主机接口314的神经网络处理器302。如将更详细讨论的,神经网络处理器302可以提供计算资源以支持利用预测模型103的计算。存储器312可以被配置成存储从主机装置接收到的指令、输入数据(例如,图2D的像素群组282、286和290)以及权重(例如,滤波器阵列284a、284b、284c、288a、288b和288c)。存储器312还可以被配置成存储神经网络处理器302的输出(例如,图2D的卷积输出阵列294和296)。存储器312可以包含任何合适的存储器,例如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率DRAM(DDR DRAM)、存储级存储器(SCM)、闪存等。
DMA控制器316可以被配置成执行在神经网络处理器302与主机装置之间传输数据的DMA操作。例如,如上面所讨论的,主机装置可以将指令、输入数据和权重存储在存储器312处。主机装置可以向神经网络处理器302(例如,以存储器描述符的形式)提供所存储的指令、数据和权重的存储器地址。神经网络处理器302然后可以基于由主机装置提供的存储器地址获得所存储的指令、数据和权重。神经网络处理器302还可以将计算结果(例如,一个或多个图像识别决策)存储在存储器312处,并且将存储结果的存储器地址提供给主机装置。
主机接口314可以被配置成实现主机装置与神经网络处理器302之间的通信。例如,主机接口314可以被配置成在主机装置与神经网络处理器302之间传输包含所存储数据(例如,输入数据、权重、计算结果等)的存储器地址的存储器描述符。主机接口314可以包含例如外围组件互连快速(PCIe)接口或用于与主机装置通信的任何合适的接口。
神经网络处理器302可以提供计算资源以支持利用预测模型103的一个或多个实例的计算。在图3A的实例中,神经网络处理器302可以包含状态缓冲器322、计算引擎324、输出缓冲器328、后处理器329以及计算控制器330。
状态缓冲器322可以被配置成提供对用于计算引擎324处的计算的数据的高速缓存。在状态缓冲器322处高速缓存的数据可以包含例如从存储器312获得的输入数据和权重以及计算引擎324处的计算的中间输出。高速缓存可以降低(例如,由存储器312、DMA控制器316、互连件318等处的等待时间引起的)存储器存取瓶颈对计算引擎324的性能的影响。状态缓冲器322可以由计算控制器330控制以将一组权重预提取到计算引擎324,并且然后以顺序流的形式将输入数据提取到计算引擎324,所述计算引擎执行计算并生成中间输出数据的顺序流。中间输出数据流可以在输出缓冲器328处收集并由后处理器329后处理。可以将中间输出数据的经后处理流存储在状态缓冲器322处。可以将中间输出数据存储于状态缓冲器322中的存储输入数据和权重的不同位置处,以避免覆写例如有待提取到计算引擎324的输入数据。状态缓冲器322可以是片上存储器装置并且可以包含例如静态随机存取存储器(SRAM)。
计算引擎324可以包含被配置成执行涉及神经网络计算的一个或多个算术运算的一组电路系统。例如,计算引擎324可以包含用于执行利用相关联权重对输入数据的缩放的一组乘法器和用于生成如上面所讨论的表示点积和卷积结果的乘法结果的总和的一组加法器。计算引擎324可以获得用于从状态缓冲器322缩放的权重。如下面要更详细地讨论的,计算引擎324可以从状态缓冲器322或从输出缓冲器328获得要缩放的输入。
在一些实例中,可以控制(例如,由计算控制器330)计算引擎324按顺序对不同神经网络层执行计算,以减小存储于状态缓冲器322中的权重的大小。例如,计算引擎324可以被控制为在一个时间段内对一个神经网络层(例如,输入层207)执行算术运算,并且然后在下一时间段内对下一神经网络层(例如,中间层209)执行算术运算。利用此类布置,状态缓冲器322可以预提取并高速缓存一个神经网络层的一组权重,而不是高速缓存多个神经网络层的多组权重,以支持计算引擎324处的算术运算。因此,可以减小状态缓冲器322的所需大小,并且还可以减小神经网络处理器302的芯片大小以及功耗。另一方面,如上面所描述的,状态缓冲器322需要为用于计算一个上下文(例如,图像、图像集、音频数据、或与上下文相关联的其它数据)的至少一个神经网络层计算的输入数据和输出数据两者提供存储空间以避免利用用于计算的输出数据覆写输入数据。
图3B展示了计算引擎324的内部结构的实例。计算引擎324可以包含布置成多行和多列的处理元件(PE)阵列。一行内的PE通过内部行总线XBUS内部彼此连接,而PE 11、21、31、…、x1中的每个PE通过外部行总线XBUS外部连接到外部电路系统。此外,一列内的PE通过内部列总线YBUS内部彼此连接,PE 11、12、13、…、1y中的每个PE通过外部列总线YBUS外部连接到外部电路系统。如下面更详细地讨论的,外部行总线XBUS外部和外部列总线YBUS外部可被配置成从例如状态缓冲器322和输出缓冲器328向PE阵列提供数据以缩放对特定神经网络层的计算操作。
在一些配置中,每列PE可以对预测模型103的一个处理节点(例如,处理节点208a、210a、212a等之一)执行缩放和求和计算,而每行PE可以对一个输入数据集执行缩放和求和计算。作为说明性实例,对于对中间层209执行计算,第一行PE 11、12、13、…、1y中的每个PE可以从XBUS外部接收图2D的像素群组282的像素值。而且,第一列PE 11、21、31、…、x1中的每个PE可以接收滤波器阵列284a、284b和284c中的元素以生成图2D的卷积输出阵列294的输出。此外,第二行PE 21、22、23、…、2y中的每个PE可以从XBUS外部接收图2D的像素群组286的像素值,而第二列PE 12、22、32、…、x2中的每个PE可以接收滤波器阵列288a、288b和288c中的元素以生成图2D的卷积输出阵列296的输出。PE中的每个PE包含用于在接收到的像素值与接收到的权重之间执行乘法函数的乘法器以生成乘法结果。此外,PE中的每个PE还包含用于在一列PE内累积乘法结果的加法器。例如,PE 11基于第一像素值和第一权重生成第一乘法结果并且通过YBUS向PE 21传递第一乘法结果。PE 21基于第二像素值和第二权重生成第二乘法结果,使第二乘法结果相加以生成部分总和,并且通过另一个YBUS向PE 31传递部分总和。与PE 11、21和31同一列内的其它PE还执行乘法和累积。PE x1然后可以生成卷积输出242并且通过YBUS外部传输卷积输出。
在一些配置中,计算引擎324的PE可以用于实施预测模型103的多个实例。例如,当利用较少数量的处理节点和较少数量的输入数据处理较高水平层时,同一行PE可以用于处理不同上下文的输入数据集(例如,对应于由不同的人在不同位置处、不同时间捕获的不同的图像或不同的图像集,或者以其它方式携带不同的信息的不同的图像或不同的图像集)。例如,PE 11可以被配置成处理第一上下文的一个输入数据集,而PE 12可以被配置成处理第二上下文的另一个输入数据集。PE 11和PE 12两者可以存储相同组的权重并且将相同组的权重应用于输入数据。第一列(包括PE 11、21、…、x1)可以被配置成处理第一上下文的多个输入数据集,而第二列(包括PE 12、22、…、x2)可以被配置成处理第二上下文的多个输入数据集。
图3C展示了可以是图3B所描述的PE中的任何PE的PE 340的内部结构的实例。PE340可以包含分离器350、乘法器353和加法器356。分离器350可以从输入XBUS(例如,XBUS输入)接收数据集并且提取输入值和权重。例如,PE 11可以从XBUSIN接收不仅是PE 11而且还是同一行其它PE的一组输入值和权重。PE 11的分离器350可以从XBUSIN上的数据中提取针对PE 11的输入值(例如,IN351)和权重值(例如,W352),并且向乘法器353提供所提取值以生成乘法结果(例如,M354)。加法器356可以将通过输入YBUS(例如,YBUS输入)从同一列内的先前PE接收到的部分总和添加到乘法结果(例如,M354)中以生成部分总和,并且通过输出YBUS(例如,YBUS输出)将部分总和传输到在同一列内的下一PE。PE还可以通过输出XBUS(XBUS输出)将XBUSIN的数据转发到同一行内的下一PE。
返回参考图3A,神经网络处理器302进一步包含输出缓冲器328和后处理器329。输出缓冲器328包含用于存储计算引擎324的输出的一组寄存器。后处理器329可以包含用于对计算引擎324的输出应用一个或多个激活功能(例如,ReLu功能)的电路(例如,被配置为映射表的多路复用电路)。后处理器329还可以包含用于执行池化运算以减小输出的大小的电路。后处理器329可以将经后处理输出存储在状态缓冲器322处。
计算控制器330可以确定通过XBUS外部和YBUS外部提供给计算引擎324的输入数据和权重,以控制计算引擎324处的计算。例如,计算控制器330可以通过在不同时间提供与每个神经网络层相关联的输入数据和权重来对控制计算引擎324以对每个神经网络层按顺序执行计算。作为说明性实例,作为第一步骤,计算控制器330可以获取与中间层209处的缩放操作相关联的输入像素数据和权重,并且通过XBUS外部向计算引擎324馈送输入像素数据和权重。计算引擎324然后可以生成输出并且通过YBUS外部向激活引擎326馈送输出,以生成与中间层209的每个处理节点相对应的一组中间输出(例如,first_intermediate_output210a)。中间输出可以存储在输出缓冲器328处。如果针对下一层(例如,中间层211)处的相同输入数据集进行后续计算,则计算控制器330可以获取存储在输出缓冲器328处的中间输出并且通过XBUS外部向计算引擎324馈送来自状态缓冲器322的中间输出以及新一组的权重以开始中间层211处的计算。另一方面,如果中间计算不是用于后续计算,则计算控制器330可以将中间输出存储在状态缓冲器322处。可以对每层重复所述过程,直到输出层处的计算完成。计算序列可以由操作下面要描述的调度方案的调度器模块332确定。
如上面所讨论的,在DNN和CNN中,较高水平中间层的大小通常小于较低水平中间层的大小。因此,随着神经网络计算向上通过神经网络层朝向输出层前进,对层的计算的计算资源可能随时间减少。参考图3B的实例,中间层209可以包含与计算引擎324中的PE列的数量相同的处理节点的数量。因此,当执行中间层209的计算时,计算引擎324中的每列涉及计算,其中每列PE生成与中间层209的一个处理节点相对应的输出。然而,如果中间层211仅具有中间层209的处理节点的一半处理节点,则PE的各列的一半可以不需要用于计算并且可以处于空闲,从而导致计算引擎324的利用较低。为了改善计算引擎324的利用,计算控制器330可以控制计算引擎324以处理多个输入数据集(例如,多个图像或其它上下文)并且为所述多个输入数据集生成多个输出,如上面所描述。
现在参考图4,所述图展示了操作计算引擎324以处理多个输入数据集的序列400的实例。左侧的块展示了在计算引擎324处的计算序列,而右侧的块展示了存储在状态缓冲器322处的中间输出的对应序列。权重在状态缓冲器322处的存储未在图4中示出。
在一些实例中,可以以锁步的方式执行序列400以操作计算引擎324。例如,(当计算资源需求很大并且计算引擎324被充分利用时)可以对每个输入数据集按顺序执行对较低水平神经网络层的计算。在完成对(不同上下文的)所有输入数据集的一个神经网络层的计算之后,计算引擎324然后对下一神经网络层执行计算。一旦计算到达计算资源需要已经减少的较高水平神经网络层,计算控制器330就可以对输入数据集执行并行计算以维持计算引擎324的利用率。如本文所描述的和附图所描绘的,“C-1”可以指第一上下文,“C-2”可以指第二上下文,“C-3”可以指第三上下文,并且“C-4”可以指第四上下文。
在TO处,计算控制器330可以控制计算引擎324以对C-1执行L0神经网络层(例如,中间层209)计算,所述计算使计算引擎324被充分利用。在T0处,状态缓冲器322需要提供用于存储用于C-1L0计算的输入数据(和权重)以及C-1L0计算的输出数据的存储空间。
在T1处,在对C-1完成L0神经网络层计算之后,计算控制器330可以将针对C-l的L0计算的输出数据存储于状态缓冲器322中,并且然后控制计算引擎324以对C-2执行L0神经网络层计算。在T1处,状态缓冲器322需要提供用于存储用于针对C-2的持续L0计算的输入数据和输出数据以及针对C-1的已完成L0计算的输出数据的存储空间。
在T2处,计算控制器330可以控制计算引擎324以对C-3执行L0神经网络层计算。在T2处,状态缓冲器322需要提供用于存储用于针对C-3的持续L0计算的输入数据和输出数据以及针对C-1和C-2的已完成L0计算的输出数据的存储空间。
在T3处,计算控制器330可以控制计算引擎324以对C-4执行L0神经网络层计算。在T3处,状态缓冲器322需要提供用于存储用于针对C-4的持续L0计算的输入数据和输出数据以及针对C-1、C-2和C-3的已完成L0计算的输出数据的存储空间。
在T4处,计算控制器330可以切换计算引擎324以执行L1神经网络层计算(例如,中间层211)。计算控制器330可以控制计算引擎324以对C-1和C-2并行执行L1计算。在T4处,状态缓冲器322需要提供用于存储用于针对C-1和C-2的持续L1计算的输出数据以及针对C-1、C-2、C-3和C-4的已完成L0计算的输出数据的存储空间。与序列400的其它阶段相比,存储在T4处的数据的总大小可以处于最大值。
在T5处,计算控制器330可以控制计算引擎324以对C-3和C-4执行L1计算。在T5处,状态缓冲器322需要提供用于存储用于针对C-3和C-4的持续L1计算的输出数据以及针对C-3和C-4的已完成L0计算的输出数据的存储空间。由于针对C-1和C-2的L1计算已经在T5处完成并且不再需要那些输出数据,因此可以去除针对C-1和C-2的已完成L0计算的输出数据(或通过针对C-3和C-4的L1计算的输出数据覆写)。
在T6处,计算控制器330可以切换计算引擎324以执行L2神经网络层计算(例如,输出层)。计算控制器330可以控制计算引擎324以对C-1、C-2、C-3和C-4并行执行L2计算。在T6处,状态缓冲器322需要提供用于存储用于针对C-1、C-2、C-3和C-4的持续L2计算的输出数据以及用于这些计算的输入数据(例如,针对C-1、C-2、C-3和C-4的L1计算的输出数据)的存储空间。
尽管图4中的操作序列允许计算引擎324保持处于全容量,但是需要很大的状态缓冲器322来存储如在时间T4处的对多个上下文的较低水平神经网络(例如,L0)计算的输出。那些中间输出通常尺寸很大并且要求大量的片上存储器空间以进行存储。
现在参考图5,所述图展示了操作计算引擎324以处理多个输入数据集的序列500的实例。可以以非锁步的方式执行序列500以操作计算引擎324。左侧的块展示了在计算引擎324处的计算序列,而右侧的块展示了存储在状态缓冲器322处的中间输出的对应序列。权重在状态缓冲器322处的存储未在图5中示出。
在T0处,计算控制器330可以控制计算引擎324以对C-1执行L0神经网络层(例如,中间层209)计算,所述计算使计算引擎324被充分利用。在T0处,状态缓冲器322需要提供用于存储用于C-1L0计算的输入数据(和权重)以及C-1L0计算的输出数据的存储空间。
在T1处,在C-1完成L0神经网络层计算之后,计算控制器330可以将C-1的L0计算的输出数据存储于状态缓冲器322中,并且然后控制计算引擎324以对C-2执行L0神经网络层计算。在T1处,状态缓冲器322需要提供用于存储用于针对C-2的持续L0计算的输入数据和输出数据以及针对C-1的已完成L0计算的输出数据的存储空间。
在T2处,计算控制器330可以切换计算引擎324以对C-1和C-2执行L1神经网络层计算(例如,中间层211)。在T2处,状态缓冲器322需要提供用于存储用于持续L1计算的输入数据(例如,针对C-1和C-2的L0计算的输出数据)以及通过L1计算生成的输出数据的存储空间。
在T3处,计算控制器330可以切换回计算引擎324以对C-3执行L0神经网络层计算。在T3处,状态缓冲器322需要提供用于存储用于针对C-1和C-2的已完成L1计算的输出数据以及针对C-3的持续L0计算的输入数据和输出数据的存储空间。
在T4处,计算控制器330可以控制计算引擎324以对C-4执行L0神经网络层计算。在T4处,状态缓冲器322需要提供用于存储用于针对C-1和C-2的已完成L1计算的输出数据、针对C-3的已完成L0计算的输出数据以及针对C-4的持续L0计算的存储输入数据和输出数据的存储空间。与序列400的T4相比,通过存储较少上下文的L0输出数据(其通常大于较高神经网络层),可以减小状态缓冲器322的所需大小。
在T5处,计算控制器330可以控制切换计算引擎324以对C-3和C-4并行执行L1神经网络层计算。在T5处,状态缓冲器322需要提供用于存储用于针对C-1和C-2的已完成L1计算的输出数据以及针对C-3和C-4的持续L1计算的输入数据和输出数据的存储空间。针对C-3和C-4的持续L1计算的输入数据包含针对C-3和C-4的已完成L0计算的输出数据。
在T6处,计算控制器330可以切换计算引擎324以执行L2神经网络层计算(例如,输出层)。计算控制器330可以控制计算引擎324以对C-1、C-2、C-3和C-4并行执行L2计算。在T6处,状态缓冲器322需要提供用于存储用于针对C-1、C-2、C-3和C-4的持续L2计算的输出数据以及用于这些计算的输入数据(例如,针对C-1、C-2、C-3和C-4的L1计算的输出数据)的存储空间。
图6展示了根据本公开的某些方面的用于处理与多层神经网络中的不同上下文相关联的多个数据集的过程600的示例流程图。所述多层神经网络可以包含第一神经网络层(例如,中间层209)、取决于第一神经网络层的第二神经网络层(例如,中间层211)和取决于第二神经网络层的第三神经网络层(例如,输出层)。所述过程可以由上文所描述的各种系统(例如,计算控制器330和计算引擎324)实施。
在操作602处,计算引擎(例如,计算引擎324)被配置为第一神经网络层并且可以处理(例如,第一上下文的)第一数据集以生成第一数据集的第一层输出。
在操作604处,计算引擎,在被配置为第一神经网络层时,可以处理(例如,第二上下文的)第二数据集以生成第二数据集的第一层输出。
在操作606处,计算引擎被配置为第二神经网络层并且可以处理第一数据集的第一层输出和第二数据集的第一层输出以分别生成(第一上下文的)第一数据集的第二层输出和(第二上下文的)第二数据集的第二层输出。
在操作608处,在操作606处生成第一数据集的第二层输出和第二数据集的第二层输出之后计算引擎被配置回为第一神经网络层,并且计算引擎可以处理(例如,第三上下文的)第三数据集以生成第三数据集的第一层输出。
在操作610处,计算引擎在被配置为第一神经网络层时可以处理(例如,第四上下文的)第四数据集以生成第四数据集的第一层输出。
在操作612处,计算引擎可以被配置为第二神经网络并且可以处理(第三上下文的)第三数据集的第一层输出和(第四上下文的)第四数据集的第一层输出以分别生成第三数据集的第二层输出和第四数据集的第二层输出。
在操作614处,计算引擎可以被配置为第三神经网络并且可以处理(第一上下文的)第一数据集的第二层输出、(第二上下文的)第二数据集的第二层输出、(第三上下文的)第三数据集的第二层输出以及(第四上下文的)第四数据集的第二层输出以分别生成第一数据集的第三层输出、第二数据集的第三层输出、第三数据集的第三层输出和第四数据集的第三层输出。
在一些实例中,从(例如,图4的)锁步序列到(例如,图5的)非锁步序列的计算顺序的重新布置可以基于调度方案。调度方案可以用于确定执行批次的序列,其中每个执行批次包括神经网络层的用于在计算引擎324处并行执行的一个或多个计算任务。可以对上下文执行每个计算任务,并且在不同时间执行执行批次中的每个执行批次。在状态缓冲器322处的可用空间以及层间数据依赖性的约束下,调度方案的目的可以是使每个执行批次大小(例如,要执行的多个并行计算任务)最大化。
在一些实例中,计算控制器330的调度器模块332可以应用图归约方案以确定在不同上下文的不同神经网络层的计算之间的依赖性的图。调度器模块332然后可以从较高神经网络层计算开始遍历图并且确定计算任务的序列。所述确定可以是基于由状态缓冲器支持的并行计算任务的数量以及层间数据依赖性。如上面所讨论的,为了支持神经网络层的多个计算任务的并行执行,状态缓冲器需要具有足够的容量来存储多个计算任务的输入数据和输出数据两者。在确定第一神经网络层(例如,图2A的中间层211)的第一执行批次大小之后,调度器模块332可以遍历依赖性图并且确定状态缓冲器是否可以支持为第一神经网络层提供输入数据的第二神经网络层(例如,图2A的中间层209)的多个计算任务。如果状态缓冲器不能支持第二神经网络层的多个计算任务,则调度器可以将第二神经网络层的多个计算任务分成多个执行批次。对所述多个执行批次的确定可以是在状态缓冲器具有足够的容量来存储更早的执行批次的输出数据以及持续执行批次的输入数据和输出数据的约束下使每个执行批次中的第二神经网络层的并行计算任务的数量最大化。在确定第二神经网络层的执行批次之后,调度器可以遍历依赖性图以确定第三神经网络(例如,图2A的输入层207)的计算任务,所述第三神经网络为第二神经网络层提供输入数据,并且在如上所述的状态缓冲器容量的限制下重复执行批次至确定操作。
现在参考图7A-图7G,其展示了调度方案的实例。图7A展示了图4和图5的上下文C-1、C-2、C-3和C-4的神经网络层计算的依赖性图的实例。在此实例中,可以假设计算引擎324对可以同时执行多少计算任务没有限制,并且唯一限制来自状态缓冲器的层间依赖性和容量。在此说明性实例中,状态缓冲器的大小可以是2个单位。
在图7A的实例中,每个气泡(即,圆圈)可以对应于神经网络层的计算任务或上下文的外部输入,并且气泡中的数字指示要通过计算任务生成的输出数据的大小或外部输入数据的大小。输出数据(或外部输入数据)的大小是相对于状态缓冲器的大小的,并且两者具有相同的单位。每个执行批次可以包含相同神经网络层的气泡中的一个或多个气泡。成对气泡通过方向指示数据依赖性的相应箭头连接。邻近箭头的数字可以指示用于神经网络层的计算任务的权重值的大小。权重值可以在一个执行批次中的气泡之间共享。参考上下文C-1的依赖性图,L0(神经网络层0)计算任务可以接收作为外部输入的0.5个单位大小的图像数据和0.3个单位大小的权重作为输入数据。L0计算任务可以生成0.3个单位大小的输出数据。L1(神经网络层1)计算任务可以接收L0计算任务的(0.3个单位大小的)输出数据和0.25个单位大小的权重作为输入数据。进一步地,L2(神经网络层2)计算任务可以接收L1计算任务的(0.2个单位大小的)输出数据和0.1个单位大小的权重作为输入数据。此外,L2计算任务可以生成0.1个单位大小的输出数据。
图7B展示了调度操作702。在操作702中,调度器确定用于L2计算的第一批次大小。为了支持针对C-1、C-2、C-3和C-4的并发L2计算,状态缓冲器需要具有用于存储并发L2计算的输入数据和输出数据的容量。输入数据包含四个上下文的L1输出数据,其中总大小为0.8个单位(0.2×4)并且共享权重为0.1个单位,而输出数据大小为0.4个单位(0.1×4)。所需容量为低于状态缓冲器的容量(2个单位)的1.3个单位(0.8+0.4+0.1)。基于此,调度器可以包含要在时间T1处执行的第一执行批次中的所有四个上下文的L2计算任务。
图7C和7D展示了调度操作704。在操作704中,调度器确定是否可以在第二执行批次中执行四个上下文的L1计算。调度器可以确定状态缓冲器是否具有用于存储所有四个上下文的并发L1计算的输入数据和输出数据的容量。参考图7C,输入数据包含四个上下文的L0输出数据,其中总大小为1.2个单位(0.3×4)并且共享权重为0.25个单位,而输出数据大小为0.8个单位(0.2×4)。所需容量为超过状态缓冲器的容量的2.25个单位(1.2+0.8+0.25)。基于此确定,调度器可以将L1计算分成多于一个执行批次。例如,调度器可以基于状态缓冲器具有足够的容量来存储所述执行批次中的多个L1计算任务的输入数据和输出数据以及更早的执行批次的L1计算任务的输出数据来确定可以包含于执行批次中的多个L1计算任务。
作为说明性实例,参考图7D,调度器可以确定包括针对C-2和C-3的L1计算任务的第二执行批次和包括针对C-1和C-2的L1计算任务的第三执行批次。第三执行批次将在第二执行批次之前执行。第二执行批次的总输入和输出数据大小可以为1.25个单位(0.2×2+0.3×2+0.25),而第三执行批次的输出数据大小为0.4个单位(0.2×2)。基于总数据大小(1.65个单位)小于状态缓冲器的容量,调度器在时间T2处调度第二执行批次并且在时间T3处调度第三执行批次。
图7E和7F展示了调度操作706。在操作706中,调度器确定是否可以将针对C-2和C-3的L0计算(用于为第二执行批次提供输入数据)并行执行为单个批次。参考图7E,为了支持要在时间T1和T2之间执行的针对C-2和C-3的并行L0计算(以避免状态缓冲器必须存储针对C-1、C-2、C-3和C-4的L0计算的输出),状态缓冲器需要存储针对C-2和C-3的并行L0计算的输入数据和输出数据以及第三执行批次的输出数据。针对C-2和C-3的L0计算的总输入和输出数据大小为1.9个单位(0.5×2+0.3×2+0.3),而第三执行批次的输出数据大小为0.4个单位。基于总数据大小(2.3个单位)超过状态缓冲器的容量,调度器确定将L0计算分成两个批次。例如,参考图7F,调度器可以确定包括针对C-4的L0计算的第四执行批次和包括针对C-3的L0计算的第五执行批次。调度器还可以确定状态缓冲器具有足够的容量来存储第四执行批次(其中数据大小为1.3个单位)的输入数据和输出数据、第五执行批次(其中数据大小为0.3个单位)的输出数据以及第三执行批次(其中数据大小为0.4个单位)的输出数据,所有所述执行批次的组合数据大小为2个单位。调度器然后可以在时间T4处调度第四执行批次并且在时间T5处调度第五执行批次。
图7G展示了调度操作708。在操作708中,调度器确定是否可以将针对C-1和C-2的L0计算(用于为第三执行批次提供输入数据)并行执行为单个批次。参考图7G,为了支持要在操作702到706中确定的执行批次之前执行的针对C-1和C-2的并行L0计算,状态缓冲器需要存储针对C-l和C-2的并行L0计算的输入数据和输出数据。针对C-1和C-2的L0计算的总输入和输出数据大小为1.9个单位(0.5×2+0.3×2+0.3),所述总输入和输出数据大小低于状态缓冲器的容量。调度器然后可以包含第六执行批次中的针对C-1和C-2的L0计算,并且在T6处调度第六执行批次。
图8展示了用于在与存储器装置(例如,状态缓冲器322)耦合的计算引擎(例如,计算引擎324)处调度操作的过程800的示例流程图。所述过程可以由上文所描述的各种系统(例如,神经网络处理器302的调度器模块332)实施。
在操作802处,调度器模块可以确定要执行的一组计算任务,所述一组计算任务包含第一计算任务、第二计算任务、第三计算任务和第四计算任务,其中第三计算任务和第四任务分别生成第一计算任务的输入数据和第二计算任务的输入数据。
在操作804处,调度模块可以基于状态缓冲器具有足够的容量来保持第一计算任务和第二计算任务两者的输入数据和输出数据来确定包括第一计算任务和第二计算任务的第一执行批次。
在操作806处,调度模块可以确定存储器装置是否具有足够的容量来保持第三计算任务和第四计算任务两者的输入数据和输出数据。如果存储器装置具有足够的容量来保持第三计算任务和第四计算任务两者的输入数据和输出数据(操作808处),则调度模块可以确定包括第三计算任务和第四计算任务的第二执行批次,并且在操作810处调度要在第一执行批次之前执行的第二执行批次。
另一方面,如果存储器装置没有足够的容量来保持第三计算任务和第四计算任务两者的输入数据和输出数据(操作808处),但具有足够的容量来保持第三计算任务的输出数据和第四计算任务的输入数据和输出数据(操作812处),则调度模块可以在操作814处确定包括第三计算任务的第三执行批次。调度模块还可以在操作816处确定包括第四计算任务的第四执行批次。调度模块可以调度首先要执行的第三执行批次、然后调度第四执行批次,之后调度第一执行批次。
在示例过程800中,第一计算任务和第二计算任务可以是分别用于第一上下文和第二上下文的第二神经网络层计算任务。此外,第三计算任务和第四计算任务可以是分别用于第一上下文和第二上下文的第一神经网络层计算任务。
图9展示了计算装置900的实例。计算装置900的功能和/或若干个组件可以不受限制地与本公开中其它地方公开的其它实施例一起使用,而不受限制。计算装置900可以执行计算以促进任务的处理。作为说明性实例,计算装置900可以是多租户计算服务系统中的服务器的一部分。可以根据要求将计算装置900的各种硬件和软件资源(例如,与图像识别服务提供相关联的硬件和软件资源)分配给客户端。
在一个实例中,计算装置900可以包含处理逻辑902、总线接口模块908、存储器910和网络接口模块912。这些模块可以是硬件模块、软件模块或硬件和软件的组合。在某些实例中,在不脱离本公开的范围的情况下,模块可以与组件或引擎可互换使用。计算装置900可以包含此处未展示的另外的模块。在一些实施方案中,计算装置900可以包含较少模块。在一些实施方案中,模块中的一个或多个模块可以组合成一个模块。模块中的一个或多个模块可以通过通信信道914彼此通信。通信信道914可以包含一个或多个总线、网格、矩阵、构造、这些通信信道的组合或一些其它合适的通信信道。
处理逻辑902可以包含一个或多个集成电路,所述一个或多个集成电路可以包含专用集成电路(ASIC)、现场可编程门阵列(FPGA)、片上系统(SoC)、网络处理单元(NPU)、被配置成执行指令的处理器或被配置成执行逻辑算术和浮点运算的任何其它电路系统。可以包含于处理逻辑1102中的处理器的实例可以包含由 等开发的处理器。在某些实施方案中,处理器可以包含多个处理核,其中每个处理核可以被配置成独立于其它处理核来执行指令。此外,在某些实施方案中,每个处理器或处理核可以实施在同一处理器或处理核上执行指令的多个处理线程,同时保持多个处理线程之间的逻辑分离。在处理器或处理核上执行的此类处理线程可以作为单独的逻辑处理器或处理核暴露于软件。在一些实施方案中,多个处理器、多个处理核或在同一核上执行的多个处理线程可以共享某些资源,例如,总线、1级(L1)缓存和/或2级(L2)缓存。可以将由处理逻辑902执行的指令例如以计算机程序的形式存储于计算机可读存储介质上。计算机可读存储介质可以是非暂时性的。在一些情况下,计算机可读介质可以是存储器910的一部分。处理逻辑902还可以包含用于执行人工神经网络计算的硬件电路系统,所述硬件电路系统包含例如SoC 302等。
可以向客户端授予对处理逻辑902的访问,以提供由客户端请求的个人助理服务。例如,计算装置900可以托管虚拟机,在所述虚拟机上可以执行图像识别软件应用程序。图像识别软件应用程序在被执行时可以访问处理逻辑902,以预测例如图像中包含的对象。作为另一个实例,对处理逻辑902的访问也可以被授予作为裸机实例的一部分,在裸机实例中,在客户端装置(例如,远程计算机、智能手机等)上执行的图像识别软件应用程序可以直接访问处理逻辑902来执行图像的识别。
存储器910可以包含易失性或非易失性类型的存储器,或者易失性和非易失性类型的存储器两者。存储器910可以例如包含随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、闪存和/或一些其它合适的存储介质。在一些情况下,存储器910中的一些或全部存储器可以位于计算装置900内部,而在其它情况下,存储器中的一些或全部存储器可以位于计算装置900外部。存储器910可以存储包括可执行指令的操作系统,所述可执行指令在由处理逻辑902执行时提供用于执行为计算装置900提供联网功能的指令的执行环境。存储器910还可以存储例如用于执行人工神经网络计算的软件应用程序。例如,存储器910可以存储与上述等式1-4的计算相关的软件例程。在处理逻辑902呈FPGA形式的情况下,存储器910可以存储表示处理逻辑902的各种逻辑电路组件的网表数据。
总线接口模块908可以实现通过外部通信介质与外部实体如主机装置和/或计算系统中的其它组件进行通信。总线接口模块908可以包含用于连接到电缆、插座、端口或到外部通信介质的其它连接的物理接口。总线接口模块908可以进一步包含用于管理传入和传出交易的硬件和/或软件。总线接口模块908可以实施本地总线协议,如基于外围组件互连(PCI)的协议、非易失性存储器快速(NVMe)、高级主机控制器接口(AHCI)、小型计算机系统接口(SCSI)、串行连接的SCSI(SAS)、串行AT附件(SATA)、并行ATA(PATA)、一些其它标准总线协议或专有总线协议。总线接口模块908可以包含用于这些总线协议中的任何总线协议的物理层,包含连接器、电源管理和错误处理等。在一些实施方案中,计算装置900可以包含用于与多个外部实体通信的多个总线接口模块。这些多个总线接口模块可以实施相同的本地总线协议、不同的本地总线协议或者相同和不同总线协议的组合。
网络接口模块912可以包含用于与网络通信的硬件和/或软件。此网络接口模块912可以包含例如用于有线连接到网络的物理连接器或物理端口,和/或用于无线通信到网络的天线。网络接口模块912可以进一步包含被配置成实施网络协议栈的硬件和/或软件。网络接口模块912可以使用网络协议与网络通信,所述网络协议例如TCP/IP、无限带宽、RoCE、电气和电子工程师协会(IEEE)802.11无线协议、用户数据报协议(UDP)、异步传输模式(ATM)、令牌环、帧中继、高级数据链路控制(HDLC)、光纤分布式数据接口(FDDI)和/或点对点协议(PPP)等。在一些实施方案中,计算装置900可以包含多个网络接口模块,每个网络接口模块被配置成与不同的网络通信。例如,在这些实施方案中,计算装置900可以包含用于与有线以太网、无线802.11网络、蜂窝网络、无限带宽网络等通信的网络接口模块。在一些实施方案中,计算装置900可以通过网络接口模块912从服务器接收一组参数,如用于生成遗忘门因子、输入因子、输出因子等的前述权重向量。
上述计算装置900的各种组件和模块可以实施为分立组件、片上系统(SoC)、ASIC、NPU、FPGA或其任何组合。在一些实施例中,SoC或其它组件可以通信地耦合到另一个计算系统以提供各种服务,如流量监测、流量整形、计算等。在所述技术的一些实施例中,SoC或其它组件可以包含如本文公开的多个子系统。
本文描述的模块可以是软件模块、硬件模块或其合适的组合。如果模块是软件模块,则模块可以体现在非暂时性计算机可读介质上并且由本文描述的计算机系统中的任何计算机系统中的处理器处理。应当注意的是,所描述的过程和架构可以在任何用户交互之前实时执行或者以异步模式执行。可以按照图9中建议的方式配置模块,和/或本文描述的功能可以由作为单独的模块存在的一个或多个模块提供,和/或本文描述的模块功能可以遍布于多个模块之上。
因此,说明书和附图应被视为说明性的,而不是限制性的。然而,显而易见的是,在不脱离权利要求中所阐述的本公开的更广泛的精神和范围的情况下,可以对其进行各种修改和改变。
其它变型处于本公开的精神内。因此,虽然所公开的技术易于进行各种修改和替代构造,但是其某些展示的实施例在附图中示出并且已经在上文中进行了详细描述。然而,应该理解的是,并非旨在将本公开限制于所公开的一种或多种特定形式,而是相反,其目的在于涵盖落在如所附权利要求限定的本公开的精神和范围内的所有修改、替代构造和等同物。
通过以下条款描述一些示例实施例:
1.一种在多层神经网络中处理多个数据集的方法,所述多层神经网络包括第一神经网络层、第二神经网络层和第三神经网络层,所述第二神经网络层处理由所述第一神经网络层生成的输出,所述第三网络层处理由所述第二神经网络层生成的输出,所述方法包括:
将第一数据集存储于存储器中;
使用所述第一神经网络层处理来自存储器的第一数据集以生成所述第一数据集的第一层输出;
将所述第一数据集的所述第一层输出存储于所述存储器中;从所述存储器中去除所述第一数据集;
将第二数据集添加到所述第一数据集的存储于所述存储器中的所述第一层输出中;
使用所述第一神经网络层处理来自所述存储器的所述第二数据集以生成所述第二数据集的第一层输出;
将所述第二数据集的所述第一层输出添加到所述第一数据集的存储于所述存储器中的所述第一层输出中;
从所述存储器中去除所述第二数据集;
使用所述第二神经网络层处理来自所述存储器的所述第一数据集的所述第一层输出和所述第二数据集的所述第一层输出以分别生成所述第一数据集的第二层输出和所述第二数据集的第二层输出;
将所述第一数据集的所述第二层输出和所述第二数据集的所述第二层输出存储于所述存储器中;
从所述存储器中去除所述第一数据集的所述第一层输出和所述第二数据集的所述第一层输出;
将第三数据集添加到存储在所述存储器中的所述第一数据集的所述第二层输出和所述第二数据集的所述第二层输出中;
在生成所述第一数据集的所述第二层输出和所述第二数据集的所述第二层输出之后使用所述第一神经网络层处理来自所述存储器的所述第三数据集以生成所述第三数据集的第一层输出;
将所述第三数据集的所述第一层输出存储于所述存储器中;从所述存储器中去除所述第三数据集;
将第四数据集添加到存储在所述存储器中的所述第一数据集的所述第二层输出、所述第二数据集的所述第二层输出以及所述第三数据集的所述第一层输出中;
使用所述第一神经网络层处理来自所述存储器的所述第四数据集以生成所述第四数据集的第一层输出;
将所述第四数据集的所述第一层输出添加到存储在所述存储器中的所述第三数据集的所述第一层输出、所述第一数据集的所述第二层输出以及所述第二数据集的所述第二层输出中;
从所述存储器中去除所述第四数据集;
使用所述第二神经网络层处理所述第三数据集的所述第一层输出和所述第四数据集的所述第一层输出以分别生成所述第三数据集的第二层输出和所述第四数据集的第二层输出;
将所述第三数据集的所述第二层输出和所述第四数据集的所述第二层输出添加到存储在所述存储器中的所述第一数据集的所述第二层输出和所述第二数据集的所述第二层输出中;以及
使用所述第三神经网络层处理来自所述存储器的所述第一数据集的所述第二层输出、所述第二数据集的所述第二层输出、所述第三数据集的所述第二层输出以及所述第四数据集的所述第二层数据以分别生成所述第一数据集的第三层输出、所述第二数据集的第三层输出、所述第三数据集的第三层输出以及所述第四数据集的第三层输出;以及
将所述第一数据集的所述第三层输出、所述第二数据集的所述第三层输出、所述第三数据集的所述第三层输出以及所述第四数据集的所述第三层输出存储于所述存储器中。
2.根据条款1所述的方法,其中所述第一数据集的所述第二层输出和所述第二数据集的所述第二层输出通过至少覆写所述第一数据集的存储于所述存储器中的所述第一层输出而存储于所述存储器中。
3.根据任一前述条款所述的方法,其进一步包括控制所述存储器以提供用于同时存储所述第四数据集、所述第四数据集的所述第一层输出、所述第三数据集的所述第一层输出、所述第一数据集的所述第二层输出以及所述第二数据集的所述第二层输出的空间。
4.根据任一前述条款所述的方法,其中所述第一数据集的所述第一层输出的数据大小大于所述第一数据集的所述第二层输出的数据大小,并且所述第一数据集的所述第二层输出的所述数据大小大于所述第一数据集的所述第三层输出的数据大小。
5.一种处理数据的方法,其包括:
将计算引擎设置成第一配置以实施神经网络的第一层;
使用呈所述第一配置的所述计算引擎处理与第一上下文有关的第一数据以生成所述第一上下文的第一层输出;
将所述计算引擎设置成第二配置以实施所述神经网络的第二层;
使用呈所述第二配置的所述计算引擎处理所述第一上下文的所述第一层输出以生成所述第一上下文的第二层输出;
使所述计算引擎从所述第二配置切换回到所述第一配置;
使用呈所述第一配置的所述计算引擎处理与第二上下文有关的第二数据以生成所述第二上下文的第一层输出;
将所述计算引擎设置回到所述第二配置以实施所述神经网络的所述第二层;
以所述第二配置处理所述第二上下文的所述第一层输出以生成所述第二上下文的第二层输出;
将所述计算引擎设置成第三配置以实施所述神经网络的第三层;以及
使用呈所述第三配置的所述计算引擎处理所述第一上下文的所述第二层输出和所述第二上下文的所述第二层输出以生成所述第一上下文的第三层输出和所述第二上下文的第三层输出。
6.根据条款5所述的方法,其进一步包括:
使用呈所述第一配置的所述计算引擎处理与第三上下文有关的第三数据以生成所述第三上下文的第一层输出;以及
使用呈所述第二配置的所述计算引擎处理所述第三上下文的所述第一层输出和所述第一上下文的所述第一层输出以分别生成所述第三上下文的第二层输出和所述第一上下文的所述第二层输出。
7.根据条款6所述的方法,其进一步包括:
将所述第一上下文的所述第一层输出和所述第三上下文的所述第一层输出存储于存储器装置中;
配置所述计算引擎的第一部分以从所述存储器装置接收所述第一上下文的所述第一层输出作为输入;
配置所述计算引擎的第二部分以从所述存储器装置接收所述第三上下文的所述第一层输出作为输入;
使用所述计算引擎的所述第一部分处理所述第一上下文的所述第一层输出;以及
使用所述计算引擎的所述第二部分处理所述第三上下文的所述第一层输出。
8.根据条款7所述的方法,其中所述使用所述计算引擎的所述第一部分处理所述第一上下文的所述第一层输出和所述使用所述计算引擎的所述第二部分处理所述第三上下文的所述第一层输出是并行执行的。
9.根据条款5到8中任一项所述的方法,其进一步包括:
使用呈所述第一配置的所述计算引擎处理与第四上下文有关的第四数据以生成所述第四上下文的第一层输出;以及
使用呈所述第二配置的所述计算引擎处理所述第二上下文的所述第一层输出和所述第四上下文的所述第一层输出以分别生成所述第二上下文的所述第二层输出和所述第四上下文的第二层输出。
10.根据条款9所述的方法,其进一步包括:
将所述第二上下文的所述第一层输出和所述第四上下文的所述第一层输出存储于存储器装置中;
配置所述计算引擎的第一部分以从所述存储器装置接收所述第二上下文的所述第一层输出作为输入;
配置所述计算引擎的第二部分以从所述存储器装置接收所述第四上下文的所述第一层输出作为输入;
使用所述计算引擎的所述第一部分处理所述第二上下文的所述第一层输出;以及
使用所述计算引擎的所述第二部分处理所述第四上下文的所述第一层输出。
11.根据条款10所述的方法,其中所述使用所述计算引擎的所述第一部分处理所述第二上下文的所述第一层输出和所述使用所述计算引擎的所述第二部分处理所述第四上下文的所述第一层输出是基本上并行执行的。
12.根据条款5到11中任一项所述的方法,其进一步包括:
在存储器装置处存储所述第一上下文的所述第二层输出;
除了所述第一上下文的所述第二层输出之外,还在所述存储器装置处存储与所述第二上下文有关的所述第二数据;以及
除了所述第一上下文的所述第二层输出和与所述第二上下文有关的所述第二数据之外,还在所述存储器装置处存储所述第二上下文的所述第一层输出。
13.根据条款12所述的方法,其进一步包括:
用所述第二上下文的所述第二层输出覆写存储在所述存储器装置处的与所述第二上下文有关的所述第二数据或所述第二上下文的所述第一层输出的至少一部分。
14.根据条款13所述的方法,其进一步包括:
配置所述计算引擎的第三部分以从所述存储器装置接收所述第一上下文的所述第二层输出作为输入;
配置所述计算引擎的第四部分以从所述存储器装置接收所述第二上下文的所述第二层输出作为输入;
使用所述计算引擎的所述第三部分处理所述第一上下文的所述第二层输出;以及
使用所述计算引擎的所述第四部分处理所述第二上下文的所述第二层输出。
15.根据条款14所述的方法,其中所述使用所述计算引擎的所述第三部分处理所述第一上下文的所述第二层输出和所述使用所述计算引擎的所述第四部分处理所述第二上下文的所述第二层输出是基本上并行执行的。
16.根据条款5到15中任一项所述的方法,其中使用呈所述第一配置的所述计算引擎处理与所述第一上下文有关的所述第一数据以生成所述第一上下文的所述第一层输出包括:
在所述第一数据和与所述神经网络的所述第一层相关联的一组权重之间执行一个或多个卷积计算。
17.根据条款16所述的方法,其进一步包括:
由激活功能引擎处理所述一个或多个卷积计算的结果以生成所述第一上下文的所述第一层输出。
18.一种集成电路,其包括:
存储器装置,所述存储器装置被配置为状态缓冲器;以及
计算引擎,所述计算引擎与所述存储器装置耦合并且包括处理元件阵列,所述处理元件阵列中的每个处理元件包括加法器和乘法器;
其中所述计算引擎被配置成:
从所述状态缓冲器获得与神经网络的第二层相关联的第一组权重;
在所述第一组权重与第一数据之间执行第一组加法和乘法以生成所述第一数据的第二层输出;
在生成所述第一数据的所述第二层输出之后从所述状态缓冲器获得与所述神经网络的第一层相关联的第二组权重;
在所述第二组权重与第二数据之间执行第二组加法和乘法以生成所述第二数据的第一层输出;
在所述第一组权重与所述第二数据的所述第一层输出之间执行第三组加法和乘法以生成所述第二数据的第二层输出;
从所述状态缓冲器获得与所述神经网络的第三层相关联的第三组权重;
在所述第三组权重与所述第一数据的所述第二层输出之间执行第四组加法和乘法以生成处理所述第一数据的第一结果;并且
在所述第三组权重与所述第二数据的所述第二层输出之间执行第五组加法和乘法以生成处理所述第二数据的第二结果;
其中所述第四组加法和乘法以及所述第五组加法和乘法由所述处理元件阵列的不同部分执行。
19.根据条款18所述的集成电路,其中所述计算引擎被进一步配置成:
将所述第一数据的所述第二层输出存储在所述状态缓冲器处;并且
在从所述状态缓冲器获得的所述第三组权重与所述第一数据的所述第二层输出之间执行所述第四组加法和乘法。
20.根据条款18或18所述的集成电路,其中所述计算引擎被配置成基本上并行执行所述第四组加法和乘法以及所述第五组加法和乘法。
21.一种方法,其包括:
确定用于执行对第一上下文和第二上下文的神经网络计算的调度,其中对每个上下文执行神经网络计算包括针对相应上下文执行一系列计算任务,每系列计算任务包含使用第一神经网络层的第一计算任务、使用第二神经网络层的第二计算任务以及使用第三神经网络层的第三计算任务,一个上下文的所述第三计算任务被配置成处理所述一个上下文的所述第二计算任务的输出,并且所述一个上下文的所述第二计算任务被配置成处理所述第一上下文的所述第一计算任务的输出;
其中确定所述调度包括:
确定包括所述第一上下文的所述第三计算任务和所述第二上下文的所述第三计算任务的第一执行批次,其中所述第一执行批次是基于状态缓冲器具有足够的容量来保持所述第一上下文和所述第二上下文的所述第三计算任务的输入数据和输出数据而确定的;
确定所述状态缓冲器是否具有足够的容量来保持所述第一上下文和所述第二上下文的所述第二计算任务的输入数据和输出数据;
响应于确定所述状态缓冲器没有足够的容量来保持所述第一上下文和所述第二上下文的所述第二计算任务的输入数据和输出数据而:
确定要在所述第一执行批次之前执行的第二执行批次和要在所述第二执行批次之前执行的第三执行批次,所述第二执行批次包括所述第一上下文的所述第二计算任务,所述第三执行批次包括所述第二上下文的所述第二计算任务,其中所述第二执行批次和所述第三执行批次是基于所述状态缓冲器具有足够的容量来保持所述第二上下文的所述第二计算任务的输出数据以及所述第一上下文的所述第二计算任务的输入数据和输出数据而确定的;以及
确定要在所述第二执行批次之前执行的第四执行批次,所述第四执行批次包括所述第一上下文的所述第一计算任务,其中所述第四执行批次是基于所述状态缓冲器具有足够的容量来保持所述第一上下文的所述第一计算任务的输入数据和输出数据以及所述第二上下文的所述第二计算任务的所述输出数据而确定的;
执行所述第三执行批次;
在所述第三执行批次之后执行所述第四执行批次;
在所述第四执行批次之后执行所述第二执行批次;以及
在所述第二执行批次之后执行所述第一执行批次。
22.根据条款21所述的方法,其进一步包括:
确定所述状态缓冲器是否具有足够的容量来保持除了所述第一上下文和所述第二上下文的所述第二计算任务的所述输入数据和输出数据之外的所述第一上下文和所述第二上下文的所述第二计算任务的一组权重,
其中确定要在所述第一执行批次之前执行的第二执行批次和要在所述第二执行批次之前执行的第三执行批次是基于所述状态缓冲器没有足够的容量来保持所述第一上下文和所述第二上下文的所述第二计算任务的所述一组权重、所述输入数据和所述输出数据。
23.根据条款21或22所述的方法,其进一步包括:
最大化要包含在所述第二执行批次中的第一数量的第二计算任务和要包含在所述第三执行批次中的第二数量的第二计算任务,使得在执行所述第二执行批次时,所述第一数量的第二计算任务的输入数据和输出数据和所述第二数量的第二计算任务的输出数据的组合数据大小低于所述状态缓冲器的容量。
24.根据条款21到23中任一项所述的方法,其进一步包括:
确定在所述第三执行批次之前执行的第五执行批次,所述第三执行批次包括所述第二上下文的所述第一计算任务,其中所述第五执行批次是基于所述状态缓冲器具有足够的容量来容纳所述第二上下文的所述第一计算任务的输入数据和输出数据而被确定的;以及
在所述第三执行批次之前执行所述第五执行批次。
25.一种方法,其包括:
确定要执行的一组计算任务,所述一组计算任务包含第一计算任务、第二计算任务、第三计算任务和第四计算任务,其中所述第三计算任务和所述第四计算任务分别生成所述第一计算任务的输入数据和所述第二计算任务的输入数据;
基于存储器装置具有足够的容量来保持所述第一计算任务和所述第二计算任务两者的数据输入和输出数据来确定包括所述第一计算任务和所述第二计算任务的第一执行批次;
确定要在所述第一执行批次之前执行的至少包括所述第三计算任务的第二执行批次;
基于所述存储器装置是否具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据来确定是否在所述第二执行批次中包含所述第四计算任务;
执行所述第二执行批次;以及
在所述第二执行批次之后执行所述第一执行批次。
26.根据条款25所述的方法,其中确定所述第二执行批次包括:
确定所述存储器装置没有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据但是具有足够的容量来保持所述第三计算任务的输入数据和输出数据和所述第四计算任务的所述输出数据;
确定包括所述第三计算任务的所述第二执行批次;以及
确定要在所述第二执行批次之前执行的包括所述第四计算任务的第三执行批次;并且所述方法进一步包括,
在所述第二执行批次之前执行所述第三执行批次。
27.根据条款26所述的方法,其中所述一组计算任务进一步包括用于分别生成所述第三计算任务的输入数据和所述第四计算任务的输入数据的第五计算任务和第六计算任务;
其中所述方法进一步包括:
确定包括所述第五计算任务的第四执行批次;
确定包括所述第六计算任务的第五执行批次;
在所述第二执行批次之前执行所述第四执行批次;以及
在所述第三执行批次之前执行所述第五执行批次。
28.根据条款27所述的方法,其进一步包括:
基于确定以下而确定要在所述第三执行批次与所述第二执行批次之间执行所述第四执行批次:所述存储器装置没有足够的容量来存储所述第五计算任务的所述输出数据、所述第六计算任务的所述输出数据以及所述第四计算任务的所述输入数据和输出数据和所述存储器装置具有足够的容量来存储所述第四计算任务的所述输出数据和所述第五计算任务的所述输入数据和输出数据。
29.根据条款27或28所述的方法,其进一步包括:
基于确定所述存储器装置具有足够的容量来存储所述第五计算任务的所述输出数据、所述第六计算任务的所述输出数据以及所述第四计算任务的所述输入数据和输出数据来确定要在所述第三执行批次之前和所述第二执行批次之前执行的所述第四执行批次。
30.根据条款25到29中任一项所述的方法,其中确定所述第二执行批次
包括:
基于确定所述存储器装置具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据来确定包括所述第三计算任务和所述第四计算任务的所述第二执行批次。
31.根据条款30所述的方法,其中所述一组计算任务进一步包括用于分别生成所述第三计算任务的输入数据和所述第四计算任务的输入数据的第五计算任务和第六计算任务;
其中所述方法进一步包括:
基于所述存储器装置是否具有足够的容量来保持所述第五计算任务和所述第六计算任务两者的输入数据和输出数据来确定第三执行批次;以及
在所述第二执行批次之前执行所述第三执行批次。
32.根据条款31所述的方法,其中确定所述第三执行批次包括:
确定所述存储器装置没有足够的容量来存储所述第五计算任务和所述第六计算任务两者的所述输入数据和所述输出数据但是具有足够的容量来存储所述第五计算任务的所述输入数据和所述输出数据以及所述第六计算任务的所述输出数据;
确定包括所述第五计算任务的所述第三执行批次;以及
确定要在所述第三执行批次之前执行的包括所述第六计算任务的第四执行批次;并且其中所述方法进一步包括,
执行所述第四执行批次。
33.根据条款31或32所述的方法,其中确定所述第三执行批次包括:
确定所述存储器装置具有足够的容量来存储所述第五计算任务和所述第六计算任务两者的所述输入数据和所述输出数据;以及
确定包括所述第五计算任务和所述第六计算任务的所述第三执行批次。
34.根据条款25到33中任一项所述的方法,其中执行所述第二执行批次包括基本上并行执行所述第一计算任务和所述第二计算任务。
35.根据条款25到34中任一项所述的方法,其中所述第一计算任务和所述第三计算任务用于处理与第一上下文相关联的第一数据;并且其中所述第二计算任务和所述第四计算任务用于处理与第二上下文相关联的第二数据。
36.根据条款25到35中任一项所述的方法,其中所述第三计算任务和所述第四计算任务与第一神经网络层的计算相关联;并且其中所述第一计算任务和所述第二计算任务与处理来自所述第一神经网络层的数据的第二神经网络层的计算相关联。
37.一种集成电路,其包括:
存储器装置,所述存储器装置被配置为状态缓冲器;以及
计算引擎,所述计算引擎与所述存储器装置耦合;
控制器,所述控制器被配置成:
确定要在所述计算引擎处执行的一组计算任务,所述一组计算任务包含第一计算任务、第二计算任务、第三计算任务和第四计算任务,其中所述第三计算任务和所述第四任务分别生成所述第一计算任务的输入数据和所述第二计算任务的输入数据;
基于所述存储器装置具有足够的容量来保持所述第一计算任务和所述第二计算任务两者的输入数据和输出数据来确定包括所述第一计算任务和所述第二计算任务的第一执行批次;
基于所述存储器装置是否具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据来确定要在所述第一执行批次之前执行的第二执行批次;
在所述计算引擎处执行所述第二执行批次;并且
在完成执行所述第二执行批次之后在所述计算引擎处执行所述第一执行批次。
38.根据条款37所述的集成电路,其中所述控制器被进一步配置成:
确定所述存储器装置没有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据但是具有足够的容量来保持所述第三计算任务的输入数据和输出数据和所述第四计算任务的所述输出数据;
确定所述第二执行批次包括所述第三计算任务;
确定要在所述第二执行批次之前执行的包括所述第四计算任务的第三执行批次;
在所述存储器装置处将第一存储器空间分配用于存储所述第四计算任务的所述输入数据,并且在所述存储器装置处将第二存储器空间分配用于存储所述第四计算任务的所述输出数据;
在所述计算引擎处通过以下来执行所述第三执行批次:控制所述计算引擎从所述第一存储器空间读取所述第四计算任务的所述输入数据并且在所述第二存储器空间处存储所述第四计算任务的所述输出数据;并且
在在所述计算引擎处执行所述第二执行批次期间将所述第四计算任务的所述输出数据存储在所述存储器装置处。
39.根据条款38所述的集成电路,其中所述一组计算任务进一步包括用于分别生成所述第三计算任务的输入数据和所述第四计算任务的输入数据的第五计算任务和第六计算任务;
其中所述控制器被进一步配置成:
确定包括所述第五计算任务的第四执行批次;
确定包括所述第六计算任务的第五执行批次;
在执行所述第二执行批次之前在所述计算引擎处执行所述第四执行批次;并且
在执行所述第三执行批次之前在所述计算引擎处执行所述第五执行批次。
40.根据条款39所述的集成电路,其中所述第一计算任务、所述第三计算任务以及所述第五计算任务分别与第一上下文的神经网络模型的第三神经网络层计算、第二神经网络层计算以及第一神经网络层计算相关联;并且
其中所述第二计算任务、所述第四计算任务以及所述第六计算任务分别与第二上下文的神经网络模型的第三神经网络层计算、第二神经网络层计算以及第一神经网络层计算相关联。
除非本文中另有指示或与上下文明显相悖,否则在描述所公开的实施例的上下文中(特别是在以下权利要求的上下文中)使用的术语“一个/一种(a/an)”和“所述(the)”以及类似的指代词应被解释为涵盖单数和复数两者。术语“包括”、“具有”、“包含”以及“含有”应被解释为开放式术语(即,意指“包含但不限于”),除非另有指明。术语“连接”应被解释为部分或全部地包含在内、附接到或接合在一起,甚至是在存在中间物的情况下也是如此。除非本文中另外指明,否则对本文中值范围的叙述仅旨在用作单独地提及落入所述范围的每个单独值的速记方法,并且每个单独值结合到本说明书中,如同在本文中单独地叙述一样。除非本文中另外指明或明显与上下文相矛盾,否则本文所述的所有方法均可以以任何合适的次序进行。除非另外声明,否则本文提供的任何和所有实例或示例性语言(例如,“如”)的使用仅旨在更好地阐明本公开的实施例,并且不对本公开的范围构成限制。本说明书中的任何语言都不应被解释为将任何未要求保护的元件指示为是实践本公开所必须的。
除非另有明确说明,否则如短语“X、Y或Z中的至少一个”等反义连接语言旨在在通常用于呈现项目、术语等的上下文中进行理解,其可以为X、Y或Z或其任意组合(例如,X、Y和/或Z)。因此,这种反义连接语言通常不旨在并且也不应该暗示某些实施例要求X中的至少一个、Y中的至少一个或Z中的至少一个各自都存在。
本文中描述了本公开的各种实施例,包含诸位发明人已知的用于实施本公开的最佳模式。在阅读上述描述后,对本领域的普通技术人员而言,那些实施例的变化可能变得显而易见。诸位发明人预期技术人员在适当时采用这些变型,并且诸位发明人旨在使本公开以与本文具体描述的方式不同的方式来进行实践。因此,在适用法律允许的情况下,本公开包含所附权利要求中所述的主题的所有修改和等效物。此外,除非本文另有说明或者以其它方式与上下文明显矛盾,否则本公开涵盖上述要素在其所有可能变型中的任何组合。
Claims (38)
1.一种方法,包括:
确定用于执行对第一上下文和第二上下文的神经网络计算的调度,其中对每个上下文执行神经网络计算包括针对相应上下文执行一系列计算任务,每系列计算任务包含使用第一神经网络层的第一计算任务、使用第二神经网络层的第二计算任务以及使用第三神经网络层的第三计算任务,一个上下文的所述第三计算任务被配置成处理所述一个上下文的所述第二计算任务的输出,并且所述一个上下文的所述第二计算任务被配置成处理所述一个上下文的所述第一计算任务的输出;
其中,确定所述调度包括:
确定包括所述第一上下文的所述第三计算任务和所述第二上下文的所述第三计算任务的第一执行批次,其中所述第一执行批次是基于状态缓冲器具有足够的容量来保持所述第一上下文和所述第二上下文的所述第三计算任务的输入数据和输出数据而确定的;
确定所述状态缓冲器是否具有足够的容量来保持所述第一上下文和所述第二上下文的所述第二计算任务的输入数据和输出数据;
响应于确定所述状态缓冲器没有足够的容量来保持所述第一上下文和所述第二上下文的所述第二计算任务的输入数据和输出数据而:
确定要在所述第一执行批次之前执行的第二执行批次和要在所述第二执行批次之前执行的第三执行批次,所述第二执行批次包括所述第一上下文的所述第二计算任务,所述第三执行批次包括所述第二上下文的所述第二计算任务,其中所述第二执行批次和所述第三执行批次是基于所述状态缓冲器具有足够的容量来保持所述第二上下文的所述第二计算任务的输出数据以及所述第一上下文的所述第二计算任务的输入数据和输出数据而确定的;以及
确定要在所述第二执行批次之前执行的第四执行批次,所述第四执行批次包括所述第一上下文的所述第一计算任务,其中所述第四执行批次是基于所述状态缓冲器具有足够的容量来保持所述第一上下文的所述第一计算任务的输入数据和输出数据以及所述第二上下文的所述第二计算任务的所述输出数据而确定的;
执行所述第三执行批次;
在所述第三执行批次之后执行所述第四执行批次;
在所述第四执行批次之后执行所述第二执行批次;以及
在所述第二执行批次之后执行所述第一执行批次。
2.如权利要求1所述的方法,还包括:
确定所述状态缓冲器是否具有足够的容量来保持除了所述第一上下文和所述第二上下文的所述第二计算任务的所述输入数据和输出数据之外的、所述第一上下文和所述第二上下文的所述第二计算任务的一组权重,
其中确定要在所述第一执行批次之前执行的第二执行批次和要在所述第二执行批次之前执行的第三执行批次是基于所述状态缓冲器没有足够的容量来保持所述第一上下文和所述第二上下文的所述第二计算任务的所述一组权重、所述输入数据和所述输出数据。
3.如权利要求1所述的方法,还包括:
最大化要包含在所述第二执行批次中的第一数量的第二计算任务和要包含在所述第三执行批次中的第二数量的第二计算任务,使得在执行所述第二执行批次时,所述第一数量的第二计算任务的输入数据和输出数据与所述第二数量的第二计算任务的输出数据的组合数据大小低于所述状态缓冲器的容量。
4.如权利要求1所述的方法,还包括:
确定在所述第三执行批次之前执行的第五执行批次,所述第三执行批次包括所述第二上下文的所述第一计算任务,其中所述第五执行批次是基于所述状态缓冲器具有足够的容量来容纳所述第二上下文的所述第一计算任务的输入数据和输出数据而被确定的;以及
在所述第三执行批次之前执行所述第五执行批次。
5.一种方法,包括:
确定要执行的一组计算任务,所述一组计算任务包含第一计算任务、第二计算任务、第三计算任务和第四计算任务,其中所述第三计算任务和所述第四计算任务分别生成所述第一计算任务的输入数据和所述第二计算任务的输入数据;
基于存储器装置具有足够的容量来保持所述第一计算任务和所述第二计算任务两者的输入数据和输出数据来确定包括所述第一计算任务和所述第二计算任务的第一执行批次;
确定要在所述第一执行批次之前执行的至少包括所述第三计算任务的第二执行批次;
基于(1)所述存储器装置是否具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据、或者(2)所述存储器装置仅具有足够的容量来保存所述第三计算任务的输出数据和所述第四计算任务的输入数据和输出数据来确定是否将所述第四计算任务包括在所述第二执行批次中;
响应于确定所述存储器装置不具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据,但是具有足够的容量来保持所述第四计算任务的输入数据和输出数据以及所述第三计算任务的输出数据,确定要在所述第二执行批次之后执行的包括所述第四计算任务的第三执行批次;
执行所述第二执行批次;
在所述第二执行批次之后执行所述第三执行批次;以及
在所述第三执行批次之后执行所述第一执行批次。
6.如权利要求5所述的方法,其中所述一组计算任务还包括用于分别生成所述第三计算任务的输入数据和所述第四计算任务的输入数据的第五计算任务和第六计算任务。
7.如权利要求6所述的方法,
其中所述方法还包括:
确定包括所述第五计算任务的第四执行批次;
确定包括所述第六计算任务的第五执行批次;
在所述第二执行批次之前执行所述第四执行批次;以及
在所述第三执行批次之前执行所述第五执行批次。
8.如权利要求7所述的方法,还包括:
基于确定所述存储器装置具有足够的容量来存储所述第五计算任务的输出数据、所述第六计算任务的输出数据、和所述第四计算任务的输入数据和输出数据而确定要在所述第三执行批次之前和所述第二执行批次之前执行所述第四执行批次。
9.如权利要求5所述的方法,其中所述第一计算任务的至少一部分和所述第二计算任务的至少一部分并行执行。
10.如权利要求5所述的方法,其中所述第一计算任务和所述第三计算任务用于处理与第一上下文相关联的第一数据;并且其中所述第二计算任务和所述第四计算任务用于处理与第二上下文相关联的第二数据。
11.如权利要求10所述的方法,其中与所述第一上下文相关联的第一数据和与所述第二上下文相关联的第二数据来自不同的数据源。
12.如权利要求5所述的方法,其中所述第三计算任务和所述第四计算任务与第一神经网络层的计算相关联;并且其中所述第一计算任务和所述第二计算任务与处理来自所述第一神经网络层的数据的第二神经网络层的计算相关联。
13.如权利要求5所述的方法,还包括:
确定所述第一执行批次的第一经调度的执行时间;以及
在确定所述第一经调度的执行时间后,确定所述第二执行批次的第二经调度的执行时间;
其中,所述第二执行批次在所述第二经调度的执行时间执行;并且
其中,所述第一执行批次在所述第二经调度的执行时间之后的所述第一经调度的执行时间执行。
14.如权利要求5所述的方法,其中所述一组计算任务将由作为与所述存储器装置相同的芯片的一部分的计算引擎执行。
15.一种集成电路,包括:
存储器装置,所述存储器装置被配置为状态缓冲器;以及
计算引擎,所述计算引擎与所述存储器装置耦合;
控制器电路,所述控制器电路被配置成用于:
确定要在所述计算引擎处执行的一组计算任务,所述一组计算任务包含第一计算任务、第二计算任务、第三计算任务和第四计算任务,其中所述第三计算任务和所述第四计算任务分别生成所述第一计算任务的输入数据和所述第二计算任务的输入数据;
基于所述存储器装置具有足够的容量来保持所述第一计算任务和所述第二计算任务两者的输入数据和输出数据来确定包括所述第一计算任务和所述第二计算任务的第一执行批次;
基于(1)所述存储器装置是否具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据、或者(2)所述存储器装置仅具有足够的容量来保存所述第三计算任务的输出数据和所述第四计算任务的输入数据和输出数据来确定要在所述第一执行批次之前执行的第二执行批次;
响应于确定所述存储器装置不具有足够的容量来保持所述第三计算任务和所述第四计算任务两者的输入数据和输出数据,但是具有足够的容量来保持所述第四计算任务的输入数据和输出数据以及所述第三计算任务的输出数据,确定要在所述第二执行批次之后执行的包括所述第四计算任务的第三执行批次;
在所述计算引擎处执行所述第二执行批次;
在所述第二执行批次的执行完毕后,在所述计算引擎处执行所述第三执行批次;以及
在所述第二执行批次的执行完毕后,在所述计算引擎处执行所述第一执行批次。
16.如权利要求15所述的集成电路,其中,所述控制器电路被进一步配置成用于:
在所述存储器装置处将第一存储器空间分配用于存储所述第三计算任务的输入数据,并且在所述存储器装置处将第二存储器空间分配用于存储所述第三计算任务的输出数据;其中通过控制所述计算引擎从所述第一存储器空间读取所述第三计算任务的输入数据并将所述第三计算任务的输出数据存储在所述第二存储器空间从而在所述计算引擎处执行所述第二执行批次;以及
在所述计算引擎处执行所述第三执行批次期间,将所述第三计算任务的输出数据存储在所述存储器装置中。
17.如权利要求16所述的集成电路,其中所述一组计算任务还包括用于分别生成所述第三计算任务的输入数据和所述第四计算任务的输入数据的第五计算任务和第六计算任务;
其中所述控制器电路进一步被配置成用于:
确定包括所述第五计算任务的第四执行批次;
确定包括所述第六计算任务的第五执行批次;
在执行所述第二执行批次之前,在所述计算引擎处执行所述第四执行批次;以及
在执行所述第三执行批次之前,在所述计算引擎处执行所述第五执行批次。
18.如权利要求17所述的集成电路,其中所述第一计算任务、所述第三计算任务和所述第五计算任务分别与第一上下文的神经网络模型的第三神经网络层计算、第二神经网络层计算和第一神经网络层计算相关联;并且
其中所述第二计算任务、所述第四计算任务以及所述第六计算任务分别与第二上下文的神经网络模型的第三神经网络层计算、第二神经网络层计算以及第一神经网络层计算相关联。
19.一种在多层神经网络中处理多个数据集的方法,所述方法包括:
将第一数据集存储在存储器中;
使用所述多层神经网络的第一神经网络层处理来自所述存储器的所述第一数据集以生成所述第一数据集的第一层输出;
将所述第一数据集的第一层输出存储在所述存储器中;
从所述存储器中去除所述第一数据集;
将第二数据集添加到存储在所述存储器中的所述第一数据集的第一层输出;
使用所述第一神经网络层处理来自所述存储器的所述第二数据集以生成所述第二数据集的第一层输出;以及
将所述第二数据集的第一层输出添加到存储在所述存储器中的所述第一数据集的第一层输出。
20.如权利要求19所述的方法,还包括:
从所述存储器中去除所述第二数据集;
使用所述多层神经网络的第二神经网络层处理来自所述存储器的所述第一数据集的第一层输出和所述第二数据集的第一层输出,以分别生成所述第一数据集的第二层输出和所述第二数据集的第二层输出;以及
将所述第一数据集的第二层输出和所述第二数据集的第二层输出存储在所述存储器中。
21.如权利要求20所述的方法,其中,所述第一数据集的第二层输出和所述第二数据集的第二层输出通过至少覆写所述第一数据集的存储于所述存储器中的第一层输出而存储于所述存储器中。
22.如权利要求20所述的方法,还包括:
从所述存储器中去除所述第一数据集的第一层输出和所述第二数据集的第一层输出;
将第三数据集添加到存储在所述存储器中的所述第一数据集的第二层输出和所述第二数据集的第二层输出;
在生成所述第一数据集的第二层输出和所述第二数据集的第二层输出之后,利用所述第一神经网络层对来自所述存储器的所述第三数据集进行处理,以生成所述第三数据集的第一层输出;以及
将所述第三数据集的第一层输出存储在所述存储器中。
23.如权利要求22所述的方法,还包括:
从所述存储器中去除所述第三数据集;
将第四数据集添加到存储在所述存储器中的所述第一数据集的第二层输出、所述第二数据集的第二层输出以及所述第三数据集的第一层输出;
使用所述第一神经网络层处理来自所述存储器的所述第四数据集以生成所述第四数据集的第一层输出;以及
将所述第四数据集的第一层输出添加到存储在所述存储器中的所述第三数据集的第一层输出、所述第一数据集的第二层输出以及所述第二数据集的第二层输出。
24.如权利要求23所述的方法,还包括控制所述存储器提供用于同时存储所述第四数据集、所述第四数据集的第一层输出、所述第三数据集的第一层输出、所述第一数据集的第二层输出、以及所述第二数据集的第二层输出的空间。
25.如权利要求23所述的方法,还包括:
从所述存储器中去除所述第四数据集;
使用所述第二神经网络层处理所述第三数据集的第一层输出和所述第四数据集的第一层输出,以分别生成所述第三数据集的第二层输出和所述第四数据集的第二层输出;
将所述第三数据集的第二层输出和所述第四数据集的第二层输出添加到存储在所述存储器中的所述第一数据集的第二层输出和所述第二数据集的第二层输出;
使用所述多层神经网络的第三神经网络层处理来自所述存储器的所述第一数据集的第二层输出、所述第二数据集的第二层输出、所述第三数据集的第二层输出、以及所述第四数据集的第二层输出,以分别生成所述第一数据集的第三层输出、所述第二数据集的第三层输出、所述第三数据集的第三层输出、以及所述第四数据集的第三层输出;以及
将所述第一数据集的第三层输出、所述第二数据集的第三层输出、所述第三数据集的第三层输出以及所述第四数据集的第三层输出存储在所述存储器中。
26.如权利要求25所述的方法,其中所述第一数据集的第一层输出的数据大小大于所述第一数据集的第二层输出的数据大小,并且所述第一数据集的第二层输出的数据大小大于所述第一数据集的第三层输出的数据大小。
27.一种非瞬态计算机可读介质,包括指令,所述指令当由一个或多个处理器执行时,使得所述一个或多个处理器用于执行操作,所述操作包括:
将第一数据集存储在存储器中;
使用多层神经网络的第一神经网络层处理来自所述存储器的所述第一数据集以生成所述第一数据集的第一层输出;
将所述第一数据集的第一层输出存储在所述存储器中;
从所述存储器中去除所述第一数据集;
将第二数据集添加到存储在所述存储器中的所述第一数据集的第一层输出;
使用所述第一神经网络层处理来自所述存储器的所述第二数据集以生成所述第二数据集的第一层输出;以及
将所述第二数据集的第一层输出添加到存储在所述存储器中的所述第一数据集的第一层输出。
28.如权利要求27所述的非瞬态计算机可读介质,所述操作还包括:
从所述存储器中去除所述第二数据集;
使用所述多层神经网络的第二神经网络层处理来自所述存储器的所述第一数据集的第一层输出和所述第二数据集的第一层输出,以分别生成所述第一数据集的第二层输出和所述第二数据集的第二层输出;以及
将所述第一数据集的第二层输出和所述第二数据集的第二层输出存储在所述存储器中。
29.如权利要求28所述的非瞬态计算机可读介质,其中,所述第一数据集的第二层输出和所述第二数据集的第二层输出通过至少覆写所述第一数据集的存储于所述存储器中的第一层输出而存储于所述存储器中。
30.如权利要求28所述的非瞬态计算机可读介质,所述操作还包括:
从所述存储器中去除所述第一数据集的第一层输出和所述第二数据集的第一层输出;
将第三数据集添加到存储在所述存储器中的所述第一数据集的第二层输出和所述第二数据集的第二层输出;
在生成所述第一数据集的第二层输出和所述第二数据集的第二层输出之后,利用所述第一神经网络层对来自所述存储器的所述第三数据集进行处理,以生成所述第三数据集的第一层输出;以及
将所述第三数据集的第一层输出存储在所述存储器中。
31.如权利要求30所述的非瞬态计算机可读介质,所述操作还包括:
从所述存储器中去除所述第三数据集;
将第四数据集添加到存储在所述存储器中的所述第一数据集的第二层输出、所述第二数据集的第二层输出以及所述第三数据集的第一层输出;
使用所述第一神经网络层处理来自所述存储器的所述第四数据集以生成所述第四数据集的第一层输出;以及
将所述第四数据集的第一层输出添加到存储在所述存储器中的所述第三数据集的第一层输出、所述第一数据集的第二层输出以及所述第二数据集的第二层输出。
32.如权利要求31所述的非瞬态计算机可读介质,还包括控制所述存储器提供用于同时存储所述第四数据集、所述第四数据集的第一层输出、所述第三数据集的第一层输出、所述第一数据集的第二层输出、以及所述第二数据集的第二层输出的空间。
33.如权利要求31所述的非瞬态计算机可读介质,所述操作还包括:
从所述存储器中去除所述第四数据集;
使用所述第二神经网络层处理所述第三数据集的第一层输出和所述第四数据集的第一层输出,以分别生成所述第三数据集的第二层输出和所述第四数据集的第二层输出;
将所述第三数据集的第二层输出和所述第四数据集的第二层输出添加到存储在所述存储器中的所述第一数据集的第二层输出和所述第二数据集的第二层输出;
使用所述多层神经网络的第三神经网络层处理来自所述存储器的所述第一数据集的第二层输出、所述第二数据集的第二层输出、所述第三数据集的第二层输出、以及所述第四数据集的第二层输出,以分别生成所述第一数据集的第三层输出、所述第二数据集的第三层输出、所述第三数据集的第三层输出、以及所述第四数据集的第三层输出;以及
将所述第一数据集的第三层输出、所述第二数据集的第三层输出、所述第三数据集的第三层输出以及所述第四数据集的第三层输出存储在所述存储器中。
34.如权利要求33所述的非瞬态计算机可读介质,其中所述第一数据集的第一层输出的数据大小大于所述第一数据集的第二层输出的数据大小,并且所述第一数据集的第二层输出的数据大小大于所述第一数据集的第三层输出的数据大小。
35.一种系统,包括:
一个或多个处理器;以及
非瞬态计算机可读存储介质,包括指令,所述指令当由一个或多个处理器执行时,使得所述一个或多个处理器用于执行操作,所述操作包括:
将第一数据集存储在存储器中;
使用多层神经网络的第一神经网络层处理来自所述存储器的所述第一数据集以生成所述第一数据集的第一层输出;
将所述第一数据集的第一层输出存储在所述存储器中;
从所述存储器中去除所述第一数据集;
将第二数据集添加到存储在所述存储器中的所述第一数据集的第一层输出;
使用所述第一神经网络层处理来自所述存储器的所述第二数据集以生成所述第二数据集的第一层输出;以及
将所述第二数据集的第一层输出添加到存储在所述存储器中的所述第一数据集的第一层输出。
36.如权利要求35所述的系统,其中,所述操作进一步包括:
从所述存储器中去除所述第二数据集;
使用所述多层神经网络的第二神经网络层处理来自所述存储器的所述第一数据集的第一层输出和所述第二数据集的第一层输出,以分别生成所述第一数据集的第二层输出和所述第二数据集的第二层输出;以及
将所述第一数据集的第二层输出和所述第二数据集的第二层输出存储在所述存储器中。
37.如权利要求36所述的系统,其中,所述操作进一步包括:
从所述存储器中去除所述第一数据集的第一层输出和所述第二数据集的第一层输出;
将第三数据集添加到存储在所述存储器中的所述第一数据集的第二层输出和所述第二数据集的第二层输出;
在生成所述第一数据集的第二层输出和所述第二数据集的第二层输出之后,利用所述第一神经网络层对来自所述存储器的所述第三数据集进行处理,以生成所述第三数据集的第一层输出;以及
将所述第三数据集的第一层输出存储在所述存储器中。
38.如权利要求37所述的系统,其中,所述操作进一步包括:
从所述存储器中去除所述第三数据集;
将第四数据集添加到存储在所述存储器中的所述第一数据集的第二层输出、所述第二数据集的第二层输出以及所述第三数据集的第一层输出;
使用所述第一神经网络层处理来自所述存储器的所述第四数据集以生成所述第四数据集的第一层输出;以及
将所述第四数据集的第一层输出添加到存储在所述存储器中的所述第三数据集的第一层输出、所述第一数据集的第二层输出以及所述第二数据集的第二层输出。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/933,225 US11461631B2 (en) | 2018-03-22 | 2018-03-22 | Scheduling neural network computations based on memory capacity |
US15/933,201 US11475306B2 (en) | 2018-03-22 | 2018-03-22 | Processing for multiple input data sets |
US15/933,225 | 2018-03-22 | ||
US15/933,201 | 2018-03-22 | ||
CN201980020856.6A CN111886605B (zh) | 2018-03-22 | 2019-03-19 | 针对多个输入数据集的处理 |
PCT/US2019/022973 WO2019183095A1 (en) | 2018-03-22 | 2019-03-19 | Processing for multiple input data sets |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980020856.6A Division CN111886605B (zh) | 2018-03-22 | 2019-03-19 | 针对多个输入数据集的处理 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118014031A true CN118014031A (zh) | 2024-05-10 |
Family
ID=66001344
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410319743.9A Pending CN118014031A (zh) | 2018-03-22 | 2019-03-19 | 针对多个输入数据集的处理 |
CN201980020856.6A Active CN111886605B (zh) | 2018-03-22 | 2019-03-19 | 针对多个输入数据集的处理 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980020856.6A Active CN111886605B (zh) | 2018-03-22 | 2019-03-19 | 针对多个输入数据集的处理 |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP3738081A1 (zh) |
JP (2) | JP7108702B2 (zh) |
CN (2) | CN118014031A (zh) |
WO (1) | WO2019183095A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190340490A1 (en) * | 2018-05-04 | 2019-11-07 | Apple Inc. | Systems and methods for assigning tasks in a neural network processor |
CN111210017B (zh) * | 2019-12-24 | 2023-09-26 | 北京迈格威科技有限公司 | 确定布局顺序及数据处理的方法、装置、设备及存储介质 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5087826A (en) * | 1990-12-28 | 1992-02-11 | Intel Corporation | Multi-layer neural network employing multiplexed output neurons |
US7353252B1 (en) * | 2001-05-16 | 2008-04-01 | Sigma Design | System for electronic file collaboration among multiple users using peer-to-peer network topology |
US8213518B1 (en) * | 2006-10-31 | 2012-07-03 | Sony Computer Entertainment Inc. | Multi-threaded streaming data decoding |
CA2799167A1 (en) * | 2010-05-19 | 2011-11-24 | Douglas A. Palmer | Neural processing unit |
JP5605197B2 (ja) * | 2010-12-09 | 2014-10-15 | ソニー株式会社 | 暗号処理装置、および暗号処理方法、並びにプログラム |
US9147154B2 (en) * | 2013-03-13 | 2015-09-29 | Google Inc. | Classifying resources using a deep network |
US9721190B2 (en) * | 2014-12-19 | 2017-08-01 | Google Inc. | Large-scale classification in neural networks using hashing |
US9747546B2 (en) * | 2015-05-21 | 2017-08-29 | Google Inc. | Neural network processor |
US10049322B2 (en) * | 2015-05-21 | 2018-08-14 | Google Llc | Prefetching weights for use in a neural network processor |
US10417555B2 (en) * | 2015-05-29 | 2019-09-17 | Samsung Electronics Co., Ltd. | Data-optimized neural network traversal |
CN106203619B (zh) * | 2015-05-29 | 2022-09-13 | 三星电子株式会社 | 数据优化的神经网络遍历 |
US10332028B2 (en) * | 2015-08-25 | 2019-06-25 | Qualcomm Incorporated | Method for improving performance of a trained machine learning model |
US10990872B2 (en) * | 2016-03-31 | 2021-04-27 | International Business Machines Corporation | Energy-efficient time-multiplexed neurosynaptic core for implementing neural networks spanning power- and area-efficiency |
US11055063B2 (en) * | 2016-05-02 | 2021-07-06 | Marvell Asia Pte, Ltd. | Systems and methods for deep learning processor |
GB201607713D0 (en) * | 2016-05-03 | 2016-06-15 | Imagination Tech Ltd | Convolutional neural network |
US10796220B2 (en) * | 2016-05-24 | 2020-10-06 | Marvell Asia Pte, Ltd. | Systems and methods for vectorized FFT for multi-dimensional convolution operations |
AU2016203619A1 (en) | 2016-05-31 | 2017-12-14 | Canon Kabushiki Kaisha | Layer-based operations scheduling to optimise memory for CNN applications |
US10089577B2 (en) | 2016-08-05 | 2018-10-02 | Xilinx, Inc. | Binary neural networks on progammable integrated circuits |
US10733505B2 (en) * | 2016-11-10 | 2020-08-04 | Google Llc | Performing kernel striding in hardware |
CN107679620B (zh) * | 2017-04-19 | 2020-05-26 | 赛灵思公司 | 人工神经网络处理装置 |
CN107798382B (zh) * | 2017-11-21 | 2020-09-01 | 南京地平线机器人技术有限公司 | 用于适配卷积神经网络中的特征数据的方法和装置 |
JP7179853B2 (ja) * | 2017-12-12 | 2022-11-29 | アマゾン テクノロジーズ インコーポレイテッド | オンチップの計算ネットワーク |
-
2019
- 2019-03-19 CN CN202410319743.9A patent/CN118014031A/zh active Pending
- 2019-03-19 WO PCT/US2019/022973 patent/WO2019183095A1/en unknown
- 2019-03-19 JP JP2020551487A patent/JP7108702B2/ja active Active
- 2019-03-19 CN CN201980020856.6A patent/CN111886605B/zh active Active
- 2019-03-19 EP EP19715308.3A patent/EP3738081A1/en active Pending
-
2022
- 2022-07-15 JP JP2022113941A patent/JP7492555B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
CN111886605B (zh) | 2024-03-22 |
JP7108702B2 (ja) | 2022-07-28 |
EP3738081A1 (en) | 2020-11-18 |
JP2022137247A (ja) | 2022-09-21 |
CN111886605A (zh) | 2020-11-03 |
JP7492555B2 (ja) | 2024-05-29 |
WO2019183095A1 (en) | 2019-09-26 |
JP2021517310A (ja) | 2021-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11797853B2 (en) | Processing for multiple input data sets | |
CN111684473B (zh) | 提高神经网络阵列的性能 | |
US10943167B1 (en) | Restructuring a multi-dimensional array | |
US11461631B2 (en) | Scheduling neural network computations based on memory capacity | |
US11775430B1 (en) | Memory access for multiple circuit components | |
US11816559B2 (en) | Dilated convolution using systolic array | |
US9529590B2 (en) | Processor for large graph algorithm computations and matrix operations | |
JP7492555B2 (ja) | 複数の入力データセットのための処理 | |
US11561833B1 (en) | Allocation and placement of resources for network computation | |
CN111465943A (zh) | 芯片上计算网络 | |
US11275997B1 (en) | Weight loading in an array | |
CN112639726A (zh) | 用于执行并行计算的方法和系统 | |
CN112906865A (zh) | 神经网络架构搜索方法、装置、电子设备及存储介质 | |
US20210097396A1 (en) | Neural network training in a distributed system | |
US11467973B1 (en) | Fine-grained access memory controller | |
EP3971787A1 (en) | Spatial tiling of compute arrays with shared control | |
US20240143525A1 (en) | Transferring non-contiguous blocks of data using instruction-based direct-memory access (dma) | |
TW202226073A (zh) | 運算單元架構、運算單元叢集及卷積運算的執行方法 | |
CN116627887A (zh) | 图数据处理的方法和芯片 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |