量化神经网络训练与推理的制作方法

文档序号:33319183发布日期:2023-03-03 19:06阅读:28来源:国知局
量化神经网络训练与推理的制作方法
量化神经网络训练与推理
1.相关申请的交叉引用
2.本技术要求于2021年8月27日提交的、序列号为63/238,036的美国临时专利申请的优先权,其标题为“techniques for quantized fixed-point training with fine-grained scaling and adaptive precision”。该相关申请的主题通过引用并入本文。
技术领域
3.本公开的实施例总体上涉及计算机科学和人工智能,更具体地,涉及用于量化神经网络训练和推理的技术。


背景技术:

4.深度神经网络通常包括许多计算量大的层,例如卷积层和/或全连接层。深度神经网络通常也使用全精度算法(例如,使用32位浮点数据)进行训练和部署。因此,执行深度神经网络可能涉及大量的计算复杂性、延迟和内存消耗。为了减少与深度神经网络相关的处理时间和内存占用,可以量化神经网络的权重和/或激活。例如,用于权重和/或激活的32位浮点数据值可以映射到16位浮点数据值或8位整数数据值,这减少了所述数据值的位宽。反过来,减小数据值的位宽可以降低训练和部署深度神经网络时所执行的不同计算(例如矩阵乘法运算)的复杂度,以及存储所述数据值所需的内存量。
5.通常,为了量化神经网络的权重和激活,将比例因子应用于表示权重的权重张量以及表示激活的激活张量。然而,由于相同的比例因子在给定张量的许多维度上共享,因此缩放张量中各个元素的精度降低,从而增加了量化引入的误差量,反过来降低了所述深度神经网络的整体准确度。
6.为了提高所述深度神经网络的准确性,可以将不同的比例因子应用于沿权重张量和/或激活张量的单个维度的不同向量。这样做将允许对不同的向量使用更合适的比例因子,这将减少量化引入的误差量,反过来提高深度神经网络的整体准确度。然而,与神经网络推理操作通常只涉及仅使用矩阵的计算不同,神经网络训练操作通常涉及使用矩阵以及转置矩阵两者的计算。值得注意的是,当一个矩阵被转置时,所述转置矩阵的每一列对应多个不同的比例因子。由于必须从内存中单独地读取所述多个不同比例因子中的每一个,因此涉及转置矩阵的计算会增加整体处理时间。例如,如果从内存中读取比例因子需要一个时钟周期,那么对于4x4转置矩阵,从内存中读取所述相关比例因子对于所述转置矩阵的每一列将需要四个时钟周期。因此,在训练深度神经网络时,沿权重张量和/或激活张量的单个维度应用不同的比例因子可以显著增加处理时间。
7.如前所述,本领域所需要的是用于为神经网络量化权重和激活的更有效的技术。


技术实现要素:

8.本公开的一个实施例阐述了一种用于处理神经网络的计算机实现方法。该方法包括接收对应于多维输入张量的一部分并且已经基于第一比例因子量化的第一量化矩阵。该
方法还包括使用所述第一量化矩阵和所述第一比例因子执行一个或更多个计算操作以生成与多维输出张量的第一部分相对应的一个或更多个数据值。
9.本公开的技术相对于现有技术的至少一个技术优势在于,利用所公开的技术,可以更有效地执行神经网络训练操作。在这方面,利用所公开的技术,不同的比例因子被应用于沿着张量的多个维度的不同子矩阵,而不是沿着该张量的单个维度的不同向量。因此,可以将相同的比例因子应用于矩阵内的子矩阵和所对应的转置矩阵内的所对应的子矩阵。因此,与现有技术方法相比,用转置矩阵执行计算使用更少的读取操作,从而减少训练神经网络时的处理时间。这些技术优势提供了对现有技术方法的一种或更多种技术改进。
附图说明
10.为了更详细地理解上述各种实施例的相关特征,可以通过参考各种实施例(其中一些已在附图中说明)对上述简要概括的本发明概念进行更具体的描述。但是,需要注意的是,所附的附图只说明发明概念的典型实施例,因此并不是以任何方式限制范围,还存在其他同样有效的实施例。
11.图1是示出了被配置成实施各个实施例的一个或更多个方面的计算机系统的框图;
12.图2是根据各个实施例的包括在图1的并行处理子系统中的并行处理单元的框图;
13.图3a示出了根据各种实施例的在执行一个或更多个前向传播操作时使用的示例输入和生成的输出;
14.图3b示出了根据各种实施例的在执行一个或更多个后向传播操作时使用的示例输入和生成的输出;
15.图4是根据各种实施例的用于从组缓冲器中检索数据和将数据存储到组缓冲器的方法步骤的流程图;以及
16.图5是根据各种实施例的用于使用量化数据执行一个或更多个神经网络计算操作的方法步骤的流程图。
具体实施方式
17.在以下描述中,阐述了许多具体细节以便提供对不同实施例的更彻底的理解。然而,对于本领域技术人员将显而易见的是,可以在没有这些具体细节中的一个或更多个的情况下实践本发明构思。
18.系统总览
19.图1为示出了被配置为实现各个实施例的一个或更多个方面的计算机系统100的框图。如图所示,计算机系统100包括但不限于中央处理单元(cpu)102、系统存储器104,其经由存储器桥105和通信路径113耦连至并行处理子系统112。存储器桥105进一步地经由通信路径106耦连至i/o(输入/输出)桥107,i/o桥107又耦连至交换机116。
20.在操作中,i/o桥107被配置为从输入设备108(诸如键盘或鼠标)接收用户输入信息,并经由通信路径106和存储器桥105将输入信息转发给cpu 102进行处理。交换机116被配置为在i/o桥107和计算机系统100的其他组件(如网络适配器118和各种附加卡120和121)之间提供连接。
21.还如图所示,i/o桥107耦合至系统盘114,系统盘114可以被配置为存储内容、应用程序和数据,以供cpu 102和并行处理子系统112使用。一般来说,系统盘114为应用程序和数据提供非暂时性存储器,可包括固定的或可移除的硬盘驱动器、闪存设备和cd-rom(光盘只读存储器)、dvd-rom(数字多功能盘-rom)、蓝光、hd-dvd(高清dvd)或其他磁、光或固态存储设备。最后,虽然未明确示出,其他组件(诸如通用串行总线或其他端口连接、光盘驱动器、数字多功能盘驱动器、胶片录制设备等)也可以连接到i/o桥107。
22.在各个实施例中,存储器桥105可以是北桥芯片,i/o桥107可以是南桥芯片。此外,可以用任何技术上合适的协议(包括但不限于agp(加速图形端口)、超文本传输(hypertransport)或本领域公知的任何其他总线或点对点通信协议)在计算机系统100内实现通信路径106和113以及其他通信路径。
23.在一些实施例中,并行处理子系统112包括图形子系统,该图形子系统向显示装置110输送像素,该显示装置可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。在这种实施例中,并行处理子系统112合并了针对图形和视频处理优化的电路,包括例如视频输出电路。此类电路可以跨并行处理子系统112中包括的一个或更多个并行处理单元(ppu)合并,所述并行处理子系统112被配置以执行图形和视频处理操作。在其他实施例中,并行处理子系统112包括训练神经网络模型和/或利用训练过的神经网络模型的深度学习子系统。在此类实施例中,并行处理子系统112合并有为执行神经网络训练和神经网络推理操作而优化的电路,例如,包括乘法器-累加器(mac单元)。如图2中进一步详细讨论的,这种电路可以跨并行处理子系统112中包括的一个或更多个ppu合并,一个或更多个ppu被配置成执行神经网络训练和/或推理操作。在又另外的实施例中,并行处理子系统112合并有针对通用和/或计算处理而优化的电路。同样,此类电路可以跨并行处理子系统112中包括的一个或更多个ppu合并,这些ppu被配置为执行此类通用和/或计算操作。
24.在各种实施例中,并行处理子系统112中包括的所述一个或更多个ppp可配置为执行图形处理、神经网络训练和推理、通用处理和计算处理操作。系统存储器104包括至少一个设备驱动器103,该驱动器配置为管理并行处理子系统112中的一个或更多个ppu的处理操作。所述系统存储器104也包括在cpu 102上执行并且可以发出控制所述ppu的操作的命令的软件应用125。
25.在各种实施例中,并行处理子系统112可与图1的一个或更多个其他元素集成,以形成单个系统。例如,并行处理子系统112可以与cpu 102和其他连接电路集成在单个芯片上,以形成片上系统(soc)。
26.应理解,本文所示的系统是说明性的,并且变化和修改是可能的。连接拓扑(包括网桥的数量和布置、cpu 102的数量和并行处理子系统112的数量)可以根据需要进行修改。例如,在一些实施例中,系统存储器104可以直接连接到cpu 102,而不是通过存储器桥105连接到cpu 102,并且其他设备将经由存储器桥105和cpu 102与系统存储器104进行通信。在其他替代拓扑中,并行处理子系统112可以连接到i/o桥107或直接连接到cpu 102,而不是连接到存储器桥105。在其他实施例中,i/o桥107和存储器桥105可以集成到单个芯片中,而不是作为一个或更多个分立器件存在。最后,在某些实施例中,图1所示的一个或更多个组件可以不存在。例如,可以消除交换机116,网络适配器118和附加卡120、121会直接连接到i/o桥107。
27.图2是根据各个实施例的图1的并行处理子系统112中包括的并行处理单元(ppu)202的框图。如图所示,ppu 202与组缓冲器204通信。ppu202和组缓冲器204可采用一个或更多个集成电路器件实现,例如可编程处理器、应用专用集成电路、存储器设备,或者任何其他技术上可行的方式。ppu 202可以与组缓冲器204以任何技术上可行的方式通信。在一些实施例中,ppu 202与组缓冲期204通过数据路由器(未示出)通信。
28.在一些实施例中,ppu 202包括神经网络处理元件(pe),其被配置为基于由cpu 102和/或系统存储器104提供的输入数据来执行与神经网络的训练和推理相关的各种操作。在这种情况下,组缓冲器204存储用于执行所述神经网络训练和推理操作的神经网络参数,例如该神经网络的每一层的输入激活、输出激活、权重、输入梯度和/或输出梯度。如图所示,组缓冲器204包括存储与神经网络相关联的激活212、权重214和梯度216的统一缓冲器210。
29.在操作中,组缓冲器210检索存储在统一缓冲器210中的数据(例如,激活212、权重214和/或梯度216)并将该数据作为输入数据206传输到ppu 202。ppu 202接收输入数据206并且对输入数据206执行用于神经网络训练和/或推理的一个或更多个计算操作以生成对应的输出数据208。如下文进一步详细讨论的,所述一个或更多个计算操作包括例如矩阵乘法、向量点积、数据缩放和数据量化。在生成所述输出数据208之后,ppu 202将该输出数据208传输到组缓冲器204。组缓冲器204将该输出数据存储到统一缓冲器210中。所存储的输出数据208可以随后被检索并作为附加输入数据206传输到ppu 202。
30.在一些实施例中,组缓冲器204识别存储在统一缓冲器210中的数据的要传输到ppu 202进行处理的部分。识别要传输到ppu 202的部分数据可以包括,例如,识别神经网络的当前层的输入数据、识别当前神经网络操作的输入数据等。
31.在一些实施例中,统一缓冲器210包括多组数据,其中每组与神经网络的不同层相关联。组缓冲器204针对该神经网络的当前层识别与所述神经网络的当前层相对应的一个或更多个数据集合。例如,激活212可以包括不同的输出激活集合,其中每个输出激活集合是通过为所述神经网络的不同层执行的计算操作生成的。组缓冲器204基于所述神经网络的当前层识别由一个或更多个先前层生成的一个或更多个输出激活集合,其应该用作所述神经网络的当前层的输入激活。组缓冲器204从统一缓冲器210检索所述一个或更多个输出激活集合。作为另一个示例,权重214可以包括不同的权重集合,其中每个权重集合与神经网络的不同层相关联。组缓冲器204基于神经网络的当前层识别与该神经网络的当前层相关联的权重集合。组缓冲器204从统一缓冲器210检索所识别的权重集合。
32.在一些实施例中,组缓冲器204基于由ppu 202执行的神经网络处理的类型来识别用作所述当前层的神经网络计算的输入的一个或更多个数据集。例如,神经网络推理包括前向传播,而神经网络训练包括前向传播和反向传播。前向传播包括在输入激活集合和权重集合之间执行计算以生成输出激活集合。反向传播包括在输出激活梯度集合和转置权重集合之间执行计算以生成输入激活梯度集合,以及在输出激活梯度集合和转置输入激活集合之间执行计算以生成权重梯度集合。
33.图3a示出了根据各种实施例的在执行前向传播300时使用的输入和生成的输出。如图3a所示,前向传播300涉及在输入激活302和权重304之间执行计算以生成输出激活306。所述输入激活302、权重304和输出激活306对应于神经网络的特定层。也就是说,所述
神经网络的每一层可以涉及不同的输入激活302和权重304的集合,并生成相应的输出激活306的集合。当对神经网络的特定层执行前向传播300时,组缓冲器204检索与所述特定层的所述输入激活302相对应的激活212的一部分。此外,组缓冲器204检索与所述特定层的所述权重304相对应的权重214的一部分。组缓冲器204将所述检索到的激活212的部分和检索到的权重214的部分作为输入206传输到ppu 202。
34.图3b示出了根据各种实施例的在执行反向传播310时使用的输入和生成的输出。如图3b所示,反向传播310生成两个输出集合,输入激活梯度316和权重梯度320。在输出激活梯度312和转置权重304之间执行计算以生成输入激活梯度316。在输出激活梯度312和转置输入激活302之间进一步执行计算以生成权重梯度320。所述输出激活梯度312、权重304、输入302、输入激活梯度316和权重梯度320对应于神经网络的特定层。也就是说,所述神经网络的每一层可以涉及不同的输出激活梯度312、转置权重304和转置输入302的集合,并生成相应的输入激活梯度316和权重梯度320的集合。
35.当对神经网络的特定层执行反向传播310时,组缓冲器204确定当前操作是生成输入激活梯度316还是权重梯度320。如果当前操作是生成输入激活梯度316,则组缓冲器204检索与所述输出激活梯度312相对应的梯度216的一部分。另外,组缓冲器204检索与所述权重304相对应的权重214的一部分。在一些实施例中,组缓冲器204转置所述检索到的权重214的部分。如果所述当前操作是生成权重梯度320,则组缓冲器204检索与所述输出激活梯度312相对应的梯度216的所述部分和与所述输入激活302相对应的激活212的一部分。在一些实施例中,组缓冲器204转置所述检索到的激活212的部分。
36.如图2所示,组缓冲器204还包括数据路径单元218。数据路径单元218被配置为接收数据并对所接收的数据执行一个或更多个数据处理操作。所述一个或更多个数据处理操作包括,例如,逐元素减法、截断和转置。在一些实施例中,数据路径单元218接收从统一缓冲器210检索的数据并且在组缓冲器204将所述数据传输到ppu 202之前对所述数据执行一个或更多个数据处理操作。例如,如上所述,反向传播包括使用转置权重和转置输入激活执行计算。组缓冲器204检索权重214的一部分并将所述权重发送到数据路径单元218。数据路径单元218转置该权重以生成转置的权重,并且组缓冲器204将转置的权重传输到ppu 202。数据路径单元218被配置为使用任何合适的技术和/或算法转置数据。在一些实施例中,数据路径单元218通过使数据以转置的顺序被传输到ppu 202来转置数据。
37.在一些实施例中,数据路径单元218接收由ppu 202传输的输出数据208并且对输出数据208执行一个或更多个数据处理操作。所述数据处理操作可以包括,例如,基于所述输出数据208更新存储在统一缓冲器210中的数据,在存入统一缓冲器210之前处理所述输出数据208,等等。例如,在反向传播310期间,ppu 202生成权重梯度320。组缓冲器204接收包括所述权重梯度320的输出208。组缓冲器204将所述输出208传输到数据路径单元218。数据路径单元218识别包括在与权重梯度320相对应的权重214中的权重集合,并在所述权重集合和所述权重梯度320之间执行逐元素减法以更新所述权重集合。
38.在各种实施例中,激活212、权重214和/或梯度216包括量化数据。如下文进一步详细讨论的,一个或更多个数据值,例如包括在激活212、权重214和/或梯度216中的数据值,从高精度、大位宽数据类型量化为更小位宽整数。统一缓冲器210还包括用于量化所述一个或更多个数据值的比例因子。在各种实施例中,如果从统一缓冲器210检索的数据包括量化
数据,则组缓冲器204还检索用于生成所述量化数据的比例因子。
39.用于神经网络量化的细粒度缩放
40.量化将给定范围的高精度值缩放为不同范围的低精度值。将高精度数x缩放为低精度数xq的示例方程由方程(1)给出:
[0041][0042]
在等式(1)中,s表示所述比例因子,q(a,b)表示将值a量化为b位整数的函数。因此,在等式(1)中,高精度数x被s缩放,所述缩放后的值被量化为n位整数xq。包括在激活212、权重214和/或梯度216中的数据值可以,例如,使用等式(1)或其他合适的量化技术来量化。可以使用不同的比例因子来量化包括在激活212、权重214和梯度216中的每个张量。另外,可以使用不同的比例因子来量化每个张量的不同部分。所述比例因子可以是任何合适的数值数据格式,例如整数、浮点数等。
[0043]
神经网络的每一层的激活、权重以及梯度(如果执行神经网络训练),均包括多维张量(例如,输入激活302、权重304、权重304、输入激活302和输出激活梯度312)。为了量化张量,将所述张量沿该张量的多个维度细分为多个矩阵(也称为子矩阵)。对于每个矩阵,比例因子被确定并用于量化包含在所述矩阵中的每个元素。因此,可以使用不同的比例因子来量化所述张量的不同部分。此外,因为单个比例因子用于量化给定矩阵的元素,所以当所述给定矩阵(或包含所述给定矩阵的更大矩阵)被转置时,所述给定矩阵和转置矩阵共享相同的单个比例因子。因此,从内存中读取所述矩阵和所述转置矩阵的比例因子需要相同的时间并使用相同数量的读取操作。
[0044]
在一些实施例中,张量被细分所沿的张量的维度基于张量的类型(例如,激活张量、权重张量、激活梯度张量或权重梯度张量)。例如,参考图3a,输入激活302包括维度b、h、w和c,权重304包括维度k、r、s和c。输入激活302可以沿着所述的b和c维度细分,而权重304可以沿所述的k和c维度细分。作为另一个示例,参考图3b,输出激活梯度312包括维度b、p、q和k;权重304包括尺寸k、r、s和c;并且输入激活302包括维度b、h、w和c。输出激活梯度312可以沿着所述b和k维度细分,权重304可以沿着所述k和c维度细分,同时输入激活302可以沿所述b和c维度细分。
[0045]
在一些实施例中,每个张量被细分为多个相同大小的矩阵。此外,在一些实施例中,每个矩阵具有相同数量的行和列。例如,输入激活302和权重304可以各自细分为多个具有v列和v行的矩阵(v2矩阵)。在一些实施例中,每个矩阵中包括的行数和列数(即,v的大小)对应于ppu 202中包括的向量乘法累加(mac)单元226的大小。如下文中进一步详细讨论的,每个向量mac单元226被配置为在两个给定大小的输入元素集合之间执行计算。选择每个张量被细分为的矩阵的大小以匹配所述向量mac单元226作为输入接收的输入对的数量。结果,向量mac单元226可以在矩阵的整行或整列上执行计算。
[0046]
在一些实施例中,每个量化矩阵连同所对应的比例因子一起存储在统一缓冲器210中。当组缓冲器204从统一缓冲器210检索量化矩阵时,组缓冲器204也检索对应的比例因子。因此,包括在所述输入206中的量化矩阵和所对应的比例因子都被传输到ppu 202。如下文进一步详细解释的,ppu 202使用量化值执行神经网络训练和/或推理计算。
[0047]
量化神经网络推理和训练
[0048]
ppu 202接收由组缓冲器204发送的输入数据206,并且对输入数据206执行用于神经网络训练和/或神经网络推理的一个或更多个计算操作。在一些实施例中,ppu 202通过数据路由器或并行处理子系统112内的其他合适的通信路径接收所述输入数据206。如图2所示,ppu 202包括一个或更多个数据缓冲器,例如数据缓冲器220(1)和数据缓冲器220(2),一个或更多个向量乘法累加(mac)单元226、累加单元228和后处理单元230。
[0049]
在一些实施例中,从组缓冲器204接收的所述输入数据206包括与第一类输入数据相对应的第一输入数据集和与第二类输入数据相对应的第二输入数据集。所述第一类输入数据和所述第二类输入数据可以根据正在执行的特定神经网络训练或推理计算以及目标输出的类型而变化。例如,对于前向传播,在输入激活和权重之间执行计算以生成输出激活。ppu 202可以被配置为在数据缓冲器220(1)中存储权重并且在数据缓冲器220(2)中存储输入激活。作为另一个例子,反向传播包括输出激活梯度和转置输入激活之间的计算以生成权重梯度。ppu 202可以被配置为在数据缓冲器220(1)中存储转置的输入激活并且在数据缓冲器220(2)中存储输出激活梯度。
[0050]
在一些实施例中,从组缓冲器204接收的所述输入数据206仅包括与所述第一类输入数据相对应的所述第一输入数据集。ppu 202分别从组缓冲器204接收第二输入数据206,所述第二输入数据206包括对应于所述第二类输入数据的所述第二输入数据集。在这样的实施例中,与所述第一类输入数据相对应的输入数据集的数量和与所述第二类输入数据相对应的输入数据集的数量可以不同。例如,ppu 202可以接收单个权重集和多个输入激活集。ppu 202使用每个输入激活集和同一权重集来执行计算。作为另一个示例,ppu 202可以接收输出梯度集和转置权重集。ppu 202对输出激活梯度集和转置权重集执行计算操作以生成输入激活梯度集。ppu 202然后接收转置输入激活集,并使用相同的输出激活梯度集和转置输入激活集执行计算操作以生成权重梯度集。
[0051]
ppu 202将输入数据206存储在数据缓冲器220(1)和/或数据缓冲器220(2)中。在一些实施例中,数据缓冲器220(1)和220(2)各自存储不同类型的输入数据。ppu 202基于所述输入数据的类型确定在哪里存储所述输入数据206。例如,ppu 202可以被配置为将权重存储在数据缓冲器220(1)中并且将输入激活存储在数据缓冲器220(2)中。如果输入数据206包括权重,则ppu 202将权重存储在数据缓冲器220(1)中。如果输入数据206包括输入激活,则ppu 202将输入激活存储在数据缓冲器220(2)中。在一些实施例中,输入数据206包括多种类型的输入数据。ppu 202将所述输入数据206划分为多个部分,其中每个部分对应于不同类型的输入数据。对于输入数据206的每个部分,ppu 202确定是将输入数据206的部分存储到数据缓冲器220(1)中还是数据缓冲器220(2)中。
[0052]
在各种实施例中,当执行前向传播时,ppu 202将权重存储在数据缓冲器220(1)中并且将输入激活存储在数据缓冲器220(2)中。当执行反向传播时,ppu 202根据ppu 202是计算输入激活梯度还是权重梯度,将转置的输入激活或转置的权重存储在数据缓冲器220(1)中,并将输出激活梯度存储在数据缓冲器220(2)中。
[0053]
如果所述输入数据206包括量化数据,则所述输入数据206还包括用于生成所述量化数据的一个或更多个比例因子。ppu 202将所述量化数据和对应的比例因子一起存储在数据缓冲器220(1)和/或220(2)中。如图2所示,数据缓冲器220(1)存储一个或更多个数据向量222(1)和一个或更多个相应的比例因子224(1),数据缓冲器220(2)存储一个或更多个
数据向量222(2)和一个或更多个相应的比例因子224(2)。在一些实施例中,存储在数据缓冲器220(1)中的输入数据和存储在数据缓冲器220(2)中的输入数据都包括量化数据。在其他实施例中,存储在数据缓冲器220(1)或数据缓冲器220(2)中的输入数据之一包括量化数据,而存储在另一个数据缓冲器220中的输入数据不包括量化数据。
[0054]
如上所述,为了量化张量,该张量被划分为多个矩阵,并且每个矩阵使用对应的比例因子量化。在一些实施例中,每个矩阵和其对应的比例因子被存储在缓冲器(例如,统一缓冲器210、数据缓冲器220(1)和数据缓冲器220(2))的同一行中。例如,每个数据向量222(1)对应于不同的矩阵并且每个比例因子224(1)对应于用于量化所述对应矩阵的比例因子。每个数据向量221(1)和对应的比例因子224(1)被存储在数据缓冲器220(1)的同一行中。从所述缓冲器中读取数据时,可以将所述矩阵的元素与相应的比例因子一起读取。
[0055]
在一些实施例中,数据缓冲器220(1)包括多个存储器组(memory bank)。一个或更多个存储器组存储矩阵元素,另一个存储器组存储比例因子。在各种实施例中,存储矩阵元素的每个存储器组存储矩阵的不同行。例如,每个矩阵的第一行存储在第一存储器组中,每个矩阵的第二行存储在第二存储器组中,依此类推。在其他实施例中,存储矩阵元素的每个存储器组存储矩阵的不同列。例如,每个矩阵的第一列存储在第一存储器组中,每个矩阵的第二列存储在第二存储器组中,依此类推。
[0056]
为了执行神经网络计算,一个或更多个向量mac单元226从数据缓冲器220(1)和数据缓冲器220(2)读取输入数据并对输入数据执行一个或更多个计算。在一些实施例中,每个向量mac单元226被配置为从数据缓冲器220(1)读取第一输入数据集合以及从数据缓冲器220(2)读取第二输入数据集合。例如,向量mac单元226从数据缓冲器220(1)读取数据向量222(1)和比例因子224(1),从数据缓冲器220(2)读取数据向量222(2)和比例因子224(2)。向量mac单元226使用数据向量222(1)中的元素、数据向量222(2)中的元素、比例因子224(1)和/或比例因子224(2)来执行一个或更多个计算。
[0057]
在一些实施例中,向量mac单元226将数据向量222(1)中的每个元素与数据向量222(2)中的对应元素相乘。向量mac单元226对乘积值求和以产生部分和。也就是说,向量mac单元226计算数据向量222(1)和数据向量222(2)之间的向量点积值。此外,向量mac单元226将比例因子224(1)和比例因子224(2)相乘以生成比例因子积。向量mac单元226基于比例因子224(1)和比例因子224(2),通过将所述部分和与所述比例因子积相乘,来缩放所述部分和,以生成缩放后的部分和。在一些实施例中,向量mac单元226在将所述比例因子积与所述部分和相乘之前对比例因子积进行四舍五入。
[0058]
在一些实施例中,ppu 202包括多个向量mac单元226。每个向量mac单元226从数据缓冲器220(1)和/或数据缓冲器220(2)读取不同的输入数据集。因此,向量mac单元226可以并行地或基本上并行地对不同的输入数据集对执行计算。向量mac单元226可以各自从数据缓冲器220(1)读取不同的输入数据集,从数据缓冲器220(2)读取相同的输入数据集,从数据缓冲器220(1)读取相同的输入数据集,从数据缓冲器220(2)读取不同的输入数据集,或从数据缓冲器220(1)和数据缓冲器220(2)读取不同的输入数据集。
[0059]
在一些实施例中,数据缓冲器220(1)和/或数据缓冲器220(2)包括多个存储器组,包括一个或更多个存储量化矩阵的元素的存储器组。每个向量mac单元226从数据缓冲器220(1)和/或数据缓冲器220(2)的同一行读取一组矩阵元素,但从不同的存储器组读取。在
一些实施例中,包括在所述一个或更多个存储器组中的每个存储器组存储所述量化矩阵的不同行。当每个向量mac单元226从不同的存储器组读取时,每个向量mac单元226从该数据缓冲器读取量化矩阵的不同行。在一些实施例中,一个或更多个存储器组中包括的每个存储器组存储所述量化矩阵的不同列。当每个向量mac单元226从不同的存储器组读取时,每个向量mac单元226从该数据缓冲器读取量化矩阵的不同列。另外,每个向量mac单元226可以从相同的存储器组读取比例因子。因为相同的比例因子被用来量化矩阵的元素,所以该量化矩阵的不同行和不同列对应于相同的比例因子。
[0060]
如上所述,量化矩阵中包括的行数和列数可以匹配每个向量mac单元226被配置为从数据缓冲器220(1)或数据缓冲器220(2)读取的元素的数量。例如,如果向量mac单元226被配置为并行执行v个乘法运算,那么每个量化矩阵也具有v行和v列。此外,在一些实施例中,ppu 202包括与每个向量mac单元226的大小相同的向量mac单元226的数量。如果每个向量mac单元226读取矩阵的不同行,或者如果每个向量mac单元226读取了矩阵的不同列,则ppu 202可以使用向量mac单元226对整个矩阵执行计算。参考以上示例,ppu 202包括v个向量mac单元226。矩阵的v个元素由一共v个向量mac单元226读取,其对应v2个元素,这也是该矩阵的大小。
[0061]
累加单元228接收由一个或更多个向量mac单元226产生的输出,例如缩放的部分和,并累加该输出。在一些实施例中,每个向量mac单元226生成的输出对应于输出张量的特定位置或元素。累加单元228为该输出张量的每个位置或元素累加对应于所述位置或元素的输出。在所有输入元素已由所述一个或更多个向量mac单元226处理之后,累积的输出形成完整的输出张量。例如,参考图3a,每个缩放的部分和可以对应于输出激活306的不同元素。累加单元228针对所述输出激活306的每个元素累积由与所述元素相对应的所述一个或更多个向量mac单元226生成的缩放的部分和。在输入激活302和权重304的每个元素由所述一个或更多个向量mac单元226处理之后,然后输出激活306完成。在一些实施例中,累加单元包含计算每个部分和的存储地址的输出地址生成器。累加单元使用由输出地址生成器确定的存储地址来确定每个部分和属于输出张量的哪一部分。
[0062]
后处理单元230接收来自累加单元228的累加输出,例如输出激活张量、权重梯度张量或输入激活梯度张量。在一些实施例中,后处理单元230在ppu 202将累加输出传输到组缓冲器204之前对累加输出执行一个或更多个后处理操作。ppu 202将处理后的输出作为输出208传输到组缓冲器204。
[0063]
在一些实施例中,所述一个或更多个后处理操作包括量化包括在累加输出中的每个元素。如上所述,一个张量可以被划分为多个矩阵,所述矩阵的每个元素基于比例因子被量化为n位整数。后处理单元230将输出张量划分为多个矩阵并使用对应的比例因子量化每个矩阵。在一些实施例中,后处理单元230基于包括在该矩阵中的元素计算每个矩阵的比例因子。可以使用任何合适的算法或方程来计算矩阵的比例因子。等式(2)给出了用于计算矩阵的比例因子的示例函数:
[0064][0065]
在等式(2)中,s、i、x(i)和n分别对应于矩阵的比例因子、矩阵中元素的数量、矩阵的第i个元素以及值量化到的位宽。因此,在等式(2)中,基于目标位宽和包括在矩阵中的最
大值来计算矩阵的比例因子。
[0066]
后处理单元230基于所计算的比例因子量化每个矩阵中包括的元素。例如,可以使用上面讨论的等式(1)来执行对元素的量化。在一些实施例中,在神经网络训练期间,值被量化到的位宽n根据当前时期而变化。第一个位宽可以用于神经网络训练的多个时期,且在达到阈值数量的时期之后,可以使用第二位宽。例如,可以将值从时期0到时期75量化为4位整数,并且可以从时期76到86将值量化为8位整数。
[0067]
在一些实施例中,后处理单元230在量化输出张量的元素之前基于每层比例因子来缩放输出张量的每个元素。除了与张量的不同部分相关的比例因子之外,神经网络的每一层都可以与每层比例因子相关联。后处理单元230使用每层比例因子来缩放输出张量的每个元素。每层比例因子是与神经网络的当前层相关的比例因子,即与输出张量相关的比例因子。在一些实施例中,后处理单元230接收用于缩放输出张量的每层比例因子,例如,作为输入数据206的一部分。在一些实施例中,后处理单元230基于输出张量中包含的值计算每层比例因子。可以使用任何合适的算法或方程来计算每层比例因子。等式(3)给出了计算每层比例因子的示例函数:
[0068][0069]
如等式(3)所示,基于神经网络层l的元素k和用于量化元素的位宽n计算每层比例因子s
layer

