原生张量处理器及使用原生张量处理器的系统转让专利

申请号 : CN201810443874.2

文献号 : CN108875957B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吕坚平邓宇轩

申请人 : 北京异构智能科技有限公司

摘要 :

原生张量处理器使用外积之和计算张量缩并。在一种实现中,原生张量处理器优选地被实现为单一集成电路,并且包括输入缓冲器和缩并引擎。输入缓冲器缓冲从片外检索的张量元素,并根据需要将元素传输到缩并引擎。缩并引擎通过执行来自等价矩阵乘法的计算来计算张量缩并,就好像张量被展开成矩阵一样,但避免了明确展开张量的开销。缩并引擎包括多个外积单元,多个外积单元通过外积之和计算矩阵乘法。通过使用外积,等价矩阵乘法可以被分割成更小的矩阵乘法,这些更小的矩阵乘法在所需的局部张量间进行。

权利要求 :

1.一种计算机系统,其包括:

处理器子系统,其具有至少一个处理器;以及

原生张量子系统,其具有至少一个在单一集成电路上实现的原生张量处理器,所述原生张量处理器包括:缩并引擎,其通过执行影响矩阵乘法X×Y=Z的计算来计算张量TX和TY的缩并,其中X是对于张量TX的展开矩阵,Y是对于张量TY的展开矩阵,所述缩并引擎包括:多个外积单元,其通过外积之和计算矩阵乘法;

分配部段,其连接到多个外积单元,所述分配部段相对于缩并指数k将X×Y矩阵乘法分割成多个Xk×Yk外积,并将Xk×Yk外积引导到外积单元;以及收集部段,其连接至多个外积单元,所述收集部段将由所述外积单元计算得到的外积求和成矩阵乘法的积。

2.根据权利要求1所述的系统,其特征在于,所述处理器子系统扮演主机的角色,并且所述原生张量子系统扮演在主机控制下的加速器的角色。

3.根据权利要求2所述的系统,其特征在于,所述主机识别要执行的张量缩并,并将所述张量缩并分配给用于执行的加速器。

4.根据权利要求2所述的系统,其特征在于,所述主机使用PCIExpress与所述加速器通过接口连接。

5.根据权利要求2所述的系统,其特征在于,所述主机和所述加速器分别访问不同的存储器。

6.根据权利要求2所述的系统,其特征在于,所述主机和所述加速器访问共享的存储器。

7.根据权利要求1所述的系统,其特征在于,所述原生张量子系统具有多个原生张量处理器。

8.根据权利要求7所述的系统,其特征在于,所述原生张量处理器是可配置的,其通过处理器子系统根据要执行的张量缩并的需要来配置。

9.根据权利要求8所述的系统,其特征在于,所述处理器子系统配置多个原生张量处理器以并行操作,从而执行张量缩并,并且所述张量缩并在多个原生张量处理器之间被分割。

10.根据权利要求9所述的系统,其特征在于,所述张量缩并相对于用于张量缩并的缩并指数而在多个原生张量处理器之间被分割。

11.根据权利要求8所述的系统,其特征在于,所述系统还包括PCIExpress开关,所述PCIExpress开关将所述处理器子系统连接到多个原生张量处理器。

12.根据权利要求7所述的系统,其特征在于,所述处理器子系统将原生张量处理器的容量虚拟化,并且所述张量缩并在虚拟的原生张量处理器之间被分割。

13.根据权利要求7所述的系统,其特征在于,所述原生张量处理器的容量可提供给第三方用户用作云服务器。

14.根据权利要求7所述的系统,其特征在于,所述原生张量处理器通过专用通信信道相互连接。

15.根据权利要求7所述的系统,其特征在于,所述原生张量处理器通过局域网相互连接。

16.根据权利要求7所述的系统,其特征在于,所述多个原生张量处理器提供对抗原生张量处理器故障的冗余。

17.根据权利要求7所述的系统,其特征在于,所述多个原生张量处理器以提供原生张量超级计算机能力的方式连接。

18.根据权利要求1所述的系统,其特征在于,所述处理器子系统和原生张量子系统实现为在单一电路板上的分离的集成电路。

19.根据权利要求1所述的系统,其特征在于,所述处理器子系统和原生张量子系统实现为箱架系统中的叶片。

20.根据权利要求1所述的系统,其特征在于,所述处理器子系统和原生张量子系统在同一集成电路中实现。

说明书 :

原生张量处理器及使用原生张量处理器的系统

[0001] 相关申请的交叉引用
[0002] 本申请是2017年5月11日提交的、序列号No.15/593192、题为“Native Tensor Processor,Using Outer Product Unit”的美国专利申请的继续申请。前述申请的主题通过引用整体并入本文。

技术领域

[0003] 本公开大致涉及张量处理,包括张量缩并。

背景技术

[0004] 随着技术的进步,每天都有越来越多的数据被创建和分析。机器学习技术(例如深度学习和卷积神经网络),作为分析这些大量数据的重要方法,正变得日益重要。然而,这种大型任务的计算性能已越来越受将数据移动到正确的处理元素以进行计算的成本的支配。
[0005] 传统的并行处理器已经努力处理这些数据量和其导致的数据移动模式。在许多传统的并行处理架构中,包括典型的GPU架构,计算单元被布置为一维阵列到三维网格。然而,计算单元通常必须自己从存储器中检索数据。因此,使用了例如寄存器文件、缓冲和暂存器(scratch memory)技术,来减少存储器延迟。然而,这需要在集成电路上增加更多电路,还需要更多能量来为电路供电。
[0006] 可编程数据流机器是一种替代方法。然而,细粒度数据项之间的一般依赖关系通常导致了复杂性和低效率。
[0007] 空间数据流机器(例如脉动阵列)是另一种替代方法,其中处理元素被排列为网格拓扑,并且可以仅与其所相邻的处理元素通信。然而,这导致了延迟并且处理元素的数目难以成规模。
[0008] 定制的集成电路可以被设计成对于其预期应用是有效的。然而,建立定制的集成电路是昂贵的,并且一旦建立了,如果应用的需求发生变化,那么建立更新的版本也是昂贵的。随着技术的进步,定制的硬件也可能很快变得过时。
[0009] 因此,需要更好的张量处理方法。

