深度学习处理中乘法和累加运算的非对称量化的制作方法

文档序号:18415079发布日期:2019-08-13 19:16阅读:435来源:国知局
深度学习处理中乘法和累加运算的非对称量化的制作方法

本发明的实施例涉及神经网络计算(neuralnetworkcomputing),更具体地,涉及执行乘法和累加运算的硬件电路。



背景技术:

由于其在计算机视觉(computervision)、语言识别(speechrecognition)、自然语言处理(naturallanguageprocessing)、生物信息学(bioinformatics)等领域的优越性能,深度学习(deeplearning)已经获得了广泛认可。深度学习是使用包括多个隐藏层的人工神经网络(artificialneuralnetwork)的机器学习的分支。由神经网络执行的一个核心计算是卷积(convolution),其由一系列的乘法和累加(multiply-and-accumulate,mac)运算组成。

神经网络不仅是计算密集而且存储器访问量大。对于特征提取,可以在一组输入通道(例如,红、绿以及蓝)将输入图像与一组滤波器卷积,接着进行非线性计算(nonlinearcomputation)、下采样计算(down-samplingcomputation)以及类分数计算(classscorescomputation)。这些计算通常引发对处理器外部系统存储器的大量数据访问。一些传统的系统减少了用于表示数据值的位的数目以便以精确性为代价节省存储器频宽。为了在节省存储器频宽的同时提高精确度,一些其他的传统系统使用非对称量化用于减少大小的数据值,因为非对称的数据表示相比于对称数据表示,相同数目的位提供更高的精确度。这些非对称量化值在它们用于mac运算的输入之前,被转换成对称量化的数据值。这样的转换可以显著地增加系统开销。因此,需要改进神经网络计算。



技术实现要素:

本发明提供了一种对神经网络中非对称量化数据执行乘法和累加运算的装置和方法。

在一个实施例中,提供了一种对神经网络中非对称量化数据执行乘法和累加(mac)运算的装置。所述装置包括mac硬件单元来对第一数据序列以及第二数据序列执行所述mac运算来生成非对称mac输出。所述第一数据序列以及所述第二数据序列两者是非对称量化的。所述装置进一步包括累加器硬件单元来在所述乘法和累加硬件单元执行所述mac运算的同时,累加所述第一数据序列来生成累加输出。所述装置进一步包括乘法和加法(multiply-and-add,mad)硬件单元来将所述累加输出与第二偏移相乘来生成乘积输出,以及将所述乘积输出、所述非对称mac输出以及在运行前计算的预先计算值相加来生成最终输出。所述第二偏移指示所述第二数据序列相对于0的不对称量。

在另一个实施例中,提供了一种对神经网络中非对称量化数据执行mac运算的方法。所述方法包括:对第一数据序列以及第二数据序列执行mac运算来生成非对称mac输出,其中所述第一数据序列以及所述第二数据序列两者是非对称量化的;在所述mac运算的同时,累加所述第一数据序列来生成累加输出;将所述累加输出与第二偏移相乘来生成乘积输出,其中所述第二偏移指示所述第二数据序列相对于0的不对称量;以及将所述乘积输出、所述非对称mac输出以及在运行前计算的预先计算值相加来生成最终输出。

本发明之一实施例通过在mac运算的基础上增加额外的累加运算,其在每一数据周期与mac运算一起进行,当完成mac运算与累加运算,基于两者的输出结果生成最终输出。所提出之装置与方法在处理非对称量化数据的同时又不会增加性能与存储器频宽的开销。

实施例的优点将在下面的描述中详细解释。

附图说明

本发明以示例而非限制的方式示出,在附图的图式中,相同的附图标记表示类似的元件。需要注意的是,本发明中对“一个”实施例的不同引用不一定指相同的实施例,这种引用意味着至少一个。此外,当结合实施例描述特定特征、结构或特性时,认为无论是否明确描述,结合其他实施例实现这种特征、结构或特性都在本领域技术人员的知识范围内。

图1示出了根据一个实施例的神经网络计算的系统。

图2示出了卷积运算的示例。

图3示出了根据第一实施例的mac电路。

图4示出了根据第二实施例的mac电路。

