神经网络处理元件
技术领域
本说明书总体涉及神经网络,并且具体地涉及实现神经网络的处理元件。
背景技术
现代计算硬件是能量受限的。减少执行计算所需的能量通常对于提高性能至关重要。
例如,在推理过程中由卷积神经网络执行的许多计算都归因于2D卷积。2D卷积需要大量的乘加运算,其中大部分工作归因于激活与权重的乘法。这些乘法中的许多乘法是无效的。
神经网络的训练或运行或其他用途通常包括执行大量计算。执行较少计算通常会产生效率,诸如时间效率和能量效率。
发明内容
在本发明的一个方面中,提供了一种神经网络加速器瓦片(neural networkaccelerator tile),其包括:激活存储器接口,所述激活存储器接口用于与激活存储器接口连接以接收一组激活表示;权重存储器接口,所述权重存储器接口用于与权重存储器接口连接以接收一组权重表示;以及处理元件,所述处理元件被配置为实现独热编码器、直方图器、对齐器、缩减器和累加子元件,以处理所述一组激活表示和所述一组权重表示,从而产生一组输出表示。
在本发明的一个方面中,提供了一种产生神经网络部分乘积的方法,其包括:接收一组激活表示;接收一组权重表示,每个权重表示对应于所述一组激活表示中的一激活表示;通过将每个权重表示与其对应的激活表示组合来将所述一组权重表示与所述一组激活表示组合以产生一组部分结果;对所述一组部分结果进行编码以产生一组独热表示;将所述一组独热表示累加到一组直方图桶计数中;根据所述一组直方图桶计数中的计数的大小来对齐所述一组直方图桶计数中的所述计数;以及缩减所述一组直方图桶计数中的所对齐计数以产生所述神经网络部分乘积。
在结合附图阅读以下对本发明的实施方案的描述时,根据本申请的其他方面和特征将变得对于本领域的普通技术人员来说明显。
附图说明
参考附图可更好地理解本发明的原理,所述附图是通过结合本发明的原理和各方面对一个或多个示例性实施方案进行说明提供的,并且在附图中:
图1是一组条形图,其比较跨一组网络的八个示例性计算布置的平均工作减少;
图2是示例性卷积层的示意图;
图3A、图3B和图3C是三个示例性处理引擎的示意图;
图4A是根据实施方案的处理元件的示意图;
图4B是根据实施方案的处理元件的一部分的示意图;
图5A和图5B是根据实施方案的拼接单元的示意图;
图6是根据实施方案的加速器瓦片的示意图;
图7A和图7B是示例性加速器瓦片配置的示意图;
图8是条形图,其比较跨多个网络的一组示例性瓦片配置的性能;
图9是示例性加速器瓦片配置的示意图;
图10是示例性加速器瓦片配置的示意图;并且
图11是累加器配置的示意图。
在附图中,相同的附图标记指示相同或对应的元件。
具体实施方案
以下描述和其中描述的实施方案是通过对具有本发明的原理的特定实施方案的一个或多个示例进行说明而提供的。提供这些示例是为了解释而非限制这些原理和本发明的目的。在以下描述中,相同部分在整个说明书和附图中使用相同的相应附图标记来标记。附图不一定是按比例绘制的,并且在一些情况下可能会放大比例以便更清楚地描绘本发明的某些特征。
本描述涉及用于将乘法分解为位级以减少所执行的工作量(诸如,在图像分类模型的推理期间所执行的工作量)的加速器。这种减少可改进执行时间并提高能量效率。
本描述还涉及可改进深度神经网络(DNN)推理的执行时间并提高能量效率的加速器。尽管在一些实施方案中,放弃了一些工作减少的潜力,从而产生低成本、简单且节能的设计。
由于许多现代计算硬件是能量受限的,因此开发用于减少执行计算所需的能量的技术通常对于提高性能至关重要。例如,大多数卷积神经网络在推理期间执行的大部分工作归因于2D卷积。这些卷积涉及大量多次累加运算,其中大部分工作归因于激活A与权重W的乘法。减少无效运算的数量可大大提高能量效率。
已提出各计算布置来将A×W乘法分解成一系列更简单的运算。例如,如果A和W是16b定点数,则A×W可近似为256个1b×1b乘法或16个16b×1b乘法。
图1包括六个条形图,一个图用于在测试一组八个示例性计算布置中使用的六个模型中的每一者。每个条形图比较八个所比较的计算布置的潜在工作减少。
每个条形图中的最左边的条1100表示第一计算布置,所述第一计算布置避免了激活为零的乘法,并且表示第一代基于值的加速器,所述加速器是通过卷积神经网络中发生的相对较大部分的零激活实现的(参见例如J.Albericio、P.Judd、T.Hetherington、T.Aamodt、N.Enright Jerger和A.Moshovos,“CNVLUTIN:Ineffectual-Neuron-Free DeepNeural Network Computing”,计算机架构国际研讨会论文集,2016年,据此通过引用并入)。
每个图中从左起第二个条1200表示第二计算布置,所述第二计算布置跳过激活或权重为零的那些乘法,并且表示以稀疏模型为目标的加速器,在这些稀疏模型中很大一部分的突触连接已被修剪(参见例如A.Parashar、M.Rhu、A.Mukkara、A.Puglielli、R.Venkatesan、B.Khailany、J.Emer、S.W.Keckler和W.J.Dally,“Scnn:An acceleratorfor compressed-sparse convolutional neural networks”,第44届年度计算机架构国际研讨会论文集,ISCA’17,(纽约市,纽约州,美国),第27–40页,ACM,2017年,据此通过引用并入)。
从左起第三个条1300和第四个条1400分别表示以精确度为目标的第三计算布置和第四计算布置。由条1300表示的第三计算布置以激活的精确度为目标(参见例如P.Judd、J.Albericio、T.Hetherington、T.Aamodt和A.Moshovos,“Stripes:Bit-serial DeepNeural Network Computing”,第49届年度IEEE/ACM微架构国际研讨会论文集,MICRO-49,2016年和A.Delmas、P.Judd、S.Sharify和A.Moshovos,“Dynamic stripes:Exploiting thedynamic precision requirements of activation values in neural networks”,CoRR,第abs/1706.00504卷,2017年,均据此通过引用并入),并且由条1400表示的第四计算布置以激活和权重的精确度为目标(参见例如S.Sharify、A.D.Lascorz、P.Judd和A.Moshovos,“Loom:Exploiting weight and activation precisions to accelerate convolutionalneural networks”,CoRR,第abs/1706.07853卷,2017年,据此通过引用并入)。
如果乘法在位级进行分解,则存在进一步减少工作的潜力。例如,假设这些乘法对16b定点值进行运算,则乘法由以下的方程(1)给出:
在以上的方程(1)中,Ai和Wi分别是A和W的位。当分解为单独的256个单位乘法时,只有Ai和Wi为非零的那些乘法才有效。
从左起第五个条1500和第六个条1600分别表示第五计算布置和第六计算布置,它们将乘法分解成单位乘法。由条1500表示的第五计算布置跳过激活位为零的单位乘法(参见例如J.Albericio、A.Delmás、P.Judd、S.Sharify、G.O’Leary、R.Genov和A.Moshovos,“Bit-pragmatic deep neural network computing”,第50届年度IEEE/ACM微架构国际研讨会论文集,MICRO-50'17,第382-394页,2017年,据此通过引用并入)。由条1600表示的第六布置跳过激活或权重位为零的单位乘法。
然而,在一些布置中,不是将A和W表示为位向量,而是可替代地将它们布斯编码为2的带符号幂或更高基数项。从左起第七个条1700和第八个条1800分别表示第七计算布置和第八计算布置,其中将值布斯编码为2的带符号幂或更高基数项,而不是将其表示为位向量。由条1700表示的第七布置对激活值进行布斯编码,而由条1800表示的第八布置对激活值和权重值两者进行布斯编码。激活与权重的乘法然后由以下的方程(2)给出:
在以上的方程(2)中,Ati和Wtj具有形式±2x。与位置表示一样,只有Ati和Wtj都为非零的那些乘积才有效。因此,图1示出了其中用1700跳过经布斯编码的激活的无效项的潜在的工作减少(参见例如J.Albericio、A.Delmás、P.Judd、S.Sharify、G.O’Leary、R.Genov和A.Moshovos,“Bit-pragmatic deep neural network computing”,第50届年度IEEE/ACM微架构国际研讨会论文集,MICRO-50'17,第382-394页,2017年,通过引用并入在上文中),并且示出了其中用1800跳过经布斯编码的激活和经布斯编码的权重的无效项的潜在的工作减少。
如图1所指示的,仅计算有效项(诸如经布斯编码的激活和权重的有效项)的硬件加速器有可能极大地减少计算工作。在许多实施方案中,以经布斯编码的计算为目标的配置也可用于计算位向量表示。
可在诸如卷积神经网络(‘CNN’)的神经网络的实现方式中使用计算布置。CNN通常由若干卷积层、然后是一些完全连接的层组成,并且在图像处理中,大部分操作时间都花费在处理卷积层上,其中3D卷积操作应用于输入激活,从而产生输出激活。卷积层的示例在图2中示出,其示出了c×x×y输入激活块2100和一组N个c×h×k滤波器2200。层将这些N个滤波器(表示为f0、f1、……、fN-1)2200中的每一个与输入激活的c×h×k子阵列(或‘窗口’)(诸如窗口2300)点乘,以生成单个oh×ok输出激活2400。卷积N个滤波器和激活窗口会产生N个oh×ok输出,这些输出将被传递到下一个层的输入。激活窗口和滤波器的卷积以具有恒定步长S的滑动窗口方式发生。完全连接的层可实现为卷积层,其中滤波器与输入激活具有相同的尺寸(x=h且y=k)。
已建议将数据并行引擎(诸如使用16b定点激活和权重)用于实现神经网络(参见例如Y.Chen、T.Luo、S.Liu、S.Zhang、L.He、J.Wang、L.Li、T.Chen、Z.Xu、N.Sun和O.Temam公开的DaDianNao加速器,“Dadiannao:A machine-learning supercomputer”,微架构(MICRO),2014年第47届年度IEEE/ACM国际研讨会,第609-622页,2014年12月,据此通过引用并入)。在将称为BASE引擎的这种引擎的示例中,可提供8个内积单元(IP),每个内积单元接受16个输入激活和16个权重作为输入。在使用8个IP的情况下,可将16个输入激活广播至所有8个IP,并且每个IP可接收其自己的16个权重;每个IP每周期将16个输入激活与其16个对应权重相乘,并使用16个32b输入加法器树将其缩减为单个部分输出激活。可在多个周期内累加部分结果,以生成最终输出激活。激活存储器可提供激活,并且权重存储器可提供权重。
数据并行引擎的变体可用于实现上面讨论的计算布置,诸如图3所示的示例。
图3A是位并行引擎3100的简化示意图,其示出为将两个4b激活与权重对相乘,从而每周期生成单个4b输出激活。在本说明书的各个部分中使用4b和其他位大小作为示例,并且在其他实施方案中可使用其他大小。引擎3100的吞吐量是每周期两个4b×4b乘积。
图3B是位串行引擎3200的简化示意图(参见例如S.Sharify、A.D.Lascorz、P.Judd和A.Moshovos,“Loom:Exploiting weight and activation precisions to accelerateconvolutional neural networks”,CoRR,第abs/1706.07853卷,2017年,通过引用并入在上文)。为了匹配位并行引擎3100的吞吐量,引擎3200每周期处理8个输入激活和8个权重,从而产生32个1b×1b乘积。由于激活和权重是按位串行处理的,因此引擎3200会在P
a×P
w个周期中产生16个输出激活,其中P
a和P
w分别是激活精确度和权重精确度。结果,引擎3200以
优于引擎3100。如图3B中所描绘的,由于激活和权重都可用三位表示,所以引擎3200相对于图3A的引擎3100的加速为1.78倍。然而,引擎3200仍然处理一些无效项;例如,在第一周期中,32个1b×1b乘积中的27个为零并因此无效。
图3C是引擎3300的简化示意图,其中激活和权重都被表示为2的基本幂(或‘单偏移’)的向量。例如,A0=(110)表示为其单偏移的向量A0=(2,1)。每个处理元件(‘PE’)每周期接受输入激活的4b单偏移和权重的4b单偏移,并将它们加起来以在输出激活中产生对应乘积项的幂。由于引擎3300按项串行处理激活和权重,因此每个PE需要ta×tw个周期才能产生输出激活的乘积项,其中ta和tw是对应输入激活和权重中的单偏移的数量。引擎在T个周期后处理下一组激活和权重单偏移,其中T是所有PE当中的最大值ta×tw。在图3C的示例中,最大值T为6,对应于来自PE(1,0)的A0=(2,1)与W0 1=(2,1,0)的对。因此,引擎3300可在6个周期之后开始处理下一组激活和权重,从而相比于图3A的位并行引擎3100实现2.67倍加速。
本发明的一些实施方案被设计来通过仅处理输入激活和权重的基本位来最小化用于产生输入激活与权重的乘积的所需计算。在一些实施方案中,输入激活和权重被即时转换为仅包含基本位的表示,并且每周期处理一对基本位:一个激活位和一个权重位。
在一些实施方案中,可提供硬件加速器以用于仅处理基本位,而不管这些基本位是以单偏移、常规位置表示、非定点表示还是其他基本位表示的形式来处理的。
在以单偏移的形式处理基本位的实施方案中,加速器可将每个激活或权重表示为其单偏移(on、……、o0)的列表。每个单偏移表示为(符号,数值)对。例如,激活A=-2(10)=1110(2)(其具有0010(2)的布斯编码)将被表示为(-,1),并且A=7(10)=0111(2)将被呈现为((+,3),(-,0))。可使用单个位来对符号进行编码,其中例如0表示“+”并且1表示“-”。
在一些实施方案中,权重W=(W项)和输入激活A=(A项)各自分别表示为(符号,数值)对(si,ti)和(s′i,t′i),并且乘积如在以下的方程(3)中所陈述的那样计算:
实现方程(3),代替在单个周期中处理完整的A×W乘积,加速器单独处理输入激活A的单个t′项和权重W的单个t项的每个乘积。由于这些项是2的幂,因此它们的乘积也将是2的幂。这样,实现方程(3)的实施方案可首先添加对应指数t′+t。如果每周期处理单个乘积,则可通过解码器计算2t′+t最终值。在每周期处理多于一个项对的情况下,实施方案可每项对使用一个解码器来计算单个2t′+t乘积,然后采用高效的加法器树来累加所有乘积,如下面参考示例性实施方案进一步描述的。
图4A是实施方案的诸如可在实现神经网络的引擎或计算布置中使用的示例性处理元件(PE)4000的示意图。PE 4000实现了六个步骤,每个步骤都使用处理子元件来实现。在一些实施方案中,处理元件的各种子元件(诸如下面描述的PE 4000的子元件)可与各种硬件和软件实现方式合并或分割。设置处理元件4000以将16个权重W0、……、W15乘以16个输入激活A0、……、A15。
第一子元件是指数子元件4100,所述指数子元件4100接受16个4b权重单偏移t0、……、t15及其16个对应的符号位s0、……、s15以及16个4位激活单偏移t′0、……、t′15及其符号s′0、……、s′15并计算16个单偏移对乘积。由于所有单偏移都是2的幂,因此它们的乘积也将是2的幂。因此,为了将16个激活乘以它们的对应权重,所以PE 4000将其单偏移相加以生成5位指数(t0+t′0)、……、(t15+t′15),并使用16个XOR门来确定乘积的符号。
第二子元件是独热编码器4200。对于第i对激活和权重,其中i是∈{0,…,15},独热编码器4200通过5b至32b解码器计算
所述解码器将5位指数结果(t
i+t′
i)转换为其对应的独热格式,即具有1个‘1’位和31个‘0’位的32位数字。解码器输出的第j位置中的单个‘1’位对应于+2
j或-2
j的值,这取决于对应乘积的符号,如图4A所示的E
i符号。
第三子元件是直方图器4300,其生成解码器输出值的直方图的等效物。直方图器4300将来自独热编码器4200的16个32b数字累加成32个桶N0、……、N31,其对应于20、……、231的值,因为存在32个2的幂。还考虑了这些数字的符号,它们是从独热编码器4200取得的Ei符号。此后,每个桶包含具有对应值的输入的数量的计数。由于每个桶具有16个带符号的输入,因此所得计数将介于-16至16的范围内,并因此用2的补码中的6位表示。
第四子元件和第五子元件分别是对齐器4400和缩减器4500。对齐器4400根据其权重而使计数移位,从而将所述计数全部转换为31+6=37个b,然后缩减器使用32输入加法器树以将32个6b计数缩减为最终输出,如图4A中所指示的。
在缩减后,第六子元件是累加子元件4600。累加子元件4600接受来自缩减器4500的部分和。累加子元件4600然后累加新接收到的部分和与保持在累加器中的任何部分和。这样,可在多个周期内计算完整的A×W乘积,每周期一对有效的单偏移。
在一些实施方案中,子元件设计可能够更好地利用正被处理的信息的结构。例如,图4B是拼接器、对齐器和缩减器子元件4700的示意图。在一些实施方案中,PE 4000的对齐器4400和缩减器4500都被拼接器、对齐器和缩减器子元件4700替换,所述子元件4700包括拼接器4710、对齐器4720和缩减器4730。
用拼接器、对齐器和缩减器子元件4700替换PE 4000的对齐器4400和缩减器4500具有向PE 4000添加新拼接器的效果,所述新拼接器是子元件4710。添加新拼接器还允许对对齐器和缩减器进行更改,诸如使这些子元件更小且更高效;对对齐器4400进行反射性更改以实现对齐器子元件4720,并对缩减器4500进行反射性更改以实现缩减器子元件4730。
代替使32个6b计数移位和添加32个6b计数,拼接器、对齐器和缩减器子元件4700力图通过借助于对每个计数进行分组和拼接以利用每个计数的相对权重来降低成本和能量,如图4B所示。例如,将N0与N6简单地拼接,而不是将它们相加,因为它们被保证不具有‘1’的重叠位。然后,通过6输入加法器树将所拼接的值相加,以产生有待输出到累加子元件4600的38b部分和。
与使用对齐器4400和缩减器4500的可能情况相比,拼接器、对齐器和缩减器子元件4700实现能量和面积效率更高的加法器树,并利用直方图器4300的输出包含不具有'1'的重叠位的数字组的事实。
例如,考虑将第6个6b输入
与第0个6b输入
相加。使用对齐器4400和缩减器4500的加法器,必须使第6个输入N
6移位6个位,这相当于加上6个零作为结果的6个最低有效位。在这种情况下,将不存在移位6的N
6并且N
0将具有1的位的位位置。因此,将(N
6<<6)与N
0相加是等于基于N
0的符号位而拼接N
6与N
0或者(N
6-1)与N
0,如在图5A中作为拼接单元5100示意性地描绘的以及在以下计算(4)中在数字上描绘的:
N6×26+N0=(N6<<6)+N0
因此,通过将其中(i MOD 6)相等的那些Ni分组来递归应用此过程。即,第i输入将与第(i+6)输入、第(i+12)输入拼接,依此类推。图5B的示例性拼接单元5200将递归拼接实现为其中(i MOD 6)=0的那些Ni输入的堆栈,尽管在其他实施方案中其他实现方式是可能的。对于上面描述的16乘积单元,所述过程产生以下六个分组计数的描绘(5):
然后,最终部分和由以下的方程(6)给出:
在图6中描绘了硬件加速器瓦片6000。瓦片6000是每周期处理16个输入激活窗口以及K=8个滤波器的PE(诸如图4的PE 4000)的2D阵列。沿着同一列的PE共享相同的输入激活,并且沿着同一行的PE接收相同权重。PE(i,j)每周期从来自第j窗口的每个输入激活接收下一个单偏移,并将所述单偏移乘以来自第i滤波器的对应权重的单偏移。当所有PE都完成了对当前一组16个激活及其对应权重的项的处理时,瓦片6000开始处理下一组激活和权重。
当诸如瓦片6000的瓦片按项串行处理激活和权重时,为了匹配BASE配置,所述瓦片必须同时处理更多滤波器或窗口。在最坏的情况下,每个激活和权重具有16个项,因此诸如瓦片6000的瓦片应并行处理8×16=128个滤波器以匹配BASE的峰值计算带宽。然而,如图1中指示的,在多16倍数个滤波器的情况下,使用诸如瓦片6000的瓦片的一些示例性实现方式的性能比BASE性能提高了多于两个数量级。此外,实施方案可使用经修改的布斯编码,并将项的最坏情况缩减至每权重或激活8个。
图7A和图7B是若干硬件加速器配置的示意图,所述硬件加速器配置的性能在图8中进行了比较。如图7B中指示的,BASE配置7100可使用大约2,000根电线来处理8个滤波器,其中每个滤波器16个权重。如图7A中指示的,使用诸如瓦片6000的瓦片,配置7200可使用128根电线来处理8个滤波器,配置7300可使用256根电线来处理16个滤波器,配置7400可使用512根电线来处理32个滤波器,并且配置7500可使用大约1,000根电线来处理64个滤波器。在图7的每个配置中,将激活电线的数量设置为256。在其他实施方案中,可采用其他配置,诸如固定滤波器和权重电线的数量以及增加激活窗口和电线的数量。
图8比较了图7所示的配置7100至7500的性能。图8的条形图将配置7200至7500相对于配置7100的相对性能提高示出为针对六个模型中的每一者的一组四个条形图,在每组条下方标识了六个模型。配置7200的相对提高示出为每个组的最左侧条,配置7300的相对提高示出为从每个组的左侧起的第二个条,配置7400的相对提高示出为从每个组的左侧起的第三条,并且配置7500的相对提高示出为每个组的最右侧条。
本发明的实施方案的模拟表明,这种实施方案实现了执行时间、能量效率和面积效率方面的提高。使用定制的周期精确的模拟器来对受测试实施方案的执行时间进行建模。设计的布局后模拟用于测试能量和面积结果。Synopsys设计编译器用于通过TSMC 65nm库合成设计(参见例如Synopsys的“Design Compiler”http://www.synopsys.com/Tools/Implementation/RTLSynthesis/DesignC ompiler/Pages,由此通过引用并入)。使用合成结果来用Cadence Innovus产生布局(参见例如Cadence,“Encounter rtl compiler”https://www.cadence.com/content/cadencewww/global/en_US/home/train ing/all-courses/84441.html,据此通过引用并入)。英特尔PSG ModelSim用于生成数据驱动的活动因素以报告幂数。所有设计的时钟频率被设置为1GHz。用CACTI对ABin和About SRAM缓冲区进行建模(参见例如N.Muralimanohar和R.Balasubramonian,“Cacti 6.0:A tool tounderstand large caches”,2015年,据此通过引用并入),并用Destiny将激活存储器和权重存储器建模为eDRAM(参见例如M.Poremba、S.Mittal、D.Li、J.Vetter和Y.Xie,“Destiny:A tool for modeling emerging3d nvm and edram caches”,欧洲设计、自动化与测试会展文集(DATE),2015年,第1543-1546页,2015年3月,据此通过引用并入)。
图8指示针对具有表1的100%相对TOP-1精确度概况的卷积层的配置7200至7500相对于BASE配置7100的性能,所述性能是使用指示的网络架构进行比较的(参见例如YangTien-Ju和Chen Yu-Hsin以及Sze Vivienne,“Designing Energy-EfficientConvolutional Neural Networks using Energy-Aware Pruning”,IEEE计算机视觉和模式识别会议(CVPR),2017年,据此通过引用并入)。
表1:卷积层中的位的激活和权重精度概况
在一些实施方案中,通过将本发明的实施方案与某些模型一起使用产生另外的回报,所述模型诸如被设计来具有降低的精度的模型、使用缩减‘1’的位数的替代性数字表示的模型、或权重或激活稀疏性提高的模型。然而,本发明的实施方案针对密集网络和稀疏网络,并仅通过处理基本项来提高性能。
如图8中指示的,配置7200平均优于配置7100多于2倍,而对于稀疏网络AlexNet-Sparse,配置7200相比于配置7100实现3倍的加速。如图8中指示的,配置7300至7500分别相比于配置7100实现高达4.8倍、9.6倍和18.3倍的加速。
在以下的表2中示出了配置7200至7500相对于配置7100的能量效率。由于使用诸如瓦片6000的瓦片的配置需要较少的片上存储器并每权重和激活传达较少的位,因此总体能量效率通常较高。
表2:相对于BASE2K的计算单元能量效率。
布局后测量用于测量配置7100至7500的面积。配置7200需要1.78倍于配置7100的面积,同时实现2.4倍的平均加速。7300的面积开销为3.56倍,7400的面积开销为7.08倍,并且7500的面积开销为14.15倍,而相比于配置7100的执行时间改进分别为平均4.2倍、8.4倍和16倍。因此,与配置7100相比,诸如瓦片6000的瓦片提供更好的性能与面积缩放。
由瓦片或加速器处理的激活和权重对的数量可变化。一些处理器元件每周期处理16个激活和权重对,所有这些促进相同输出激活。某些处理器元件每周期处理16以外的激活和权重对。一些加速器实施方案组合具有相同或不同配置的多个瓦片或处理器元件。图9是包含以8×4网格组织的32个处理器元件9100的瓦片9000的示意图。输入暂存器(即小的本地存储器)提供激活和权重输入,激活暂存器9200提供激活输入并且权重暂存器9300提供权重输入。在一些层中,激活暂存器9200提供权重输入,并且权重暂存器9300提供激活输入。第三暂存器(即存储器9400)用于存储部分或完整的输出神经元。
为每行处理元件9100提供总线9110以将所述处理元件连接到存储器9400。从处理器元件网格读出部分和并将所述部分和累加在累加器9500中,并且然后一次将一列处理元件写入存储器9400。存在足够的时间来通过公共总线9800耗尽处理元件网格。由于甚至单个激活和权重对输入组的处理通常都是在多个周期内执行的并且通常可在需要读出部分和之前处理多个激活和权重对组,因此这为每一列处理元件提供足够的时间来顺序访问公共总线9800以耗尽其输出,而其他列的处理元件仍在处理其对应激活和权重。
瓦片9000在输入暂存器与处理元件网格之间包括编码器9600,一个编码器对应于每个输入暂存器。编码器9600将值转换为一系列项。任选的合成器列9700为16b算术的空间合成提供支持,同时保持8b处理元件。瓦片9000允许在空间和时间中重复使用激活和权重,并最小化向瓦片9000供应来自存储器层次结构的其余部分的激活和权重所需的连接或电线的数量。
例如,瓦片9000可每周期进行4个激活窗口和8个滤波器。在这种情况下,权重暂存器9300为每个滤波器提供16个权重,并且激活暂存器9200为每个窗口提供对应的16个激活。沿着相同列的处理元件9100共享相同的输入激活,而沿着相同行的处理元件9100共享相同的输入权重。编码器9600以每周期一个项的速率将输入值转换为项,因为每个PE可每周期处理单个激活项和单个权重项。行‘i’和列‘j’中的处理元件每周期将来自第j窗口的输入激活乘以来自第i滤波器的权重。一旦所有激活项已乘以当前权重项,就产生下一个权重项。处理元件再次循环通过所有对应激活项,以将所述对应激活项与新权重项相乘。当已处理所有权重项和激活项时,乘积完成。如果存在3个激活项和4个权重项,则将需要至少12个周期。瓦片9000总共处理4个窗口(每窗口16个激活)以及8个滤波器;同时处理4x16x8个激活和权重对。
实际上,项的数量将跨权重值和激活值而变化,并且因此,一些处理元件将比其他处理元件需要更多的周期来处理权重值与激活值的乘积。瓦片9000隐式地将所有同时处理的激活和权重对视为组并跨不同组同步处理;当所有处理元件完成对当前组的所有项的处理时,瓦片9000开始处理下一个组。然而,这放弃了一些加速潜力。
在一些实施方案中,允许计算以16个独立的组进行。例如,第一同步组将包含A0、A16、A24、……、A48和权重W0、W16、……、W112,第二同步组将包含A1、A17、A25、……、A49和权重W1、W17、……、W113,并且对于其余14个组依此类推。此示例称为梳状同步,因为这些组在网格上物理地形成了梳状图案。布斯编码器9600的输入处的一组缓冲器可用于允许组在彼此之前滑动。
一些神经网络仅对于一些层需要16b数据宽度或精度。一些神经网络仅对于激活需要16b数据宽度或精度,而极少值需要多于8b。在一些实施方案中,瓦片支持跨所有层和所有值所需的最坏情况的数据宽度。然而,在一些实施方案中,瓦片支持空间或时间或者空间和时间两者方面的数据类型合成。
例如,瓦片设计可允许在8b处理元件上进行16b计算,以进行激活并任选地进行权重。但也可使用其他位宽。瓦片设计可能对于以下是有用的:对于其层中的仅一些层需要多于8b的神经网络。
在图10中示出了空间合成瓦片。瓦片10000使用多个尚未修改的8b处理元件。每当其处理具有16b值的层时,空间合成瓦片都需要额外的处理元件。瓦片10000是8b处理元件10100的2乘2网格,以延伸来支持以下权重和激活组合:8b与8b、16b与8b以及16b与16b。归一化的峰值计算吞吐量分别为:1、1/2和1/4。为了支持16b和8b计算,将激活项分割为对应于其低字节和高字节的激活项,这些分别由两个相邻的处理元件(“PE”)列处理。
在图10中指示的示例中,PE(0,0)和PE(0,1)处理A0和A1的低字节,并且PE(1,0)和PE(1,1)处理高字节。行0和行1与以前一样分别处理滤波器0和1。处理继续进行,直至累加子元件4600已累加数据块的高字节与低字节的和。最后,一次一列地消耗部分和寄存器。在网格的输出处添加合成器列10200。当读出列0的部分和时,所述部分和捕获在相应的临时寄存器(“tmp”)10300中。在下一个周期中,列1的部分和出现在输出总线上。合成器10200的每行加法器将两个半部相加并产生最终部分和。虽然所述示例示出了2乘2网格,但是所述概念无需修改即适用于较大处理元件网格。单个合成器列就足够,因为网格每行使用一条公共总线来一次一列地输出部分和。尽管未示出,但合成器可重复使用累加列加法器,而不是引入新组。通常,支持16b激活将需要两个相邻的逐行处理器元件。
瓦片10000还通过将16b权重沿着两行分割来支持16b权重。这需要四个处理元件,所述四个处理元件各自被分配给低字节与高字节的四个组合中的一个。在图10中,PE(0,0)、PE(1,0)、PE(0,1)和PE(1,1)将分别计算(AL,WL)、(AH,WL)、(AL,WH)和(AH,WD)。合成器列中的第二级加法器负责将来自行的结果与零填充行1适当地组合。
也可使用时间合成瓦片。时间合成瓦片将采用时间合成处理元件。在图11中示出了时间合成处理元件的实施方案。处理元件11000支持8b和16b操作,尽管其面积成本比本地16b处理元件低。每当其必须处理16b值时,时间合成瓦片都需要额外的周期。
处理元件11000允许将激活和权重的项分割成属于高字节和低字节的项,并且在时间上单独对其进行处理。将来自前级加法器的输出适当地填充零,并且然后将其添加到扩展的精度部分和。基于正在处理的激活项和权重项的源,存在三种情况:都属于低字节(L/L),都属于高字节(H/H),或一个属于高字节并且另一个属于低字节(H/L或L/H)。多路复用器11100选择适当的填充值。多路复用器的选择信号可在瓦片中的所有处理元件之间共享。处理8b值不会引发开销。处理16b激活和8b权重(或处理8b激活和16b权重)需要一个额外的周期,而处理16b权重和激活则需要3个额外的周期。然而,只有当在具有处理元件11000的瓦片的情况下存在真正需要16b的值时,才必须支付此时间开销。
时间合成瓦片不会为整个层保留资源,并且由于需要大于8b的值可能极少,因此可预期实现比空间合成瓦片更高的每处理元件吞吐量。然而,时间合成瓦片在布斯编码器处需要更大的处理元件和更复杂的控制。在实施方案中,与本地16b处理元件相比,能够在时间上扩展至16b的8b处理元件小22%。在一些实施方案中,可使用空间与时间设计的组合,诸如用于权重的空间合成和用于激活的时间合成。
在一些网络中且对于一些层(尤其是第一层),如通过剖析确定的所需数据类型有时略微超过8b。例如,发现需要9b或10b。在一些实施方案中,利用未经修改的8b处理元件以及对布斯编码器进行较小修改就可以执行这些层或网络。例如,在处理需要第9位的值(即该位为1)的情况下,因为8b处理元件仅支持至多+27的计算,所以布斯编码器可通过以下有效地合成+28:发送+27两次。重要的是,仅对第9位需要为1的值和9b中所有负值才将有此需要。作为附加的益处,这种灵活性使某些网络的量化更容易。
上面呈现的实施方案利用值间位级并行性。然而,一些实施方案可利用值内位级并行性,并且以与位并行硬件不同的方式进行此操作。这是可能的,因为即使在空间上而不是在时间上处理具有一个值的项,处理元件也会产生正确的结果。例如,如果为每权重分配了两个输入通道,并且修改了布斯编码器以使得其每周期输出至多两个项。这还使得加速器能够利用值内的位级并行性,这对于减少同步开销可能是有用的。利用值内的位级并行性还可用于提高以下的利用率:未充分重复使用权重或激活或者激活和权重以分别填充所有列或行或者行和列两者的层。例如,对于未重复使用权重的完全连接的层是这种情况。这种优化有助于能量效率,因为完全连接的层通常受存储器限制。这对于深度可分离的卷积层也是有用的。当不存在足够的滤波器来填充所有行时,利用值内的位级并行性也可能是有用的。这不同于由常规位并行单元利用的值内位级并行性:所述常规位并行单元处理所有位而与值无关,而本发明加速器的实施方案将仅处理有效位。
已比较具有空间可合成处理元件的8b加速器的性能与具有本地16b处理元件的加速器的性能。8b空间可合成处理元件支持8b和16b权重和激活,并且将8b加速器按比例放大以使用与16b加速器相同的计算区域。使用GoogleNet-S和Resnet50-S模型进行测试。8b空间可合成处理加速器使用如仅针对需要多于8b精度的那些层而需要的多个处理元件。8b空间可合成处理加速器比本地16b加速器快:对于GoogleNet-S快了1.4倍,而对于Resnet50-S快了1.2倍。
在其他实施方案中,可使用其他配置,诸如增加数量的权重电线。在一些实施方案中,诸如由于通过仅借助于增加滤波器的数量来按比例放大而加剧的滤波器间不平衡,性能亚线性地提高。在一些实施方案中,替代地或除了增加权重数量之外,可增加同时处理的激活的数量。将配置设计与最小缓冲配置组合(参见例如J.Albericio、A.Delmás、P.Judd、S.Sharify、G.O’Leary、R.Genov和A.Moshovos,“Bit-pragmatic deep neural networkcomputing”,第50届年度IEEE/ACM微架构国际研讨会论文集,MICRO-50'17,第382-394页,2017年,通过引用并入在上文)也可减少交叉激活不平衡。在其他实施方案中,激活和权重存储器可沿着瓦片分布或在它们的全部或组之间共享。
本发明的实施方案与压缩方法兼容(参见例如A.Delmas、S.Sharify、P.Judd、M.Nikolic和A.Moshovos,“Dpred:Making typical activation values matter in deeplearning computing”,CoRR,第abs/1804.06732卷,2018年,据此通过引用并入),并且可预期利用实际的片外存储器配置和接口表现良好。
注意,尽管以上描述和相关联附图的部分可描述或建议使用硬件,但是一些实施方案可在诸如GPU(图形处理单元)的处理器上的软件中进行模拟,并且可产生类似的性能增强。另外,各种部件可以是专用的、共享的、分布式的或与其他部件组合的;例如,在各种实施方案中,供应激活和权重表示的激活和权重存储器可以是专用的、共享的、分布式的或组合式的。
已经详细描述了本发明的各种实施方案。由于可在不脱离本发明的本质、精神或范围的情况下对上述最佳模式进行改变和/或添加,因此本发明不限于那些细节,而仅由所附权利要求来限制。