首页 / 专利库 / 集成电路 / 集成电路卡 / 用于神经网络运算的计算装置及其集成电路板卡

用于神经网络运算的计算装置及其集成电路板卡

阅读:774发布:2020-05-08

专利汇可以提供用于神经网络运算的计算装置及其集成电路板卡专利检索,专利查询,专利分析的服务。并且本披露公开了用于神经网络运算的计算装置和集成 电路 板卡,其中该计算装置包括在组合处理装置中,该组合处理装置还可以包括通用互联 接口 和其他处理装置。所述计算装置与其他处理装置进行交互,共同完成用户 指定 的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于该计算装置和其他处理装置的数据。本披露的方案可以 加速 对神经网络的训练。,下面是用于神经网络运算的计算装置及其集成电路板卡专利的具体信息内容。

1.一种用于神经网络运算的计算装置,包括:
位宽获取单元,其配置成获取当前参与所述神经网络运算的至少两个运算对象的各自数据位宽;
模式选择单元,其配置成根据所述位宽获取单元的输入结果,从多种运算模式中选择对应于所述运算对象的数据位宽组合的一种运算模式,其中每种所述运算模式与一种数据位宽的组合相对应;
存储单元,其配置成存储与每种所述运算模式相对应的运算指令;以及处理单元,其配置成响应于所述模式选择单元的选择,从存储单元读取相对应的运算指令,以执行所述运算对象的神经网络运算。
2.根据权利要求1所述的计算装置,其中所述两个运算对象是神经网络数据,并且所述神经网络数据包括所述神经网络的神经元、权值和梯度中的至少一种数据。
3.根据权利要求2所述的计算装置,其中所述两个运算对象是神经元数据和对应的权值数据,并且其中所述神经网络运算包括在神经网络训练的前向传播过程中,所述神经元数据和对应的权值数据之间的运算。
4.根据权利要求2所述的计算装置,其中所述两个运算对象是神经元数据和输入梯度数据,并且其中所述神经网络运算包括在神经网络训练的反向传播过程中,根据所述神经元数据和输入梯度数据来获得更新的权值数据的运算。
5.根据权利要求2所述的计算装置,其中所述两个运算对象是权值数据和输入梯度数据,并且其中所述神经网络运算包括在神经网络训练的反向传播过程中,根据所述权值数据和输入梯度数据来获得更新的输入梯度数据的运算。
6.根据权利要求1-5的任意一项所述的计算装置,其中所述多种运算指令是由所述处理单元执行的机器指令。
7.根据权利要求6所述的计算装置,进一步包括编译器,其配置成将所述运算指令编译成所述机器指令。
8.根据权利要求7所述的计算装置,其中所述至少两个运算对象是具有定点型数据类型的神经网络数据。
9.根据权利要求7所述的计算装置,其中所述至少两个运算对象是具有浮点型数据类型的神经网络数据,所述处理单元进一步包括:
量化模,其配置成根据所述位宽获取单元配置的数据位宽和所述模式选择单元配置的对应运算模式来确定量化参数,利用所述量化参数将高精度的所述神经网络数据量化成定点型数据类型的神经网络数据,以参与所述神经网络运算。
10.根据权利要求9所述的计算装置,其中所述量化模块包括量化策略子模块和量化参数子模块,其中所述量化策略子模块至少用于根据所述模式选择单元配置的对应运算模式确定在所述神经网络运算过程中是否执行量化参数的更新操作,而所述量化参数子模块至少用于根据所述位宽获取单元配置的数据位宽确定量化参数,并使用所述量化参数对所述高精度数据类型的神经网络数据执行所述量化操作,以获得所述定点型数据类型的神经网络数据。
11.根据权利要求10所述的计算装置,其中所述量化策略子模块还用于配置成根据所述神经网络数据的量化误差来确定是否对作为所述数据位宽进行调整,从而触发所述量化参数子模块根据调整后的数据位宽确定对应的量化参数。
12.根据权利要求11所述的计算装置,其中所述量化策略子模块配置成基于所述神经网络数据在量化前和量化后的均值来执行运算,以确定所述量化误差,其中所述量化误差与所述神经网络训练效果相关。
13.一种集成电路板卡,包括根据权利要求1-12中的任意一项所述的计算装置。

说明书全文

用于神经网络运算的计算装置及其集成电路板卡

技术领域

[0001] 本披露一般地涉及人工智能领域。更具体地,本披露涉及用于神经网络运算的计算装置及其集成电路板卡。

背景技术

[0002] 随着人工智能领域技术的不断发展,如何高效地训练神经网络以获得良好的神经网络模型成为当前关注的一个焦点。现有的神经网络在训练中通常采用浮点型数据来执行运算以期获得好的训练结果。尽管浮点型数据具有相对较高的数据精度,但在训练过程中会对运行神经网络的硬件平台提出更高的硬件要求,例如更大的存储空间、更高的功耗。另外,在一些训练场景中,使用精度相对较低的数据类型也同样可以达到与浮点型数据相同或近似的训练效果,从而使得应用浮点型数据在一些情况下并不必要。发明内容
[0003] 为了解决在上文中所提到的一些或全部的问题,提供一种对神经网络进行高效训练的方式,本披露在多个方面中提供了如下的技术方案。
[0004] 在一个方面中,本披露提供一种用于神经网络运算的计算装置,包括:位宽获取单元,其配置成获取当前参与所述神经网络运算的至少两个运算对象的各自数据位宽;模式选择单元,其配置成根据所述位宽获取单元的输入结果,从多种运算模式中选择对应于所述运算对象的数据位宽组合的一种运算模式,其中每种所述运算模式与一种数据位宽的组合相对应;存储单元,其配置成存储与每种所述运算模式相对应的运算指令;以及处理单元,其配置成响应于所述模式选择单元的选择,从存储单元读取相对应的运算指令,以执行所述运算对象的神经网络运算。
[0005] 在又一个方面中,本披露还提供一种集成电路板卡,包括如上所述的计算装置。
[0006] 通过上述用于神经网络运算的计算装置和集成电路板,在训练神经网络的迭代训练中,本披露的方案加速神经网络的相关运算例如乘加操作,从而加速神经网络的训练过程并减小功耗。在一些应用场景中,本披露的方案还支持对执行量化操作后的数据进行复用的功能,从而减小将数据从高精度数据类型的数据量化到定点型数据的多次量化化操作,进一步缩短训练时间。另外,通过经本披露方案所训练的神经网络,其可以被广泛运用于图像处理语音识别数据采集等各类领域,极大地改善相关领域的效率成本。附图说明
[0007] 通过结合附图,可以更好地理解本发明的上述特征,并且其众多目的,特征和优点对于本领域技术人员而言是显而易见的,其中相同的附图标记表示相同的元件,并且其中:
[0008] 图1是示出可以应用本披露的技术方案的神经网络的示例性框图
[0009] 图2是示出根据本披露实施例的神经网络中相关算子操作的示例性流程图
[0010] 图3是示出根据本披露实施例的涉及量化误差原理的曲线图;
[0011] 图4是示出根据本披露实施例的用于对神经网络执行训练的设备的框图;
[0012] 图5是示出根据本披露实施例的用于权值复用的示例性系统框图;
[0013] 图6是示出根据本披露实施例的用于通过硬件平台来训练神经网络的方法的流程图;
[0014] 图7是示出根据本披露实施例的用于神经网络运算的计算装置的框图;
[0015] 图8是示出根据本披露实施例的一种组合处理装置的结构图;以及
[0016] 图9是示出根据本披露实施例的一种板卡的结构示意图。

具体实施方式