发明内容

[0010] 通过提供使用外积之和来计算张量缩并的原生张量处理器,本发明克服了现有技术的限制。
[0011] 在一个实现中,原生张量处理器优选地被实现为单一集成电路,并且包括输入缓冲器和缩并引擎。输入缓冲器对从片外检索的张量元素进行缓冲,并根据需要将元素传输到缩并引擎。输入缓冲器可以是双缓冲器,使得除了将元素馈送到缩并引擎之外,还可以对从片外检索张量元素进行优化。缩并引擎通过执行来自等价矩阵相乘的计算来计算张量缩并,就好像张量被展开成矩阵一样,但避免了明确展开张量的开销。缩并引擎包括计算外积的多个外积单元。缩并引擎将外积求和以形成矩阵相乘的最终积。
[0012] 通过使用外积,等价的矩阵相乘可以被分割成更小的矩阵乘法,每个更小的矩阵相乘在所需的局部张量元素之间进行。
[0013] 由于外积的结构,分割是可扩展的。缩并引擎通常具有层级结构,该层级结构通过一系列分配层将整个矩阵向下分割成多个原子外积(分散和/或广播),然后在计算后通过相应的收集层(聚集和/或减少)反转该过程。缩并引擎的硬件容量可以通过向上扩展层级(包括更高级别的分配层)来扩展,以建立越来越大的缩并引擎。缩并引擎优选地是可重新配置的,使得这些层可被改变,以实现针对不同大小的张量的处理。
[0014] 原子外积优选地是外积α×β,其中α是ι×1列向量,β是 行向量,并且计算这些原子外积的处理元素优选地也沿着缩并指数对外积α×β进行累加。
[0015] 该外积架构也减少了数据传输时间,因为数据使用针对每个外积而局部化了。通常,一个外积的计算所需要的数据不依赖于另一个外积计算的结果。因此,计算可以并行地执行,而没有数据依赖性,并且,缩并引擎内的数据传输优选地可以在异步基础上完成(即,以减少的时钟寄存器数量流过缩并引擎),或在使用钟控寄存器时至少在流水线基础上完成。
[0016] 原生张量处理器也可以包括元素级处理引擎、激活引擎和/或预变换和后变换引擎,所述元素级处理引擎执行相同大小的张量之间的逐元素操作,所述激活引擎将非线性函数应用到张量处理器,所述预变换和后变换引擎将其他类型的运算转换为等价的矩阵乘法。
[0017] 其他方面包括与上述任何相关的组件、装置、系统、改进、方法、处理、应用、计算机可读介质以及其他技术。

附图说明

[0018] 本公开的实施例具有其他优点和特征,当结合附图时,从以下详细描述和所附权利要求中将更容易明白这些优点和特征,其中:
[0019] 图1是深度卷积神经网络层的图;
[0020] 图2是原生张量处理器的一个实施例的框图;
[0021] 图3阐释了张量缩并到矩阵叉积(矩阵相乘)的转换;
[0022] 图4A阐释了作为行和列的外积之和的矩阵相乘;
[0023] 图4B阐释了其中行和列被细分的外积之和;
[0024] 图5A阐释了通过沿缩并指数k的分散减少来对矩阵相乘进行分割;
[0025] 图5B阐释了通过沿自由指数i的分散聚集来对外积进行分割;
[0026] 图5C阐释了通过沿自由指数j的分散聚集来对外积进行分割;
[0027] 图6阐释了缩并引擎的示例实现;
[0028] 图7A是展示了在沿缩并指数k分散的节点中使用二叉树的框图;
[0029] 图7B是展示了在沿自由指数i、j分散的节点中使用二叉树的框图;
[0030] 图8A阐释了使用图6的缩并引擎的矩阵相乘的分割;
[0031] 图8B-C阐释了图8A的矩阵相乘的调度方面;
[0032] 图9阐释了扩展缩并引擎的硬件容量;
[0033] 图10是元素处理引擎的框图;
[0034] 图11是激活引擎的框图;
[0035] 图12是用作加速器的原生张量处理器的框图;
[0036] 图13是阐释原生张量处理器集群的框图。
[0037] 附图仅用于说明的目的描绘了各种实施例。本领域技术人员根据以下讨论将容易认识到,在不脱离本文所描述的原理的情况下,可以采用在此说明的结构和方法的替代实施例。

具体实施方式

