CN114051615A - 动态处理元件阵列扩展 - Google Patents
动态处理元件阵列扩展 Download PDFInfo
- Publication number
- CN114051615A CN114051615A CN202080045532.0A CN202080045532A CN114051615A CN 114051615 A CN114051615 A CN 114051615A CN 202080045532 A CN202080045532 A CN 202080045532A CN 114051615 A CN114051615 A CN 114051615A
- Authority
- CN
- China
- Prior art keywords
- sub
- operations
- input
- output
- feature maps
- 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
Images
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/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- 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
-
- 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
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Artificial Intelligence (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Neurology (AREA)
- Image Analysis (AREA)
Abstract
一种计算机实现的方法,包括:接收包括张量运算的神经网络模型;以及将所述张量运算划分为子运算。所述子运算包括至少两个子运算,在所述两个子运算之间不具有数据依赖性。所述计算机实现的方法还包括:将所述两个子运算中的第一子运算分配给第一计算引擎;将所述两个子运算中的第二子运算分配给第二计算引擎;以及生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。然后基于所述第一子运算的结果、所述第二子运算的结果或两者而进行推断。所述第一计算引擎和所述第二计算引擎是在同一个集成电路装置中或在两个不同的集成电路装置中。
Description
背景技术
人工神经网络是具有基于生物神经网络的架构的计算系统。可使用训练数据来训练人工神经网络,以学习如何执行特定任务,诸如从图像或视频中识别或分类物理对象、活动、角色等。人工神经网络可包括多层处理节点。某一层上的每个处理节点可对由前一层上的处理节点生成的输入数据执行计算以生成输出数据。例如,处理节点可执行一组算术运算,诸如乘法和加法以生成中间输出,或者对中间输出执行后处理运算。
诸如深度神经网络的复杂的人工神经网络可包括数千个或更多个处理节点和数百万个或更多个参数,并且因此每次推断可包括大量计算。例如,在ResNet-50神经网络中,每次推断可能包括约80亿次算术运算。因此,进行推断的等待时间可能很长,因为用于实现神经网络的集成电路可能包括有限的资源,使得可能需要以串行方式执行许多运算(例如,卷积运算或其他张量运算)。
附图说明
将参考附图描述根据本公开的各个实施方案,在附图中:
图1示出了多层人工神经网络的示例;
图2示出了卷积神经网络(CNN)的示例;
图3A和图3B示出了通过卷积神经网络中的卷积层的示例对输入像素阵列执行的卷积运算;
图4A至图4E示出了对输入像素数据的示例执行的卷积、非线性激活和池化操作的示例;
图5示出了用于卷积神经网络的卷积层的模型的示例;
图6示出了涉及一批(N=1)C个通道的输入数据和M组C个滤波器的卷积运算的示例;
图7是示出根据某些实施方案的用于执行神经网络操作的集成电路装置的示例的简化框图;
图8示出了根据某些实施方案的包括处理元件阵列的计算引擎的简化示例;
图9示出了根据某些实施方案的使用具有处理元件阵列的计算引擎的示例进行的权重固定卷积的简化示例;
图10A示出了使用神经网络模型进行推断的一系列操作;
图10B示出了使用多个计算引擎进行并行推断的示例;
图11示出了由多个计算引擎执行来进行并行推断的操作的示例;
图12示出了根据某些实施方案的使用多个计算引擎通过将神经网络的运算分配给多个计算引擎来进行推断的示例;
图13示出了根据某些实施方案的由多个计算引擎执行来进行推断的操作的示例;
图14示出了根据某些实施方案的使用多个计算引擎通过将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算来进行推断的示例;
图15示出了根据某些实施方案的由多个计算引擎执行来进行推断的操作的示例;
图16示出了根据某些实施方案的使用多个计算引擎通过将神经网络的运算拆分为可由多个计算引擎并行地执行的子运算来进行推断的示例;
图17示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例;
图18示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例;
图19示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例;
图20示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例;
图21是示出根据某些实施方案的用于通过在多个计算引擎上并行地执行张量运算的子运算来使张量运算加速的方法的示例的流程图;
图22A示出了根据某些实施方案的可使用本文公开的技术的变换器的示例;图22B示出了变换器中的缩放的点积注意力框的示例;图22C示出了用于变换器的编码器和解码器中的多头注意力子层的示例;
图23示出了根据某些实施方案的可使用本文公开的一些技术的变换器双向编码器表示(BERT)模型的示例;
图24包括主机系统的示例的框图;
图25包括加速引擎的示例的框图;并且
图26包括网络的示例的图。
具体实施方式
本文公开的技术总体涉及人工神经网络,并且更具体地,涉及基于使用并行地执行神经网络运算的子运算的多个计算引擎的神经网络模型而使推断加速。
人工神经网络可包括布置在两个或更多个层上的多个处理节点,其中一个层上的处理节点可连接到另一个层上的处理节点。某一层上的每个处理节点可接收输入数据元素流,将每个输入数据元素乘以权重,计算输入数据元素的加权和,并且将加权和转发给下一个层。人工神经网络可包括数千个或更多个处理节点以及数百万个或更多个权重和输入数据元素。在一些神经网络诸如卷积神经网络、包括多头注意力模型的变换器、多层感知器或其他基于张量运算的神经网络模型中,可能会处理大型输入张量以生成新的输出张量(例如,张量积)。因此,可能需要大的存储器空间和具有高并行处理性能的处理单元。然而,用于实现神经网络的底层硬件可能具有有限的资源,诸如有限数量的处理元件和/或有限的存储器空间或存储器带宽。因此,神经网络的一些张量运算各自可能需要以串行方式执行,这可能会显著地增加执行运算所需的时间段,并且因此进行推断的等待时间例如在一些实时应用中可能会长于期望的时间。
根据某些实施方案,诸如卷积运算、多头注意力运算或多层感知器运算的张量运算可以某些方式拆分为将由多个计算引擎并行地执行的子运算,使得每个计算引擎可执行子运算以在较短的时间段内生成张量运算的最终结果(例如,输出张量)的一部分。由子运算生成的输出张量的部分可用于进行早期推断,并且可被级联来形成输出张量,而无需额外的算术运算。在一个示例中,每个计算引擎可在较短的时间段内对输入特征图的一部分执行卷积运算以生成张量输出中的输出特征图中的每一者的一部分。在另一个示例中,每个计算引擎可使用用于输出通道的一部分的滤波器的一部分在较短的时间段内对输入特征图执行卷积运算,以生成输出特征图数量中的一部分。输出特征图的部分可单独或组合地使用来进行早期预测或决策。以此方式,可显著地将用于进行推断的等待时间减少例如用于并行执行子运算的计算引擎的数量倍。这也可有效地创建具有较高计算能力的计算引擎。
在以下描述中,将描述各种示例。出于解释的目的,将阐述具体的配置和细节,以便提供对示例的透彻理解。然而,对于本领域技术人员还将明显的是,在没有具体细节的情况下也可实践示例。此外,为了不使所描述的实施方案变得模糊,可能会省略或简化众所周知的特征。附图和描述不意图是限制性的。在本公开中已采用的术语和表达被用作描述性而非限制性的术语,并且在使用此类术语和表达时不意图排除所示和所描述的特征的任何等效物或其部分。字词“示例”在本文用于表示“用作示例、例子或说明”。本文描述为“示例”的任何实施方案或设计不一定解释为相较于其他实施方案或设计是优选或有利的。
人工神经网络(也被称为“神经网络”)已经用于机器学习研究和工业应用中,并在例如图像辨别、言语辨别、计算机视觉、文本处理等方面已经取得了许多突破性成果。神经网络中的基本计算单元是神经元(也被称为节点)。神经元可从一些其他神经元或外部源接收输入并且计算输出。每个输入可具有相关联的权重(w),所述权重可基于输入相对于其他输入的重要性而进行分配。神经元还可将函数(例如,非线性函数)应用于其输入的加权和。
人工神经网络可包括布置在两个或更多个层上的多个处理节点,其中一个层上的处理节点可连接到另一个层上的处理节点。处理节点可被划分为多个层,包括例如输入层、多个中间层(也被称为隐藏层)和输出层。某一层(例如,输入层、中间层等)上的每个处理节点可接收顺序的输入数据元素流,将每个输入数据元素乘以权重,计算输入数据元素的加权和,并且将加权和转发给下一个层。诸如卷积神经网络的人工神经网络可包括数千个或更多个处理节点以及数百万个或更多个权重和输入数据元素。
前馈神经网络是一种类型的人工神经网络。它可包括以多层布置的多个节点。来自相邻层的节点可在其之间具有连接或边。这些连接可具有与其相关联的对应的权重。信息可从输入节点流过隐藏节点(如果有的话)并且流动到输出节点。网络中不存在圆环或环路。相比之下,递归神经网络(例如,长短期记忆(LSTM)网络)可包括节点之间的连接以形成圆环或环路。
图1示出了多层神经网络100的示例。多层神经网络100可包括输入层110、隐藏(或中间)层120和输出层130。在许多实现方式中,多层神经网络100可包括两个或更多个隐藏层并且可被称为深度神经网络。具有单个隐藏层的神经网络通常可能就足以对任何连续函数进行建模。然而,当与具有多个隐藏层的神经网络相比较时,这种网络可能需要指数级更大数量的节点。已经显示,可训练较深的神经网络以实现远远优于相对较浅网络的性能。
输入层110可包括多个输入节点(例如,节点112、114和116),所述多个输入节点可从外部世界向网络提供信息(例如,输入数据)。输入节点可将信息传递到下一层,并且输入节点可不执行计算。隐藏层120可包括多个节点,诸如节点122、124和126。隐藏层中的节点可能与外部世界没有直接联系(因此名称为“隐藏”)。它们可执行计算并且将信息从输入节点传输到下一层(例如,另一个隐藏层或输出层130)。虽然前馈神经网络可能具有单个输入层和单个输出层,但是它可具有零个或多个隐藏层。输出层130可包括多个输出节点,所述多个输出节点负责计算并且将信息从网络传输到外部世界,诸如辨别某些对象或活动,或者确定条件或动作。
如图1所示,在前馈神经网络中,某一节点(如果有的话,偏差节点除外)可连接到紧接前一层和紧接下一层中的所有节点(如果有的话,偏差节点除外)。因此,这些层可被称为全连接层。节点之间的所有连接都可具有与其相关联的权重,但是图1中仅示出了这些权重中的一些。对于复杂的网络,可能存在数百或数千个节点,以及节点之间的数千或数百万个连接。
如上文所描述,前馈神经网络可包括零个隐藏层(被称为单层感知器)或者一个或多个隐藏层(被称为多层感知器(MLP))。尽管图1仅示出了多层感知器中的单个隐藏层,但是多层感知器可包括一个或多个隐藏层(除了一个输入层和一个输出层之外)。具有许多隐藏层的前馈神经网络可被称为深度神经网络。单层感知器仅可学习线性函数,而多层感知器可学习非线性函数。
在图1所示的示例中,节点112可为具有值1的偏差节点或者可为常规输入节点。节点114和116可采用外部输入X1和X2,所述外部输入可为取决于输入数据集的数值。如上文所论述,在输入层110上未执行计算,并且因此来自输入层110上的节点112、114和116的输出分别是1、X1和X2,它们被馈送到隐藏层120。
在图1所示的示例中,节点122可为具有值1的偏差节点或者可为常规网络节点。隐藏层120中的节点124和126的输出可取决于来自输入层110的输出(例如,1、X1、X2等)以及与连接115相关联的权重。例如,节点124可采用数字输入X1和X2,并且可具有与这些输入相关联的权重w1和w2。另外地,节点124可具有另一个输入(被称为偏差),诸如1,具有与所述输入相关联的权重w0。偏差的主要作用是为每个节点提供可训练的常数值(除了节点接收的正常输入之外)。偏差值可允许人们将激活函数向左或向右移位。应当注意,尽管图1中仅示出了节点124的三个输入,但是在各种实现方式中,节点可包括数十、数百、数千或更多个输入以及相关联的权重。
来自节点124的输出Y可通过以下方式来计算:
Y=f(w1×X1+w2×X2+w0×偏差), (1)
其中函数f可为通常被称为激活函数的非线性函数。当节点具有K个输入时,来自所述节点的输出可通过以下方式来计算:
因此,每个神经网络层上的计算可被描述为输入矩阵和权重矩阵的乘法以及应用于矩阵乘法的乘积的激活函数。然后可将来自中间层上的节点的输出馈送到下一层诸如输出层130上的节点。
激活函数的目的是将非线性引入神经网络节点的输出中,因为大多数现实世界函数是非线性的,并且期望神经元可学习这些非线性表示。激活函数可采用单个数字并且对其执行某种固定的数学运算。在人工神经网络中可使用若干激活函数。一个示例激活函数是S型函数σ(x),所述函数采用实值输入并且将所述实值输入变换为在0与1之间的值。另一个示例激活函数是双曲正切函数,所述函数采用实值输入并且将所述实值输入变换为在[-1,1]范围内的值。第三示例激活函数是修正线性单元(ReLU)函数。ReLU函数采用实值输入并且对所述实值输入设定高于零的阈值(例如,用零替换负值)。另一个示例激活函数是带泄露ReLU函数。
图1所示的示例中的输出层130可包括节点132和134,所述节点可采用来自隐藏层120的输入并且使用与连接125相关联的权重来执行与隐藏节点相似的计算。计算结果(Y1和Y2)是多层感知器的输出。在一些实现方式中,在用于分类的MLP中,Softmax函数可用作输出层中的激活函数。Softmax函数采用实值分数的向量,并且将所述向量映射到在0与1之间的总和为1的值的向量。
对于给定的一组输入特征X=(x1,x2,……)和目标Y,多层感知器可学习特征与目标之间的关系以进行分类或回归。多层感知器可使用反向传播算法进行学习。误差反向传播(通常被称为BackProp)是可训练人工神经网络的几种方式之一。BackProp可为监督式训练方案,所述监督式训练方案通过改变神经网络的参数以降低误差而在节点处从标记的训练数据和误差中学习。
如上文所描述,人工神经网络中相邻层的节点之间的连接具有与其相关联的权重,其中权重可决定对于给定的输入向量产生什么输出向量。学习或训练过程可为这些连接分配适当的权重。在一些实现方式中,可随机地分配权重的初始值。对于训练数据集中的每个输入,可观察人工神经网络的输出并且将所述输出与预期输出进行比较,并且预期输出与观察到的输出之间的误差可被反向传播到前一层。可基于误差而相应地调整权重。重复此过程,直到输出误差低于预定阈值为止。
在许多情况下,将如上文所描述的前馈神经网络用于诸如图像分类的现实世界应用可能是不切实际的。例如,对于具有200×200像素的二维(2-D)图像,在神经网络中可能会使用40,000个输入节点。如果隐藏层具有20,000个节点,则权重矩阵的大小将为40,000×20,000(或8亿个元素)。如果每个权重是32位(即,4字节)浮点值,则用于权重的总存储器将为3.2GB。这仅仅是针对第一层。随着层数量的增加,权重的大小也可能增加。此外,使用单独的像素对图像进行向量化可能会忽略图像的复杂的多维空间结构。
克服这些问题的一种方式是使用卷积神经网络,所述卷积神经网络使用较小的卷积滤波器,而不是如上文所描述的大型矩阵乘法来执行卷积。学习一组卷积滤波器(例如,11×11矩阵)可能比学习大型矩阵(例如,40,000×20,000)容易且快速得多。多维卷积或其他张量运算也可自然地将图像的多维结构考虑在内。卷积神经网络可被认为是具有局部连接和权重共享的前馈神经网络。局部连接指代以下事实:卷积滤波器可能具有比其操作所针对的图像小得多的维度。权重共享归因于以下事实:在执行卷积时可能会在整个图像上使用相同的滤波器,这意味着在图像中的许多位置使用相同的局部滤波器。换句话说,对图像中不同位置的所有滤波之间的权重是共享的。
卷积神经网络(ConvNet或CNN)可执行包括例如以下各项的操作:(1)卷积;(2)非线性(或激活)函数(例如,ReLU);(3)池化或子采样;以及(4)分类。不同的CNN可能具有这四种主要操作的不同组合,以及其他额外操作。例如,ResNet-50网络可包括主要包括卷积层和一些池化层的网络层,并且还可执行用于残差学习的残差加法运算。
图2示出了用于图像或其他对象分类的卷积神经网络(CNN)200的示例。如上文所描述,CNN 200可执行四种类型的操作,包括卷积、非线性(或激活)函数(例如,ReLU)、池化或子采样以及分类(全连接层)。待分类的对象210诸如一个或多个输入图像或其他输入数据集(被称为输入特征图)可由像素值矩阵表示。例如,对象210可包括多个通道(例如,多个输入特征图),每个通道表示对象210的某个分量。例如,来自数字相机的图像可至少具有红色通道、绿色通道和蓝色通道,其中每个通道可由具有在例如0至255(即,8位)的范围内的像素值的2-D像素矩阵表示。灰度图像可能仅具有一个通道。在以下描述中,描述了使用CNN200对单个图像通道进行的处理。可类似地处理其他通道。
如图2所示,对象210(例如,输入图像)可首先由第一卷积层215使用第一组滤波器来处理,其中第一卷积层215可在表示输入图像的矩阵与表示第一组滤波器中的每个滤波器的矩阵之间执行卷积。卷积可包括多个矩阵乘法。第一卷积层215还可执行非线性激活函数(例如,ReLU)。来自第一卷积层215的输出矩阵220可具有比输入图像更小的维度,并且可被称为卷积特征、激活图或特征图。第一卷积层215可使用第一组滤波器对输入图像执行卷积以生成多个输出矩阵220,所述多个输出矩阵可被称为第一卷积层215的输出特征图。所使用的滤波器的数量可被称为卷积层的深度。在图2所示的示例中,第一卷积层215的深度可为3。每个输出矩阵220(例如,输出特征图)可被传递到池化层225,其中可对每个输出矩阵220进行子采样或下采样以生成矩阵230。
每个矩阵230可由第二卷积层235使用第二组滤波器来处理。如上文所描述也可由第二卷积层235执行非线性激活函数(例如,ReLU)。来自第二卷积层235的输出矩阵240(例如,输出特征图)可具有比矩阵230更小的维度。第二卷积层235可使用第二组滤波器对矩阵230执行卷积以生成多个输出矩阵240。在图2所示的示例中,第二卷积层235的深度可为6。每个输出矩阵240可被传递到池化层245,其中可对每个输出矩阵240进行子采样或下采样以生成输出矩阵250。
来自池化层245的输出矩阵250可由压平层255压平为向量,并且传递通过全连接层260(例如,多层感知器(MLP))。全连接层260可包括输入层270,所述输入层从压平层255取得2-D输出向量。全连接层260还可包括隐藏层和输出层290。全连接层260可使用特征图或输出矩阵250以及例如Softmax函数将输入图像中的对象分类为若干类别中的一者。全连接层的操作可通过矩阵乘法来表示。例如,如果在输入层270上存在M个节点而在隐藏层280上存在N个节点,并且在输入层270上的M个节点与隐藏层280上的N个节点之间的连接的权重可由矩阵W表示,则隐藏层280的输出Y可通过Y=X×W来确定。
CNN中的卷积运算可用于从输入图像中提取特征。卷积运算可通过使用输入图像的小区域提取图像特征来保留像素之间的空间关系。在卷积中,矩阵(被称为滤波器、内核或特征检测器)可以特定步长(被称为步幅)在输入图像(或特征图)上滑动。对于每个位置(或每一步),可计算滤波器矩阵与输入图像中的重叠矩阵之间的逐元素乘法并且求和以获得代表输出矩阵(例如,特征图)的单个元素的最终值。滤波器可用于从原始输入图像中检测某些特征。
对输入像素阵列使用一个滤波器的卷积可用于产生一个特征图,并且对同一输入像素阵列使用另一个滤波器的卷积可产生不同的特征图。在实践中,CNN可在训练过程期间基于一些用户指定的参数(其可被称为超参数)诸如滤波器的数量、滤波器大小、网络的架构等而自行学习滤波器的权重。所使用的滤波器的数量越多,可提取的图像特征就越多,并且网络可能就越擅长辨别新图像中的图案。
输出特征图的大小可基于诸如深度、步幅和零填充的参数而确定。如上文所描述,深度可对应于用于卷积运算的滤波器的数量。例如,在图2所示的CNN 200中,在第一卷积层215中使用三个不同的滤波器来对输入图像执行卷积运算,从而产生三个不同的输出矩阵(或特征图)220。步幅是滤波器矩阵在输入像素阵列上滑动经过的像素数量。例如,当步幅为1时,滤波器矩阵每次移动一个像素。当步幅为2时,滤波器矩阵每次移动两个像素。具有较大的步幅可产生较小的特征图。在一些实现方式中,输入矩阵可在边界周围用零填充,使得滤波器矩阵可应用于输入像素阵列的边界元素。零填充可允许控制特征图的大小。
如图2所示,可在每次卷积运算之后使用利用激活函数(例如,ReLU)的额外的非线性运算。ReLU是用零替换特征图中的所有负像素值的逐元素运算。ReLU运算的目的是将非线性引入CNN中。也可使用诸如双曲正切或S型函数的其他非线性函数,但是已经发现ReLU在许多情况下表现更好。
空间池化(也被称为子采样或下采样)可降低每个特征图的维度,同时保留最重要的信息。特别地,池化可使特征维度更小且更易于管理,并且减少网络中的参数和计算的数量。池化还可使网络对输入图像中的小变换、失真和平移保持不变,使得输入图像中的小失真可能不会改变池化的输出,因为使用了局部邻域中的最大值或平均值。因此,池化可有助于实现输入图像的等变化表示,使得图像中的对象无论它们位于何处都可被检测到。空间池化可以不同的方式诸如最大池化、平均池化、求和池化等执行。在最大池化中,每个空间邻域(例如,2×2窗口)中的最大元素可用于表示空间邻域。代替采用最大元素,可使用每个窗口中所有元素的平均值(对于平均池化)或总和(对于求和池化)来表示空间邻域。在许多应用中,最大池化可能比其他池化技术更为凑效。
在图2所示的示例中,使用了两组卷积层和池化层。应当注意,可在单个CNN中将这些操作重复任何次数。此外,在每个卷积层之后可不使用池化层。例如,在一些实现方式中,CNN可在执行池化操作之前执行多次卷积和ReLU运算。
诸如CNN 200的卷积神经网络的训练过程可类似于任何前馈神经网络的训练过程。首先,可用随机值(或已知神经网络的参数)将所有参数和权重(包括滤波器中的权重和全连接层的权重)初始化。其次,卷积神经网络可将训练样本(例如,训练图像)用作输入,执行前向传播步骤(包括卷积、非线性激活和池化操作,以及全连接层中的前向传播操作),并且确定每个可能类别的输出概率。由于卷积神经网络的诸如权重的参数对于训练示例而言是随机地分配的,因此输出概率也可能是随机的。
在训练过程结束时,可能已经优化了CNN的所有权重和参数,以正确地对来自训练数据集的训练样本进行分类。当未见过的样本(例如,测试样本或新样本)被输入到CNN中时,CNN可使用训练后的权重和参数完成前向传播步骤并且输出每个类别的概率,与训练过程相比较,这可被称为推断(或预测)过程。如果训练数据集足够,则训练后的网络可将未见过的样本分类到正确的类别中。
图3A和图3B示出了通过卷积神经网络中的卷积层使用滤波器310对输入像素阵列320执行的卷积运算。输入像素阵列320可包括输入图像、输入图像的通道或由另一个卷积层或池化层生成的特征图。图3A示出了在第一步骤处对输入像素阵列320的第一区域322执行的卷积运算。图3B示出了在将滤波器310滑动某一步幅之后在第二步骤处对输入像素阵列320的第二区域324执行的卷积运算。
滤波器310可包括二维矩阵,2-D矩阵的每个元素表示权重。滤波器310中的权重可被设计或训练成从图像中的像素值的空间分布中检测或提取某些特征。所提取的特征对于人眼而言可能是有意义或可能是没有意义的。不同的滤波器可用于从输入像素阵列中检测或提取不同的特征。例如,一些滤波器可用于检测图像中的边缘,或者锐化或模糊图像。滤波器310可具有R个行(高度)和S个列(宽度),并且通常可小于输入像素阵列320,所述输入像素阵列可具有H个像素的高度和W个像素的宽度。滤波器310中的每个权重可映射到输入像素阵列320中具有R个行和S个列的区域中的一个像素。例如,如图3A所示,卷积层(例如,第一卷积层215或第二卷积层235)或卷积层的处理节点可接收输入像素阵列320的区域322(包括R×S像素)的像素值,在滤波器310和区域322中的对应的元素之间执行逐元素乘法,并且对逐元素乘法的乘积求和以生成卷积输出值332。换句话说,卷积输出值332可为根据的滤波器310中的权重与区域322中的对应像素之间的乘法结果总和,即表示滤波器310的矩阵W与表示区域322的像素值的矩阵X之间的点积。
类似地,如图3B所示,卷积层(例如,卷积层的另一个处理节点)可接收输入像素阵列320的区域324(包括R×S像素)的像素值,在滤波器310和区域324中的对应的元素之间执行逐元素乘法,并且对逐元素乘法的乘积求和以生成卷积输出值334。如图3B所示,可以滑动窗口方式按预定步幅D执行卷积运算。步幅是滤波器矩阵在输入像素阵列上滑动经过的像素数量。例如,在图3B所示的示例中,区域324可与区域322相距距离D(以像素计),并且下一个卷积运算的下一个区域可位于与区域324相距相同的距离D处。步幅D可小于或大于滤波器310的宽度S。
卷积运算的输出可形成高度为E个行且宽度为F个列的卷积输出矩阵330。如上文所描述,矩阵330可被称为特征图。矩阵330的维度可小于输入像素阵列320并且可基于输入像素阵列320的维度、滤波器310的维度和步幅D而确定。如上文所描述,在一些实现方式中,输入像素阵列320可在边界周围用零填充,使得滤波器310可应用于输入像素阵列320的边界元素。零填充可允许控制特征图(例如,矩阵330)的大小。当2-D输入像素阵列320的每一侧上的填充大小为P时,矩阵330的高度E为并且矩阵330的宽度F为例如,如果步幅D在水平方向和竖直方向上都等于一个像素,则E可等于H-R+2P+1,并且F可等于W-S+2P+1。具有较大的步幅D可产生较小的特征图。
图4A至图4E示出了对输入像素数据的示例执行的卷积、非线性激活和池化操作的示例。输入像素数据可表示例如数字图像、数字图像的通道或由卷积神经网络中的前一层生成的特征图。图4A示出了包括示例输入像素数据的示例输入矩阵410。输入矩阵410可包括6×6像素阵列,其中像素阵列的每个元素可包括实数,诸如整数或浮点数。图4B示出了示例滤波器420。滤波器420可包括3×3矩阵,其中矩阵的每个元素表示滤波器的权重。滤波器420可用于从输入矩阵410中提取某些特征。例如,图4B所示的示例滤波器420可为用于检测图像中的边缘的滤波器。
可对输入矩阵410和滤波器420进行卷积以生成如图4C所示的输出矩阵430。输出矩阵430中的每个元素可为滤波器420和输入矩阵410的重叠区域412中的对应的元素之间的逐元素乘法的总和(例如,点积),并且可在滤波器420(例如,3×3)以特定步幅(例如,在水平方向上和/或在竖直方向上都为1个元素)在输入矩阵410上滑动时在每一步(具有与滤波器420相同的维度的窗口)中确定。例如,输出矩阵430的第1行和第3列中的元素432的值可为表示滤波器420的矩阵与表示输入矩阵410的区域412的矩阵之间的点积,其中2×0+1×1+0×0+5×1+3×(-4)+2×1+2×0+1×1+1×0=1+5-12+2+1=-3。类似地,输出矩阵430的第4行和第1列中的元素434的值可为表示滤波器420的矩阵与表示输入矩阵410的区域414的矩阵之间的点积,其中0×0+2×1+1×0+0×1+0×(-4)+1×1+5×0+3×1+2×0=2+1+3=6。对于具有6×6像素阵列的输入矩阵410和由3×3矩阵表示的滤波器420,当所使用的步幅是一个元素或像素时,输出矩阵430可为4×4矩阵。
然后可将非线性激活函数(例如,ReLU、S型、双曲正切等)应用于输出矩阵430以生成如图4D所示的矩阵440。在图4D所示的示例中,使用了ReLU函数,并且因此输出矩阵430中的所有负值在矩阵440中都被0替换。可将池化操作(例如,最大、平均或求和池化操作)应用于矩阵440以对矩阵440中的数据进行子采样或下采样。在图4D和图4E所示的示例中,可将最大池化操作应用于矩阵440,其中4×4矩阵440可被划分为四个2×2区域442、444、446和448。每个区域的最大值可被选择为表示每个区域的子样本。例如,从区域442中选择最大值9,从区域444中选择最大值2,从区域446中选择最大值5,并且从区域448中选择最大值6。因此,可在卷积、非线性激活和池化操作之后从6×6输入矩阵410生成具有四个元素9、2、6和5的特征图450。
图5示出了用于例如图像处理中的卷积神经网络的卷积层的模型500的示例。如示例中所示,卷积层可存在多个(例如,N个)3-D输入520-1、......、以及520-N。每个3-D输入可包括2-D输入特征图(具有维度H×W)的C个通道。对于CNN中的第一卷积层,3-D输入可包括例如2-D图像的三个通道,诸如红色、绿色和蓝色通道。多个(例如,M个)3-D滤波器510-1、......、以及510-M(各自具有C个维度为R×S的2-D滤波器)可与N个3-D输入520-1、......、以及520-N(例如,C个维度为H×W的输入特征图的N个批次)进行卷积以生成多个(例如,N个)3-D输出530-1、......、以及530-N,其中3-D输出530-1、......、以及530-N中的每一者可包括M个输出特征图(也被称为输出通道)。每个3-D滤波器510-1、......、或510-M(具有维度C×R×S)可应用于3-D输入520-1、......、或520-N(具有维度C×H×W)以生成输出特征图(具有如上文相对于图3A和图3B所描述的维度E×F)于3-D输出530-1、......、或530-N中,所述3-D输出包括M个输出特征图,并且因此可使用M个3-D滤波器以为3-D输入生成M个输出特征图于3-D输出中。例如,3-D滤波器510-1可应用于3-D输入520-1以生成输出特征图530-1-1,......,并且3-D滤波器510-M可应用于3-D输入520-1以生成输出特征图530-1-M。可将相同的M个3-D滤波器510-1、......、以及510-M应用于每个3-D输入520-1、......、或520-N以生成各自相应的包括M个输出特征图的3-D输出530-1、......、或530-N。例如,3-D滤波器510-1可应用于3-D输入520-N以生成输出特征图530-N-1,并且3-D滤波器510-M可应用于3-D输入520-N以生成输出特征图530-N-M。因此,存在N个3-D输入和N个3-D输出,其中每个3-D输出包括M个输出特征图。
更具体地,如图5所示,对于3-D输入520-1、......、或520-N和3-D滤波器510-1、......、或510-M,3-D滤波器510-m中的C个2-D滤波器(各自具有维度R×S)可对应于3-D输入中的2-D输入特征图(各自具有维度H×W)的C个通道,并且可执行C个2-D滤波器中的每个2-D滤波器与2-D输入特征图的C个通道的对应的通道之间的卷积运算。可如下对C对2-D滤波器和对应的2-D输入特征图的卷积结果求和以生成3-D输出530-1、......、或530-N中的M个输出特征图中的索引为m的输出特征图上的卷积输出(例如,像素)Oe,f m:
其中m对应于输出特征图的索引以及M个3-D滤波器中的3-D滤波器的索引。Xc eD+r,fD+s是3-D输入中的2-D输入特征图的C个通道中的索引为C的输入特征图中的具有水平像素坐标eD+r和竖直像素坐标fD+s的像素的值。D是滑动窗口步幅距离。e和f是M个输出特征图中对应的输出特征图中的输出像素的坐标,并且可对应于特定的滑动窗口。r和s对应于滑动窗口或2-D滤波器内的特定位置(例如,像素或元素)。Wc,m r,s是对应于索引为m的3-D滤波器中索引为C的2-D滤波器的位置(r,s)处的像素的权重。等式(3)指示,为了计算输出特征图m上的位置(e,f)处的每个卷积输出(例如,像素)Oe,f m,可将索引为C的输入特征图中的滑动窗口内的每个像素Xc eD+r,fD+s乘以对应的权重Wc,m r,s以生成乘积,可计算针对索引为C的输入特征图中的每个滑动窗口内的像素的乘积的部分和,然后可计算所有C个输入特征图的部分和的总和以确定M个输出特征图中索引为m的对应的输出特征图中的位置(e,f)处的像素的值Oe,f m。
在一个示例中,对于3-D滤波器510-1和3-D输入520-1,3-D滤波器510-1中的C个2-D滤波器中的每个2-D滤波器512可对应于3-D输入520-1中的相应的输入特征图522,并且可用于与对应的输入特征图522进行卷积(例如,滤波),其中输入特征图522中的滑动窗口524中的每个像素可乘以2-D滤波器512中的对应像素以生成乘积,并且可对针对滑动窗口524中的所有像素的乘积求和以生成部分和。C个2-D滤波器512(以及对应的输入特征图522)的部分和可被相加在一起以生成3-D输出530-1中的输出特征图530-1-1上的位置(e,f)处的输出像素532。滑动窗口524可基于两个维度上的步幅D而在3-D输入520-1中的所有C个输入特征图522上移位,以生成3-D输出530-1的输出特征图530-1-1中的不同位置处的另一个输出像素532。滑动窗口524可在所有C个输入特征图522上一起重复地移位,直到生成3-D输出530-1中的输出特征图530-1-1上的所有输出像素532为止。
每个3-D滤波器510-2、......、或510-M可用于如上文相对于3-D滤波器510-1所描述与3-D输入520-1进行卷积,以生成3-D输出530-1中的各自相应的输出特征图530-1-2、......、或530-1-M。类似地,每个3-D滤波器510-1、......、或510-M可用于如上文相对于3-D滤波器510-1和3-D输入520-1所描述与3-D输入520-N进行卷积,以生成3-D输出530-N中的各自相应的输出特征图530-N-1、......、或530-N-M。
图6示出了涉及一批(N=1)C个通道(C=3)的输入数据620和M组(M=2)的C个滤波器(C=3)的卷积运算的示例。图6所示的示例可为相对于图5描述的模型500的具体示例,其中批次N的数量为1。如所示,输入数据620包括3个输入特征图622、622和624(例如,输入通道),每个输入特征图对应于一个输入通道。滤波器包括第一组滤波器610-1和第二组滤波器610-2,其中第一组滤波器610-1可包括三个2-D滤波器612-1、614-1和616-1,并且第二组滤波器610-2可包括三个2-D滤波器612-2、614-2和616-2。
第一组滤波器610-1中的每个2-D滤波器612-1、614-1或616-1可与对应的输入特征图622、622或624进行卷积,并且三个输入特征图的卷积的结果可被相加以生成输出特征图630中的输出特征图630-1。例如,滤波器612-1中的像素可乘以输入特征图622上的窗口622-1中的对应像素,并且可将乘积相加以生成第一部分和。滤波器614-1中的像素可乘以输入特征图624上的窗口624-1中的对应像素,并且可将乘积相加以生成第二部分和。滤波器616-1中的像素可乘以输入特征图626上的窗口626-1中的对应像素,并且可将乘积相加以生成第三部分和。第一部分和、第二部分和以及第三部分和可被相加在一起以生成输出特征图630-1上的输出像素632-1。输出特征图630-1上的其他输出像素可通过使窗口或滤波器一起在输入特征图上移位以相同的方式来生成。
类似地,第二组滤波器610-2中的每个2-D滤波器612-2、614-2或616-2可与对应的输入特征图622、622或624进行卷积,并且可对三个输入特征图的卷积的结果求和以生成输出特征图630中的输出特征图630-2。例如,滤波器612-2中的像素可乘以输入特征图622上的窗口622-1中的对应像素,并且可将乘积相加以生成第一部分和。滤波器614-2中的像素可乘以输入特征图624上的窗口624-1中的对应像素,并且可将乘积相加以生成第二部分和。滤波器616-2中的像素可乘以输入特征图626上的窗口626-1中的对应像素,并且可将乘积相加以生成第三部分和。第一部分和、第二部分和以及第三部分和可被相加在一起以生成输出特征图630-2上的输出像素632-2。输出特征图630-2上的其他输出像素可通过使窗口或滤波器一起在输入特征图上移位以相同的方式来生成。
如上文论述的模型所示,神经网络的操作(例如,进行推断)通常包括获取输入数据或输入激活、针对层中的每个节点并行地执行乘法和累加运算、以及提供输出激活。当硬件架构能够进行高度并行化计算时,可实现通过响应时间来衡量的神经网络的最优性能。中央处理单元(CPU)(其也可被称为通用处理单元)可具有多个核(例如,2至64个或更多个核)并且可通过使用多个执行线程来提高并行性。然而,CPU核往往针对顺序处理进行优化。出于这个原因和其他原因,因此CPU在为神经网络执行推断时往往响应时间很慢。图形处理单元(GPU)可通过具有专门被配置用于进行并行计算的数千个小而有效的核来实现并行性。因此,在执行神经网络时,GPU可实现比CPU远远更好的性能。然而,单独的GPU计算引擎本质上仍然可能主要是按顺序的,使得需要存储器操作才能将一个计算引擎的输出提供给另一个计算引擎的输入。神经网络的速度也可能会受到存储器等待时间或数据传输带宽的限制。
专用或特定领域的神经网络处理器在执行神经网络时可实现比CPU和GPU两者更好的性能。神经网络处理器可采用包括处理元件(PE)阵列的空间架构,其中处理元件可形成处理链并且可将数据直接从一个处理元件传递到另一个处理元件。这可显著地减少存储器事务的数量。在一些示例中,权重或输入可被预加载到处理元件阵列中。在一些示例中,神经网络处理器还可包括片上缓冲器,所述片上缓冲器可存储从处理器存储器读取的值并且可将值分配给处理器中的多个计算引擎。计算引擎还可包括用于存储中间结果的小型局部寄存器文件(例如,小型存储器)。具有片上存储器层次结构可通过减少存储器等待时间来提高神经网络的操作效率。
图7是示出根据某些实施方案的用于执行诸如张量运算的神经网络操作的集成电路装置的示例的框图。图7所示的示例包括加速器702。在各种示例中,加速器702可使用处理元件阵列710、激活引擎716和/或池化引擎718来对一组输入数据(例如,输入数据750)执行计算。在一些示例中,加速器702可为诸如神经网络处理器的处理器的集成电路部件。处理器可具有其他集成电路部件,包括额外的加速器引擎。
在一些实施方案中,加速器702可包括存储器子系统704(例如,状态缓冲器),所述存储器子系统包括多个存储体714。每个存储体714可能能够独立地存取,这意味着一个存储体的读取不依赖于另一个存储体的读取。类似地,对一个存储体的写入并不会影响或限制对不同的存储体的写入。在一些情况下,可同时对每个存储体进行读取和写入。可使用各种技术来具有可独立存取的存储体714。例如,每个存储体可为物理上分开的存储器部件,其具有与每个其他存储体的地址空间分开且独立的地址空间。在此示例中,每个存储体可具有至少一个读取通道并且可具有可同时使用的至少一个单独的写入通道。在这些示例中,存储器子系统704可准许同时对多个存储体的读取或写入通道进行访问。作为另一个示例,存储器子系统704可包括仲裁逻辑,使得例如多个存储体714的输出之间的仲裁可导致使用多于一个存储体的输出。在这些和其他示例中,虽然由存储器子系统704全局地管理,但是每个存储体可独立于任何其他存储体来操作。
使存储体714可独立地存取可提高加速器702的效率。例如,可同时读取值并将所述值提供给处理元件阵列710的每一行,使得整个处理元件阵列710能够在一个时钟周期内使用。作为另一个示例,可在将处理元件阵列710所计算的结果写入到存储器子系统704的同时读取存储体714。相比之下,单个存储器一次可能只能够服务于一次读取或写入。对于单个存储器,例如可能需要多个时钟周期来为处理元件阵列710的每一行读取输入数据,之后才可启动处理元件阵列710。
在各种实现方式中,存储器子系统704可被配置为同时服务于多个客户端,包括处理元件阵列710、激活引擎716、池化引擎718以及通过通信结构720访问存储器子系统704的任何外部客户端。在一些实现方式中,能够服务于多个客户端可能意味着存储器子系统704至少具有与客户端一样多的存储体。在一些情况下,处理元件阵列710的每一行都可被视为单独的客户端。在一些情况下,处理元件阵列710的每一列都可输出结果,使得每一列都可被视为单独的写入客户端。在一些情况下,来自处理元件阵列710的输出可被写入到存储体714中,所述存储体随后可为处理元件阵列710提供输入数据。作为另一个示例,激活引擎716和池化引擎718可包括多个执行通道,所述执行通道中的每一者可为单独的存储器客户端。例如,可使用静态随机存取存储器(SRAM)来实现存储体714。
在各种实现方式中,存储器子系统704可包括控制逻辑。控制逻辑可例如跟踪存储体714中的每一者的地址空间,识别将从中读取或写入其中的存储体714,和/或在存储体714之间移动数据。在一些实现方式中,存储体714可被硬连线到特定客户端。例如,一组存储体714可被硬连线以向处理元件阵列710的各行提供值,其中一个存储体服务于一行。作为另一个示例,一组存储体可被硬连线以从处理元件阵列710的各列接收值,其中一个存储体接收一列的数据。
处理元件阵列710是加速器702的计算矩阵。处理元件阵列710可例如执行并行积分、卷积、相关和/或矩阵乘法等。处理元件阵列710包括按行和列排列的多个处理元件711,使得由一个处理元件711输出的结果可直接输入到另一个处理元件711中。不在处理元件阵列710的外侧边缘上的处理元件711因此可从其他处理元件711而不是从存储器子系统704接收数据以对所述数据进行操作。
在各种示例中,处理元件阵列710使用脉动执行,其中数据以规则的间隔从不同方向到达每个处理元件711。在一些示例中,输入数据可从左侧流入到处理元件阵列710中并且可在顶部处加载权重值。在一些示例中,权重和输入数据可从左侧流动,并且部分和可从上到下流动。在这些和其他示例中,乘法和累加运算作为对角波前移动通过处理元件阵列710,其中数据向右移动并向下移动穿过阵列。控制信号可与权重同时从左侧输入,并且可连同计算一起横向和纵向地流动。
在各种实现方式中,处理元件阵列710中的列数决定了处理元件阵列710的计算能力,并且行数决定了实现处理元件阵列710的最大利用率所需的存储器带宽。处理元件阵列710可具有例如64列和128行,或某一其他数量的列和行。
在图7中以插图示出了处理元件711的示例。如由此示例所示,处理元件711可包括乘法器-累加器电路。来自左侧的输入可包括例如输入数据i和权重值w,其中输入数据是从一组输入数据或一组中间结果中获取的值,并且权重值是来自将神经网络的一个层连接到下一层的一组权重值。一组输入数据可为例如提交用于识别或对象辨别的图像、提供用于言语辨别的音频片段、用于自然语言处理或机器翻译的文本字符串、或者需要分析来确定下一步行动的游戏的当前状态等。在一些示例中,输入数据和权重值输出到右侧,以输入到下一个处理元件711。
在所示的示例中,来自上方的输入可包括部分和p_in,这从另一个处理元件711或从处理元件阵列710的前一轮计算提供。当开始对新的一组输入数据进行计算时,处理元件阵列710的顶行可接收p_in的固定值,诸如零。如由此示例所示,i和w一起相乘并且结果与p_in相加以产生新的部分和p_out,所述新的部分和可输入到另一个处理元件711中。处理元件711的各种其他实现方式是可能的。
来自处理元件阵列710中最后一行的输出可暂时地存储在结果缓冲器712(例如,部分和(PSUM)缓冲器)中。结果可为中间结果,所述中间结果可写入到存储体714以提供给处理元件阵列710来进行额外计算。替代地,结果可为最终结果,一旦写入到存储体714,所述最终结果就可通过通信结构720从存储器子系统704中读取以由系统进行输出。
在一些实现方式中,加速器702包括激活引擎716。在这些实现方式中,激活引擎716可将来自处理元件阵列710的结果组合成一个或多个输出激活。例如,对于卷积神经网络,可对来自多个通道的卷积求和以产生单个通道的输出激活。在其他示例中,可能需要将来自处理元件阵列710中的一个或多个列的结果累加来产生神经网络中的单个节点的输出激活。在一些示例中,可绕过激活引擎716。
在各种示例中,激活引擎716可包括多个单独的执行通道。在这些示例中,执行通道可对应于处理元件阵列710的列,并且可对列的输出执行操作,其结果可存储在存储器子系统704中。在这些示例中,激活引擎716可能能够执行1到N个并行计算,其中N等于处理元件阵列710中的列数。在一些情况下,可同时执行计算中的一项或多项。每个执行通道可执行的计算的示例包括指数、平方、平方根、恒等式、二进制阶跃、双极阶跃、反曲和斜坡以及其他示例。
在一些实现方式中,加速器702可包括池化引擎718。池化是对处理元件阵列710的列的输出的组合。组合可包括例如计算最大值、最小值、平均值、中值、求和、乘法或者另一种逻辑或数学组合。在各种示例中,池化引擎718可包括可对来自处理元件阵列710的对应列的值进行操作的多个执行通道。在这些示例中,池化引擎718可能能够执行1到N个并行计算,其中N等于处理元件阵列710中的列数。在各种示例中,池化引擎718的执行通道可并行和/或同时操作。在一些示例中,可绕过池化引擎718。
在本文中,激活引擎716和池化引擎718可被统称为执行引擎。处理元件阵列710是执行引擎的另一个示例。执行引擎的另一个示例是直接存储器存取(DMA)引擎,所述引擎可位于加速器702外部。
输入数据750可通过通信结构720到达。通信结构720可将加速器702连接到处理器的其他部件,诸如可从输入/输出(I/O)装置、存储驱动器或网络接口获得输入数据750的DMA引擎。输入数据750可为例如一维数据,诸如字符串或数字序列,或者二维数据,诸如图像的像素值的阵列或音频信号随时间变化的频率和振幅值的阵列。在一些示例中,输入数据750可为三维的,例如可能就像自动驾驶汽车所使用的情境信息或虚拟现实数据的情况一样。在一些实现方式中,存储器子系统704可包括用于输入数据750的单独的缓冲器。在一些实现方式中,当加速器702接收到输入数据750时,输入数据750可存储在存储体714中。
在一些示例中,加速器702可实现神经网络处理引擎。在这些示例中,对于一组输入数据750,加速器702可执行神经网络以执行任务,为此训练过神经网络。对一组输入数据执行神经网络可被称为推断或执行推断。
神经网络的权重可连同神经网络操作将针对的输入数据750一起存储在存储器子系统704中。神经网络还可包括指令,所述指令可对处理元件阵列710进行编程以对权重和输入数据执行各种计算。指令也可存储在存储器子系统704中、存储体714中或单独的指令缓冲器中。处理元件阵列710可输出中间结果,所述中间结果表示神经网络的单独的层的输出。在一些情况下,激活引擎716和/或池化引擎718可被启用来进行神经网络的某些层所要求的计算。加速器702可将中间结果存储在存储器子系统704中以输入到处理元件阵列710中以便计算神经网络的下一层的结果。处理元件阵列710还可从神经网络的最后一层输出最终结果。最终结果可存储在存储器子系统704中,然后从中复制到主机处理器存储器或另一个位置。
图8示出了根据某些实施方案的包括处理元件(PE)阵列820的计算引擎800的简化示例。计算引擎800可为加速器702或PE阵列710的简化示例。在图8所示的示例中,处理元件阵列820可包括N×M阵列的PE,在M列中的每一列中具有N个PE并且在N行中的每一行中具有M个PE。在一个示例中,N可为128并且M可为64,使得PE阵列820可包括8192个PE。
每个PE可包括行输入总线822、列输入总线824、列输出总线826以及行输出总线828。PE可经由行输入总线822从同一行中的前一个PE(在左侧上)(或从外部电路)接收输入。PE也可经由列输入总线824从同一列中的前一个PE(在顶部上)(或从外部电路)接收输入。PE可基于输入而执行浮点或整数算术运算(例如,乘法和累加(MAC)),并且经由列输出总线826将算术运算的结果传输到同一列中的后一个(较低)PE(或外部电路)。PE还可经由行输出总线828将输入转发给同一行中的后一个PE(向右转发)。
PE阵列820的每一行可处理一个输入数据集,所述输入数据集包括多个输入数据元素,诸如表示压平的多维矩阵的一维向量。PE阵列820的每一列可生成来自不同的输入数据集的输入数据元素的加权和。例如,当计算引擎800即将处理N个输入像素组810、812、814、......、以及816时,第一行可接收像素组810的输入数据元素,第二行可接收输入像素组812的输入数据元素,第三行可接收输入像素组814的输入数据元素,......,并且第M行可接收输入组816的输入数据元素。每个PE可包括一次将处理一个输入数据元素的乘法器823。例如,PE可(例如,从行输入总线822)接收输入数据元素和权重,并且使用乘法器823来生成相乘乘积以表示加权的输入数据元素。权重可为卷积内核(例如,滤波器)的元素,或者全连接层的两层上的节点之间的连接权重。此外,PE还可从同一列中的前一个PE(例如,从列输入总线824)接收部分加权和。部分加权和表示由PE上方的各行的PE接收的输入数据集的输入数据元素的加权和。PE可包括相加825,其可将加权的输入数据元素与部分加权和相加,并且(例如,通过列输出总线826)将更新的部分加权和传递到同一列中的下面的PE。每一列的底行处的PE可生成由该列中所有PE接收到的输入数据元素的加权和。
在一些实施方案中,PE阵列820的每个PE的操作可与时钟信号同步以提高PE阵列820与神经网络处理器的其他部件(例如,加速器702)之间的互操作性。每个PE还可包括时序逻辑电路(例如,寄存器、锁存器、触发器、状态机等)以为加法器和乘法器电路存储输入数据、权重和输出数据,并且使数据同步流入和流出电路。每个PE的时序逻辑电路可由同一个时钟信号或时钟信号的副本来提供时钟,使得数据可在时钟周期期间同步地按顺序移入和/或移出PE。例如,在一些实施方案中,在第一时钟周期中,第二行的PE 820b可接收像素组812的第一输入数据元素,而且从第一行的PE 820a接收包括像素组810的加权的第一输入数据元素的部分和。在第一时钟周期内,PE 820b可将输入数据元素乘以权重,将相乘乘积与部分和相加以生成更新的部分和,并且将更新的部分和存储在内部寄存器中。在第二时钟周期中,PE 820b可将更新的部分和转发给下面第三行上的PE 820c,所述PE可执行乘法和累加以生成更新的部分和。在第三时钟周期中,PE 820c可将更新的部分和转发给下面第四行上的下一个PE,所述PE可执行乘法和累加以生成更新的部分和。更新的部分和可沿着每一列向下传播,直到所述更新的部分和在第M时钟周期由第M行上的PE 820d输出到输出缓冲器830(也被称为PSUM缓冲器)为止。
在一些实施方案中,将上文相对于图5和图6以及等式(3)描述的张量运算映射到PE阵列(例如,PE阵列820)以供执行可包括将M个3-D滤波器中的每一者映射到PE阵列的相应的列,并且将3-D输入中的C个输入特征图(例如,C个通道)中的每一者映射到PE阵列的相应的行。例如,每个2-D输入特征图中的H×W个像素可被压平以形成一维向量并且映射到PE阵列的某一行。每个3-D滤波器中的C×R×S个权重或像素可被压平以形成一维向量并且映射到PE阵列的某一列。部分和可在每一列中竖直地累加。在处理一批N个3-D输入(各自包括C个通道)的情况下,PE阵列的每一行都可映射到N个2-D输入特征图。
如上文所描述,诸如输入像素、滤波器权重和待累加的部分和之类的数据在PE之间的移动可减少对状态缓冲器或片外存储器的存取。在一些实施方案中,输入特征图可为固定的并且滤波器的权重可发生偏移,这可被称为“图像固定”模型。在一些实施方案中,可使用“权重固定”模型,其中滤波器的权重是固定的(从状态缓冲器预加载到PE阵列中的寄存器中),而图像是移动的(在计算期间从状态缓冲器加载),以便最小化权重的移动成本。在一些实施方案中,PE的输出可存储在PE处的寄存器中并且保持固定以最小化部分和的移动成本,其中输入特征图和权重可移动通过PE阵列和状态缓冲器。
图9示出了根据某些实施方案的使用包括处理元件阵列910的计算引擎的示例进行的权重固定卷积运算的简化示例。在图9所示的示例中,处理元件阵列910包括四行和四列处理元件912。处理元件阵列910的输入920可包括四(对应于C)个输入通道922、924、926和928。每个输入通道可对应于一个输入特征图或如上文所描述的N个(在示例中N=1)输入中的每一者中的一个输入特征图。每个输入特征图在该示例中可包括8×8矩阵,并且可被压平为具有64个元素的一维向量。PE阵列910可生成四(对应于M)个输出特征图,一个输出特征图来自PE阵列910的一列。
在卷积运算期间,四个3-D滤波器(具有维度C×R×S)中的每一者中的四个2-D滤波器中的每个2-D滤波器(具有维度R×S)的权重可被预加载到PE阵列910中。例如,如图9所示,用于第一输出特征图的四个2-D滤波器(对应于第一3-D滤波器或m=0)中的每一者中的第一元素(r=0,s=0)可被加载到PE阵列910的第一列中的四个PE中的相应的PE 912中,用于第二输出特征图的四个2-D滤波器(对应于第二3-D滤波器或m=1)中的每一者中的第一元素(例如,r=0,s=0)可被加载到PE阵列910的第二列中的四个PE中的相应的PE 912中,用于第三输出特征图的四个2-D滤波器(对应于第三3-D滤波器或m=2)中的每一者中的第一元素(r=0,s=0)可被加载到PE阵列910的第三列中的四个PE中的相应的PE 912中,并且用于第四输出特征图的四个2-D滤波器(对应于第四3-D滤波器或m=3)中的每一者中的第一元素(r=0,s=0)可被加载到PE阵列910的第四列中的四个PE中的相应的PE 912中。因此,代表四个3-D滤波器中的16个2-D滤波器的第一元素的16个值被加载到PE阵列910中。然后可将每个输入特征图的一维向量中的元素从例如状态缓冲器移位到PE阵列910中,并且可乘以PE阵列910中的预加载权重。可将用于四个通道922、924、926和928的每一列中的乘积累加以生成四个部分和值。在每个输入特征图的一维向量中的元素移位到PE阵列910中时,可生成第一部分和向量PSUM0,0(930),所述第一部分和向量可包括四个输出特征图的四个部分和子向量。在一些实施方案中,输入特征图中元素的移位可以是基于卷积的期望的步幅,使得输出特征图的每个部分和子向量可包括期望数量的元素(例如,如上文所描述的E×F)。
然后可将表示四个3-D滤波器中的16个2-D滤波器的第二元素(例如,r=0,s=1)的十六(16)个值加载到PE阵列910中。可将每个输入特征图的一维向量中的元素移位到PE阵列910中,并且可乘以PE阵列910中的预加载权重。可将每一列中的乘积累加以生成第二部分和向量PSUM0,1(932),所述第二部分和向量包括四个输出特征图的四个部分和子向量。可将16个2-D滤波器中的每个元素加载到PE阵列910中并且乘以一维向量中的元素以生成包括四个输出特征图的四个部分和子值的部分和向量,直到生成部分和向量PSUMR-1,S-1(934)为止,所述部分和向量对应于每个2-D滤波器中的元素(R-1,S-1)并且包括四个输出特征图的四个部分和子向量。可将部分和向量PSUM0,0(930)、PSUM0,1(932)、......、以及PSUMR-1,S-1(934)中且对应于每个相应的输出特征图的部分和子向量累加以生成可对应于压平的输出特征图的相应的向量940、942、944或946。
如上文所描述,神经网络模型可包括多个卷积层,并且因此神经网络可执行多个卷积运算(例如,张量运算)以提取特征并且进行推断。在一些实施方案中,由于加速器中PE阵列的有限大小(例如,128×64),卷积运算可能需要拆分为多个卷积运算以串行地执行。
图10A示出了使用神经网络模型进行推断的一系列运算的示例。在图10所示的示例中,可能需要执行包括运算A(1010)和运算B(1020)的两个运算来进行推断。运算A(1010)可例如从512个输入特征图生成512个输出特征图。运算B(1020)可例如从512个输入特征图生成512个输出特征图。运算A(1010)和运算B(1020)可在时间段T内在计算引擎(例如,加速器)上顺序地执行。在一些实施方案中,为了提高推断的吞吐量,可使用多个计算引擎来并行地进行推断。
图10B示出了使用多个计算引擎进行并行推断的示例。例如,加速器1可在时间段T期间顺序地执行运算A(1010-1)和运算B(1020-1)。加速器2可在相同的时间段T期间顺序地执行运算A(1010-2)和运算B(1020-2)。因此,在时间段T期间,可进行两次推断。因此,可通过并行地使用多个处理引擎来改进系统的吞吐量和所述系统进行推断的平均时间。然而,进行推断的等待时间保持不变(例如,T)。
图11示出了由多个计算引擎执行来进行如例如图10B所示的并行推断的操作的示例。由第一计算引擎执行的操作可由数据流图1100示出,而由第二计算引擎执行的操作可由数据流图1105示出。数据流图1100和数据流图1105可例如由编译器生成。多个计算引擎可在同一个集成电路装置上或在多个集成电路装置上。计算引擎的类型的示例可包括处理元件阵列、激活引擎和池化引擎以及其他示例。在各种示例中,数据流图中的每个节点可表示将由集成电路装置的特定计算引擎执行的操作。操作可包括例如存储器存取(例如,读取/写入)、计算和决策制定。
在图11所示的示例中,数据流图1100可包括节点1110,其可包括存储器存取操作(例如,存储器读取操作);节点1120,其可包括用于第一推断的卷积运算A(例如,在第一卷积层中);节点1130,其可包括存储器存取操作(例如,包括存储器读取和写入操作);节点1140,其可包括用于第一推断的卷积运算B(例如,在第二卷积层中);以及节点1150,其可包括存储器存取操作(例如,存储器写入操作)和/或决策制定操作。类似地,数据流图1105可包括节点1115,其可包括存储器存取操作(例如,存储器读取操作);节点1125,其可包括用于第二推断的卷积运算A(例如,在第一卷积层中);节点1135,其可包括存储器存取操作(例如,包括存储器读取和写入操作);节点1145,其可包括用于第二推断的卷积运算B(例如,在第二卷积层中);以及节点1155,其可包括存储器存取操作(例如,存储器写入操作)和/或决策制定操作。
数据流图1100与数据流图1105中的节点之间的连接可被称为边,并且在一些情况下可表示节点之间的数据和/或资源依赖性。例如,当计算引擎使用另一个计算引擎的输出作为计算的输入时,可能会存在数据依赖性。当两个操作都不需要使用另一个操作生成的输出数据作为输入数据时,两个操作不具有数据依赖性。例如,当第一计算引擎需要使用第二计算引擎也需要使用的存储器位置时,可能会存在资源依赖性。例如,第二计算引擎可能需要将某一值写入到所述存储器位置,而第一计算引擎可能需要读取所述值并且同时将所述值用于计算中。作为另一个示例,第一执行引擎可能(例如,由于可用的存储器有限)需要将值写入到存储器位置,而第二计算引擎正在对相同的存储器位置读取或写入值。由于节点之间的数据和/或资源依赖性,一些操作可能需要顺序地执行,其中一个操作可能仅在某一事件发生之后才开始,而所述事件可能在另一个操作已经完成时发生。
在一些实施方案中,在一些操作之间可能不存在数据和/或资源依赖性,或者操作可被布置为使得在一些操作之间可能不存在数据和/或资源依赖性。因此,这些操作可能不需要顺序地执行。同样,这些操作可由多个计算引擎并行地执行以减少执行这些操作的等待时间。
图12示出了根据某些实施方案的使用多个计算引擎进行推断的示例。在图12所示的示例中,可能需要执行包括运算A和运算B的两个运算来进行推断。运算A可例如从512个输入特征图生成512个输出特征图。运算B可例如从512个输入特征图生成512个输出特征图。运算A和运算B可被设计为使得它们之间不存在数据和/或资源依赖性。为了进行第一推断,加速器1可执行运算A(1210-1)并且加速器2可同时执行运算B(1220-1)。因此,可在时间段T/2内进行第一推断。在第一推断之后,加速器1可在时间段T/2内执行运算A(1210-2)并且加速器2可同时执行运算B(1220-2)以进行第二推断。因此,可通过并行地使用多个处理引擎来改进系统的吞吐量和进行推断的平均时间,并且还可减少进行推断的等待时间(例如,减少至约T/2)。应当注意,在不包括诸如存储器存取操作的其他操作的情况下,当仅考虑使用PE阵列的计算时间时,推断时间段或等待时间为T/2。
图13示出了根据某些实施方案的如例如图12所示的由多个计算引擎执行来进行推断的操作的示例。如上文相对于图12所描述,每个推断可包括运算A(例如,张量运算,诸如卷积运算)和运算B(例如,张量运算,诸如卷积运算)。由第一计算引擎执行的操作可由数据流图1300示出,而由第二计算引擎执行的操作可由数据流图1305示出。数据流图1300和数据流图1305可例如由编译器生成。多个计算引擎可在同一个集成电路装置上或在多个集成电路装置上。
数据流图1300可包括节点1310,其可包括存储器存取操作(例如,存储器读取操作);节点1320,其可包括用于第一推断的卷积运算A;节点1330,其可包括存储器存取操作(例如,包括存储器写入和/或读取操作)和/或决策制定操作;节点1340,其可包括用于第二推断的卷积运算A;以及节点1350,其可包括存储器存取操作(例如,存储器写入操作)和/或决策制定操作。类似地,数据流图1305可包括节点1315,其可包括存储器存取操作(例如,存储器读取操作);节点1325,其可包括用于第一推断的卷积运算B;节点1335,其可包括存储器存取操作(例如,包括存储器写入和/或读取操作)和/或决策制定操作;节点1345,其可包括用于第二推断的卷积运算B;以及节点1355,其可包括存储器存取操作(例如,存储器写入操作)和/或决策制定操作。在一些实施方案中,可基于节点1330和节点1335处的组合操作而进行预测或决策。在一些实施方案中,可基于节点1350和节点1355处的组合操作而进行预测或决策。
在一些实施方案中,在一些应用(诸如预测或决策可用于实时控制或其他实时操作的一些应用)中可能期望尽快进行预测或决策。在一些情况下,可使用输出特征图的一部分,诸如一些但不是所有输出特征图,或者每个输出特征图中的一部分(例如,几行)来进行早期预测或决策。因此,诸如卷积运算的张量运算可被划分为多个子运算,其中每个子运算可由计算引擎执行以生成输出特征图的一部分,并且子运算的结果可单独地使用或组合地使用来进行早期预测或决策。
图14示出了根据某些实施方案的使用多个计算引擎通过将神经网络的运算拆分为可由多个计算引擎并行地执行的子运算来进行推断的示例。在图14所示的示例中,可能需要执行包括运算A和运算B的两个运算来进行推断。运算A可例如从512个输入特征图生成512个输出特征图。运算B可例如从512个输入特征图生成512个输出特征图。在运算A与运算B之间可能存在或可能不存在数据和/或资源依赖性。
为了减少推断的等待时间,可将运算A划分为在其之间不具有数据和/或资源依赖性的子运算,使得子运算可由不同的计算引擎并行地执行,其中每个子运算可由相应的计算引擎执行并且可生成输出特征图的一部分。例如,运算A可被划分为在其之间不具有数据和/或资源依赖性的两个子运算,其中两个子运算都不需要使用由另一个子运算生成的输出数据作为输入数据。每个子运算可用于生成运算A的结果的一部分,诸如从512个输入特征图生成256个输出特征图,或者从512个输入特征图生成512个输出特征图中的每一者中的行的一半。类似地,运算B可被划分为在其之间不具有数据和/或资源依赖性的子运算,使得子运算可在不同的计算引擎上并行地执行。由于在执行运算A的子运算时可能不会执行运算B的子运算,因此运算A和运算B可能具有数据和/或资源依赖性。
为了进行第一推断,加速器1可执行运算A的子运算OPA-1(1410-1),并且加速器2可同时执行运算A的子运算OPA-2(1410-2)。因此,在不包括诸如存储器存取操作的其他操作的情况下,当仅考虑使用PE阵列的计算时间时,运算A可在时间段T/4内完成。在一些实施方案中,子运算OPA-1(1410-1)的结果和子运算OPA-2(1410-2)的结果可单独地使用来进行预测或决策。例如,可基于输出特征图的数量的一半或基于每个输出特征图的一半而进行预测或决策。在一些实施方案中,子运算OPA-1(1410-1)的结果和子运算OPA-2(1410-2)的结果可被级联来形成运算A的完整结果。
类似地,加速器1可执行运算B的子运算OPB-1(1420-1),并且加速器2可同时执行运算B的子运算OPB-2(1420-2)。因此,在不包括诸如存储器存取操作的其他操作的情况下,当仅考虑使用PE阵列的计算时间时,运算B可在时间段T/4内完成。在一些实施方案中,子运算OPB-1(1420-1)的结果和子运算OPB-2(1420-2)的结果可单独地使用来进行预测或决策。例如,可基于输出特征图的数量的一半或基于运算B的每个输出特征图的一半而进行预测或决策。在一些实施方案中,子运算OPB-1(1420-1)的结果和子运算OPB-2(1420-2)的结果可被级联来形成运算B的完整结果。因此,在不包括诸如存储器存取操作的其他操作时,在仅考虑使用PE阵列的计算时间的情况下,用于第一推断的运算A和运算B可在约T/2的时间段内完成,或者在使用多于两个计算引擎来执行运算A和运算B时在更短的时间段内完成。
在第一推断之后,可类似地进行第二推断。例如,加速器1可为第二推断执行运算A的子运算OPA-1(1430-1),并且加速器2可同时为第二推断执行运算A的子运算OPA-2(1430-2)。加速器1之后可为第二推断执行运算B的子运算OPB-1(1440-1),并且加速器2同时可为第二推断执行运算B的子运算OPB-2(1440-2)。在不包括诸如存储器存取操作的其他操作时,在仅考虑使用PE阵列的计算时间的情况下,为第二推断执行运算A和运算B的总时间可为T/2,或者在使用多于两个计算引擎来执行运算A和运算B时更短。因此,可通过并行地使用多个处理引擎来改进系统的吞吐量和进行推断的平均时间,并且还可减少进行推断的等待时间(例如,T/2、T/4或更短)。
图15示出了根据某些实施方案的如例如图14所示的由多个计算引擎执行来进行推断的操作的示例。如上文相对于图14所描述,每个推断可包括运算A(例如,张量运算,诸如卷积运算)和运算B(例如,张量运算,诸如卷积运算)。运算A和运算B各自可被划分为K个子运算,所述子运算可由多个(例如,K个)计算引擎诸如本文公开的加速器执行。由第一计算引擎执行的操作可由数据流图1500示出,而由第K计算引擎执行的操作可由数据流图1505示出。数据流图1500、......、以及1505可例如由编译器生成。多个计算引擎可在同一个集成电路装置上或在多个集成电路装置上。
数据流图1500可包括节点1510,其可包括存储器存取操作(例如,存储器读取操作);节点1520,其可包括用于推断的运算A的子运算A-1;节点1530,其可包括存储器存取操作(例如,包括存储器写入和/或读取操作)和/或(部分)决策制定操作;节点1540,其可包括用于推断的运算B的子运算B-1;以及节点1550,其可包括存储器存取操作(例如,存储器写入操作)和/或决策制定操作。类似地,数据流图1505可包括节点1515,其可包括存储器存取操作(例如,存储器读取操作);节点1525,其可包括用于推断的运算A的子运算A-K;节点1535,其可包括存储器存取操作(例如,包括存储器写入和/或读取操作)和/或(部分)决策制定操作;节点1545,其可包括用于推断的运算B的子运算B-K;以及节点1555,其可包括存储器存取操作(例如,存储器写入操作)和/或决策制定操作。如上文所描述,在一些实施方案中,可在节点1530、节点1535、节点1550或节点1555处独立地进行部分预测或决策。在一些实施方案中,可基于节点1530和节点1535处的组合操作而进行部分预测或决策。在一些实施方案中,可基于节点1550和节点1555处的组合操作而进行预测或决策。
在图14和图15所示的示例中,当运算A和运算B在其之间不具有数据和/或资源依赖性时,可在四个或更多个计算引擎上并行地执行运算A的两个或更多个子运算和运算B的两个或更多个子运算,以进一步减少进行推断的等待时间,例如减少至约T/4或更短。
图16示出了根据某些实施方案的使用多个计算引擎(例如,加速器)通过将神经网络的运算拆分为可由多个计算引擎并行地执行的子运算来进行推断的示例。在图16所示的示例中,可能需要执行包括运算A和运算B的两个运算来进行推断。运算A可例如从512个输入特征图生成512个输出特征图。运算B可例如从512个输入特征图生成512个输出特征图。在运算A与运算B之间可能不存在数据和/或资源依赖性。
为了减少进行推断的等待时间,可将运算A划分为两个或更多个子运算,诸如子运算OPA-1和OPA-2。运算B可被划分为两个或更多个子运算,诸如子运算OPB-1和OPB-2。为了进行第一推断,加速器1可执行子运算OPA-1(1610-1),加速器2可执行子运算OPA-2(1610-2),加速器3可执行子运算OPB-1(1620-1),并且加速器4可执行子运算OPB-2(1620-2)。因此,在不包括诸如存储器存取操作的其他操作的情况下,当仅考虑使用PE阵列的计算时间时,可由四个加速器在时间段T/4期间并行地进行第一推断。类似地,为了进行第二推断,加速器1可执行子运算OPA-1(1630-1),加速器2可执行子运算OPA-2(1630-2),加速器3可执行子运算OPB-1(1640-1),并且加速器4可执行子运算OPB-2(1640-2)。因此,在不包括诸如存储器存取操作的其他操作的情况下,当仅考虑使用PE阵列的计算时间时,可由四个加速器在时间段T/4期间并行地进行第二推断。
如上文相对于图5、图6和图9所描述,诸如卷积运算的张量运算可使用输入张量,所述输入张量包括N个(例如,一个或多个)3-D输入,每个3-D输入包括输入特征图(各自具有维度H×W)的C个通道;以及滤波器,所述滤波器包括M个3-D滤波器,每个3-D滤波器各自包括2-D滤波器(各自具有维度R×S)的C个通道。因此,输入张量可包括N×C×H×W个像素值,并且滤波器可包括总共M×C×R×S个权重值。同样如上文所描述,C个输入通道(各自包括N×H×W个像素值)可被映射到PE阵列的行,并且M个输出通道或3-D滤波器(各自包括C×R×S个权重值)可被映射到PE阵列的列。因此,可能存在划分张量运算诸如卷积运算的许多不同的方式。在一些实施方案中,张量运算可被划分为使得每个子运算可生成输出张量(例如,输出特征图)的一部分,所述部分可用于进行预测或决策和/或可保存到用于输出张量的存储器空间(例如,在存储器空间中级联),其中可能不需要额外的算术计算(例如,求和或累加)来生成输出特征图。
图17示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例。如所示,将由PE阵列1720执行的卷积运算可使用N个3-D输入,每个3-D输入包括2-D输入特征图(各自具有维度H×W)的C个通道;以及滤波器,所述滤波器包括M个3-D滤波器,每个3-D滤波器包括2-D滤波器(各自具有维度R×S)的C个通道。输入特征图1730可被压平为C个输入通道,每个输入通道包括N×H×W个像素值,其中可能需要将每个输入通道映射到PE阵列1720中的一行。滤波器1740可被压平为M个通道,每个通道包括C×R×S个权重值,其中可能需要将M个通道中的每一者映射到PE阵列1720中的一列。在图17所示的示例中,M可能大于PE阵列1720中的列数。因此,PE阵列1720可能不以如上文相对于例如图9所描述的操作来执行卷积运算。
根据某些实施方案,用于卷积运算的M个3-D滤波器(对应于输出通道)可被划分为K个组,其中每个组可包括M/K个3-D滤波器或输出通道。因此,卷积运算可被划分为K个子运算,其中每个子运算可使用M/K个3-D滤波器和输入特征图1730(包括C个通道,每个通道包括N×H×W个像素值)以在M/K个输出通道上生成输出特征图,其中每个输出通道可包括N个输出特征图,每个输出特征图包括E×F个像素。K个子运算可由上文描述的多个(例如,K个)计算引擎并行地执行,其中每个子运算可由一个计算引擎在更短的时间段内执行,因为待加载的权重更少,并且存在更少的列供输入特征图的每个通道中的输入像素值传播通过PE阵列1720的所有列。
例如,第一子运算可由第一加速器1710-1使用PE阵列1720-1来执行。第一加速器1710-1可使用输入特征图1730和包括M/K个3-D滤波器的第一组3-D滤波器1740-1以在M/K个输出通道中生成第一组输出特征图1750-1。第K子运算可由加速器K(1710-K)使用PE阵列1720-K来执行。加速器K(1710-K)可使用输入特征图1730和包括M/K个3-D滤波器的第K组3-D滤波器1740-K以在M/K个输出通道中生成第K组输出特征图1750-K。由K个加速器生成的输出特征图是卷积运算的最终输出特征图,并且因此不需要额外的累加。由K个加速器中的每一者生成的输出特征图可保存到用于卷积运算的输出特征图的存储器空间的一部分中,并且可用于进行预测或决策。
图18示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例。如所示,将由PE阵列1820执行的卷积运算可使用N个3-D输入,每个3-D输入包括2-D输入特征图(各自具有维度H×W)的C个通道;以及3-D滤波器1840,所述3-D滤波器包括M个3-D滤波器,每个3-D滤波器包括2-D滤波器(各自具有维度R×S)的C个通道,以生成包括M个输出通道的输出特征图的输出特征图1850。每个输出通道可包括N个输出特征图,每个输出特征图包括E×F个像素。输入特征图1830可被压平为C个输入通道,每个输入通道包括N×H×W个像素值,其中可能需要将每个输入通道映射到PE阵列1820中的一行。3-D滤波器1840可被压平为M个通道,每个通道包括C×R×S个权重值,其中可能需要将M个通道中的每一者映射到PE阵列1820中的一列。
根据某些实施方案,用于卷积运算的输入特征图1830的C个通道可被划分为L组,其中每个组可包括N×H×W/L个像素。因此,卷积运算可被划分为L个子运算,其中每个子运算可使用M个3-D滤波器和输入特征图1830的一部分(包括C个通道,每个通道包括N×H×W/L个像素值)以在M个输出通道上生成每个输出特征图的一部分(例如,几行),其中每个输出通道可包括各自包括E×F个像素的N/L个输出特征图,或者各自包括E×F/L个像素的N个输出特征图。L个子运算可由上文描述的多个(例如,L个)计算引擎并行地执行,其中每个子运算可由一个计算引擎在更短的时间段内执行,因为在输入特征图的每个通道中将有更少的输入像素值传播通过PE阵列1820中的某一行中的PE。
例如,第一子运算可由第一加速器1810-1使用PE阵列1820-1来执行。第一加速器1810-1可使用M个3-D滤波器1840和输入1830-1(包括C个输入通道,每个输入通道包括N×H×W/L个像素值)以生成包括M个输出通道的第一组输出特征图1850-1,其中每个输出通道可包括N/L个输出特征图或N×E×F/L个像素。例如,当N=1时,每个输出通道可包括1/L(例如,E/L行)的输出特征图或E×F/L个像素。第L子运算可由加速器L(1810-L)使用PE阵列1820-L来执行。加速器L(1810-L)可使用M个3-D滤波器1840和输入1830-L(包括C个输入通道,每个输入通道包括N×H×W/L个像素值)以生成包括M个输出通道的第L组输出特征图1850-L,其中每个输出通道可包括N/L个输出特征图。例如,当N=1时,每个输出通道可包括1/L(例如,E/L行)的输出特征图或E×F/L个像素。由L个加速器生成的输出特征图是卷积运算的最终输出特征图,并且因此不需要额外的累加。由L个加速器中的每一者生成的输出特征图可保存到用于卷积运算的输出特征图的存储器空间中,并且可用于进行预测或决策。
图19示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例。如所示,将由PE阵列1920执行的卷积运算可使用N个3-D输入,每个3-D输入包括输入特征图(各自具有维度H×W)的C个通道;以及3-D滤波器1940,所述3-D滤波器包括M个3-D滤波器,每个3-D滤波器包括2-D滤波器(各自具有维度R×S)的C个通道,以生成包括M个输出通道的输出特征图的输出特征图。每个输出通道可包括N个输出特征图,每个输出特征图包括E×F个像素。输入特征图1930可被压平为C个输入通道,每个输入通道包括N×H×W个像素值,其中可能需要将每个输入通道映射到PE阵列1920中的一行。3-D滤波器1940可被压平为M个通道,每个通道包括C×R×S个权重值,其中可能需要将M个通道中的每一者映射到PE阵列1920中的一列。在图19所示的示例中,M可能大于PE阵列1920中的列数。因此,PE阵列1920可能不以如上文相对于例如图9所描述的操作来执行卷积运算。
根据某些实施方案,用于卷积运算的输入特征图1930的C个通道可被划分为L组,其中每个组可包括N×H×W/L个像素。此外,用于卷积运算的M个3-D滤波器1940(对应于输出通道)可被划分为K个组,其中每个组可包括M/K个3-D滤波器或输出通道。因此,卷积运算可被划分为L×K个子运算,其中每个子运算可使用M/K个3-D滤波器和输入特征图1930的一部分(包括C个通道,每个通道包括N×H×W/L个像素值)以在M/K个输出通道上生成每个输出特征图的一部分(例如,几行),其中每个输出通道可包括各自包括E×F个像素的N/L个输出特征图。L×K个子运算可由上文描述的多个(例如,L×K个)计算引擎并行地执行,其中每个子运算可由一个计算引擎在更短的时间段内执行,因为在输入特征图的每个通道中将有更少(例如,1/L)的输入像素值传播通过PE阵列1920中的每一行中的更少(例如,1/K)的PE。
例如,第一子运算可由第一加速器1910-1使用PE阵列1920-1来执行。第一加速器1910-1可使用M/K个3-D滤波器(1940-1)和输入1930-1(包括C个通道,每个通道包括N×H×W/L个像素值)以在M/K个输出通道中生成第一组输出特征图1950-1,其中每个输出通道可包括N/L输出特征图或N×E×F/L个像素。例如,当N=1时,每个输出通道可包括1/L(例如,E/L行)的输出特征图或E×F/L个像素。第(K×L)子运算可由加速器K×L(1910-K×L)使用PE阵列1920-K×L来执行。加速器K×L(1910-K×L)可使用M/K个3-D滤波器(1940-K)和输入1930-L(包括C个通道,每个通道包括N/L个输入特征图或N×H×W/L个像素值)以在M/K个输出通道中生成第(K×L)组输出特征图1950-K×L,其中每个输出通道可包括N/L个输出特征图。例如,当N=1时,每个输出通道可包括1/L(例如,E/L行)的输出特征图或E×F/L个像素。由K×L个加速器生成的输出特征图是卷积运算的最终输出特征图,并且因此不需要额外的累加。由K×L个加速器中的每一者生成的输出特征图可为卷积运算的1/(K×L)的输出特征图,并且可保存到用于卷积运算的输出特征图的存储器空间或者可用于进行预测或决策。
在上文相对于图17至图19描述的对神经网络的张量运算进行拆分的示例中,每个子运算可生成最终输出特征图的一部分,所述部分可用于进行预测或决策和/或可保存到用于输出特征图的存储器空间(例如,在存储器空间中级联),其中可能不需要额外的算术计算(例如,求和或累加)来生成最终输出特征图。在一些实施方案中,张量运算可被划分为使得每个子运算可生成最终输出特征图的部分和,并且可在额外的算术计算中对来自子运算的部分和进行求和以生成最终输出特征图或进行推断。
图20示出了根据某些实施方案的将神经网络的运算拆分为将由多个计算引擎并行地执行的子运算的示例。如所示,将由PE阵列2020执行的卷积运算可使用N个3-D输入,每个3-D输入包括输入特征图(各自具有维度H×W)的C个通道;以及3-D滤波器2040,所述3-D滤波器包括M个3-D滤波器,每个3-D滤波器包括2-D滤波器(各自具有维度R×S)的C个通道,以生成包括M个输出通道的输出特征图的输出特征图。每个输出通道可包括N个输出特征图,每个输出特征图包括E×F个像素。输入特征图2030可被压平为C个输入通道,每个输入通道包括N×H×W个像素值,其中可能需要将每个输入通道映射到PE阵列2020中的一行。3-D滤波器2040可被压平为M个通道,每个通道包括C×R×S个权重值,其中可能需要将M个通道中的每一者映射到PE阵列2020中的一列。在图20所示的示例中,C可能大于PE阵列2020中的行数。因此,PE阵列2020可能不以如上文相对于例如图9所描述的操作来执行卷积运算。
根据某些实施方案,用于卷积运算的输入特征图2030的C个通道可被划分为K个组,其中每个组可包括C/K个通道的输入特征图。此外,用于卷积运算的M个3-D滤波器2040(对应于输出通道)可被划分为K个组,其中每个组可包括M个3-D滤波器,每个3-D滤波器包括C/K个2-D滤波器。因此,卷积运算可被划分为K个子运算,其中每个子运算可使用M个3-D滤波器中的每一者中的C/K个2-D滤波器,以及输入特征图2030的一部分(包括C/K个通道的输入特征图,每个通道包括N×H×W个像素值)以在M个输出通道上生成输出特征图的部分和特征图,其中每个输出通道可包括N个部分和特征图,每个部分和特征图包括E×F个像素。K个子运算可由上文描述的多个(例如,K个)计算引擎并行地执行,其中每个子运算可由一个计算引擎在更短的时间段内执行,因为加载到PE阵列的权重更少,并且存在更少(例如,1/K)的行供部分和传播通过PE阵列2020中的所有行。
例如,第一子运算可由第一加速器2010-1使用PE阵列2020-1来执行。第一加速器2010-1可使用M个3-D滤波器2040中的每一者中的C/K个2-D滤波器,以及输入特征图2030的一部分(包括C/K个通道的输入特征图)以在M个输出通道上生成输出特征图的部分和特征图2050-1,其中每个输出通道可包括N个部分和特征图,每个部分和特征图包括E×F个像素。第K子运算可由加速器K(2010-K)使用PE阵列2020-K进行生成来执行。加速器K(2010-K)可使用M个3-D滤波器2040中的每一者中的C/K个2-D滤波器,以及输入特征图2030的一部分(包括C/K个通道的输入特征图)以在M个输出通道上生成输出特征图的部分和特征图2050-K,其中每个输出通道可包括N个部分和特征图,每个部分和特征图包括E×F个像素。由K个加速器生成的输出特征图的部分和特征图不是卷积运算的最终输出特征图,并且可能需要额外的累加来生成最终的输出特征图。
图21是示出根据某些实施方案的用于通过在多个计算引擎上并行地执行张量运算的子运算来使张量运算加速的方法的示例的流程图2100。流程图2100中描述的操作可由例如在主机系统上运行的编译器来执行,诸如下文相对于图22所描述的编译器和主机系统。虽然流程图2100可能将操作描述为顺序过程,但是在各种实施方案中,许多操作可并行地或同时地执行。此外,可重新安排操作的次序。过程可能具有图中未示出的额外步骤。另外,方法的实施方案可通过硬件、软件、固件、中间件、微代码、硬件描述语言或其任何组合来实现。当以软件、固件、中间件或微代码实现时,用于执行相关联的任务的程序代码或代码段可存储在诸如存储介质的计算机可读介质中。
在框2110处,主机系统可接收神经网络模型,所述神经网络模型包括第一张量运算,诸如卷积运算。张量运算可用于使用一组输入特征图和一组滤波器来生成包括一组输出特征图的输出张量。如上文所描述(例如,在图5、图6、图9和图17至图20中所描述),在一些实施方案中,该组输入特征图可包括针对N个输入数据集中的每一者的C个输入特征图,该组滤波器可包括各自包括C个滤波器矩阵的M个滤波器,并且该组输出特征图可包括针对N个输入数据集中的每一者的M个输出特征图,其中针对某一输入数据集的M个输出特征图中的每一者可为输入数据集的C个输入特征图与M个滤波器中的某一滤波器中的对应的C个滤波器矩阵之间的卷积的结果。在一些实施方案中,M可大于计算引擎中二维处理元件阵列的总列数。在一些实施方案中,C可大于计算引擎中二维处理元件阵列的总行数。
在框2120处,在主机系统上执行的编译器可将第一张量运算划分为子运算。子运算可包括在两个或更多个子运算之间不具有数据依赖性的两个或更多个子运算。两个或更多个子运算中的每一者可生成该组输出特征图的一部分。在一些实施方案中,该组输出特征图的一部分可包括该组输出特征图中输出特征图总数的一部分,其中子运算可使用该组输入特征图和该组滤波器中滤波器总数的一部分来生成该组输出特征图的所述部分。在一些实施方案中,该组输出特征图的所述部分可包括该组输出特征图的至少子集中的每个输出特征图的一部分,其中子运算可使用该组滤波器和该组输入特征图的至少子集中的每个输入特征图的一部分来生成该组输出特征图的所述部分。在一些实施方案中,该组输出特征图的所述部分可包括该组输出特征图中输出特征图总数的一部分中的每个输出特征图的一部分,其中子运算可使用该组滤波器中滤波器总数的一部分和该组输入特征图的至少子集中的每个输入特征图的一部分来生成该组输出特征图的所述部分。
在框2130处,编译器可将两个或更多个子运算中的第一子运算分配给集成电路装置上或者两个或更多个集成电路装置上的两个或更多个计算引擎中的第一计算引擎(例如,上文描述的加速器)。在框2140处,编译器可将两个或更多个子运算中的第二子运算分配给两个或更多个计算引擎中的第二计算引擎。在框2150处,编译器可生成用于并行地由第一计算引擎执行第一子运算并由第二计算引擎执行第二子运算的指令(例如,机器代码)。任选地,在框2160处,编译器可生成用于基于第一子运算的结果和/或第二子运算的结果而进行推断的指令。例如,可基于由一个子运算生成的该组输出特征图的一部分或者基于由两个或更多个子运算生成的整组输出特征图而进行推断。
在一些实施方案中,编译器还可识别神经网络模型中的第二张量运算,其中第二张量运算和第一张量运算可不具有数据依赖性。编译器可将第二张量运算划分为第二张量运算的子运算,其中第二张量运算的子运算可不具有数据依赖性。编译器可将第二张量运算的子运算中的第一子运算分配给第三计算引擎,将第二张量运算的子运算中的第二子运算分配给第四计算引擎,并且生成用于与第一张量运算的第一子运算和第一张量运算的第二子运算并行地由第三计算引擎执行第二张量运算的子运算中的第一子运算并由第四计算引擎执行第二张量运算的子运算中的第二子运算的指令。第一计算引擎、第二计算引擎、第三计算引擎和第四计算引擎可在同一个集成电路装置上,或者在两个或更多个集成电路装置上。例如,四个计算引擎可为同一个加速引擎中的四个加速器。
上文描述的技术可应用于任何张量运算或包括矩阵乘法的任何运算,诸如上文相对于图1所描述的多层感知器的运算。在一个示例中,作为卷积的替代方案,用于自然语言处理(NLP)的变换器可对每个位置进行编码,并且应用注意力机制来使两个疏远的字词关联,这可被并行化来加速训练。变换器中的注意力机制是一种基于一些键和查询而计算一组值(例如,信息)的相关性的方式。注意力机制可由变换器使用来根据当前正在处理的内容而集中于相关信息。注意力权重可表示在处理解码器状态(例如,查询)时编码器隐藏状态(例如,值)的相关性,并且可基于编码器隐藏状态(例如,键)和解码器隐藏状态(例如,查询)而进行计算。变换器可通过使用可对依赖性进行建模的多头注意力机制来减少顺序操作的数量,以将来自输入/输出序列的两个符号与恒定的O(1)操作数量关联,而与所述符号在输入或输出语句中的距离无关。
变换器通常包括编码器和解码器。编码器可将符号表示的输入序列(x1,......,xn)映射到连续表示序列z=(z1,......,zn)。解码器可一次生成一个符号并且基于z而生成符号的输出序列(y1,......,ym)。编码器可将源语句的嵌入用于其键、值和查询,而解码器可将编码器的输出用于其键和值,并且将目标语句的嵌入用于其查询。变换器通常将堆叠的自注意力和逐点的完全连接层用于编码器和解码器两者,其中先前生成的符号在生成新符号时用作额外输入。
图22A示出了根据某些实施方案的可使用本文公开的技术的变换器2200的示例。变换器2200可包括编码器2210和解码器2220。编码器2210可包括N个层2212的堆叠。每个层2212可包括执行矩阵乘法和逐元素变换的两个子层。第一子层可包括多头自注意力网络,并且第二子层可包括逐位置完全连接的前馈网络。可围绕两个子层中的每一者使用残差连接,之后是层归一化。残差连接将输入加到子层的输出,并且是一种使得训练深度网络更容易的方式。层归一化是深度学习中的类似于批量归一化的归一化方法。每个子层的输出可被写为LayerNorm(x+Sublayer(x)),其中Sublayer(x)是由子层实现的函数。在编码器阶段,变换器首先为输入语句中的每个字词生成初始输入(例如,输入嵌入和位置编码)。对于每个字词,自注意力聚合所述语句的上下文中所有其他字词(成对)的信息,以为每个字词创建一个新表示,所述新表示是序列中所有其他字词的注意表示。对语句中的每个字词多次重复这一操作,以连续地将更新的表示构建在先前表示的顶部上。
解码器2220也可包括N个层2222的堆叠。除了上文描述的每个编码器层2212中的两个子层之外,解码器2220中的每个层2222还可包括对编码器堆栈的输出执行多头注意力的第三子层。类似于编码器2210中的层2212,可将围绕子层中的每一者的残差连接用于解码器2220中的层2222中,之后是层归一化。解码器堆栈中的自注意力子层可被修改(标记为“掩蔽型多头注意力”)以在未来时间步中对解码器的输入进行掩蔽,并且防止位置关注后续位置。这种掩蔽与输出嵌入偏移一个位置相结合确保了对位置i的预测仅可依赖于小于i的位置处的已知输出。解码器2220可从左到右一次生成一个字词。在某一层处生成的第一字词可以是基于编码器的最终表示(偏移1个位置)。随后预测的每个字词都可关注解码器的该层处的先前生成的字词以及编码器的最终表示。
注意力函数可将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。查询向量q对关注的字词/位置进行编码。键向量k对关注的字词进行编码。键向量k和查询向量q共同决定了相应的字词之间的注意力评分。输出被计算为值的加权和,其中分配给每个值的权重通过查询与对应键的兼容函数来计算。
图22B示出了缩放的点积注意力框2230的示例。在缩放的点积注意力框2230中,输入包括维度都为dk的查询和键、以及维度为dv的值。根据以下等式,可同时对一组查询计算缩放的点积注意力:
其中Q是打包在一起的查询的矩阵,并且K和V是打包在一起的键和值的矩阵。缩放的点积注意力计算查询与所有键的点积(注意力评分)(“MatMul”),将点积的每个元素除以缩放因子(“缩放”),应用softmax函数来获得值的权重,然后使用权重来确定值的加权和。
当仅使用单一注意力来计算值的加权和时,可能难以捕捉输入的各个不同的方面。例如,在“I like cats more than dogs”语句中,人们可能想要捕捉以下事实:所述语句比较了两个实体,同时保留了被比较的实际实体。变换器可使用多头自注意力子层来允许编码器和解码器同时查看整个输入序列。为了学习不同的表示,多头注意力将不同的线性变换应用于每个注意力头的值、键和查询,其中可将不同的权重矩阵用于多个注意力头,并且可将多个注意力头的结果级联在一起。
图22C示出了用于上文描述的变换器2200的编码器2210和解码器2220中的多头注意力子层2240的示例。代替利用d模型维键、值和查询执行单个注意力函数,多头自注意力子层2240利用不同的所学习的线性投影多次(例如,h次)将查询、键和值分别线性地投影到dk、dk和dv。使用多个(例如,h个)缩放的点积注意力对查询、键和值的h个投影版本并行地执行注意力函数,从而产生h dv维输出值。每个注意力头可具有如图22B所示的结构,并且可通过由权重矩阵给出的三个不同的投影来表征:
多个缩放的点积注意力的输出被级联,从而产生维度为di×(h×dv)的矩阵,其中di是输入序列的长度。然后,将具有维度为(h×dv)×de的权重矩阵W0的线性层应用于级联结果,从而得到维度为di×de的最终结果:
其中de是词元嵌入的维度。多头注意力允许网络共同关注来自不同位置处的不同表示子空间的信息。可使用张量运算来执行多头注意力,所述张量运算可被拆分为多个子运算(例如,每个头一个子运算)并且如上文所描述由多个计算引擎并行地执行。
图23示出了根据某些实施方案的来自可使用本文公开的技术中的一些的变换器双向编码器表示(BERT)模型2300的示例。BERT模型可包括多层双向变换器编码器(而不是从左到右的变换器编码器),并且不包括变换器解码器,因为BERT模型用于生成语言模型。BERT模型被设计为通过共同地对所有层中的左右上下文进行调节而对来自未标记文本中的深度双向表示进行预训练。预训练的BERT模型可利用额外的输出层进行微调,以为各种各样的任务(诸如问答和语言推断)创建最先进的模型,而不需要大量任务特定的架构修改。BERT通过使用“掩蔽型语言模型”(MLM)预训练对象来缓解单向性约束。掩蔽型语言模型随机地对来自输入的词元中的一些进行掩蔽,并且目标是仅基于被掩蔽字词的上下文而预测所述被掩蔽字词的原始词汇身份(Id)。不同于从左到右的语言模型预训练,MLM对象使得表示能够融合左右上下文,这允许对深度双向变换器进行预训练。除了掩蔽型语言模型,还可使用“下一语句预测”任务来共同地对文本对表示进行预训练。
在图23所示的示例中,BERT模型2300使用包括词元序列2306的输入,所述词元序列可包括一个或多个语句,诸如第一语句2302和第二语句2304。在一些实施方案中,一些(例如,约15%)词元2306可能会被掩蔽。输入词元2306可被嵌入向量2310中并且由编码器层2320、2330、......、以及2340处理以生成各自由向量表示的词元序列2350。编码器层2320、2330、......、以及2340可形成多层感知器。每个编码器层2320、2330、......、或2340可类似于编码器层2212并且可包括如上文相对于图22A至图22C所描述的多头注意力模型和/或全连接层。多头注意力模型可包括多个点积注意力。每个编码器层2320、2330、......、或2340的运算可包括张量运算,所述张量运算可被拆分为彼此之间不具有数据依赖性的子运算,并且因此可如上文所描述由多个计算引擎(例如,加速器)并行地执行。
图24包括示出在上面可运行诸如本文所描述的编译器2430的主机系统2400的示例的框图。所示的主机系统2400是计算装置的示例,并且包括处理器2402、处理器存储器2404、至少一个存储装置2406、各种输入/输出(I/O)装置2408和至少一个网络接口2410。在图24的示例中,主机系统2400还包括加速引擎2412,所述加速引擎是可使主机系统2400所执行的某些运算或计算加速的集成电路装置。在各种示例中,主机系统2400可被实现为数据中心中的服务器、台式计算机、膝上型计算机、平板计算机或智能手机以及其他示例。在一些示例中,以下论述为在主机系统2400中执行或包括在其中的操作或部件可在其他计算机装置中执行或包括在其中。例如,编译器2430可在主机系统2400上执行,而加速引擎2412位于不同的主机系统。
处理器2402是可以指令的形式执行程序代码的集成电路装置。程序代码可用于各种软件应用或工具,诸如操作系统2420或所示的编译器2430。当处理器2402在执行程序时,用于程序的指令可存储在处理器存储器2404中。指令也可存储在其他位置,诸如存储装置2406上,并且可在处理器2402需要时加载到处理器存储器2404中。处理器2402还可使用处理器存储器2404来暂时存储处理器2402操作所针对的其他数据。在各种示例中,处理器存储器2404是易失性存储器类型,诸如随机存取存储器的类型,但是非易失性存储器类型可替代地或另外地用于处理器存储器2404。
存储装置2406是可包括非易失性存储器的装置的示例。例如,存储装置2406可为磁盘驱动器、固态驱动器或光盘驱动器以及其他示例。存储装置2406还可为非暂时性的,使得存储在存储装置2406上的程序代码和其他数据在存储装置2406未通电时保持存在。
存储装置2406是外围装置的一个示例,它是可联接到主机系统2400以向主机系统2400添加功能的部件。外围装置的其他示例包括输入/输出装置2408和网络接口2410。输入/输出装置2408可包括用户输入和输出装置,诸如键盘、鼠标、触摸屏、传声器、显示屏、扬声器、打印机和扫描仪以及其他示例。可使用网络接口卡来实现的网络接口2410可提供对一个或多个网络的访问。网络接口2410可包括例如用于连接网络电缆的物理端口和/或用于与Wi-Fi和/或蜂窝网络通信的无线天线。网络接口2410也可被描述为I/O装置。
加速引擎2412也是外围装置或I/O装置的另一种类型。加速引擎2412是专门构建来执行可由处理器2402执行但是可由加速引擎2412更快地执行的某些操作的装置。例如,加速引擎2412可为神经网络加速器,并且因此可能能够比处理器2402执行计算时更有效地执行神经网络的大规模并行计算。作为另一个示例,加速引擎2412可为图形处理单元(GPU),并且可被优化来执行图形渲染所需的计算。可由加速引擎2412实现的装置的其他示例包括密码加速器、压缩和解压缩加速器、3-D加速器、正则表达式加速器、安全加速器等。
在各种示例中,加速引擎2412可执行程序代码来执行某些操作。例如,当加速引擎2412是神经网络加速器时,加速引擎2412可被编程为执行特定的神经网络,诸如执行图像辨别的神经网络或执行机器翻译的神经网络。作为另一示例,为了支持神经网络的执行,加速引擎2412可被编程为执行诸如以下的操作:将神经网络的数据从处理器存储器2404(例如)拷贝到加速引擎2412中、将神经网络的输入数据从处理器存储器2404拷贝到加速引擎2412中中、和/或将来自加速引擎2412的结果拷贝到处理器存储器2404中以及其他示例。
为了生成加速引擎2412的程序代码,在各种示例中,主机系统2400可执行编译器2430。一般而言,编译器是将用人类可读语言编写的程序代码翻译为可由集成电路装置读取和处理的格式(例如,机器指令)的软件程序。在图24的示例中,加速引擎2412是神经网络加速器,并且编译器2430用于将神经网络描述编译为将由加速引擎2412执行的指令。当加速引擎2412实现不同类型的加速器时,可使用另一个编译器。如上文所描述,在一些实施方案中,编译器2430可用于将张量运算划分为子运算并且可将子运算的执行调度到不同的加速引擎和/或加速引擎中的不同的加速器上。
例如,当操作系统2420从输入/输出装置2408接收键盘、鼠标、触摸屏、语音命令或其他输入时,可激活编译器2430。输入还可包括用于编译器2430的参数,诸如对编译过程的选项进行编译和配置的输入代码2442。一旦编译器2430被激活,处理器2402就可将用于编译器2430的指令加载到处理器存储器2404中,并且可执行指令。
在图24的示例中,编译器2430包括第一阶段2432、第二阶段2436和第三阶段2440,它们各自执行不同的操作来产生经编译代码2444。在其他示例中,编译器2430可将第一阶段2432、第二阶段2436和/或第三阶段2440的操作组合成更少的阶段,或者可将阶段中一个的操作划分为多个阶段。
第一阶段2432可接收和处理输入代码2442。输入代码2442可用诸如Java、C++或Tensorflow以及许多其他示例的高级编程语言描述程序。输入代码2442可描述例如执行图像辨别、言语辨别、机器翻译或其他操作的步骤。例如,可从存储装置2406获得输入代码2442。另外地,尽管此处未示出,但是输入代码2442可位于处理器存储器2404中,或者可使用网络接口2410从网络位置获得。对输入代码2442的处理可包括将输入代码2442中描述的操作分类为各个层,其中一个层的输出提供对下一层的输入。处理还可包括识别将由处理器2402执行而不是由加速引擎2412执行的步骤。例如,可能需要处理器2402通过执行驱动程序2422来执行诸如配置直接存储器存取(DMA)描述符以将数据移入或移出加速引擎2412以及其他示例之类的步骤。
可将第一阶段2432的输出2434组织在例如神经网络的层、节点以及节点之间的连接中。第二阶段2436可对该输出2434执行中间处理。例如,在任一个层中或在某一层中的任一个节点处执行的操作对于加速引擎2412来说可能太多而无法同时执行。加速引擎2412可例如具有用于计算所需数据的有限量的本地存储空间,或者计算可能会超过加速引擎2412一次能够执行的计算。在此示例中,第一阶段2432可将层或节点的操作分解为更小的操作,所述更小的操作可正好配合加速引擎的本地存储器和/或可正好配合加速引擎2412的计算能力。对第一阶段2432的输出2434的处理可包括其他步骤,诸如安排或确定加速引擎2412和/或处理器2402将执行操作的次序以及其他示例。
在各种示例中,第二阶段2436的输出2438包括将由加速引擎2412的部件按步骤将被执行的次序执行的各种步骤。输出2438可表示为例如数据流图,其中图中的节点表示存储器操作、计算和其他操作,并且节点之间的边或连接表示节点之间的依赖性,诸如数据依赖性、存储器依赖性或操作依赖性以及其他示例。
第三阶段2440可对第二阶段2436的输出2438进行操作,并且在产生将由加速引擎2412执行的指令之前执行各种步骤。这些步骤可包括例如去除冗余依赖性、通过将同步指令插入到代码中来分辨或处理节点之间的依赖性、识别存储器使用或存储器带宽使用中可能的优化、以及其他操作。在一些示例中,第三阶段2440可包括数据调度器2450。
第三阶段2440的输出是经编译代码2444,所述经编译代码可包括呈二进制格式的机器指令。在一些示例中,经编译代码2444可存储在处理器存储器2404中。替代地或另外地,经编译代码2444可拷贝到存储装置2406或网络位置。如上所述,加速引擎2412可位于不同的主机系统,在此情况下,经编译代码2444可通过网络接口2410发送到其他主机系统。
在图24的示例中,主机系统2400可执行管理加速引擎2412的驱动程序2422,所述驱动程序也可被称为装置驱动程序或运行时驱动程序。驱动程序2422可提供在主机系统2400(或另一个主机系统)上执行的应用与加速引擎2412之间的接口。例如,驱动程序2422可提供应用程序接口(API),所述API定义用于将输入数据馈送到加速引擎2412并定义对输入数据执行的操作的函数。在这个和其他示例中,驱动程序2422可将加速引擎2412配置为执行操作。例如,驱动程序2422可识别加速引擎2412将执行的神经网络,以及神经网络的经编译代码2444在处理器存储器2404中或在存储装置2406上所处的位置。驱动程序2422还可加载到加速引擎2412中或使加速引擎2412加载经编译代码2444,可加载神经网络操作将针对的输入数据或使加速引擎2412加载所述输入数据,和/或可使加速引擎2412对输入数据执行操作。一旦加速引擎2412完成,加速引擎2412可通知驱动程序2422,并且驱动程序2422可将结果传送回到请求所述结果的应用。
图25包括示出加速引擎2500的示例的框图。加速引擎2500是可包括一个或多个加速器2502a-2502n的集成电路的示例,所述加速器可类似于上文相对于例如图7描述的加速器。例如,在一个实施方案中,加速引擎2500可包括四个加速器,所述加速器可用于如上文所描述并行地执行卷积运算的四个子运算。
在图25的示例中,加速引擎2500包括多个加速器2502a-2502n,每个加速器可执行一组运算。在各种示例中,加速器2502a-2502n用于特定类型的运算,使得加速器2502a-2502n可比通用处理器执行类似运算时更快地执行运算。在各种示例中,为了执行一组运算,执行运算将针对的输入数据必须首先移动到加速器2502a-2502n中。另外地,在一些情况下,程序代码也被移动到加速器2502a-2502n中,所述程序代码对加速器2502a-2502n将对数据执行的运算进行编程。在所示的示例中,加速引擎2500包括N个加速器2502a-2502n。可包括在加速引擎2500中的加速器的示例包括图形加速器、浮点加速器、神经网络加速器等。在各种示例中,加速器2502a-2502n各自可为相同的(例如,每个加速器都是图形加速器)或可为不同的(例如,加速器2502a-2502n包括图形加速器、浮点加速器和神经网络加速器)。
示例加速引擎2500还包括用于与外部存储器通信的DRAM控制器2542a-2542k。在此示例中,外部存储器使用DRAM 2530来实现。在所示的示例中,加速引擎2500包括K个DRAM控制器2542a-2542k,每个DRAM控制器可能能够与一组独立的DRAM存储体进行通信。在其他示例中,其他类型的RAM技术可用于外部存储器。DRAM控制器2542a-2542k也可被称为存储器控制器。
在各种示例中,加速器2502a-2502n的输入数据和/或程序代码可存储在DRAM2530中。不同的程序可使加速器2502a-2502n执行不同的运算。例如,当加速器中的一者是神经网络加速器时,一个程序可将神经网络加速器配置为执行言语辨别,而另一个程序可将神经网络加速器配置为执行图像辨别。在各种示例中,可利用不同的程序对不同的加速器2502a-2502n进行编程,使得每个加速器执行一组不同的运算。在各种示例中,处理器2548a-2548s可管理程序代码从DRAM 2530到加速器2502a-2502n的移动。
示例加速引擎2500还包括用于与系统中的I/O装置2532通信的I/O控制器2544a-2544p。加速引擎2500可通过例如处理器总线与I/O装置通信。在一些示例中,可使用外围部件互连(PCI)和/或PCI总线协议的变体来实现处理器总线。处理器总线可将加速引擎2500连接到I/O装置,例如像输入和输出装置、存储器控制器、存储装置和/或网络接口卡以及其他事物。在一些示例中,I/O控制器2544a-2544p可使得加速引擎2500能够充当主机处理器的I/O装置。例如,加速引擎2500可为来自主机处理器的输入数据以及指示将对输入数据执行的操作(例如,特定计算或分析)的命令的接收者。在所示的示例中,加速引擎2500包括p个I/O控制器2544a-2544p,每个I/O控制器可包括单独的根联合体并且可与单独的一组I/O装置2532通信。在其他示例中,诸如超路径互连(UPI)的其他标准化总线协议可用于主机总线。在其他示例中,可使用专有总线协议。
加速引擎2500中的数据移动可由一个或多个处理器2548a-2548s管理,所述处理器也可被称为数据管理处理器。在图25的示例中,加速引擎2500包括并入到装置中(例如,在同一硅管芯上)的s个处理器2548a-2548s。在其他示例中,处理器2548a-2548s可在加速引擎2500的外部(例如,在不同的管芯上和/或在不同的封装中)。在一些示例中,处理器2548a-2548s可管理数据从I/O装置2532到加速器2502a-2502n或DRAM 2530的移动。例如,输入数据可位于I/O装置2532处或处理器存储器中,并且处理器2548a-2548s可将来自I/O装置2532或处理器存储器的输入移动到加速器或DRAM 2530中。作为另一个示例,加速器2502a-2502n的程序代码可位于I/O装置2532上或处理器存储器中。
示例加速引擎2500还包括可在加速器2502a-2502n、DRAM控制器2542a-2542k和I/O控制器2544a-2544p之间移动数据的DMA引擎2546a-2546d。在所示的示例中,加速引擎2500包括D个DMA引擎2546a-2546d。在一些实现方式中,DMA引擎2546a-2546d可被分配给特定任务,诸如将数据从DRAM控制器2542a-2542d移动到加速器2502a-2502n,或在I/O控制器2544a-2544p与加速器2502a-2502n之间移动数据。例如,可通过利用DMA引擎2546a-2546d对描述符进行排队来分配这些任务,其中描述符标识数据块的地址和将执行的操作(例如,读取或写入)。例如,描述符可指引DMA引擎指示DMA控制器从DRAM 2530读取数据块。作为另一示例,描述符可指示DMA引擎将由DMA控制器读取的数据写入加速器。另外的描述符可用于将数据从加速器移动到DRAM 2530。
在各种示例中,处理器2548a-2548s中的每一者可负责管理不同加速器的数据移动。在一些示例中,处理器可管理多于一个加速器的数据移动。类似地,在各种示例中,处理器2548a-2548s中的每一者可被分配给一个或多个DMA引擎2546a-2546d。在这些和其他示例中,处理器2548a-2548s、加速器2502a-2502n和DMA引擎2546a-2546d之间的关联由每个相应的处理器执行的程序代码决定。
在示例加速引擎2500中,各种部件可通过芯片互连2520来通信。芯片互连2520主要包括用于在加速引擎2500的部件之间路由数据的布线。在一些情况下,芯片互连2520可包括最少量的逻辑,诸如控制数据方向的多路复用器、用于处理跨时钟域的触发器和时序逻辑。
图26包括示例网络2600的图,所述网络可包括一个或多个主机系统,诸如图24所示的主机系统。例如,图26的示例网络2600包括多个节点2602a-2602h,其中一者或多者可为诸如图24所示的主机系统。节点2602a-2602h中的其他可为其他计算装置,每个计算装置至少包括用于存储程序指令的存储器、用于执行指令的处理器和用于连接到网络2600的网络接口。
在各种示例中,网络2600可用于处理数据。例如,可在节点2602a-2602h中的一者处或从网络2600可与其通信的其他网络2608接收输入数据。在此示例中,输入数据可被引导到网络2600中包括加速引擎的节点,以供加速引擎对所述输入数据进行操作并且产生结果。然后,结果可传输到从中接收输入数据的节点或其他网络。在各种示例中,可从包括节点2602a-2602h中的一者或多者和/或位于其他网络2608中的计算装置的各种来源积累输入数据,并且可将所积累的输入数据引导到网络2600中的一个或多个主机系统。然后可将来自主机系统的结果分发回到从中收集输入数据的来源。
在各种示例中,节点2602a-2602h中的一者或多者可负责操作诸如积累输入数据以供主机系统进行操作、跟踪哪些主机系统忙碌以及哪些可接受更多工作、确定主机系统是否正确地和/或最有效地操作、监控网络安全和/或其他管理操作。
在图26的示例中,节点2602a-2602h使用具有点对点链路的交换架构来相互连接。交换架构包括多个交换机2604a-2604d,所述交换机可布置在诸如Clos网络的多层网络中。在局域网(LAN)段之间过滤和转发数据包的网络装置可被称为交换机。交换机通常在开放系统互连(OSI)参考模型的数据链路层(第2层)以及有时在网络层(第3层)操作,并且可支持多种数据包协议。图26的交换机2604a-2604d可连接到节点2602a-2602h并且在任何两个节点之间提供多条路径。
网络2600还可包括用于与其他网络2608连接的一个或多个网络装置,诸如路由器2606。路由器使用报头和转发表来确定用于转发数据包的最佳路径,并且使用诸如互联网控制消息协议(ICMP)等协议来相互通信并配置在任何两个装置之间的最佳路由。图26的路由器2606可用于连接到其他网络2608,诸如子网、LAN、广域网(WAN)和/或互联网。
在一些示例中,网络2600可包括许多不同类型的网络中的任一者或组合,诸如电缆网络、互联网、无线网络、蜂窝网络和其他专用和/或公共网络。互连的交换机2604a-2604d和路由器2606(如果存在的话)可被称为交换结构2610、结构、网络结构或简称为网络。在计算机网络的上下文中,术语“结构”和“网络”在本文可互换地使用。
节点2602a-2602h可为表示用户装置、服务提供者计算机或第三方计算机的主机系统、处理器节点、存储子系统和I/O机箱的任何组合。
用户装置可包括访问应用2632(例如,web浏览器或移动装置应用)的计算装置。在一些方面,应用2632可由计算资源服务或服务提供者托管、管理和/或提供。应用2632可允许一个或多个用户与一个或多个服务提供者计算机交互以例如访问web内容(例如,网页、音乐、视频等)。一个或多个用户装置可为计算装置,例如像移动电话、智能手机、个人数字助理(PDA)、膝上型计算机、上网本计算机、台式计算机、瘦客户端装置、平板计算机、电子书(e-book)阅读器、游戏控制台等。在一些示例中,一个或多个用户装置可经由一个或多个其他网络2608来与一个或多个服务提供者计算机通信。另外地,一个或多个用户装置可为由一个或多个服务提供者计算机(例如,与服务提供者计算机集成的控制台装置)管理、控制或以其他方式成为所述服务提供者计算机的一部分的分布式系统的一部分。
图26的一个或多个节点也可表示一个或多个服务提供者计算机。一个或多个服务提供者计算机可提供被配置为在用户装置上运行的原生应用,一个或多个用户可与之交互。在一些示例中,一个或多个服务提供者计算机可提供计算资源,诸如但不限于客户端实体、低等待时间数据存储、持久性数据存储、数据访问、管理、虚拟化、基于云的软件解决方案、电子内容性能管理等。一个或多个服务提供者计算机也可操作来向一个或多个用户提供web托管、数据库生成、计算机应用开发和/或实现平台、前述各项的组合等。在一些示例中,一个或多个服务提供者计算机可被提供为在托管计算环境中实现的一个或多个虚拟机。托管计算环境可包括一个或多个快速供应和释放的计算资源。这些计算资源可包括计算、联网和/或存储装置。托管计算环境也可被称为云计算环境。一个或多个服务提供者计算机可包括一个或多个服务器,可能布置在集群中,布置为服务器群,或者布置为彼此不相关联的单独服务器,并且可托管应用2632和/或基于云的软件服务。这些服务器可被配置为集成的分布式计算环境的一部分。在一些方面,一个或多个服务提供者计算机可另外地或替代地包括计算装置,例如像移动电话、智能手机、个人数字助理(PDA)、膝上型计算机、台式计算机、上网本计算机、服务器计算机、瘦客户端装置、平板计算机、游戏控制台等。在一些情况下,一个或多个服务提供者计算机可与一个或多个第三方计算机通信。
在一种示例配置中,一个或多个节点2602a-2602h可包括至少一个存储器2618和一个或多个处理单元(或一个或多个处理器2620)。一个或多个处理器2620可以硬件、计算机可执行指令、固件或其组合来实现。一个或多个处理器2620的计算机可执行指令或固件实现方式可包括以任何合适的编程语言编写来执行所描述的各种功能的计算机可执行指令或机器可执行指令。
]在一些情况下,一个或多个硬件处理器2620可为单核处理器或多核处理器。多核处理器可在同一处理器内包括多个处理单元。在一些示例中,多核处理器可共享某些资源,诸如总线和第二级或第三级高速缓存。在一些情况下,单核或多核处理器中的每个核还可包括多个执行逻辑处理器(或执行线程)。在这种核(例如,具有多个逻辑处理器的那些核)中,也可共享执行流水线以及还有较低级别的高速缓存的若干级。
存储器2618可存储在一个或多个处理器2620上可加载且可执行的程序指令,以及在这些程序的执行期间生成的数据。取决于一个或多个节点2602a-2602h的配置和类型,存储器2618可为易失性的(诸如RAM)和/或非易失性的(诸如ROM、快闪存储器等)。存储器2618可包括操作系统2628、一个或多个数据存储2630、一个或多个应用2632、一个或多个驱动程序2634和/或用于实现本文所公开的特征的服务。
操作系统2628可支持节点2602a-2602h的基本功能,诸如调度任务、执行应用和/或控制器外围装置。在一些实现方式中,服务提供者计算机可托管一个或多个虚拟机。在这些实现方式中,每个虚拟机可被配置为执行其自身的操作系统。操作系统的示例包括Unix、Linux、Windows、Mac OS、iOS、Android等。操作系统2628也可为专有操作系统。
数据存储2630可包括由操作系统2628、应用2632或驱动程序2634使用和/或进行操作的永久或暂时的数据。这种数据的示例包括网页、视频数据、音频数据、图像、用户数据等。在一些实现方式中,数据存储2630中的信息可通过一个或多个网络2608提供给用户装置。在一些情况下,数据存储2630可另外地或替代地包括所存储的应用程序和/或驱动程序。替代地或另外地,数据存储2630可存储标准和/或专有软件库,和/或标准和/或专有应用用户界面(API)库。存储在数据存储2630中的信息可为机器可读目标代码、源代码、解译代码或中间代码。
驱动程序2634包括可在节点中的部件之间提供通信的程序。例如,一些驱动程序2634可在操作系统2628与额外存储2622、网络装置2624和/或I/O装置2626之间提供通信。替代地或另外地,一些驱动程序2634可在应用2632与操作系统2628之间、和/或在应用2632与服务提供者计算机可访问的外围装置之间提供通信。在许多情况下,驱动程序2634可包括提供很好理解的功能的驱动程序(例如,打印机驱动程序、显示器驱动程序、硬盘驱动程序、固态装置驱动程序)。在其他情况下,驱动程序2634可提供专有或专门的功能。
一个或多个服务提供者计算机或服务器还可包括额外存储2622,所述额外存储可包括可移动存储和/或不可移动存储。额外存储2622可包括磁存储、光盘、固态盘、快闪存储器和/或带存储。额外存储2622可与一个或多个节点2602a-2602h容纳在相同的机箱中或者可在外壳中。存储器2618和/或额外存储2622及其相关联的计算机可读介质可为计算装置提供对计算机可读指令、数据结构、程序模块和其他数据的非易失性存储。在一些实现方式中,存储器2618可包括多种不同类型的存储器,诸如SRAM、DRAM或ROM。
存储器2618和额外存储2622(可移动的和不可移动的两者)是计算机可读存储介质的示例。例如,计算机可读存储介质可包括在用于存储信息的方法或技术中实现的易失性或非易失性、可移动或不可移动介质,所述信息包括例如计算机可读指令、数据结构、程序模块或其他数据。存储器2618和额外存储2622是计算机存储介质的示例。可存在于一个或多个节点2602a-2602h中的其他类型的计算机存储介质可包括但不限于PRAM、SRAM、DRAM、RAM、ROM、EEPROM、快闪存储器或其他存储器技术、CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁存储装置、固态驱动器、或者可用于存储期望的信息并且可由一个或多个节点2602a-2602h访问的某一其他介质。计算机可读介质还包括任何以上介质类型的组合,包括一种介质类型的多个单元。
替代地或另外地,计算机可读通信介质可包括计算机可读指令、程序模块或在数据信号(诸如载波或其他传输体)内传输的其他数据。然而,如本文所使用,计算机可读存储介质不包括计算机可读通信介质。
一个或多个节点2602a-2602h还可包括I/O装置2626,诸如键盘、鼠标、笔、语音输入装置、触摸输入装置、显示器、扬声器、打印机等。一个或多个节点2602a-2602h还可包括一个或多个通信信道2636。通信信道2636可提供一个或多个节点2602a-2602h的各种部件可利用来通信的介质。一个或多个通信信道2636可采用总线、环、交换结构或网络的形式。
一个或多个节点2602a-2602h还可包含一个或多个网络装置2624,所述网络装置允许一个或多个节点2602a-2602h与所存储的数据库、另一个计算装置或服务器、用户终端和/或在一个或多个网络2600上的其他装置通信。
在一些实现方式中,网络装置2624是外围装置,诸如基于PCI的装置。在这些实现方式中,网络装置2624包括用于与主机装置通信的PCI接口。术语“PCI”或“基于PCI”可用于描述PCI总线协议家族中的任何协议,包括原始PCI标准、PCI-X、加速图形端口(AGP)和PCI-Express(PCIe)或基于本文所论述的PCI协议的任何其他改进或派生的协议。基于PCI的协议是用于将诸如本地外围装置的装置连接到主机装置的标准总线协议。标准总线协议是其规范已被各种制造商定义和采纳的数据传输协议。制造商确保符合规范的装置与实现总线协议的计算系统兼容,且反之亦然。如本文所使用,基于PCI的装置还包括使用非易失性存储器Express(NVMe)通信的装置。NVMe是用于访问使用PCIe附接到计算系统的非易失性存储介质的装置接口规范。例如,总线接口模块可实现NVMe,并且网络装置2624可使用PCIe接口连接到计算系统。
基于PCI的装置可包括一个或多个功能。“功能”描述可由网络装置2624提供的操作。功能的示例包括大容量存储控制器、网络控制器、显示器控制器、存储器控制器、串行总线控制器、无线控制器以及加密和解密控制器等。在一些情况下,基于PCI的装置可包括多于一个功能。例如,基于PCI的装置可提供大容量存储控制器和网络适配器。作为另一个示例,基于PCI的装置可提供两个存储控制器,以控制两个不同的存储资源。在一些实现方式中,基于PCI的装置可具有多达八个功能。
在一些实现方式中,网络装置2624可包括单根I/O虚拟化(SR-IOV)。SR-IOV是可包括在基于PCI的装置中的扩展能力。SR-IOV允许物理资源(例如,单个网络接口控制器)显现为多个资源(例如,64个网络接口控制器)。因此,提供某一功能(例如,网络接口控制器)的基于PCI的装置在利用基于PCI的装置的装置看来可能是提供相同功能的多个装置。支持SR-IOV的存储适配器装置的功能可被分类为物理功能(PF)或虚拟功能(VF)。物理功能是装置的可被查找、管理和操纵的全特征功能。物理功能具有可用于配置或控制存储适配器装置的配置资源。物理功能包括与非虚拟化装置所具有相同的配置地址空间和存储器地址空间。物理功能可具有许多与之相关联的虚拟功能。虚拟功能与物理功能类似,但是通常可能缺乏配置资源的轻型功能,并且通常通过其底层物理功能的配置来控制。物理功能和/或虚拟功能中的每一者可被分配给在主机装置上运行的相应的执行线程(例如像,虚拟机)。
本文描述的模块可为软件模块、硬件模块或其合适的组合。如果模块是软件模块,则所述模块可体现在非暂时性计算机可读介质上并且由本文描述的任何计算机系统中的处理器处理。应当注意,所描述的进程和架构可在任何用户交互之前实时地执行或以异步模式执行。模块可以前述附图中所提议的方式配置,和/或本文描述的功能可由作为单独模块存在的一个或多个模块提供和/或本文描述的模块功能可遍布于多个模块上。
因此,应在说明性意义而不是限制性意义上理解本说明书和附图。然而,将显而易见的是:在不脱离如在权利要求中阐述的本公开的较宽泛的精神和范围的情况下,可对其做出各种修改和改变。
其他变体也在本公开的精神内。因此,尽管所公开的技术可容许各种修改和替代构造,但在附图中已示出并且在上文中详细描述了所示的其特定示例。然而,应当理解,并不意图将本公开限制于所公开的一种或多种具体形式,相反地,意图涵盖落在如所附权利要求限定的本公开的精神和范围内的所有修改、替代构造和等效物。
在描述所公开的示例的上下文中(尤其是在以下权利要求的上下文中),术语“一个(a,an)”和“所述”以及类似指称对象的使用应解释为涵盖单数和复数两者,除非在本文另外地指示或明显地与上下文矛盾。术语“包括”、“具有”、“包括”和“含有”应解释为开放式术语(即,意味着“包括但不限于”),除非另外地指出。术语“连接的”应解释为部分地或全部地纳入、附接或结合在一起,即使存在介入物。除非本文另外指明,否则本文中值范围的叙述仅仅意图用作个别地提及属于所述范围的各单独值的速记方法,并且各单独值如同在本文中对其进行个别地叙述一样并入本说明书中。除非本文另外指明或另外与上下文明显矛盾,否则本文所描述的所有方法都可以按任何合适的次序执行。本文所提供的任何以及所有示例或示例性语言(例如,“诸如”)的使用仅意图更好地说明本公开的示例,并且除非另外要求,否则不会对本公开的范围施加限制。本说明书中的语言不应解释为将任何非要求的元素指示为实践本公开所必需。
除非另外具体说明,否则诸如短语“X、Y或Z中的至少一者”的析取语言意图在上下文中理解为一般用于表示项目、项等可为X、Y或Z、或其任何组合(例如,X、Y和/或Z)。因此,这种析取语言通常不意图也不应该暗示某些示例需要相应存在X中的至少一个、Y中的至少一个或Z中的至少一个。
本文描述了本公开的各种示例,包括发明人已知用于执行本公开的最佳模式。在阅读前文描述后,那些示例的变体对于本领域普通技术人员而言可变得明显。发明人希望技术人员视情况采用此类变体,并且发明人意图以不同于如本文所具体描述的方式来实践本公开。因此,在适用法律允许的情况下,本公开包括此处所附权利要求中叙述的主题的所有修改和等效物。此外,除非本文另外指明或另外明显地与上下文矛盾,否则本公开涵盖其所有可能变体中的上文描述的元素的任何组合。
在以下示例中描述了某些实施方案。如下文所使用,对一系列示例的任何引用应理解为对该系列示例中的每个示例的分开引用(例如,“示例1至3”应理解为“示例1、示例2或示例3”)。
在示例1中,一种计算机实现的方法包括:接收包括第一张量运算的神经网络模型;将所述第一张量运算划分为所述第一张量运算的子运算,所述子运算包括两个子运算,在所述两个子运算之间不具有数据依赖性;将所述两个子运算中的第一子运算分配给第一计算引擎;将所述两个子运算中的第二子运算分配给第二计算引擎;以及生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。
在示例2中,示例1的所述计算机实现的方法的所述第一张量运算包括多层感知器运算。
在示例3中,示例1至2中任一者的所述计算机实现的方法的所述第一张量运算使用一组输入特征图和一组滤波器来生成包括一组输出特征图的输出张量。
示例4包括示例3的所述计算机实现的方法,其中:所述一组输入特征图包括针对N个输入数据集中的每一者的C个输入特征图;所述一组滤波器包括各自包括C个滤波器矩阵的M个滤波器;并且所述一组输出特征图包括针对所述N个输入数据集中的每一者的M个输出特征图,其中针对某一输入数据集的所述M个输出特征图中的每一者是所述输入数据集的所述C个输入特征图与所述M个滤波器中的某一滤波器中的所述C个滤波器矩阵之间的卷积的结果。
在示例5中,示例4的所述计算机实现的方法的所述第一计算引擎包括二维处理元件阵列,其特征在于:所述二维处理元件阵列的总列数小于M;或者所述二维处理元件阵列的总行数小于C。
在示例6中,示例3至5中任一者的所述计算机实现的方法的所述第一子运算生成所述一组输出特征图的一部分。
示例7包括示例6的所述计算机实现的方法,其中所述一组输出特征图的所述部分包括以下各项中的至少一者:所述一组输出特征图中输出特征图总数的一部分;所述一组输出特征图的至少子集中的每个输出特征图的一部分;或者所述一组输出特征图中输出特征图总数的一部分中的每个输出特征图的一部分。
在示例8中,示例6至7中任一者的所述计算机实现的方法的所述第一子运算使用以下各项中的至少一者来生成所述一组输出特征图的所述部分:所述一组输入特征图和所述一组滤波器中滤波器总数的一部分;所述一组滤波器和所述一组输入特征图的至少子集中的每个输入特征图的一部分;或者所述一组滤波器中滤波器总数的一部分和所述一组输入特征图的子集中的每个输入特征图的一部分。
在示例9中,示例1至8中任一者的所述计算机实现的方法还包括生成用于基于所述第一子运算的结果、所述第二子运算的结果或两者而进行推断的指令。
在示例10中,示例1至9中任一者的所述计算机实现的方法还包括:识别所述神经网络模型中的第二张量运算,所述第二张量运算和所述第一张量运算不具有数据依赖性;将所述第二张量运算划分为所述第二张量运算的子运算,所述第二张量运算的所述子运算不具有数据依赖性;将所述第二张量运算的所述子运算中的第一子运算分配给第三计算引擎;将所述第二张量运算的所述子运算中的第二子运算分配给第四计算引擎;以及生成用于与所述第一张量运算的所述第一子运算和所述第一张量运算的所述第二子运算并行地由所述第三计算引擎执行所述第二张量运算的所述子运算中的所述第一子运算并由所述第四计算引擎执行所述第二张量运算的所述子运算中的所述第二子运算的指令。
示例11包括一种非暂时性计算机可读介质,所述非暂时性计算机可读介质中存储有指令,所述指令在由一个或多个处理器执行时致使所述一个或多个处理器执行包括以下各项的操作:接收包括张量运算的神经网络模型;将所述张量运算划分为子运算,所述子运算包括两个子运算,在所述两个子运算之间不具有数据依赖性;将所述两个子运算中的第一子运算分配给第一计算引擎;将所述两个子运算中的第二子运算分配给第二计算引擎;以及生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。
示例12包括示例11的所述非暂时性计算机可读介质,其中所述指令进一步使所述一个或多个处理器执行包括以下各项的操作:生成用于基于所述第一子运算的结果、所述第二子运算的结果或两者而进行推断的指令,其中所述第一计算引擎和所述第二计算引擎是在同一个集成电路装置中或在两个不同的集成电路装置中。
示例13包括示例11至12中任一者的所述非暂时性计算机可读介质,其中:所述第一张量运算使用一组输入特征图和一组滤波器来生成包括一组输出特征图的输出张量;并且所述第一子运算生成所述一组输出特征图的一部分。
示例14包括示例13的所述非暂时性计算机可读介质,其中所述一组输出特征图的所述部分包括以下各项中的至少一者:所述一组输出特征图中输出特征图总数的一部分;所述一组输出特征图的至少子集中的每个输出特征图的一部分;或者所述一组输出特征图中输出特征图总数的一部分中的每个输出特征图的一部分。
在示例15中,示例13至14中任一者的所述非暂时性计算机可读介质的所述第一子运算使用以下各项中的至少一者来生成所述一组输出特征图的所述部分:所述一组输入特征图和所述一组滤波器中滤波器总数的一部分;所述一组滤波器和所述一组输入特征图的至少子集中的每个输入特征图的一部分;或者所述一组滤波器中滤波器总数的一部分和所述一组输入特征图的子集中的每个输入特征图的一部分。
示例16包括示例13至15中任一者的所述非暂时性计算机可读介质,其中:所述一组输入特征图包括针对N个输入数据集中的每一者的C个输入特征图;所述一组滤波器包括各自包括C个滤波器矩阵的M个滤波器;并且所述一组输出特征图包括针对所述N个输入数据集中的每一者的M个输出特征图,其中针对某一输入数据集的所述M个输出特征图中的每一者是所述输入数据集的所述C个输入特征图与所述M个滤波器中的某一滤波器中的所述C个滤波器矩阵之间的卷积的结果。
示例17包括示例16的所述非暂时性计算机可读介质,其中所述第一计算引擎包括二维处理元件阵列,其特征在于:所述二维处理元件阵列的总列数小于M;或者所述二维处理元件阵列的总行数小于C。
在示例18中,示例11至17中任一者的所述非暂时性计算机可读介质的所述第一张量运算包括多层感知器运算。
示例19包括一种系统,所述系统包括:处理器和包括指令的计算机可读介质,所述指令在由所述处理器执行时致使所述处理器执行包括以下各项的操作:接收包括第一张量运算的神经网络模型;将所述第一张量运算划分为所述第一张量运算的子运算,所述子运算包括两个子运算,在所述两个子运算之间不具有数据依赖性;将所述两个子运算中的第一子运算分配给第一计算引擎;将所述两个子运算中的第二子运算分配给第二计算引擎;以及生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。
在示例20中,示例19的所述系统的所述第一张量运算包括多层感知器运算。
在示例21中,示例19至20中任一者的所述系统的所述第一张量运算使用一组输入特征图和一组滤波器来生成包括一组输出特征图的输出张量。
示例22包括示例21的所述系统,其中:所述一组输入特征图包括针对N个输入数据集中的每一者的C个输入特征图;所述一组滤波器包括各自包括C个滤波器矩阵的M个滤波器;并且所述一组输出特征图包括针对所述N个输入数据集中的每一者的M个输出特征图,其中针对某一输入数据集的所述M个输出特征图中的每一者是所述输入数据集的所述C个输入特征图与所述M个滤波器中的某一滤波器中的所述C个滤波器矩阵之间的卷积的结果。
在示例23中,示例22的所述系统的所述第一计算引擎包括二维处理元件阵列,其特征在于:所述二维处理元件阵列的总列数小于M;或者所述二维处理元件阵列的总行数小于C。
在示例24中,示例21至23中任一者的所述系统的所述第一子运算生成所述一组输出特征图的一部分。
示例25包括示例24的所述系统,其中所述一组输出特征图的所述部分包括以下各项中的至少一者:所述一组输出特征图中输出特征图总数的一部分;所述一组输出特征图的至少子集中的每个输出特征图的一部分;或者所述一组输出特征图中输出特征图总数的一部分中的每个输出特征图的一部分。
示例26包括示例24至25中任一者的所述系统,其中所述第一子运算使用以下各项中的至少一者来生成所述一组输出特征图的所述部分:所述一组输入特征图和所述一组滤波器中滤波器总数的一部分;所述一组滤波器和所述一组输入特征图的至少子集中的每个输入特征图的一部分;或者所述一组滤波器中滤波器总数的一部分和所述一组输入特征图的子集中的每个输入特征图的一部分。
在示例27中,示例19至26中任一者的所述系统的所述操作还包括生成用于基于所述第一子运算的结果、所述第二子运算的结果或两者而进行推断的指令。
在示例28中,示例19至27中任一者的所述系统的所述操作还包括:识别所述神经网络模型中的第二张量运算,所述第二张量运算和所述第一张量运算不具有数据依赖性;将所述第二张量运算划分为所述第二张量运算的子运算,所述第二张量运算的所述子运算不具有数据依赖性;将所述第二张量运算的所述子运算中的第一子运算分配给第三计算引擎;将所述第二张量运算的所述子运算中的第二子运算分配给第四计算引擎;以及生成用于与所述第一张量运算的所述第一子运算和所述第一张量运算的所述第二子运算并行地由所述第三计算引擎执行所述第二张量运算的所述子运算中的所述第一子运算并由所述第四计算引擎执行所述第二张量运算的所述子运算中的所述第二子运算的指令。
Claims (15)
1.一种计算机实现的方法,所述计算机实现的方法包括:
接收包括第一张量运算的神经网络模型;
将所述第一张量运算划分为所述第一张量运算的子运算,所述子运算包括两个子运算,在所述两个子运算之间不具有数据依赖性;
将所述两个子运算中的第一子运算分配给第一计算引擎;
将所述两个子运算中的第二子运算分配给第二计算引擎;以及
生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。
2.如权利要求1所述的计算机实现的方法,其中所述第一张量运算包括多层感知器运算。
3.如权利要求1至2中任一项所述的计算机实现的方法,其中所述第一张量运算使用一组输入特征图和一组滤波器来生成包括一组输出特征图的输出张量。
4.如权利要求3所述的计算机实现的方法,其中:
所述一组输入特征图包括针对N个输入数据集中的每一者的C个输入特征图;
所述一组滤波器包括各自包括C个滤波器矩阵的M个滤波器;并且
所述一组输出特征图包括针对所述N个输入数据集中的每一者的M个输出特征图,其中针对某一输入数据集的所述M个输出特征图中的每一者是所述输入数据集的所述C个输入特征图与所述M个滤波器中的某一滤波器中的所述C个滤波器矩阵之间的卷积的结果。
5.如权利要求4所述的计算机实现的方法,其中所述第一计算引擎包括二维处理元件阵列,其特征在于:
所述二维处理元件阵列的总列数小于M;或者
所述二维处理元件阵列的总行数小于C。
6.如权利要求3至5中任一项所述的计算机实现的方法,其中所述第一子运算生成所述一组输出特征图的一部分。
7.如权利要求6所述的计算机实现的方法,其中所述一组输出特征图的所述部分包括以下各项中的至少一者:
所述一组输出特征图中输出特征图总数的一部分;
所述一组输出特征图的至少子集中的每个输出特征图的一部分;或者
所述一组输出特征图中输出特征图总数的一部分中的每个输出特征图的一部分。
8.如权利要求6至7中任一项所述的计算机实现的方法,其中所述第一子运算使用以下各项中的至少一者来生成所述一组输出特征图的所述部分:
所述一组输入特征图和所述一组滤波器中滤波器总数的一部分;
所述一组滤波器和所述一组输入特征图的至少子集中的每个输入特征图的一部分;或者
所述一组滤波器中滤波器总数的一部分和所述一组输入特征图的子集中的每个输入特征图的一部分。
9.如权利要求1至8中任一项所述的计算机实现的方法,所述计算机实现的方法还包括:
生成用于基于所述第一子运算的结果、所述第二子运算的结果或两者而进行推断的指令。
10.如权利要求1至9所述的计算机实现的方法,所述计算机实现的方法还包括:
识别所述神经网络模型中的第二张量运算,所述第二张量运算和所述第一张量运算不具有数据依赖性;
将所述第二张量运算划分为所述第二张量运算的子运算,所述第二张量运算的所述子运算不具有数据依赖性;
将所述第二张量运算的所述子运算中的第一子运算分配给第三计算引擎;
将所述第二张量运算的所述子运算中的第二子运算分配给第四计算引擎;以及
生成用于与所述第一张量运算的所述第一子运算和所述第一张量运算的所述第二子运算并行地由所述第三计算引擎执行所述第二张量运算的所述子运算中的所述第一子运算并由所述第四计算引擎执行所述第二张量运算的所述子运算中的所述第二子运算的指令。
11.一种非暂时性计算机可读介质,所述非暂时性计算机可读介质中存储有指令,所述指令在由一个或多个处理器执行时致使所述一个或多个处理器执行包括以下各项的操作:
接收包括张量运算的神经网络模型;
将所述张量运算划分为子运算,所述子运算包括两个子运算,在所述两个子运算之间不具有数据依赖性;
将所述两个子运算中的第一子运算分配给第一计算引擎;
将所述两个子运算中的第二子运算分配给第二计算引擎;以及
生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。
12.如权利要求11所述的非暂时性计算机可读介质,其中所述指令还使所述一个或多个处理器执行包括以下各项的操作:
生成用于基于所述第一子运算的结果、所述第二子运算的结果或两者而进行推断的指令,
其中所述第一计算引擎和所述第二计算引擎是在同一个集成电路装置中或在两个不同的集成电路装置中。
13.如权利要求11或12所述的非暂时性计算机可读介质,其中:
所述第一张量运算使用一组输入特征图和一组滤波器来生成包括一组输出特征图的输出张量;并且
所述第一子运算生成所述一组输出特征图的一部分。
14.如权利要求13所述的非暂时性计算机可读介质,其中所述一组输出特征图的所述部分包括以下各项中的至少一者:
所述一组输出特征图中输出特征图总数的一部分;
所述一组输出特征图的至少子集中的每个输出特征图的一部分;或者
所述一组输出特征图中输出特征图总数的一部分中的每个输出特征图的一部分。
15.一种系统,所述系统包括:
处理器;以及
包括指令的计算机可读介质,所述指令在由所述处理器执行时致使所述处理器执行包括以下各项的操作:
接收包括第一张量运算的神经网络模型;
将所述第一张量运算划分为所述第一张量运算的子运算,所述子运算包括两个子运算,在所述两个子运算之间不具有数据依赖性;
将所述两个子运算中的第一子运算分配给第一计算引擎;
将所述两个子运算中的第二子运算分配给第二计算引擎;以及
生成用于并行地由所述第一计算引擎执行所述第一子运算并由所述第二计算引擎执行所述第二子运算的指令。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/456,414 US11568238B2 (en) | 2019-06-28 | 2019-06-28 | Dynamic processing element array expansion |
US16/456,414 | 2019-06-28 | ||
PCT/US2020/039804 WO2020264282A1 (en) | 2019-06-28 | 2020-06-26 | Dynamic processing element array expansion |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114051615A true CN114051615A (zh) | 2022-02-15 |
Family
ID=71728894
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080045532.0A Pending CN114051615A (zh) | 2019-06-28 | 2020-06-26 | 动态处理元件阵列扩展 |
Country Status (4)
Country | Link |
---|---|
US (2) | US11568238B2 (zh) |
CN (1) | CN114051615A (zh) |
DE (1) | DE112020003127T5 (zh) |
WO (1) | WO2020264282A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115311536A (zh) * | 2022-10-11 | 2022-11-08 | 绍兴埃瓦科技有限公司 | 图像处理中稀疏卷积处理方法及装置 |
CN117407793A (zh) * | 2023-11-03 | 2024-01-16 | 上海无问芯穹智能科技有限公司 | 一种并行化策略优化方法、系统、设备及介质 |
Families Citing this family (32)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11704573B2 (en) * | 2019-03-25 | 2023-07-18 | Here Global B.V. | Method, apparatus, and computer program product for identifying and compensating content contributors |
US11568238B2 (en) | 2019-06-28 | 2023-01-31 | Amazon Technologies, Inc. | Dynamic processing element array expansion |
US11157705B2 (en) * | 2019-07-22 | 2021-10-26 | International Business Machines Corporation | Semantic parsing using encoded structured representation |
EP3796227A1 (en) * | 2019-09-17 | 2021-03-24 | Robert Bosch GmbH | Device and computer implemented method for training an artificial neural network |
US20210089904A1 (en) * | 2019-09-20 | 2021-03-25 | Electronics And Telecommunications Research Institute | Learning method of neural network model for language generation and apparatus for performing the learning method |
WO2021061328A1 (en) * | 2019-09-24 | 2021-04-01 | Alibaba Group Holding Limited | Method and apparatus for execution of neural network |
US11936864B2 (en) * | 2019-11-07 | 2024-03-19 | Bitmovin, Inc. | Fast multi-rate encoding for adaptive streaming using machine learning |
US11651194B2 (en) * | 2019-11-27 | 2023-05-16 | Nvidia Corp. | Layout parasitics and device parameter prediction using graph neural networks |
US11610102B1 (en) * | 2019-11-27 | 2023-03-21 | Amazon Technologies, Inc. | Time-based memory allocation for neural network inference |
US11748356B2 (en) * | 2019-12-06 | 2023-09-05 | Nec Corporation | Answering complex queries in knowledge graphs with bidirectional sequence encoders |
KR20210071471A (ko) * | 2019-12-06 | 2021-06-16 | 삼성전자주식회사 | 뉴럴 네트워크의 행렬 곱셈 연산을 수행하는 장치 및 방법 |
US11651456B1 (en) * | 2019-12-17 | 2023-05-16 | Ambarella International Lp | Rental property monitoring solution using computer vision and audio analytics to detect parties and pets while preserving renter privacy |
US11520853B2 (en) * | 2020-02-28 | 2022-12-06 | Meta Platforms, Inc. | Mapping convolution to a partition channel convolution engine |
US11227151B2 (en) * | 2020-03-05 | 2022-01-18 | King Fahd University Of Petroleum And Minerals | Methods and systems for computerized recognition of hand gestures |
US11580192B2 (en) * | 2020-04-08 | 2023-02-14 | Meta Platforms, Inc. | Grouped convolution using point-to-point connected channel convolution engines |
US11475303B2 (en) * | 2020-04-14 | 2022-10-18 | Microsoft Technology Licensing, Llc | Spread neural networks |
CN111737995B (zh) * | 2020-05-29 | 2024-04-05 | 北京百度网讯科技有限公司 | 基于多种词向量训练语言模型的方法、装置、设备及介质 |
US20210383199A1 (en) * | 2020-06-03 | 2021-12-09 | Google Llc | Object-Centric Learning with Slot Attention |
KR20210156554A (ko) * | 2020-06-18 | 2021-12-27 | 삼성전자주식회사 | 텐서 처리 방법, 가속기 및 이를 포함한 전자 장치 |
US20220067533A1 (en) * | 2020-08-27 | 2022-03-03 | Microsoft Technology Licensing, Llc | Transformer-Based Neural Network including a Mask Attention Network |
EP4280107A4 (en) * | 2021-02-23 | 2024-03-20 | Huawei Technologies Co., Ltd. | DATA PROCESSING METHOD AND DEVICE, APPARATUS AND MEDIUM |
US11960842B2 (en) | 2021-02-27 | 2024-04-16 | Walmart Apollo, Llc | Methods and apparatus for natural language understanding in conversational systems using machine learning processes |
US11669331B2 (en) | 2021-06-17 | 2023-06-06 | International Business Machines Corporation | Neural network processing assist instruction |
US11269632B1 (en) | 2021-06-17 | 2022-03-08 | International Business Machines Corporation | Data conversion to/from selected data type with implied rounding mode |
US11734013B2 (en) | 2021-06-17 | 2023-08-22 | International Business Machines Corporation | Exception summary for invalid values detected during instruction execution |
US11675592B2 (en) | 2021-06-17 | 2023-06-13 | International Business Machines Corporation | Instruction to query for model-dependent information |
US11797270B2 (en) | 2021-06-17 | 2023-10-24 | International Business Machines Corporation | Single function to perform multiple operations with distinct operation parameter validation |
US11693692B2 (en) | 2021-06-17 | 2023-07-04 | International Business Machines Corporation | Program event recording storage alteration processing for a neural network accelerator instruction |
US11494627B1 (en) | 2021-07-08 | 2022-11-08 | Hong Kong Applied Science and Technology Research Institute Company Limited | Dynamic tile parallel neural network accelerator |
US11442775B1 (en) * | 2021-12-03 | 2022-09-13 | FriendliAI Inc. | Dynamic batching for inference system for transformer-based generation tasks |
US11514370B1 (en) * | 2021-12-03 | 2022-11-29 | FriendliAI Inc. | Selective batching for inference system for transformer-based generation tasks |
CN114113495B (zh) * | 2021-12-27 | 2022-12-30 | 中国科学技术大学 | 一种高精度低功耗全集成的便携式电子鼻 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924455B1 (en) | 2011-02-25 | 2014-12-30 | Xilinx, Inc. | Multiplication of matrices using systolic arrays |
US10650508B2 (en) * | 2014-12-03 | 2020-05-12 | Kla-Tencor Corporation | Automatic defect classification without sampling and feature selection |
US10438117B1 (en) * | 2015-05-21 | 2019-10-08 | Google Llc | Computing convolutions using a neural network processor |
US10489680B2 (en) | 2016-10-04 | 2019-11-26 | Magic Leap, Inc. | Efficient data layouts for convolutional neural networks |
US20190164037A1 (en) | 2017-11-29 | 2019-05-30 | Electronics And Telecommunications Research Institute | Apparatus for processing convolutional neural network using systolic array and method thereof |
US20200082258A1 (en) * | 2018-09-10 | 2020-03-12 | Carl Steven Gold | Organic learning |
US11568238B2 (en) | 2019-06-28 | 2023-01-31 | Amazon Technologies, Inc. | Dynamic processing element array expansion |
-
2019
- 2019-06-28 US US16/456,414 patent/US11568238B2/en active Active
-
2020
- 2020-06-26 WO PCT/US2020/039804 patent/WO2020264282A1/en active Application Filing
- 2020-06-26 CN CN202080045532.0A patent/CN114051615A/zh active Pending
- 2020-06-26 DE DE112020003127.6T patent/DE112020003127T5/de active Pending
-
2023
- 2023-01-13 US US18/154,576 patent/US11868895B2/en active Active
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115311536A (zh) * | 2022-10-11 | 2022-11-08 | 绍兴埃瓦科技有限公司 | 图像处理中稀疏卷积处理方法及装置 |
CN117407793A (zh) * | 2023-11-03 | 2024-01-16 | 上海无问芯穹智能科技有限公司 | 一种并行化策略优化方法、系统、设备及介质 |
CN117407793B (zh) * | 2023-11-03 | 2024-05-28 | 上海无问芯穹智能科技有限公司 | 一种用于大语言模型的并行化策略优化方法、系统、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2020264282A1 (en) | 2020-12-30 |
US20200410337A1 (en) | 2020-12-31 |
DE112020003127T5 (de) | 2022-05-05 |
US20230153620A1 (en) | 2023-05-18 |
US11868895B2 (en) | 2024-01-09 |
US11568238B2 (en) | 2023-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868895B2 (en) | Dynamic processing element array expansion | |
JP6946572B2 (ja) | 加速された量子化積和演算 | |
US11941719B2 (en) | Learning robotic tasks using one or more neural networks | |
WO2021159714A1 (zh) | 一种数据处理方法及相关设备 | |
US11379555B2 (en) | Dilated convolution using systolic array | |
WO2022042713A1 (zh) | 一种用于计算设备的深度学习训练方法和装置 | |
US11741350B2 (en) | Efficient utilization of processing element array | |
CN114430837A (zh) | 使用脉动阵列的转置卷积 | |
TW202026858A (zh) | 在深度神經網路中利用啟動稀疏性 | |
US20210295168A1 (en) | Gradient compression for distributed training | |
US11144291B1 (en) | Loop-oriented neural network compilation | |
US11676021B1 (en) | Multi-model training pipeline in distributed systems | |
US11494321B1 (en) | State buffer memloc reshaping | |
CN111465943A (zh) | 芯片上计算网络 | |
CN114503125A (zh) | 结构化剪枝方法、系统和计算机可读介质 | |
US11567778B2 (en) | Neural network operation reordering for parallel execution | |
US11308396B2 (en) | Neural network layer-by-layer debugging | |
US10846201B1 (en) | Performance debug for networks | |
US11461662B1 (en) | Compilation time reduction for memory and compute bound neural networks | |
US11704562B1 (en) | Architecture for virtual instructions | |
US11782706B1 (en) | Reconfigurable neural network processing based on subgraph recognition | |
US11809981B1 (en) | Performing hardware operator fusion | |
US20230376659A1 (en) | Vlsi placement optimization using self-supervised graph clustering | |
US12008469B1 (en) | Acceleration of neural networks with stacks of convolutional layers | |
US20240143525A1 (en) | Transferring non-contiguous blocks of data using instruction-based direct-memory access (dma) |
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 |