CN114402338A - 用于在节能输入操作数固定加速器中执行小通道计数卷积的系统和方法 - Google Patents

用于在节能输入操作数固定加速器中执行小通道计数卷积的系统和方法 Download PDF

Info

Publication number
CN114402338A
CN114402338A CN202080051434.8A CN202080051434A CN114402338A CN 114402338 A CN114402338 A CN 114402338A CN 202080051434 A CN202080051434 A CN 202080051434A CN 114402338 A CN114402338 A CN 114402338A
Authority
CN
China
Prior art keywords
array
pes
neural network
input
input data
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
Application number
CN202080051434.8A
Other languages
English (en)
Inventor
G·文卡泰史
赖梁祯
P·I-J·庄
李萌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Meta Platforms Technologies LLC
Original Assignee
Facebook Technologies LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Facebook Technologies LLC filed Critical Facebook Technologies LLC
Publication of CN114402338A publication Critical patent/CN114402338A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • General Physics & Mathematics (AREA)
  • Evolutionary Computation (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)

Abstract

本文公开的包括用于接收输入数据,以生成针对神经网络的层的多个输出的系统、方法和设备。多个输出以第一阵列被布置。可以将第一阵列的维度与包括多个处理单元(PE)的PE阵列的维度进行比较。由处理器根据比较结果将第一阵列划分为子阵列。子阵列中的每个子阵列具有小于或等于PE阵列的维度的维度。PE阵列中的第一组PE被分配给第一子阵列。由分配给子阵列中的第一子阵列中的第一组PE的每个PE使用输入数据的部分来生成多个输出中的对应输出。

Description