[0038] 附图和以下描述仅以举例说明的方式涉及优选的实施例。应当理解,从下面的讨论中,这里公开的结构和方法的替代实施例将容易地被认为是可以采用的可行替代方案,而不偏离所要求保护的原理。
[0039] 许多深度学习、神经网络、卷积神经网络、监督机器学习和其他机器学习模型使用在层之间具有张量处理的多层架构。图1是深度卷积神经网络的一层的图。在该示例中,前一层提供p个输入特征映射(输入平面),每个输入特征映射在每个平面具有m个输入块(input tile)。p个输入平面由p×n的滤波器组滤波,产生具有n个输出特征映射(输出平面)的下一层,每个输出特征映射在每个平面具有m个输出块(output tile)。
[0040] 层之间的处理通常包括张量缩并(tensor contraction),或可以表达为张量缩并的处理。张量缩并是矩阵叉积向更高维度张量的延伸。在张量缩并TX×TY=TZ中,两个输入张量TX和TY各自具有多个维度,其中一些维度是常见的,并且在缩并中被消除。消除的维度被称为缩并指数(contraction indice),非消除的维度被称为自由指数(free indice)。乘积张量TZ具有由自由指数确定的维度。
[0041] 除了张量缩并之外,所述处理通常还包括相同大小的张量之间的逐元素运算,以及应用于张量的“激活”函数。常见的逐元素运算是两个张量的线性组合,表达为aTX+bTY=TZ,其中输入张量TX和TY以及输出张量TZ都是相同大小的,a和b是标量。常见的激活函数是σ(TX)=TZ,其中σ()是非线性函数,其应用于输入张量TX的每个元素,以产生输出张量TZ。
[0042] 在张量缩并、元素级运算和激活函数之间,计算和通信负荷通常由张量缩并所支配。张量缩并通常需要比其他两个运算显著更多的计算,并且通常也需要显著更多地围绕张量元素移动,以便完成那些计算。所有的这些运算可以在软件中实现,但是,考虑到机器学习模型的大小,优选地通过在硬件中(例如在集成电路中)实现函数,来加速这些计算。然而,该硬件优选地使用具有灵活性和可扩展性的架构来扩展其容量,以适应不同大小的张量。
[0043] 图2是原生张量处理器的一个实施例的框图,其优选地实现为单集成电路。原生张量处理器200包括缩并引擎210,并且可选地也包括元素级处理引擎260以及激活引擎270。原生张量处理器200还包括控制器280、输入和输出缓冲器290、以及连接到计算机系统其他部分的接口295。在该实施例中,接口295被用于与张量传感器存储所在的设备存储器进行通信,并且也被用于与使用PCIExpress的主处理器进行通信。
[0044] 设备存储器存储用于张量TX、TY和TW的张量元素。原生张量处理器200从设备存储器中检索这些元素,并计算输出张量TV=σ(a(TX×TY)+b(TW))。缩并引擎210计算缩并TX×TY=TZ,并将其输出到元素级处理引擎260。元素级处理引擎260(使用加速器262)计算线性组合a(TZ)+b(TW),并将其输出到应用非线性函数σ()的激活引擎270。结果张量TV经由接口295输出回到设备存储器。
[0045] 张量运算可以被描述为等价矩阵运算。图3阐释了张量缩并TX×TY=TZ到等价矩阵叉积(矩阵相乘)X×Y=Z的转换。在张量版本中,张量TX具有维度(l1、l2…lmax、n1、n2…nmax),张量TY具有维度(m1、m2…mmax、n1、n2…nmax)。指数{l1,l2,…,lmax}和{m1,m2,…,mmax}是自由指数,指数{n1,n2,…,nmax}是缩并指数。为将张量转换为等价矩阵,将每组指数重新排序为单维度。令l={l1,l2,…,lmax}、m={m1,m2,…,mmax}并且n={n1,n2,…,nmax},其中l=1…L,m=1…M并且n=1…N。等价矩阵X(l,n)、Y(n,m)、Z(l,m)于是相应地具有维度L×N、N×M和L×M。对于在图3中展示的矩阵相乘,自由指数是l、m,缩并指数是n。
[0046] 从张量转换为等价矩阵的过程被称为展开,反过程被称为折叠。在传统方法中,张量明确地展开成其矩阵等价物,例如,张量元素可以从存储器中读取,然后按照有利于矩阵运算的顺序重新存储。然后对以矩阵顺序存储的元素执行矩阵运算。矩阵结果随后明确地被折叠回到张量形式。然而,这种折叠和展开可能不便的,并且随着张量变大,需要大量低效且重复的数据传输。
[0047] 原生张量处理器200的许多功能是使用基于该张量矩阵等价性的矩阵来描述的。然而,原生张量处理器200没有在张量形式与矩阵形式之间明确地展开和折叠。这是因为缩并引擎210的架构不需要从矩阵存储顺序中读取大量元素。相反,缩并引擎210以相对较小的块消耗元素,因此可以直接从块的张量存储格式中检索块,而无需首先将它们明确地展开为矩阵顺序。这由控制器280实现:该控制器280控制到输入缓冲器290中的张量元素的检索顺序。出于这个原因,输入缓冲器290有时将被称为展开缓冲器,尽管它实际上是控制器
280(或主处理器),其通过以缩并引擎消耗的顺序检索张量元素,从而有效地实现展开。类似地,输出缓冲器290有时将被称为折叠缓冲器。在图2中,方框290包括输入和输出缓冲器。
来自于对张量元素进出缓冲区290的控制的这种隐含的顺列式硬件展开和折叠是有利的,因为其从张量元素是如何在原生张量处理器中被消耗的,解耦了张量元素是如何在内存中布置的。与实现快速折叠/展开的方法相比,这转而避免了不必要的数据复制和传输。
[0048] 在一种设计中,输入和输出缓冲器290是双缓冲器。输入缓冲器290包括第一缓冲器,其对来自设备存储器的张量元素检索进行缓冲。输入缓冲器290还包括第二缓冲器,该第二缓冲器对检索到的张量元素到缩并引擎的传输进行缓冲。缩并引擎210可以以与从设备存储器中检索张量元素的顺序不同的顺序来消耗元素,或者,可以以与那些被用来将张量元素传输到缩并引擎的数据块不同(通常更大)的数据块,来从设备存储器中检索张量元素。双缓冲可以用于有效地弥补这些差异。出于类似的原因,但在相反的方向上,输出缓冲器290也可以是双缓冲器。
[0049] 再次参见图2,缩并引擎210通过执行实现等价矩阵X×Y=Z的矩阵相乘的计算,来计算张量的缩并TX×TY=TZ。其使用外积之和来执行矩阵相乘。缩并引擎210包括分配部段212、处理部段和收集部段216,其中处理部段包括多个外积单元(outer product unit,OPU)220。OPU 220计算外积。分配部段212将全矩阵相乘X×Y分割成由OPU 220执行的分量外积计算。收集部段216将分量外积求和为矩阵相乘X×Y的全积Z。
[0050] 分配部段212和收集部段216包括多个集流元素(collective streaming element,CE),这将在下面更详细地描述。分配部段中的CE通常执行分散和/或广播。收集部段中的CE通常执行聚集和/或减少。图2的分配部段212中的CE主要是分散,图2的收集部段
216中的CE主要是减少。
[0051] 图4A和图4B阐释了分割矩阵相乘X×Y的不同方式。在图4A中,矩阵X被展示为列X1…XN,矩阵Y被展示为行Y1…YN。矩阵乘积X×Y=X1×Y1+X2×Y2+…+XN×YN。为了方便,定义Zn=Xn×Yn。注意的是,列Xn和行Yn可以是块列和块行。也就是说,Xn可以包含多列,而Yn包含相同数量的相应的行。注意的是,仅使用相应的列Xn和行Yn来计算每个外积Zn。相反地,对于特定的值n=no,列Xno和行Yno中的元素仅用于计算外积Zno,但不用于计算对于任何其他n值的外积Zn。
[0052] 在图4B中,列X1被分成A1(1)和A1(2),并且对应的行Y1被分成B1(1)、B1(2)和B1(3)。外积X1×Y1=Z1然后具有有六个分量,分别对应于A1(1)×B1(1)、A1(1)×B1(2),以此类推。为了方便,定义Cn(l,m)=An(l)×Bn(m)。也就是说,乘积A1(1)×B1(1)=C1(1,1)、A1(1)×B1(2)=C1(1,2),以此类推。外积Z2...Zn也可以以类似的方式再分。Z1的左上部段是C1(1,1)=A1(1)×B1(1),Z2的左上部段是C2(1,1)=A2(1)×B2(1),以此类推,ZN的左上部段是CN(1,1)=AN(1)×BN(1)。全积Z的左上部段(应表示为C(1,1))是由C(1,1)=C1(1,1)+C2(1,1)+…+CN(1,1)给定的。也就是说,不必一次全部计算全外积X1×Y1。它可以作为每个部段C(l,m)的外积总和而分别计算。此外,如利用图4A中所示的分割,元素的使用被相当地局部化了。A1(l)仅用于计算C1(1,m)=A1(1)xB1(m)。更具体地,对于特定的值l=lo和n=no,Ano(lo)仅用于计算Cno(lo,m),但不用于计算对于其他l和n值的Cn(l,m)。类似的情况对于分量Bn(m)也是如此。
[0053] 图4A和图4B展示了分割矩阵相乘X×Y的不同的方式。在图4A中,矩阵相乘相对于缩并指数n被分割。分量计算然后被求和在一起以产生全积。在图4B中,矩阵相乘相对于自由指数l,m被分割。分量计算代表全积的不同部段,并被合并在一起以产生全积。
[0054] 在原生张量处理器中,可以通过硬件并行或通过时分复用来执行这些类型的分割。当使用硬件并行时,实现分割的硬件将被称为分配部段。反转分割的硬件将被称为收集部段。单个元素将被称为集流元素,其中包括分配侧和收集侧。通常,位于分配侧上、沿着缩并指数进行的分散将导致在收集侧上相应的减少(即求和),并且位于分配侧上、沿着自由指数的分散将导致在收集侧上相应的聚集(即合并)。
[0055] 还应注意,图4A和图4B中的分割可被重复地或递归地应用。全矩阵相乘可以使用所示的任何技术被分割成分量计算,其可以被进一步分割成子分量计算,该子分量计算可以被进一步分割成子子分量计算,以此类推。由原生张量处理器200执行的最细粒度计算将被称为原子外积,执行该计算的硬件将被称为原子处理元素(atomic processing element,APE)。原子外积可以是标量乘法(scalar multiplication),该标量乘法是1×1乘1×1矩阵相乘的外积,或者其可以更大。在下面给出的具体的示例中,原子外积是6×1乘1×6矩阵相乘。如下面将进一步详细描述的,原生张量处理器通过硬件并行和时分复用的组合将全矩阵相乘分解为原子外积。
[0056] 图5A-C阐释了图4A-4B中所示的不同类型的分割的硬件实现。在这些附图中,处理节点负责计算外积A×B。这里,使用了矩阵A和B,而不是X和Y,因为该节点可能发生在缩并引擎的层级架构中的任何地方。因此,A和B可以是全X和Y,或者它们可以是X和Y的分量、子分量、子子分量,以此类推。X和Y使用指数l、m、n。因为A和B可以是或可以不是相同的大小,用于A和B的指数被改变为i、j、k,其中i、j是自由指数,k是缩并指数。A是I×K矩阵,B是K×J矩阵。
[0057] 图5A展示了相对于缩并指数k的分割,其对应于图4A。图5A展示了相对于自由指数i的分割,其对应于图4B中A1的分割。图5C展示了相对于自由指数j的分割,其对应于图4B中B1的分割。
[0058] 在图5A中,矩阵A沿缩并指数k被分成列A1、A2,矩阵B沿k被分成相应的行B1、B2。节点计算A×B包括由具有水平线的两个菱形表示的分配部段、具有子节点1和2的处理部段、以及由带加号的圆圈表示的收集部段。分配部段相对于缩并指数k来说,分散A和B中的每一个。因此,A1、B1被引导到计算A1×B1的子节点1,A2、B2被引导到计算A2×B2的子节点2。收集部段是减少部分,其将两个外积求和以产生A×B。
[0059] 在图5B中,矩阵A沿着自由指数i被划分成子列A(1)、A(2),矩阵B没有被划分。在该节点中,分配部段分散A并广播B。因此,A(1)被引导到子节点1,并且A(2)被引导到子节点2,而B被广播至这两个子节点。子节点1计算A(1)×B,子节点2计算A(2)×B。由具有垂直线的菱形表示的收集部段是聚集部分,并相对于指数i将两个外积合并以产生A×B。
[0060] 图5C类似于图5B,但是矩阵B沿着自由指数j被划分为子行B(1)和B(2)。在这个节点上,A是广播的,B是分散的。子节点1计算A×B(1),子节点2计算A×B(2)。收集部段相对于指数j将两个外积合并。
[0061] 上述示例将一个计算分割为两个子计算。这可以有利地为分配和收集部段构建二叉树。然而,计算也可以被分割为两个以上的子计算,并且可以使用除了二叉树以外的树结构。
[0062] 此外,注意的是,在图5A-5C中的每一个图中,两个子节点可以并行执行它们的计算。这两个子节点都不依赖于另一个子节点的计算。如前所述,展示在图5A-5C中的技术可以被递归地应用,使得每个子节点被进一步分割成子子节点等。子节点之间的数据独立性优选地一直保持到最低级别的子节点,使得每个最低级别子节点可以执行其计算而没有数据依赖于其他最低级别的子节点,从而消除了(至少减少了)子节点之间的数据传输。
[0063] 图5A-5C中的不同部段也可以以不同的方式实施。硬件并行(例如并行硬件数据路径)、时分复用和分组交换是可能的示例。使用图5B作为示例,在硬件并行中,到节点的输入可能是完全并行的,节点在并行数据路径上同时接收A1和A2。A1数据路径导向子节点1,A2数据路径导向子节点2,因此实现分散。在时分复用中(技术上地说,是去复用,但“复用”将用于同时指代复用和去复用方向),A1元素可能在第一时隙期间被接收并被引导到子节点1。A2元素在第二时隙期间被接收并被引导到子节点2。在分组交换中,A1分组包含将A1分组引导到子节点1的头部,而A2分组头部将A2分组引导到子节点2。
[0064] 再次参见图2,原生张量处理器200可选地也包括预变换引擎(未示出在图2中)和后变换引擎255。在图2中,预变换引擎在矩阵相乘电路之前的OPU中,后变换引擎255在收集部段216后。预变换引擎在执行矩阵相乘之前应用变换,而后变换引擎255然后对其结果应用反变换。以这种方式,不是矩阵相乘的运算可以由缩并引擎210执行。以下在图6的讨论中给出了一些示例。
[0065] 图6阐释了使用分层架构的缩并引擎610的示例实现。缩并引擎610包括外积单元(OPU)620的并行阵列。每个OPU 620包括中间处理元素(IPE)630的并行阵列。每个IPE 630包括多个原子处理元素(APE)640。每个APE 640使用乘累加电路(MAC)。因此,缩并引擎610向APE 640提供特定级别的硬件并行性。APE的数据彼此独立,因为每个APE用于其计算所需的数据不取决于任何其他APE的计算结果。如果单独的硬件并行性不足,则可以使用时分多路复用来适应大小更大的张量。
[0066] 在高级别时,缩并引擎610将全矩阵相乘X×Y分割成可由OPU 620处理的外积。分配部段612和收集部段616实现分割及其反转,其相对于缩并指数k分散612和减少616。在OPU内,原子外积计算最终由APE 640执行。因为APE包括MAC,所以它们可以执行乘法以计算原子外积,但它们也可以跨缩并指数k而累加元素级的总和。IPE 630是实现从OPU级别到APE级别的分割的中间层。在这个例子中,存在一个中间层,其仅相对于自由指数i、j来分散/广播622、632,并聚集626、636,但其他OPU设计可以使用不同数量的中间层,并且也可以相对于缩并指数k进行分割。
[0067] 在图6中展示的缩并引擎中,通过缩并引擎——OPU硬件分割,并且也通过时分复用和APE中的累加函数,来实现沿缩并指数k的分散。沿自由指数i、j的分散是通过OPU-IPE和IPE-APE硬件分割来实现的,并且在需要时也通过额外的时分复用来实现。
[0068] 图7A是展示在沿缩并指数k分散的节点中使用二叉树的框图。该方法可以用于在图6中的缩并引擎中分散/减少612/616。在那种情况下,图7A中的节点将是缩并引擎610,并且图7A中的子节点将是OPU。在图7A中,分配部段712中的每个实心黑盒是集流元素(CE),该集流元素(CE)使输入矩阵A和B沿着缩并指数k分散。图7A展示了4级分配部段712,其将输入矩阵分割成16个子节点720A-N。来自矩阵A和B的列A1和行B1被引导到子节点720A,列A2和行B2被引导到子节点720B,以此类推。在顶层CE712.1,列A1-A8和行B1-B8被引导到左分支,列A9-A16和行B9-B16被引导到右分支。在第二层CE712.1.1,列A1-A4和行B1-B4被引导到左分支,列A5-A8和行B5-B8被引导到右分支。以此类推到子节点720。如前所述,每次划分可以在硬件中实现,或使用时分复用来实现。不同的技术可以用于不同的级别。
[0069] 收集部段716通过对分量矩阵相乘进行求和来反转分配部段712。令Cn=An×Bn,这是由子节点720n产生的结果。CE 716.1.1.1.1是求和器,其相加来自子节点720A和720B的C1+C2,CE 716.1.1.1.2相加来自求和器716.1.1.1.1和716.1.1.1.2的(C1+C2)和(C3+C4),并以此类推到顶层CE716.1。如图所示,CE可以被实现为二叉树。在那种情况下,总共存在8+4+2+1=15个求和器。替代性地,这些总和可以累加在寄存器或存储器位置中,在这种情况下,可以使用8个累加器。例如,求和器716.1.1.1、716.1.1.1、716.1.1和716.1可以全部在相同的累加器中实现。
[0070] 图7B是在沿自由指数i、j的分散的节点中使用二叉树的框图。该方法可以用于在图6中的外积单元中分散/聚集622/626。在那种情况下,图7B中的节点将是OPU,并且子节点将是IPE。在图7B中,在分配部段722中的每个实心黑盒是沿着自由指数i分散输入矩阵A和B的CE(即分散A并广播B),每个白盒是沿自由指数j分散矩阵的CE(即广播A并分散B)。在收集部段726中的黑盒和白盒是执行反向合并函数的CE。图7B展示4级分配部段722,其将输入矩阵分割成16个子节点730A-N。A被分割成A(1)-(4),B被分割成B(1)-(4)。A(1)和B(1)被引导到子节点730A,A(1)和B(2)到子节点730B,A(2)和B(1)到730C,A(2)和B(2)到730A,以此类推到A(4)和B(4)被引导到子节点730N。在顶级划分722.1,A(1)-(2)被引导到左分支,A(3)-(4)被引导到右分支,B(1)-(4)被引导到两边分支。在第二级划分722.1.1,A(1)-(2)被广播到两边分支,B(1)-(2)被引导到左分支,B(3)-(4)被引导到右分支。以此类推到子节点730。每次划分可以在硬件中实现或使用时分复用来实现,并且不同的技术可以用于不同的划分级别。
[0071] 收集部段726通过对分量矩阵相乘进行合并来反转分配部段722。这些可以通过硬件并行或通过时分复用来实现。也可以通过控制器和将每个分量存储在对于输出张量的正确位置的输出缓冲器(或本地存储器)来实现。在那种情况下,可能没有直接对应于收集部段726中的黑盒和白盒的物理电路。
[0072] 图8A-8C阐释了使用图6的缩并引擎的矩阵相乘的多个示例。输入张量TX和TY具有600×240矩阵X和240×768矩阵Y的等价值。因此,缩并引擎执行600×240乘240×768矩阵相乘。在该示例中,缩并引擎610具有24个OPU,每个OPU具有32个IPE,每个IPE具有16个APE。
每个APE可以在单时钟周期中计算外积α×β,其中α是ι×1列向量,β是 行向量(ι和 分别是小写的希腊字母i和j),并且沿多个时钟周期对这些外积进行累加。在这个示例中,每个APE在一个时钟周期中计算6×1乘1×6外积。在接下来的描述中,时钟周期是
被APE使用、以计算外积的时钟周期数。为了简化,忽略用于检索或传输数据的时钟周期。
[0073] 全部的计算需要600×240×768=110,592,000个标量乘法。利用硬件并行,缩并引擎包含24×32×16=12,288个APE,每个APE可以每周期计算36个标量乘法,每周期总共442368个标量乘法。因此,全部的计算需要110,592,000/442,368=250个周期。
[0074] 在图8A中,左边的树展示了将600×240乘240×768矩阵相乘分割为6×1乘1×6的原子外积。树中的每层展示了由该层的处理节点执行的计算。层之间的分散符号展示了硬件和时分复用(TDM)分割的量以及沿着哪种指数。图8A的右侧图形化地展示了矩阵相乘的分割。在那些附图中,透明盒展示了矩阵在分散之前的大小,阴影盒展示矩阵在在分散之后的大小。透明盒左侧和顶部的数字展示了分散前的大小,阴影盒右侧或底部的数字展示了分散后的大小。
[0075] 从顶部开始,缩并引擎(或缩并单元CU)在250个周期中计算600×240乘240×768矩阵相乘。在右侧,标记了“CU 250个周期”的矩阵相乘展示了作为透明盒的600×240X矩阵和240×768Y矩阵。缩并引擎包括240个OPU。因此,该问题被沿缩并指数n通过因子24分割,如最顶部分散符号的“×24(n)”标签所表示的。在该分割后,每个OPU在每250个周期中处理600×10乘10×768的矩阵相乘。这通过在标记了“CU 250个周期”的矩阵相乘中下方标有“10”的阴影盒表示。
[0076] 从OPU到IPE,出于以下将描述的原因,每个IPE可以在10个周期中处理6×10乘10×96的矩阵相乘。这需要从OPU由大小为800的因子进行的分割。×800的分割在硬件并行中被实现为×32(每个OPU32个IPE),并在TDM中被实现为×25。硬件和TDM分割都是相对于自由指数l、m的。在图8A的右侧,标记为“OPU 250个周期”的矩阵相乘展示了TDM分割。OPU在250个周期内执行600×10乘10×768的矩阵相乘,该矩阵相乘被分割为OPU每10个周期执行一个24×10乘10×768的矩阵相乘。“OPU 10个周期”展示了硬件并行。OPU每10个周期执行
24×10乘10×768的矩阵相乘,该矩阵相乘分布在32个IPE中,每个IPE每10个周期执行6×
10乘10×96的矩阵相乘。
[0077] 从IPE到APE,存在相对于自由指数l、m的、由×16的因子进行的硬件分割。这将每10个周期6×10乘10×96的矩阵相乘减少到每10个周期6×10乘10×6的矩阵相乘,如由标记了“IPE 10个周期”的矩阵相乘所展示的那样。还存在相对于缩并指数n的、由×10的因子进行的TDM分割,这将每10个周期6×10乘10×6的矩阵相乘减少到每1个周期6×1乘1×6的矩阵相乘,如标记了“APE 10个周期”的矩阵相乘所展示的那样。这个最后的划分利用了APE沿着缩并指数n对和进行累加的能力的优势。
[0078] 原始的矩阵相乘可以以其他方式被分割,但以上展示的分割具有一些优势。首先,参见图6,注意到,相对于缩并指数n的分散或发生在CU-OPU级别,或发生在APE内。任何不能由CU级别的硬件并行处理的沿着n的分散,均是由在APE级别的TDM实现的,因为APE能够沿着n进行累加。在这个示例中,600×240乘240×768的矩阵相乘需要在n中的×240分割。CU-OPU在硬件并行中可以实现×24。这留下了完全在APE中实现的×10TDM。因此APE在10个周期中执行6×10乘10×6的矩阵相乘。如果×10的一部分在其他地方实现,则将会使用额外的求和器或累加器。
[0079] 在每个IPE中存在16个APE。那个×16可以以不同的方式分配,但这里是完全分配给自由指数m的。每个IPE在10个周期中执行6×10乘10×96的矩阵相乘。由于以下原因,这是有利的。令A(1:6,1:10)为6×10矩阵,B(1:10,1:96)为10×96矩阵。利用这种分割,A(1:6,1:10)被广播到IPE内的16个APE中的每一个,这减少了数据的移动。B(1:10,1:96)在16个APE中被划分,其中B(1:10,1:6)到第一APE,B(1:10,7:12)到第二APE......B(1:10,91:96)到第十六APE。
[0080] 最后,如果每个IPE处理6×10乘10×96,每个OPU处理600×10乘10×768,那么从OPU到IPE就有一个×800分割。硬件并行提供了×32,为TDM留下了×25。×25的TDM将计算时间从10个周期增加到10个周期×25=250个周期。
[0081] 图8B和图8C阐释了以上示例,但是是从时间的角度来说明。图8B展示了600×240乘240×768的矩阵相乘X×Y,这在250个周期内完成。该矩阵被划分成列块X1…X24和行块Y1…Y24,并且每个OPU将在250个周期中计算Xn×Yn的一个外积。图8B展示了外积X1×Y1的进一步的细节。列块X1被细分成25个子列X1(1)…X1(25)。在周期1-10中,OPU#1计算X1(1)×Y1,展示在图8C中。在周期11-21中,OPU#1计算X1(2)×Y1。以此类推。类似地,在周期1-10中,OPU#2计算X2(1)×Y2......并且OPU#24计算X24(1)×Y24。在周期1-10后,这些外积可以被求和为X1(1)×Y1+X2(1)×Y2+…+X24(1)×Y24,以产生积X×Y的顶24行。接下来的24行在周期11-20期间产生,以此类推。
[0082] 图8C展示了24×10乘10×768的矩阵相乘X1(1)×Y1,这在10个周期内完成。X1(1)包含10列,Y1包含10行。在每个周期上,一列和一行的外积由OPU来计算。列和行被划分为用于APE的6×1和1×6块。每个OPU包括32×16=512个APE。每列被分成4个6×1的子列,并且每行被分成128个1×6的子行,产生总共512个子列和子行的组合。这些组合中的每一个被分配到APE中的一个。在周期1上,每个APE基于其分配的第一列和第一行的子部段,计算6×1乘以1×6外积。在周期2上,每个APE基于第二列和行的相同的子部段,计算外积,并将外积加到前一结果(即,在缩并指数上减少),以此类推直到周期10和第10列和行。在10个周期后,512个APE中的每一个将已累加了外积X1(1)×Y的6×6的部分。
[0083] 注意的是,在图8B中,列块X1被画成包含矩阵X的列1-10。这是为了方便起见。在周期1期间,OPU#1在列块X1(1)的列1上运算,但OPU#2同时在列块X2(1)的列1(这是矩阵X的列11)上运算,以此类推。如图8B所画的那样,这将需要为周期1的矩阵X的列1,11,21...231进行检索。为周期1检索列1,2,3...24可能更有效。其可以通过如下来实现:定义列块X1为包含列1,25,49…217;列块X2为包含列2,26,…218;以此类推。
[0084] 在以上示例中,周期是基于用于在APE中计算的时钟周期的。用于数据传输的周期没有被包括在内。这样做,部分是为了解释的清楚,部分是因为所描述的架构非常适合减少由于数据传输而造成的延迟。例如,参见图6,注意到,在APE中的MAC是唯一的计算电路。其余的缩并引擎主要用于在正确的时间将张量元素从输入缓冲器引导到正确的APE,并且在计算后通过APE反转这一操作。也就是说,“中间处理元素”主要是APE和数据传输的集合,并且可以在没有除那些本身位于APE中的“处理元素”以外的任何“处理元素”的情况下实施。
[0085] 结果,数据传输可以与通过各种分配和收集部段而简单地流入/流出APE的数据异步,从而减少时钟寄存器的数量。在以上的数值示例中,缩并引擎610包括12288个APE。在异步方法中,缩并引擎610的输入是12288行宽的,其中一行通向每个APE。数据传输使用并行硬件数据路径完成,无需在引擎输入和APE之间进行时钟同步。如果数据路径太长以至于其引入了大于一个时钟周期的延迟,那么可以沿着数据路径插入寄存器,以维持多个时钟周期上的数据对齐。
[0086] 数据路径的宽度可以通过使用时分复用来减少。即使在那种情况下,在数据被记录进寄存器中时,通过缩并引擎的数据流可以是流水线的,以减少数据在计算之前到达的等待时间。优选地,所有数据传输是异步的或流水线的。例如,计算6×1乘1×6外积的APE使用12个元素以产生外积。数据可以使用12元素数据包的TDM流水线从输入缓冲器传输到APE。在APE内,这些12个元素可以并行地而不是按顺序被分配到MAC阵列。因此,列向量和行向量在一个周期内被加载到MAC阵列中,并且MAC计算在下一个周期中执行。同时,接下来的12元素数据包以流水线的方式被接收。
[0087] 在另一示例中,考虑图6所示的IPE 630。对于该示例,假设IPE 630包含8个APE 640,每个APE 640可以在一个时钟周期内完成其计算。然后,因为输出是TDM,每个时钟周期输出来自仅一个APE的结果,因此需要8个时钟周期以从所有的8个APE中读出结果。对于8个周期中的7个周期,APE是空闲的,等待着输出多路复用器以进行计算。替代性地,APE可以沿着缩并指数k进行8个周期的累加。在那种情况下,将需要8个周期来完成乘法累加。通过错开执行顺序,每个APE每8个周期就能被读出一次,从而增加了APE的利用率。
[0088] 以上示例针对的是L=600、M=768和N=240的具体大小的矩阵相乘。给定L、M、N的这些值,矩阵相乘是使用硬件并行和TDM的组合,以特定方式进行分割的。控制器280(在图2中)控制实际的执行。例如,它控制从输入缓冲器290到缩并引擎210的元素传输的定时。它控制TDM计时。APE沿10个周期的序列来累加外积。控制器识别何时重置累加器,何时累加以及何时停止累加。为了方便起见,控制器280在图2中被画为分离的方框,但其不一定要这样实现。控制器280可以是分布式的,其一些控制功能是在原生张量处理器的其他部件内实现的。而一些控制功能也可以在控制器280外部实现,或甚至在原生张量处理器的外部来实现。例如,检索张量数据块可以由原生张量处理器外部的固件来控制,而确定分割策略可以通过运行在主处理器上的软件来执行。
[0089] 另一方面,原生张量处理器可以适应不同大小L、M和N的张量TX和TY。分割将基于L、M、N的值而不同,并且,原生张量处理器内的组件的配置也将基于L、M、N的值而不同。其中的大部分是由控制器处理的。
[0090] 例如,缩并指数n的分散被分配在OPU中的减少部分(即收集部段)和APE中的累加函数之间。对于不同的N的值,APE中的累加周期数可能不同。此外,在OPU中的硬件并行可以改变,和/或除了在APE级别,外积还可以在OPU级别累加(未在上述示例中展示)。缩并指数n的减少可以发生在任何级别。
[0091] 自由指数l、m的分散主要通过TDM、以及通过OPU和IPE中的硬件并行实现。TDM的改变可以通过控制从输入缓冲区到缩并引擎的元素的释放来实现。在缩并引擎内,物理复用器和去复用器也可以配置为提供不同级别的复用。硬件并行也可以改变,例如通过使用开关来改变。
[0092] 在以上示例中,IPE包括16个APE。假定IPE计算A×B。在以上示例中,A被广播至所有的16个APE。B被分成16个部分B(1)-(16),每个部分被发送到APE中的一个。把这称为对于IPE的1×16配置。对于L、M、N的其他值,IPE可以使用不同的配置。基于二进制的配置是1×16、2×8、4×4、8×2和16×1。优选地,IPE是硬件可配置的,并且控制器通常将设置IPE的配置。对于频繁改变的配置(例如,每次矩阵相乘的持续期间进行的设定),该配置可以通过由控制器编程的控制寄存器来确定。在该示例中,硬件并行的“形状”是可配置的,但硬件并行量被固定在×16。
[0093] 通过添加更多具有相应的分配和收集部段的硬件,可以增加硬件并行量。利用递归组织的附加计算资源,以上架构是可扩展的,以处理不同形状的工作负载。例如,上述的数值例子包括沿l、m的、需要250个周期的×25TDM,以用于全矩阵相乘。如图9所示,这可以通过并行地添加更多的缩并引擎来减少。在该示例中,新的缩并引擎910包括来自图6的5个旧缩并引擎/单元610。分配部段912沿着i指数分散,并且收集部段916反转该分散。每个旧的缩并引擎610现在在50个周期中完成120×240乘240×768的矩阵相乘。这些被合并在一起以产生在50个周期中的600×240乘240×768的矩阵相乘的全结果。作为采取基于外积的方法而可得的分割的结果,可以通过在更多分配和收集部段上分层来并行地添加更多的处理节点。
[0094] 在图2中,原生张量处理器也包括元素引擎260和激活引擎270。图10是元素处理引擎1060的框图。在该示例中,引擎1060包括多个36宽度的阵列1062,这些阵列执行元素级运算,例如加、减、乘和除。在该示例中,每个阵列1062是6×6的阵列,以匹配APE的大小和形状,该阵列产生6×6的外积。图11是激活引擎1170的框图。在该示例中,引擎1170包括多个36宽度的阵列1172,这些阵列在每个元素的基础上应用非线性函数。
[0095] 通过选择各种硬件元素的实现,可以增加额外的灵活性。例如,在该示例中的APE计算了列向量α和行向量β的6×1乘1×6外积。在一个实现中,APE包含MAC的6×6阵列。列向量α的元素被广播到阵列的6列,并且行向量β的元素被广播到阵列的6行。
[0096] 在替代性实现中,APE被构造为两个6×6阵列的逐元素相乘。在那种情况下,列向量α被复制六次以产生阵列中的一个,并且行向量β被复制六次以产生另一阵列。该方法具有更大的灵活性,因为它也可以计算两个6×6阵列的直接逐元素相乘。通过使用Winograd变换还可以计算3×3内核对4×4阵列的卷积。APE可以包括在这些选项之间选择的预变换引擎。如果选择了Winograd变换,则APE实现卷积。如果选择了复制行向量和列向量,则APE实现外积。如果没有选择预变换,则APE实现元素级的6×6乘法。预变换可以较早地在数据流中实现,通常具有带宽和面积之间的折衷。
[0097] 图12-13是包括原生张量处理器和传统处理器的计算机系统的示例。图12是计算机系统的框图,其中原生张量处理器被用作加速器。传统的处理器是主机1250,本机张量处理器1210被用于在主机的控制下加速张量计算。应用程序在主机1250上运行,该主机1250识别要执行的张量缩并(或其他张量运算),并将这些张量缩并分配给原生张量加速器1220以供执行。在图12的示例中,主机1250和加速器1220使用PCIExpress相互接口。它们具有独立的存储器,尽管它们也可以在替代性设计中访问共享的存储器。
[0098] 在图13中,原生张量子系统包括多个原生张量加速器1320。传统处理器1350和原生张量处理器1320都被组织成由PCIExpress开关1330连接的群集或节点。张量处理器可以根据要执行的张量缩并的需要而被配置和缩放。对于更大的张量运算,如上所述,可以组织更多的张量处理器1320以提供更多的硬件容量,或者提供对抗故障的冗余。原生张量处理器1320也可以由多个处理器1350共享,从而增加它们的整体利用率。原生张量处理器可被虚拟化或作为云服务提供给第三方。
[0099] 在另一应用中,多个原生张量处理器以提供原生张量超级计算机能力的方式相互连接。上述集流式架构具有高性能计算的集体通信方法的许多属性。
[0100] 包括张量处理器和其他处理器的系统可以采取各种不同的形式和物理实现。原生张量子系统可以具有一个或多个原生张量处理器,并且处理子系统也可以具有一个或多个处理器。按照尺寸的增加,传统的处理器和原生张量处理器可能被实现为同一集成电路上的不同处理器核,或者实现为多芯片模块中的不同芯片。可替代地,它们可以被实现为印刷电路板上的分离的集成电路。对于更大的系统,其实现可以是箱架系统中的叶片或机架,或实现为服务器场的一部分。
[0101] 根据物理实现,处理器之间的通信也可以采取不同的形式。示例包括专用通信信道,例如集成电路中不同内核之间的硬连线通信路径,或通过访问公共寄存器或存储位置的专用通信信道。在规模较大的一端,示例包括局域网或其他类型的网络。
[0102] 尽管详细的描述包含许多细节,但这些细节不应被理解为限制本发明的范围,而仅作为阐释本发明的不同示例和方面。应当理解,本发明的范围包括上面未详细讨论的其他实施例。在不脱离如在所附权利要求中定义的本发明的精神和范围的情况下,在本文公开的本发明的方法和设备的布置、操作和细节中,做出各种其他修改、改变和变化对本领域技术人员来说是显而易见的。因此,本发明的范围应由所附权利要求及其合法等同物来确定。