从量化的固件神经网络层得出一致的软件神经网络层

文档序号:108407 发布日期:2021-10-15 浏览:37次 >En<

阅读说明:本技术 从量化的固件神经网络层得出一致的软件神经网络层 (Deriving consistent software neural network layers from quantized firmware neural network layers ) 是由 J·弗沃斯 D·洛 D·丹格瓦尔 于 2020-02-20 设计创作,主要内容包括:提供了用于得出一致的软件神经网络层的系统和方法。该方法包括接收第一指令,第一指令被配置为使用神经网络处理器(NNP)处理与神经网络层相对应的第一数据集,其中NNP被配置为量化第一数据集以生成量化的数据集,并且然后使用与NNP相关联的硬件内所包含的矩阵向量乘法器,对量化的数据集执行矩阵向量乘法操作,以生成第一结果集。该方法还包括处理第一指令以自动生成第二指令,第二指令被配置用于与不同于NNP的至少一个处理器一起使用,使得第二指令在被至少一个处理器执行以执行矩阵乘法操作时,生成与第一结果集一致的第二结果集。(Systems and methods for deriving a consistent software neural network layer are provided. The method includes receiving a first instruction configured to process a first data set corresponding to a neural network layer using a Neural Network Processor (NNP), wherein the NNP is configured to quantize the first data set to generate a quantized data set, and then perform a matrix vector multiplication operation on the quantized data set using a matrix vector multiplier included within hardware associated with the NNP to generate a first result set. The method also includes processing the first instruction to automatically generate a second instruction configured for use with at least one processor other than the NNP, such that the second instruction, when executed by the at least one processor to perform the matrix multiplication operation, generates a second set of results consistent with the first set of results.)

从量化的固件神经网络层得出一致的软件神经网络层

背景技术

神经网络技术被用于执行复杂的任务,诸如图像分类、阅读理解、语言翻译或语音识别。许多这些任务包括涉及执行大量浮点矩阵乘法和累加操作的深度学习。这些操作在训练期间以及基于输入数据和经训练的数据提供结果期间被执行。

神经网络可以使用与输入数据和以不同格式表达的训练数据相对应的值,包括以不同精度水平表达的数据。

发明内容

在一个示例中,本公开涉及一种方法,该方法包括接收第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,其中神经网络处理器被配置为量化第一数据集以生成量化的数据集,并且然后使用与神经网络处理器相关联的硬件内所包含的矩阵向量乘法器,对量化的数据集执行矩阵向量乘法操作,以生成第一结果集。该方法还包括处理第一指令以自动生成第二指令,第二指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,使得第二指令在被至少一个处理器执行以执行与神经网络层相对应的矩阵乘法操作时,生成与第一结果集一致的第二结果集。

在另一示例中,本公开涉及一种包括至少一个处理器和存储器的系统。该存储器可以包括第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,神经网络处理器具有包含在与神经网络处理器相关联的硬件内的矩阵向量乘法器和包含在与神经网络处理器相关联的硬件内的多功能单元,其中神经网络处理器被配置为量化第一数据集以生成第一量化的数据集,并且然后:(1)使用与神经网络处理器相关联的硬件内包含的矩阵向量乘法器,对第一量化的数据集执行矩阵操作,以生成第一输出数据集,(2)量化第一输出数据集以生成第一量化的输出数据集,以及(3)使用与神经网络处理器相关联的硬件内的多功能单元,对第一量化的输出数据集执行标量操作,以生成第二输出数据集。该存储器还可以包括第二指令,第二指令被配置为处理第一指令,以生成第三指令,第三指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,其中第三指令包括用于执行矩阵乘法操作的指令和用于执行标量操作以处理神经网络层的指令。

在又一示例中,本公开涉及包括与方法相对应的代码的非瞬态计算机可读介质。该方法可以包括接收第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,其中神经网络处理器被配置为量化第一数据集以生成量化的数据集,并且然后使用与神经网络处理器相关联的硬件内所包含的矩阵向量乘法器,对量化的数据集执行矩阵向量乘法操作,以生成第一结果集。该方法还包括处理第一指令以自动生成第二指令,第二指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,使得第二指令在被至少一个处理器执行以执行与神经网络层相对应的矩阵乘法操作时,生成与第一结果集一致的第二结果集。

提供本发明内容以简化形式介绍在下面的

具体实施方式

中进一步描述的概念的选择。本发明内容不旨在确定要求保护的主题的关键特征或基本特征,也不旨在用于限制要求保护的主题的范围。

附图说明

本公开以示例的方式示出并且不受附图限制,其中相似的附图标记表示相似的元件。图中的元件是为了简单和清楚而被示出的并且不一定按比例绘制。

图1是根据一个示例的用于自动生成一致的经训练的软件模型的环境的框图;