[0017] 现在将参考附图描述本发明的实施例。应当理解,为了说明的简单和清楚,在认为合适的情况下,可以在附图中重复附图标记以指示对应或类似的元件。另外,本申请阐述了许多具体细节以便提供对本文所述实施例的透彻理解。然而,本领域普通技术人员在本公开的教导下,可以在没有这些具体细节的情况下实施本文所描述的多个实施例。在其他情况下,本方没有详细描述公知的方法、过程和组件,以免不必要地模糊本文描述的实施例。而且,该描述不应被视为限制本文描述的实施例的范围。
[0018] 如前所述,本披露的方案主要应用于人工智能领域,特别是应用于对神经网络进行高效的训练中,因此这里有必要对本披露所涉及的神经网络架构及其工作原理进行介绍。
[0019] 神经网络(neural network,NN)是一种模仿生物神经网络的结构和功能的数学模型,神经网络由大量的神经元连接进行计算。因此,神经网络是一种计算模型,由大量的节点(或称“神经元”)相互连接构成。每个节点代表一种特定的输出函数,称为激活函数(activation function)。每两个神经元之间的连接都代表一个通过该连接信号的加权值,称之为权值,这相当于神经网络的记忆。神经网络的输出则依神经元之间的连接方式以及权值和激活函数的不同而不同。在神经网络中,神经元是神经网络的基本单位。它获得一定数量的输入和一个偏置,当信号(值)到达时会乘以一个权值。连接是将一个神经元连接到另一层或同一层的另一个神经元,连接伴随着与之相关联的权值。另外,偏置是神经元的额外输入,它始终为1,并具有自己的连接权值。这确保即使所有的输入都为空(全部为0),神经元也会激活。
[0020] 在应用中,如果不对神经网络中的神经元应用一个非线性函数,神经网络只是一个线性函数而已,那么它并不比单个神经元强大。如果让一个神经网络的输出结果在0到1之间,例如,在猫狗鉴别的例子中,可以把接近于0的输出视为猫,将接近于1的输出视为狗。为了完成这个目标,在神经网络中引入激活函数,比如:sigmoid激活函数。关于这个激活函数,只需要知道它的返回值是一个介于0到1的数字。因此,激活函数用于将非线性引入神经网络,它会将神经网络运算结果缩小到较小的范围内。实际上,激活函数怎样表达并不重要,重要的是通过一些权值将一个非线性函数参数化,可以通过改变这些权值来改变这个非线性函数。
[0021] 图1是示出可以应用本披露的技术方案的神经网络100的示例性框图。如图1中所示,该神经网络100包括输入层输出层以及位于该输入层和输出层之间的多个隐藏层,在本例中示例性示为卷积层、激活层、池化层和全连接层。
[0022] 输入层的神经元被称为输入神经元,在本例中绘出3个输入神经元,其接收3个输入信号x1,x2,x3。输入层作为神经网络中的第一层,接受需要输入信号(值)并将它们传递到下一层。通常情况下,输入层不会对输入信号(值)做操作,并且没有关联的权值和偏置。对于特定的神经网络,例如卷积神经网络,其输入层可以处理多维数据。常见地,一维卷积神经网络的输入层接收一维或二维数组,其中一维数组通常为时间或频谱采样;二维数组可以包含多个通道;二维卷积神经网络的输入层接收二维或三维数组;三维卷积神经网络的输入层接收四维数组,以此类推。在一些特定的应用场景中,也可以在输入层处对数据进行预处理操作,例如可以对数据去均值、归一化及降维等操作。
[0023] 隐含层包含用于对输入数据应用不同变换的神经元(节点)。在图1所示出的神经网络中包括了四个隐藏层,即包括4个神经元(节点)的卷积层、4个神经元的激活层、2个神经元的池化层、6个神经元的全连接层。最后,由全连接层的运算值传递给输出层。输出层的神经元被称为输出神经元。输出层接收来自最后一个隐含层的输出。在图1所示的神经网络中,输出层有2个神经元,有2个输出信号y1和y2。从所示出的隐藏层可以看出,基于特定的隐藏层,每个隐藏层的每一个神经元可以或可以不与下一层的每一个神经元进行连接,例如激活层和池化层的神经元是部分连接,而池化层与全连接层之间是全连接。
[0024] 下面对于本例中的示例性隐藏层进行简要的描述。需要理解的是这里关于上述各个隐藏层的描述仅仅是示例性的而非限制性的,本披露的技术方案并不受图1所示神经网络隐藏层结构的限制,并且本领域技术人员根据本披露的教导可以对图1所示出的神经网络结构进行修改,例如根据应用的需要增加一个或多个层,或去除图1所示结构中的一个或多个层,而这些操作依然涵盖于本披露所涵盖的技术方案之内。
[0025] 作为本例中的第一个隐藏层-卷积层,其功能通常是对输入数据进行特征提取,其内部可以包含多个卷积核,组成卷积核的每个元素可以对应于一个权重系数和一个偏差量,类似于一个前馈神经网络的神经元。当处理图片数据时,在卷积层中,图片中的每一个特征首先局部感知,然后更高层次地对局部进行综合操作,从而得到全局信息。卷积层参数可以包括卷积核大小、步长和填充,三者共同决定卷积层输出特征图的尺寸,是卷积神经网络的超参数。在应用中,卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,该区域的大小取决于卷积核的大小。卷积核在工作时,会有规律地扫过输入特征,对输入特征做矩阵元素乘法求和(乘加)并叠加偏差量。
[0026] 接收上述卷积层输出的激活层实际上是对卷积层的输出结果做一次非线性映射。常用的激励函数有:Sigmoid函数、Tanh函数、ReLU函数、Leaky、ReLU函数、ELU函数及Maxout函数等。通过这些激活函数之后,前一层的输出将变得相对复杂,从而提升了神经网络模型的表达能
[0027] 池化层主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。通常,池化方法主要包括最大池化和平均池化。在卷积层进行特征提取并且经激活层处理后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,该步骤可以由池化大小、步长和填充进行控制。
[0028] 经过前面的卷积+激活+池化后,神经网络的信号处理流程到达全连接层,其位于本例神经网络隐含层的最后部分。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数输出。全连接层可以对提取的特征进行非线性组合以得到输出,即全连接层本身不被期望具有特征提取能力,而是试图利用现有的高阶特征完成学习目标。另外在全连接层还可以进行局部归一化(LRN)、数据增强等操作,以便增加神经网络的鲁棒性。
[0029] 尽管在图1中未示出,在神经网络中的每一层处具有与该层关联的一个或多个算子(将结合图2来具体描述)以执行相对应的计算操作。算子在神经网络中是一个函数空间到函数空间上的映射。广义上来讲,对任何函数进行某一项操作都可以认为是一个算子。简言之,算子可以是映射、关系或者变换。例如,对于卷积层(或其他需要执行卷积操作的层)存在卷积算子,该卷积算子可以具体化为一个或多个卷积计算公式的表达。通过利用该卷积算子将输入数据与卷积核进行计算,可以获得卷积操作后的结果值。
[0030] 上面对图1所示出神经网络结构及其节点的功能进行了示例性的描述。在实际应用中,为了获得良好的神经网络模型,预先会提供大量的样本数据(包含输入和输出)对初始神经网络进行训练。训练完成后,就获得训练后的神经网络。该受训后的神经网络可以对于将来的真实环境的输入给出一个正确的输出。
[0031] 在开始讨论神经网络的训练之前,需要定义损失函数。损失函数是一个衡量神经网络在执行某个特定任务的表现函数。在有些实施例中,损失函数可以如此得到:在训练某神经网络过程中,对每一个样本数据,都沿着神经网络传递得到输出值,然后将这个输出值与期望值做差再求平方,这样计算出来的损失函数就是预测值与真实值之间的距离,而训练神经网络目的就是将这个距离或损失函数的取值减小。在某些实施例中,损失函数可以表示为:
[0032]
[0033] 上式中,y代表期望值,指样本数据集合中每个样本数据通过神经网络得到的实际结果,i是样本数据集合中每个样本数据的索引。 表示期望值y与实际结果 之间的误差值。m为样本数据集合中样本数据的个数。
[0034] 以猫狗鉴别的实际应用场景为例。假定一个数据集由猫和狗的图片组成,如果图片是狗,对应的标签是1,如果图片是猫,对应的标签是0。这个标签就是对应上述公式中的期望值y,在向神经网络传递每一张样本图片的时候,实际是想通过神经网络来获得识别结果,即图片中的动物是猫还是狗。为了计算损失函数,必须遍历样本数据集中的每一张样本图片,获得每一张样本图片对应的实际结果 然后按照上面的定义计算损失函数。如果损失函数比较大,例如超过一个预定的阈值,则说明神经网络还没有训练好,此时就需要借助于前述的反向传播过程来对权值进一步调整。
[0035] 在开始训练神经网络的时候,需要对权值进行随机初始化。在大多数的情况下,初始化的神经网络并不能提供一个很好的训练结果。在训练的过程中,假设以一个很糟糕的神经网络开始,通过训练可以得到一个具有高准确率的网络。
[0036] 神经网络的训练过程分为两个阶段,第一阶段是信号的正向处理操作(在本披露中称为前向传播过程),训练从输入层经过隐含层,最后到达输出层。第二阶段是反向传播梯度操作(在本披露中称为后向传播过程),训练从输出层到隐含层,最后到输入层,根据梯度依次调节神经网络中每层的权值和偏置。
[0037] 在前向传播过程中,将输入值输入到神经网络的输入层,经过多个隐藏层的相关算子执行的相应运算,可以从神经网络的输出层得到所谓的预测值的输出。当输入值提供给神经网络的输入层时,其可以不进行任何操作或依应用场景做一些必要的预处理。在隐含层中,第二个隐含层从第一个隐含层获取预测中间结果值并进行计算操作和激活操作,然后将得到的预测中间结果值传递给下一个隐含层。在后面的层中执行相同的操作,最后在神经网络的输出层得到输出值。在经过前向传播过程的正向处理后,通常可以得到一个被称为预测值的输出值。为了计算误差,可以将预测值与实际输出值进行比较,获得对应的误差值。
[0038] 在反向传播过程中,可以使用微分学的链式法则来对各层的权值进行更新,以期在下一次的前向传播过程中获得相对于前次较低的误差值。在链式法则中,首先计算对应神经网络的最后一层权值的误差值的导数。称这些导数为梯度,然后使用这些梯度来计算神经网络中的倒数第二层的梯度。重复此过程,直到得到神经网络中每个权值对应的梯度。最后,将神经网络中每个权值减去对应的梯度,从而对权值进行一次更新,以达到减少误差值的目的。与前向传播过程中利用各类算子(在本披露中称为前向算子)类似,在对应的反向传播过程中也存在与前向传播过程中的前向算子相对应的反向算子。例如,对于前述卷积层中的卷积算子,其包括前向传播过程中的前向卷积算子和反向传播过程中的反卷积算子。
[0039] 在神经网络进行训练的过程中,神经网络每经过一次信号的正向处理的前向传播过程以及对应一次误差的反向传播过程,神经网络中的权值利用梯度进行一次更新,此时称为一次迭代(iteration)。为了获得精度符合预期的神经网络,在训练过程中需要很庞大的样本数据集,而一次性将样本数据集输入进计算设备(例如计算机)几乎是不可能的。因此,为了解决这个问题,需要将样本数据集划分成多个块,按块传递给计算机,每块数据集经过前向传播过程的正向处理后,对应进行一次反向传播过程中的更新神经网络的权值操作。当一个完整的样本数据集通过了神经网络一次正向处理并且对应返回了一次权值更新,这个过程称为一个周期(epoch)。实际中,在神经网络中传递一次完整的数据集是不够的,需要将完整的数据集在同一神经网络中传递多次,即需要多个周期,最终获得精度符合预期的神经网络。
[0040] 在神经网络进行训练的过程中,通常用户希望训练的速度越快越好,并且准确率越高越好,但这样的期望通常受神经网络数据的数据类型的影响。在很多应用场景中,神经网络的数据通过高精度数据格式表示(例如浮点数)。以前向传播过程中的卷积操作和反向传播过程中的反向卷积操作为例,当在计算设备中央处理单元(“CPU”)和图形处理单元(“GPU”)上执行这两项操作时,为了确保数据精度,几乎所有的输入、权重和梯度都是浮点类型数据。
[0041] 以浮点类型格式作为高精度数据格式为例,根据计算机体系结构可知,基于浮点数的运算表示法则、定点数的运算表示法则,对于同样长度的浮点运算和定点运算来说,浮点运算计算模式更为复杂,需要更多的逻辑器件来构成浮点运算器。这样从体积上来说,浮点运算器的体积比定点运算器的体积要大。进一步,浮点运算器需要消耗更多的资源去处理,使得定点运算和浮点运算二者之间的功耗差距通常是数量级的,由此造成显著的计算成本差异。然而,根据实验发现,定点运算比浮点运算执行速度快,而且精度损失并不大,因此在人工智能芯片中采用定点运算处理大量的神经网络运算(例如卷积和全连接运算)是可行的方案。例如,可以将涉及前向卷积、前向全连接、反向卷积和反向全连接算子的输入、权重和梯度的浮点型数据均进行量化后进行定点数运算,并且在算子运算完成后将低精度的数据转换成高精度数据。
[0042] 以量化对象是神经网络的权值、且量化后的权值均为8-bit定点数(相对于浮点数的低精度类型)为例,由于一个神经网络中常常有数百万连接,几乎所有空间都被神经元连接的权值所占据,并且这些权值有可能都是不同的浮点数。每层权值都趋向于某个确定区间的正态分布,例如(-3.0,3.0)。将神经网络中每层的权值对应的最大值和最小值保存下来,将每个浮点数值采用8-bit定点数表示。其中,在最大值、最小值范围内区间线性划分256个量化间隔,每个量化间隔用一个8-bit定点数表示。例如:在(-3.0,3.0)区间内,字节0表示-3.0,字节255表示3.0。以此类推,字节128表示0。
[0043] 在执行量化操作过程中,会涉及到两个量化参数:shift和n,其中shift是定点数点的位置,n是定点数比特位宽,n初始可以人为设定,shift则通过待量化数据的分布范围和n,利用下式来计算得到:
[0044]
[0045] 其中Z是待量化数据F的绝对值的最大值max(|F|)。使用F表示量化前的浮点数据,I表示量化后的n位定点数,则从F到I的定点变换方法可以通过下式来计算:
[0046] F≈I×2shift  (3)
[0047] 其中step=2s为量化步长(最小量化间隔),得到的定点数I可以通过下式来表达:
[0048]
[0049] 当需要将量化后得到的定点数转换成浮点数,则可以执行反量化操作,则反量化后的值 可以通过下式来表达:
[0050]
[0051] 尽管经上述量化的定点数有利于神经网络的加速训练、减小芯片体积并显著减小计算开销,但当神经网络中存在大量的运算时(例如卷积和全连接运算),相应的量化操作也将成为训练中难以承担的开销。为此,本披露的技术方案在多个方面中提供了优化量化操作的方案,从而在充分利用量化操作的同时尽量不引入过多的量化开销,由此加速神经网络训练、提高训练精度并减小计算开销。
[0052] 图2是示出根据本披露实施例的神经网络200中相关算子操作的示例性流程图。如图2中的虚框所示,该神经网络200包括前向传播中的运算块201,反向传播过程中的梯度更新块202和权值更新块203。为了便于理解和描述本披露的方案,图2所示出的神经网络可以视为仅包括单个的隐藏层(例如卷积层)的网络或仅包括一类操作(仅卷积操作)的网络,而本领域技术人员根据上文和下面的描述,将理解本披露的方案同样地也适用于隐藏层包括多个层或多种其他类型操作的情形。
[0053] 进一步示出于图2中的是多个算子,其具体可以包括量化算子quantify,前向卷积算子convFwd,权重梯度算子convBpFilter和输入数据梯度算子convBpData。下面将按照训练神经网络的前向传播过程和反向传播过程(包括权值更新和梯度更新的操作)的顺序来描述图2中的流程。在图2中,“x”表示输入神经元数据、“w”表示权值、“dx”表示输入梯度、“dy”表示输出梯度,“[]”内的内容表示具体的数据类型,“paramx”表示神经元数据的量化参数,“paramw”表示权值的量化参数,而“paramdy”表示梯度的量化参数。
[0054] 首先,可以接收输入的神经元数据x[fp32]和初始的权值w[fp32],如括号中所示出的,二者都是具有32位浮点数的数据类型。如前所述,通过量化操作将二者量化为定点数。为此,本披露提供一种量化算子quantify,其可以包括量化策略算子和量化参数算子。在一个实施例中,所述量化策略算子可以至少用于确定是否执行量化参数的更新操作,而所述量化参数算子可以至少用于确定量化参数,并使用所述量化参数对所述高精度数据类型的神经网络数据执行所述量化操作。
[0055] 在一些应用场景中,上述的量化策略算子可以负责计算量化误差diffbit、和量化周期趋势值diffupdate。由于量化误差的确定对于量化周期、数据位宽的调整等方面具有重要意义,下面将对其进行具体描述。
[0056] 假定在一个场景中,待量化的数据为F=[f1,f2,...,fm],使用n位定点进行量化后得到的数据为 则可以通过下式来计算量化误差:
[0057]
[0058] 即:
[0059]
[0060] 当diffbit大于阈值th时,则可以考虑将量化位宽增加t位,从而新的量化位宽为n=n+t,这里th和t都是可变的超参数。
[0061] 可以看出,上面量化误差的确定涉及利用均值函数mean()的计算,而该量化误差的计算方式具有如下的意义:
[0062] 如图3中所示出的曲线1和2的两种浮点数数据分布,假设其中一个量化间隔为[a,b],[a,c]之间的浮点数量化到a,[c,b]之间的浮点数量化到b,假定数据满足高斯分布P(x)~G(0,σ),则量化前的均值为
[0063]
[0064] 量化后的均值为:
[0065]
[0066] 并且从图3中可以看出,分布在c处的切线斜率为k。经过推导与近似计算,|K|越大(即分布越集中)并且量化间隔越大,则meanf和 的差距越大。通过实验可以知道,分布越集中的数据量化后对训练最终结果带来的误差越大,所以可以使用量化前后的均值的差距来模拟量化给训练带来的实际误差。为了保持该误差不增大,在量化分布更为集中的数据(|K|)时,应使量化间隔减小,即增加量化位宽。本披露正是基于这样的理论基础,在考虑了量化误差对训练精度和效果所带来的影响后,提出可变的量化周期和数据位宽的方案。
[0067] 为减小训练过程中计算量化参数所带来的计算消耗,并不每代都根据当前待量化数据计算量化参数,而是间隔一定代数进行量化参数更新,在不更新的代里,量化数据时使用存储下来的上一次更新得到的量化参数。只要更新间隔选择合适,这并不会带来训练精度损失,这是因为在训练过程中待量化数据(例如权值和梯度数据)的变化是相对稳定的,具有一定连续性和相似性。一种简单的方式是使用固定的更新周期,但是固定的更新周期适应性较差,因此本披露还提出自适应的更新周期调整。
[0068] 设间隔Interval代(即量化周期)更新量化参数,其计算方法如下:
[0069] 首先引入shift随着训练迭代周期的滑动平均值m
[0070] m(i)←α×shift+(1-α)×m(i-1)  (10)
[0071] 引入衡量shift变化趋势的diffupdate1:
[0072] diffupdatel=|m(i)-m(i-1)|  (11)
[0073] diffupdate1越大,则说明数值范围变化越激烈,需要更高的更新频率,即Interval越小。
[0074] 衡量定点位宽n变化趋势diffupdate2:
[0075]
[0076] diffupdate2越大则越需要更大的量化位宽,需要更新位宽,间隔频率更高。
[0077] 将上述的两种衡量同时考虑,则得到前述的量化周期趋势值diffupdate如下:
[0078] diffupdate=max(diffupdate1,diffupdate2)  (13)
[0079] 最后计算得到Interval:
[0080]
[0081] 在上面的等式中,α、β、γ、δ、t和th是超参数,并且β、γ既可以为经验值,也可以为超参数。另外,常规的超参数的优化方法均适于β、γ。
[0082] 上面关于量化策略算子计算量化误差diffbit、和量化周期趋势值diffupdate进行了详细的描述。在一个实现场景中,本披露的量化策略算子的输入可以包括量化前的数据和量化后的数据(量化后的数据也可以自己计算)、量化参数(主要用到shift的滑动平均值m)、量化周期I(既可以是输入,也可以是输出)和输出量化位宽,其中量化周期和输出量化位宽可以作为输入传递给量化参数算子。在一些应用中,可以设置当量化周期大于0时,该算子不执行任何的操作。否则,该量化策略算子将执行量化周期和位宽的更新。
[0083] 进一步,量化参数算子的输入可以包括待量化数据、量化参数(包括点数shift、点数的滑动平均值m、缩放系数scale等)、数据位宽(表示输出的量化后数据采用哪种位宽)以及量化周期。在一些应用场景中,量化周期可以是控制量化算子是否要计算量化参数的变量。例如,当量化周期等于0时,可以执行量化参数的统计。当然,这里的设置也仅仅是示例性的,并且本领域技术人员基于本文的教导也可以赋予量化周期其他的含义,或采用不同的形式来进行控制。例如,如果量化周期等于-1时,则每次都进行量化参数的更新。可以看出,量化周期在这样的示例性场景中仅代表一个控制此量化算子的控制量。在另外一些应用场景中,如果对量化参数进行了统计,则还需把新的量化参数更新到旧的量化参数的地址。否则,此次量化操作将依然采用旧的量化参数。
[0084] 根据不同的实现方式或应用场景,量化算子可以对当前整个板卡内同一层数据进行量化。由此得到的量化参数既可以接着在多机多卡之间同步,也可以不进行这样的同步。当不进行同步时,每个板卡内可以维护一份量化参数。附加地,每个计算核在计算出量化参数后进行同步,综合得到最终的全局的量化参数。
[0085] 返回到图2的处理流程,再经过上述的量化算子的量化操作后,将获得新的量化参数和量化后的定点数,即量化参数paramx、paramw和量化后的数据x[int8](对应8位定点型的神经元)、w[int8](对应8位定点型的权重),并且将该四项作为输入送入到前向卷积算子convFwd中执行运算,以获得浮点型的结果y[fp32](对应32位浮点型数据)。在该卷积运算过程中,前向卷积算子convFwd可以对定点型的神经元数据和权值数据执行乘加操作。例如当输入的神经元数据是图像数据而对应的权值是卷积核(filter),则卷积操作可以是对应的图像矩阵和filter的对应位置元素的相乘再求和,最后再加上偏置b,从而获得一个特征图作为输出结果。为了保持输出的数据仍是浮点型数据,本披露的卷积算子也可以融合有反量化算子,从而将输出结果反量化为32位的浮点型数据y[fp32],与输入的神经元数据x[fp32]的数据类型保持一致。这里的反量化操作可以涉及利用前述的量化参数paramx和paramw来确定反量化时的步长,即前述式(5)中的step,从而将定点数反量化为高精度的浮点数。
[0086] 如前所述,基于前向传播过程所获得的训练结果,可以确定损失函数LossDiff,其例如可以通过结合图1所描述的式(1)的方式来获得,此处不再赘述。在获得该LossDiff后,训练流程将进入到反向梯度更新块202和权值更新块203来执行反向传播过程,这其中将涉及到本披露的两个算子,即权重梯度算子convBpFilter和输入数据梯度算子convBpData。在一个或多个实施例中,convBpData的功能可以是计算输入神经元数据x的梯度,根据链式求导法则推导,可以得到x的梯度计算公式为:
[0087]
[0088] 进一步,convBpFilter的功能可以是计算权重w的梯度,根据链式求导法则推导,可得w的梯度计算公式为:
[0089]
[0090] 在上面的两个公式中,w,x,δ分别表示权重、输入以及来自上一层的输入梯度数据, 表示卷积操作,rot180函数则表示将数据旋转180度。
[0091] 下面对反向传播过程所涉及的具体操作进行示例性描述,以便于理解反向梯度更新块和权值更新块中所涉及到的操作。
[0092] 在反向传播过程中,对于包括两层或两层以上的多个神经元的神经网络来说,针对每一层,首先对输入梯度数据例如向量(相当于图中的dy[fp32])和本层的权值矩阵进行加权求和,以计算出本层的输出梯度向量(相当于图中的dx[fp32])。该输入梯度向量(相当于图中的dy[fp32])与前向传播过程时的输入神经元数据对位相乘,可以得到本层权值的梯度(相当于图中的dw[fp32])。然后,可以根据所得到的本层权值的梯度来更新本层的权值(相当于图中的w[fp32])。
[0093] 基于上述的处理过程,本披露的方案在通过损失函数LossDiff获得当前的输入梯度数据后,将其经过量化算子quantify进行量化,以得到16位定点型输入梯度数据dy[int16]和关于该梯度数据的量化参数paramdy。接着,可以将本层在前向传播过程中的对应权值量化参数paramw、8位定点型权值w[int8]、连同前述获得的输入梯度dy[int16]和梯度量化参数paramdy作为输入送入到输入数据梯度算子convBpData进行运算,以获得本层的输出梯度dx[fp32]作为上一层的输入梯度数据。进一步,可以将输入梯度dy[int16]、梯度数据的量化参数paramdy连同本层前向传播过程中的对应量化参数paramx和前述量化后的神经元数据x[int8]作为输入送入到权重梯度算子convBpFilter,以获得本层的权值梯度dw[fp32]。接着,通过求解器solver,可以基于dw[fp32]来计算得到本层更新的权值w[fp32],以用于下一次前向传播过程中的运算。
[0094] 通过上面的描述,本领域技术人员可以理解,在反向传播过程中,权重w和输入神经元数据x可以复用前向传播过程中使用的数据,因此反向传播过程中只需要量化梯度dy,梯度dy量化后的结果是量化参数paramdy和量化数据dy[int16],而无需对输入的神经元数据和权重数据再次量化,从而减少了数据的多次量化,缩短了训练的时间。
[0095] 上面结合图2对本披露的训练方案及其所涉及的量化操作进行了详细的描述。该方案可以在python和C++两个层面进行实现。当在python层面实施时,其数据传递较少且代码改动较少,而且并不会破坏tensorflow的完整性。当在C++层面上实现时,由于在计算图上不会存在量化相关算子,利于后续的融合方案。当在python层面实施时,该方案对tensorflow本身的代码没有做过多的修改,仅添加了部分量化功能,而且由于量化功能也是被封装在卷积算子中的,因此用户对卷积和全连接的使用只是加入了部分量化参数,其他参数和算子名称基本一致,因此对用户比较友好。另外,如前所述,由于训练时使用了数据复用功能,因此在训练时节省了训练时间。
[0096] 基于上述结合图2的描述,本领域技术人员可以理解本披露同样也公开了用于执行图2所示算子的设备,即用于训练神经网络的设备。下面将结合图4对该设备进行描述。
[0097] 图4是示出根据本披露实施例的用于对神经网络执行训练的设备400。当设备400运行时,其将按神经网络训练的前向传播过程和反向传播过程来对神经网络进行训练,并且在该过程中按照图2所示的处理流程来执行相关算子的运算。鉴于此,下文中在对设备400的操作进行描述时,也将结合图2中的操作来作示例性地阐述。
[0098] 如图4中所示,所述设备400包括前向处理单元402,其配置用于在所述前向传播过程中,使用定点型的神经网络数据(例如图2中示出的x[int8]和w[int8])来对与所述神经网络的至少一个层相关联的前向算子执行运算。进一步,设备400还包括反向处理单元404,其配置用于在所述反向传播过程中,使用所述定点型的神经网络数据(例如图2中示出的x[int8]和w[int8])来对与所述前向算子对应的反向算子执行运算以执行更新操作。可以看出,这里定点型的神经网络数据同时使用在前向传播过程和反向传播过程中,实现了前面结合图2所述的数据复用效果。
[0099] 附加地,所述设备400还包括量化单元406,其配置用于利用量化算子对高精度数据类型的神经网络数据执行量化操作,以获得所述定点型的神经网络数据。在一个实施例中,所述量化算子包括量化策略算子和量化参数算子,其中所述量化策略算子至少用于确定是否执行量化参数的更新操作,而所述量化参数算子至少用于确定量化参数,并使用所述量化参数对所述高精度数据类型的神经网络数据执行所述量化操作。可以理解的是,根据具体实现方式的不同,量化单元也可以实现于独立于设备400外的硬件或软件装置,或包括在神经网络中,或者与神经网络共处同一硬件平台但处于神经网络之外。
[0100] 在一个实施例中,高精度数据类型是浮点型数据类型,例如图2中所示出的fp32数据类型。依涉及数据性质的不同,设备400所处理的神经网络数据可以包括神经元和权值中的至少一种数据,即图2中所示出的“x”和“w”数据。在一个实施例中,所述神经网络的至少一个层可以是卷积层或全连接层。由此,设备400可以对卷积层或全连接层的前向算子和反向算子执行运算。
[0101] 在一个实施例中,前述的量化参数可以包括用于对神经元数据执行量化操作的神经元量化参数和用于对权值数据执行量化操作的权值量化参数,所述前向处理单元402还配置用于在所述前向传播过程中执行:根据所述神经元量化参数(例如图2中示出的paramx),使用所述量化参数算子将所述高精度数据类型的神经元数据(例如图2中示出的x[fp32])量化成定点型的神经元数据(例如图2中示出的x[int8]);以及根据所述权值量化参数(例如图2中示出的paramw),使用所述量化参数算子将所述高精度数据类型的权值数据(例如图2中示出的w[fp32])量化成定点型的权值数据(例如图2中示出的w[int8])。
[0102] 进一步,在对前向算子执行运算中,所述前向处理单元402可以配置用于:使用所述神经元量化参数(例如图2中示出的paramx)、权值量化参数(例如图2中示出的paramw)、所述定点型的神经元数据(例如图2中示出的x[int8])和权值数据(例如图2中示出的w[int8])来执行前向算子的运算,以获得高精度数据类型的前向运算结果。另外,所述前向处理单元还配置用于:根据所述高精度数据类型的前向运算结果(例如图2中示出的y[fp32])来获得高精度数据类型的输入梯度数据(例如图2中示出的dy[fp32]),以用于所述反向传播过程。
[0103] 在一个实施例中,所述量化参数还包括用于对所述输入梯度数据执行量化的梯度量化参数(例如图2中示出的paramdy),所述量化单元还配置用于:根据所述梯度量化参数,使用所述量化参数算子将高精度数据类型的输入梯度数据(例如图2中示出的dy[fp32])转换成所述定点型的输入梯度数据(例如图2中示出的dy[int16])。基于此,在权值更新操作中,所述反向处理单元304还配置用于使用所述梯度量化参数(例如图2中示出的paramdy)、所述神经元量化参数(例如图2中示出的paramx)、所述定点型的神经元数据(例如图2中示出的x[int8])和所述定点型的输入梯度数据(例如图2中示出的dy[int16])来获得高精度数据类型的权值梯度数据(例如图2中示出的dy[fp32]);以及使用所述高精度数据类型的权值梯度数据来执行所述权值更新操作,以获得更新后的高精度数据类型的权值数据(例如图2中示出的w[fp32])。
[0104] 进一步,在梯度更新操作中,所述反向处理单元404还配置用于使用所述梯度量化参数(例如图2中示出的paramdy)、所述权值量化参数(例如图2中示出的paramw)、所述定点型的权值数据(例如图2中示出的w[int8])和所述定点型的输入梯度数据(例如图2中示出的dy[int16])来获得更新后的高精度数据类型的输入梯度数据(例如图2中示出的dx[fp32]),以用于所述反向传播过程中的下一层的所述权值更新操作。
[0105] 以上基于图2和图4描述了本披露一个方面中的设备,利用该设备可以实现结合图2所描述的各种技术优势,此处不再赘述。另外,基于此处的描述,本领域技术人员可以想到本披露在该方面也公开了一种包括前述设备的集成电路板卡。在另一个方面中,当图2中的操作由程序指令来实现时,本披露也就同样公开了一种计算机可读存储介质,包括用于通过硬件平台来训练神经网络的程序指令,当程序指令由至少一个处理器运行时,执行图2中示出的各种操作。
[0106] 图5是示出根据本披露实施例的用于权值复用的示例性系统500的框图。如图5中所示,该用于权值复用的系统500可以包括片上系统502和片外系统504。根据本披露的方案,片上系统502可以是包括用于训练神经网络的硬件平台,其可以是待测试的硬件平台,例如以人工智能芯片为基础的平台,而片外系统504是包括例如CPU或GPU的公知硬件平台上的系统。尽管这里的描述使用术语“片上系统”和“片外系统”,但在一些应用场景中,二者可以位于同一块集成电路板卡上。这里的神经网络可以是如前面结合附图1-4所描述的神经网络,并且该神经网络的迭代训练也同样涉及所示出的前向传播过程和反向传播过程。鉴于此,前文关于神经网络的训练,包括相关算子在前向传播过程和反向传播过程中的运算以及量化操作也同样适于下文的讨论,因此关于这些方面的具体运算和操作将在下文不再赘述
[0107] 如图5中所示,片上系统(或者说包括该片上系统的设备)502包括至少一个处理器(或称处理单元)506和输入输出(I/O)接口,其中所述处理器配置用于执行神经网络的迭代训练中的运算操作,而I/O接口配置用于与片外系统进行双向数据传输。在一个或多个实施例中,在迭代训练神经网络时的权值更新操作中,处理器506可以配置用于使用高精度数据格式表示的权值数据对权值进行更新,以获得更新后的高精度数据格式表示的权值;以及将所述更新后的高精度数据格式表示的权值转换成定点型权值,以用于所述神经网络的下一次迭代训练。尽管为了简明的目的在图5中未示出,但本领域技术人员可以理解处理器506可以包括一个或多个运算器或运算单元,用以执行具体的神经网络运算例如本披露中的乘加操作。
[0108] 在一个或多个实施例中,上面的高精度数据格式表示的权值数据可以包括高精度数据格式表示的权值梯度(相当于图2中反向传播过程中的dw[fp32])和权值(相当于图2中前向传播过程中使用过的w[fp32]),并且其中在获得更新后的高精度数据格式表示的权值中,处理器可以配置用于:基于所述高精度数据格式表示的权值梯度和权值来执行所述权值更新操作,以获得所述更新后的高精度数据格式表示的权值。换言之,处理器通过反向传播过程中获得的权值梯度和对应的前向传播过程中已使用的权值来计算获得新的高精度权值。此后,可以通过I/O接口将更新后的高精度数据格式表示的权值存储到所述片外系统中,以用作所述下一次权值更新操作中的所述高精度数据格式表示的权值数据中的权值。
[0109] 进一步,可选地或附加地,该处理单元还可以包括用于片上存储的存储单元508,该存储单元508上可以驻留有量化模块510,其可以用于对高精度数据类型的数据进行量化,以获得定点型数据。可以理解的是这里的量化模块与图2中所示出的量化算子具有相同或相类似的功能,因此关于量化算子的描述也同样适用于此处的量化模块。需要注意的是本披露的量化模块也可以采用除驻留于存储单元中的程序指令之外的硬件方式来实现于处理单元内,由此本披露对于具体的量化模块的实现方式并不限制。
[0110] 根据本披露的方案,在神经网络的每次迭代过程中,处理器506可以配置用于通过所述I/O接口从所述片外系统504加载以下各项:用于当前次迭代训练中的前向传播过程的前向定点型权值;用于所述当前次迭代训练中的反向传播过程的反向定点型权值;以及用于所述当前次迭代训练中的权值更新操作的高精度数据格式表示的权值。该加载操作可以例如通过从片外系统的存储器(例如DDR)读取来实现。
[0111] 在完成一次迭代训练后,处理器可以配置用于将更新后的高精度数据格式表示的权值数据转换成定点型权值。在该转换中,所述处理器可以配置用于将更新后的高精度数据格式表示的权值转换成所述前向定点型权值和反向定点型权值。接着,通过I/O接口,处理器可以将前向定点型权值和反向定点型权值存储到所述片外系统中,以分别用于下一次迭代训练中的前向传播过程和反向传播过程。这里,高精度数据格式(例如浮点型)到定点型的转换可以通过量化模块来执行,以通过量化操作来实现不同精度类型的转换。
[0112] 当完成上述的向片外系统的存储过程后,当下一次迭代训练开始后,处理器可以配置用于通过所述I/O接口执行从所述片外系统加载高精度数据格式表示的权值以用于权值更新操作(即,利用该权值和权值梯度来获得新的权值);以及从所述片外系统加载所述前向定点型权值和反向定点型权值,以分别用于所述前向传播过程和反向传播过程。
[0113] 替代于如上所述的在迭代训练过程中获得三份权值(前向定点型权值、反向定点型权值和用于更新的权值),在一个或多个实施例中,在所述神经网络的迭代训练过程中,处理器506也可以配置用于通过所述I/O接口从所述片外系统加载用于当前次迭代训练中的权值更新操作的高精度数据格式表示的权值。接着,处理器例如通过量化模块将所述高精度数据格式表示的权值转换成前向定点型权值和反向定点型权值,以分别用于当前次迭代训练中的前向传播过程和反向传播过程。可以看出,该方案仅仅涉及一份量化数据的维护。
[0114] 进一步,在根据上述操作完成一次迭代训练后,处理器可以对权值执行更新操作,并且将更新后的高精度数据格式表示的权值转换成定点型权值。具体地,所述至少一个处理器可以配置用于将更新后的高精度数据格式表示的权值转换成(例如通过量化操作)所述前向定点型权值和反向定点型权值,以分别用于下一次迭代训练中的前向传播过程和反向传播过程。在一些应用场景中,前向定点型权值和反向定点型权值可以临时保留于片上系统而非向片外系统存储。而在另一些应用场景中,前述的前向定点型权值和反向定点型权值可以通过I/O接口存储到片外系统上,以便于下一次迭代操作中,从片外系统加载到片上系统。
[0115] 上面结合图5对本披露的另一方面的用于训练神经网络的设备进行了描述,通过利用该设备可以增加定点计算时的计算效率,保证权值的精度不会由于量化而不断下降,从而充分发挥定点运算器在神经网络训练中的优势。另外,尽管上文没有提及,但本领域技术人员可以理解本披露的方案还涉及到获得的定点数权值的摆放。具体地,根据训练中的计算要求,可以对用于前向传播过程中的定点数权值进行第一方式的数据摆放,而对于用于反向传播过程中的定点数权值进行第二方式的数据摆放,以满足计算时数据位置的格式要求。对于前述的仅维护一份浮点型权值的方案,其还可以占用较少的DDR空间。另外,当片上系统和片外系统位于同一集成电路板卡上时,本披露的方案并不需要device(从设备,相当于板卡)和host(主设备,相当于服务器等)之间频繁地数据拷贝。
[0116] 根据结合图5的描述,本领域技术人员可以理解的是本披露也同样公开了与前述处理器操作相对应的方法。下面将结合图6描述该方法的简化流程。
[0117] 图6是示出根据本披露实施例的用于通过硬件平台来训练神经网络的方法600的流程图。根据本披露前面的描述,本领域技术人员可以理解方法600可以由包括至少一个处理器的训练设备来执行。这里所述的至少一个处理器可以是结合图5所描述的处理器,因此关于图5对处理器的描述也同样地适合于下面对包括在训练设备中的至少一个处理器。
[0118] 如图6中所示,在步骤602,方法600在训练所述神经网络的权值更新操作中,使用高精度数据格式表示的权值数据并且通过所述至少一个处理器对权值进行更新,以获得更新后的高精度数据格式表示的权值。接着,在步骤604处,方法600利用所述至少一个处理器将所述更新后的高精度数据格式表示的权值转换成定点型权值,以用于所述神经网络的下一次迭代训练。
[0119] 在一个或多个实施例中,该方法进一步包括在所述神经网络的每次迭代过程中,利用所述至少一个处理器来:获取用于当前次迭代训练中的前向传播过程的前向定点型权值;获取用于所述当前次迭代训练中的反向传播过程的反向定点型权值;以及获取用于所述当前次迭代训练中的权值更新操作的高精度数据格式表示的权值。替代地,该方法可以包括其中在所述神经网络的每次迭代过程中,获取用于当前次迭代训练中的权值更新操作的高精度数据格式表示的权值;以及将所述高精度数据格式表示的权值转换成前向定点型权值和反向定点型权值,以分别用于当前次迭代训练中的前向传播过程和反向传播过程[0120] 鉴于方法600的步骤与图5中处理器的操作相同,因此关于图5中处理器的描述也同样适用于方法600的操作,并且因此关于方法600的进一步操作此处不再赘述。
[0121] 根据本披露结合附图的描述,本领域技术人员可以理解在训练神经网络的迭代过程中涉及到大量的神经网络运算(包括例如数据类型的转化和乘累加操作),并且针对这样的大量运算,包括处理器或处理单元的训练装置或计算装置需要执行各种类型的指令。因此,如何有效地提供编译的指令以供处理器来执行成为训练中的一项关键问题。鉴于此,下文将结合附图7来描述本披露另一方面中的一种计算装置,其能有效地解决上述问题并加速神经网络的训练进度。
[0122] 图7是示出根据本披露实施例的用于神经网络运算的计算装置700的框图。如图7中所示,该计算装置700包括位宽获取单元702,其配置用于获取当前参与所述神经网络运算的至少两个运算对象的各自数据位宽。在一个实施例中,所述两个运算对象可以是如前所述的高精度数据类型的数据,例如24位或32位数据位宽的浮点型数据(如图2中所示出的fp32型数据)。在另一个实施例中,所述两个运算对象可以是如前所述的定点型数据,例如8位或16位数据位宽的定点型数据(如图2中所示出的int8或int16)。进一步,所述运算对象可以是本披露如前所述的神经网络数据,其可以包括神经元、权值和梯度中的至少一种数据。
[0123] 基于上述数据种类,在一个实施例中,所述两个运算对象是神经元数据和对应的权值数据,并且其中所述神经网络运算包括在神经网络训练的前向传播过程中,所述神经元数据和对应的权值数据之间的运算。在另一个实施例中,其中所述两个运算对象是神经元数据和输入梯度数据,并且其中所述神经网络运算包括在神经网络训练的反向传播过程中,根据所述神经元数据和输入梯度数据来获得更新的权值数据的运算。在又一个实施例中,其中所述两个运算对象是权值数据和输入梯度数据,并且其中所述神经网络运算包括在神经网络训练的反向传播过程中,根据所述权值数据和梯度数据来获得更新的输入梯度数据的运算。这里,关于前向传播过程和反向传播过程中的计算可以参考结合图1、图2或图5所做的描述,因此在此处不再做过多的描述。
[0124] 进一步,示出的计算装置700还包括模式选择单元704,其配置成根据所述位宽获取单元的输入结果,从多种运算模式中选择对应于所述运算对象的数据位宽组合的一种运算模式,其中每种所述运算模式与一种数据位宽的组合相对应。下面以两个运算对象是神经元数据和对应的权值数据为例来描述如何确定运算模式的过程。
[0125] 假设神经元数据具有n1的位宽而对应的权值数据具有n2的位宽,则模式选择单元可以根据位宽组合(n1,n2)来从多种运算模式中选择与该位宽组合对应的运算模式。例如,当n1为8而n2为16,则模式选择单元选择与位宽组合(8,16)相对应的运算模式。又例如,当n1为16而n2为24,则模式选择单元选择与位宽组合(16,24)相对应的运算模式。类似的过程也同样适用于两个运算对象是权值数据和输入梯度数据或两个运算对象是神经元数据和输入梯度数据,此处不再赘述。
[0126] 另外,计算装置700还包括存储单元706和处理单元708,其中存储单元706配置成存储与每种所述运算模式相对应的运算指令,而所述处理单元708配置成响应于所述模式选择单元的选择,从存储单元读取相对应的运算指令,以执行上述两个运算对象的神经网络运算。在一个实施例中,该运算指令可以是由处理单元执行的机器指令。在另一个实施例中,尽管未示出,计算装置还可以包括编译器,其可以将各类指令(例如前面结合图2描述时所提及的python和C++所编写的指令)编译成指令以供处理单元来执行。
[0127] 在一个场景中,两个运算对象可以是具有定点型数据类型的神经网络数据,即前述的int型数据。在该场景下,计算装置700可以根据两个int型数据的位宽组合来确定运算模式,并选择存储的指令来进行相应的运算。以前述的例子进一步为例,当神经元数据和权值数据都是定点型数据,并分别具有n1=8和n2=8的位宽,则根据位宽组合(8,8)获得,处理单元来调用int8型数据和int8型数据进行卷积运算的指令来执行运算。
[0128] 在另一个场景中,当所述两个运算对象是具有浮点型数据类型的神经网络数据时,则所述处理单元可以进一步包括量化模块(其可以包括图5中所示量化模块510的全部功能),其配置成根据所述位宽获取单元配置的数据位宽和所述模式选择单元配置的对应运算模式来确定量化参数,利用所述量化参数将高精度的所述神经网络数据量化成定点型数据类型的神经网络数据,以参与所述神经网络运算。
[0129] 下面以前向传播过程中的32位浮点型神经元数据(例如图2中的x[fp32])和权值数据(例如图2中的w[fp32])为例来描述上述量化模块的操作过程。首先,位宽获取单元例如通过查找相关存储器或寄存器来确定当前输入的两个数据是32位的浮点型数据,而模式选择单元根据该浮点型位宽组合(32,32)可以确定与定点型位宽组合(8,8)相对应的运算模式和指令。基于此,所述量化模块可以将32位浮点型神经元数据和权值数据量化为8位定点型数据(例如图2中的x[int8]和w[int8]),以使得处理单元调用与(8,8)位宽组合关联的指令来执行神经元数据和权值数据之间的例如卷积运算的神经网络运算。
[0130] 进一步,该所述量化模块可以包括量化策略子模块和量化参数子模块,其中所述量化策略子模块至少用于根据所述模式选择单元配置的对应运算模式确定在所述神经网络运算过程中是否执行量化参数的更新操作,而所述量化参数子模块至少用于根据所述位宽获取单元配置的数据位宽确定量化参数,并使用所述量化参数对所述高精度数据类型的神经网络数据执行所述量化操作,以获得所述定点型数据类型的神经网络数据。在一个实施例中,所述量化策略子模块还可以配置成根据所述神经网络数据的量化误差来确定是否对所述数据位宽进行调整,从而触发所述量化参数子模块根据调整后的数据位宽确定对应的量化参数。关于这里的量化策略子模块和量化参数子模块,其功能和具体操作细节与前面结合图2和图4所描述的量化策略算子和量化参数算子相同或相类似,因此此处不再赘述。
[0131] 通过利用上述结合图7所描述的计算装置,在执行神经网络训练时,可以调用提前编译和存储的针对上述多种运算模式的指令,从而不需要在每次运算时再进行指令的编写及编译。进一步,由于本计算装置支持多种运算模式,因此还可以在量化策略子模块和量化参数子模块确定改变量化后的数据位宽时,根据该调整的数据位宽来动态地调用或跳转到相应的运算模式来执行运算。在一个示例性的应用场景中,当通过量化策略子模块确定量化周期大于0,则此时并不进行量化周期和位宽的更新,并且本计算装置的处理单元可以直接跳过无需执行的相关指令或逻辑,而直接执行神经网络运算,从而减小计算开销并加速训练。
[0132] 图8是示出根据本披露实施例的一种组合处理装置800的结构图。如图所示,该组合处理装置800包括计算装置802,其可以具体化为图4中示出的用于对神经网络执行训练的设备400、图5中示出的处理单元506或图7中示出的计算装置700,并且配置用于执行前述结合附图所描述的训练方法。在一个或多个实施例中,该计算装置也可以是前述用于训练的芯片或集成电路。另外,该组合处理装置还包括通用互联接口804和其他处理装置806。根据本披露的计算装置802可以通过通用互联接口804与其他处理装置806进行交互,共同完成用户指定的操作。
[0133] 根据本披露的方案,该其他处理装置可以包括中央处理器(“CPU”)、图形处理器(“GPU”)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器,其数目可以不做限制而是根据实际需要来确定。在一个或多个实施例中,该其他处理装置可以作为本披露的计算装置与外部数据和控制的接口,执行包括但不限于数据搬运,完成对本计算装置的开启、停止等的基本控制;其他处理装置也可以和计算装置协作共同完成运算任务。
[0134] 根据本披露的方案,该通用互联接口可以用于在计算装置与其他处理装置间传输数据和控制指令。例如,该计算装置可以经由所述通用互联接口从其他处理装置中获取所需的输入数据,写入该计算装置片上的存储装置(或称存储器)。进一步,该计算装置可以经由所述通用互联接口从其他处理装置中获取控制指令,写入计算装置片上的控制缓存。替代地或可选地,通用互联接口也可以读取计算装置的存储模块中的数据并传输给其他处理装置。
[0135] 可选的,该组合处理装置还可以包括存储装置708,其可以分别与所述计算装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算装置和所述其他处理装置的数据,尤其那些在计算装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
[0136] 根据应用场景的不同,本披露的组合处理装置可以作为手机、机器人、无人机、视频监控设备等设备的SOC片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。在此情况下,该组合处理装置的通用互联接口与设备的某些部件相连接。某些部件例如摄像头、显示器、鼠标键盘、网卡或wifi接口。
[0137] 在一些实施例里,本披露还公开了一种芯片,其包括了上述计算装置或组合处理装置。在另一些实施例里,本披露还公开了一种芯片封装结构,其包括了上述芯片。
[0138] 在一些实施例里,本披露还公开了一种板卡,其包括了上述芯片封装结构。参阅图9,其提供了前述的示例性板卡,上述板卡除了包括上述芯片902以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件904、接口装置906和控制器件908。
[0139] 所述存储器件与所述芯片封装结构内的芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元910。每一组所述存储单元与所述芯片通过总线连接。可以理解,每一组所述存储单元可以是DDR SDRAM(“Double Data Rate SDRAM,双倍速率同步动态随机存储器”)。
[0140] DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储器件可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。
[0141] 在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
[0142] 所述接口装置与所述芯片封装结构内的芯片电连接。所述接口装置用于实现所述芯片与外部设备912(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。在另一个实施例中,所述接口装置还可以是其他的接口,本披露并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
[0143] 所述控制器件与所述芯片电连接。所述控制器件用于对所述芯片的状态进行监控。具体地,所述芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。在一个或多个实施例中,所述芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制器件可以实现对所述芯片中多个处理芯片、多个处理和/或多个处理电路的工作状态的调控。
[0144] 在一些实施例里,本披露还公开了一种电子设备或装置,其包括了上述板卡。根据不同的应用场景,电子设备或装置可以包括数据处理装置、机器人、电脑、打印机扫描仪平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、端服务器、相机、摄像机、投影仪、手表机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调微波炉、箱、电饭煲、加湿器洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
[0145] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
[0146] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0147] 在本披露所提供的几个实施例中,应该理解到,所披露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、光学、声学、磁性或其它的形式。
[0148] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
[0149] 所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,当本披露的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0150] 在本披露的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。上述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0151] 依据以下条款可更好地理解前述内容:
[0152] 条款1、一种用于神经网络运算的计算装置,包括:
[0153] 位宽获取单元,其配置成获取当前参与所述神经网络运算的至少两个运算对象的各自数据位宽;
[0154] 模式选择单元,其配置成根据所述位宽获取单元的输入结果,从多种运算模式中选择对应于所述运算对象的数据位宽组合的一种运算模式,其中每种所述运算模式与一种数据位宽的组合相对应;
[0155] 存储单元,其配置成存储与每种所述运算模式相对应的运算指令;以及
[0156] 处理单元,其配置成响应于所述模式选择单元的选择,从存储单元读取相对应的运算指令,以执行所述运算对象的神经网络运算。
[0157] 条款2、根据条款1所述的计算装置,其中所述两个运算对象是神经网络数据,并且所述神经网络数据包括所述神经网络的神经元、权值和梯度中的至少一种数据。
[0158] 条款3、根据条款2所述的计算装置,其中所述两个运算对象是神经元数据和对应的权值数据,并且其中所述神经网络运算包括在神经网络训练的前向传播过程中,所述神经元数据和对应的权值数据之间的运算。
[0159] 条款4、根据条款2所述的计算装置,其中所述两个运算对象是神经元数据和输入梯度数据,并且其中所述神经网络运算包括在神经网络训练的反向传播过程中,根据所述神经元数据和输入梯度数据来获得更新的权值数据的运算。
[0160] 条款5、根据条款2所述的计算装置,其中所述两个运算对象是权值数据和输入梯度数据,并且其中所述神经网络运算包括在神经网络训练的反向传播过程中,根据所述权值数据和输入梯度数据来获得更新的输入梯度数据的运算。
[0161] 条款6、根据条款1-5的任意一项所述的计算装置,其中所述多种运算指令是由所述处理单元执行的机器指令。
[0162] 条款7、根据条款6所述的计算装置,进一步包括编译器,其配置成将所述运算指令编译成所述机器指令。
[0163] 条款8、根据条款7所述的计算装置,其中所述至少两个运算对象是具有定点型数据类型的神经网络数据。
[0164] 条款9、根据条款7所述的计算装置,其中所述至少两个运算对象是具有浮点型数据类型的神经网络数据,所述处理单元进一步包括:
[0165] 量化模块,其配置成根据所述位宽获取单元配置的数据位宽和所述模式选择单元配置的对应运算模式来确定量化参数,利用所述量化参数将高精度的所述神经网络数据量化成定点型数据类型的神经网络数据,以参与所述神经网络运算。
[0166] 条款10、根据条款9所述的计算装置,其中所述量化模块包括量化策略子模块和量化参数子模块,其中所述量化策略子模块至少用于根据所述模式选择单元配置的对应运算模式确定在所述神经网络运算过程中是否执行量化参数的更新操作,而所述量化参数子模块至少用于根据所述位宽获取单元配置的数据位宽确定量化参数,并使用所述量化参数对所述高精度数据类型的神经网络数据执行所述量化操作,以获得所述定点型数据类型的神经网络数据。
[0167] 条款11、根据条款10所述的计算装置,其中所述量化策略子模块还用于配置成根据所述神经网络数据的量化误差来确定是否对作为所述数据位宽进行调整,从而触发所述量化参数子模块根据调整后的数据位宽确定对应的量化参数。
[0168] 条款12、根据条款11所述的计算装置,其中所述量化策略子模块配置成基于所述神经网络数据在量化前和量化后的均值来执行运算,以确定所述量化误差,其中所述量化误差与所述神经网络训练效果相关。
[0169] 条款13、一种集成电路板卡,包括根据条款1-12中的任意一项所述的计算装置。
[0170] 应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
[0171] 还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
[0172] 如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
[0173] 以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明仅用于帮助理解本披露的方法及其核心思想。同时,本领域技术人员依据本披露的思想,基于本披露的具体实施方式及应用范围上做出的改变或变形之处,都属于本披露保护的范围。综上所述,本说明书内容不应理解为对本披露的限制。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