图5示出了根据第三实施例的mac电路。

图6示出了根据一个实施例的用于对非对称量化数据执行mac运算的方法的流程图。

具体实施方式

在后续描述中,给出了许多具体细节。然而,应该理解,可以在没有这些具体细节的情况下来实施本发明的实施例。在其他示例中,没有具体示出公知的电路、结构以及技术以避免混淆对这些描述的理解。然而,本领域技术人员将认识到,可以没有这些具体细节来实施本发明。本领域技术人员根据所包括的描述,将能够实施适当的功能而不需要过度实验。

本发明的实施例提供了用于对非对称量化数据执行精确且有效的乘法和累加(mac)运算的系统、装置以及方法。mac运算可以由神经网络处理器执行,神经网络处理器也被称为深度学习加速器(deeplearningaccelerator,dal)或加速器。卷积是神经网络计算中的一个核心计算,其由对输入激活(inputactivation)以及滤波器权重(filterweight)的一系列mac运算组成。为了减少数据大小以及在主存储器与加速器之间传输数据所需要的频宽,可以量化输入激活以及滤波器权重的每一值来减少用于表示该值的位的数目。例如,一个32位浮点数(floatingpointnumber)可以由一个8位整数来表示,以致数据大小以及存储器频宽减少到原始值的25%。在一些传统的系统中,量化可以关于0对称,例如,每个值由-127与127之间的整数表示。然而,将要由神经网络处理的输入激活的范围通常相对于0不对称(即,这一范围的最小值以及最大值相对于0不对称)。同样,滤波器权重的范围通常也相对于0不对称。因此,经受mac运算的数据可以是非对称量化数据。

通常,当数值由相同数目的位表示时,非对称量化值相比于对称量化值具有更小的量化误差。这是因为非对称量化使实际值范围能够使用所有位。例如,可能需要(n+1)个位来表示对称量化值,以致其可以具有与由n个位表示的非对称量化值的相同的精度。

神经网络处理由一系列层(layer)组成。在每一层,由加速器中的神经网络引擎(也称为“引擎”)将输入特征图处理成输出特征图。每个输入特征图以及输出特征图都是一个多维阵列,也称为张量(tensor)。例如,每个输入特征图以及输出特征图可以具有三个维度,包括宽度、高度以及深度。出于解释的目的,在后续描述中,假定宽度、高度以及深度维度分别在x、y以及z维度上对齐。

图1示出了根据一个实施例的神经网络计算的系统100。系统100包括一个或多个处理器130(例如,中心处理器单元(cpu)、图像处理单元(gpu)、数字信号处理器(dsp)、媒体处理器或其他通用和/或专用处理电路)。处理器130耦合到协同处理器(co-processor)或处理单元,也称为加速器110,其执行对非对称量化数据的神经网络运算,包括但不限于mac运算。加速器110还耦合到加速器110外部的系统存储器140。系统存储器140可以包括一个或多个动态随机存取存储器(dram)装置或其他易失性或非易失性存储装置。

加速器110包括一个或多个引擎(例如,引擎111-114)。引擎111-114中的每一个包括用于执行数学计算的硬件电路(例如,乘法器、加法器、累加器等等)。引擎111-114之一(如卷积引擎)可以包括mac电路101,用于执行mac运算作为卷积运算的一部分。此外,引擎111-114可以包括但不限于:用于执行relu运算的校正引擎、批量归一化(batchnormalization,bn)引擎、用于执行下采样操作的池引擎(poolingengine)等等。

在一个实施例中,加速器110包括缓冲存储器150,其除了其他方面还存储用于卷积的输入数据以及滤波器权重。在一个实施例中,缓冲存储器150可以包括静态随机存取存储器(sram)装置或其他易失性或非易失性存储器。

加速器110还可以包括控制器120,其将来自处理器130的命令派送到引擎111-114。根据这些命令,引擎111-114从缓冲存储器150中检索输入数据并执行神经网络计算。加速器110通过i/o接口160从系统存储器140加载数据并存储数据到系统存储器140。从系统存储器140加载的数据可以存储于缓冲存储器150中用于快速数据存取。

