1.本技术涉及用于选择表示深度神经网络(dnn)的网络参数的数字格式的方法和系统。
背景技术:2.深度神经网络(dnn)是人工神经网络的一种形式,包括可用于机器学习应用程序的多个互连层。特别地,dnn可用于信号处理应用程序,包括但不限于图像处理和计算机视觉应用程序。图1示出了包括多个层102
‑
1、102
‑
2、102
‑
3的示例性dnn 100。每一层102
‑
1、102
‑
2、102
‑
3接收输入数据,并且根据层来处理该输入数据以产生输出数据。输出数据要么作为输入数据提供给另一层,要么作为dnn的最终输出数据输出。例如,在图1的dnn 100中,第一层102
‑
1接收到dnn 100的原始输入数据104,并且根据第一层102
‑
1处理输入数据以产生输出数据。第一层102
‑
1的输出数据成为第二层102
‑
2的输入数据,该第二层根据第二层102
‑
2处理该输入数据以产生输出数据。第二层102
‑
2的输出数据成为第三层102
‑
3的输入数据,该第三层根据第三层102
‑
3处理该输入数据以产生输出数据。第三层102
‑
3的输出数据作为dnn的输出数据106输出。
3.参考图2,该图示出了在dnn中使用的数据格式的示例性概述。如在图2中可以看到的,在dnn中使用的数据可由多个平面形成。例如,输入数据可被布置成p平面的数据,其中每一个平面具有维度xxy。
4.对层的输入数据执行的处理取决于层的类型。例如,dnn的每一层可以是多种不同类型中的一种类型。示例性dnn层类型包括但不限于卷积层、激活层、归一化层、池化层,以及全连接层。对于本领域的技术人员将显而易见的是,这些是示例性dnn层类型,并且这不是详尽的列表,并且可存在其他dnn层类型。
5.对于卷积层,通过将输入数据与同该层相关联的权重进行卷积来处理输入数据。具体地,每个卷积层与多个权重w0…
w
g
相关联,这些权重也可以被称为滤波器权重或系数。权重被分组以形成或定义一个或多个滤波器,该一个或多个滤波器还可以被称为内核,并且每个滤波器可与偏移量偏置bias相关联。如图2所示,每个过滤器可具有维度mxnxp(即,每个过滤器可包括一组mxnxp权重w),并且可以根据跨步骤s和t在x和y方向上的卷积运算应用于输入数据。滤波器的数量和每个滤波器的权重的数量可在卷积层与卷积层之间不同。卷积神经网络(cnn)是一种有效的图像识别和分类方法,它是dnn的一种特殊类型,一般包括多个卷积层。
6.通常但不一定在卷积层之后的激活层对层的输入数据执行一个或多个激活函数。激活函数取单个数字并且对其执行某些非线性数学运算。在一些示例中,激活层可以通过实现relu函数(即,f(x)=max(0,x))来充当整流线性单元(relu),或者通过实现prelu函数来充当参数整流线性单元(prelu)。
7.归一化层被配置为对输入数据执行归一化函数,诸如局部响应归一化(lrn)函数。
通常但不一定插入连续卷积层之间的池化层执行池化函数诸如max函数或mean函数,以汇总输入数据的子集。因此,池化层的目的是减小表示的空间大小,以减少网络中参数和计算的数量,并且因此还控制过度拟合。
8.通常但不一定在多个卷积层和池化层之后的全连接层取三维输入数据值的集合,并且输出n维向量。在dnn用于分类的情况下,n可以是类别的数量,并且向量中的每一个值可以表示某个类别的概率。该n维向量通过一组权重的矩阵相乘而生成,可选地后面是偏置偏移量。因此,全连接层接收一组权重和偏置。
9.因此,如图3所示,dnn的每一层302接收输入数据值并且生成输出数据值;并且一些层(诸如卷积层和全连接层)还接收权重和/或偏置。dnn的输入数据值、输出数据值、权重和偏置可统称为dnn的网络参数。
10.用于实现dnn的硬件(例如,dnn加速器)包括可被配置为根据dnn的层处理到dnn的输入数据的硬件逻辑。具体地,用于实现dnn的硬件逻辑包括可被配置为根据每一层来处理到该层的输入数据并且生成该层的输出数据的硬件逻辑,该输出数据要么成为另一层的输入数据,要么成为dnn的输出。例如,如果dnn包括卷积层,后面是激活层,则可被配置为实现dnn的硬件逻辑包括可被配置为使用与该卷积层相关联的权重和偏置对dnn的输入数据执行卷积以产生卷积层的输出数据的硬件逻辑,以及可被配置为将激活函数应用于到激活层的输入数据(即,卷积层的输出数据)以生成dnn的输出数据的硬件逻辑。
11.如本领域的技术人员所知,为了使硬件处理一组值,每一个值以数字格式表示。两种常见的数字格式是定点数格式和浮点数格式。如本领域的技术人员所知,定点数格式在基数点(例如,小数点或二进制点)之后具有固定数量的数位。相反,浮点数格式没有固定的基数点(即,可以“浮动”)。换句话讲,基数点可被放置在表示中的多个位置。虽然以浮点数格式表示dnn的网络参数可允许产生更准确或更精确的输出数据,但在硬件中以浮点数格式处理网络参数很复杂,与以其他格式诸如但不限于定点数格式处理网络参数的硬件相比,这往往会增加芯片面积、功耗、存储器和带宽消耗以及硬件的复杂性。因此,用于实现dnn的硬件可被配置为以另一种格式诸如定点数格式表示dnn的网络参数,以减少面积、功耗、存储器和带宽消耗以及硬件逻辑的复杂性。
12.一般来讲,用于表示dnn的网络参数(例如,输入数据值、权重、偏置和输出数据值)的位越少,可以在硬件中实现dnn的效率越高。然而,通常表示dnn的网络参数(例如,输入数据值、权重、偏置和输出数据值)的位越少,dnn的准确度就变得越低。因此,期望标识用于表示dnn的网络参数的数字格式,所述数字格式平衡用于表示网络参数的位的数量和dnn的准确度。
13.下面描述的实施方案仅以举例的方式提供,并且不限制解决标识用于表示dnn的网络参数的数字格式的方法和系统的任何或所有缺点的实施方式。
技术实现要素:14.提供本发明内容是为了介绍在以下详细描述中进一步描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
15.本文描述了确定用于表示深度神经网络“dnn”的一组两个或更多个网络参数的数
字格式,以用于配置硬件逻辑以实现dnn的方法。该方法包括:确定dnn相对于该组网络参数中的每一个网络参数的灵敏度;针对多个候选数字格式中的每一个候选数字格式:根据候选数字格式确定与对该组网络参数中的每一个网络参数进行量化相关联的量化误差;基于灵敏度和量化误差生成由该组网络参数的量化引起的dnn的输出中的误差的估计;基于估计的误差生成局部误差;并且选择多个候选数字格式中局部误差最小的候选数字格式作为该组网络参数的数字格式。
16.第一方面提供了一种计算机实现的方法,该计算机实现的方法确定用于表示深度神经网络“dnn”的一组两个或更多个网络参数的数字格式,以用于配置硬件逻辑以实现dnn,该方法包括:确定dnn相对于该组网络参数中的每一个网络参数的灵敏度;针对多个候选数字格式中的每一个候选数字格式:根据候选数字格式确定与对该组网络参数中的每一个网络参数进行量化相关联的量化误差;基于灵敏度和量化误差生成由该组网络参数的量化引起的dnn的输出中的误差的估计;以及基于估计的误差生成局部误差;并且选择多个候选数字格式中局部误差最小的候选数字格式作为该组网络参数的数字格式。
17.确定dnn相对于网络参数的灵敏度可包括:响应于测试数据确定dnn模型的输出;基于dnn相对于网络参数的输出确定一个或多个值的偏导数;以及根据一个或多个偏导数确定灵敏度。
18.该一个或多个偏导数可通过反向传播技术来确定。
19.dnn的模型可以是dnn的浮点模型。
20.dnn的输出可以包括单个值,并且基于dnn的输出的一个或多个值可以包括单个输出值。
21.dnn的输出可以包括多个值并且基于dnn的输出的一个或多个值可以包括多个输出值中的每一个输出值。
22.dnn的输出可以包括多个值,并且基于dnn的输出的一个或多个值可以包括基于多个输出值的单个汇总值。
23.汇总值可以是多个输出值的总和。
24.汇总值可以是多个输出值中的最大值。
25.生成由该组网络参数的量化引起的dnn的输出中的误差的估计可包括计算量化误差的加权总和,其中与网络参数的量化误差相关联的权重是dnn相对于该网络参数的灵敏度。
26.生成由该组网络参数的量化引起的dnn输出中的误差的估计可包括计算量化误差的加权总和的绝对值,其中与网络参数的量化误差相关联的权重是dnn相对于该网络参数的灵敏度。
27.生成由该组网络参数的量化引起的dnn的输出中的误差的估计可包括:(i)针对该组中的每一个网络参数,计算该网络参数的量化误差的乘积的绝对值和dnn相对于该网络参数的灵敏度;以及(ii)计算绝对值的总和。
28.生成由该组网络参数的量化引起的dnn的输出中的误差的估计可包括:(i)针对每一个网络参数计算该网络参数的量化误差的平方;(ii)针对每一个网络参数计算该网络参数的量化误差的平方的乘积和dnn相对于该网络参数的灵敏度的绝对值;以及(iii)计算乘积的总和。
29.每个候选数字格式可以由位宽和指数定义。
30.多个候选数字格式可以具有相同的位宽和不同的指数。
31.每个候选数字格式可以由位宽定义。候选数字格式中的至少两个候选数字格式可以具有不同的位宽。局部误差可以进一步基于大小参数。
32.当根据候选数字格式对该组中的网络参数进行量化时,大小参数可以基于表示该组中的网络参数的位数。
33.该组网络参数可以是以下各项中的一者:dnn的层的输入数据值的全部或一部分;dnn的层的权重的全部或一部分;dnn的层的偏置的全部或一部分;以及dnn的层的输出数据值的全部或一部分。
34.该方法还可以包括配置硬件逻辑以使用所选择的数字格式来实现dnn,这通过配置硬件逻辑以根据所选择的数字格式来接收和处理该组网络参数来进行。
35.局部误差可以是估计的误差或估计的误差和大小参数的组合,该大小参数反映该组网络参数中的网络参数根据候选数字格式量化时的大小。
36.第二方面提供了一种确定用于表示深度神经网络“dnn”的网络参数的数字格式,以用于配置硬件逻辑以实现dnn的方法,该方法包括:将dnn的网络参数分成多组网络参数,每一组包括两个或更多个网络参数;以及针对每一组网络参数执行第一方面的方法。
37.每一组网络参数可包括到dnn的层的输入数据值的全部或一部分;到dnn的层的偏置的全部或一部分;或者到dnn的层的权重的全部或一部分。
38.第三方面提供了基于计算的装置,该基于计算的装置用于确定表示深度神经网络“dnn”的一组两个或更多个网络参数的数字格式,以用于配置硬件逻辑以实现dnn,该基于计算的装置包括:至少一个处理器;以及耦合到至少一个处理器的存储器,该存储器包括计算机可读代码,该计算机可读代码在由至少一个处理器执行时致使该至少一个处理器执行以下操作:确定dnn相对于一组网络参数中的每一个网络参数的灵敏度;针对多个候选数字格式中的每一个候选数字格式:根据候选数字格式,确定与对该组网络参数中的每一个网络参数进行量化相关联的量化误差;基于灵敏度和量化误差生成由该组网络参数的量化引起的dnn的输出中的误差的估计;基于估计的误差生成局部误差;并且选择具有最小局部误差的候选数字格式作为该组网络参数的数字格式。
39.可配置为实现dnn的硬件逻辑(例如,dnn加速器)可体现在集成电路上的硬件中。可提供一种在集成电路制造系统处制造可配置为实现dnn的硬件逻辑(例如,dnn加速器)的方法。可提供集成电路定义数据集,当在集成电路制造系统中进行处理时,该集成电路定义数据集将系统配置为制造可配置为实现dnn的硬件逻辑(例如,dnn加速器)。可提供一种非暂时性计算机可读存储介质,在其上存储有可配置为实现dnn的硬件逻辑(例如,dnn加速器)的计算机可读描述,当该计算机可读描述在集成电路制造系统中被处理时,使集成电路制造系统制造体现可配置为实现dnn的硬件逻辑(例如,dnn加速器)的集成电路。
40.可提供一种集成电路制造系统,包括:非暂时性计算机可读存储介质,其上存储有可配置为实现dnn的硬件逻辑(例如,dnn加速器)的计算机可读描述;布局处理系统,该布局处理系统被配置为处理计算机可读描述,以便生成体现可配置为实现dnn的硬件逻辑(例如,dnn加速器)的集成电路的电路布局描述;以及集成电路生成系统,该集成电路生成系统被配置为制造可配置为根据电路布局描述实现dnn的硬件逻辑(例如,dnn加速器)。
41.可以提供用于执行如本文所述的方法的计算机程序代码。可以提供上面存储有计算机可读指令的非暂态计算机可读存储介质,当在计算机系统处执行时,所述计算机可读指令使计算机系统执行如本文所述的方法。
42.如对本领域的技术人员显而易见的,上述特征可以适当地组合,并且可以与本文所述的示例的任何方面组合。
附图说明
43.现在将参考附图详细描述示例,在附图中:
44.图1是示例性深度神经网络(dnn)的示意图;
45.图2是dnn中的示例性数据的示意图;
46.图3是示出输入到dnn的层和从dnn的层输出的数据的示意图;
47.图4是由在mobilenet v1 cnn的卷积层的输出上操作的relu
‑
6激活输出的一组数据值的灵敏度与量值关系的图;
48.图5是由mobilenet v1 cnn的卷积层输出的一组数据值的灵敏度与量值关系的图;
49.图6是mobilenet v1 cnn的卷积层的一组权重的灵敏度与量值关系的图;
50.图7是mobilenet v1 cnn的卷积层的一组偏置的灵敏度与量值关系的图;
51.图8是选择用于表示dnn的一组网络参数的数字格式的示例性方法的流程图;
52.图9是示出响应于输入数据来确定dnn模型的输出的示意图;
53.图10是示出具有单个输出的示例性dnn的反向传播的示意图;
54.图11是示出具有多个输出的示例性dnn的反向传播的示意图;
55.图12是示出dnn相对于网络参数的输出的偏导数的示意图;
56.图13是确定用于表示dnn的网络参数的数字格式的示例性方法的流程图;
57.图14是示例性dnn加速器的框图;
58.图15是示例性的基于计算的装置的框图;
59.图16是其中可实现dnn加速器的示例性计算机系统的框图;并且
60.图17是用于生成体现如本文所述的dnn加速器的集成电路的示例性集成电路制造系统的框图。
61.附图示出了各种示例。技术人员将理解,附图中所示的元件边界(例如,框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
62.通过举例的方式给出以下描述,以使本领域的技术人员能够制造和使用本发明。本发明不限于本文中描述的实施方案,并且对所公开的实施方案的各种修改对于本领域的技术人员而言将是显而易见的。仅通过举例的方式描述实施方案。
63.如上所述,虽然以浮点数格式表示dnn的网络参数可允许由dnn产生更准确或更精确的输出数据,但在硬件中以浮点数格式处理网络参数很复杂,与以其他格式诸如但不限
于定点数格式处理网络参数的硬件相比,这往往会增加芯片面积、功耗、存储器和带宽消耗以及硬件的复杂性。因此,用于实现dnn的硬件诸如dnn加速器可被配置为以另一种数字格式诸如定点数格式来表示和处理dnn的网络参数,以减少面积、功耗、存储器和带宽消耗以及硬件逻辑的复杂性。
64.存在多种不同类型的数字格式。每个数字格式类型定义形成该类型数字格式的参数以及解释参数的方式。例如,一个示例性数字格式类型可以指定数字或值由位尾数m和指数exp表示并且该数字等于m*2
exp
。如下文更详细描述的,一些数字格式类型可以具有可配置参数,这些可配置参数也可以被称为量化参数,这些量化参数可以在该类型的数字格式之间变化。例如,在上述示例性数字格式中,位宽b和指数exp可以是可配置的。因此,该类型的第一数字格式可以使用位宽b4和指数exp6,并且该类型的第二不同的数字格式可以使用位宽b8和指数exp
‑
3。
65.一般来讲,可用于表示dnn的网络参数(例如,输入数据值、权重、偏置和输出数据值)的位越少,可以在硬件中实现dnn的效率越高。然而,通常表示dnn的网络参数(例如,输入数据值、权重、偏置和输出数据值)的位越少,dnn的准确度就变得越低。因此,期望标识用于表示dnn的网络参数的数字格式,所述数字格式平衡用于表示网络参数的位的数量和dnn的准确度。
66.量化的dnn(即,其中网络参数的至少一部分由非浮点数格式表示的dnn的型式)的准确度可以通过将此类dnn的响应于输入数据的输出与基线或目标输出进行比较来确定。基线或目标输出可以是未量化型式的dnn(即,dnn的所有网络参数由浮点数格式表示的型式,在本文中可被称为dnn的浮点型式或浮点dnn)的响应于相同的输入数据的输出或输入数据的真实输出。量化的dnn的输出来自基线或目标输出越多,量化的dnn的准确度就越低。量化的dnn的大小可以由用于表示dnn的网络参数的位数来确定。因此,用于表示dnn的网络参数的数字格式的位深度越低,dnn就越小。
67.虽然可使用单个数字格式表示dnn的所有网络参数(例如,输入数据值、权重、偏置和输出数据值),但这样一般不会产生小且准确的dnn。这是因为不同的dnn层往往具有不同范围的值。例如,一个层可以具有介于0和6之间的输入数据值,而另一层可以具有介于0和500之间的输入数据值。因此,使用单个数字格式可能不允许有效或准确地表示任一组输入数据值。因此,dnn的网络参数可以被分成多组网络参数,并且可以为每一组选择数字格式。优选地,每一组网络参数包括相关的或类似的网络参数。由于相同层的相同类型的网络参数趋于相关,因此每一组网络参数可以是层的特定类型的网络参数的全部或一部分。例如,每一组网络参数可以是层的输入数据值的全部或一部分;层的权重的全部或一部分;层的偏置的全部或一部分;或者层的输出数据值的全部或一部分。一组网络参数包括层的特定类型的网络参数的全部还是仅一部分可取决于实现dnn的硬件。例如,可用于实现dnn的一些硬件针对每一层的每一个网络参数类型可仅支持单个数字格式,而可用于实现dnn的其他硬件针对每一层的每一个网络参数类型可以支持多种数字格式。
68.用于实现dnn的硬件诸如dnn加速器可以支持网络参数的一种类型的数字格式。例如,用于实现dnn的硬件可以支持数字格式,其中数字由b位尾数和指数exp表示。为了允许使用不同的数字格式来表示不同的网络参数集合,用于实现dnn的硬件可以使用具有一个或多个可配置参数的数字格式类型,其中在集合中的所有值之间共享参数。这些类型的数
字格式在本文中可以被称为数字格式的块可配置类型或数字格式的集合可配置类型。因此,不可配置格式诸如int32和浮点数格式不是数字格式的块可配置类型。数字格式的示例性块可配置类型如下所述。
69.数字格式的示例性块可配置类型
70.可用于表示dnn的网络参数的一种示例性块可配置类型的数字格式为q类型格式,其指定预先确定的数量的整数位a和小数位b。因此,数字可表示为qa.b,总共需要a+b+1位(包括符号位)。下面的表1中示出了示例性q类型格式。q类型格式的量化参数是整数位数a和小数位数b。
71.表1
72.q格式描述示例q4.44个整数位和4个小数位0110.11102q0.80整数位和8个小数位.01101110273.可用于表示dnn的网络参数的另一个示例性块可配置类型的数字格式是其中这种类型的数字格式由固定整数指数exp和b位尾数m定义的数字格式,使得值u等于u=2
exp
m。在一些情况下,尾数m可以用二进制补码格式表示。然而,在其他情况下,可以使用其他经签名或未签名的整数格式。在这些情况下,指数exp和尾数位数b只需要针对以该数字格式表示的一组值存储一次。这种类型的不同数字格式可以具有不同的尾数位长度b和/或不同的指数exp,因此这种类型的数字格式的量化参数包括尾数位长度b(在本文中还可以称为位宽、位深度或位长度)和指数exp。
74.可用于表示dnn的网络参数的最后一个示例性块可配置类型的数字格式是8位非对称定点(q8a)类型格式。在一个示例中,这种类型的数字格式包括最小可表示数字r
min
、最大可表示数字r
max
、零点z和8位数字d
q8a
,用于集合中的标识最小和最大可表示数字之间的线性插值因子的每一个值。在其他情况下,可以使用这种类型的格式的变体,其中用于存储插值因子d
qba
的位数可变(例如,用于存储插值因子的位数b可以是多个可能的整数中的一个整数)。在该示例中,q8a类型格式或q8a类型格式的变体可以近似于浮点值d
浮动
如等式(1)所示,其中b是量化表示所使用的位数(即,对于q8a格式为8),并且z是量化的零点,将总是准确地映射回0。这种示例性类型的数字格式的量化参数包括最大可表示数字或值r
max
、最小可表示数字或值r
min
、量化的零点z以及可选地,尾数位长度b(即,当位长度不固定为8时)。
[0075][0076]
在另一个示例中,针对集合中的每一个值,q8a类型格式包括始终准确地映射到0的零点z、比例因子scale和8位数字d
q8a
。在该示例中,这种类型的数字格式近似于等式(2)中所示的浮点值d
浮动
。类似于第一示例性q8a类型格式,在其他情况下,整数或尾数分量的位数可以变化。该示例性类型的数字格式的量化参数包括零点z、比例scale以及可选地,尾数位长度b。
[0077]
d
浮动
=(d
q8a
‑
z)*scale
ꢀꢀꢀ
(2)
[0078]
确定特定的块可配置类型的数字格式的数字格式可以被描述为标识该类型的数字格式的一个或多个量化参数。例如,确定由b位尾数和指数exp定义的数字格式类型的数
字格式可包括标识尾数和/或指数exp的位宽b。
[0079]
数字格式选择方法
[0080]
已经开发出几种方法来标识用于表示dnn的网络参数的数字格式。用于选择表示dnn的一组网络参数的数字格式的一种简单方法(在本文中可称为全范围方法或最小值/最大值方法)可包括,针对给定的尾数位深度b(或给定的指数exp),选择覆盖层的预期的网络参数集合x的范围的最小指数exp(或最小尾数位深度b)。例如,对于给定的尾数位深度b,可以根据等式(3)来选择指数exp,使得数字格式覆盖x的整个范围,其中是上限函数:
[0081][0082]
然而,此类方法对异常值敏感。具体地,当网络参数集合x有异常值时,会牺牲精确度来覆盖异常值。这可导致大量的量化误差(例如,第一数字格式(例如,浮点数格式)的网络参数集合与所选择的数字格式的网络参数集合之间的误差)。因此,由量化引起的层和/或dnn的输出数据中的误差可比数字格式的覆盖范围更小但精确度更高时的误差要大。
[0083]
另一种方法(可称为加权异常值方法)在申请人的英国专利申请号1718293.2中有所描述,该专利申请的全文以引用方式并入本文。在加权异常值方法中,当使用特定的数字格式时,基于量化误差的加权总和从多个可能的数字格式中选择一组网络参数的数字格式,其中将恒定的权重应用于落入数字格式的可表示范围内的网络参数的量化误差,并且将线性增加的权重应用于落入可表示范围之外的值的量化误差。
[0084]
另一种方法(可称为反向传播方法)在申请人的英国专利申请号1821150.8中有所描述,该专利申请的全文以引用方式并入本文。在反向传播方法中,通过使用反向传播迭代地确定成本相对于每个量化参数的梯度并且调整量化参数直到成本收敛,来选择产生最佳成本(例如,dnn准确度和dnn大小(例如,位数)的组合)的量化参数。该方法可以产生良好的结果(例如,(就位数而言)小但是准确的dnn),然而可能需要很长的时间才能收敛。
[0085]
最后,另一种方法(可称为端对端方法)在申请人的英国专利申请号1718289.0中有所描述,该专利申请的全文以引用方式并入本文。在端对端方法中,根据预先确定的序列一次针对一层选择dnn的网络参数的数字格式,其中在序列中,在任何层之前的层是该层所依赖的层。当多个可能的数字格式中的每一个数字格式用于表示层的一组网络参数时,基于dnn的输出中的误差,从多个可能的数字格式中选择该组网络参数的数字格式。一旦针对层选择了数字格式,针对序列中的后续层对dnn的输出中的误差的任何计算都基于使用所选择的数字格式表示的该层的网络参数。这可比反向传播方法更快(例如,它可以更快地为dnn产生一组数字格式),但准确度较低,但是与最小值/最大值方法和加权异常值方法相比,准确度更高。
[0086]
这些方法可被分成两组:易于实现并且可快速标识dnn的网络参数的一组数字格式,但在大小和准确度方面可提供次优结果的方法,诸如最小值/最大值方法和加权异常值方法;以及实现起来较为复杂并且需要较多的时间来标识dnn的网络参数的一组数字格式,但产生更好的dnn(小但是准确的dnn)的方法,诸如反向传播方法和端对端方法。因此,需要一种为dnn的网络参数选择数字格式的方法,该方法可以快速产生一组数字格式,但也可以产生良好的dnn(例如,小但是准确的dnn)。
[0087]
因此,本文描述了用于标识表示dnn的一组网络参数的数字格式的方法和系统,其中数字格式被选择为多个候选数字格式的最小化局部误差的候选数字格式。局部误差基于
对由网络参数集合的量化引起的dnn的输出中的误差的估计,其中对由网络参数集合的量化引起的dnn的输出中的误差的估计基于集合中的每一个网络参数的量化误差和dnn对集合中的每一个网络参数的灵敏度。如下文更详细描述的,dnn对特定网络参数的灵敏度指示特定网络参数对dnn的输出的重要性、影响或意义(significance),并且因此指示特定网络参数的扰动可能影响dnn的输出中的误差的程度。
[0088]
基于灵敏度和量化误差估计由一组网络参数的量化引起或归因于一组网络参数的量化的dnn的输出中的误差已被证明是估计误差的准确方法。特别地,一般来讲,网络参数的量化误差的量值越高,dnn的输出中的误差就越大(并且因此,dnn的准确度越低)。然而,并非所有网络参数都同样有助于输出。具体地,一些网络参数对输出的影响将大于其他网络参数。因此,根据灵敏度和量化误差而不是仅仅根据量化误差来估计由一组网络参数的量化引起或归因于一组网络参数的量化的dnn的输出中的误差,可以产生与量化该组网络参数相关联的误差的更准确的估计。
[0089]
例如,现在参考图4至图7,这些图示出了灵敏度与mobilenet v1卷积神经网络(cnn)的各种网络参数的量值的关系图。如本领域的技术人员所知,mobilenet是用于图像分类和移动视觉的cnn。mobilenet v1包括将所接收的输入数据值限制在[0,6]范围内的hard sigmoid激活层(relu
‑
6)。图4示出了灵敏度与relu
‑
6激活层的输出数据值(该输出数据值变成另一层的输入数据值)的量值的关系图。输出数据值的量值受到限制介于0和6之间,在0处具有强峰,并且图4示出,平均而言,小值似乎比大值更为敏感。图5示出了灵敏度与图4的relu
‑
6激活层的输入数据值的量值的关系图。
[0090]
尽管存在大量的大于6(激活层的限辐点(clipping point))的输入数据值,但从图5可以看出,大于6的那些输入数据值在最终输出中实际上是无关的,因为灵敏度为零。因此,纯粹的基于量值的格式选择方法(诸如最小值/最大值方法和加权异常值方法)将为该组输入数据值选择或标识所覆盖的范围大于所需的[0,6]范围的数字格式,从而牺牲范围的精确度。然而,在选择数字格式时,通过考虑灵敏度,可以不考虑将被激活层裁剪的输入数据值。本领域的技术人员将理解,关于relu
‑
6激活层所见的相同的效应对于其他“扁平化”层也可能可见,诸如但不限于sigmoid层和tanh激活层。
[0091]
图6示出了灵敏度与紧接在图4和图5的relu
‑
6激活层之前的卷积层权重的量值的关系图。在mobilenet v1中,一些层的权重具有在零附近的强峰和由相对较少的权重组成的长尾部。保留还是裁剪这些权重取决于输出相对于其他权重的灵敏度。在图6的示例中,最敏感的权重似乎集中在零附近,并且长尾部由看似不重要的权重组成。这表明可以安全地裁剪异常值,以便为零附近的权重提供更高的精确度。
[0092]
图7示出了灵敏度与图6的卷积层的偏置的量值的关系图。在mobilenet v1中,卷积层往往具有看起来比权重更均匀地分布的偏置。
[0093]
因此,从图4至图7可以看出,网络参数的灵敏度与网络参数的量值之间不存在特别恒定的关系。事实上,不同层的网络参数具有非常不同的联合分布。因此,灵敏度提供与选择不能仅从量值推断的适当数字格式有关的信息,并且因此使用灵敏度来标识网络参数的数字格式可以改进先前基于量值的方法,诸如最小值/最大值方法和加权异常值方法。具体地,在本文所述的方法中,强烈影响或干扰(influence)dnn的输出的网络参数被称为是“敏感的”,并且根据灵敏度和量化误差来选择数字格式,使得针对最不敏感的网络参数产
生最大的量化误差,并且相反地,灵敏度高的那些网络参数被保留为具有尽可能低的量化误差。
[0094]
此外,基于量化误差和灵敏度估计由网络参数的量化引起的dnn的输出中的误差意味着,与端对端方法和反向传播方法不同,对dnn的输出不必进行多次确定或评估。具体地,可根据dnn的单次前向传递确定灵敏度,并且如下文更详细描述的,可根据单次反向传递确定灵敏度。因此,所描述的方法允许快速且有效地标识数字格式。
[0095]
根据灵敏度和量化误差的误差估计
[0096]
现在将提供解释来说明为什么可以使用dnn关于集合中的网络参数的灵敏度以及与将网络参数量化为特定数字格式相关联的量化误差,准确地估计与将一组网络参数量化为特定数字格式相关的dnn的输出中的误差。具体地,在不失一般性的情况下,用可微函数f(x)表示dnn。通过一阶泰勒级数展开式,等式(4)给出了在输入x的小扰动δx后函数输出的近似:
[0097][0098]
重新排列等式(4),输出中的扰动的大小或量值的近似由等式(5)给出:
[0099][0100]
在该函数是具有多个输出的多变量函数的情况下,等式(5)变成等式(6),其中与一组变量的扰动相关的第j输出扰动的总大小由每个变量x
i
引起的第j输出中扰动的总和给出:
[0101][0102]
如本领域的技术人员所知(并且在下文更详细地描述),量化将第一数字格式的网络参数x舍入为另一种数字格式f的可表示数字q(x,f)。数字格式f由一个或多个量化参数定义。如上所述,不同类型的数字格式可以由不同的量化参数定义。例如,如上所述,q类型格式由整数位数和小数位数定义;并且另一种格式类型可以由指数exp和位宽b定义。量化在原始网络参数x和量化网络参数q(x,f)之间引入误差,该误差可被视为原始值的扰动,如等式(7)所示:
[0103]
δx=q(x,f)
‑
x
ꢀꢀꢀꢀ
(7)
[0104]
然后,根据等式(6),对由一组n个网络参数的量化引起的dnn的第j
输出
中的误差的估计可以写成如等式(8)所示。
[0105][0106]
因此,对一组网络参数被量化为数字格式f而引起的dnn的第j
输出
中的误差的估计可通过以下方式确定:(i)与将集合中的每一个网络参数量化为数字格式相关联的量化误差q(x
i
,f)
‑
x
i
);以及(ii)第j
输出
相对于集合中的每一个值的偏导数函数关于变量或值的偏导数也可称为函数关于变量或值的梯度。
[0107]
然后,由一组网络参数的量化引起的输出中的总误差可被估计为由一组网络参数的量化引起的每一个输出中的误差的总和,如等式(9)所示:
[0108][0109]
针对一组中的每一个值计算等式(9)中的偏导数相当于计算等式(10)中所示的函数f的雅可比矩阵j。如本领域的技术人员所知,具有多个输出的多变量函数的雅可比矩阵是其所有一阶偏导数的矩阵。在一些情况下,由于对计算和存储器要求,特别是对于具有大量输出(例如,1,000或更多的输出)的dnn,可能难以有效地计算完整的雅可比矩阵。类似于下面给出的那些进行定义的灵敏度可以基于雅可比矩阵的显式计算;然而,出于效率和实用性的原因,通常优选地以某种方式对其进行汇总。
[0110][0111]
一种避免计算j的方法是重新排列等式(9),如等式(11)所示,并且将网络参数x
i
相对于网络输出的灵敏度s
i
定义为偏导数之和,如等式(12)所示。这是使用网络输出的汇总s的示例;f在此已通过汇总s=∑
j
f
j
进行汇总,使得从而得出等式(13)。
[0112][0113][0114][0115]
s可以根据dnn的输出f
j
以任何合适的方式定义。在一些情况下,s可以是dnn输出的总和,如等式(14)所示。计算等式(14)中列出的s的优点是s将考虑dnn的所有输出。然而,计算等式(14)中列出的s可能效果不佳,例如,在dnn的输出(例如,softmax输出)被归一化而使得所有输出的总和总是常数的情况下。在此类情况下,在理论上s的梯度为0。因此,在其他情况下,s可以是输出的最大值,如等式(15)所示。这种计算s的方法避免了等式(14)中存在的归一化输出问题,并且已经证明可以产生良好的结果(例如,小但是准确的dnn),尤其是对于分类网络。然而,根据等式(15)计算s可能不适合输出不受最大输出值支配的dnn,诸如但不限于图像回归dnn。对于本领域的技术人员将显而易见的是,这些是计算s的示例性方法并且可以任何合适的方式根据dnn的输出f
j
计算s。
[0116]
s=∑
j
f
j
ꢀꢀꢀꢀꢀ
(14)
[0117]
s=max
j
f
j
ꢀꢀꢀꢀ
(15)
[0118]
因此,为了最小化由于一组网络参数的量化而引起的dnn的输出中的误差,可以选择量化网络参数集合的最佳数字格式作为最小化基于输出中的误差估计g的局部误差e的数字格式,其中估计g基于集合中网络参数的量化误差和灵敏度。局部误差e可以表示为如等式(16)所示,并且选择数字格式作为最小化局部误差e的数字格式用等式(17)表示:
[0119]
e(f)=g(q(x,f)
‑
q(x),s(x))
ꢀꢀꢀꢀ
(16)
[0120]
f
*
=argmin
f
e(f)
ꢀꢀꢀ
(17)
[0121]
对误差的估计g可以任何合适的方式根据量化误差和灵敏度来计算。例如,估计的误差g可以根据等式(13)或其变体来计算。在一些示例中,可以将对误差的估计g计算为根
据等式(13)计算的误差估计的绝对值。换句话讲,g可以等于量化误差的加权总和的绝对值,其中特定量化误差的权重等于dnn对相应的网络参数的灵敏度。这由等式(18)表示。在其他示例中,对误差的估计g可以通过以下方式计算:(i)针对集合中的每一个网络参数,计算该网络参数的量化误差的乘积的绝对值和dnn相对于该网络参数的灵敏度;以及(ii)计算绝对值的总和。这由等式(19)表示。在其他示例中,对误差的估计g可以通过以下方式计算:(i)针对每一个网络参数计算该网络参数的量化误差的平方;(ii)针对每一个网络参数计算该网络参数的量化误差的平方的乘积和dnn相对于该网络参数的灵敏度的绝对值;以及(iii)计算乘积的总和。在等式(20)中对此进行表示。测试表明,根据等式(20)计算估计的误差g对于许多dnn效果良好。对于本领域的技术人员将显而易见的是,这些仅是示例,并且可以任何合适的方式根据网络参数的量化误差和灵敏度来计算对误差的估计g。
[0122][0123][0124][0125]
在位宽在候选数字格式之间变化的情况下,可以修改局部误差e以包括惩罚具有大的位深度的数字格式的附加项。例如,在一些情况下,如等式(21)所示,局部误差e可以被修正为包括大小参数b,当使用特定的候选数字格式时,其反映网络参数的大小。例如,在一些情况下,当使用特定的候选数字格式时,b可以是基于位数来表示网络参数的正值。由于量化误差,因此总是可以通过增加位宽来减少估计的误差g,产生最佳或最小的g的位宽通常是具有最大位宽的数字格式。然而,较大的位宽增加了dnn的大小,这增加了实现dnn的成本。因此,通过将附加项添加到惩罚大的位深度的局部误差e,将选择平衡大小和准确度的数字格式。
[0126]
e(f)=g(q(x,f)
‑
q(x),s(x))+b(f)
ꢀꢀꢀꢀ
(21)
[0127]
方法
[0128]
现在参考图8,该图示出了用于选择数字格式以表示dnn的一组网络参数的示例性方法800。方法800可以由基于计算的装置来实现,诸如下面关于图15描述的基于计算的装置1500。例如,可能存在上面存储有计算机可读指令的计算机可读存储介质,这些计算机可读指令在基于计算的装置处被执行时使基于计算的装置执行图8的方法800。
[0129]
如上文关于图3所述,dnn的每一层接收输入数据值并且生成输出数据值。一些层诸如卷积层和全连接层还接收权重和/或偏置,这些权重和/或偏置与层的输入数据值结合使用以生成输出数据值。dnn的网络参数包括所有层的输入数据值、权重、偏置和输出数据值。因此,存在四种类型的网络参数—输入数据值、权重、偏置和输出数据值。一组网络参数可以例如包括层的相同类型的网络参数的全部或一部分。例如,一组网络参数可包括层的输入数据值的全部或一部分;层的权重的全部或一部分;层的偏置的全部或一部分;或者层的输出数据值的全部或一部分。
[0130]
方法800开始于框802,其中确定dnn相对于集合中的网络参数中的每一个网络参数的灵敏度。如上所述,dnn相对于网络参数的灵敏度是网络参数对dnn的输出的重要性、意义或相关性的度量。在一些情况下,确定dnn相对于网络参数中的每一个网络参数的灵敏度可以包括:响应于输入数据确定dnn模型的输出;基于dnn相对于集合中每一个网络参数的
输出确定一个或多个值的偏导数;以及基于该网络参数的偏导数计算对每一个网络参数的灵敏度。
[0131]
dnn的模型是dnn的表示,可用于响应于输入数据来确定dnn的输出。模型可以为例如dnn的软件实施方式或dnn的硬件实施方式。如图9中的900处所示,响应于输入数据906来确定dnn 904的模型的输出902包括使输入数据通过dnn的层并且获得其输出。这可被称为dnn的前向传播或前向传递,因为计算流程从输入开始经过dnn再到输出。
[0132]
在一些情况下,模型可以是dnn的浮点模型(即,其中使用浮点数格式表示dnn的网络参数的dnn的模型)。由于采用浮点数格式一般可以更准确地或更精确地表示值,因此,dnn的浮点模型表示将产生最准确的输出的dnn模型。因此,由dnn的浮点模型生成的输出可用于确定dnn对网络参数中的每一个网络参数的灵敏度。
[0133]
在一些情况下,dnn的输出可以包括单个值f。在这些情况下,可以计算输出相对于集合中每一个网络参数的偏导数,并且可以将网络参数的偏导数用作dnn相对于该网络参数的灵敏度。例如,在dnn产生单个输出f并且在集合中有三个网络参数x1、,x2和x3的情况下,计算和并且将用作dnn相对于x1的灵敏度(即),用作dnn相对于x2的灵敏度(即),并且用作dnn相对于x3的灵敏度(即)。
[0134]
在其他情况下,dnn的输出(诸如分类dnn)可包括多个值f1、,f2、,
…
f
m
。在这些情况下,可以计算每个输出相对于集合中每一个网络参数的偏导数(例如,可以计算雅可比矩阵),并且网络参数的灵敏度可以是网络参数的偏导数的组合。例如,dnn相对于特定网络参数的灵敏度可以计算为偏导数之和,如等式(12)所示。替代地,可根据多个输出值f1、f2、,f
m
,生成可被称为代表性输出值或汇总值的单个值s,
…
并且可以计算代表性输出值s相对于每一个网络参数的偏导数网络参数的偏导数可以用作dnn相对于网络参数的灵敏度。可以任何合适的方式根据多个输出值计算代表性输出值或汇总值s。例如,代表性输出值s可等于输出的总和,如等式(14)所示,或者代表性输出值s可以是输出中的最大值,如等式(15)所示。
[0135]
在一些情况下,可以使用反向传播来计算偏导数。如本领域的技术人员所知,反向传播(还可称为误差的向后传播)是可用作优化算法的一部分以训练dnn的一种技术。训练dnn包括标识适当的权重以配置dnn以执行特定功能。反向传播通过链式法则计算误差函数相对于网络参数的偏导数,一次针对一层计算梯度,从最后一层向后迭代进行。
[0136]
可以经由反向传播生成输出或输出的代表性/汇总值或输出的集合相对于任何网络参数的偏导数。例如,图10示出了第一示例性dnn 1000,其包括第一卷积层1002和生成单个输出值f的第二卷积层1004,并且该单个输出值f的导数被反向传播到网络参数x1、,w1、,x2、和w2。图11示出了第二示例性dnn 1100,其包括第一卷积层1102和生成多个输出值f1、,f2、,
…
f
m
的第二卷积层1104,并且汇总值s的导数被反向传播到网络参数x1、,w1、,x2、和w2。偏导数可经由反向传播生成,例如通过用于使用反向传播来训练dnn的任何合适的工具,诸如但不限于tensorflow
tm
。
[0137]
输出f或输出的代表性/汇总的s或一组输出相对于特定网络参数的梯度的量值(
或指示网络参数的量化是否会对dnn的输出产生显著影响。具体地,梯度的量值越高,网络参数的量化对输出的影响越大;并且梯度的量值越低,网络参数的量化对输出的影响就越小。如图12所示,输出相对于特定输出或输出的代表或一组输出的偏导数使用其正切1204给出函数f 1202的近似。由于偏导数只是近似,因此量化误差越大,偏导数就变得越接近。
[0138]
一旦已经确定dnn相对于集合中每一个网络参数的灵敏度,方法800就前进至框804。
[0139]
在框804处,针对多个候选数字格式的每一个候选数字格式,确定与根据该候选数字格式对集合中的每一个网络参数进行量化相关联的量化误差。在一些情况下,多个候选数字格式可以包括特定类型的数字格式的所有可能的候选数字格式。例如,如果数字格式类型由指数exp和位宽b定义,并且指数exp可以是0或1,位宽b可以是2、3或4,则候选数字格式可以包括指数exp和位宽b的所有可能的组合,例如,由指数0和位宽2定义的数字格式、由指数0和位宽3定义的数字格式、由指数0和位宽4定义的数字格式、由指数1和位宽2定义的数字格式、由指数1和位宽3定义的数字格式,以及由指数1和位宽4定义的数字格式。
[0140]
在其他情况下,候选数字格式可以仅包括特定数字格式类型的可能的数字格式的子集。例如,在一些情况下,所有候选数字格式对于一个量化参数可具有相同的值,并且对于另一个量化参数可具有不同的值。以此方式,方法800可用于选择量化参数中的一个量化参数的值。可以任何合适的方式选择其他量化参数的值。例如,如果数字格式由指数exp和位宽b定义,则候选数字格式可能都具有相同的位宽b但指数exp不同;或者候选数字格式可能都具有相同的指数exp但位宽b不同。在一些情况下,可以使用一个或多个标准从可能的数字格式中选择候选数字格式。例如,如果量化参数中的一个量化参数是指数exp,则可以使用最大值/最小值方法来提供指数exp的上限,并且候选数字格式可以仅包括指数exp小于或等于上限的数字格式。例如,如果指数可以是从1到5的任何整数,并且例如根据最小值/最大值方法确定的上限为3,则多个候选数字格式可仅包括指数为1、2和3的数字格式。
[0141]
对于可能的候选数字格式中的每一者,针对集合中的每一个网络参数确量化误差。例如,如果存在四种候选数字格式,每种格式都由位宽b和指数exp定义,
‑
f0(b=8,exp=0)、f1(b=8,exp=1)、f2(b=8,exp=2),以及f3(b=8,exp=4),则可以将每个网络参数量化四次,其中一次根据由位宽8、指数0定义的第一数字格式f0量化,一次根据由位宽8、指数1定义的第二数字格式f1量化,一次根据由位宽8、指数2定义的第三数字格式f2量化,并且一次根据由位宽8、指数3定义的第四数字格式f3量化。然后确定与根据每个候选数字格式f
k
量化每个网络参数x
i
相关联的量化误差
e
i,k。因此,每个候选数字格式与三个量化误差相关联,每个网络参数具有一个量化误差,如表2所示。
[0142]
表2
[0143][0144]
如本领域的技术人员所知,量化是将较高精度的数字格式的数字转换为较低精度的数字格式的过程。将较高精度的格式的数字量化为较低精度的格式一般包括基于特定的舍入模式(诸如但不限于就近舍入(rtn)、向零舍入(rtz)、向偶数舍入(rte)、向正无穷舍入(rtp)以及向负无穷舍入(rtni))选择较低精度的格式的可表示数字中的一个可表示数字来表示较高精度的格式的数字。
[0145]
例如,等式(22)列出了用于将第一数字格式的值h量化为第二较低精度的数字格式f的值q(h,f)的示例性公式,其中x
max
是第二数字格式的最高可表示数字,x
min
是第二数字格式的最低可表示数字,并且rnd(h)是舍入函数:
[0146][0147]
等式(22)中列出的公式将第一数字格式的值h量化为第二数字格式f的可表示数字之一,其中基于舍入模式rnd(例如,rtn、rtz、rte、rtp或rtni)来选择第二数字格式f的可表示数字。
[0148]
在本文所述的示例中,较低精度格式是块可配置类型的数字格式,并且较高精度格式可以是任何数字格式(但通常为浮点数格式)。换句话讲,每个网络参数最初呈第一数字格式(例如,浮点数格式),并且被量化为较低精度的块可配置类型的数字格式。
[0149]
在一些情况下,特定候选数字格式f
k
的网络参数x
i
的量化误差e
i,k
可以计算为初始格式(例如,浮点数格式)的初始网络参数x
i
与根据候选数格式q(x
i
,f
k
)量化的初始网络参数之间的差,如等式(23)所示。
[0150]
e
i,k
=q(x
i
,f
k
)
‑
x
i
ꢀꢀꢀꢀꢀꢀ
(23)
[0151]
一旦针对每个网络参数确定了量化误差e
i,k
,对于每个候选数字格式,方法800就前进至框806。
[0152]
在框806处,针对每一种候选数字格式,基于在框802中计算的灵敏度s
i
和在框804中计算的与该候选数字格式相关联的量化误差e
i,k
,生成对由网络参数集合的量化引起的dnn的输出中的误差的估计g。表3针对上文关于表2描述的集合中存在3个网络参数x0、,x1、,x2,并且存在4种候选数字格式f0、,f1、,f2、,f3的示例示出了用于针对每个候选数字格式生
成误差估计g的相关的量化误差e
i,k
和灵敏度s
i
。
[0153]
表3
[0154][0155]
可根据相关量化误差和灵敏度以任何合适的方式生成候选数字格式的误差的估计g。在一个示例中,候选数字格式的误差的估计g可计算为相关量化误差的加权总和,其中网络参数的量化误差的权重为dnn对该网络参数的灵敏度。在等式(13)中对此进行表示。在另一个示例中,对误差的估计g可计算为量化误差的加权总和的绝对值,其中网络参数的量化误差的权重等于dnn对该网络参数的灵敏度。这由等式(18)表示。在另一个示例中,对误差的估计g可以通过以下方式计算:(i)针对集合中的每一个网络参数,计算该网络参数的量化误差的乘积的绝对值和dnn相对于该网络参数的灵敏度;以及(ii)计算绝对值的总和。在等式(19)中对此进行表示。在又一个示例中,对误差的估计g可以通过以下方式计算:(i)针对每一个网络参数计算该网络参数的量化误差的平方;(ii)针对每一个网络参数计算该网络参数的量化误差的平方的乘积和dnn相对于该网络参数的灵敏度的绝对值;以及(iii)计算乘积的总和。在等式(20)中对此进行表示。如上所述,测试表明,根据等式(20)计算估计的误差g对许多dnn效果良好。对于本领域的技术人员将显而易见的是,这些仅是示例,并且可以任何合适的方式根据量化误差和灵敏度计算误差的估计g。
[0156]
一旦针对每个候选数字格式生成了对误差的估计g,方法800就前进至框808。
[0157]
在框808处,针对每一个候选数字格式,基于对应的误差估计g生成局部误差e。在一些情况下(例如,当候选数字格式具有相同的位深度时),局部误差可等于误差估计g。在其他情况下,局部误差e可以是估计的误差g和一个或多个其他参数或项的组合。例如,如等式(21)所示,当候选数字格式具有不同的位宽时,可以修改局部误差e以包括大小参数或项b,当使用特定候选数字格式时,其反映网络参数的大小。例如,在一些情况下,b可以是基于位数的正值以使用候选数字格式来表示网络参数。由于量化误差,因此总是可以通过增加位宽来减少估计的误差g,在没有大小项的情况下,产生最佳或最小g的数字格式可能是具有最大位宽的数字格式。因此,通过将附加项添加到惩罚大的位深度的局部误差e将选择平衡大小和准确度的数字格式。
[0158]
一旦针对每个候选数字格式生成了局部误差e,方法800就前进至框810。
[0159]
在框810处,选择具有最低局部误差e的候选数字格式作为网络参数集合的数字格式。例如,在上文关于表2和表3描述的存在三个网络参数x0、,x1、,x2和四种候选数字格式f0、,f1、,f2、,f3并且第一候选数字格式f0具有最小局部误差e的示例中,可以选择第一候选数字格式f0作为网络参数集合的数字格式。在已经基于与候选数字格式相关联的局部误差e选择了候选数字格式中的一个候选数字格式之后,方法800可以结束或者方法800可以前进至框812和/或框814。
[0160]
在框812处,输出所选择的数字格式,以用于配置硬件逻辑(例如,dnn加速器)以实现dnn。可以任何合适的方式输出所选择的数字格式。一旦所选择的数字格式被输出,方法800就可以结束或者方法800可以前进至框814。
[0161]
在框814处,能够实现dnn的硬件逻辑被配置为使用在框810中选择的数字格式来实现dnn。配置硬件逻辑以实现dnn一般可以包括配置硬件逻辑以根据dnn的每一层处理到该层的输入,并且将该层的输出提供给后续层或提供该输出作为dnn的输出。例如,如果dnn包括第一卷积层和第二归一化层,则配置硬件逻辑以实现此类dnn包括:配置硬件逻辑以接收到dnn的输入,并且根据卷积层的权重处理输入,根据归一化层处理卷积层的输出,然后输出归一化层的输出作为dnn的输出。配置硬件逻辑以使用框810中所选择的数字格式来实现dnn可以包括配置硬件逻辑以根据所选择的数字格式接收和处理网络参数的集合。例如,如果一组网络参数的所选择的数字格式由位宽6和指数4定义,则用于实现dnn的硬件逻辑可被配置为基于集合中的网络参数呈由位宽6和指数4定义的数字格式来解释和处理集合中的网络参数。
[0162]
在一些情况下,图8的方法800可用于通过针对每一组网络参数重复方法800来确定每一组网络参数的数字格式。现在参考图13,该图示出了用于确定表示dnn的网络参数的数字格式的示例性方法1300。方法1300开始于框1302,其中网络参数被分成网络参数的组或集合。网络参数可以任何合适的方式分成组或集合。优选地,对网络参数进行分组,使得类似的网络参数被分到在一起。在一些情况下,由于相同层的网络参数趋于相关,因此针对dnn的层,每个集合可包括相同类型的网络参数的全部或一部分。例如,每一组网络参数可包括:层的输入数据值的全部或一部分;层的权重的全部或一部分;层的偏置的全部或一部分;或者层的输出数据值的全部或一部分。一旦网络参数已被分成组或集合,方法1300就前进至框1304。
[0163]
在框1304处,选择网络参数集合中的一个网络参数。然后执行图8的方法800的框802至框810以标识用于表示该组网络参数的数字格式。一旦已选择数字格式,方法1300就前进至框1306,其中确定是否存在任何其他网络参数组尚未确定数字格式。如果存在尚未确定数字格式的至少一组网络参数,则方法1300返回到框1304,其中选择一组网络参数,并且执行图8的方法800的框802至框810以标识该组网络参数的数字格式。然而,如果不存在尚未确定数字格式的网络参数集合,则方法1300可以结束或者可以前进至框1308,其中输出所选择的数字格式,以及/或者前进至框1310,其中硬件逻辑被配置为使用所选择的数字格式来实现dnn。
[0164]
尽管在图13的方法1300中,顺序地选择网络参数集合的数字格式(即,一次选择一个),但在其他示例中,可以并行地选择两个或更多个层的数字格式(例如,对第一层的输入数据值的数字格式的选择可以与对第二层的输入数据值的数字格式的选择并行执行)。
[0165]
测试结果
[0166]
表4示出了当由指数和位宽定义的数字格式用于每一层的每一个网络参数类型并且根据最小值/最大值方法、加权异常值方法、端对端方法和图13的方法1300选择指数时,在imagenet验证集上针对50,000个标记图像训练的不同分类神经网络的top
‑
1和top
‑
5分类准确度。在这些示例中,数据和权重的位宽为8(二进制补码格式),偏置的位宽为16(二进制补码格式),并且使用50个标记图像进行格式选择。如本领域的技术人员所知,top
‑
n分类
准确度是衡量由dnn输出的top n分类中正确分类的频率的度量。
[0167]
表4
[0168][0169]
dnns
[0170]1‑
inception_resnet_v2
[0171]2‑
inception_v1
[0172]3‑
inception_v2
[0173]4‑
inception_v3
[0174]5‑
inception_v4
[0175]6‑
mobilenet_v1_1.0_224
[0176]7‑
mobilenet_v2_1.0_224
[0177]8‑
resnet_v1_101
[0178]9‑
resnet_v2_101
[0179]
10
‑
resnet_v2_50
[0180]
从表4可以看出,图13的方法1300能够选择产生的准确度与通过其他数字格式选择方法选择的数字格式的准确度相同或相比较而言更高的数字格式。实际上,可以看出,图8的方法800能够选择获得神经网络诸如mobilenet的良好准确度的数字格式,而其他格式选择方法则难以获得(即,无法选择实现良好准确度的数字格式)。因此,尽管实现起来相对简单,但图13的方法1300与其他数字格式选择方法(包括执行起来困难且成本高昂的端对端方法)相比,始终产生神经网络的高准确度。
[0181]
示例性dnn加速器
[0182]
现在参考图14,该图示出了示例性硬件逻辑,该示例性硬件逻辑可被配置为使用根据图8的方法800或图13的方法1300标识的数字格式来实现dnn。具体地,图14示出了示例性dnn加速器1400。
[0183]
图14的dnn加速器1400被配置为通过一系列硬件过程(也可以被称为处理过程)来计算dnn的输出,其中在每个过程期间,dnn加速器接收dnn的层的输入数据的至少一部分,并且根据该层(以及可选地根据一个或多个后续层)处理所接收的输入数据以产生处理后的数据。处理后的数据要么被输出到存储器用作随后的硬件过程的输入数据,要么被输出作为dnn的输出。dnn加速器在单个硬件过程期间可处理的层数可基于数据的大小、dnn加速器的配置,以及层的顺序。例如,在dnn加速器包括执行可能的层类型中的每一种的硬件逻
辑的情况下,包括第一卷积层、第一激活层、第二卷积层、第二激活层和池化层的dnn可能能够接收初始dnn输入数据,并且根据第一硬件过程中的第一卷积层和第一激活层来处理该输入数据,然后将激活层的输出输出到存储器中,接着在第二硬件过程中从存储器中接收该数据作为输入,并且根据第二卷积层、第二激活层和池化层处理该数据以产生dnn的输出数据。
[0184]
图14的示例性dnn加速器1400包括输入逻辑1401、卷积引擎1402、累积缓冲器1404、逐元素运算逻辑1406、激活逻辑1408、归一化逻辑1410、池化逻辑1412、输出交织逻辑1414,以及输出逻辑1415。每个逻辑部件或引擎实现或处理一种或多种类型的层的全部或一部分。具体地,卷积引擎1402和累积缓冲器1404一起实现或处理卷积层或全连接层。激活逻辑1408处理或实现激活层。归一化逻辑1410处理或实现归一化层。池化逻辑1412实现池化层,并且输出交织逻辑1414处理或实现交织层。
[0185]
输入逻辑1401被配置为接收待处理的输入数据,并且将其提供给下游逻辑部件以进行处理。
[0186]
卷积引擎1402被配置为使用与特定卷积层相关联的权重对所接收的输入数据执行卷积运算。dnn的每个卷积层的权重可以被存储在如图14所示的系数缓冲器1416中,并且当特定卷积层正在由卷积引擎1402处理时,可以向卷积引擎1402提供该特定卷积层的权重。在dnn加速器支持可变权重格式的情况下,卷积引擎1402可被配置为接收指示正在处理的当前卷积层的权重的一种或多种格式的信息,以允许卷积引擎正确地解释和处理所接收的权重。
[0187]
卷积引擎1402可包括多个乘法器(例如,128)和多个加法器,所述多个加法器将乘法器的结果相加以产生单个总和。尽管在图14中示出了单个卷积引擎1402,但在其他示例中,可存在多个(例如,8个)卷积引擎,使得可以同时处理多个窗口。卷积引擎1402的输出被馈送到累积缓冲器1404。
[0188]
累积缓冲器1404被配置为接收卷积引擎的输出并且将其添加到累积缓冲器1404的当前内容中。以这种方式,累积缓冲器1404在卷积引擎1402的若干硬件过程上累积卷积引擎1402的结果。尽管在图14中示出了单个累积缓冲器1404,但在其他示例中,可存在多个(例如,8个,每个卷积引擎一个)累积缓冲器。累积缓冲器1404将累积结果输出到逐元素运算逻辑1406,该逐元素运算逻辑根据在当前硬件过程期间是否要处理逐元素层,可能或可能不对累积结果进行运算。
[0189]
逐元素运算逻辑1406被配置为接收当前硬件过程的输入数据(例如,在当前硬件过程中未处理卷积层时)或来自累积缓冲器1404的累积结果(例如,在当前硬件过程中处理卷积层时)。逐元素运算逻辑1406可根据在当前硬件过程中是否处理逐元素层以及/或者根据是否要在逐元素层之前对激活层进行处理,处理所接收的输入数据或将所接收的输入数据传递到其他逻辑(例如,激活逻辑1408和/或归一化逻辑1410)。当逐元素运算逻辑1406被配置为处理所接收的输入数据时,逐元素运算逻辑1406对所接收的数据执行逐元素运算(可选地与(可以从外部存储器获得的)另一个数据集一起)。逐元素运算逻辑1406可以被配置为执行任何合适的逐元素运算,诸如但不限于:相加、相乘、最大值和最小值。然后,根据是否要在逐元素层之后处理激活层,将逐元素运算的结果提供给激活逻辑1408或归一化逻辑1410。
[0190]
激活逻辑1408被配置为接收以下项中的一者作为输入数据:(例如,当在当前硬件过程中未处理卷积层时)(经由逐元素运算逻辑1406)对硬件过程的原始输入;(例如,当在当前硬件过程中处理卷积层,并且在当前硬件过程中未处理逐元素层或者在当前硬件过程中处理逐元素层但在激活层之后时)(经由逐元素运算逻辑1406)累积的数据。激活逻辑1408被配置为将激活函数应用于输入数据,并且将输出数据提供回逐元素运算逻辑1406,其中该输出数据被直接或者在逐元素运算逻辑1406对其进行处理之后转发到归一化逻辑1410。在一些情况下,应用于由激活逻辑1408接收的数据的激活函数可在每个激活层变化。在这些情况下,可以(例如,在存储器中)存储指定要应用于每个激活层的激活函数的一个或多个属性的信息,并且可以将在特定硬件过程中处理的激活层的相关信息在该硬件过程期间提供给激活逻辑1408。
[0191]
在一些情况下,激活逻辑1408可被配置为在查找表的条目中存储表示激活函数的数据。在这些情况下,输入数据可用于查找查找表中的一个或多个条目以及表示激活函数的输出的输出值。例如,激活逻辑1408可被配置为通过在从查找表读取的两个或更多个条目之间进行内插来计算输出值。
[0192]
在一些示例中,激活逻辑1408可被配置为通过实现relu函数而作为整流线性单元(relu)操作。在relu函数中,输出元素y
i,j,k
通过标识最大值来计算,如等式(24)所示,其中对于小于0的x值,y=0::
[0193]
y
i,j,k
=f(x
i,j,k
)=max{0,x
i,j,k
}
ꢀꢀꢀꢀ
(24)
[0194]
在其他示例中,激活逻辑1408可被配置为通过实现prelu函数而作为参数整流线性单元(prelu)操作。prelu函数执行与relu函数类似的运算。具体地,在w1,w2,b1,b2∈r是常数的情况下,prelu被配置为生成输出元素y
i,j,k
,如等式(25)所示:
[0195]
y
i,j,k
=f(x
i,j,k
;w1,w2,b1,b2)=max{(w1*x
i,j,k
+b1),(w2*x
i,j,k
+b2)}(25)
[0196]
归一化逻辑1410被配置为接收以下项中的一者作为输入数据:(例如,在当前硬件过程未处理卷积层并且当前硬件过程未处理逐层元素层和激活层时)(经由逐元素运算逻辑1406)硬件过程的原始输入数据;(例如,当在当前硬件过程中处理卷积层并且在当前硬件过程中未处理逐元素层和激活层时)(经由逐元素运算逻辑1406)累积输出;以及逐元素运算逻辑和/或激活逻辑的输出数据。然后,归一化逻辑1410对所接收的输入数据执行归一化函数以产生归一化数据。在一些情况下,归一化逻辑1410可被配置为执行局部响应归一化(lrn)函数和/或局部对比度归一化(lcn)函数。然而,对于本领域的技术人员将显而易见的是,这些仅是示例,并且归一化逻辑1410可被配置为实现任何合适的一个或多个归一化函数。不同的归一化层可被配置为应用不同的归一化函数。
[0197]
池化逻辑1412可接收来自归一化逻辑1410的归一化数据,或者可经由归一化逻辑1410接收到归一化逻辑1410的输入数据。在一些情况下,可以经由xbar 1418在归一化逻辑1410与池化逻辑1412之间传输数据。在本文中,术语“xbar”用于指包含路由逻辑的简单硬件逻辑,该路由逻辑以动态方式将多个逻辑部件连接在一起。在该示例中,xbar可以根据在当前硬件过程中将处理哪些层而动态地连接归一化逻辑1410、池化逻辑1412和/或输出交织逻辑1414。因此,xbar可以在每次传递时接收指示将连接哪些逻辑部件1410、1412、1414的信息。
[0198]
池化逻辑1412被配置为对所接收的数据执行池化函数,诸如但不限于max函数或
mean函数,以产生池化数据。池化层的目的是减小表示的空间大小,以减少网络中参数和计算的数量,并且因此也控制过度拟合。在一些示例中,在每个池化层定义的滑动窗口上执行池化运算。
[0199]
输出交织逻辑1414可接收来自归一化逻辑1410的归一化数据、(经由归一化逻辑1410)对归一化函数的输入数据,或者来自池化逻辑1412的池化数据。在一些情况下,可以经由xbar 1418在归一化逻辑1410、池化逻辑1412和输出交织逻辑1414之间传输数据。输出交织逻辑1414被配置为执行重新排列运算以产生处于预先确定的顺序的数据。这可包括对所接收的数据进行排序和/或转置。由最后一层生成的数据被提供给输出逻辑1415,其中该数据被转换为对当前硬件过程的期望的输出格式。
[0200]
归一化逻辑1410、池化逻辑1412和输出交织逻辑1414可各自访问共享缓冲器1420,这些逻辑部件1410、1412和1414可使用该共享缓冲器向其中写入数据并且从中检索数据。例如,这些逻辑部件1410、1412、1414可使用共享缓冲器1420来重新排列所接收的数据或所生成的数据的顺序。例如,这些逻辑部件1410、1412、1414中的一个或多个模块可被配置为将数据写入共享缓冲器1420并且以不同的顺序读出相同的数据。在一些情况下,尽管归一化逻辑1410、池化逻辑1412和输出交织逻辑1414中的每一者都可以访问共享缓冲器1420,但是归一化逻辑1410、池化逻辑1412和输出交织逻辑1414中的每一者可被分配共享缓冲器1420的仅它们自身可访问的一部分。在这些情况下,归一化逻辑1410、池化逻辑1412和输出交织逻辑1414中的每一者可能仅能够从共享缓冲器1420读取它们已经写入共享缓冲器1420中的数据。
[0201]
在任何硬件过程期间使用的或活动的dnn加速器1400的逻辑部件基于在该硬件过程期间处理的层。特别地,仅与在当前硬件过程期间处理的层相关的联接部件被使用或者是活动的。如上所述,基于dnn中层的顺序以及可选地基于一个或多个其他因素(诸如数据的大小)来(通常预先通过例如软件工具)确定在特定的硬件过程期间处理的层。例如,在一些情况下,除非可在不将数据写入层之间的存储器的情况下处理多个层,否则dnn加速器可被配置为每个硬件过程执行单层处理。例如,如果在第一卷积层后面紧接着是第二卷积层,则每个卷积层将必须在单独的硬件过程中执行,因为来自第一硬件卷积的输出数据需要先写出到存储器中才可以被用作第二硬件卷积的输入。在这些硬件过程中的每一个硬件过程中,仅与卷积层相关的逻辑部件或引擎,诸如卷积引擎1402和累积缓冲器1404,可以被使用或者是活动的。
[0202]
尽管图14的dnn加速器1400示出了逻辑部件、引擎等的特定的布置顺序,并且因此示出了数据的处理如何流经dnn加速器,但应当理解,这仅是示例,并且在其他示例中,逻辑部件、引擎可以不同的方式布置。此外,其他硬件逻辑(例如,其他dnn加速器)可实现dnn层的另外的或另选的类型,并且因此可包括不同的逻辑部件、引擎等。
[0203]
图15示出了示例性通用基于计算的装置1500的各种部件,该基于计算的装置可被实现为任何形式的计算和/或电子装置,并且可在其中实现上述图8和图13的方法800、1300的实施方案。
[0204]
基于计算的装置1500包括一个或多个处理器1502,该一个或多个处理器可以是微处理器、控制器或任何其他合适类型的处理器,用于处理计算机可执行指令以控制装置的操作,以便评估由硬件设计定义的集成电路在完成任务时的性能。在一些示例中,例如在使
用片上系统架构的情况下,处理器1502可包括一个或多个固定功能块(也被称为加速器),该一个或多个固定功能块实现用于确定数字格式的方法的一部分,该定点数格式用于表示在硬件(而不是软件或固件)中输入到dnn的层或从其中输出的一组值。可在基于计算的装置处提供包括操作系统1504的平台软件或任何其他合适的平台软件,以使应用程序软件诸如用于实现图8和图13的方法800、1300中的一种或多种方法的计算机可执行代码1505能够在装置上执行。
[0205]
可以使用可由基于计算的装置1500访问的任何计算机可读介质来提供计算机可执行指令。计算机可读介质可以包括例如计算机存储介质,诸如存储器1506和通信介质。计算机存储介质(即,非暂时性机器可读介质)诸如存储器1506,包括用于存储信息诸如计算机可读指令、数据结构或程序模块或其他数据的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于ram、rom、eprom、eeprom、闪存存储器或其他存储技术、cd
‑
rom、数字多功能盘(dvd)或其他光学存储装置、磁带盒、磁带、磁盘存储或其他磁性存储装置,或可用于存储信息以供计算装置访问的任何其他非传输介质。相反,通信介质可以在调制数据信号诸如载波或者其他传输机制中体现计算机可读指令、数据结构、程序模块或其他数据。如本文所定义,计算机存储介质不包括通信介质。尽管在基于计算的装置1500内示出了计算机存储介质(即,非暂时性机器可读介质,例如存储器1506),但应当理解,存储器可以是分布式的或位于远程位置的,并且可经由网络或其他通信链路(例如,使用通信接口1508)进行访问。
[0206]
基于计算的装置1500还包括输入/输出控制器1510,该输入/输出控制器被布置为将显示信息输出到显示装置1512,该显示装置可以与基于计算的装置1500分开或成一体。显示信息可以提供图形用户界面。输入/输出控制器1510还被布置成接收和处理来自一个或多个装置(例如,用户输入装置1514(例如,鼠标或键盘))的输入。在一个实施方案中,如果显示装置1512是触敏显示装置,则其也可以充当用户输入装置1514。输入/输出控制器1510还可以将数据输出到除显示装置之外的装置,例如本地连接的打印装置(图15中未示出)。
[0207]
图16示出了其中可实现可配置为实现本文所述的dnn的硬件逻辑(例如,dnn加速器1400)的计算机系统。计算机系统包括cpu 1602、gpu 1604、存储器1606和其他装置1614,诸如显示器1616、扬声器1618以及相机1620。计算机系统还包括可配置为实现可从cpu 1602和/或gpu 1604接收控制信息的dnn 1610的硬件逻辑(例如,图14的dnn加速器1400)。计算机系统的部件可经由通信总线1622彼此通信。在其他示例中,可配置为实现dnn 1610的硬件逻辑可以实现为cpu或gpu的一部分。在一些示例中,可能不存在gpu。
[0208]
图14的dnn加速器1400被示出为包括多个功能块。这仅是示意性的,并不旨在限定此类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。应当理解,本文中描述为由dnn加速器或处理模块形成的中间值不需要在任何时候由dnn加速器或处理模块物理生成,并且仅表示逻辑值,这些逻辑值方便地描述dnn加速器或处理模块在其输入和输出之间执行的处理。
[0209]
可配置为实现本文所述的dnn的硬件逻辑(例如,图14的dnn加速器1400)可在集成电路上的硬件中体现。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或其任何组合中实现。本文可以使用术语“模块”、“功
能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件实施方式的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,所述程序码在处理器上执行时执行指定任务。本文中所描述的算法和方法可以由执行代码的一个或多个处理器执行,所述代码使处理器执行算法/方法。计算机可读存储介质的示例包括随机存取存储器(ram)、只读存储器(rom)、光盘、闪存存储器、硬盘存储器以及可以使用磁性、光学和其他技术来存储指令或其他数据并且可以由机器存取的其他存储器装置。
[0210]
如本文中所使用的术语计算机程序代码和计算机可读指令是指供处理器执行的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如c、java或opencl等编程语言码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解释、编译、运行时,这些软件、固件、脚本、模块或库使支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
[0211]
处理器、计算机或计算机系统可以是任何种类的装置、机器或专用电路,或其集合或一部分,它具有处理能力使得可以执行指令。处理器可以是任何种类的通用或专用处理器,诸如cpu、gpu、片上系统、状态机、媒体处理器、专用集成电路(asic)、可编程逻辑阵列、现场可编程门阵列(fpga)等。计算机或计算机系统可以包括一个或多个处理器。
[0212]
本发明还旨在涵盖限定如本文中所描述的硬件的配置的软件,诸如硬件描述语言(hdl)软件,用于设计集成电路或用于配置可编程芯片以执行期望的功能。即,可提供一种计算机可读存储介质,在该计算机可读存储介质上以集成电路定义数据集的形式编码了计算机可读程序代码,当该计算机可读程序代码在集成电路制造系统中被处理(即,运行)时,将系统配置为制造可配置为实现本文所述的dnn(例如,dnn加速器)。集成电路定义数据集可以是例如集成电路描述。
[0213]
因此,可提供一种在集成电路制造系统处制造可配置为实现如本文所述的dnn的硬件逻辑(例如,图14的dnn加速器1400)的方法。此外,可提供集成电路定义数据集,当该集成电路定义数据集在集成电路制造系统中被处理时,致使制造可配置为实现dnn的硬件逻辑(例如,图14的dnn加速器1400)方法被执行。
[0214]
集成电路定义数据集可以是计算机代码的形式,例如作为网表,用于配置可编程芯片的代码,作为定义适合于在集成电路中以任何级别制造的硬件描述语言,包括作为寄存器传输级(rtl)代码,作为高级电路表示法(诸如verilog或vhdl),以及作为低级电路表示法(诸如oasis(rtm)和gdsii)。在逻辑上定义适合于在集成电路中制造的硬件的更高级表示法(诸如rtl)可以在计算机系统上处理,该计算机系统被配置用于在软件环境的上下文中生成集成电路的制造定义,该软件环境包括电路元件的定义和用于组合这些元件以便生成由该表示定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置成生成集成电路的制造定义,以执行定义集成电路以便生成所述集成电路的制造定义的代码。
[0215]
现在将关于图17描述在集成电路制造系统处处理集成电路定义数据集以便配置系统以制造可配置为实现dnn的硬件逻辑(例如,dnn加速器)的示例。
[0216]
图17示出了集成电路(ic)制造系统1702的示例,该集成电路制造系统被配置为制造可配置为实现如本文的任何示例中所描述的dnn的硬件逻辑(例如,dnn加速器)。特别地,ic制造系统1702包括布局处理系统1704和集成电路生成系统1706。ic制造系统1702被配置为接收ic定义数据集(例如,定义可配置为实现本文的任何示例中所描述的dnn的硬件逻辑(例如,dnn加速器)),处理ic定义数据集,并且根据ic定义数据集生成(例如,体现可配置为实现本文的任何示例中所描述的dnn的硬件逻辑(例如,dnn加速器)的)ic。ic定义数据集的处理将ic制造系统1702配置为制造体现可配置为实现如本文的任何示例中所描述的dnn的硬件逻辑(例如,dnn加速器)的集成电路。
[0217]
布局处理系统1704被配置为接收和处理ic定义数据集以确定电路布局。根据ic定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成rtl代码以确定待生成的电路的门级表示,例如就逻辑部件(例如,nand、nor、and、or、mux和flip
‑
flop部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1704已经确定电路布局时,其可将电路布局定义输出到ic生成系统1706。电路布局定义可以是例如电路布局描述。
[0218]
如本领域中已知的,ic生成系统1706根据电路布局定义来生成ic。举例来说,ic生成系统1706可实现生成ic的半导体装置制造工艺,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可以在光刻工艺中用于根据电路定义来生成ic。替代地,提供给ic生成系统1706的电路布局定义可呈计算机可读代码的形式,ic生成系统1706可使用所述计算机可读代码来形成用于生成ic的合适的掩码。
[0219]
由ic制造系统1702执行的不同过程可全部在一个位置例如由一方来实施。替代地,ic制造系统1702可以是分布式系统,使得一些过程可在不同位置执行,并且可由不同方来执行。例如,以下阶段中的一些可以在不同位置以及/或者由不同方来执行:(i)合成表示ic定义数据集的rtl码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩码;以及(iv)使用掩模来制造集成电路。
[0220]
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置为制造可配置为实现dnn的硬件逻辑(例如,dnn加速器),而无需处理ic定义数据集来确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如fpga的配置,并且对所述数据集进行的处理可以将ic制造系统配置成(例如,通过将配置数据加载到fpga)生成具有所述定义的配置的可重新配置的处理器。
[0221]
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可以使集成电路制造系统生成如本文中描述的装置。例如,通过集成电路制造定义数据集,以上文关于图17描述的方式对集成电路制造系统的配置,可制造出如本文中所描述的装置。
[0222]
在一些示例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图17中示出的示例中,ic生成系统可由集成电路定义数据集进一步被配置为在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电
路一起使用的程序代码。
[0223]
与已知的实施方式相比,在本技术中阐述的概念在装置、设备、模块和/或系统中(以及在本文中实现的方法中)的实施方式可以引起性能改进。性能改进可以包括计算性能提高、等待时间缩短、处理量增大和/或功耗降低中的一个或多个。在制造此类装置、设备、模块和系统(例如,在集成电路中)期间,可以在性能改进与物理实施方式之间进行权衡,从而改进制造方法。例如,可以在性能改进与布局面积之间进行权衡,从而匹配已知实施方式的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在装置、设备、模块和/或系统的元件之间共享功能块来完成。相反,在本技术中阐述的引起装置、设备、模块和系统的物理实现方式的改进(诸如硅面积减小)的概念可以针对性能提高进行权衡。例如,这可以通过在预定义面积预算内制造模块的多个实例来完成。
[0224]
申请人据此独立地公开了本文中所描述的每个单独的特征以及两个或更多个此类特征的任意组合,到达的程度使得此类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管此类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,对于本领域的技术人员将显而易见的是,可以在本发明的范围内进行各种修改。