用于在节能输入操作数固定加速器中执行小通道计数卷积的 系统和方法
技术领域
本公开一般涉及用于针对神经网络的层生成输出的系统和方法,包括但不限于用于通过将输出阵列划分为子阵列,并且将处理元件分配给子阵列中的一个子阵列来生成输出的系统和方法。
背景技术
人工智能(AI)加速器中的一项挑战涉及在针对神经网络执行AI处理时控制或降低功耗。例如,神经网络可以是卷积神经网络,其可以包括卷积层。在卷积层中,与传统的全连接前馈神经网络相比,AI加速器可以以减少参数数目的方式将卷积操作应用于输入层、将结果传递到下一层。然而,随着在卷积神经网络中使用越来越复杂的多维(例如,多通道)输入/输出结构,可能期望减少能量和延迟的方法。此外,考虑到利用输入数据和内核执行卷积操作的处理程度,可能期望避免冗余运算。
发明内容
根据本发明,提供了用于为神经网络层生成多个输出的设备,其中该设备包括处理器和包括多个处理单元(PE)的PE阵列,其中该处理器被配置为:接收输入数据,以生成针对神经网络的层的多个输出,多个输出以第一阵列被布置;将第一阵列的维度与PE阵列的维度进行比较;根据比较的结果,将第一阵列划分为子阵列,子阵列各自具有小于或等于PE阵列维度的维度;并且将PE阵列中的第一组PE分配给子阵列中的第一子阵列,其中分配给子阵列中的第一子阵列的第一组PE的每个PE被配置为:使用输入数据的部分来生成多个输出中的对应输出。
在一些实施例中,PE阵列可以是二维M×N阵列。M和N均是大于1的整数。处理器可以被配置为:将第一阵列划分为以下中的一项或多项:M×N阵列、M×N/2阵列、M/2×N阵列或M/2×N/2阵列。
在一些实施例中,处理器可以被配置为:确定在第一维度中的第一阵列的大小是否大于第一维度中的PE阵列的大小。响应于确定第一维度中的第一阵列的大小大于第一维度中的PE阵列的大小,处理器可以被配置为:将第一阵列划分为子阵列中的第一子阵列和第二子阵列。处理器可以被配置为:将第一子阵列分配给PE阵列中的第一组PE,并且将第二子阵列分配给PE阵列中、不同于第一组PE的第二组PE。
在一些实施例中,处理器还可以被配置为标识将由第一组PE和第二组PE两者使用的输入数据的公共部分。处理器还可以被配置为:将输入数据的公共部分通过多个PE的至少部分PE来移位到第一组PE和第二组PE。
在一些实施例中,处理器还可以被配置为:标识将由第一组PE使用的输入数据的第一部分以及将由第二组PE使用的输入数据的第二部分。处理器还可以被配置为:沿着第一维度将输入数据的第一部分移位到第一组PE中。处理器还可以被配置为:沿着第一维度,将输入数据的第二部分移位到第二组PE中。
在一些实施例中,多个输出可以是针对神经网络的层的卷积操作的输出。
在一些实施例中,输入数据可以包括第一多个输入值和第二多个输入值。第一组PE中的每个PE可以包括第一缓冲存储器、第二缓冲存储器以及乘法器和累加器(MAC)电路。在生成多个输出中的对应输出时,第一组PE中的每个PE可以被配置为:接收第一多个输入值中的第一值和第二多个输入值中的第二值。第一组PE中的每个PE可以被配置为:将第一值和第二值分别存储在第一缓冲存储器和第二缓冲存储器中。第一组PE中的每个PE可以被配置为:经由MAC电路来生成第一值与第二值的第一点积。
在一些实施例中,每个PE可以被配置为:在第一缓冲存储器中存储多个第一输入值中的第一数目的值集。每个PE可以被配置为:经由MAC电路来计算(i)存储在第一缓冲存储器中的第一数目的值集中的每个值与(ii)存储在第二缓冲存储器中的第二值的点积。每个PE可以被配置为:将第一数目的、所计算的点积输出作为针对神经网络的层的卷积操作的输出。
每个PE可以被配置为:在第二缓冲存储器中存储多个第二输入值中的第二数目的值集。每个PE可以被配置为:经由MAC电路来计算(i)存储在第一缓冲存储器中的第一值与(ii)存储在第二缓冲存储器中的第二数目的值集中的每个值的点积。每个PE可以被配置为:将第二数目的、所计算的点积输出作为针对神经网络的层的卷积操作的输出。
在一些实施例中,第一多个输入值可以表示针对神经网络的层的输入数据流和权重中的一个。第二组多个输入值可以表示针对神经网络的层的输入数据流和权重中的另一个。
根据本发明,提供了用于生成针对神经网络的层的多个输出的方法,其中该方法包括:由处理器接收输入数据,以生成针对神经网络的层的多个输出,多个输出以第一阵列被布置;由处理器将第一阵列的维度与包括多个处理单元(PE)的PE阵列的维度进行比较;由处理器根据比较结果将第一阵列划分为子阵列,子阵列各自具有小于或等于PE阵列的维度的维度;由处理器将PE阵列中的第一组PE分配给子阵列中的第一子阵列;以及由分配给子阵列中的第一子阵列的第一组PE中的每个PE使用输入数据的部分来生成多个输出中的对应输出。
在一些实施例中,PE阵列可以是二维M×N阵列。M和N均是大于1的整数。在第一阵列的划分中,第一阵列可以被划分为以下中的一项或多项:M×N阵列、M×N/2阵列、M/2×N阵列或M/2×N/2阵列。
在一些实施例中,可以确定第一维度中的第一阵列的大小是否大于第一维度中的PE阵列的大小。响应于确定第一维度中的第一阵列的大小大于第一维度中的PE阵列的大小,可以将第一阵列划分为子阵列中的第一子阵列和第二子阵列。可以将第一子阵列分配给PE阵列中的第一组PE,并且将第二子阵列分配给PE阵列中的第二组PE。以不同于第一维度的第二维度的第一组PE的位置可以与以第二维度的第二组PE的位置不同。
在一些实施例中,可以标识将由第一组PE和第二组PE两者使用的输入数据的公共部分。输入数据的公共部分可以沿着第二维度、通过多个PE的至少部分而移位到第一组PE和第二组PE中。
在一些实施例中,可以标识将由第一组PE使用的输入数据的第一部分,并且可以标识将由第二组PE使用的输入数据的第二部分。输入数据的第一部分可以沿着第一维度通过第一组PE而被移位。输入数据的第二部分可以沿着第一维度通过第二组PE而被移位。
在一些实施例中,多个输出可以是针对神经网络的层的卷积操作的输出。
在一些实施例中,输入数据可以包括第一多个输入值和第二多个输入值。在由第一组PE中的每个PE生成多个输出中的对应输出时,所述每个PE可以接收第一多个输入值的第一值和第二多个输入值的第二值。每个PE可以将第一值和第二值分别存储在所述每个PE的第一缓冲存储器和第二缓冲存储器中。第一值与第二值的第一点积可以由每个PE的乘法器和累加器(MAC)电路来生成。
在一些实施例中,第一多个输入值中的第一数目的值集可以被存储在每个PE的第一缓冲存储器中。MAC电路可以计算(i)存储在每个PE的第一缓冲存储器中的第一数目的值集中的每个值与(ii)存储在每个PE的第二缓冲存储器中的第二值的点积。第一数目的、所计算的点积可以是针对神经网络的层的卷积操作的输出。
在一些实施例中,多个第二输入值中的第二数目的值集可以被存储在每个PE的第二缓冲存储器中。MAC计算电路可以计算(i)存储在所述每个PE的第一缓冲存储器中的第一值与(ii)存储在每个PE的第二缓冲存储器中的第二数量的值集中的每个值的点积。第一点积和第二数目的、所计算的点积可以是针对神经网络的层的卷积操作的输出。
在一些实施例中,第一多个输入值可以表示针对神经网络的层的输入数据流和权重中的一个。第二多个输入值可以表示针对神经网络的层的输入数据流和权重中的另一个。
下面详细讨论这些和其他方面和实现。前述信息和以下详细描述包括各个方面和实现的说明性示例,并且提供用于理解要求保护的各方面和实现的性质和特征的概述或框架。附图提供了对各个方面和实现的说明和进一步理解,并且被并入并且构成本说明书的部分。
附图说明
附图不旨在按比例绘制。各个附图中相同的附图标记和标记指示相同的元素。为清楚起见,并非每个组件都会在每个附图中被标注。
图1A是根据本公开的示例实现的、用于执行人工智能(AI)相关处理的系统的实施例的框图。
图1B是根据本公开的示例实现的、用于执行AI相关处理的设备的实施例的框图。
图1C是根据本公开的示例实现的、用于执行AI相关处理的设备的实施例的框图。
图1D是根据本公开的示例实现的计算环境的框图。
图2A包括根据本公开的示例实现的、用于执行AI相关处理的数据的表示。
图2B到图2E是根据本公开的一个或多个示例实现的、用于生成针对神经网络的层的多个输出的设备的实施例的框图。
图2F是根据本公开的示例实现的、用于生成针对神经网络的层的多个输出的处理单元(PE)的实施例的框图。
图2G是根据本公开的示例实现的、用于将PE分配给输出的子阵列的方法的实施例的框图。
图2H是根据本公开的示例实现的、用于将两组PE分配给两个输出阵列的方法的实施例的框图。
图2I是图示了根据本公开的示例实现的、生成针对神经网络的层的多个输出的过程的流程图。
具体实施方式
在转向详细示出某些实施例的附图之前,应当理解,本公开不限于在说明书中所阐述或在附图中所示出的细节或方法。还应当理解,本文使用的术语仅用于描述的目的而不应当被视为限制。
为了阅读下面对本发明的各个实施例的描述,对说明书各个部分及其相应内容的以下描述可能会有所帮助:
-部分A描述了对实践或实施本系统、方法和设备的实施例有用的环境、系统、配置和/或其他方面;和
-部分B描述了用于生成针对神经网络的层的多个输出的设备、系统和方法的实施例。
A.用于人工智能相关处理的环境
在讨论部分B中的系统、设备和/或方法的实施例的细节之前,讨论对实践或实施系统、设备和/或方法的某些实施例有用的环境、系统、配置和/或其他方面可能是有帮助的。现在参考图1A,描绘了用于执行人工智能(AI)相关处理的系统的实施例。简而言之,该系统包括一个或多个AI加速器108,其可以使用输入数据110来执行AI相关处理。虽然被称为AI加速器108,但是有时其也称为神经网络加速器(NNA)、神经网络芯片或硬件AI处理器、AI芯片等。(多个)AI加速器108可以根据输入数据110和/或参数128(例如,权重和/或偏差信息)来执行AI相关处理,以输出或提供输出数据112。AI加速器108可以包括和/或实现一个或多个神经网络114(例如人工神经网络)、一个或多个处理器24和/或一个或多个存储设备126。
上面提及的元件或组件中的每个均以硬件或硬件和软件的组合来实现。例如,这些元件或组件中的每个可以包括任何应用、程序、库、脚本、任务、服务、进程或在诸如电路的硬件上执行的任何类型和形式的可执行指令,该硬件可以包括数字和/或模拟元件(例如,一个或多个晶体管、逻辑门、寄存器、存储器器件、电阻元件、导电元件、电容元件)。
输入数据110可以包括用于配置、调整、训练和/或激活(多个)AI加速器108的神经网络114和/或用于由(多个)处理器124处理的任何类型或形式的数据。网络114有时被称为人工神经网络(ANN)。配置、调整和/或训练神经网络可以是指或包括机器学习的过程,其中将诸如历史数据之类的训练数据集(例如,作为输入数据110)提供给神经网络进行处理。调整或配置可以是指或包括神经网络114的训练或处理以允许神经网络提高准确度。调整或配置神经网络114可以包括:例如,使用已被证明对于神经网络114所期望类型的问题或目标是成功的架构来设计、形成、构建、合成和/或建立神经网络。在一些情况下,一个或多个神经网络114可以在相同或相似的基线模型下启动,但是在调整、训练或学习过程期间,神经网络114的结果可以充分不同,以使得与处于基线模型或针对不同目标或目的进行调整或训练的不同神经网络相比,每个神经网络114都可以被调整来处理特定类型的输入并且生成具有更高准确度和可靠性水平的特定类型的输出。调整神经网络114可以包括:针对每个神经网络114设置不同的参数128,针对每个神经网络114不同地微调参数114,或者分配不同的权重(例如,超参数或学习速率)、张量流等。因此。例如,基于调整或训练过程以及(多个)神经网络和/或系统的目标来针对(多个)神经网络114设置适当的参数128可以提高整个系统的性能。
AI加速器108的神经网络114可以包括任何类型的神经网络,包括例如卷积神经网络(CNN)、深度卷积网络、前馈神经网络(例如,多层感知器(MLP))、深度前馈神经网络、径向基函数神经网络、科荷伦(Kohonen)自组织神经网络、循环神经网络、模块化神经网络、长/短期记忆神经网络等。(多个)神经网络114可以被部署或被用于执行数据(例如,图像、音频、视频)处理、对象或特征标识、推荐功能、数据或图像分类、数据(例如,图像)分析等,诸如自然语言处理。
作为示例,并且在一个或多个实施例中,神经网络114可以被配置为或包括卷积神经网络。卷积神经网络可以包括一个或多个卷积单元(或池化层)和内核,其每个都可以用于不同的目的。卷积神经网络可以包括、合并和/或使用卷积内核(有时简称为“内核”)。卷积内核可以处理输入数据,并且池化层可以例如使用非线性函数(诸如,max)来简化数据,从而减少不必要的特征。包括卷积神经网络在内的神经网络114可以促进图像、音频或任何数据标识或其他处理。例如,输入数据110(例如,来自传感器)可以被传递到形成漏斗的卷积神经网络的卷积层,压缩输入数据110中检测到的特征。卷积神经网络的第一层可以检测第一特性,第二层可以检测第二特性,依此类推。
卷积神经网络可以是深度前馈人工神经网络,其被配置为分析视觉图像、音频信息和/或任何其他类型或形式的输入数据110。卷积神经网络可以包括被设计为使用最少预处理的多层感知器。基于它们的共享权重架构和转换不变性特征,卷积神经网络可以包括或称为移位不变性或空间不变性人工神经网络。由于与其他数据分类/处理算法相比,卷积神经网络可以使用相对较少的预处理,因此卷积神经网络可以自动学习过滤器,该过滤器可以针对其他数据分类/处理算法而言而被手工设计,从而提高与配置相关联的效率,建立或设立神经网络114,从而提供相对于其他数据分类/处理技术的技术优势。
神经网络114可以包括神经元或节点的输入层116和输出层122。神经网络114还可以具有一个或多个隐藏层118、119,这些隐藏层可以包括神经元或节点的卷积层、池化层、全连接层和/或归一化层。在神经网络114中,每个神经元可以从前一层中的一些位置接收输入。在全连接层中,每个神经元都可以接收来自前一层的每个元件的输入。
神经网络114中的每个神经元可以通过将某个函数应用于来自前一层中的感受野(“receptive field”)的输入值来计算输出值。应用于输入值的函数由权重向量和偏差(通常是实数)来指定。神经网络114中的学习(例如,在训练阶段期间)可以通过对偏差和/或权重进行增量调整来进行。偏差和权重向量可以被称为过滤器,并且可以表示输入的某些特征(例如,特定形状)。卷积神经网络的显著特征是:许多神经元可以共享同一过滤器。这减少了存储器占用,因为可以在共享该过滤器的所有感受野中使用单个偏差和单个权重向量,而不是每个感受野都有它自己的偏差和权重向量。
例如,在卷积层中,系统可以对输入层116应用卷积操作,将结果传递到下一层。卷积模拟个体神经元对输入刺激的反应。每个卷积神经元仅处理针对其感受野的数据。与全连接前馈神经网络相比,使用卷积操作可以减少在神经网络114中使用的神经元的数量。因此,卷积操作可以减少自由参数的数目,允许网络以更少的参数更深。例如,无论输入数据(例如,图像数据)大小大小如何,大小大小为5x5的平铺区域(每个区域都具有相同的共享权重)可以仅使用25个可学习参数。以这种方式,具有卷积神经网络的第一神经网络114可以通过使用反向传播来解决在训练具有许多层的传统多层神经网络时梯度消失或爆炸的问题。
神经网络114(例如,配置具有卷积神经网络)可以包括一个或多个池化层。一个或多个池化层可以包括局部池化层或全局池化层。池化层可以将在一层处的神经元簇的输出组合成下一层中的单个神经元。例如,最大池化可以使用来自前一层处的神经元簇处的每个簇的最大值。另一个示例是平均池化,它可以使用来自前一层处的神经元簇中的每个簇的平均值。
神经网络114(例如,配置具有卷积神经网络)可以包括全连接层。全连接层可以将一层中的每个神经元连接到另一层中的每个神经元。神经网络114可以配置有卷积层中的共享权重,其可以指的是被用于层中的每个感受野的同一过滤器,从而减少存储器占用并且提高第一神经网络114的性能。
隐藏层118、119可以包括被调整或配置为基于输入数据(例如,来自例如虚拟现实系统的传感器数据)来检测信息的过滤器。当系统逐步通过神经网络114(例如,卷积神经网络)中的每一层时,系统可以转换来自第一层的输入,并且将变换后的输入输出到第二层,依此类推。基于被检测、处理和/或计算的对象或信息的类型,以及输入数据110的类型,神经网络114可以包括一个或多个隐藏层118、119。
在一些实施例中,卷积层是神经网络114(例如,被配置为CNN)的核心构建块。层的参数128可以包括可学习的过滤器集(或内核),其具有小的感受野,但通过输入体积的整个深度而延伸。在前向传递期间,每个过滤器在输入体积的宽度和高度上进行卷积,计算过滤器与输入的条目之间的点积,并且产生该过滤器的二维激活映射。结果,神经网络114可以学习当它在输入中的某个空间位置处检测到某种特定类型的特征时激活的过滤器。沿着深度维度堆叠所有滤波器的激活图形成了卷积层的完整输出体积。因此,输出体积中的每个条目也可以被解释为神经元的输出,该神经元查看输入中的小区域,并且与同一激活映射中的神经元共享参数。在卷积层中,神经元可以接收来自前一层的受限分区的输入。通常,分区是方形形状(例如,大小为5x5)。神经元的输入区域被称为它的感受野。因此,在全连接层中,感受野是整个前一层。在卷积层中,接收区域可以小于整个前一层。
(例如,通过基于输入数据110检测或确定对象、事件、词和/或其他特征的概率)可以训练第一神经网络114以检测、分类、分割和/或转换输入数据110。例如,神经网络114的第一输入层116可以接收输入数据110,处理输入数据110以将数据变换为第一中间输出,并且将第一中间输出转发到第一隐藏层118。例如,第一隐藏层118可以接收第一中间输出,处理第一中间输出以将第一中间输出变换为第二中间输出,并且将第二中间输出转发到第二隐藏层119。第二隐藏层119可以接收第二中间输出,处理第二中间输出以将第二中间输出变换为第三中间输出,并且将第三中间输出转发到输出层122。输出层122可以接收第三中间输出,处理第三中间输出以将第三中间输出变换为输出数据112,并且转发输出数据112(例如,可能转发到后处理引擎,以用于渲染给用户、用于存储等)。作为示例,输出数据112可以包括对象检测数据、增强/转换/加强数据、推荐、分类和/或分割数据。
再次参考图1A,AI加速器108可以包括一个或多个存储设备126。存储设备126可以被设计或实现为存储、保持或维持与AI加速器108相关联的任何类型或形式的数据。例如,数据可以包括由)(多个)AI加速器108接收的输入数据110和/或输出数据112(例如,在被输出到下一个设备或处理级之前)。数据可以包括被用于或来自(多个)处理器124和/或神经网络114的任何处理阶段的中间数据。数据可以包括用于输入到(多个)神经网络114的神经元并且在神经元处处理的一个或多个操作数,其可以从存储设备126读取或访问。例如,数据可以包括(多个)神经网络114的一个或多个神经元(或节点)和/或层的输入数据、权重信息和/或偏差信息、激活函数信息和/或参数128,其可以被存储在存储设备126中并且从存储设备126读取或访问。数据可以包括来自(多个)神经网络114的神经元的输出数据,其可以被写入并且存储在存储设备126中。例如,数据可以包括(多个)神经网络114的一个或多个神经元(或节点)和/或层的激活数据、改进或更新的数据(例如,来自训练阶段的权重信息和/或偏差信息,例如激活函数信息和/或其他参数128),其可以被传送或写入并且存储在存储设备126中。
在一些实施例中,AI加速器108可以包括一个或多个处理器124。一个或多个处理器124可以包括用于对(多个)神经网络114或(多个)AI加速器108中的任何一个或多个的输入数据进行预处理和/或用于对(多个)神经网络114或(多个)AI加速器108中的任何一个或多个的输出数据进行后处理的任何逻辑、电路和/或处理组件(例如,微处理器)。一个或多个处理器124可以提供用于配置、控制和/或管理(多个)神经网络114或(多个)AI加速器108的一个或多个操作的逻辑、电路、处理组件和/或功能性。例如,处理器124可以接收与神经网络114相关联的数据或信号,以控制或降低功耗(例如,经由对实现神经网络114的操作的电路的时钟门控控制)。作为另一个示例,处理器124可以划分和/或重新排列数据以用于单独处理(例如,在AI加速器108的各个组件处,例如并行)、顺序处理(例如,在AI加速器108的相同组件上,在不同的时间或阶段),或用于存储在存储设备的不同存储器片中,或存储在不同的存储设备中。在一些实施例中,例如通过标识、选择和/或将特定权重、激活函数和/或参数信息加载到神经网络114的神经元和/或层,(多个)处理器124可以配置神经网络114以针对特定上下文进行操作、提供特定类型的处理和/或寻址特定类型的输入数据。
在一些实施例中,AI加速器108被设计和/或实现为处置或处理深度学习和/或AI工作负载。例如,AI加速器108可以为包括人工神经网络、机器视觉和机器学习在内的人工智能应用提供硬件加速。AI加速器108可以被配置用于处理机器人相关、物联网(IoT)相关和其他数据密集型或传感器驱动的任务的操作。AI加速器108可以包括多核或多处理单元(PE)设计,并且可以被合并到各种类型和形式的设备中,诸如人工现实(例如,虚拟、增强或混合现实)系统、智能电话、平板电脑和计算机。AI加速器108的某些实施例可以包括或使用至少一个数字信号处理器(DSP)、协处理器、微处理器、计算机系统、处理器的异构计算配置、图形处理单元(GPU)、现场可编程门阵列(FPGA)和/或专用集成电路(ASIC)来实现。AI加速器108可以是基于晶体管、基于半导体和/或基于量子计算的设备。
现在参考图1B,描绘了用于执行AI相关处理的设备的示例实施例。简而言之,该设备可以包括或对应于AI加速器108,例如具有上文结合图1A所描述的一个或多个特征。AI加速器108可以包括一个或多个存储设备126(例如,诸如静态随机存取存储器(SRAM)设备之类的存储器)、一个或多个缓冲器、多个处理元件(PE)电路或处理元件处理单元(PE)电路阵列、其他逻辑或电路(例如,加法器电路)和/或其他结构或构造(例如,互连、数据总线、时钟电路、(多个)功率网络)。上面提及的元件或组件中的每个以硬件或至少硬件和软件的组合来实现。硬件可以例如包括电路元件(例如,一个或多个晶体管、逻辑门、寄存器、存储器设备、电阻元件、导电元件、电容元件和/或导线或导电连接器)。
在AI加速器108中实现的神经网络114(例如,人工神经网络)中,神经元可以采用各种形式并且可以被称为处理单元(PE)或PE电路。神经元可以被实现为对应的PE电路,并且可以在PE电路中执行可以在神经元处发生的处理/激活。PE连接成特定的网络模式或阵列,其中不同的模式服务于不同的功能目的。人工神经网络中的PE电操作(例如,在半导体实现的实施例中),并且可以是模拟的、数字的或混合的。为了与生物突触的效果并行化,可以为PE之间的连接分配乘法权重,可以对其进行校准或“训练”以产生适当的系统输出。
PE可以根据下式来限定(例如,其表述神经元的麦卡洛克–皮茨(McCulloch-Pitts)模型):
ζ=∑i wi xi (1)
y=σ(ζ) (2)
其中ζ是输入的加权和(例如,输入向量和抽头权重向量的内积),而σ(ζ)是加权和的函数。在权重和输入元素形成向量w和x的情况下,ζ加权和变成简单的点积:
ζ=w·x (3)
这可以被称为激活函数(例如,在阈值比较的情况下)或传递函数。在一些实施例中,一个或多个PE可以被称为点积引擎。神经网络114的输入(例如,输入数据110)x可以来自输入空间并且输出(例如,输出数据112)是输出空间的一部分。对于一些神经网络,输出空间Y可能像{0,1}一样简单,或者也可能是复杂的多维的(例如,多通道)空间(例如,对于卷积神经网络)。神经网络往往在输入空间中的每个自由度有一个输入,并且在输出空间中的每个自由度有一个输出。
在一些实施例中,PE可以被布置和/或实现为收缩阵列。收缩阵列可以是耦合的数据处理单元(DPU)(诸如被称为单元或节点的PE)的网络(例如,同构网络)。例如,每个节点或PE可以独立地计算作为从其上游邻居接收的数据的函数的部分结果,可以将结果存储在自身中,并且可以将结果传递到下游。收缩阵列可以是硬连线的,也可以是针对特定应用而被配置的软件。节点或PE可以是固定的和相同的,并且收缩阵列的互连可以是可编程的。收缩阵列可以依赖于同步数据传送。
再次参考图1B,PE 120的输入x可以是从存储设备126(例如,SRAM)读取或访问的输入流132的部分。输入流132可以被引导到PE的一行(水平排或组),并且可以跨PE中的一个或多个PE而被共享,或者被划分为数据部分(重叠或非重叠数据部分)以作为相应PE的输入。(例如,从存储设备126读取的)权重流中的权重134(或权重信息)可以被引导或提供给PE的列(垂直排或组)。列中的PE中的每个PE可以共享相同的权重134或接收对应的权重134。每个目标PE的输入和/或权重可以被直接路由(例如,从存储设备126)到目标PE(例如,不经过(多个)其他PE),或者可以通过一个或多个PE(例如,沿着PE的行或列)而被路由到目标PE。每个PE的输出可以被直接路由出PE阵列(例如,不经过其他PE),或者可以通过一个或多个PE(例如,沿着一列PE)而被路由以退出PE阵列。每列PE的输出可以在相应列的加法器电路处被求和或相加,并且被提供给用于相应PE列的缓冲器130。(多个)缓冲器130可以将所接收的输出提供、传送、路由、写入和/或存储到存储设备126。在一些实施例中,由存储设备126存储的输出(例如,来自神经网络层的激活数据)可以从存储设备126中被检索或读取,并被用作PE120的阵列的输入,以用于(神经网络的后续层的)稍后处理。在某些实施例中,由存储设备126存储的输出可以从存储设备126中取回或读取以作为AI加速器108的输出数据112。
现在参考图1C,描绘了用于执行AI相关处理的设备的一个示例实施例。简而言之,该设备可以包括或对应于AI加速器108,例如,具有上文结合图1A和图1B描述的一个或多个特征。AI加速器108可以包括一个或多个PE 120、其他逻辑或电路(例如加法器电路)和/或其他结构或构造(例如互连、数据总线、时钟电路、(多个)功率网络)。上面提及的元件或组件中的每个以硬件或至少硬件和软件的组合来实现。硬件可以例如包括电路元件(例如,一个或多个晶体管、逻辑门、寄存器、存储器设备、电阻元件、导电元件、电容元件和/或导线或导电连接器)。
在一些实施例中,PE 120可以包括一个或多个乘法累加(MAC)单元或电路140。一个或多个PE有时可以(单独或共同地)被称为MAC引擎。MAC单元被配置为执行(多个)乘法累加操作。MAC单元可以包括乘法器电路、加法器电路和/或累加器电路。乘法累加操作计算两个数的乘积并且将该乘积加到累加器中。MAC操作可以被表示如下,结合累加器操作数a以及输入b和c:
a←a+(b×c) (4)
在一些实施例中,MAC单元140可以包括在组合逻辑中实现的乘法器,随后是加法器(例如,其包括组合逻辑)和存储结果的累加器寄存器(例如,其包括顺序和/或组合逻辑)。累加器寄存器的输出可以被反馈到加法器的一个输入端,以使得在每个时钟周期,乘法器的输出都可以被加到累加器寄存器中。
如上面所讨论的,MAC单元140可以执行乘法和加法功能。MAC单元140可以在两个阶段中操作。MAC单元140可以首先在第一阶段中计算给定数字(输入)的乘积,并且将结果转发给第二阶段操作(例如,加法和/或累加)。n位MAC单元140可以包括n位乘法器、2n位加法器和2n位累加器。MAC单元140阵列或多个MAC单元140(例如,在PE中)可以以收缩阵列被布置,用于并行积分、卷积、相关、矩阵乘法、数据排序和/或数据分析任务。
本文描述的各种系统和/或设备可以被实现在计算系统中。图1D示出了代表性计算系统150的框图。在一些实施例中,图1D的系统可以形成计算系统150的(多个)处理单元156(或处理器156)的至少一部分。计算系统150可以被实现为例如设备(例如,消费者设备),诸如智能电话、其他移动电话、平板计算机、可穿戴计算设备(例如,智能手表、眼镜、头戴式显示器)、台式计算机、膝上型计算机,或使用分布式计算设备来实现。计算系统150可以被实现为提供VR、AR、MR体验。在一些实施例中,计算系统150可以包括常规的、专用的或定制的计算机组件,诸如处理器156、存储设备158、网络接口151、用户输入设备152和用户输出设备154。
网络接口151可以提供到局域网/广域网(例如,互联网)的连接,(本地/远程)服务器或后端系统的网络接口也连接到该局域网/广域网。网络接口151可以包括有线接口(例如,以太网)和/或无线接口,其实现各种RF数据通信标准,诸如Wi-Fi、蓝牙或蜂窝数据网络标准(例如,3G、4G、5G、LTE等)。
用户输入设备152可以包括用户可以通过其向计算系统150提供信号的任何设备(或多个设备);计算系统150可以将信号解释为指示特定用户请求或信息。用户输入设备152可以包括键盘、触摸板、触摸屏、鼠标或其他指点设备、滚轮、点击轮、拨号盘、按钮、开关、小键盘、麦克风、传感器(例如,运动传感器、眼动追踪传感器等)等等中的任何一个或全部。
用户输出设备154可以包括计算系统150可以通过其向用户提供信息的任何设备。例如,用户输出设备154可以包括显示器以显示由计算系统150生成或递送到计算系统150的图像。显示器可以合并各种图像生成技术,例如液晶显示器(LCD)、发光二极管(LED)包括有机发光二极管(OLED)、投影系统、阴极射线管(CRT)等,以及支持电子设备(例如,数模或模数转换器、信号处理器等)。可以使用同时用作输入和输出设备的设备,诸如触摸屏。除了显示器之外或代替显示器,可以提供用户输出设备154。示例包括指示灯、扬声器、触觉“显示”设备、打印机等。
一些实现包括电子组件,诸如微处理器、存储装置和存储器,其将计算机程序指令存储在非暂时性计算机可读存储介质中。本说明书中描述的许多特征可以被实现为过程,该过程被指定为在计算机可读存储介质上编码的程序指令集。当这些程序指令由一个或多个处理器执行时,它们使处理器执行程序指令中指示的各种操作。程序指令或计算机代码的示例包括诸如由编译器产生的机器代码,以及包括由计算机、电子组件或使用解释器的微处理器所执行的更高级代码在内的文件。通过适当的编程,处理器156可以为计算系统150提供各种功能性,包括本文描述的由服务器或客户端执行的任何功能性,或者与消息管理服务相关联的其他功能性。
应当了解,计算系统150是说明性的,并且变化和修改是可能的。结合本公开使用的计算机系统可以具有本文中未具体描述的其他能力。此外,虽然参考特定框来描述计算系统150,但是应当理解,这些框是为了便于描述而被限定的,并且并不旨在暗示组件部分的特定物理布置。例如,不同的框可以位于同一设施中、同一服务器机架中或同一主板上。此外,框不需要对应于物理上不同的组件。例如通过对处理器进行编程或提供适当的控制电路,框可以被配置为执行各种操作,并且取决于如何获得初始配置,各种框可能是可重新配置的,也可能是不可重新配置的。本公开的实现可以被实现在包括使用电路和软件的任意组合所实现的电子设备在内的各种装置中。
B.用于生成针对神经网络的层的多个输出的方法和设备
本文公开了一种用于生成针对神经网络的层的多个输出的系统、方法和设备的实施例,包括但不限于用于通过将阵列划分为子阵列,并且将一组处理元件分配给子阵列中的一个子阵列来生成布置在阵列中的多个输出的系统和方法。在一些实施例中,AI加速器针对大卷积进行了优化,同时针对较小的卷积提供了较差的效率。为了以低能量和低延迟实现高准确度,AI加速器可以被配置为有效处理小卷积,同时提供高吞吐量。因此,代替实现针对大卷积所优化的AI加速器,根据本系统、方法和设备实现的AI加速器能够提供高吞吐量和/或低延迟,同时维持在较小卷积处的效率。举例来说,AI加速器可以支持大小或维度为AcclX×outY×AcclY(例如,在GEMM术语中,M×N×K)的通用矩阵乘法(GEMM)操作。根据输入操作数和/或对应的输出,可以灵活采用以下卷积映射:
1.默认映射卷积/GEMM操作:输出可以被平铺到AcclX×outY块(block)中,并且可以使用输入操作数的AcclX×AcclY和outY×AcclY组块(chunk)进行更新。
2.具有小特征计数的映射卷积/GEMM操作:输出可以被平铺到AcclX/2×OutY/2块中,并且可以使用输入操作数的AcclX/2×AcclY/2和OutY/2×AcclY/2组块进行更新。
3.具有小输入特征计数的映射卷积/GEMM操作:输出可以被平铺到AcclX×OutY/2块中,并且可以使用输入操作数的AcclX×AcclY/2和OutY/2×AcclY/2组块进行更新。
4.具有小输出特征计数的映射卷积/GEMM操作:输出可以被平铺到AcclX/2×OutY块中,并且可以使用输入操作数的AcclX/2×AcclY/2和OutY×AcclY/2组块进行更新。
与针对大卷积优化的单个卷积配置相比,各种卷积映射可以使AI加速器的计算吞吐量在广泛的GEMM/卷积维度上处于高水平。
在一些方面,在基于CNN的AI加速器上执行卷积/GEMM操作时,能量效率低下的一个原因是重复提取输入操作数。在一些实施例中,可以在每个处理元件(PE)中添加‘r’寄存器或触发器,以保持跨调用持久化的(多个)静态操作数。这有助于我们使系统能够避免对(多个)静态操作数的冗余提取,例如,当卷积/GEMM的缩减维度小于或等于AcclY×r时。
与上述避免多次提取(多个)静态操作数的技术类似,对于GEMMM大于AcclX但是输入特征计数小于AcclYבr’的情况,可以减少要被提取流操作数的次数。在这种情况下,流操作数的重用计数最多可以增加‘r’倍。
图2A是根据本公开的示例实现的、用于执行AI相关处理的数据的表示。参考图2A,AI加速器(或“加速器”)可以接收(M×K)输入矩阵211作为输入数据,并且(K×N)内核矩阵212作为内核信息,并且可以执行卷积,以生成(M×N)卷积输出矩阵213作为输出数据。在一些实施例中,AI加速器可以通过在来自输入矩阵211的一行和来自内核矩阵212的对应列上执行点积运算214来生成(M×N)卷积输出矩阵213。在一些实施例中,加速器可以通过使用GEMM算法来生成(M×N)卷积输出矩阵213。在一些实施例中,输入矩阵211可以表示输入数据流(例如,图像数据)除以针对神经网络的层的、具有大小为K的M个数据组块。在一些实施例中,输入数据可以与多个通道相关联(例如,在RGB数据的情况下,通道的数目是三个)。在一些实施例中,内核矩阵可以表示N个内核,内核中的每个内核由针对神经网络的层的K个权重组成。
在设计AI加速器时,可以针对大卷积(例如,具有大输出大小(M×N)的卷积,如图2A中所图示)执行优化。在一种方法中,AI加速器可以针对具有大大小(例如,大数据阵列形状和/或维度)的数据的卷积提供优化,同时针对较小的卷积(例如,具有小于(M×N)的输出大小的卷积)提供低效率或利用率。例如,当输入数据组块的数目M和/或内核的数目N在AI加速器中相对较小时,AI加速器的部分(例如,包括处理元件(PE)的电路或乘法器和累加器(MAC)电路)可能不处理实际或有效输出,并且因此对应于冗余处理,从而增加功耗。
为了解决这个问题,在一些实现中,加速器可以针对大卷积提供高吞吐量和低延迟,同时针对较小的卷积维持效率,而不是构建仅针对大卷积进行优化的加速器。例如,大卷积输出可以被划分或拆分为较小的卷积输出,这些输出可以适配到处理元件(PE)阵列的固定维度中(参见图1B中的(多个)PE 120)。较小的卷积输出中的每个较小的卷积输出都可以由分配给较小的卷积输出的一组PE来生成。以这种方式,由于较小的卷积输出可以适配到PE阵列的固定维度中,因此可以在不执行PE阵列中的所有PE的情况下执行针对此类较小输出的卷积。在一些实施例中,对于(M×N)维度的PE阵列,其中M和N中均是大于1的整数,可以将大卷积输出划分(或拆分或分裂)为以下说明性类型的较小卷积输出中的一个输出:(1)(M×N)卷积输出矩阵;(2)(M/2×N)卷积输出矩阵;(3)(M×N/2)卷积输出矩阵;以及(4)(M/2×N/2)卷积输出矩阵。在一些实施例中,可以如下生成或更新每种类型的较小卷积输出:(1)生成(M×N)卷积输出矩阵,将输出分配或平铺到PE阵列的(M×N)块(例如,整个阵列)中,并且使用(M×K)输入矩阵和(K×N)内核矩阵作为对加速器的操作数来进行更新;(2)生成(M/2×N)卷积输出矩阵,将输出分配或平铺到PE阵列的(M/2×N)块中,并且使用(M/2×K/2)输入矩阵和(K/2×N)内核矩阵作为对加速器的操作数来进行更新;(3)生成(M×N/2)卷积输出矩阵,将输出分配或平铺到PE阵列的(M×N/2)块中,并且使用(M×K/2)输入矩阵和(K/2×N/2)内核矩阵作为对加速器的操作数来进行更新;以及(4)生成(M/2×N/2)卷积输出矩阵,将输出分配或平铺到PE阵列的(M/2×N/2)块中,并且使用(M/2×K/2)输入矩阵和(K/2×N/2)内核矩阵作为对加速器的操作数来进行更新。PE阵列的每个块可以包括一个PE(或多个PE)。
此外,鉴于在执行卷积操作时对输入数据和内核的重复访问和/或处理,功耗和延迟可能会增加。跨调用(例如,卷积操作的调用)持久化的加速器的操作数可以称为“静态”操作数。参考图2A,内核矩阵中的每个内核(例如,内核值或内核元素)在卷积操作(输出对应于内核的卷积输出矩阵的列)时可以是静态操作数,因为矩阵中的每个内核在卷积操作期间没有变化。例如,参考图2A,内核矩阵212中的内核216是卷积操作期间的静态操作数,以输出对应于内核216的卷积输出矩阵213的列217。另一方面,在AI相关处理的某个操作(例如,卷积操作)期间改变的对加速器的操作数可以被称为流操作数。例如,输入矩阵211中的M个数据组块可以是卷积操作期间的流操作数,以输出卷积输出矩阵213的列217。
为了解决冗余操作的问题,在一些实施例中,可以将存储器(例如,多个寄存器、触发器电路(例如,FLOP)或锁存器)添加到每个(PE-120以保持静态操作数,从而通过减少从来自存储设备126的存储设备(例如,SRAM)提取的次数来降低能量。在一些实施例中,缓存或缓冲存储器可以被用作保持静态操作数的存储器。在一些实施例中,R个FLOP可以被添加到每个PE,以将内核数据(例如,内核矩阵212)保持为静态操作数,以避免当卷积/GEMM的减小大小(例如维度)小于或等于K×R时对静态操作数的冗余提取。
本公开中描述的系统和方法包括优于已知系统和方法的多个优点。首先,在一些实施例中,本公开提供了一种用于处理小卷积(例如,与相比,生成相对较小输出大小的卷积)以在提供高吞吐量的同时实现低能量和延迟的解决方案。其次,在一些实施例中,本公开提供各种类型(例如,4种类型)或配置的较小卷积输出,较大卷积输出可以从中被划分。这种划分可以让AI加速器的计算吞吐量对于广泛的GEMM/卷积维度来说相对较高。第三,向每个PE添加本地存储器(或缓冲器)可以实现模块化结构,使得可以部署较少数量的PE以提供足够的吞吐量并且还节省能源。此外,通过避免从存储器(例如,图1B中的SRAM 126)进行(例如,静态数据的)冗余提取,本地存储器的这种添加可以节省数据移动成本。
图2B到图2E是根据本公开的一个或多个示例实现的、包括用于执行AI相关处理,以生成针对神经网络的层的多个输出的多个处理元件(PE)的设备的实施例的框图。
参考图2B,并且在一些实施例中,加速器220可以包括加速器108(参见图1B)的一个或多个元件,并且可以包括(M×N)PE阵列或矩阵。在一些实施例中,PE阵列中的PE的数目可以是1k或2k。在一些实施例中,加速器的处理器(例如,具有图1A中的处理器124的一个或多个特征)可以考虑到最佳能量消耗来确定PE的数目和/或阵列维度。在一些实施例中,处理器可以基于受不同输入流223和不同操作数数据224影响的加速器220的功耗估计和/或测量数据来确定PE的数目和/或阵列维度。
在一些实施例中,在加速器220中,可以从存储设备126(参见例如图1B)读取、输出或访问输入流223。在一些实施例中,输入流223可以包括或提供以(M×K)输入矩阵(见图2A)来表示和/或布置的数据。在一些实施例中,输入流223可以被存储在针对PE 222的相应行的缓冲器221中。例如,每个缓冲器221可以存储针对PE 222的对应行的输入流223的部分。输入流223可以被引导到PE的222的一行(水平排或组),或者可以跨一个或多个PE而被共享,或者被划分为数据部分以作为针对相应PE的输入。操作数数据224可以被引导或提供给PE的列(垂直排或组)。在一些实施例中,操作数数据224可以被表示和/或布置在(K×N)内核矩阵中(参见图2A)。在一些实施例中,操作数数据224可以包括内核数据,其可以包括权重流中的权重(或权重信息)。该列中的PE中的每个PE可以共享相同的操作数信息或接收对应的操作数信息。针对每个目标PE的输入(来自输入流223)和/或权重可以被直接路由(例如,从存储设备126)到目标PE(例如,而不经过(多个)其他PE),或者可以通过一个或多个PE(例如,沿着PE的行或列)而被路由到目标PE。每个PE的输出可以被直接路由出PE阵列(例如,而不经过(多个)其他PE),或者可以通过一个或多个PE(例如,沿着PE的列)而被路由以退出PE阵列。PE的每列的输出可以在相应列的加法器电路处被求和或相加,并且被输出为输出数据225。在一些实施例中,输出数据225可以被表示和/或布置在(M×N)卷积输出矩阵中(参见图2A)。在一些实施例中,输出数据225可以被存储在针对相应PE列的缓冲器(例如,图1B中的缓冲器130)中。(多个)缓冲器可以将接收的输出提供、传送、路由、写入和/或存储到存储设备126(参见例如,图1B)。在一些实施例中,存储到存储设备126(参见图1B)的输出(例如,来自神经网络的层的激活数据)可以从存储设备126中被取回或读取,并且被用作PE 120的阵列的输入,以用于(神经网络的后续层的)稍后处理。
在一些实施例中,维度为(M×N)的PE阵列可以接收输入数据,以生成针对神经网络的层的多个输出。在一些实施例中,多个输出可以是布置在第一阵列(未示出)中的多个卷积输出(例如,由PE执行的卷积操作所生成的输出)。处理器可以将输出的第一输出阵列的维度与PE阵列的维度(例如,对于图2B中的PE阵列为(M×N))进行比较。处理器可以根据比较的结果(例如,响应于确定第一阵列的一个维度大于或等于PE阵列的对应维度),将第一阵列划分为子阵列,子阵列各自具有小于或等于PE阵列的维度的维度。
在一些实施例中,可以静态地配置第一阵列的划分。例如,处理器可以将第一阵列划分(或拆分或分裂或映射)为以下说明性类型的子阵列中的至少一个子阵列(例如,与大于第一阵列的相比,支持更小的卷积输出):(1)(M×N)卷积输出矩阵(参见图2B);(2)(M/2×N)卷积输出矩阵(参见图2C);(3)(M×N/2)卷积输出矩阵(例如,参见图2D);以及(4)(M/2×N/2)卷积输出矩阵(参见图2B)。在一些实施例中,分区可以例如由处理器124使用例如状态机来动态地配置。
参考图2B,响应于划分(或拆分或分裂或映射)第一阵列以提供(M×N)子阵列,处理器可以将(M×N)卷积输出矩阵分配给PE阵列的(M×N)块227(例如,整个阵列)。PE阵列的每个块可以包括一个或多个PE。在一些实施例中,(M×N)卷积输出矩阵可以被平铺或映射到(M×N)块227中,并且使用(M×K)输入流223和(K×N)操作数数据224而被更新。在一些实施例中,分配给(M×N)卷积输出矩阵的(M×N)块227的每个PE可以使用(K×N)操作数数据224和(M×K)输入流223的部分来生成或更新(M×N)卷积输出矩阵中的对应输出。在一些实施例中,(M×N)块227的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中。在一些实施例中,缓冲器130可以以(M×N)阵列或矩阵被布置,和/或可以包括N个缓冲器130,例如针对PE每列一个缓冲器。在一些实施例中,加速器220可以将存储在缓冲器中的(M×N)输出数据225写入到存储设备126(参见图1B)。
参考图2C,响应于划分(或拆分或分裂或映射)第一阵列以提供(M/2×N)子阵列,处理器可以将(M/2×N)卷积输出矩阵分配给PE阵列的(M/2×N)块237。PE阵列的每个块可以包括一个或多个PE。在一些实施例中,(M/2×N)卷积输出矩阵可以被平铺或映射到(M/2×N)块237中,并且使用(M/2×K/2)输入流233和(K/2×N)操作数数据234而被更新。在一些实施例中,分配给(M/2×N)卷积输出矩阵的(M×N)块237的每个PE可以使用(K/2×N)操作数数据234和(M/2×K/2)输入流233的部分来生成或更新(M/2×N)卷积输出矩阵中的对应输出。在一些实施例中,(M/2×N)块237的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中。在一些实施例中,加速器220可以将保持或存储在缓冲器中的(M/2×N)维度的输出数据235写入到存储设备126(参见图1B)。
参考图2D,响应于划分(或拆分或分裂或映射)第一阵列,以提供(M×N/2)子阵列,处理器可以将(M×N/2)卷积输出矩阵分配给PE阵列的(M×N/2)块247。PE阵列的每个块可以包括一个或多个PE。在一些实施例中,(M×N/2)卷积输出矩阵可以被平铺到(M×N/2)块247中,并且使用(M×K/2)输入流243和(K/2×N/2)操作数数据244而被更新。在一些实施例中,分配给(M×N/2)卷积输出矩阵的(M×N/2)块247的每个PE可以使用(K/2×N/2)操作数数据244和(M×K/2)输入流243的部分来生成或更新(M×N/2)卷积输出矩阵中的对应输出。在一些实施例中,(M×N/2)块247的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中。在一些实施例中,加速器220可以将保持或存储在缓冲器中的(M×N/2)维度的输出数据245写入到存储设备126(参见图1B)。
参考图2E,响应于划分(或拆分或分裂或映射)第一阵列以提供(M/2×N/2)子阵列,处理器可以将(M/2×N/2)卷积输出矩阵分配给PE阵列的(M/2×N/2)块257。PE阵列的每个块可以包括一个或多个PE。在一些实施例中,(M/2×N/2)卷积输出矩阵可以被平铺到(M/2×N/2)块257中,并且使用(M/2×K/2)输入流253和(K/2×N/2)操作数数据254而被更新。在一些实施例中,分配给(M/2×N/2)卷积输出矩阵的(M/2×N/2)块257的每个PE可以使用(K/2×N/2)操作数数据254和(M/2×K/2)输入流253的部分来生成或更新(M/2×N/2)卷积输出矩阵中的对应输出。在一些实施例中,(M/2×N/2)块257的每个PE可以将对应的、生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中。在一些实施例中,加速器220可以将保持或存储在缓冲器中的(M/2×N/2)维度的输出数据255写入到存储设备126(参见图1B)。
图2F是根据本公开的示例实现的、用于执行AI相关处理以生成针对神经网络的层的多个输出的处理单元(PE)的实施例的框图。
参考图2F,并且在一些实施例中,PE 260可以包括第一存储器261和第二存储器262。在一些实施例中,PE 260可以包括MAC单元(例如,具有图1C中的MAC单元140的一个或多个特征),以执行或计算(1)存储在第一存储器261中的输入流223数据的第一向量和(2)操作数数据224的第二向量的点积263。PE 260的MAC单元可以包括存储点积运算的结果的累加器264。另一PE 265具有类似的配置。响应于对与每个PE相对应的输入流和操作数数据的卷积操作的完成(例如,计算来自输入流中的向量与来自操作数数据中的向量的点积的完成),PE(图2F中的260或265)可以将卷积操作的对应结果输出到输出触发器266的对应列位置。在一些实施例中,响应于从同一行中的PE输出卷积操作的结果,输出触发器266(例如,一个或多个寄存器或触发器设备)可以将卷积操作的结果写入到缓冲器267和268的对应列位置(或列排)。
在一些实施例中,第一存储器261和第二存储器262中的每个存储器可以包括用于保持静态操作数的多个FLOP(触发器或寄存器)或锁存器,从而通过减少提取(例如,从存储设备126)的次数来降低能量。在一些实施例中,缓存或缓冲存储器(例如,SRAM)可以被用作第一存储器261和第二存储器262中的每个存储器。在一些实施例中,第二存储器可以存储多达(K×R)维度的操作数,其中R小于或等于N。例如,第一存储器261和第二存储器262中的每个存储器可以存储多达32字节的数据。利用这种配置,每个PE可以保持多达(K×R)维度的内核数据(例如,内核矩阵212)作为静态操作数,以避免当卷积/GEMM的缩减大小或维度小于或等于K×R时对静态操作数(例如从SRAM)的冗余提取。
类似地,在一些实施例中,第一存储器261可以存储多达(S×K)个输入流,其中S小于或等于M。利用这种配置,每个PE可以保持多达(S×K)个输入流数据(例如,输入矩阵211),以便当S大于1时减少(例如,从SRAM)要提取输入流数据的次数。在这种情况下,输入流数据可以在不从SRAM提取新的输入流数据的情况下被重用多达S次。
图2G是根据本公开的示例实现的、用于将PE分配给AI相关处理的输出的子阵列的方法的实施例的框图。参考图2G,并且在一些实施例中,加速器270可以包括(M×N)PE阵列或矩阵,以及输入流缓冲器271。在一些实施例中,加速器270的每个PE 272可以具有类似于图2F中的PE 260的配置。在一些实施例中,对于维度为(M×N)的PE阵列,处理器可以接收输入数据,以生成针对神经网络的层的多个输出。例如,参考图2G,如果多个输出以(M/2×2N)阵列(未图示)被布置,则处理器可以将(M/2×2N)阵列的维度与(M×N)维度的PE阵列的维度进行比较。响应于确定(M/2×2N)阵列的列维度(即2N)大于或等于PE的对应维度(即N),处理器可以将(M/2×2N)阵列划分为两个子阵列(例如,第一子阵列和第二子阵列),以适配到(M×N)PE阵列中,使得第一子阵列和第二子阵列中的每个子阵列都具有(M/2×N)的维度,其小于或等于PE阵列的维度(M×N)。
再次参考图2G,响应于将(M/2×2N)阵列划分(或拆分或分裂或映射)为(M/2×N)第一子阵列和(M/2×N)第二子阵列,处理器可以将(M/2×N)第一子阵列分配给PE阵列的(M/2×N)块277,并且将(M/2×N)第二子阵列分配给PE阵列的(M/2×N)块278。在一些实施例中,(M/2×N)第一子阵列可以被平铺或映射到(M/2×N)块277中,并且使用(M/2×K)输入流273和(K×N)操作数数据275而被更新。在一些实施例中,分配给(M/2×N)第一子阵列的(M/2×N)块277的每个PE可以使用(K×N)操作数数据274和(M/2×K)输入流273的部分来生成或更新(M/2×N)第一子阵列中的对应输出。在一些实施例中,(M/2×N)块277的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中作为(M/2×N)输出数据276。类似地,在一些实施例中,(M/2×N)第二子阵列可以被平铺或映射到(M/2×N)块278中,并且使用(M/2×K)输入流273和(K×N)操作数数据275来更新。在一些实施例中,分配给(M/2×N)第二子阵列的(M/2×N)块278的每个PE可以使用(K×N)操作数数据275和(M/2×K)输入流273的部分来生成或更新(M/2×N)第二子阵列中的对应输出。在一些实施例中,(M/2×N)块278的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中作为(M/2×N)输出数据279。
在一些实施例中,针对(M/2×N)块277和(M/2×N)块278的PE的输入数据结构可以由处理器确定。处理器可以根据划分来确定如何将输入数据的特定部分引导或路由到各个子阵列中的PE。在一些实施例中,处理器可以标识要在(M/2×N)块277和(M/2×N)块278当中共享和处理的输入数据的公共部分。例如,处理器可以将(M/2×K)输入流273标识为公共部分并且使加速器270将(M/2×K)输入流273引导、移位或路由到这两个(M/2×N)块277和(M/2×N)块278。在一些实施例中,处理器可以标识被用于(M/2×N)块277的输入数据的部分。例如,处理器可以将(K×N)操作数数据274标识为被用于(M/2×N)块277的输入数据的部分,并且可以使加速器270将(K×N)操作数数据274引导、移位或路由到(M/2×N)块277。类似地,处理器可以将(K×N)操作数数据275标识为被用于(M/2×N)块278的输入数据的部分,并且可以使加速器270将(K×N)操作数数据275引导、移位或路由到(M/2×N)块278。
在一些实施例中,(M/2×N)块277中的每个PE的第二存储器262(参见图2F)可以存储来自(K×N)操作数数据274的多达(K×R)操作数(R小于或等于N),以避免从SRAM中对静态操作数的冗余提取。类似地,(M/2×N)块278中的每个PE的第二存储器262(参见图2F)可以存储来自(K×N)操作数数据275的多达(K×R)操作数(R小于或等于N),以避免从SRAM中对静态操作数的冗余读取。
在一些实施例中,(M/2×N)块277中的每个PE的第一存储器261(参见图2F)可以存储来自(M/2×K)维度或大小的输入流273的多达(S×K)维度或大小的输入流(S小于或等于到M),从而在不从SRAM提取新的输入流数据的情况下重用输入流数据多达S次。类似地,(M/2×N)块278中的每个PE的第一存储器261(参见图2F)可以存储来自(M/2×K)维度或大小的输入流273的多达(S×K)维度或大小的输入流(S小于或等于M),从而在不从SRAM提取新的输入流数据的情况下重用输入流数据多达S次。
图2H是根据本公开的示例实现的、用于将位于不同(例如,隔离或分离)位置处的两组PE分配给AI相关处理的输出的方法的实施例的框图。参考图2H,并且在一些实施例中,针对维度为(M×N)的PE阵列,处理器可以接收两个分离的输入数据(对应于输入流281、282),其中的每个输入数据被用于生成针对神经网络的层、布置在阵列中的相应多个输出。例如,参考图2H,处理器可以接收分别对应于(M/2×N/2)第一输出阵列(未图示)和(M/2×N/2)第二输出阵列(未图示)的两个输入数据,其中的两者都具有小于或等于PE阵列的维度(M×N)的维度。响应于标识(M/2×N/2)第一输出阵列和(M/2×N/2)第二子阵列,处理器可以将(M/2×N/2)第一输出阵列分配给PE阵列的(M/2×N/2)块287,并且将(M/2×N/2)第二输出阵列分配给PE阵列的(M/2×N/2)块288。在一些实施例中,(M/2×N/2)第一输出阵列可以被平铺或映射到(M/2×N/2)块287中,并且使用(M/2×K/2)输入流281和(K/2×N/2)操作数数据283而被更新。在一些实施例中,分配给(M/2×N/2)第一输出阵列的(M/2×N/2)块287的每个PE可以使用(K/2×N/2)操作数数据283和(M/2×K/2)输入流281的部分来生成或更新(M/2×N/2)第一输出阵列中的对应输出。在一些实施例中,(M/2×N/2)块287中的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中作为(M/2×N/2)输出数据285。类似地,在一些实施例中,(M/2×N/2)第二输出阵列可以被平铺或映射到(M/2×N/2)块288中,并且使用(M/2×K/2)输入流282和(K/2×N/2)操作数数据284而被更新。在一些实施例中,分配给(M/2×N/2)第二输出阵列的(M/2×N/2)块288的每个PE可以使用(K/2×N/2)操作数数据284和(M/2×K/2)输入流282的部分来生成或更新(M/2×N/2)第二输出阵列中的对应输出。在一些实施例中,(M/2×N/2)块288中的每个PE可以将对应的生成或更新的输出存储在对应的缓冲器(例如,图1B中的缓冲器130)中作为(M/2×N/2)输出数据286。
在一些实施例中,针对(M/2×N/2)块287和(M/2×N/2)块288的PE的输入数据结构可以由处理器确定。在一些实施例中,响应于标识针对第一和第二输出阵列的两个输入数据彼此分离,处理器可以确定在(M/2×N/2)块287与(M/2×N/2)块288(例如,作为PE的子阵列)当中不存在输入数据的公共部分。在一些实施例中,响应于确定在(M/2×N/2)块287与(M/2×N/2)块288当中不存在输入数据的公共部分,处理器可以将(M/2×N/2)第一输出阵列和(M/2×N/2)第二输出阵列分配到不同(例如,分离或隔离)位置处的两个PE子阵列,例如分配到PE阵列的(M/2×N/2)块287和PE阵列的(M/2×N/2)块288。在本公开的一些实施例中,设备(例如,图2B中的加速器220)可以包括设备的处理器(例如,图1A中的处理器124)和处理单元(PE)阵列(例如,图2B中的(M×N)PE阵列)。PE阵列可以包括多个PE(例如,图2B中的PE 222)。处理器可以被配置为接收输入数据,以生成针对神经网络的层的一个或多个神经元/节点的多个输出,该多个输出以第一阵列被布置。在一些实施例中,多个输出可以是针对神经网络的层的卷积操作(参见图2A)的输出。处理器可以被配置为将第一阵列的维度与PE阵列的维度(例如,图2B中的(M×N))进行比较。处理器可以被配置为根据比较的结果,将第一阵列划分为子阵列,子阵列各自具有小于或等于PE阵列的维度的维度。处理器可以被配置为将PE阵列中的第一组PE(例如,图2G中的PE的(M/2×N)块277)分配给子阵列中的第一子阵列。分配给子阵列中的第一子阵列(例如,图2G中的PE的(M/2×N)块277)的第一组PE中的每个PE可以被配置为使用输入数据的部分(例如,图2G中的(M/2×K)输入流273、(K×N)操作数数据274)来生成多个PE中的对应输出。
在一些实施例中,PE阵列可以是二维M×N阵列(参见图2B至图2E和图2G至图2H)。M和N均是大于1的整数。处理器可以被配置为划分第一阵列以提供以下中的一项或多项:M×N阵列(参见图2B)、M×N/2阵列(参见图2D)、M/2×N阵列(参见图2C)、M/2×N/2阵列(参见图2E)和/或其他各种维度的阵列。
在一些实施例中,处理器可以被配置为确定第一维度中的第一阵列的大小(例如,图2G中的(M/2×2N)阵列中的2N)是否大于第一维度中的PE阵列中的大小(例如,图2G中的(M×N)PE阵列中的N)。响应于确定第一维度中的第一阵列的大小大于第一维度中的PE阵列的大小,处理器可以被配置为将第一阵列划分为子阵列中的第一子阵列和第二子阵列。处理器可以被配置为将第一子阵列分配给PE阵列中的第一组PE(例如,图2G中的(M/2×N)块277)块,并且将第二子阵列分配给PE阵列中、不同于第一组PE的第二组PE(例如,图2G中的(M/2×N)块278)。
在一些实施例中,处理器还可以被配置为标识将由第一组PE和第二组PE两者使用的输入数据的公共部分(例如,图2G中的(M/2×K)输入流273)。处理器还可以被配置为将输入数据的公共部分(例如,图2G中的(M/2×K)输入流273)引导、路由或移位到第一和第二组PE(例如,图2G中的(M/2×N)块277和(M/2×N)块278)。
在一些实施例中,处理器还可以被配置为标识将由第一组PE使用的输入数据的第一部分(例如,图2G中的(K×N)操作数数据274)和将由第二组PE使用的输入数据的第二部分(例如,图2G中的(K×N)操作数数据275)。处理器还可以被配置为将输入数据的第一部分(例如,图2G中的(K×N)操作数数据274)引导、路由或移位到第一组PE(例如,图2G中的(M/2×N)块277)。处理器还可以被配置为将输入数据的第二部分(例如,图2G中的(K×N)操作数数据275)引导、路由或移位到第二组PE(例如,图2G中的(M/2×N)块278)。
在一些实施例中,输入数据可以包括第一多个输入值(例如,表示图2A中的输入矩阵211的元素)和第二多个输入值(例如,表示图2A中的内核矩阵212的元素)。第一组PE(例如,图2F中的PE260)中的每个PE可以包括第一缓冲存储器(例如,图2F中的第一存储器261)、第二缓冲存储器(例如,图2F中的第一存储器262)和/或乘法器和累加器(MAC)电路(例如,图1C中的MAC单元140)。在生成多个输出中的对应输出时,第一组PE中的每个PE可以被配置为接收第一多个输入值的第一值(例如,图2F中的第一向量)和第二多个输入值的第二值(例如,图2F中的第二向量)。第一组PE中的每个PE(例如,图2F中的PE 260)可以被配置为将第一值和第二值(例如,图2F中的第一向量和第二向量)分别存储在第一缓冲器中和第二缓冲存储器(例如,图2F中的第一存储器261和第二存储器262)。第一组PE中的每个PE可以被配置为经由MAC电路而生成第一值与第二值之间的第一点积运算(例如,图2F中的点积263)的结果。
在一些实施例中,每个PE可以被配置为将多个第一输入值的第一数目的值集(例如,图2F中的S个第一向量)存储在第一缓冲存储器(例如,图2F中的第一存储器261)中。每个PE可以被配置为经由MAC电路来计算(i)存储在第一缓冲存储器中的第一数目的值集中的每个值与(ii)存储在第二缓冲存储器中的第二值(例如,存储在图2F中的第二存储器262中的第二向量)的点积(例如,点积运算的结果)。每个PE可以被配置为输出第一数目的、所计算的点积(例如,图2F中的S个点积)作为针对神经网络的层的卷积操作的输出。
在一些实施例中,每个PE可以被配置为将多个第二输入值中的第二数目的值集合(例如,图2F中的R个第二向量)存储在第二缓冲存储器(例如,图2F中的第二存储器262)中。每个PE可以被配置为经由MAC电路计算(i)存储在第一缓冲存储器中的第一值(例如,存储在图2F中的第一缓冲存储器261中的第一向量)和(ii)存储在第二缓冲存储器中的第二数目的值集中的每个值的点积(例如,点积运算的结果)。每个PE可以被配置为输出计算出的第二数量的点积(例如,图2F中的R个点积)作为针对神经网络的层的卷积操作的输出。
在一些实施例中,第一多个输入值可以表示针对神经网络层的输入数据流(例如,图2A中的输入矩阵211)和权重(例如,图2A中的内核矩阵212)中的一个。第二多个输入值可以表示针对神经网络的层的输入数据流和权重中的另一个。
图2I是图示根据本公开的示例实现的、用于生成针对神经网络的层的多个输出的过程的流程图。在一些实施例中,该方法包括由处理器接收输入数据,以生成针对神经网络的层的多个输出,该多个输出以第一阵列(291)被布置。该方法可以包括由处理器将第一阵列的维度与包括多个处理单元(PE)的PE阵列的维度进行比较(292)。该方法可以包括由处理器根据比较的结果将第一阵列划分为子阵列(293)。子阵列中的每个子阵列可以具有小于或等于PE阵列的维度的维度。该方法可以包括由处理器将PE阵列中的第一组PE分配给子阵列(294)中的第一子阵列。该方法可以包括由分配给子阵列中的第一子阵列的第一组PE中的每个PE使用输入数据的部分来生成多个输出中的对应输出。
在291的进一步细节中,并且在一些实施例中,加速器的处理器(例如,图1A中的处理器124)接收输入数据,以生成针对神经网络的层的多个输出,该多个输出以第一阵列被布置。在一些实施例中,多个输出可以是针对神经网络的层的卷积操作(参见图2A)的输出。例如,参考图2G,第一阵列可以具有(M/2×2N)的维度。
在292的进一步细节中,并且在一些实施例中,处理器将第一阵列的维度(例如,图2B中的(M×N))与包括多个处理单元(PE)(例如,图2B中的PE 222)的PE阵列的维度(例如,图2B中的(M×N)PE阵列)进行比较。在一些实施例中,PE阵列可以是二维M×N阵列(参见图2B至图2E和图2G至图2H),并且M和N均是大于1的整数。在一些实施例中,处理器可以确定第一维度中的第一阵列的大小(例如,图2G中的(M/2×2N)阵列中的2N)是否大于第一维度中的PE阵列的大小(例如,图2G中的(M×N)PE阵列中的N)。
在293的进一步细节中,并且在一些实施例中,根据比较的结果,处理器可以将第一阵列划分为子阵列。在一些实施例中,子阵列中的每个子阵列可以具有小于或等于PE阵列的维度的维度。例如,在图2G中,第一子阵列和第二子阵列中的每个子阵列(M/2×N)具有小于或等于PE阵列的维度(即,M×N)的维度。在一些实施例中,响应于确定第一维度中的第一阵列的大小(例如,图2G中的(M/2×2N)阵列中的2N)大于第一维度中的PE阵列的大小(例如,图2G中的(M×N)PE阵列中的N),处理器可以将第一阵列划分为阵列中的第一子阵列和第二子阵列(例如,在图2G中,(M/2×2N)阵列被划分为两个(M/2×N)子阵列)。
在294的进一步细节中,并且在一些实施例中,处理器可以将PE阵列中的第一组PE(例如,图2G中的PE的(M/2×N)块277)分配给第一组子阵列(例如,图2G中的(M/2×N)阵列)。在一些实施例中,处理器可以将第一子阵列分配给PE阵列中的第一组PE,并且将第二子阵列(例如,图2G中的(M/2×N)阵列)分配给PE阵列中的第二组PE(例如,图2G中的PE的(M/2×N)块278)。以不同于第一维度的第二维度的第一组PE(例如,图2G中的PE的(M/2×N)块277)的位置可以与以第二维度的第二组PE(例如,图2G中的PE的(M/2×N)块278)的位置不同。
在一些实施例中,处理器可以标识将由第一组PE和第二组PE两者使用的输入数据的公共部分(例如,图2G中的(M/2×K)输入流273)。处理器可以将输入数据的公共部分(例如,图2G中的(M/2×K)输入流273)引导、路由或移位到第一PE和第二组PE(例如,图2G中的(M/2×N)块277和(M/2×N)块278)中。
在一些实施例中,处理器可以标识将由第一组PE(例如,图2G中的(M/2×N)块277)使用的输入数据的第一部分(例如,图2G中的(K×N)操作数数据274),以及将由第二组PE(例如,图2G中的(M/2×N)块278)使用的输入数据的第二部分(例如,图2G中的(K×N)操作数数据275)。处理器可以将输入数据的第一部分(例如,图2G中的(K×N)操作数数据274)引导、路由或移位到第一组PE(例如,图2G中的(M/2×N)块277)。处理器可以将输入数据的第二部分(例如,图2G中的(K×N)操作数数据275)引导、路由或移位到第二组PE(例如,图2G中的(M/2×N)块278)。
在295的进一步细节中,分配给子阵列中的第一子阵列的第一组PE(例如,图2G中的PE的(M/2×N)块277)中的每个PE可以使用输入数据的部分(例如,图2G中的(M/2×K)输入流273和(K×N)操作数数据274)来生成多个输出中的对应输出。在一些实施例中,输入数据可以包括第一多个输入值(例如,图2A中的输入矩阵211)和第二多个输入值(例如,图2A中的内核矩阵212)。在一些实施例中,第一多个输入值可以表示针对神经网络的层的输入数据流(例如,图2A中的输入矩阵211)和权重(例如,图2A中的内核矩阵212)中的一个。在一些实施例中,第二多个输入值可以表示针对神经网络的层的输入数据流和权重中的另一个。在由第一组PE中的每个PE生成多个输出中的对应输出时,每个PE可以接收第一多个输入值的第一值(例如,图2F中的第一向量)和第二多个输入值的第二值(例如,图2F中的第二向量)。每个PE可以将第一值和第二值分别存储在所述每个PE的第一缓冲存储器和第二缓冲存储器(例如,图2F中的第一存储器261和第二存储器262)中。每个PE的乘法器和累加器(MAC)电路(例如,图1C中的MAC单元140)可以生成或计算第一值与第二值的第一点积(例如,图2F中的点积263)。
在一些实施例中,每个PE的第一缓冲存储器(例如,图2F中的第一存储器261)可以存储第一多个输入值中的第一数目的值集(例如,图2F中的S个第一向量)。MAC电路可以计算(i)存储在每个PE的第一缓冲存储器中的第一数目的值集中的每个值与(ii)存储在每个PE的第二缓冲存储器中的第二值(例如,存储在图2F中的第二存储器262中的第二向量)的点积。第一数目的、所计算的点积(例如,图2F中的S个点积)可以是针对神经网络的层的卷积操作的输出。
在一些实施例中,每个PE的第二缓冲存储器(例如,图2F中的第二存储器262)可以存储第二多个输入值中的第二数目的值集(例如,图2F中的R个第二向量)。MAC电路可以计算并且输出(i)存储在所述每个PE的第一缓冲存储器中的第一值(例如,存储在图2F中的第一存储器261中的第一向量)与(ii)存储在每个PE的第二缓冲存储器中的第二数目的值集中的每个值的点积。第二数目的、所计算的点积(例如,图2F中的R个点积)可以是针对神经网络的层的卷积操作的输出。
现在已经描述了一些说明性的实现,很明显,已经通过示例的方式呈现的前述内容是说明性的而非限制性的。特别地,虽然本文呈现的许多示例涉及方法动作或系统元素的特定组合,但是这些动作和那些元素可以以其他方式来组合以实现相同的目标。结合一种实现来讨论的动作、元素和特征不旨在被排除在其他实现或实现中的类似角色之外。
被用来实现结合本文公开的实施例描述的各种过程、操作、说明性逻辑、逻辑块、模块和电路的硬件和数据处理组件可以利用以下设备来实现或执行:通用单片或多片处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其他可编程逻辑器件、分立门或晶体管逻辑、分立硬件组件或被设计来执行本文所述功能的其任何组合。通用处理器可以是微处理器,或者任何传统的处理器、控制器、微控制器或状态机。处理器还可以被实现为计算设备的组合,诸如DSP和微处理器的组合、多个微处理器、与DSP核心结合的一个或多个微处理器,或者任何其他这样的配置。在一些实施例中,特定过程和方法可以由特定于给定功能的电路来执行。存储器(例如,存储器、存储器单元、存储设备等)可以包括用于存储数据和/或计算机代码以完成或促进本公开中描述的各种过程、层和模块的一个或多个设备(例如,RAM、ROM、闪存、硬盘存储等)。存储器可以是或包括易失性存储器或非易失性存储器,并且可以包括:数据库组件、目标代码组件、脚本组件或用于支持本公开中描述的各种活动和信息结构的任何其他类型的信息结构。根据示例性实施例,存储器经由处理电路可通信地连接到处理器并且包括用于(例如,由处理电路和/或处理器)执行本文所描述的一个或多个过程的计算机代码。
本公开考虑在任何机器可读介质上用于完成各种操作的方法、系统和程序产品。本公开的实施例可以使用现有的计算机处理器来实现,或者通过为了这个或另一个目的而合并的用于适当系统的专用计算机处理器来实现,或者通过硬连线系统来实现。本公开范围内的实施例包括程序产品,该程序产品包括机器可读介质,用于承载或具有存储在其上的机器可执行指令或数据结构。这种机器可读介质可以是可由通用或专用计算机或具有处理器的其他机器访问的任何可用介质。例如,此类机器可读介质可以包括RAM、ROM、EPROM、EEPROM或其他光盘存储、磁盘存储或其他磁存储设备,或可以被用于以机器可执行指令或数据结构的形式承载或存储所需程序代码并且可以被通用或专用计算机或具有处理器的其他机器访问的任何其他介质。上述的组合也被包括在机器可读介质的范围内。例如,机器可执行指令包括使通用计算机、专用计算机或专用处理机器执行特定功能或功能组的指令和数据。
本文使用的措辞和术语是为了描述的目的,并且不应被视为限制。本文使用的“包括”“具有”“包含”“涉及”“表征”“特征为”及其变型在涵盖其后列出的项目、其等价物和附加项目以及仅由其后列出的项目组成的备选实现。在一种实现中,本文描述的系统和方法由一个以上的每个组合,或所有描述的元素、动作或组件组成。
对本文中以单数形式提及的系统和方法的实现或元素或动作的任何引用也可以包含包括多个这些元素的实现,并且对本文中任何实现或元素或动作的任何复数引用也可以包含仅包括单个元素的实现。单数或复数形式的引用并不旨在将当前公开的系统或方法、它们的组件、动作或元素限制为单个或多个配置。对基于任何信息、动作或元素的任何动作或元素的引用可以包括其中动作或元素至少部分地基于任何信息、动作或元素的实现。
本文公开的任何实现可以与任何其他实现或实施例组合,并且对“实现”、“一些实现”、“一个实现”等的引用不必然是相互排斥的并且旨在指示结合该实现描述的特定特征、结构或者特征可以被包括在至少一个实现或实施例中。本文使用的此类术语不一定都指代相同的实现。任何实现可以以与本文公开的各方面和实现相一致的任何方式来包括地或排他地与任何其他实现相结合。
在附图、具体实施方式或任何权利要求中的技术特征后跟有参考标记的情况下,已经包括参考标记以提高附图、具体实施方式和权利要求的可理解性。因此,参考标记或它们的缺失对任何权利要求元素的范围均没有任何限制作用。
本文描述的系统和方法可以在不脱离其特性的情况下以其他特定形式来具化。除非另有明确说明,否则对“大概”、“大约”、“基本上”或其他程度术语的引用包括与给定测量值、单位或范围的+/-10%的变化。耦合元件可以彼此直接电耦合、机械耦合或物理耦合或利用中间元件而彼此电耦合、机械耦合或物理耦合。本文所描述的系统和方法的范围因此由所附权利要求而不是前述描述来指示,并且在权利要求的等效含义和范围内的变化被包含在其中。
术语“耦合”及其变体包括两个构件直接或间接地相互接合。这种接合可以是固定的(例如,永久的或固定的)或可移动的(例如,可移除的或可释放的)。这种接合可以通过如下操作来实现:两个构件直接彼此耦合或耦合到彼此,两个构件使用单独的中间构件以及彼此耦合的任何附加的中间构件来彼此耦合,或者两个构件使用与两个构件之一一体形成为单一整体的中间构件来彼此耦合。如果“耦合”或其变体被附加术语(例如,直接耦合)修改,则上文提供的“耦合”的一般定义由附加术语的明语含义所修改(例如,“直接耦合”意味着没有任何单独的中间构件的两个构件的接合),导致比上面提供的“耦合”的一般定义更窄的定义。这种耦合可以是机械的、电的或流体的。
对“或”的引用可以被解释为包含性的,因此使用“或”描述的任何术语可以指示所描述的术语中的单个、多个和所有。对“‘A’和‘B’中的至少一个”的引用可以包括仅‘A’、仅‘B’以及‘A’和‘B’。与“包括”或其他开放术语结合使用的此类引用可以包括附加的项目。
对所描述的元素和行为的修改,诸如各种元素的大小、维度、结构、形状和比例、参数值、安装布置、材料的使用、颜色、取向中的变化,可以在实质上不脱离本文公开的主题的教导和优点的情况下发生。例如,被示为整体形成的元素可以由多个部分或元素构成,元素的位置可以颠倒或以其他方式改变,并且离散的元素或位置的性质或数量可以改变或变化。在不脱离本公开的范围的情况下,还可以对所公开的元素和操作的设计、操作条件和布置进行其他替换、修改、变化和省略。
本文中对元素位置(例如,“顶部”、“底部”、“上方”、“下方”)的引用仅被用于描述附图中的各种元素的取向。各种元素的取向可以根据其他示例性实施例而不同,并且这种变化旨在被本公开所涵盖。

Claims (15)

1.一种用于生成针对神经网络的层的多个输出的方法,所述方法包括:
由处理器接收输入数据,以生成针对神经网络的层的多个输出,所述多个输出以第一阵列被布置;
由所述处理器将所述第一阵列的维度与处理单元(PE)阵列的维度进行比较,所述PE阵列包括多个PE;
由所述处理器根据所述比较的结果,将所述第一阵列划分为子阵列,所述子阵列各自具有小于或等于所述PE阵列的所述维度的维度;
由所述处理器将所述PE阵列中的第一组PE分配给所述子阵列中的第一子阵列;以及
由分配给所述子阵列中的所述第一子阵列的所述第一组PE中的每个PE使用所述输入数据的部分来生成所述多个输出中的对应输出。
2.根据权利要求1所述的方法,其中:
所述PE阵列是二维M×N阵列,其中M和N均是大于1的整数,并且
所述第一阵列的所述划分包括:将所述第一阵列划分为以下中的一项或多项:M×N阵列、M×N/2阵列、M/2×N阵列或M/2×N/2阵列。
3.根据权利要求1所述的方法,还包括:
确定第一维度中的所述第一阵列的大小是否大于所述第一维度中的所述PE阵列的大小;以及
响应于确定所述第一维度中的所述第一阵列的所述大小大于所述第一维度中的所述PE阵列的所述大小:
将所述第一阵列划分为所述子阵列的所述第一子阵列和第二子阵列;以及
将所述第一子阵列分配给所述PE阵列中的所述第一组PE,并且将所述第二子阵列分配给所述PE阵列中的第二组PE,其中以不同于所述第一维度的第二维度的所述第一组PE的位置与以所述第二维度的所述第二组PE的位置不同。
4.根据权利要求3所述的方法,还包括:
标识将由所述第一组PE和所述第二组PE两者使用的所述输入数据的公共部分;以及
将所述输入数据的所述公共部分移位到所述第一组PE和所述第二组PE中。
5.根据权利要求3所述的方法,还包括:
标识将由所述第一组PE使用的所述输入数据的第一部分以及将由所述第二组PE使用的所述输入数据的第二部分;
将所述输入数据的所述第一部分移位到所述第一组PE中;以及
将所述输入数据的所述第二部分移位到所述第二组PE中。
6.根据权利要求1所述的方法,其中所述多个输出是针对所述神经网络的所述层的卷积操作的输出;并且其中:
所述输入数据包括第一多个输入值和第二多个输入值,以及
由所述第一组PE中的每个PE生成所述多个输出中的所述对应输出,包括:
由所述每个PE接收所述第一多个输入值的第一值和所述第二多个输入值的第二值;
由所述每个PE将所述第一值和所述第二值分别存储在所述每个PE的第一缓冲存储器和第二缓冲存储器中;以及
由所述每个PE的乘法器和累加器(MAC)电路生成所述第一值与所述第二值的第一点积;其中
所述第一多个输入值表示针对所述神经网络的所述层的输入数据流和权重中的一个,以及
所述第二多个输入值表示针对所述神经网络的所述层的输入数据流和权重中的另一个。
7.根据权利要求6所述的方法,其中:
所述第一多个输入值中的第一数目的值集被存储在所述每个PE的所述第一缓冲存储器中,
由MAC电路计算(i)存储在所述每个PE的所述第一缓冲存储器中的所述第一数目的值集中的每个值与(ii)存储在所述每个PE的所述第二缓冲存储器中的所述第二值的点积,以及
所述第一数目的、所计算的所述点积是针对所述神经网络的所述层的卷积操作的输出。
8.根据权利要求6所述的方法,其中:
所述多个第二输入值中的第二数目的值集被存储在所述每个PE的所述第二缓冲存储器中,
由MAC电路计算(i)存储在所述每个PE的所述第一缓冲存储器中的所述第一值与(ii)存储在所述每个PE的所述第二缓冲存储器中的第二数目的值集中的每个值的点积,以及
所述第二数目的、所计算的点积是针对所述神经网络的所述层的卷积操作的输出。
9.一种用于生成神经网络的层的多个输出的设备,所述设备包括:
处理器;和
处理单元(PE)阵列,包括多个PE,其中所述处理器被配置为:
接收输入数据,以生成针对神经网络的层的多个输出,所述多个输出以第一阵列被布置;
将所述第一阵列的维度与所述PE阵列的维度进行比较;
根据比较的结果,将所述第一阵列划分为子阵列,所述子阵列各自具有小于或等于所述PE阵列的所述维度的维度;以及
将所述PE阵列中的第一组PE分配给所述子阵列中的第一子阵列,以及
其中分配给所述子阵列中的所述第一子阵列的所述第一组PE中的每个PE被配置为:使用所述输入数据的部分来生成所述多个输出中的对应输出。
10.根据权利要求9所述的设备,其中:
所述PE阵列是二维M×N阵列,其中M和N均是大于1的整数,并且
所述处理器被配置为:将所述第一阵列划分为以下中的一项或多项:M×N阵列、M×N/2阵列、M/2×N阵列或M/2×N/2阵列。
11.根据权利要求9所述的设备,其中:
所述处理器被配置为:确定第一维度中的所述第一阵列的大小是否大于所述第一维度中的所述PE阵列的大小,
响应于确定所述第一维度中的所述第一阵列的所述大小大于所述第一维度中的所述PE阵列的所述大小,所述处理器被配置为:
将所述第一阵列划分为所述子阵列的所述第一子阵列和第二子阵列;以及
将所述第一子阵列分配给所述PE阵列中的所述第一组PE,并且将所述第二子阵列分配给所述PE阵列中、不同于所述第一组PE的第二组PE。
12.根据权利要求11所述的设备,其中所述处理器还被配置为:
标识将由所述第一组和第二组PE两者使用的所述输入数据的公共部分;以及
将所述输入数据的所述公共部分移位到所述第一组PE和所述第二组PE中。
13.根据权利要求11所述的设备,其中所述处理器还被配置为:
标识将由所述第一组PE使用的所述输入数据的第一部分以及将由所述第二组PE使用的所述输入数据的第二部分;
将所述输入数据的所述第一部分移位到所述第一组PE中;以及
将所述输入数据的所述第二部分移位到所述第二组PE中。
14.根据权利要求9所述的设备,其中所述多个输出是针对所述神经网络的层的卷积操作的输出,并且其中:
所述输入数据包括第一多个输入值和第二多个输入值,
所述第一组PE中的每个PE包括:第一缓冲存储器、第二缓冲存储器以及乘法器和累加器(MAC)电路,以及
在生成所述多个输出中的所述对应输出时,所述第一组PE中的每个PE被配置为:
接收所述第一多个输入值中的第一值和所述第二多个输入值中的第二值;
将所述第一值和所述第二值分别储存在所述第一缓冲存储器和所述第二缓冲存储器中;以及
经由所述MAC电路来生成所述第一值与所述第二值的第一点积;其中
所述第一多个输入值表示针对所述神经网络的所述层的输入数据流和权重中的一个,以及
所述第二多个输入值表示针对所述神经网络的所述层的输入数据流和权重中的另一个。
15.根据权利要求14所述的设备,其中所述每个PE被配置为:
将所述多个第一输入值中的第一数目的值集存储在所述第一缓冲存储器中,
经由所述MAC电路计算(i)存储在所述第一缓冲存储器中的所述第一数目的值集中的每个值与(ii)存储在所述第二缓冲存储器中的所述第二值的点积,以及
将所述第一数目、所计算的所述点积输出作为针对所述神经网络的所述层的卷积操作的输出。
CN202080051434.8A 2019-07-15 2020-07-09 用于在节能输入操作数固定加速器中执行小通道计数卷积的系统和方法 Pending CN114402338A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/511,544 2019-07-15
US16/511,544 US11675998B2 (en) 2019-07-15 2019-07-15 System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator
PCT/US2020/041449 WO2021011314A1 (en) 2019-07-15 2020-07-09 System and method for performing small channel count convolutions in energy-efficient input stationary accelerator

Publications (1)

Publication Number Publication Date
CN114402338A true CN114402338A (zh) 2022-04-26

Family

ID=71842867

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202080051434.8A Pending CN114402338A (zh) 2019-07-15 2020-07-09 用于在节能输入操作数固定加速器中执行小通道计数卷积的系统和方法

Country Status (6)

Country Link
US (1) US11675998B2 (zh)
EP (1) EP4000012A1 (zh)
JP (1) JP2022540548A (zh)
KR (1) KR20220031115A (zh)
CN (1) CN114402338A (zh)
WO (1) WO2021011314A1 (zh)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
CN113396400A (zh) 2019-03-15 2021-09-14 英特尔公司 用于针对高速缓存操作提供层级开放划分扇区和可变扇区大小的系统和方法
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
WO2020190807A1 (en) 2019-03-15 2020-09-24 Intel Corporation Systolic disaggregation within a matrix accelerator architecture
EP4130988A1 (en) 2019-03-15 2023-02-08 INTEL Corporation Systems and methods for cache optimization
US11656849B2 (en) * 2019-08-14 2023-05-23 Vorticity Inc. Dedicated hardware system for solving partial differential equations
US11556801B2 (en) * 2019-08-19 2023-01-17 Via Technologies, Inc. Neural network image identification system, neural network building system and method
US11403070B2 (en) 2019-08-19 2022-08-02 Vorticity Inc. Systolic array design for solving partial differential equations
US11921813B2 (en) 2019-08-20 2024-03-05 Vorticity Inc. Methods for utilizing solver hardware for solving partial differential equations
CN110727633A (zh) * 2019-09-17 2020-01-24 广东高云半导体科技股份有限公司 基于SoC FPGA的边缘人工智能计算系统构架
US11842169B1 (en) 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
US11861761B2 (en) * 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11610102B1 (en) * 2019-11-27 2023-03-21 Amazon Technologies, Inc. Time-based memory allocation for neural network inference
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
TWI733334B (zh) * 2020-02-15 2021-07-11 財團法人工業技術研究院 卷積神經網路運算裝置及其運算的方法
US11461651B2 (en) * 2020-04-09 2022-10-04 Micron Technology, Inc. System on a chip with deep learning accelerator and random access memory
US11355175B2 (en) 2020-04-09 2022-06-07 Micron Technology, Inc. Deep learning accelerator and random access memory with a camera interface
US11887647B2 (en) 2020-04-09 2024-01-30 Micron Technology, Inc. Deep learning accelerator and random access memory with separate memory access connections
US11726784B2 (en) 2020-04-09 2023-08-15 Micron Technology, Inc. Patient monitoring using edge servers having deep learning accelerator and random access memory
US11874897B2 (en) 2020-04-09 2024-01-16 Micron Technology, Inc. Integrated circuit device with deep learning accelerator and random access memory
US11687764B2 (en) * 2020-04-17 2023-06-27 Samsung Electronics Co., Ltd. System and method for increasing utilization of dot-product based neural network accelerator
TWI768326B (zh) * 2020-04-20 2022-06-21 國立陽明交通大學 卷積運算模組及方法以及其適用之卷積神經網路系統
US11308027B1 (en) * 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
US11422773B1 (en) * 2020-06-29 2022-08-23 Amazon Technologies, Inc. Multiple busses within a systolic array processing element
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
CN113704689B (zh) * 2021-08-25 2022-11-11 北京大学 一种基于昇腾ai处理器的矩阵乘算子的处理方法及装置
US20230133360A1 (en) * 2021-10-28 2023-05-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute-In-Memory-Based Floating-Point Processor
CN114595813B (zh) * 2022-02-14 2024-09-06 清华大学 异构加速处理器及数据计算方法
KR102698148B1 (ko) * 2022-11-01 2024-08-23 오픈엣지테크놀로지 주식회사 신경망 및 액티베이션의 파티션 및 시뮬레이션 방법 및 이를 위한 컴퓨팅 장치

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10817587B2 (en) * 2017-02-28 2020-10-27 Texas Instruments Incorporated Reconfigurable matrix multiplier system and method
US11157441B2 (en) 2017-07-24 2021-10-26 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
US11188820B2 (en) 2017-09-08 2021-11-30 International Business Machines Corporation Deep neural network performance analysis on shared memory accelerator systems
US11537687B2 (en) * 2018-11-19 2022-12-27 Groq, Inc. Spatial locality transform of matrices

Also Published As

Publication number Publication date
WO2021011314A1 (en) 2021-01-21
EP4000012A1 (en) 2022-05-25
KR20220031115A (ko) 2022-03-11
US20210019591A1 (en) 2021-01-21
WO2021011314A8 (en) 2021-12-23
JP2022540548A (ja) 2022-09-16
US11675998B2 (en) 2023-06-13

Similar Documents

Publication Publication Date Title
US11675998B2 (en) System and method for performing small channel count convolutions in energy-efficient input operand stationary accelerator
US11615319B2 (en) System and method for shift-based information mixing across channels for shufflenet-like neural networks
CN114207629A (zh) 用于在神经网络加速器中读写稀疏数据的系统和方法
CN114127680B (zh) 支持用于高效乘法的替代数字格式的系统和方法
US20210012178A1 (en) Systems, methods, and devices for early-exit from convolution
US20220308835A1 (en) Counter based multiply-and-accumulate circuit for neural network
US11429394B2 (en) Efficient multiply-accumulation based on sparse matrix
US11301545B2 (en) Power efficient multiply-accumulate circuitry
US20210012186A1 (en) Systems and methods for pipelined parallelism to accelerate distributed processing
US11681777B2 (en) Optimization for deconvolution
CN113994347A (zh) 用于负值和正值的非对称缩放因子支持的系统和方法
US11899745B1 (en) Systems and methods for speech or text processing using matrix operations

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
CB02 Change of applicant information

Address after: California, USA

Applicant after: Yuan Platform Technology Co.,Ltd.

Address before: California, USA

Applicant before: Facebook Technologies, LLC

CB02 Change of applicant information