用于二值阵列张量处理器的方法
技术领域
本公开涉及神经网络卷积运算张量处理器,具体地,涉及用于二值阵列张量处理器的方法。
背景技术
神经网络通过模拟人类大脑的神经连接结构来建立模型结构,是目前学术研究和企业研发的热点。当前的神经网络,特别是用于图像处理和对象识别的卷积神经网络,需要处理大量表示为三阶或者更高阶张量的数据,也需要处理具有不同形状和大小的张量数据。因此需要能够高速处理不同形状的三阶或更高阶张量数据的神经网络专用计算装置。此外,二值化神经网络指的是对权重值和/或输入数据进行二值化处理后的神经网络。当前还没有针对二值化神经网络的高精度计算装置。
发明内容
基于此,有必要提供能够高速处理三阶或更高阶张量数据的神经网路专用计算装置,也有必要提供针对二值化神经网络的高精度计算装置。为此,本公开提供一种张量处理器,该张量处理器包括多个处理引擎(Processing Engine,以下简称PE)以及与多个PE相连的乒乓控制器。该张量处理器能根据实际需要(比如根据输入的张量数据的维度和卷积核的维度等信息)确定要调用的PE的个数以及由被调用的PE所组成的二维阵列的维度,调用多个PE的全部或一部分来组成PE二维阵列。进一步地,该张量处理器配置PE二维阵列的PE彼此之间的连接关系和数据流向,还可以根据PE二维阵列的维度来切割输入的张量数据,从而实现了高速处理输入张量数据且能灵活地应对不同维度的输入张量数据。针对二值神经网络的推导运算,该张量处理器用硬件方式取代卷积运算,还有对卷积运算结果进行门限操作,从而实现了兼具高速度和高精度优势的二值神经网络计算装置。
根据本公开的一个方面,提供了一种用于二值阵列张量处理器的方法,其使用处理引擎二维阵列来计算特征张量和卷积核张量的卷积运算结果,其中所述特征张量可以表示成N组特征值,每一组特征值包含相同个数的特征值,所述卷积核张量可以表示成M组权重值,每一组权重值包含相同个数的权重值,其中N和M均为大于等于2的正整数,且M不小于N;所述方法包括:为每一组特征值分配一个特征ID,并为每一组权重值分配一个权重ID;为所述处理引擎二维阵列中的每一个处理引擎分配一个特征本地ID和一个权重本地ID;所述处理引擎二维阵列中的每一个处理引擎通过比较该处理引擎的特征本地ID和特征ID而匹配地接收一组特征值;所述处理引擎二维阵列中的每一个处理引擎通过比较该处理引擎的权重本地ID和权重ID而匹配地接收一组权重值;所述处理引擎二维阵列中的每一个处理引擎对匹配到的特征值和权重值进行卷积运算得到中间结果;将多个所述中间结果进行叠传后作为所述特征张量和所述卷积核张量的卷积运算结果。
附图说明
本公开的实施例具有其他优点和特征,当结合附图时,从以下详细描述和所附权利要求中将更容易明白这些优点和特征,其中:
图1示出了一种实施方式的张量处理器的架构,该张量处理器包括输入输出总线、乒乓控制器和PE二维阵列。
图2示出了一种实施方式的张量处理器的PE二维阵列的架构和数据流向。
图3示出了另一种实施方式的张量处理器的PE二维阵列的架构和数据流向。
图4示出了图3所示的实施方式里的张量处理器的PE二维阵列推导出运算结果第一行。
图5示出了图3所示的实施方式里的张量处理器的PE二维阵列推导出运算结果第二行。
图6示出了图3所示的实施方式里的张量处理器的PE二维阵列推导出运算结果第三行。
图7示出了一种实施方式的张量处理器配置PE二维阵列的PE以适应输入数据矩阵的维度。
图8示出了一种实施方式的张量处理器切割输入数据矩阵以适应PE二维阵列的维度。
图9示出了一种实施方式的张量处理器切割输入数据矩阵后的第一种匹配卷积核与图像数据输入的方式。
图10示出了一种实施方式的张量处理器切割输入数据矩阵后的第二种匹配卷积核与图像数据输入的方式。
图11示出了一种实施方式的张量处理器切割输入数据矩阵后的第三种匹配卷积核与图像数据输入的方式。
图12示出了一种实施方式的张量处理器通过Multicast配置数据。
图13示出了一种实施方式的张量处理器进行全连接运算的数据流向。
图14示出了一种实施方式的张量处理器的PE配置参数。
图15示出了一种实施方式的张量处理器的PE进行二值神经网络卷积运算和门限操作。
图16示出了另一种实施方式的张量处理器的架构。
图17示出了一种实施方式的张量处理器的乒乓控制器的架构。
具体实施方式
附图和以下描述仅为举例说明。应当理解,从下面的讨论中,这里公开的结构和方法的替代实施例将容易地被认为是可以采用的可行替代方案,而不偏离所要求保护的原理。
参见图1,一种实施方式的张量处理器包括输入输出总线100、多个PE以及与多个PE相连的乒乓控制器102。输入输出总线100从外部接收输入数据(比如表示为三阶或者更高阶张量的图像数据或者包含图像特征值的特征张量),将输入数据传输到乒乓控制器102并从乒乓控制器102接收输出数据后输出到外部。输入输出总线100可以从外部接收卷积核数据(卷积核数据可以为一组权重值也可以仅为单个权重值,也可以是卷积核张量)。在另外一些实施方式中,卷积核数据也可以来自于该张量处理器本身,比如将卷积核数据预先存储在乒乓控制器102的PE配置参数寄存器里(未示出)。乒乓控制器102根据输入数据和卷积核数据的信息(比如输入数据的维度和卷积核数据的维度)来确定要调用的PE的个数,以及被调用的PE所组成的二维阵列的维度,然后调用与乒乓控制器相连的多个PE的全部或者一部分来组成PE的二维阵列。图1所示的实施方式中,乒乓控制器102确定了由16个PE组成的4行4列的二维阵列(未示出可能存在的未调用的PE)。进一步地,乒乓控制器102配置该16个PE彼此之间的连接关系和数据流向(例如,如图1所示,运算结果自上而下垂直地传输到最下面一行的PE)。在另外一些实施方式中,乒乓控制器102确定需要N(N为大于等于2的正整数)乘以M(M为大于等于2的正整数)个的PE来组成一个N行M列或M行N列或者其他维度的PE二维阵列,并配置N乘以M个的PE彼此之间的连接关系及数据流向(包括但不限于图像数据的数据流向、权重数据的数据流向和运算结果的数据流向)。
继续参见图1,乒乓控制器102将卷积核数据配置到PE二维阵列中的PE,也将输入数据传输到PE二维阵列中的PE。对于PE二维阵列中的特定PE,该PE根据传输到该PE的输入数据以及配置到该PE的卷积核数据进行卷积运算后得到运算结果。特别地,配置卷积核数据到该PE发生在传输输入数据到该PE之前,也即是先配置好卷积核数据再开始传输输入数据。因为卷积核数据或者权重值在卷积运算中有很高的复用性,通过事先配置好卷积核数据或者权重值,可以不停歇地传输输入数据比如图像特征值到PE二维阵列中进行运算,从而增加张量处理器每一个批次处理数据的数量。在另外一些实施方式中,配置卷积核数据也可以跟传输输入数据同时发生,或者发生在传输输入数据之后。根据配置好的PE彼此之间的连接关系和数据流向,乒乓控制器102选择一些PE的运算结果作为输出结果。图1所示的实施方式中,乒乓控制器102选择了最下面一行的4个PE的运算结果作为输出结果。在另外一些实施方式中,根据实际需要,PE二维阵列可以具有不同的维度或者架构,而PE彼此之间的连接关系和数据流向也可以有不同的配置,PE二维阵列中的每一个PE都有可能在某个特定的架构中被指定来提供输出结果。另外,根据本公开的一些实施方式,乒乓控制器102可以一边配置新的卷积核(或权重数据)一边传输输入数据进行运算,从而加快张量处理器的处理速度。具体地,对于整个PE二维阵列中的PE,乒乓控制器102可以在配置新的卷积核数据到一部分PE的同时,也传输输入数据到另一部分PE。也就是说,更新一部分PE的卷积核数据的同时,可以保持另一部分PE的卷积核数据不变且让另一部分PE继续进行运算,从而加快张量处理器的处理速度。
继续参见图1,PE二维阵列中的PE对传输到该PE的输入数据以及配置到该PE的卷积核数据(或者权重数据)进行卷积运算后得到的运算结果,可以是神经网络推导运算的中间结果Psum,也可以是对中间结果Psum进行正则化处理后得到的正则化结果。对于二值化卷积神经网络(Binary CNN),PE的运算结果可以是中间结果Psum,也可以是正则化后的1比特的1或0的结果。在一些实施方式中,PE进行运算后得到的中间结果Psum被传输到乒乓控制器102。在另外一些实施方式中,PE二维阵列采用全连接层(fully-connected),而PE进行运算后得到的中间结果Psum不需要传输到乒乓控制器102。也就是说,不通过乒乓控制器102读取和写入中间结果Psum,而是直接在PE二维阵列的PE之间完成中间结果Psum的叠传。采用全连接层的PE二维阵列既支持全连接运算,也支持卷积运算。并且,采用全连接层的PE二维阵列因为不需要通过乒乓控制器102读取和写入中间结果Psum,而是在二维阵列内部完成操作,可以减小延迟,有利于高速运算推导。乒乓控制器102可以根据实际需要调整PE彼此之间的连接关系及数据流向,从而控制是否通过乒乓控制器102读取和写入中间结果Psum,进而实现全连接运算和卷积运算之间的切换。另外,根据本公开的一些实施方式,通过配置PE,可以将神经网络模型中的池化层(pooling)操作与卷积运算混合在一起,也即让被配置的PE自带池化操作。
参见图2,一种实施方式的张量处理器的PE二维阵列的数据流向包括但是不限于图像数据的数据流向、权重数据的数据流向和运算结果的数据流向。图2所示的实施方式提供由9个PE组成的3行3列的PE二维阵列。图像数据从PE二维阵列最左边一列的PE进入,之后向同一行相邻的右侧PE逐个地传输,也就是按照从左往右的方向从第一列到第二列再从第二列到第三列。而权重数据从最左边一列的PE进入之后沿着对角线方向朝向不是同一行也不是同一列的右上方最近的PE逐个地传输。PE二维阵列的各个PE进行运算得到的运算结果垂直地向着同一行的下方最近的PE逐个地传播,也就是按照从上往下的方向从第一行到第二行再从第二行到第三行。图2所示的PE二维阵列的数据流向仅仅用于说明张量处理器对于图像数据的数据流向、权重数据的数据流向和运算结果的数据流向可以分别地施加控制。根据实际需要,比如根据输入数据和卷积核数据的信息,该张量处理器在配置PE彼此之间的连接关系和数据流向时,可以对图像数据的数据流向、权重数据的数据流向和运算结果的数据流向分别地进行配置。图2所示的实施方式仅仅用于说明一个3行3列的PE二维阵列中的PE彼此之间的数据流向的一种配置方式,不应该用于限制本公开对PE二维阵列的其它可能的配置方式。
图1所示的PE二维阵列和图2所示的PE二维阵列,以及本公开其它实施方式中的PE二维阵列,仅仅用于说明PE彼此之间的连接关系和数据流向,不应该用于限制本公开对PE二维阵列的其它可能配置方式。本公开的多个实施方式中提到的PE之间的前后左右上下等相对关系,第几行第几列的PE等位置信息,还有最左边一列或者最下面一行的PE等表述,仅仅为了方便说明PE彼此之间的连接关系和数据流向,但是不应该理解为要求PE严格按照所提到的相对关系和位置关系来排列,更不应该用于限制本公开对PE二维阵列的其它可能配置方式。另外,本公开多个附图所示出的PE二维阵列具有通过箭头表示的各种数据流向,这些箭头仅仅为了方便说明PE彼此之间的数据流向,不应该用于限制本公开对PE二维阵列的其它可能配置方式。
参见图3到图6,其中图3示出了另一种实施方式的张量处理器,图4到图6示出了输入的图像数据矩阵为5行5列以及权重数据矩阵为3行3列。该张量处理器包括由9个PE组成的3行3列的二维阵列,该9个PE分别编号为PE1到PE9。图3也示出了该9个PE彼此之间的连接关系和数据流向,包括图像数据的数据流向、权重数据的数据流向和运算结果的数据流向。图像数据按照图3所示的方式传输到对应的PE。具体地,每一个PE对应一行图像数据:图像数据第1行传输到编号为PE1的PE,图像数据第2行传输到编号为PE2和PE4的PE,图像数据第3行传输到编号为PE3、PE5和PE7的PE,图像数据第4行传输到编号为PE6和PE8的PE,以及图像数据第5行传输到编号为PE9的PE。而权重数据按照图3所示的方式配置到对应的PE。具体地,每一个PE对应一行权重数据:权重数据第1行配置到编号为PE1、PE4和PE7的PE,权重数据第2行配置到编号为PE2、PE5和PE8的PE,权重数据第3行配置到编号为PE3、PE6和PE9的PE。运算结果按照图3所示的方式进行叠传。具体地,编号为PE1的PE的运算结果叠传到编号为PE2的PE,再继续叠传到编号为PE3的PE,最后得到卷积运算输出结果的第1行。编号为PE4的PE的运算结果叠传到编号为PE5的PE,再继续叠传到编号为PE6的PE,最后得到卷积运算输出结果的第2行。编号为PE7的PE的运算结果叠传到编号为PE8的PE,再继续叠传到编号为PE9的PE,最后得到卷积运算输出结果的第3行。
参见图3和图4,以二值卷积神经网络为例子,编号为PE1的PE对输入的图像数据第1行和配置的权重数据第1行进行二值卷积神经网络的卷积运算。编号为PE2的PE对输入的图像数据第2行和配置的权重数据第2行进行二值卷积神经网络的卷积运算。编号为PE3的PE对输入的图像数据第3行和配置的权重数据第3行进行二值卷积神经网络的卷积运算。编号为PE1的PE的运算结果叠传到编号为PE2的PE,再继续叠传到编号为PE3的PE,最后得到二值神经网络卷积运算输出结果的第1行。其中,特定的PE对输入的图像数据和配置的权重数据进行卷积运算,其卷积运算完成可以发生在接收另一个PE叠传来的运算结果之前,之后,也可以同时发生。该特定的PE将卷积运算完成后的运算结果和另一个PE叠传来的运算结果一起叠传到第三个PE。
参见图3和图5,以二值卷积神经网络为例子,编号为PE4的PE对输入的图像数据第2行和配置的权重数据第1行进行二值卷积神经网络的卷积运算。编号为PE5的PE对输入的图像数据第3行和配置的权重数据第2行进行二值卷积神经网络的卷积运算。编号为PE6的PE对输入的图像数据第4行和配置的权重数据第3行进行二值卷积神经网络的卷积运算。编号为PE4的PE的运算结果叠传到编号为PE5的PE,再继续叠传到编号为PE6的PE,最后得到二值神经网络卷积运算输出结果的第2行。其中,特定的PE对输入的图像数据和配置的权重数据进行卷积运算,其卷积运算完成可以发生在接收另一个PE叠传来的运算结果之前,之后,也可以同时发生。该特定的PE将卷积运算完成后的运算结果和另一个PE叠传来的运算结果一起叠传到第三个PE。
参见图3和图6,以二值卷积神经网络为例子,编号为PE7的PE对输入的图像数据第3行和配置的权重数据第1行进行二值卷积神经网络的卷积运算。编号为PE8的PE对输入的图像数据第4行和配置的权重数据第2行进行二值卷积神经网络的卷积运算。编号为PE9的PE对输入的图像数据第5行和配置的权重数据第3行进行二值卷积神经网络的卷积运算。编号为PE7的PE的运算结果叠传到编号为PE8的PE,再继续叠传到编号为PE9的PE,最后得到二值神经网络卷积运算输出结果的第3行。其中,特定的PE对输入的图像数据和配置的权重数据进行卷积运算,其卷积运算完成可以发生在接收另一个PE叠传来的运算结果之前,之后,也可以同时发生。该特定的PE将卷积运算完成后的运算结果和另一个PE叠传来的运算结果一起叠传到第三个PE。
参见图3到图6,输入的图像数据矩阵为5行5列,权重数据矩阵为3行3列,该张量处理器配置了共9个PE组成的3行3列的PE二维阵列,还配置了该9个PE之间的连接关系及数据流向。进一步地,该张量处理器将图像数据的某一行输入到特定的PE,也将权重数据某一行配置到该特定的PE。该特定PE对输入的图像数据和配置的权重数据进行卷积运算输出运算结果。多个PE的运算结果按照特定方式叠传后得到神经网络卷积运算输出结果的某一行。在另外一些实施方式中,PE二维阵列可以有不同维度或者尺寸大小,比如PE二维阵列可以是12×14。在另外一些实施方式中,张量处理器根据输入的图像数据矩阵以及权重数据矩阵的信息(比如矩阵维度)来调整PE二维阵列的尺寸大小。图3到图6所示的实施方式仅仅用于说明PE二维阵列的一种架构以及一种配置PE二维阵列的方式,不应该用于限制本公开对PE二维阵列的其它可能架构和配置方式。在另外一些实施方式中,用于进行卷积运算的卷积核(或者权重数据矩阵),其尺寸大小可以是3×3,也可以是1×1、5×5、或者7×7。
根据本公开的另外一些实施方式,张量处理器通过配置PE二维阵列的尺寸大小和架构,以及通过配置PE之间的连接关系和数据流向,可以向多个PE同步输入用于卷积运算的图像数据,也可以向多个PE同步配置用于卷积运算的权重数据,从而优化数据传输。根据本公开的一些实施方式以及参考图3所示的PE二维阵列的架构,编号为PE3、PE5和PE7的PE可以同步地自乒乓控制器或者PE二维阵列之外的缓存器接收图像数据第3行,而编号为PE1、PE4和PE7的PE可以同步地自乒乓控制器或者PE二维阵列之外的缓存器接收权重数据第1行。图3到图6所示的PE二维阵列,仅仅用于说明PE二维阵列的一种架构以及一种配置PE二维阵列的方式,不应该用于限制本公开对PE二维阵列的其它可能架构和配置方式。
图3到图6所示的实施方式中,第一个PE的运算结果叠传到第二个PE,再继续叠传到第三个PE。在另外一些实施方式中,第一个PE的运算结果叠传到第二个PE之后,等第二个PE结束卷积运算后叠传到第一个PE而不是第三个PE。之后,第一个PE接收输入的新的图像数据,如有需要也可以配置新的权重数据或者继续保持已经配置的权重数据不变,并对新的图像数据进行卷积运算,然后输出结果。
图3到图6所示的实施方式中,以二值卷积神经网络为例子,PE对输入的图像数据和配置的权重数据进行二值卷积神经网络的卷积运算。在另外一些实施方式中,PE可以对输入的图像数据和配置的权重数据进行全连接运算。在另外一些实施方式中,张量处理器可以用于非二值卷积神经网络,比如数据类型为INT4、INT8、INT16或INT32的神经网络的推导运算,而PE对输入的图像数据和配置的权重数据进行与该神经网络的数据类型相对应的卷积运算。
参见图7,一种实施方式的张量处理器的PE二维阵列为12行14列的矩阵阵列,而输入数据矩阵为3行13列。该张量处理器调整PE二维阵列让部分PE处于不活跃的状态从而降低能耗。
参见图8,一种实施方式的张量处理器的PE二维阵列为12行14列的矩阵阵列,而输入数据矩阵为5行27列。该张量处理器切割输入数据矩阵,分成5行14列和5行13列两个输入数据矩阵,以适应PE二维阵列的维度。
继续参见图7和图8,根据本公开的一些实施方式,张量处理器可以根据输入的图像数据矩阵和权重数据矩阵(或卷积核)的信息(比如矩阵维度),从而确定PE二维阵列的维度(或尺寸大小)还有PE之间的连接关系及数据流向。该张量处理器同时也可以根据确定好的PE二维阵列的维度来切割输入数据矩阵。如果有需要,该张量处理器可以再次调整先前已经确定好的PE二维阵列的维度。因此,本公开的张量处理器可以在维持当前PE二维阵列的维度不变的前提下,通过切割输入数据矩阵从而具有处理不同维度的输入数据矩阵的灵活性。神经网络需要处理的张量数据可以展开后表示成为不同维度的数据矩阵,该张量处理器处理不同维度的输入数据矩阵的灵活性有利于实现神经网络高速推导运算。另一方面,当神经网络的输入数据矩阵的维度保持较好的一致性,或者根据其它实际需要,该张量处理器可以根据输入数据矩阵的维度等信息而重新调整先前已经确定好的PE二维阵列的维度,从而选择更适合于处理当前输入数据矩阵的PE二维阵列的维度还有PE之间的连接关系及数据流向。比如说,参见图3到图6所示的实施方式,当输入的图像数据矩阵为5行5列,而权重数据矩阵为3行3列,则张量处理器配置了共9个PE组成的3行3列的PE二维阵列,从而实现了高速推导运算输入的图像数据矩阵。根据本公开的一些实施方式,张量处理器既对输入的图像数据矩阵进行切割,又可以调整当前的PE二维阵列的维度以及其它配置,从而有利于高速处理复杂多变的输入张量数据。
参见图9,一种实施方式的张量处理器在切割输入数据矩阵后采取第一种匹配卷积核与图像数据输入的方式。第一种方式指的是相同的卷积核用于不同的图像数据输入。如图9所示,第一行的图像数据不同于第二行的图像数据,而第一行的卷积核或权重数据与第二行的卷积核或权重数据是同一个过滤器也即同一个卷积核。第一行和第二行的输出结果都进入通道1。
参见图10,一种实施方式的张量处理器在切割输入数据矩阵后采取第二种匹配卷积核与图像数据输入的方式。第二种方式指的是相同的图像数据输入对应不同的卷积核。如图10所示,第一行的卷积核或权重数据不同于第二行的卷积核或权重数据,而第一行的图像数据与第二行的图像数据是相同的图像数据。第一行和第二行的输出结果都进入通道1。
参见图11,一种实施方式的张量处理器在切割输入数据矩阵后采取第三种匹配卷积核与图像数据输入的方式。第三种方式指的是切割后将两个不相同的图像数据分别输入两个不同的卷积核。如图11所示,第一行的卷积核或权重数据不同于第二行的卷积核或权重数据,而第一行的图像数据不同于第二行的图像数据。第一行的输出结果进入通道1,而第二行的输出结果进入通道2。
参见图12,一种实施方式的张量处理器通过组播传播方式(Multicast)配置数据来优化数据的传输。Multicast意味着一次读取操作可以从乒乓控制器或者PE二维阵列之外的缓存器中读取数据并发送到多个PE。换句话说,可变个数的PE在一个指令周期通过Multicast接收新的数据配置,从而使得该张量处理器可以将同一个数据在一个指令周期配置到多个PE中。而通过Multicast被配置同一个数据的多个PE可以是在PE二维阵列中位于同一行、或者位于同一列,或者属于来自于二维阵列中任意位置的任意组合。例如,同时参见图3和图12,张量处理器通过Multicast将权重数据第1行同时配置到编号为PE1、PE4和PE7的PE,通过Multicast将权重数据第2行同时配置到编号为PE2、PE5和PE8的PE,以及通过Multicast将权重数据第3行同时配置到编号为PE3、PE6和PE9的PE。通过Multicast配置的数据可以包括用于卷积运算的卷积核,也可以包括用于神经网络推导运算的权重数据。根据本公开的一些实施方式,通过Multicast配置的数据也可以包括用于二值神经网络卷积运算的门限操作所需要的门限值。用于配置的门限值数据可以是已经训练好的门限值。该张量处理器在通过Multicast配置完卷积核(或权重数据)和门限值之后才将输入数据传输到PE二维阵列进行卷积运算。也就说输入数据比如图像特征的资料在实际运算过程中才会输入到PE二维阵列进行运算。该张量处理器可以采用静态算法,在将已经训练好的门限值配置到PE二维阵列之后,通过Multicast不间断地将输入数据矩阵和权重数据矩阵分别配置到对应的PE进行卷积运算,实现更快的推导运算速度。
参见图13,一种实施方式的张量处理器具有支持全连接运算的架构。该张量处理器通过调整PE二维阵列之间的连接关系和数据流向实现了神经网络里支持全连接层上面是全连接的资料流。
图14示出了一种实施方式的张量处理器配置给每一个PE的参数列表。输入的图像特征数据每一行会分配一个feature_row_id。而权重数据每一行分配一个weight_row_id。每一个PE分配一个与该PE相联系的weight_row_id_local和一个与该PE相联系的feature_row_id_local。当配置权重数据时,被配置的权重数据带有的weight_row_id与PE的weight_row_id_local相比较,如果一致则该PE接收被配置的权重值,如果不一致则该PE不接收。当配置输入的图像特征数据时,被配置的输入的图像特征数据带有的feature_row_id与PE的feature_row_id_local相比较。如果一致则该PE接收被配置的输入的图像特征数据,如果不一致则该PE不接收。该张量处理器根据输入的图像特征数据和权重数据(或卷积核)的信息计算分配用的feature_row_id,weight_row_id,feature_row_id_local,和weight_row_id_local。比如说,维度是3维的图像特征数据有长、宽、深共三个维度,而维度是4维的卷积核数据有长、宽、深和卷积核的个数共四个维度。该张量处理器可以根据图像特征数据的三个维度的信息和卷积核数据的四个维度的信息,计算出要调用的PE的个数还有被调用的PE所组成的二维阵列的维度,然后计算出分配到图像特征数据每一行的feature_row_id,分配到卷积核数据每一行的weight_row_id,还有分配到PE的feature_row_id_local和weight_row_id_local。
参见图3、图12和图14,张量处理器通过Multicast将权重数据第1行配置到编号为PE1、PE4和PE7的PE。张量处理器通过比较权重数据第1行的weight_row_id与各个PE的weight_row_id_local。只有编号为PE1、PE4和PE7的PE的weight_row_id_local与权重数据第1行的weight_row_id相匹配,因此只有编号为PE1、PE4和PE7的PE接收权重数据第1行。
继续参见图14,对于特定PE的配置参数,该张量处理器可以设置参数model_set来设定该PE的工作模式是RGB运算还是全二值运算,可以设置参数Psum_set来设定该PE是否接收另一个PE的运算结果并累加到该PE的运算结果,可以设置参数Pool_en来设定该PE是否在卷积运算后自带池化层操作,可以设定参数Dout_on来设定该PE是否输出运算结果,可以设定参数Row_on来设定该PE是否参与运算。该张量处理器还可以设定参数K_num来说明参与卷积运算的卷积核的维度,设定参数Psum_num来说明进行累加运算的中间结果P_sum的个数。通过事先配置PE的配置参数,该张量处理器可以控制PE的工作模式、工作状态以及控制PE之间的连接关系和数据流向。根据本公开的另外一些实施方式,可以根据实际需要重新调整PE里的配置参数,进而重新调整PE彼此之间的连接关系及数据流向。进一步地,因为通过匹配PE里事先配置好的参数与输入数据或权重数据被分配的参数来判断该PE是否应该接收输入数据或权重数据,该张量处理器可以通过Multicast来提高配置数据的效率。因此,该张量处理器通过采用二维矩阵的排列模式来加快神经网络的张量计算,并通过配置PE的参数来优化数据传输和控制运算,以及通过切割输入矩阵和调整PE二维阵列来调整能处理的张量的维度,从而实现了能动态调整的神经网路高速计算装置。
图14所示的实施方式仅仅用于说明PE配置参数的一种可能组合,不应该用于限制本公开对PE的其它可能配置方式。根据本公开的一些实施方式,张量处理器根据输入的图像特征数据和卷积核的信息,可以计算出要配置给每一个PE的用于匹配图像特征数据的feature_row_id_local和feature_column_id_local,还有用于匹配卷积核或权重数据的weight_row_id_local和weight_column_id_local。每一个用于输入到PE的图像特征数据会分配成对的feature_row_id和feature_column_id。而每一个卷积核或者权重数据会分配成对的weight_row_id和weight_column_id。在配置图像特征数据时会分别地比较PE的feature_row_id_local和图像特征数据的feature_row_id,以及PE的feature_column_id_local和图像特征数据的feature_column_id。只有当这两次匹配都一致,该PE才会接受图像特征数据,而如果至少有一次不匹配则拒绝接受图像特征数据。类似的,在配置卷积核或权重数据时会分别地比较PE的weight_row_id_local和weight_row_id,以及weight_column_id_local和weight_column_id。只有当这两次的匹配都一致,该PE才会接受卷积核或权重数据,而如果至少有一次不匹配则拒绝接受卷积核或权重数据。
参见图15,一种实施方式的张量处理器进行二值神经网络卷积运算和门限操作。具体地,该张量处理器将特征图像数据和权重数据都进行了二值化处理,而且进一步地表示成0和1。因此二值化后的特征图像数据和权重数据都只需要一个比特的存储位元(如果表示成1和-1则需要两个比特的存储位元,一个位元存储符号另一个位元存储数值),从而节省了大量存储空间。进一步地,因为用一个比特的0或1来表示二值化后的特征图像数据和权重数据,神经网络卷积运算的相乘运算可以替换成异或非(XNOR)逻辑门。而神经网络卷积运算的相加运算可以替换成popcount操作。Popcount操作意味着在结果中数每个位元位置值为1的个数。比如一个32位元的操作数的所有位元位置值为1的个数是a,则0的个数(如果表示成1和-1则代表-1)为32-a,最终结果是a–(32–a)=2a–32。
继续参见图15,以32位元的特征图像数据和32位元的权重数据进行卷积运算为例子,则两个32位元的操作数的乘加操作可以替换成:两个32位元的操作数进行异或非操作,得到的结果进行popcount操作。具体地,如图15所示,将一个比特的图像数据和对应的一个比特的权重数据经过一个异或非(XNOR)逻辑门,再将多个异或非(XNOR)逻辑门的结果经过一个32比特的popcount,再将由多个32比特的popcount输出的结果叠加起来就得到了二值神经网络卷积运算的16比特的中间结果Psum。因为用逻辑门操作和popcount操作取代了卷积运算的乘加操作,从而节省了大量浮点运算,使得该张量处理器实现二值神经网络的加速卷积运算。二值神经网络的加速卷积运算可以通过该张量处理器的PE二维阵列的任一个PE实现,也可以通过指定的PE来实现。根据本公开的一些实施方式,张量处理器也可以不通过逻辑门操作和popcount操作,而是采用一般神经网络的基于浮点运算的卷积运算操作。
图15所示的张量处理器对中间结果Psum进行门限操作以提高运算精度。具体地,该张量处理器将卷积运算的中间结果Psum与训练好的门限值进行比较,输出结果为16比特的中间结果Psum或者正则化后的1比特的0或1。
假设卷积后的结果为a,批次处理函数BatchNorm(a)=γ·(a–μ)/σ+B,其中u为向量的均值,σ为方差,γ为比例系数,B为偏置。进行二值化操作也即sign函数操作:
二值化:
为了简化运算,将Batchnormal操作和二值化操作简化合并为门限操作。可以得出BatchNorm(a)=0为分界点,当其大于等于0时结果为1,其它情况值为0。因此令BatchNorm(a)=0,可得a=u–(B·σ)/γ。记a为Tk,意味着BatchNorm(Tk)=γ·(Tk–μ)/σ+B=0。所以当卷积运算的结果大于等于Tk时值为1,其它情况值为0。
假设对Batchnormal的训练结果为:γ=4,μ=5,σ=8,B=2。计算得:Tk=u–(B·σ)/γ=5–(2*8)/4=1。
化简合并前计算:当卷积计算结果为0时,代入Batchnormal公式:4*(0–5)/8+2=-0.5,因为比0小,所以结果为0。当卷积计算结果为2时,代入Batchnormal公式:4*(2–5)/8+2=0.5,因为比0大,所以结果为1。
化简合并后计算:门限值Tk=1,当卷积结果为0时,比Tk小,所以结果是0。当卷积结果是2时,因为比Tk大,所以结果是1。所以化简前后输出结果一致。
因此,将Batchnormal操作和二值化操作简化合并成门限操作可以得出与简化前一致的结果,但是门限操作节省了大量浮点运算资源。当二值卷积神经网络训练完成后,根据公式Tk=u–(B·σ)/γ导出Tk,则只要将卷积的结果与Tk的值进行比较即可。该张量处理器因为将卷积的结果与训练好的门限值Tk相比较,不需要进行大量的浮点运算,既提高了运算精度也加快了神经网络的推理时间。门限操作可以通过该张量处理器的PE二维阵列的任一个PE实现,也可以通过指定的PE来实现。
根据本公开的一些实施方式,张量处理器通过逻辑门操作和popcount操作取代二值神经网络卷积运算的乘加操作,再通过门限操作将卷积结果与训练好的门限值比较以提高运算精度,实现了兼具高速度和高精度的二值神经网络张量计算装置。在另一些实施方式中,该张量处理器进一步地通过乒乓控制器实现了一边配置PE二维阵列一边进行运算。在另一些实施方式中,该张量处理器进一步地通过事先配置权限值和门限值到PE之后再开始输入特征图像数据实现了静态算法和快速处理输入数据。在另一些实施方式中,该张量处理器进一步地通过配置PE让其自带池化层(pooling)处理。在另一些实施方式中,该张量处理器还进一步地通过全连接使得不通过乒乓控制器读取和写入中间结果Psum,而是直接在PE二维阵列的PE之间完成中间结果Psum的叠传。在另一些实施方式中,该张量处理器进一步地通过切割输入数据矩阵和调整PE二维阵列的维度实现了能处理不同维度的输入张量数据。在另一些实施方式中,该张量处理器进一步地通过Multicast配置数据实现了优化数据传输。
根据本公开的一些实施方式,训练好的门限值,可以通过指定次数的迭代,或者有收敛性的回归算法,又或者与标记好的测试图像做比较等方法获得。根据本公开的另外一些实施方式,训练好的门限值可以通过一般的训练神经网络和机器学习的方法获得。
参见图16,一种实施方式的张量处理器包括PE二维阵列的矩阵500,控制模块502、权重数据缓存器504、门限值数据缓存器506、图像数据缓存器508和输入输出总线510。根据本公开的一些实施方式,乒乓控制器512包括但是不限于控制模块502、权重数据缓存器504、门限值数据缓存器506,和图像数据缓存器508。根据本公开的另外一些实施方式,乒乓控制器512包括控制模块502、权重数据缓存器504和图像数据缓存器508。输入输出总线510从外部接收数据,比如三阶或者更高阶的张量矩阵数据。输入输出总线510根据接收的数据的类型及用途(比如权重数据、门限值数据或者图像数据),将其接收的数据分别写入权重数据缓存器504、门限值数据缓存器506和图像数据缓存器508。权重数据缓存器504、门限值数据缓存器506和图像数据缓存器508将各自存储的数据传输到控制模块502并且从控制模块502分别读取权重数据、门限值数据和图像数据。本实施方式的输入数据以图像数据作为例子,但是输入数据并不局限于图像数据,输入数据也可以是声音数据、适合于目标识别的数据类型或者其它数据类型。在另外一些实施方式中,图像数据缓存器508可以替换为输入数据缓存器514(未示出)。输入数据缓存器514用于从输入输出总线接收各种类型的输入数据,包括图像、声音、或者其它数据类型。输入数据缓存器514还将其存储的数据传输到控制模块502并且从控制模块502读取相应的数据。
继续参见图16,控制模块502根据权重数据和图像数据的信息,决定要调用的PE的个数,再确定被调用的多个PE之间的连接关系和数据流向,进而构建PE二维阵列的矩阵500。控制模块502也可以仅仅根据权重数据的信息,或者仅仅根据图像数据的信息,或者仅仅依靠事先配置在控制模块502里的程序来决定要调用的PE的个数以及被调用的多个PE之间的连接关系和数据流向。控制模块502将权重数据、门限值数据和图像数据传输到构建好的PE二维阵列的矩阵500。根据图像数据矩阵的维度和PE二维阵列的矩阵的维度,控制模块502可以调整PE二维阵列的矩阵500里的PE或者切割图像数据矩阵。控制模块502在切割图像数据矩阵后可以采取不同的方式匹配权重数据或卷积核与图像数据,包括相同的卷积核用于不同的图像数据输入,相同的图像数据输入对应不同的卷积核,还有切割后将两个不相同的图像数据分别输入两个不同的卷积核。
继续参见图16,控制模块502还可以根据实际需要再次或多次调整PE二维阵列的矩阵500的PE之间的连接关系和数据流向。控制模块502可以通过Multicast将同一个数据(权重数据或者门限值数据或者图像数据)在一个指令周期配置到多个PE中,而被配置同一个数据的多个PE可以是在PE二维阵列的矩阵500中位于同一行、或者位于同一列,或者属于来自于PE二维阵列的矩阵500中任意位置的任意组合。控制模块502可以配置用于卷积运算的卷积核或者权重数据,也可以配置门限值数据。用于配置的门限值数据可以是已经训练好的门限值。该张量处理器可以采用静态算法,在将已经训练好的门限值配置到PE二维阵列的矩阵500之后,对图像数据矩阵和权重数据矩阵进行卷积运算,实现更快的运算速度。
参见图17,一种实施方式的张量处理器的乒乓控制器包括PE配置参数寄存器600。PE配置参数寄存器600用来存储配置参数比如权重数据或者门限值。该乒乓控制器在进行任意维度的卷积运算之前需要读取配置参数并对PE进行配置。该乒乓控制器可以一边配置一边进行运算,为此有CONSUMER指针602和PRODUCER指针604驻留在单个组中。CONSUMER指针602是一个只读寄存器字段,该张量处理器可以检查以确定数据路径选择了哪个乒乓组,而PRODUCER指针604完全由该张量处理器控制。在另外一些实施方式中,PE配置参数寄存器600还用来存储配置PE要用的各种参数,比如图15所示的PE的配置参数。
本公开的多个实施方式中的输入数据以图像数据作为例子,但是输入数据并不局限于图像数据。输入数据也可以是声音数据、适合于目标识别的数据类型或者其它数据类型。本公开的多个实施方式的输入数据以三阶或者更高阶的张量数据作为例子,但是输入数据并不局限于三阶或者更高阶的张量数据。输入数据也可以是二阶、一阶或者零阶的张量数据。
根据本公开的一些实施方式,乒乓控制器可以一边配置一边进行运算,也就是说可以一边配置新的卷积核(或权重数据)和/或已经训练好的门限值,可以一边对输入数据矩阵进行卷积运算或全连接运算,从而加快张量处理器的处理速度。
根据本公开的一些实施方式,配置输入数据、权重数据和门限值彼此之间是独立的,可以同步进行。
根据本公开的一些实施方式,通过配置上的调整,可以用PE二维阵列实现全连接运算或者卷积运算且不需要读写中间结果Psum,而是直接在PE二维阵列中完成。并且可以通过调整配置而实现在全连接运算和卷积运算之间的切换。
根据本公开的一些实施方式,通过配置PE,可以将神经网络模型中的池化层(pooling)操作与卷积运算混合在一起,也即被配置的PE自带池化操作。
根据本公开的一些实施方式,可以灵活地选择要调用的PE,并且对于PE之间的连接关系和数据流向可以通过调整配置来根据实际需要设定有特定配置的PE二维阵列(包括控制PE之间的数据流向),并可进一步地根据设定好的PE二维阵列来分割输入数据矩阵或者选择让一部分用不到的PE进入不活跃状态。
根据本公开的一些实施方式,张量处理器可以采用静态算法,在将已经训练好的门限值配置到PE二维阵列之后,对输入数据矩阵和权重数据矩阵进行卷积运算,实现更快的运算速度。
根据本公开的一些实施方式,张量处理器所用到的PE可以使用FPGA、GPU等常见的神经网络处理器,也可以是专门设计的处理器,只要满足实现本公开的各种实施方式所需要的最低限度的功能性要求。
根据本公开的一些实施方式,张量处理器用于二值卷积神经网络,而该张量处理器的PE二维阵列的PE对输入的图像数据和配置的权重数据进行二值卷积神经网络的卷积运算。在另外一些实施方式中,PE可以对输入的图像数据和配置的权重数据进行全连接运算。在另外一些实施方式中,张量处理器可以用于非二值卷积神经网络,比如数据类型为INT4、INT8、INT16或INT32的神经网络的推导运算,而PE对输入的图像数据和配置的权重数据进行与该神经网络的数据类型相对应的卷积运算或者全连接运算。
以上所述实施方式的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施方式中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施方式并不能理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。