在可选实施例中,控制器120可以是程序顺序发生器(programsequencer),其从系统存储器140中提取程序来指导引擎111-114的运算。该可选实施例中的加速器110可以称为神经处理单元(neuralprocessingunit,npu)。

在描述本发明的实施例之前,解释卷积运算中使用的一些术语是有益的。图2示出了卷积运算的示例。可以使用一组滤波器220(k个)对输入特征图210执行卷积运算。输入特征图210具有宽度=wi,高度=hi以及深度=c。每一滤波器220具有宽度=s,高度=r以及深度c。通常,每一滤波器220相比于输入特征图210在高度以及宽度上更小。例如,一个滤波器可以由xy平面的5×5个权重组成,即,沿着x维度的5个权重以及沿着y维度的5个权重。输入特征图210(例如,输入图像)在每一x以及y维度上可以具有数百个或数千个或更多个像素。除了x以及y维度之外,输入特征图210有长度为c(即,c个深度切片(slice))的深度(z)维度。每个滤波器220在z维度还具有c个深度切片。在卷积过程中,滤波器(例如,滤波器221)在xy平面中滑过输入特征图210,以及计算在滤波器权重与输入特征图210的对应值之间的点积(dot-product)。更具体地,点积可以由在滤波器221的权重与输入特征图210的一部分之间进行mac运算来计算,输入特征图210这一部分与滤波器221对齐并且具有与滤波器相同的大小。输入特征图210的这一部分称为输入激活280。重复相同的计算进程用于输入特征图210中的每一输入激活。

输出特征图230是在输入图像的每一空间位置的滤波响应的表示。输出特征图230具有宽度=wo、高度=ho以及深度=k。具有k个滤波器220的卷积产生在z维度具有深度k(也就是,k个深度切片)的输出特征图230。k个深度切片的每一个对应于在输入特征图210与k个滤波器220之一之间的卷积的输出。输出特征图230中的每一数据点(也称为输出数据值)是输入激活280与k个滤波器220之一之间卷积的结果。例如,输入激活280与滤波器221的卷积产生输出特征图230中的数据点231(由黑色正方形表示)。数据点231可以由一系列mac运算来计算。在一个实施例中,输入特征图210以及滤波器权重可以存储于系统存储器140作为非对称量化数据来减小数据大小以及所需要的存储器频宽。

参考回图1,加速器110可以包括用于对两个序列的非对称量化数据执行mac运算(此处称为“非对称mac运算”)的电路(例如,mac电路101),而无需首先将非对称量化数据转换成对称量化数据。需要注意的是,“非对称mac运算”中的术语“非对称”指量化数据的不对称,而不是运算本身。因为两个数据序列可能具有相对于0的不同偏移,直接对两个数据序列执行mac运算可能生成不准确的结果。在一个实施例中,通过向非对称mac运算的结果添加校正值来补偿非对称。补偿结果(也称为“最终输出”)与对对应两个序列的对称量化数据执行mac运算(此处称为“对称mac运算”)的结果是相同的或在可允许的误差范围内近似的。可以与非对称mac运算一起计算(即并行计算)一个校正值,以及可以基于滤波器的先验知识(prioriknowledge)以及输入激活的范围优先于非对称mac运算预计算其他校正值。在下文中,qa[i]以及qw[i][j]分别表示非对称量化输入激活数据点以及非对称量化滤波器权重,以及a[i]以及w[i][j]分别表示对称量化输入激活数据点以及对称量化滤波器权重。

在一个实施例中,mac电路101包括执行非对称mac运算以及校正值计算的硬件元件。对称量化数据(a[i]以及w[i][j])以及相对的非对称量化数据(qa[i]以及qw[i][j])之间的关系可以由下文的等式描述:

a[i]=qa[i]+ofa;(1)

w[i][j]=qw[i][j]+ofw[j];(2)