[0070]
在一些实施例中,一个或更多个后处理操作包括使用非线性函数处理输出张量的元素。后处理单元230可以在量化输出张量的元素之前使用所述非线性函数来处理输出张量的元素。在一些实施例中,后处理单元230使用所述每层比例因子缩放所述输出张量的元素并且使用所述非线性函数处理所述缩放的元素。
[0071]
ppu 202将处理后的输出张量作为输出208传输到组缓冲器204。在一些实施例中,ppu 202还包括在输出208中的一个或更多个比例因子。所述一个或更多个比例因子包括,例如,用于量化所述输出张量的不同部分的比例因子和/或用于缩放输出张量的每层比例因子。
[0072]
图4是根据各种实施例的用于从图2的组缓冲器204检索数据和将数据存储到图2的组缓冲器204的方法步骤的流程图。尽管参考图1和图2的系统描述了所述方法步骤,但是本领域技术人员将请理解,被配置为以任何顺序实施该方法步骤的任何系统都落入本发明的范围内。
[0073]
如图4所示,方法400开始于步骤402,其中组缓冲器204识别要发送到ppu 202的输入数据206的集合并从统一缓冲器210检索所述输入数据206的集合。识别所述输入数据206的集合以类似于上面关于组缓冲器204所讨论的方式执行。识别输入数据集包括,例如,识别神经网络的当前层的输入数据、识别当前神经网络操作的输入数据,等等。组缓冲器204确定统一缓冲器210中对应于所述输入数据的一个或更多个存储器地址,并基于所述一个或更多个存储器地址从统一缓冲器210检索所述输入数据。
[0074]
在一些实施例中,统一缓冲器210包括多个数据集,其中每个集合与神经网络的不同层相关联。组缓冲器204针对所述神经网络的当前层识别与所述神经网络的所述当前层相对应的一个或更多个数据集。
[0075]
在一些实施例中,组缓冲器204基于由ppu 202执行的神经网络计算的类型识别用作当前层的神经网络计算的输入的一个或更多个数据集。如果ppu 202正在执行前向传播计算,则组缓冲器204识别权重集214和激活集212。如果ppu 202正在执行反向传播计算以生成输入激活梯度,则组缓冲器204识别权重集214和激活梯度集216。如果ppu 202正在执行反向传播计算以生成权重梯度时,组缓冲器204则识别激活集212和激活梯度集216。
[0076]
在步骤404,组缓冲器204确定是否转置所述输入数据206。确定是否要转置所述输入数据206是基于由ppu 202执行的神经网络计算类型的。如果ppu 202正在执行前向传播计算,则使用非转置权重和激活执行所述计算。因此,如果ppu 202正在执行前向传播计算,则组缓冲器204确定输入数据206不应被转置。
[0077]
如果ppu 202正在执行反向传播计算以生成输入激活梯度,则使用转置权重执行所述计算。因此,如果ppu 202正在执行反向传播计算以生成输入激活梯度并且输入数据206包括权重,则组缓冲器204确定包括在输入数据206中的权重应该被转置。如果ppu 202正在执行反向传播计算以生成权重梯度,则使用转置激活执行该计算。因此,如果ppu 202正在执行反向传播计算以生成权重梯度并且输入数据206包括激活,则组缓冲器204确定包括在输入数据206中的所述激活应该被转置。
[0078]
如果组缓冲器204确定所述输入数据206不应被转置,则该方法进行到步骤406,其中组缓冲器204将所述输入数据206传输到ppu 202。如果输入数据206包括量化数据,则组缓冲器204还传输用于所述生成量化数据的一个或更多个比例因子。
[0079]
如果组缓冲器204确定所述输入数据206应该被转置,则该方法进行到步骤408,其中组缓冲器204转置所述输入数据206或所述输入数据206的一部分。例如,如果输入数据206包括激活梯度和权重,则组缓冲器204转置所述权重但不转置所述激活梯度。转置所述输入数据206以类似于与上面关于组缓冲器204和数据路径单元218讨论的方式执行。
[0080]
在一些实施例中,组缓冲器204从统一缓冲器210检索要转置的数据并将检索到的数据传输到数据路径单元218。数据路径单元218转置所述数据以生成转置数据集合。
[0081]
在一些实施例中,输入数据206包括多个输入数据集合。在步骤404,组缓冲器204针对每个输入数据集合确定该输入数据集合是否应该被转置。例如,输入数据206可以包括权重集合214和梯度集合216。组缓冲器204确定所述权重214应该被转置并且所述梯度216不应该被转置。在步骤408,组缓冲器204转置所述权重214而不转置所述梯度216。
[0082]
在步骤410,组缓冲器204将包括所述转置数据的所述输入数据206传输到ppu 202。如果所述输入数据206包括量化数据,则组缓冲器204还传输用于生成所述量化数据的一个或更多个比例因子。
[0083]
在步骤412,组缓冲器204接收由ppu 202传输的输出数据208。输出数据的类型可以根据传输到ppu 202的输入数据206的类型和/或由ppu 202执行的神经网络计算的类型而变化。如果ppu 202执行前向传播计算,则输出数据208包括输出激活。如果ppu 202执行反向传播计算,则输出数据208包括梯度,例如权重梯度或输入激活梯度。在一些实施例中,所述输出数据208包括量化数据,例如量化输出激活、量化权重梯度和/或量化输入激活梯度。如果所述输出数据208包括量化数据,则输出数据208还包括用于生成所述量化数据的一个或更多个比例因子。
[0084]
在步骤414,组缓冲器204确定是否处理输出数据208。在一些实施例中,确定是否
处理输出数据208是基于包括在输出数据208中的数据类型。例如,如果输出数据208包括权重、输出激活或输入激活梯度,然后组缓冲器204确定权重、输出激活或输入激活梯度,无论是哪种情况,都应存储在统一缓冲器210中而无需进一步处理。如果输出数据208包括权重梯度,则组缓冲器204确定该存储在统一缓冲器210中的权重应该基于权重梯度进行更新。
[0085]
如果组缓冲器204确定不应处理输出数据208,则在步骤416,组缓冲器204将输出数据208存储在统一缓冲器210中。在一些实施例中,将数据存储在统一缓冲器210中包括确定统一缓冲器210中的对应于输出数据208的一个或更多个存储器地址并且基于一个或更多个存储器地址存储输出数据208。
[0086]
如果组缓冲器204确定所述输出数据208应该被处理,则在步骤418,组缓冲器204处理输出数据208。在一些实施例中,组缓冲器204将输出数据208传输到数据路径单元218以进行处理。处理输出数据208包括,例如,基于输出数据208更新存储在统一缓冲器210中的数据。
[0087]
图5是根据各种实施例的用于使用量化数据执行神经网络计算操作的方法步骤的流程图。尽管参考图1和图2的系统描述了所述方法步骤,但是本领域技术人员请理解,被配置为以任何顺序实施方法步骤的任何系统都落入本发明的范围内。
[0088]
如图5所示,方法500开始于步骤502,其中ppu 202从组缓冲器204接收第一输入数据集合和对应于第一输入数据集合的第一比例因子集合。每个包含在第一比例因子集合中的比例因子用于量化包含在第一输入数据集合中的输入数据的不同子集。例如,第一输入数据集合可以是一组权重、输入激活、输出梯度、转置权重或转置输入激活。输入数据的类型基于ppu 202正在执行的当前神经网络计算的预期输入。例如,如果ppu 202正在执行前向传播计算,则第一输入数据集合可以是一组权重或一组输入激活。
[0089]
在步骤504,ppu 202将第一输入数据集合和第一比例因子集合存储在第一数据缓冲器中。以与以上关于数据缓冲器220(1)和220(2)讨论的方式类似的方式执行存储第一输入数据集合和第一比例因子集合。在一些实施例中,ppu 202基于包括在第一输入数据集合中的数据的类型从包括在ppu 202中的两个或更多个数据缓冲器(例如,数据缓冲器220(1)和220(2))中识别第一数据缓冲器。例如,参考图2,数据缓冲器220(1)可以被配置为存储第一类输入数据,例如权重,而数据缓冲器220(2)可以被配置为存储第二类输入数据,例如激活。ppu 202基于第一输入数据集合是第一类输入数据还是第二类输入数据来确定是将第一输入数据集合存储到数据缓冲器220(1)还是存储到数据缓冲器220(2)。
[0090]
在一些实施例中,第一输入数据集合对应于量化的多维张量。多维张量通过将该多维张量划分为多个矩阵来量化。为每个矩阵计算比例因子,并基于该计算的比例因子量化矩阵中的元素。第一比例因子集合中包含的每个比例因子对应于所述量化的多维张量中的一个量化矩阵。ppu 202存储与对应的量化矩阵相邻的每个比例因子,使得所述矩阵值和比例因子可以同时被读取或加载。例如,第一数据缓冲器可以将数据存储在多个行中,并且ppu 202可以将每个量化矩阵和对应的比例因子存储在不同的行中。此外,在一些实施例中,第一数据缓冲器包括多个存储器组。在一些实施例中,ppu 202将所述量化矩阵的每一列存储在不同存储器组的同一行中。在其他实施例中,ppu 202将所述量化矩阵的每一行存储到不同存储器组的同一行中。
[0091]
在步骤506,ppu 202从组缓冲器204接收第二输入数据集合和对应于所述第二输
入数据集合的第二比例因子集合。包括在所述第二比例因子集合中的每个比例因子被用于量化包含在所述第二输入数据集合中的不同输入数据子集。所述第二输入数据集合可以是,例如,一组权重、输入激活、输出梯度、转置权重或转置输入激活。所述第二输入数据集合的输入数据的类型基于ppu 202正在执行的当前神经网络计算的预期输入和所述第一输入数据集合的输入数据的类型。例如,如果ppu 202正在执行前向传播计算,并且所述第一输入数据集合是一组权重,那么第二输入数据集合是一组输入激活。
[0092]
在步骤508,ppu 202将第二输入数据集合和第二比例因子集合存储在第二数据缓冲器中。存储所述第二输入数据集合和所述第二比例因子集合以与以上关于数据缓冲器220(1)和220(2)讨论的方式类似的方式执行。在一些实施例中,ppu 202基于包括在第二输入数据集合中的数据类型从包括在ppu 202中的两个或更多个数据缓冲器(例如,数据缓冲器220(1)和220(2))中识别第二数据缓冲器。例如,参考图2,数据缓冲器220(1)可以被配置为存储第一类输入数据,例如权重,而数据缓冲器220(2)可以被配置为存储第二类输入数据,例如激活。ppu 202基于第二输入数据集合是第一类输入数据还是第二类输入数据来确定是将所述第二输入数据集合存储到数据缓冲器220(1)还是存储到数据缓冲器220(2)。在一些实施例中,ppu 202识别未用于存储所述第一输入数据集合的数据缓冲器。
[0093]
在一些实施例中,所述第二输入数据集合对应于量化的多维张量,其中包括在所述第二比例因子集合中的每个比例因子对应于所述量化的一个多维张量中的量化矩阵。ppu 202存储与对应量化矩阵相邻的每个比例因子,使得所述矩阵值和比例因子可以同时被读取或加载。例如,第二数据缓冲器可以将数据存储在多个行中,并且ppu 202可以将每个量化矩阵和对应的比例因子存储在不同的行中。此外,在一些实施例中,所述第二数据缓冲器包括多个存储器组。在一些实施例中,ppu 202将量化矩阵的每一列存储在不同存储器组的同一行中。在其他实施例中,ppu 202将量化矩阵的每一行存储在不同存储器组的同一行中。
[0094]
在一些实施例中,所述第一输入数据集合、第一比例因子集合、第二输入数据集合和第二比例因子集合中的两个或更多个被包括在从组存储器204中接收的同一输入数据集合206中。ppu 202可以将输入数据206划分为第一输入数据集合、第一比例因子集合、第二输入数据集合和第二比例因子集合中的两个或更多个。
[0095]
在一些实施例中,第二输入数据集合包括量化数据,但第一输入数据集合不包括量化数据。在这样的实施例中,在步骤502,ppu 202不接收第一比例因子集合,并且在步骤504,ppu 202不存储第一比例因子集合。此外,在一些实施例中,第一输入数据集合包括量化数据,但第二输入数据集合不包括量化数据。在这样的实施例中,在步骤506,ppu 202不接收第二比例因子集合,并且在步骤508,ppu 202不存储第二比例因子集合。
[0096]
在一些实施例中,可以针对相同类型的附加输入数据重复上述步骤502-504和/或步骤506-508。执行上述步骤502-504的次数可以不同于执行上述步骤506-508的次数。例如,ppu 202可以接收单个权重集合而不是多个输入激活集合。此外,上述步骤502-508可以以不同的顺序和/或并行执行。例如,步骤506-508可以在步骤502-504之前或与步骤502-504同时执行。
[0097]
在步骤510,ppu 202使用第一输入数据集合、第二输入数据集合、第一比例因子集合和第二比例因子集合来执行一个或更多个神经网络计算。以类似于上文关于ppu 202、向
量mac单元226和累加单元228所讨论的方式的方式执行一个或更多个神经网络计算。在一些实施例中,第一输入数据集合对应于第一多维张量,第二输入数据集合对应于第二多维张量。执行一个或更多个神经网络计算包括在第一多维张量中包括的矩阵和第二多维张量中包括的矩阵之间执行矩阵乘法计算。
[0098]
在一些实施例中,ppu 202从第一数据缓冲器读取第一行数据并且从第二数据缓冲器读取第二行数据。来自所述第一数据缓冲器的所述第一行数据对应于包括在所述第一输入数据集合中的第一矩阵和对应于该第一矩阵的比例因子。来自所述第二数据缓冲器的所述第二行数据对应于包括在所述第二输入数据集合中的第二矩阵和对应于该第二矩阵的比例因子。
[0099]
在一些实施例中,ppu 202从第一数据缓冲器中的第一存储器组中读取第一行数据并且从第二数据缓冲器中的第二存储器组中读取第二行数据。来自所述第一存储器组的第一行数据对应于包括在所述第一输入数据集合中的第一矩阵的列。来自所述第二存储器组的第二行数据对应于包括在所述第二输入数据集合中的第二矩阵的列。
[0100]
ppu 202将在来自第一数据缓冲器的数据行中包括的每个元素与在来自第二数据缓冲器的数据行中包括的对应元素相乘。ppu 202将乘积相加以生成部分和。此外,将对应于第一矩阵的比例因子与对应于第二矩阵的比例因子相乘以产生比例因子乘积。ppu 202通过将所述部分和乘以所述比例因子乘积来缩放该部分和。如果第一输入数据集合包括量化的数据,而第二输入数据集合不包括量化数据,则ppu 202通过将所述部分和乘以对应于第一矩阵的比例因子来缩放该部分和。类似地,如果第二输入数据集合包括量化数据,而第一输入数据集合不包括量化数据,则ppu 202通过将所述部分和乘以对应于第二矩阵的比例因子来缩放该部分和。
[0101]
ppu 202对来自第一存储器组和第二存储器组的每一行数据重复乘法和累加计算以生成多个部分和。每个部分和对应于多维输出张量的不同元素。对于输出张量的每个元素,ppu 202累加对应于该元素的部分和。在ppu 202完成对包括在第一输入数据集合和第二输入数据集合中的所有数据执行计算之后,然后所累积的部分和形成完整的输出张量。
[0102]
在步骤512,ppu 202对输出数据执行一个或更多个后处理操作以生成经处理的输出数据。以类似于上面关于ppu 202和后处理单元230讨论的方式执行所述一个或更多个后处理操作。
[0103]
在一些实施例中,ppu 202基于每层比例因子来缩放所述输出数据。基于所述每层比例因子缩放所述输出数据包括使用所述每层比例因子缩放输出张量的每个元素。在一些实施例中,除了第一输入数据集合和/或第二输入数据集合之外或者结合第一输入数据集合和/或第二输入数据集合,ppu 202还接收所述每层比例因子。在一些实施例中,ppu 202基于所述输出数据计算每层比例因子。
[0104]
在一些实施例中,ppu 202使用非线性函数处理所述输出数据。使用所述非线性函数处理所述输出数据包括将所述非线性函数应用于该输出张量的每个元素。在一些实施例中,ppu 202首先基于每层比例因子缩放所述输出数据以生成缩放输出数据,并使用所述非线性函数处理该缩放的输出数据。
[0105]
在一些实施例中,ppu 202量化输出数据以生成量化的输出数据。量化所述输出数据包括基于比例因子将该输出张量的每个元素量化为n位整数。例如,使用上面讨论的等式
(1)来执行对元素的量化。所述输出张量的不同元素可以基于不同的比例因子进行量化。在一些实施例中,ppu 202将所述输出张量划分为多个矩阵并使用不同的比例因子量化每个矩阵。此外,在一些实施例中,ppu 202针对每个矩阵计算用于量化所述矩阵元素的比例因子。
[0106]
在一些实施例中,ppu 202首先基于每层比例因子缩放所述输出数据,然后量化缩放的输出数据。在其他实施例中,ppu 202缩放所述输出数据并在量化所述输出数据之前使用所述非线性函数处理所述输出数据。
[0107]
在一些实施例中,当执行神经网络训练计算时,ppu 202基于所述神经网络训练的当前时期(迭代)来选择用于量化所述输出张量的位宽。对神经网络训练的不同迭代使用不同位宽的一个好处是,可以在神经网络训练的早期迭代期间使用更低的位宽,以提高能量效率和处理性能。更高的位宽可用于神经网络训练的后续迭代,其中更高精度的计算提高了所述神经网络模型的准确性。
[0108]
在步骤514,ppu 202将处理后的输出数据208传送到组缓冲器204。传送所述处理后的输出数据208包括传送所述量化的输出张量和用于量化所述输出张量的元素的不同比例因子。
[0109]
总之,所公开的技术能够使用量化的输入数据实现高效的神经网络推理和神经网络训练计算。为了生成量化张量,将多维张量沿该张量的多个维度划分为多个子矩阵。每个子矩阵基于相应的计算比例因子进行量化。所量化的子矩阵与相应的比例因子一起存储。在执行神经网络计算时,每个量化的子矩阵和相应的比例因子一起从内存中被读取。神经网络计算使用所述量化的子矩阵和相应的比例因子执行。当使用量化子矩阵的转置执行神经网络计算时,用所述转置的量化子矩阵从内存中读取相同的相应比例因子。然后,使用所述转置的量化子矩阵和所述相应的比例因子执行神经网络计算。从所述神经网络计算中生成的输出数据被累加以形成输出张量。通过将所述输出张量划分为多个矩阵并针对每个矩阵计算用于量化该矩阵的比例因子来量化所述输出张量。使用所述计算的比例因子对每个矩阵进行量化,以生成量化的输出张量。
[0110]
所公开的技术相对于现有技术的至少一个技术优势在于,利用所公开的技术,可以更有效地执行神经网络训练操作。在这方面,利用所公开的技术,将不同的比例因子应用于沿着张量的多个维度的不同子矩阵,而不是应用于沿着该张量的单个维度的不同向量。因此,可以将相同的比例因子应用于矩阵内的子矩阵和对应转置矩阵内的对应子矩阵。因此,与现有技术方法相比,使用转置矩阵执行计算使用更少的读取操作,从而减少训练神经网络时的处理时间。这些技术优势提供了优于现有技术方法的一项或更多项技术改进。
[0111]
1.在一些实施例中,一种用于处理神经网络的计算机实现的方法,所述方法包括:接收第一量化矩阵,所述第一量化矩阵对应于多维输入张量的一部分并且已经基于第一比例因子被量化;以及使用所述第一量化矩阵和所述第一比例因子执行一个或更多个计算操作,以生成与多维输出张量的第一部分相对应的一个或更多个数据值。
[0112]
2.根据条款1所述的计算机执行方法,进一步包括:接收第二量化矩阵,所述第二量化矩阵对应于第二多维输入张量的一部分并且已经基于第二比例因子被量化;其中执行所述一个或更多个计算操作还包括:使用所述第二量化矩阵和所述第二比例因子来生成所述一个或更多个数据值。
[0113]
3.根据条款1或2所述的计算机执行方法,其中执行所述一个或更多个计算操作包括:使用所述第一量化矩阵和所述第二量化矩阵计算一个或更多个点积值。
[0114]
4.根据条款1-3中的任一项所述的计算机执行方法,其中执行所述一个或更多个计算操作包括:使用所述第一比例因子和所述第二比例因子对一个或更多个点积值中包括的每个点积值进行缩放。
[0115]
5.根据条款1-4中的任一项所述的计算机执行方法,其中所述第一量化矩阵包括转置矩阵。
[0116]
6.根据条款1-5中的任一项所述的计算机执行方法,其中所述第一量化矩阵被包括在多个量化矩阵中,其中所述多个量化矩阵中包括的每个量化矩阵对应于所述多维输入张量的不同部分并已使用不同的比例因子进行了量化。
[0117]
7.根据条款1-6中的任一项所述的计算机执行方法,其中执行所述一个或更多个计算操作进一步包括:对于包括在所述多个量化矩阵中的每个量化矩阵,使用所述量化矩阵和关联的比例因子来生成一个或更多个关联数据值,所述一个或更多个关联数据值对应于所述多维输出张量的不同部分。
[0118]
8.根据条款1-7中的任一项所述的计算机执行方法,还包括:基于与所述多维输出张量相关联的第二比例因子来缩放所述多维输出张量。
[0119]
9.根据条款1-8中的任一项所述的计算机执行方法,还包括:通过将所述多维输出张量细分为多个矩阵并量化包括在所述多个矩阵中的每个矩阵来量化所述多维输出张量。
[0120]
10.根据条款1-9中的任一项所述的计算机执行方法,还包括:通过以下方式量化所述多维输出张量:针对包括所述多维输出张量的多个矩阵中包括的每个矩阵,基于所述矩阵中包括的一个或更多个数据值来计算对应的比例因子;以及基于所述对应的比例因子量化包括在所述多个矩阵中的每个矩阵。
[0121]
11.在一些实施例中,一种或更多种非暂时性计算机可读介质,其存储指令,所述指令在由一个或更多个处理器执行时,使所述一个或更多个处理器执行以下步骤:接收第一量化矩阵,所述第一量化矩阵对应于多维输入张量的一部分并且已经基于第一比例因子被量化;以及使用所述第一量化矩阵和所述第一比例因子执行一个或更多个计算操作,以生成与多维输出张量的第一部分相对应的一个或更多个数据值。
[0122]
12.根据条款11所述的一个或更多个非暂时性计算机可读介质,进一步包括:接收第二量化矩阵,所述第二量化矩阵对应于第二多维输入张量的一部分并且已经基于第二比例因子被量化;其中执行所述一个或更多个计算操作还包括:使用所述第二量化矩阵和所述第二比例因子来生成所述一个或更多个数据值。
[0123]
13.根据条款11或12所述的一个或更多个非暂时性计算机可读介质,其中执行所述一个或更多个计算操作包括:计算包括在所述第一量化矩阵中的第一向量与包括在所述第二量化矩阵中的第二向量之间的第一点积值。
[0124]
14.根据条款11-13中的任一项所述的一个或更多个非暂时性计算机可读介质,其中执行所述一个或更多个计算操作包括:基于所述第一比例因子或所述第二比例因子中的至少一个缩放第一点积值。
[0125]
15.根据条款11-14中的任一项所述的一个或更多个非暂时性计算机可读介质,还包括:接收所述第一比例因子并将所述第一量化矩阵和所述第一比例因子存储在数据缓冲
器中。
[0126]
16.根据条款11-15中的任一项所述的一个或更多个非暂时性计算机可读介质,其中执行所述一个或更多个计算操作包括:从所述数据缓冲器中读取包括在所述第一量化矩阵中的第一输入值集合;以及从所述数据缓冲器中读取所述第一比例因子,其中所述第一输入值集合也被用于执行所述一个或更多个计算操作。
[0127]
17.根据条款11-16中的任一项所述的一个或更多个非暂时性计算机可读介质,其中所述数据缓冲器包括多个行,并且其中将所述第一量化矩阵和所述第一比例因子存储在所述数据缓冲器中包括:将所述第一量化矩阵和所述第一比例因子存储在包括在所述多个行中的第一行中。
[0128]
18.根据条款11-17中的任一项所述的一个或更多个非暂时性计算机可读介质,其中所述数据缓冲器包括多个存储器组,其中将所述第一量化矩阵存储在所述数据缓冲器中包括:对于包括在所述第一量化矩阵中的每一列,将所述列存储在所述多个存储器组中包括的不同存储器组中。
[0129]
19.根据条款11-18中的任一项所述的一个或更多个非暂时性计算机可读介质,其中所述第一量化矩阵被包括在多个量化矩阵中,其中所述多个量化矩阵中包括的每个量化矩阵对应于所述多维输入张量的不同部分并且已经使用不同的比例因子进行了量化,并且进一步包括:对于包括在所述多个量化矩阵中的每个量化矩阵,接收所述量化矩阵和关联比例因子,并且将所述量化矩阵和所述关联比例因子存储到数据缓冲器的不同行中。
[0130]
20.在一些实施例中,一种系统,包括:存储指令的一个或更多个存储器;和一个或更多个处理器,其耦合到所述一个或更多个存储器,并且在执行所述指令时执行以下步骤:接收第一量化矩阵,所述第一量化矩阵对应于多维输入张量的一部分并且已经基于第一比例因子被量化;以及使用所述第一量化矩阵和所述第一比例因子执行一个或更多个计算操作,以生成与多维输出张量的第一部分相对应的一个或更多个数据值。
[0131]
以任何方式记载在任何权利要求中的任何权利要求元素和/或本技术中描述的任何元素的任何和所有组合均落入本发明和保护的范围内。
[0132]
出于说明目的已经呈现了各个实施例的描述,但并不意图穷尽为或限制为所公开的实施例。在不偏离所述实施例的范围和精神的情况下,对于本领技术人员来讲,许多修改和变化将是显而易见的。
[0133]
本实施例的方面可体现为系统、方法或计算机程序产品。因此,本公开的方面可采取完全硬件实施例、完全软件实施例(包括固件、常驻软件、微代码等)或组合软件和硬件方面的实施例的形式,本文中全部统称为“模块”、“系统”或“计算机”。另外,本公开中描述的任何硬件和/或软件技术、处理、功能、组件、引擎、模块或系统可以被实现为一个电路或电路组。此外,本公开的方面可采用一种或更多种计算机可读介质中体现的计算机程序产品的形式,该计算机可读介质上包含计算机可读程序代码。
[0134]
可以使用一种或更多种计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。例如,计算机可读存储介质包括但不限于电子、磁、光、电磁、红外或半导体系统、装置或设备,或上述任何适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)可包括:具有一根或更多根电线的电气连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom
或闪存)、光纤、便携式光盘只读存储器(cd-rom)、光存储设备、磁存储设备或上述任何合适的组合。在本文档的上下文中,计算机可读存储介质可以是任何有形介质,其可以包括或存储程序,以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合使用。
[0135]
本公开的方面参照根据本公开的实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图进行了描述。应理解,流程图和/或框图中的每个框,以及流程图和/或框图中的框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,以产生机器。经由计算机或其他可编程数据处理装置的处理器执行的这些指令使得能够实现流程图和/或框图的一个或更多个框中指定的功能/动作。此类处理器可以是但不限于通用处理器、专用处理器、特定于应用程序的处理器或现场可编程门阵列。
[0136]
图中的流程图和框图示出了根据本公开的各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这方面,流程图或框图中的每个框可以表示代码的模块、段或部分,代码包括用于实现一个或更多个指定逻辑功能的一个或更多个可执行指令。还应指出,在一些替代实施例中,框中指出的功能可不按图中指出的顺序发生。例如,连续显示的两个框实际上可以大致同时执行,或者这些框有时可以相反的顺序执行,这取决于所涉及的功能。还应注意,框图和/或流程图中的每个框,以及框图和/或流程图中框的组合,可以由基于专用硬件的系统实现,该基于专用硬件的系统执行指定功能或动作或专用硬件和计算机指令的组合。
[0137]
虽然前述内容是针对本公开的实施例,本公开的其他和进一步实施例可以在不偏离其基本范围的情况下设计,其范围由所附权利要求确定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1