图2是量化的固件神经网络层的一部分的框图;

图3是根据一个示例的具有量化(quantization)的神经网络处理器的框图;

图4是量化的软件神经网络层的一部分的框图;

图5是根据一个示例的用于自动生成与一致的软件神经网络层相对应的指令的系统的框图;

图6示出了根据一个示例的用于自动生成与一致的软件神经网络层相对应的指令的方法的流程图。

具体实施方式

本公开中所公开的示例涉及用于实现基于神经网络的处理的系统、方法和组件。某些示例涉及使用量化对卷积神经网络(CNN)层进行处理。某些示例涉及使用神经网络处理器对CNN层进行处理。某些示例涉及保持量化的固件神经网络层和软件神经网络层之间的一致性(concordance)。神经网络处理器可以使用以下设备中的任何一个设备而被实现:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、可擦除和/或复杂可编程逻辑器件(PLD)、可编程阵列逻辑(PAL)设备、以及通用阵列逻辑(GAL)设备。神经网络处理器也可以使用CPU、GPU、CPU和GPU的组合或可编程硬件、CPU和GPU中的任何组合而被实现。图像文件可以被用于配置或重新配置FPGA。图像文件或类似的文件或程序可以经由网络链接或本地链接(例如,PCIe)从主机CPU被递送。图像文件中包括的信息可以被用于对节点的硬件块(例如,FPGA的逻辑块和可重新配置的互连)进行编程以实现预期的功能。预期的功能可以被实现以支持可以经由计算、网络和存储装置资源的组合提供的任何服务,诸如经由数据中心或其他用于递送服务的基础设施。

所描述的多个方面也可以在云计算环境中被实现。云计算可以指用于启动对可配置计算资源的共享池的按需网络访问的模型。例如,云计算可以在市场中被部署以提供对可配置计算资源的共享池的无处不在且方便的按需访问。可配置计算资源的共享池可以经由虚拟化被快速预分配并且以较低的管理工作量或服务提供商交互被释放,并且然后相应地被缩放(scale)。云计算模型可以由各种特性组成,诸如按需自助服务、广泛的网络访问、资源池、快速弹性、可测量的服务等。云计算模型可以被用于暴露各种服务模型,诸如,例如,硬件即服务(“HaaS”)、软件即服务(“SaaS”)、平台即服务(“PaaS”),以及基础设施即服务(“IaaS”)。云计算模型还可以使用不同的部署模型而被部署,诸如私有云、社区云、公共云、混合云等。

机器学习服务,诸如基于循环神经网络(RNN)、长短期记忆(LSTM)神经网络,或门控循环单元(GRU)的那些,可以使用本公开中所描述的系统和节点而被实现。在一个示例中,与服务相关的内容或其他信息,诸如单词、句子、图像、视频或其他这种内容/信息可以被转换为向量表示。

在一个示例中,神经网络模型可以包括许多层并且每层都可以被编码为以经由神经网络的训练而被获取的系数或常数的形式表达的权重的矩阵或向量。节点中的GPU或可编程硬件逻辑块可以处理矩阵或向量以执行各种操作,包括乘法、加法和其他针对表示与服务相关的编码信息的输入向量的操作。

以LSTM为示例,LSTM网络可以包含一系列重复的RNN层或其他类型的层。LSTM网络的每层都可以在给定的时间步长处消费输入,例如,来自先前时间步长的层的状态,并且可以产生新的输出集或状态集。在使用LSTM的情况下,单个内容块(chunk)可以被编码为单个向量或多个向量。作为示例,单词或单词的组合(例如,短语、句子,或段落)可以被编码为单个向量。每个chunk都可以被编码到LSTM网络的单独的层(例如,特定的时间步长)中。LSTM层可以使用方程组来描述,诸如如下所示的方程组:

it=σ(Wxixt+Whiht-1+Wcict-1+bi

ft=σ(Wxfxt+Whfht-1+Wcfct-1+bf)

ct=ftct-1ittanh(Wxcxt+Whcht-1+bc)

ot=σ(Wxoxt+Whoht-1+Wcoct+bo)

ht=ottanh(ct)

在该示例中,在每个LSTM层内,输入和隐藏状态可以使用向量操作(例如,点积、内积或向量加法)和非线性函数(例如,sigmoids、双曲线和正切)的组合而被处理。在某些情况下,最计算密集的操作可以出现来自于点积,这可以使用密集矩阵-向量和矩阵-矩阵乘法例程而被实现。在一个示例中,向量操作和非线性函数的处理可以被并行执行。

与训练数据(包括向量数据)相对应的值可以以数字格式表示。针对向量数据值的浮点表示是昂贵的,因为每个单独的点值都具有特定于该点值的指数。备选方案可以是固定点表示。性能、能源使用和存储装置要求可以通过对降低精度格式的使用而被提高来实现人工神经网络。这种格式可以使用一个小的(例如,3、4或5位)尾数和由两个或更多个浮点数所共享的指数来表示浮点数。使用降低精度格式的神经网络可以被称为量化的神经网络。

在一个示例中,固定点表示可以使用一组整数位和小数位来表达数字。固定点可以在硬件中利用整数算法进行有效处理,这可以使其成为当适用时的优选格式。固定点格式可以被表示为qX.Y,其中X是整数位数字,Y是小数位数字。块浮点数(BFP)可以将共享指数应用于固定点数字的块;例如,向量或矩阵。共享指数可以允许针对块的显著更高的动态范围,尽管单独的块成员相对于彼此具有固定范围。

量化的神经网络可以通过减少计算和存储器需求来提高运行神经网络的时延和吞吐量。然而,对降低精度格式(例如,降低精度的浮点格式、块浮点(BFP),或整数中的任何一项)的使用可以在训练神经网络时产生问题。随着神经网络收敛,在训练开始时可能合适的参数可能变得次优。此外,许多神经网络方法通常使用全精度浮点数(例如,32位或16位浮点数)。作为示例,神经网络的某些软件实现可以使用全精度浮点数。另一方面,神经网络的某些硬件实现可以使用降低精度的数字。由于软件和硬件加速神经网络的底层实现不同,计算中的小的差异可以出现,随着时间的推移可以引起错误。

许多神经网络算法的核心是矩阵乘法操作:y=xW,其中x是是输入激活,以及W是权重矩阵,在一个示例中,量化被应用于输入激活和权重矩阵以降低计算矩阵乘法的硬件成本。因此,矩阵乘法操作可以是y=Q(x)Q(W)。利用未量化的矩阵乘法在不影响结果的情况下,任意标量值可以被因式分解。然而,如果量化被应用于该形式,则量化的矩阵乘法的结果是受到两个方面的影响。首先,被量化的权重值不同,因此它们可以导致不同的量化的点集。其次,矩阵乘法之后的高精度标量乘法也可以改变结果。

量化的数据——例如,块浮点格式中的数据(例如,具有降低大小的尾数和/或共享指数)——可以被用于表示神经网络模型的软件或硬件/固件两者(例如,FPGA实现)实现中的权重或激活值。由于实现之间的底层算法不同,因此模拟结果与硬件/固件实现中的实际结果不同。某些公开的示例涉及生成针对神经网络的一致的结果,该神经网络使用使用量化的数据的软件被实现,以及使用也使用量化的数据的硬件/固件被实现。所公开技术的一个示例提供了一种与在硬件/固件上执行的实际操作相匹配的软件实现。因此,软件和硬件/固件实现可以有利地具有相同的结果。在一些示例中,匹配在硬件/固件中执行的实际操作的软件实现被称为神经网络模型的一致的软件实现。

图1是根据一个示例的用于自动生成一致的软件模型140的环境100的框图。在该示例中,经训练的软件模型110可以包括被用于表达神经网络层的指令和其他软件。作为示例,经训练的软件模型110可以包括包括计算(例如,矩阵乘法、ReLU、softmax)的指令。这些计算可以使用软件(诸如TensorFlow)在有状态的数据流图中被表达。全精度经训练的固件模型120可以指神经网络模型的指令和硬件/固件实现。在一个示例中,与经训练的软件模型110和全精度经训练的固件模型120相对应的权重和激活值可以以诸如浮点格式的格式而被表达。相反,量化的固件模型130可以指使用使用量化的数据的神经网络处理器的神经网络层的指令和硬件/固件实现,量化的数据可以以降低的精度格式表达。在一个示例中,神经网络处理器可以被配置为量化数据以生成量化的数据,并且然后使用与神经网络处理器相关联的硬件内所包含的矩阵向量乘法器对量化的数据执行矩阵操作。与使用量化的数据的神经网络处理器的一个实现相关的附加细节参考图3被提供。在一个示例中,一致的软件模型140可以包括被配置为由编译器处理用于使用与不同于神经网络处理器的至少一个处理器执行的指令,使得尽管使用量化的数据,这些指令产生的结果与使用硬件/固件实现的神经网络模型一致。

图2是量化的固件神经网络层200的一部分的框图。该部分包括神经网络部分(NNP)210和另一神经网络部分(NNP)250。NNP 210示出了可以对权重值A0和A1、输入向量值x0和x1,以及偏置向量值b0执行的操作。在该示例中,权重值A0和A1可以被存储在N×N矩阵中,其中N是用于与量化的固件神经网络200一起使用的神经网络处理器(例如,图3的神经网络处理器300)的本机维度。输入值x0和x1可以被存储在N×1矩阵中。NNP 210示出了乘法和累加(MAC_0 212和MAC_1 214)操作和加法操作(Add_0 216)两者。权重值A0和A1可以在乘法和累加操作之前被量化(分别为Q 222和Q 232)。输入值x0和x1也可以在乘法和累加操作之前被量化(分别为Q 224和Q 234)。乘法和累加(MAC_0 212)操作所生成的输出可以被量化(Q 226)。

继续参考图2,NNP 250示出了可以对权重值A2和A3、输入向量值x0和x1,以及偏置向量值b1执行的操作。在该示例中,权重值A2和A2也可以被存储在N×N矩阵中,其中N是用于与量化固件神经网络200一起使用的神经网络处理器的本机维度。输入值x0和x1也可以被存储在N×1矩阵中。NNP 250示出了乘法和累加(MAC_0 252和MAC_1 254)操作和加法操作(Add_0 256)。权重值A2和A3可以在乘法和累加操作之前被量化(分别为Q 262和Q 272)。乘法和累加(MAC_0 252)操作所生成的输出可以被量化(Q266)。量化可以涉及将连续或高精度值映射到离散的、低精度网格上。如果原始点接近它们被映射的量化值,那么人们期望产生的计算将接近原始计算。对数量化可以被用于执行量化。如前所述,以前面提到的各种方式将值从较高精度格式到较低精度格式的转换会导致量化。尽管图2示出了某些数目的神经网络部分,但量化的固件神经网络层200可以包括附加部分。此外,虽然图2示出了某些值被量化,但是附加值或更少的值可以被量化。作为示例,虽然图2示出了乘法和累加(MAC_1 214和MAC_3 254)的输出没有被量化,但是它们可以被量化。

图3是根据一个示例的具有量化的神经网络处理器300的框图。每个神经网络处理器300可以包括用于从其他处理器接收消息的输入消息处理器(IMP)304和用于处理到其他处理器或组件的传出消息的输出消息处理器(OMP)306。这样的消息可以经由网络302被接收和传送。每个神经网络处理器300还可以包括矩阵向量乘法器(MVM)310和两个或更多个多功能单元(MFU)(例如,MFU[0]340和MFU[1]360)。每个神经网络处理器300还可以包括矩阵存储器管理器370、向量存储器管理器380、向量DRAM 382,以及矩阵DRAM 384。在该示例中,处理器可以接受包含辅助信息的片外消息,诸如控制和标量数据以及有效载荷数据(例如,向量、矩阵或其他张量数据结构)。在该示例中,传入消息可以由轻量输入消息处理器(IMP)304处置,其将向量发送到向量存储器管理器380。IMP 304可以将矩阵发送到矩阵存储器管理器370。

向量数据(例如,对应于激活的数据)和矩阵数据(例如,对应于权重的数据)中的每个数据可以分别使用向量量化392和矩阵量化394被量化。因此,从向量存储器管理器380接收的向量数据可以是更高精度的格式(例如,FP16或FP32)并且向量量化392可以将向量数据从更高精度的格式转换为更低精度的格式(例如,块浮点格式)。类似地,经由网络302或以其他方式接收的矩阵数据可以是更高精度格式(例如,FP16或FP32),并且矩阵量化394可以将矩阵数据从更高精度格式转换为更低精度格式(例如,块浮点格式)。由于矩阵乘法操作在资源和时间方面更昂贵,因此在一个示例中,仅量化到MVM 310的输入可以是有利的。因此,在图3所示的示例中,仅对MVM 310的输入被量化。MFU的输入没有被缩放和量化。备选地,在另一示例中,对MVM 310和MFU两者的输入可以被量化。

继续参考图3,矩阵中的每个矩阵可以具有N×N的大小并且向量中的每个向量可以具有1×N的大小。在该示例中,与神经网络处理器300相对应的所有指令都可以对本机大小的数据进行操作。与由神经网络处理器300处置的应用相对应的逻辑向量和矩阵通常可以大于本机大小;在这些情况下,向量和矩阵可以会被分解为本机大小的瓦片。在一个示例中,BFP格式数据的块大小可以等于本机维度。因此,每个本机1×N向量可以具有共享指数,并且N×N矩阵的每行可以具有共享指数。向量数据和矩阵数据中的每个数据都可以具有二进制补码的尾数部分,并且针对向量数据和矩阵数据的尾数的大小可以不同。在一个示例中,可以不需要共享指数。相反,权重值可以被固定在整数范围内,例如,-2b-1到2b-1。这可以进一步简化被用于执行点积操作的硬件。

仍然参考图3,MVM 310可以包括向量寄存器文件(VRF)312、矩阵寄存器文件(MRF)320,以及瓦片引擎(例如,瓦片引擎314、316和318)。瓦片引擎可以从VRF 312接收输入矩阵和输入向量数据。MVM 310还可以包括精确格式转换器。在该示例中,可以针对每个瓦片执行量化操作。因此,矩阵量化394可以并行地量化针对瓦片引擎314、316和318中的每个引擎的权重值。类似地,向量量化392可以并行量化针对瓦片引擎314、316和318中的每个引擎的激活或输入值。在一个示例中,两个内部BFP格式可以由MVM 310使用用于表达其输入和输出:BFP short,用于向量和矩阵存储装置,以及BFP long,用于累加。在MVM 310的一个示例中,BFP short可以使用q1.15固定点值和共享的5位指数,而BFP long可以使用q34.40固定点值和共享的5位指数。在该示例中,矩阵向量乘法可能引起BFP long,它可以被转换回浮点格式作为最终输出阶段。因此,图3中所示的示例MVM 310可以包括输出阶段处的BFP到FP16转换器322、324和326。瓦片引擎314、316和318可以并行地向各自的转换器提供输出,如图3中的示例所示。

矩阵数据可以使用M个通道在矩阵DRAM 384和矩阵存储器管理器370之间被传送。向量存储器管理器380可以在C个通道之上移动向量数据。

继续参考图3,每个MFU(例如,MFU[0]340和MFU[1]360)可以包括横杆(crossbar)(例如,被标记为xbars的横杆)。MFU[0]340可以支持向量操作,诸如,向量-向量乘法和加法、Sigmoid函数、TanH函数、softmax操作、整流线性单元(ReLU)操作和/或激活块操作。因此,如图3所示,MFU[0]340可以包括横杆(例如,xbar 346、348和350),横杆可以通过操作的流水线序列从其输入总线流传输向量。因此,可以经由被标记为MulVrf 342的寄存器文件或被标记为AsVrf[0]344的另一寄存器文件来接收向量,并且这样的向量可以受乘法操作、加法操作或一些其他操作中的任何一项的影响。MFU[0]340可以包括用于执行加法的数个硬件块(例如,353、357和361)。MFU[0]340还可以包括用于执行乘法的数个硬件块(例如,352、356和359)。MFU[0]340还可以包括用于执行激活的数个硬件块(例如,351、354和358)。

仍然参考图3,MFU[1]360可以包括可以允许MFU[1]360从MFU[0]340接收输出并且对那些输出和经由ADD/SUB VRF 368接收的任何附加输入执行附加操作。MFU[1]360可以包括用于执行加法的数个硬件块(例如,369、371和372)。MFU[1]360还可以包括数个用于执行激活的硬件块。经由C通道接收的来自MFU[1]360的输出可以经由多路复用电路374被耦合到向量存储器管理器380。尽管图3示出了以某种方式布置的神经网络处理器300的一定数目的组件,但是可以存在更多或更少数目的不同布置的组件。

神经网络处理器300可以被用于启动使用较少数目的指令触发数百万数目的操作的指令的发布。作为示例,下面的表1示出了对应于完全参数化LSTM的指令:

表1

尽管表1示出了具有某些格式的某些数目的指令,但是神经网络处理器300可以执行更多或更少的具有不同格式的指令以达到相同的目标。

下面的表2示出了如何计算作为CNN评估的一部分的1×1卷积。

表2

如上表所示,用于计算的指令链之上的迭代数目可以被指定。接下来,根据需要,每个指令链的本机维度可以通过列缩放因子而被缩放。并且在从向量寄存器文件中读取向量数据之后,它可以与从矩阵寄存器文件中检索到的权重相乘。在执行CNN评估所要求的附加操作之后,输出可以被提供。作为示例,可以针对向量数据的每个元素执行逐点整流线性单元(ReLU)操作。

下面的表3示出了如何计算作为CNN评估的一部分的N×N卷积。下面类似于1×1卷积的指令不再赘述。Set2dWindows指令可以被用于设置总窗口大小,并且然后SetIterations指令可以被用于跨输入体积滑动该窗口。*_inc指令(例如,v_rd_inc和v_add_inc)可以被用于基于步幅增加指令的地址。作为示例,步幅为2可以引起被用于存储向量数据以进行操作(诸如,加法)的向量寄存器文件中的每隔一个向量的跳过。

表3

尽管图3示出了具有特定组件的神经网络处理器,包括矩阵向量乘法器和多功能单元,但是本文所描述的方法和概念可以被包括作为被配置为执行与神经网络训练相关的操作的其他处理器的一部分。作为示例,被配置为执行诸如乘法和累加操作、加法操作或其他这种操作之类的操作的任何处理器都可以执行量化,并且因此可以需要用于生成一致的神经网络指令或操作的系统和相关方法。

图4是量化的软件神经网络层400的一部分的框图。该部分包括神经网络部分(NNP)410和另一神经网络部分(NNP)450。NNP 410示出了可以对权重值A0和A1、输入向量值x0和x1,以及偏置向量值b0执行的操作。NNP 410示出了矩阵乘法(MatMul 412和MatMul414)操作和加法操作(Add 416)两者。权重值A0和A1可以在矩阵乘法操作之前被量化(分别为Q 422和Q 432)。输入值x0和x1也可以在矩阵乘法操作之前被量化(分别为Q 424和Q434)。由矩阵乘法(MatMul 412)操作所生成的输出可以被量化(Q 426)。

继续参考图4,NNP 450示出了可以对权重值A2和A3、输入向量值x0和x1,以及偏置向量值b1执行的操作。NNP 450示出了矩阵乘法(MatMul 452和MatMul 454)操作和加法操作(Add 456)两者。权重值A2和A3可以在矩阵乘法操作之前被量化(分别为Q 462和Q 472)。输入值x0和x1也可以在矩阵乘法操作之前被量化(分别为Q 464和Q 474)。由矩阵乘法(MatMul 452)操作所生成的输出可以被量化(Q 466)。量化可以涉及将连续或高精度值映射到离散的、低精度网格上。如果原始点接近它们被映射的量化值,那么人们期望产生的计算将接近原始计算。对数量化可以用于执行量化。如前所述,以前面提到的各种方式对值从较高精度格式到较低精度格式的转换会引起量化。尽管图4示出了某些数目的神经网络部分,但量化的软件神经网络层400的一部分可以包括附加部分。此外,虽然图4示出了某些值被量化,附加值或更少的值可以被量化。作为示例,虽然图4示出了矩阵乘法(MatMul 414和MatMul 454)操作的输出未被量化,但是它们可以被量化。

图5是根据一个示例的用于自动生成与一致的软件神经网络层相对应的指令的系统500的框图。系统500可以包括经由总线系统502互连的处理器510、存储器520、输入/输出设备540、显示器550和网络接口560。存储器520可以包括固件神经网络处理(NNP)代码522、软件神经网络处理(NNP)代码524,以及一致性转换代码526。下面的表4示出了可以是固件NNP代码522的一部分的指令,该指令被配置为处理如图2中所示的量化的固件模型的一部分的数据。在该示例中,这些指令包括除了可以由神经网络处理器300执行的指令之外的附加信息。作为示例,固件NNP代码522可以包括提示。

表4

下面的表5包括示例一致性转换代码526。一致性转换代码526可以包括:(1)用于解析固件NNP代码522的指令,以及(2)用于实现与固件神经网络处理器相关联的操作的指令处理程序(handler)。

表5

此外,用于处置神经网络处理器300和另一处理器的差异的数据如何被处理的数据操纵功能可以被需要。作为示例,数据操纵函数可以被用于将具有神经网络处理器300的本机维度的矩阵转换为适合用于由与另一处理器相对应的软件指令消费的数据。在一个示例中,这可以包括对数据进行零填充以使得以本机维度格式组织的数据成为适合用于软件指令(例如,TensorFlow指令)的格式。下面的表6示出了用于数据集准备的示例代码。

表6

下面的表7示出了软件神经网络处理(NNP)代码524的示例。该示例示出了用于TensorFlow的代码。

表7

尽管图5示出了以某种方式布置的系统500的某些数目的组件,但是也可以使用不同布置的附加的或更少的组件。此外,尽管存储器520示出了某些代码块,但是由该代码所提供的功能可以被组合或分布。此外,各种代码块可以被存储在非瞬态计算机可读介质中,诸如非易失性介质和/或易失性介质。非易失性介质包括例如硬盘、固态驱动器、磁盘或磁带、光盘或磁带、闪存、EPROM、NVRAM、PRAM或其他这种介质,或这种介质的网络版本。易失性介质包括例如动态存储器,诸如DRAM、SRAM、高速缓存或其他这种介质。

此外,如本文所述,术语指令不限于以特定编码或经由特定句法表达的“指令”。作为示例,指令可以包括状态机或其他形式的编码,其可以被用于捕获指令可以执行的操作。因此,总而言之,无论指令的表达或性质如何,如果神经网络层以硬件实现并且涉及量化操作,则可以使用图5的系统500。

图6示出了根据一个示例的用于自动生成与一致的软件神经网络模型相对应的指令的方法的流程图600。步骤610可以包括接收第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,其中神经网络处理器被配置为量化第一数据集以生成量化的数据集,并且然后使用与神经网络处理器相关联的硬件内所包含的矩阵向量乘法器,对量化的数据集执行矩阵向量乘法操作,以生成第一结果集。第一指令可以与图5的固件NNP代码522相对应。这些指令可以经由任何输入/输出设备540或经由网络接口560被接收。如前所述,这些指令可以被配置为与神经网络处理器300一起使用。

步骤620可以包括处理第一指令以自动生成第二指令,第二指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,使得第二指令在被至少一个处理器执行以执行与神经网络层相对应的矩阵乘法操作时,生成与第一结果集一致的第二结果集。作为该步骤的一部分,在一个示例中,一致性转换代码526可以由处理器510执行以处理固件NNP代码522。该处理可以引起第二指令的自动生成,第二指令可以是图5的软件NNP代码524。步骤620可以包括提取关于所述矩阵向量乘法操作与从softmax操作、ReLU操作或加法操作中选择的操作之间的依赖关系的信息。因此,在该示例中,一致性转换代码526可以提取关于操作之间的依赖关系的信息。该信息反过来可以被用于生成第二指令(例如,软件NNP代码524)。作为示例,所提取的依赖性信息可以被用于创建数据流依赖性作为软件NNP代码524的一部分。

尽管图6描述了以特定顺序执行的数个步骤,但是可以以不同的顺序执行更多或更少的步骤。

总之,本公开涉及一种方法,包括接收第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,其中神经网络处理器被配置为量化第一数据集以生成量化的数据集,并且然后使用与神经网络处理器相关联的硬件内所包含的矩阵向量乘法器,对量化的数据集执行矩阵向量乘法操作,以生成第一结果集。该方法还包括处理第一指令以自动生成第二指令,第二指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,使得第二指令在被至少一个处理器执行以执行与神经网络层相对应的矩阵乘法操作时,生成与第一结果集一致的第二结果集。

处理第一指令以自动生成第二指令还包括:提取关于矩阵向量乘法操作与从softmax操作、ReLU操作或加法操作中选择的操作之间的依赖关系的信息。处理第一指令以自动生成第二指令可以包括将第一数据集的形式转变成适合用于与第二指令一起使用的另一形式。量化的数据集可以包括量化的训练数据集,该量化的训练数据集用于与关联于第二指令的操作一起使用。

第一数据集以具有第一精度的第一精度格式表示,并且量化的数据集以具有低于第一精度的第二精度的第二精度格式表示。第一精度格式包括浮点格式,并且其中第二精度格式包括从以下各项精度格式中选择的一项精度格式:整数格式、降低的浮点精度格式或块浮点格式。

第一数据集以N×N矩阵形式组织,并且其中N是大于1的整数并且N是与所述矩阵向量乘法器相关联的本机维度,并且其中处理第一指令以自动生成所述第二指令可以包括:将第一数据集从N×N矩阵形式转变为适合用于与第二指令一起使用的另一形式。

在另一示例中,本公开涉及一种包括至少一个处理器和存储器的系统。该存储器可以包括第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,神经网络处理器具有包含在与神经网络处理器相关联的硬件内的矩阵向量乘法器和包含在与神经网络处理器相关联的硬件内的多功能单元,其中神经网络处理器被配置为量化第一数据集以生成第一量化的数据集,并且然后:(1)使用与神经网络处理器相关联的硬件内包含的矩阵向量乘法器,对第一量化的数据集执行矩阵操作,以生成第一输出数据集,(2)量化第一输出数据集以生成第一量化的输出数据集,以及(3)使用与神经网络处理器相关联的硬件内的多功能单元,对第一量化的输出数据集执行标量操作,以生成第二输出数据集;该存储器还可以包括第二指令,第二指令被配置为处理第一指令,以生成第三指令,第三指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,其中第三指令包括用于执行矩阵乘法操作的指令和用于执行标量操作以处理神经网络层的指令。

第二指令还被配置为:提取关于矩阵向量乘法操作与从softmax操作、ReLU操作或加法操作中选择的操作之间的依赖关系的信息。第二指令还包括被配置为将第一数据集的形式转变成适合用于与第三指令一起使用的另一形式的指令。第一数据集以具有第一精度的第一精度格式表示,并且其中第一量化的数据集和第一量化的输出数据集中的每个数据集都以具有低于所述第一精度的第二精度的第二精度格式表示。第一精度格式包括浮点格式,并且其中第二精度格式包括从以下各项精度格式中选择的一项精度格式:整数格式、降低的浮点精度格式,或块浮点格式。

量化的数据集包括量化的训练数据集,量化的训练数据集用于与关联于第二指令的操作一起使用。第一数据集以N×N矩阵形式组织,并且其中N是大于1的整数并且N是与矩阵向量乘法器相关联的本机维度,并且其中第二指令还包括被配置为将所述第一数据集从N×N矩阵形式转变为适合用于与第三指令一起使用的另一形式的指令。

在又一示例中,本公开涉及包括与方法相对应的代码的非瞬态计算机可读介质。该方法可以包括接收第一指令,第一指令被配置为使用神经网络处理器处理与神经网络层相对应的第一数据集,其中神经网络处理器被配置为量化第一数据集以生成量化的数据集,并且然后使用与神经网络处理器相关联的硬件内所包含的矩阵向量乘法器,对量化的数据集执行矩阵向量乘法操作,以生成第一结果集。该方法还包括处理第一指令以自动生成第二指令,第二指令被配置用于与不同于神经网络处理器的至少一个处理器一起使用,使得第二指令在被至少一个处理器执行以执行与神经网络层相对应的矩阵乘法操作时,生成与第一结果集一致的第二结果集

处理第一指令以自动生成第二指令还包括:提取关于矩阵向量乘法操作与从softmax操作、ReLU操作或加法操作中选择的操作之间的依赖关系的信息。第一数据集以具有第一精度的第一精度格式表示,并且量化的数据集以具有低于第一精度的第二精度的第二精度格式表示。第一精度格式包括浮点格式,并且其中第二精度格式包括从以下各项精度格式中选择的一项精度格式:整数格式、降低的浮点精度格式或块浮点格式。

量化的数据集可以包括量化的训练数据集,该量化的训练数据集用于与关联于第二指令的操作一起使用。第一数据集以N×N矩阵形式组织,并且其中N是大于1的整数并且N是与矩阵向量乘法器相关联的本机维度,并且其中处理第一指令以自动生成第二指令可以包括将所述第一数据集从N×N矩阵形式转变为适合用于与第二指令一起使用的另一形式。

应当理解,本文所描述的方法、模块和组件仅仅是示例性的。备选地或附加地,本文所描述的功能可以至少部分地由一个或多个硬件逻辑组件来执行。例如但不限于,可以被使用的硬件逻辑组件的说明性类型包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑器件(CPLD)等。在抽象但仍然明确的意义上,实现相同功能的任何组件排列都有效地“关联”,从而实现所需的功能。因此,本文中组合以实现特定功能的任何两个组件可以被视为彼此“关联”,从而实现期望的功能,而与架构或中间组件无关。同样,任何两个如此关联的组件也可以被视为彼此“可操作地被连接”或“被耦合”以实现所需的功能。

与本公开中所描述的一些示例相关联的功能还可以包括被存储在非瞬态介质中的指令。本文所使用的术语“非瞬态介质”是指存储使机器以特定方式操作的数据和/或指令的任何介质。示例性非瞬态介质包括非易失性介质和/或易失性介质。非易失性介质包括例如硬盘、固态驱动器、磁盘或磁带、光盘或磁带、闪存、EPROM、NVRAM、PRAM或其他这种介质,或这种介质的网络版本。易失性介质包括例如动态存储器,诸如DRAM、SRAM、高速缓存或其他这种介质。非瞬态介质与传输介质不同,但可以与传输介质结合使用。传输介质被用于向机器传送数据和/或指令或从机器传送数据和/或指令。示例性传输介质包括同轴电缆、光纤电缆、铜线和无线介质,诸如无线电波。

此外,本领域技术人员将认识到,上述操作的功能之间的界限仅仅是说明性的。多个操作的功能可以组合成单个操作,和/或单个操作的功能可以分布在附加操作中。此外,备选实施例可以包括特定操作的多个实例,并且在各种其他实施例中可以改变操作的顺序。

尽管本公开提供了具体示例,但是在不脱离如以下权利要求中阐述的本公开的范围的情况下可以进行各种修改和改变。因此,说明书和附图被认为是说明性的而不是限制性的,并且所有这些修改都旨在包括在本公开的范围内。本文关于特定示例描述的任何益处、优点或问题的解决方案都不应被解释为任何或所有权利要求的关键、必需或基本特征或要素。

此外,本文所使用的术语“一个(a)”或“一个(an)”被定义为一个或多于一个。此外,在权利要求中使用诸如“至少一个”和“一个或多个”的介绍性短语不应被解释为暗示由不定冠词“a”或“an”引入另一权利要求要素将包含这种引入的权利要求要素的任何特定权利要求限制为仅包含一个这种要素的发明,即使同一权利要求包括介绍性短语“一个或多个”或“至少一个”以及不定冠词,诸如“a”或“an”。这同样适用于定冠词的使用。

除非另有说明,诸如“第一”和“第二”的术语被用于在这种术语所描述的元素之间任意区分。因此,这些术语不一定旨在指示这种元素的时间上的或其他优先级。

34页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:用于自动化系统组件与多个信息源的可互操作通信的系统和方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!