参考图2中的卷积示例,等式(3)中的值n等于r×s×c,即,输入激活与滤波器之间一个卷积运算的大小。ofa称为第一偏移,其指示包含输入激活的输入特征图210相对于0的不对称的量。ofw[j],j=1,...,k,称为第二偏移,其指示第j个滤波器权重相对于0的不对称的量。因此,通常在神经网络的训练阶段确定输入特征图的范围以及第一偏移(其是0与范围中心之间的差异)。类似地,通常在神经网络运行前确定滤波器权重的范围以及第二偏移。在一个实施例中,第二偏移指示由神经网络使用的一个或多个滤波器的权重相对于0的不对称的量。第二偏移可以具有由卷积运算中神经网络使用的不同滤波器的不同值。或者,第二偏移可以是由卷积运算中神经网络使用的所有滤波器的定值(constantvalue)。

为了便于讨论,在后续关于等式(3)的描述中,称为非对称mac输出,称为累加输出,以及称为预先计算值。称为最终输出,其可以是输出特征图中的一个数据点。从滤波器权重qw[i][j]以及偏移ofa以及ofw[j]的累加来计算预先计算值,滤波器权重qw[i][j]以及偏移ofa以及ofw[j]在神经网络的训练阶段可以是已知的。在一个实施例中,可以在神经网络的推理阶段动态地计算第一偏移ofa;即,不同的输入可以具有不同的偏移。在一个实施例中,第二偏移ofw可以是滤波器相关的,即,不同的滤波器可以具有不同的偏移。可选地,所有滤波器可以具有相对于0不对称的一个范围中的滤波器权重。这一范围的偏移(相对于0)可以由所有滤波器共享。在一个实施例中,预先计算值可以包括偏置值(biasvalue)bias,其被添加到最终输出来移除(即,抵消)最终输出序列的平均值,其中该最终输出序列可以形成输出特征图的一个或多个深度切片。这是因为神经网络通常在卷积后包括一个归一化操作。该归一化操作使得该最终输出序列具有0平均值以及等于1的标准偏差(standarddeviation)。在卷积期间,通过偏置值从每一最终输出移除平均值,将简化后续归一化操作。对于由神经网络使用的不同滤波器,该偏置值可以是不同的,即,bias可以是滤波器相关的并因此将第j个滤波器的偏置值标记为bias[j]。可选地,对于由神经网络使用的所有滤波器,偏置值可以是相同的。

图3示出了根据一个实施例的电路300,其是mac电路101(图1)的示例。电路300包括mac硬件单元310、累加器硬件单元(也称为acc硬件单元)320以及乘法与加法硬件单元(也称为mad硬件单元)330。在这一示例中,mac硬件单元310包括mac315,其是进一步包括乘法器311、加法器312以及累加寄存器(accumulatingregister,acr)313的硬件元件。加法器312以及acr313形成累加乘法器311的输出的累加器。acc硬件单元320包括累加器(也称为acc)325,其是进一步包括加法器321以及acr322的硬件元件。mad硬件单元包括乘法器331以及加法器332,共同称为mad335。在可选实施例中,mac硬件单元可以包括多个乘法器以及多个累加器,acc硬件单元320可以包括多个累加器,以及mad硬件单元330可以包括多个乘法器以及多个加法器。

在一个实施例中,mac硬件单元310生成非对称mac输出。acc硬件单元320生成累加输出。mad硬件单元330将累加输出与ofw相乘生成乘积输出,以及将乘积输出添加到非对称mac输出以及预先计算值来生成最终输出。

在图3的示例中,两个数据序列可以输入到mac硬件单元310来生成输出特征图中的数据点:第一序列qa[i]包括输入激活以及第二序列qw[i][j]包括第j个滤波器的权重,其中i是从1到输入激活大小(例如,r×s×c)的运行索引(runningindex)。每个数据周期可以将数据对(qa[i],qw[i][j])输入到mac硬件单元310。mac硬件单元310在每一数据周期对数据对进行操作以及在n个数据周期结束时生成非对称mac输出,其中n等于(r×s×c)。acc硬件单元320在每一数据周期接收并累加输入激活qa[i]的一个元素。mad硬件单元330在每当生成累加输出以及非对称mac输出时对mac硬件单元310的输出以及acc硬件单元320的输出操作一次(例如,每n个数据周期一次),即执行一次乘法以及加法,在一个实施例中,每当生成累加输出以及非对称mac输出时,mad硬件单元将累加输出与第二偏移相乘生成乘积输出,以及将乘积输出、非对称mac输出以及在运行前计算的预先计算值相加来生成一个输出,mad硬件单元330的输出是最终输出。

由acc硬件单元320以及mad硬件单元330进行的计算将校正值添加到非对称mac输出。校正值将非对称mac输出转换成为对称mac输出。因为乘法器331(在mad硬件单元330中)每个n数据周期仅执行一次乘法,并且加法器321以及332(在acc硬件单元320以及mad硬件单元330中)对开销有极小的影响,从而最小化了该转换的开销。直接对非对称量化数据元素执行mac运算,而不需要首先将非对称量化数据元素的每一者转换成对称量化数据元素,显著地减少了计算开销。

图4示出了根据另一个实施例的电路400,其是mac电路101(图1)的示例。电路400包括mac硬件单元410,其进一步包括多个mac315(图3)。在一个实施例中,mac硬件单元410可以包括p个mac315的阵列,其中p是大于1的整数。p个mac315可以在p个不同的输入激活以及相同滤波器的权重上并行工作。参考图2的示例,在该实施例中p等于wo×ho,mac硬件单元410可以生成p个非对称mac输出,其对应于每n个数据周期(例如,n=r×s×c)输出特征图230中所有xy平面的数据点。输出特征230中的所有xy平面的数据点用单个滤波器生成。在可选实施例中,p可以等于最适合于预期计算的不同值。

电路400进一步包括acc硬件单元420,其进一步包括p个累加器325的阵列。acc硬件单元420每个数据周期工作并且在每n个数据周期的结束生成p个累加的输出。电路400进一步包括mad硬件单元430,其进一步包括m个mad335,其中m是非负整数。在一个实施例中,m不大于p。mad硬件单元430每n个数据周期接收p个非对称mac输出以及p个累加输出。基于电路400的吞吐量需求,可以确定m的值。对于m=1,mad硬件单元430顺序地生成p个最终输出,每次一个。对于m=p,mad硬件单元430并行生成p个最终输出。

图5示出了根据另一个实施例的电路500,其是mac电路101(图1)的示例。类似于图3中的电路300以及图4中的电路400,电路500包括mac硬件单元510、acc硬件单元520以及mad硬件单元530。mac硬件单元510进一步包括(p×k)个mac315的阵列。参考图2的示例,k是输出特征图230中z维度深度切片的数目。(p×k)个mac315在p个不同的输入激活以及k个滤波器权重上并行工作。因此,在n个数据周期中(例如,n=r×s×c),mac硬件单元510可以生成对应于整个输出特征图230的(p×k)个非对称mac输出。acc硬件单元520包括p个累加器325的阵列,每个累加大小为n的相应的输入激活。acc硬件单元520在每一数据周期工作并且在每n个数据周期结束时生成p个累加的输出。mac硬件单元530包括m个mad335,其中m是非负整数。mad硬件单元530在每n个数据周期结束时接收(p×k)个非对称mac输出以及p个累加输出。每一累加输出从相同的输入激活中计算,以及可以重新使用累加输出k次作为共享相同输入激活的一组k个非对称mac输出的校正值。基于电路500的吞吐量需求,可以确定m的值。对于m=1,mad硬件单元530顺序地生成(p×k)个最终输出,每次一个。对于m=p×k,mad硬件单元530并行生成p×k个最终输出。

此处描述的mac运算可以是被实施为两个数据序列之间点积的卷积运算的一部分。可选地,mac运算可以是不同运算的一部分。例如,用于卷积的winograd快速算法也可以使用上述mac运算。winograd快速算法包括四步:(1):滤波器权重的转换;(2):输入激活的转换;(3):在对应的深度切片中转换的输入激活与转换的滤波器权重之间逐元素乘法(element-wisemultiplication),以及累加跨越z维度中的所有深度切片的在相同(x,y)坐标位置中的逐元素乘法结果;以及(4):(3)的结果的转换。winograd快速算法中使用的转换矩阵在本领域是已知的,在此不再赘述。将这些转换矩阵应用于数据阵列在此称为“winograd转换数据阵列”。逐元素乘法以及跨越z维度的累加可以由上文描述的电路300、400或500所执行。

参考回图2的示例,输入激活280以及每一滤波器220的权重被非对称量化。winograd快速算法首先将每一滤波器转换成与输入激活相同的大小。例如,输入激活可以具有宽度=4、高度=4以及深度=c。每一滤波器可以具有宽度=3、高度=3以及深度=c。k个滤波器220的权重首先从(3×3×c×k)winograd转换到(4×4×c×k)阵列,标记为qw′[i][j],其中i=1,...,c以及j=1,...,k。对于输入特征图中的每一(4×4×c)输入激活,后续的步骤(a)-(c)可以重复直到处理完整个特征图。在步骤(a),输入激活被winograd转换成(4×4×c)阵列,标记为qa′[i],其中i=1,...,c。在步骤(b),对于每一滤波器j=1,...,k,在qa′[i]以及qw′[i][j]间执行逐元素乘法。累加跨越所有深度切片的在相同(x,y)坐标位置的逐元素乘法结果。逐元素乘法以及累加可以直接地在非对称量化数据上执行作为前述提到的非对称mac运算,以及将校正值添加到非对称mac运算的结果。更具体地,在步骤(b)的每一滤波器j=1,...,k的运算可以由下列等式描述:

a′[i]=qa′[i]+ofa′;(4)

w′[i][j]=qw′[i][j]+ofw′[j];(5)

a′[i]以及w′[i][j]分别是非对称量化输入激活以及第j个滤波器的权重,ofa′以及ofw′[j]分别是非对称量化输入激活以及第j个滤波器的权重的偏移。因此,如结合等式(1)-(3)所提到的,对非对称量化数据(例如,a′[i]以及w′[i][j])执行的非对称mac运算可以被转换成非对称mac运算加若干校正值。注意的是,运行索引i是从1到c(深度),以及逐元素乘法的阵列大小是xy平面中输入激活的大小(例如,这一示例中为4×4)。在步骤(c),逆winograd转换应用于的结果来生成卷积结果。

图6示出了根据一个实施例的用于在神经网络中的非对称量化数据执行mac运算的方法600的流程图。在一个实施例中,方法600可以由神经网络处理器执行,例如,图1的加速器100。

方法600开始于步骤610,mac电路对第一数据序列以及第二数据序列执行mac运算来生成非对称mac输出,其中所述第一数据序列以及所述第二数据序列两者是非对称量化的。在步骤620中,在执行mac运算的同时,累加器单元累加所述第一数据序列来生成累加输出。在步骤630,将累加输出乘以第二偏移来生成乘积输出。所述第二偏移指示第二数据序列相对于0的不对称量。在步骤640,将乘积输出、非对称mac输出以及在运行前计算的预先计算值相加来生成最终输出。在一个实施例中,预先计算的值可以是从至少一个第一偏移、第二偏移以及第二数据序列的累加中计算。所述第一偏移指示第一数据相对于0的非对称的量。在一些实施例中,可以并行执行步骤610以及620。

已经参考图1以及图3-5的示例性实施描述了图6的流程图的操作。然而,应该理解,图6的流程图的操作可以由不同于参考图1以及图3-5所讨论的实施例来执行,以及参考图1以及图3-5所讨论的实施例可以执行不同于这些参考流程图所讨论的操作。然而图6的流程图示出了由本发明某些实施例执行的操作的具体次序,应当理解,这一次序是示例性的(例如,可选的实施例的可以以不同的次序、组合某些操作、重叠某些操作等来执行操作)。

本文已经描述了许多功能元件或模块。本领域技术人员将能够理解,这些功能模块可以更好地通过电路实施(专用电路或通用电路,其在一个或多个处理器以及编码指令下操作),其将通常包括晶体管,晶体管以根据本文中所描述的功能和操作来控制电路的操作方式来配置。

虽然以及根据几个实施例描述了本发明,但是本领域技术人员将认识到,本发明不限于所描述的实施例,并且开业在所附权利要求的精神和范围内进行修改和描述。因此,这些描述仅被认为是说明性的而非限制性的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1