一种使用芯片装置进行全连接运算方法及装置转让专利

申请号 : CN201910534528.X

文献号 : CN110245752B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘少礼陈天石王秉睿张尧

申请人 : 中科寒武纪科技股份有限公司

摘要 :

本公开提供一种全连接计算方法及装置,所述方法应用于芯片装置,所述芯片装置用于执行全连接计算。本披露提供的技术方案具有计算处理时间短,能耗低的优点。

权利要求 :

1.一种使用芯片装置进行全连接运算方法,其特征在于,所述芯片装置包括:主单元和多个基本单元,所述主单元与多个基本单元物理连接;

芯片装置的主单元获取待计算的数据块以及运算指令;

主单元依据该运算指令把该待计算的数据块划分成分发数据块以及广播数据块;全连接层的权值矩阵为分发数据块,全连接层的输入数据为广播数据块;

主单元对该分发数据块进行拆分处理得到多个基本数据块,通过所述物理连接将该多个基本数据块分发至多个基本单元,主单元通过所述物理连接将该广播数据块广播至多个基本单元;

芯片装置的基本单元对该基本数据块与广播数据块执行内积运算得到运算结果,如果运算结果不是中间结果,通过所述物理连接将运算结果回传至主单元;

主单元主单元对该运算结果处理得到该待计算的数据块以及运算指令的指令结果。

2.根据权利要求1所述的方法,其特征在于,所述主单元对该分发数据块进行拆分处理得到多个基本数据块,将该多个基本数据块分发至多个基本单元具体包括:主单元对该分发数据块进行拆分处理得到M个基本数据块,将M个基本数据块分发至多个基本单元。

3.根据权利要求2所述的方法,其特征在于,所述将M个基础数据块分发给所述多个从单元具体包括:将所述M个基础数据块按任意不重复的方式分发给所述多个从单元。

4.根据权利要求1-3任意一项所述的方法,其特征在于,所述芯片装置还包括:分支单元,所述分支单元连接所述主单元与多个从单元,所述方法还包括:所述分支单元转发所述主单元与多个从单元之间的数据。

5.根据权利要求1-3任意一项所述的方法,其特征在于,所述主单元包括:向量运算器电路、算数逻辑单元电路、累加器电路、矩阵转置电路、直接内存存取电路或数据重排电路中的一种或任意组合。

6.根据权利要求1-3任意一项所述的方法,其特征在于,所述基本单元包括:内积运算器电路或累加器电路等中一个或任意组合。

7.一种芯片装置,所述芯片装置包括:主单元和多个基本单元,所述主单元与多个基本单元物理连接;

所述主单元,用于获取待计算的数据块以及运算指令;依据该运算指令把该待计算的数据块划分成分发数据块以及广播数据块;全连接层的权值矩阵为分发数据块,全连接层的输入数据为广播数据块;

所述主单元,还用于对该分发数据块进行拆分处理得到多个基本数据块,通过所述物理连接将该多个基本数据块分发至多个基本单元,通过所述物理连接将该广播数据块广播至多个基本单元;

基本单元,用于对该基本数据块与广播数据块执行内积运算得到运算结果,如果运算结果不是中间结果,通过所述物理连接将运算结果回传至主单元;

主单元,用于对该运算结果处理得到该待计算的数据块以及运算指令的指令结果。

8.根据权利要求7所述的芯片装置,其特征在于,

所述主单元,具体用于对该分发数据块进行拆分处理得到M个基本数据块,将M个基本数据块分发至多个基本单元。

9.根据权利要求8所述的芯片装置,其特征在于,

所述主单元,具体用于将所述M个基础数据块按任意不重复的方式分发给所述多个从单元。

10.根据权利要求7-9任意一项所述的芯片装置,其特征在于,所述芯片装置还包括分支单元,所述分支单元连接所述主单元以及所述多个从单元;

所述分支单元,用于转发所述主单元与多个从单元之间的数据。

11.根据权利要求10所述的芯片装置,其特征在于,

所述分支单元包括多个分支单元,每个分支单元连接所述主单元以及至少一个从单元。

12.根据权利要求7-9任意一项所述的芯片装置,其特征在于,所述主单元包括:向量运算器电路、算数逻辑单元电路、累加器电路、矩阵转置电路、直接内存存取电路或数据重排电路中的一种或任意组合。

13.根据权利要求7-9任意一项所述的芯片装置,其特征在于,所述基本单元包括:内积运算器电路或累加器电路等中一个或任意组合。

14.一种计算装置,其特征在于,所述计算装置包括如权利要求7-13任意一项所述的芯片装置。

15.一种计算机可读存储介质,其特征在于,存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行如权利要求1-6任一项所述的方法。

说明书 :

一种使用芯片装置进行全连接运算方法及装置

技术领域

[0001] 本申请涉及芯片处理技术领域,具体涉及一种使用芯片装置进行全连接运算方法及装置。

背景技术

[0002] 人工神经网络(Artificial Neural Network,即ANN),是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。现有的神经网络的运算基于CPU(Central Processing Unit,中央处理器)或GPU(英文:Graphics Processing Unit,图形处理器)来实现运算,此种运算的功耗高、计算时间长。

发明内容

[0003] 本申请实施例提供了一种使用芯片装置进行全连接运算方法及装置,可提升全连接运算的处理速度,提高效率、节省功耗。
[0004] 第一方面,提供一种使用芯片装置进行全连接运算方法,所述芯片装置包括:主单元和多个从单元,
[0005] 芯片装置的主单元获取待计算的数据块以及运算指令;
[0006] 主单元依据该运算指令把该待计算的数据块划分成分发数据块以及广播数据块;全连接层的权值矩阵为分发数据块,全连接层的输入数据为广播数据块;
[0007] 主单元对该分发数据块进行拆分处理得到多个基本数据块,将该多个基本数据块分发至多个基本单元,主单元将该广播数据块广播至多个基本单元;
[0008] 芯片装置的基本单元对该基本数据块与广播数据块执行内积运算得到运算结果,如果运算结果不是中间结果,将运算结果回传至主单元;
[0009] 主单元主单元对该运算结果处理得到该待计算的数据块以及运算指令的指令结果。
[0010] 第二方面,提供一种芯片装置,所述芯片装置包括:主单元和多个从单元,[0011] 所述主单元,用于获取待计算的数据块以及运算指令;依据该运算指令把该待计算的数据块划分成分发数据块以及广播数据块;全连接层的权值矩阵为分发数据块,全连接层的输入数据为广播数据块;
[0012] 所述主单元,还用于对该分发数据块进行拆分处理得到多个基本数据块,将该多个基本数据块分发至多个基本单元,将该广播数据块广播至多个基本单元;
[0013] 基本单元,用于对该基本数据块与广播数据块执行内积运算得到运算结果,如果运算结果不是中间结果,将运算结果回传至主单元;
[0014] 主单元,用于对该运算结果处理得到该待计算的数据块以及运算指令的指令结果。
[0015] 第三方面,提供一种计算装置,所述计算装置包括第二方面提供的芯片装置。
[0016] 第四方面,提供一种计算机可读存储介质,存储用于电子数据交换的计算机程序,其中,所述计算机程序使得计算机执行第一方面提供的方法。

附图说明

[0017] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018] 图1a是本披露提供的一种芯片装置的结构示意图。
[0019] 图1b是本披露提供的另一种芯片装置的结构示意图。
[0020] 图1c是本披露提供的芯片装置的数据分发示意图。
[0021] 图1d为一种芯片装置的数据回传示意图。
[0022] 图2是本披露实施例提供的一种神经网络的运算方法的流程示意图。
[0023] 图2a是本披露实施例提供的矩阵A乘以矩阵B的示意图。
[0024] 图3是本披露实施例提供的神经网络的运算方法的流程示意图。
[0025] 图3a为全连接1的单样本数据示意图。
[0026] 图3b为全连接2的多样本数据示意图。
[0027] 图3c为卷积1的M个卷积核数据示意图。
[0028] 图3d为卷积2输入数据示意图。
[0029] 图3e为输入数据的一个三维数据块的运算窗口示意图。
[0030] 图3f为输入数据的一个三维数据块的另一运算窗口示意图。
[0031] 图3g为输入数据的一个三维数据块的又一运算窗口示意图。

具体实施方式

[0032] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0033] 本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0034] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0035] 下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
[0036] 本披露的说明书和权利要求书及所述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0037] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本披露的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
[0038] 下面以CPU为例来说明神经网络的运算方法,在神经网络中,矩阵与矩阵的乘法在神经网络中大量的使用,这里以矩阵A与矩阵B的乘法为例来说明CPU的“与”运算方式。假设矩阵A与矩阵B的结果为C,即C=A*B;下述所示:
[0039]
[0040] 对于CPU来说,其在计算得到C采用的步骤可以为首先对第一行的完成计算,然后对第二行完成计算,最后对第三行完成运算,即对于CPU来说其运算时一行数据计算完毕以后再执行第二行数据的计算。以上述公式为例,具体的,首先,CPU对第一行完成计算,即需要完成,a11*b11+a12*b21+a13*b31、a11*b12+a12*b22+a13*b32和a11*b13+a12*b23+a13*b33;计算完上述以后,在计算a21*b11+a22*b21+a23*b31、a21*b12+a22*b22+a23*b32和a21*b13+a22*b23+a23*b33;最后再计算a31*b11+a32*b21+a33*b31、a31*b12+a32*b22+a33*b32和a31*b13+a32*b23+a33*b33。
[0041] 所以对于CPU或GPU来说,其需要一行一行的计算,即对第一行计算完毕以后再进行第二行的计算,然后再执行第三行的计算直至所有行计算完毕,对于神经网络来说,其行数可能有上千行的数据,所以其计算的时间很长,并且在计算时,CPU长期处于工作状态,能耗也高。
[0042] 参阅图1b,图1b为一种芯片装置的结构示意图,如图1b所示,该芯片装置包括:主单元电路、基本单元电路和分支单元电路。其中,主单元电路可以包括寄存器和/或片上缓存电路,该主单元还可以包括:向量运算器电路、ALU(arithmetic and logic unit,算数逻辑单元)电路、累加器电路、矩阵转置电路、DMA(Direct Memory Access,直接内存存取)电路、数据重排电路等的一个或任意组合;每个基础单元可以包括基础寄存器和/或基础片上缓存电路;每个基础单元还可以包括:内积运算器电路、向量运算器电路、累加器电路等中一个或任意组合。所述电路都可以是集成电路。如具有分支单元时,其中主单元与分支单元连接,该分支单元与基本单元连接,该基本单元用于执行数据块之间的内积运算,该主单元,用于收发外部数据,以及将外部数据分发至分支单元,该分支单元用于收发主单元或基本单元的数据。如图1b所示的结构适合复杂数据的计算,因为对于主单元来说,其连接的单元的数量有限,所以需要在主单元与基本单元之间添加分支单元以实现更多的基本单元的接入,从而实现对复杂数据块的计算。
[0043] 分支单元和基础单元的连接结构可以是任意的,不局限在图1b的H型结构。可选的,主单元到基础单元是广播或分发的结构,基础单元到主单元是收集(gather)的结构。广播,分发和收集的定义如下:
[0044] 所述主单元到基础单元的数据传递方式可以包括:
[0045] 主单元与多个分支单元分别相连,每个分支单元再与多个基础单元分别相连。
[0046] 主单元与一个分支单元相连,该分支单元再连接一个分支单元,依次类推,串联多个分支单元,然后,每个分支单元再与多个基础单元分别相连。
[0047] 主单元与多个分支单元分别相连,每个分支单元再串联多个基础单元。
[0048] 主单元与一个分支单元相连,该分支单元再连接一个分支单元,依次类推,串联多个分支单元,然后,每个分支单元再串联多个基础单元。
[0049] 分发数据时,主单元向部分或者全部基础单元传输数据,各个接收数据的基础单元收到的数据可以不同;
[0050] 广播数据时,主单元向部分或者全部基础单元传输数据,各个接收数据的基础单元收到相同的数据。
[0051] 收集数据时,部分或全部基础单元向主单元传输数据。需要说明的,如图1a或如图1b所示的芯片装置可以是一个单独的物理芯片,当然在实际应用中,该芯片装置也可以集成在其他的芯片内(例如CPU,GPU),本申请具体实施方式并不限制上述芯片装置的物理表现形式。
[0052] 参阅图1c,图1c为一种芯片装置的数据分发示意图,如图1c的箭头所示,该箭头为数据的分发方向,如图1c所示,主单元接收到外部数据以后,将外部数据拆分以后,分发至多个分支单元,分支单元将拆分数据发送至基本单元。
[0053] 参阅图1d,图1d为一种芯片装置的数据回传示意图,如图1d的箭头所示,该箭头为数据的回传方向,如图1d所示,基本单元将数据(例如内积计算结果)回传给分支单元,分支单元在回传至主单元。
[0054] 参阅图1a,图1a为另一种芯片装置的结构示意图,该芯片装置包括:主单元以及基本单元,该主单元与基本单元连接。如图1a所示的结构由于基本单元与主单元直接物理连接,所以该结构连接的基本单元的数量有限,其适合简单的数据的计算。
[0055] 参阅图2,图2提供了一种使用上述芯片装置进行神经网络的运算方法,该方法采用如图1a或如图1b所示的芯片装置来执行,该方法如图2所示,包括如下步骤:
[0056] 步骤S201、芯片装置的主单元获取待计算的数据块以及运算指令。
[0057] 上述步骤S201中的待计算的数据块具体可以为,矩阵、向量、三维数据、四维数据、多维数据等等,本披露具体实施方式并不限制上述数据块的具体表现形式,该运算指令具体可以为,乘法指令、卷积指令、加法指令、减法指令、BLAS(英文:Basic Linear Algebra Subprograms,基础线性代数子程序)函数或激活函数等等。
[0058] 步骤S202、主单元依据该运算指令对该待计算的数据块划分成分发数据块以及广播数据块。
[0059] 上述步骤S202的实现方法具体可以为:
[0060] 如该运算指令为乘法指令,确定乘数数据块为广播数据块,被乘数数据块为分发数据块。
[0061] 如该运算指令为卷积指令,确定输入数据块为广播数据块,卷积核为分发数据块。
[0062] 步骤S2031、主单元对该分发数据块进行拆分处理得到多个基本数据块,将该多个基本数据块分发至多个基本单元,
[0063] 步骤S2032,主单元将该广播数据块广播至多个基本单元。
[0064] 可选的,上述步骤S2031以及步骤S2032也可以采用循环执行,对数据量比较大的情况下,主单元对该分发数据块进行拆分处理得到多个基本数据块,将每个基本数据块拆分成m个基本数据子块,对广播数据块也拆分成m个广播数据子块,主单元每次分发一个基本数据子块以及广播一个广播数据子块,该基本数据子块与广播数据子块均为能够执行并行神经网络计算的数据块。例如,以一个1000*1000的矩阵A*1000*1000的矩阵B为例,该基本数据块可以为矩阵A的第z行数据,该基本数据子块可以为矩阵A第z行数据中的前20列数据,该广播数据子块可以为矩阵B第z列中的前20行数据。
[0065] 上述步骤S203中的基本数据块具体可以为,能够执行内积运算的最小数据块,以矩阵乘法为例,该基本数据块可以为矩阵的一行数据,以卷积为例,该基本数据块可以为一个卷积核的权值。
[0066] 上述步骤S203中的分发的方式可以参见下述实施例的描述,这里不再赘述,广播该广播数据块的方法也可以参见下述实施例的描述,这里不再赘述。
[0067] 步骤S2041、芯片装置的基本单元对该基本数据块与广播数据块执行内积运算得到运算结果,(可能是中间结果)。
[0068] 步骤S2042、如果运算结果不是中间结果,将运算结果回传至主单元。
[0069] 上述步骤S204中的回转方式可以参见下述实施例的描述,这里不再赘述。
[0070] 步骤S205、主单元对该运算结果处理得到该待计算的数据块以及运算指令的指令结果。
[0071] 上述步骤S205中的处理方式可以为累加、排序等等方式,本披露并不限于上述处理的具体方式,该具体的方式需要依据不同的运算指令来配置,例如还可以包括执行非线性变换等。
[0072] 本披露提供的技术方案在执行运算时,由主单元接收外部数据,该外部数据包括待计算的数据块以及运算指令,获取到待计算的数据块以及运算指令,依据该运算指令确定该待计算的数据块的分发数据块以及广播数据块,将分发数据块拆分成多个基本数据块,将广播数据块广播给多个基本单元,将多个基本数据块分发至多个基本单元,多个基本单元分别对该基本数据块以及广播数据块执行内积运算得到运算结果,多个基本单元将该运算结果返回给主单元,主单元根据返回的运算结果得到该运算指令的指令结果。此技术方案的技术点在于,针对神经网络,其很大的运算量在于数据块与数据块之间的内积运算,内积运算的开销大,计算时间长,所以本披露实施例通过该运算指令以及待运算的指令首先区分该待计算的数据块中的分发数据块以及广播数据块,对于广播数据块来说,即实现内积运算时必须使用的数据块,对于分发数据块,其属于在内积运算中可以拆分的数据块,以矩阵乘法为例,如待计算的数据块为矩阵A和矩阵B,其运算指令为乘法指令(A*B),依据矩阵乘法的规则,确定矩阵A为可以拆分的分发数据块,确定矩阵B为广播的数据块,因为对于矩阵乘法来说,被乘数矩阵A可以被拆分成多个基本数据块,乘数矩阵B可以为广播数据块。依据矩阵乘法的定义,被乘数矩阵A需要每行数据分别与乘数矩阵B执行内积运算,所以本申请的技术方案将矩阵A分成M个基本数据块,M个基本数据块中,每个基本数据块可以为矩阵A的一行数据。所以对于矩阵乘法来说,其耗时比较大的运算时间被多个基本单元分别执行,所以在内积运算中,多个基本单元可以快速的并行运算出结果,从而减少计算时间,较少的计算时间也能够减少芯片装置的工作时间,从而降低功耗。
[0073] 下面通过实际的例子来说明本披露提供的技术方案的效果。如图2a所示,为一种矩阵A乘以向量B的示意图,如图2a所示,矩阵A具有M行,L列,向量B具有L行,假设运算器运算矩阵A的一行与向量B的内积所需时间为t1,如采用CPU或GPU计算,其需要计算完一行以后在进行下一行,那么对于GPU或CPU计算的方法计算的时间T0=m*t1。而采用本披露具体实施例提供的技术方案,这里假设基本单元具有M个,则矩阵A会被拆分成M个基本数据块,每个基本数据块为矩阵A的一行数据,M个基本单元同时执行内积运算,那么其计算时间为t1,对于采用本披露具体实施例提供的技术方案所需要的时间T1=t1+t2+t3,其中t2可以为主单元拆分数据的时间,t3可以为处理内积运算的运算结果得到指令结果所需的时间,由于拆分数据以及处理运算结果的计算量非常小,所以花费的时间非常少,所以T0>>T1,所以采用本披露具体实施方式的技术方案能够非常明显的减少计算的时间,同时对于待运算的数据所产生的功耗来说,由于T0>>T1,所以对于本披露提供的芯片装置由于其工作时间特别短,通过实验证明,当芯片装置的工作时间非常短时,其能耗会远低于工作时间长的能耗,所以其具有节省能耗的优点。
[0074] 上述步骤S203中主单元将该广播数据块广播至多个基本单元的实现方式有多种,具体可以为:
[0075] 方式甲、将广播数据块通过一次广播至该多个基本单元。(所述广播是指进行“一对多”的数据传输,即由主单元同时向多个(全部或者一部分)基础单元发送相同的数据块)例如,矩阵A*矩阵B,其中矩阵B为广播数据块,将矩阵B通过一次广播至该多个基本单元,又如,在卷积中,该输入数据为广播数据块,将该输入数据块一次广播至该多个基本单元。此方式的优点在于能够节省主单元与基本单元的数据传输量,即只经过一次广播即能够将所有的广播数据传输至多个基本单元。
[0076] 方式乙、将广播数据块分成多个部分广播数据块,将多个部分广播数据块通过多次广播至该多个基本单元,例如,矩阵B通过多次广播至该多个基本单元,具体的,每次广播矩阵B的N列数据。此方式的优点在于可以降低基本单元的配置,因为对于基本单元其配置的寄存器的存储空间不可能很大,如果对于数据量比较大的矩阵B,一次将矩阵B下发给基本单元,那么基本单元存储这些数据就需要比较大的寄存器空间,因为基本单元的数量众多,提高寄存器空间必然对成本的增加产生很大影响,所以此时采用多次广播该广播数据块的方案,即对于基本单元来说,其只需要存储每次广播的广播数据块的部分数据即可,从而降低成本。
[0077] 需要说明的是,上述步骤S203中的将多个基本数据块分发至多个基本单元也可以采用上述方式甲或方式乙,不同点仅仅在于,其传输的方式为单播方式并且传输的数据为基本数据块。
[0078] 上述步骤S204的实现方法具体可以为:
[0079] 如采用方式甲广播该广播数据块以及方式甲的方式分发基本数据块(如图3a所示),基本单元对该基本数据块与广播数据块执行内积处理得到内积处理结果,即一次执行一行的内积运算,将该内积处理结果(运算结果中一种)发送至主单元,主单元将内积处理结果累加,当然在实际应用中,该基本单元可以将该内积处理结果累加后,将累加后的结果(运算结果中的另一种)发送至主单元。上述方式可以减少主单元与基本单元之间的数据传输量,进而提高计算的速度。
[0080] 如采用方式乙广播数据块,在一种可选的技术方案中,基本单元每接收到部分广播数据块,执行一次基本数据块与部分广播数据块的部分内积运算得到部分处理结果,基本单元将该处理结果发送至主单元,主单元将处理结果累加。在另一种可选方案中,如基本单元接收的基本数据块为n个,复用该广播数据块执行该广播数据块与该n个基本数据块内积运算得到n个部分处理结果,基本单元将该n个处理结果发送至主单元,主单元将n个处理结果分别累加。当然上述累加也可以在基本单元内执行。
[0081] 对于上述情况一般为广播数据块的数据量非常大且分发数据块也较大,因为对于芯片装置来说,由于其属于硬件的配置,所以其配置的基本单元虽然在理论上可以无数个,但是在实际中其数量有限,一般为几十个基本单元,该数量随着技术发展,可能会不断变化,比如增加。但是对于神经网络的矩阵乘矩阵的运算中,该矩阵A的行数可能有数千行,矩阵B的列数也有数千列,那么一次广播数据将矩阵B下发给基本单元就无法实现,那么其实现的方式可以为,一次广播矩阵B的部分数据,例如前5列数据,对于矩阵A来说也可以采用类似的方式,对于基本单元来说,其就可以每次进行部分内积计算,然后将部分内积计算的结果存储在寄存器内,等该行所有的内积运算执行完毕后,将该行所有的部分内积计算的结果累加即可以得到一种运算结果,将该运算结果发送至主单元。此种方式具有提高计算速度的优点。
[0082] 参阅图3,图3提供了一种神经网络的计算方法,本实施例中的计算以矩阵A*矩阵B的计算方式来说明,该矩阵A*矩阵B可以为图3a所示的矩阵示意图,为了方便说明,如图3所示的神经网络的计算方法在如图1b所示的芯片装置内执行,如图1b所示,该芯片装置具有16个基本单元,为了方便描述以及分配,这里设置如图3a所示的M的取值可以为32,该N的取值可以为15,L的取值可以为20。当然可以理解计算装置可以有任意多个基本单元。该方法如图3所示,包括如下步骤:
[0083] 步骤S301、主单元接收矩阵A、矩阵B以及乘法运算指令A*B。
[0084] 步骤S302、主单元依据乘法运算指令A*B确定矩阵B为广播数据块,矩阵A为分发数据块,将矩阵A拆分成32个基本数据块,每个基本数据块为矩阵A的一行数据。
[0085] 步骤S303、主单元将32个基本数据块均匀分配给16个基本单元,将32个基本数据块均匀分配给16个基本单元,即每个基本单元接收2个基本数据块,这两个数据块的分配方式可以是任意不重复的分配顺序。
[0086] 上述步骤S303的分配方式可以采用一些其他分配方式,例如当数据块数量无法恰好均分给每个基础单元的时候,可以不平均分配数据库给每个基础单元;也可以对其中的一些无法均分的数据块进行分割然后平均分配等方式,本披露具体实施方式并不限制上述基本数据块如何分配给多个基本单元的方式。
[0087] 步骤S304、主单元提取矩阵B的前几列(比如前5列)的部分数据,矩阵B将前5列的部分数据广播至16个基本单元。
[0088] 步骤S305、16个基本单元二次复用该前5列的部分数据与2个基本数据块执行内积运算以及累加运算得到32*5个前处理结果,将32*5个前处理结果发送至主单元。
[0089] 步骤S306、主单元提取矩阵B的中5列的部分数据,矩阵B将中5列的部分数据广播至16个基本单元。
[0090] 步骤S307、16个基本单元二次复用该中5列的部分数据与2个基本数据块执行内积运算以及累加运算得到32*5个中处理结果,将32*5个中处理结果发送至主单元。
[0091] 步骤S308、主单元提取矩阵B的后5列的部分数据,矩阵B将后5列的部分数据广播至16个基本单元。
[0092] 步骤S309、16个基本单元二次复用该后5列的部分数据与2个基本数据块执行内积运算以及累加运算得到32*5个后处理结果,将32*5个后处理结果发送至主单元。
[0093] 步骤S310、主单元将32*5个前处理结果、32*5个中处理结果以及32*5个后处理结果按前、中、后组合在一起得到一个32*15的矩阵C,该矩阵C即为矩阵A*矩阵B的指令结果。
[0094] 如图3所示的技术方案将矩阵A拆分成32个基本数据块,然后分批次广播矩阵B,使得基本单元能够分批次的得到指令结果,由于该内积拆分成16个基本单元来计算,所以能够极大的降低计算的时间,所以其具有计算时间短,能耗低的优点。
[0095] 参阅图1a,图1a为本披露提供的一种芯片装置,所述芯片装置包括:主单元以及基本单元,所述主单元为硬件芯片单元,所述基本单元也为硬件芯片单元;
[0096] 所述主单元,用于执行神经网络运算中的各个连续的运算以及与所述基本单元传输数据;
[0097] 所述基本单元,用于依据所述主单元传输的数据执行神经网络中并行加速的运算,并将运算结果传输给所述主单元。
[0098] 上述并行加速的运算包括但不限于:数据块与数据块之间的乘法运算、卷积运算等等大规模并且可以并行的运算。
[0099] 上述各个连续的运算包括但不限于:累加运算、矩阵转置运算、数据排序运算等等连续的运算。
[0100] 主单元以及多个基本单元,所述主单元,用于获取待计算的数据块以及运算指令,依据该运算指令对所述待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至所述多个基本单元,将所述广播数据块广播至所述多个基本单元;所述基本单元,用于对所述基本数据块与所述广播数据块执行内积运算得到运算结果,将所述运算结果发送至所述主单元;所述主单元,用于对所述运算结果处理得到所述待计算的数据块以及运算指令的指令结果。
[0101] 可选的,所述芯片装置还包括:分支单元,所述分支单元设置在主单元与基本单元之间;所述分支单元,用于转发数据。
[0102] 可选的,所述主单元,具体用于将所述广播数据块通过一次广播至所述多个基本单元。
[0103] 可选的,所述基本单元,具体用于将所述基本数据块与所述广播数据块执行内积处理得到内积处理结果,将所述内积处理结果累加得到运算结果,将所述运算结果发送至所述主单元。
[0104] 可选的,所述主单元,用于在如所述运算结果为内积处理的结果时,对所述运算结果累加后得到累加结果,将该累加结果排列得到所述待计算的数据块以及运算指令的指令结果。
[0105] 可选的,所述主单元,具体用于将所述广播数据块分成多个部分广播数据块,将所述多个部分广播数据块通过多次广播至所述多个基本单元。
[0106] 可选的,所述基本单元,具体用于将所述部分广播数据块与所述基本数据块执行一次内积处理后得到内积处理结果,将所述内积处理结果累加得到部分运算结果,将所述部分运算结果发送至所述主单元。
[0107] 可选的,所述基本单元,具体用于复用n次该部分广播数据块执行该部分广播数据块与该n个基本数据块内积运算得到n个部分处理结果,将n个部分处理结果分别累加后得到n个部分运算结果,将所述n个部分运算结果发送至主单元,所述n为大于等于2的整数。
[0108] 本披露具体实施方式还提供一种如图1a所示的芯片装置的应用方法,该应用方法具体可以用于执行矩阵乘矩阵运算、矩阵乘向量运算、卷积运算或全连接运算中的一种或任意组合。
[0109] 具体地,所述主单元还可以执行pooling(池化)运算,规则化(归一化)运算,如batch normalization,lrn等神经网络运算步骤。
[0110] 本申请具体实施方式还提供一种芯片,该芯片包括如图1a或如1b所示的芯片装置。
[0111] 本申请具体实施方式还提供一种智能设备,该智能设备包括上述芯片,该芯片集成有如图1a或如图1b所示的芯片装置。该智能设备包括但不限于:智能手机、平板电脑、个人数字助理、智能手表、智能摄像头、智能电视、智能冰箱等等智能设备,上述设备仅仅为了举例说明,本申请具体实施方式并不局限上述设备的具体表现形式。
[0112] 上述矩阵乘矩阵运算可以参见如图3所示实施例的描述。这里不再赘述。
[0113] 使用芯片装置进行全连接运算;
[0114] 如果全连接层的输入数据是一个长度为L的向量(如“图3a所示全连接1-单样本”中向量B)(即神经网络的输入是单个样本的情况),全连接层的输出是一个长度为M的向量,全连接层的权值是一个M*L的矩阵(如“图3b全连接1-单样本”中矩阵A),则以全连接层的权值矩阵作为矩阵A(即拆分数据块),输入数据作为向量B(即广播数据块),按照上述如图2所示的方法一执行运算。具体的运算方法可以为:
[0115] 如果全连接层的输入数据是一个矩阵(即神经网络的输入是多个样本作为batch一起进行运算的情况)(全连接层的输入数据表示N个输入样本,每个样本是一个长度为L的向量,则输入数据用一个L*N的矩阵表示,如“图3b全连接1-多样本”中矩阵B表示),全连接层对每一个样本的输出是一个长度为M的向量,则全连接层的输出数据是一个M*N的矩阵,如“图3a全连接1-多样本”中的结果矩阵,全连接层的权值是一个M*L的矩阵(如“图3a全连接1-多样本”中矩阵A),则以全连接层的权值矩阵作为矩阵A(即拆分数据块),输入数据矩阵作为矩阵B(即广播数据块),或者以全连接层的权值矩阵作为矩阵B(即广播数据块),输入向量作为矩阵A(即拆分数据块),按照上述如图2所示的方法一执行运算。
[0116] 芯片装置
[0117] 使用所述芯片装置进行人工神经网络运算时候,神经网络中的卷积层,池化层,规则化层(也叫归一化层,如BN(Batch normalization)或者LRN(Local Response Normalization))等的输入数据如“图3d卷积2-输入数据”(为了表示清楚,这里对表示每个样本的三维数据块使用C=5,H=10,W=12作为示例进行说明,实际使用中N,C,H,W的大小不局限在图3d中所示的数值)所示,图3d中的每一个三维数据块表示一个样本对应与这一层的输入数据,每个三维数据块的三个维度分别是C、H和W,共有N个这样的三维数据块。
[0118] 在进行上述这些神经网络层的计算时,主单元接收到输入数据后,对每一个输入数据的样本,使用主单元的数据重排电路,将输入数据按照一定的顺序摆放,该顺序可以是任意的顺序;
[0119] 可选的,该顺序将按上述示意图代表的C维度坐标变化最快的方式摆放输入数据,例如NHWC和NWHC等。其中,C表示数据块最内层的维度,该N表示数据块最外层的维度,H和W是中间层的维度。这样的效果是C的数据是挨在一起的,由此易于提高运算的并行度,更易于多个特征图(Feature map)进行并行运算。
[0120] 以下解释对于不同的神经网络运算,C、H和W如何理解。对于卷积和池化来说,H和W是进行卷积和池化运算时的相关运算窗口滑动维度(运算窗口在W维度上滑动的示例图如图3e卷积3-滑动a”和“图3f卷积3-滑动b”这两个图表示,运算窗口在H维度上滑动的示意图如图3g所示,其中运算窗口的大小与M个卷积核中的一个卷积核中的大小一致,如图3c所示的M个卷积核,每个卷积核为5*3*3的三维数据块,那么其运算窗口也为5*3*3的三维数据块,对于如图3c所示的M个卷积核中的KH以及KW表示其KH对应的维度为输入数据的H维度,该KW表示的对应的维度为输入数据的W维度。图3e、3f、3g中灰色部分方块是每一次滑动运算窗口进行运算使用的数据,其滑动的方向可以是以H为滑动方向以后在以W为滑动方向或以W为滑动方向完成以后在以H为滑动方向。具体地,对于卷积来说是,每一个滑动窗口处的运算是图中灰色部分方块表示的数据块与“图3c卷积1-卷积核”表示的M个卷积核数据块分别进行内积运算,卷积将对每一个滑动窗口位置对应每一个卷积核输出一个数值,即对于每个滑动窗口具有M个输出数值;对于池化来说,每一个滑动窗口处的运算是图中灰色方块表示的数据块在H和W维度(在图中的例子里是该灰色数据块中处于同一个平面上的9个数中)进行选取最大值,或者计算平均值等运算,池化将对每一个滑动窗口位置输出C个数值。C是单个样本的三维数据块中,除了H和W之外另一个维度,N代表一共有N个样本同时进行这一层的运算。对于规则化算法中的LRN来说,C维度的定义是:每一次基本的LRN运算沿着C维度选取一个连续的数据块(即Y*1*1的数据块),其中Y*1*1的数据块中的Y为C维度上的取值,Y的取值小于等于C维度的最大值,第一个1表示H维度,第二个1表示W维度;剩下的两个维度定义成H和W维度,即,对每一个样本的三维数据块中,每一次进行LRN规则化的运算时,要对相同的W坐标和相同的H坐标中不同C坐标中连续的一部分数据进行。对于规则化算法BN来说,将N个样本的三维数据块中所有的具有相同的C维度上的坐标的数值求平均值和方差(或者标准差)。
[0121] 所述“图3c-图3g”中均使用一个方块表示一个数值,也可以称为一个权值;示意图中所使用的数字均仅限举例说明,实际情况中维度数据可能是任意数值(包括某个维度为1的情况,这种情况下,所述四维数据块自动成为三维数据块,例如,当同时计算的样本数量为1的情况下,输入数据就是一个三维数据块;在例如,当卷积核数量为1的情况下,卷积和数据为一个三维数据块)。使用所述芯片装置进行输入数据B和卷积核A之间的卷积运算;
[0122] 对于一个卷积层,其权值(所有的卷积核)如“图3c卷积1-卷积核”所示,记其卷积核的数量为M,每个卷积核由C个KH行KW列的矩阵组成,所以卷积层的权值可以表示为一个四个维度分别是M,C,KH,KW的四维数据块;卷积层的输入数据为四维数据块,由N个三维数据块组成,每个所述三维数据块由C个H行W列的特征矩阵组成(即四个维度分别是N,C,H,W的数据块);如“图3d卷积2-输入数据”所示。将M个卷积核中的每一个卷积核的权值从主单元分发到K个基础单元中的某一个上,保存在基础单元的片上缓存和/或寄存器中(此时的M个卷积核为分发数据块,每个卷积核可以是一个基本数据块,当然在实际应用中,也可以将该基本数据块变更成更小的温度,例如一个卷积核的一个平面的矩阵);具体的分发方法可以为:如果卷积核的个数M<=K则,给M个基础单元分别分发一个卷积核的权值;如果卷积核的个数M>K,则给每个基础单元分别分发一个或多个卷积核的权值。(分发到第i个基础单元的卷积核权值集合为Ai,共有Mi个卷积核。)在每个基础单元中,例如第i个基础单元中:将收到的由主单元分发的卷积核权值Ai保存在其寄存器和/或片上缓存中;将输入数据中各部分(即如图3e、图3f或如3g所示的滑动窗口)以广播的方式传输给各个基础单元(上述广播的方式可以采用上述方式甲或方式乙),在广播时,可以通过多次广播的方式将运算窗口的权值广播至所有的基本单元,具体的,可以每次广播部分运算窗口的权值,例如每次广播一个平面的矩阵,以图3e为例,每次可以广播一个C平面的KH*KW矩阵,当然在实际应用中,还可以一次广播一个C平面的KH*HW矩阵中的前n行或前n列的数据,本披露并不限制上述部分数据的发送方式以及部分数据的排列方式;将输入数据的摆放方式变换为任意维度顺序的摆放方式,然后按顺序依次广播各部分输入数据给基础单元。可选的,上述分发数据即卷积核的发送方式也可以采用与输入数据的运算窗口类似的方法送方式,这里不再赘述。可选的,将输入数据的摆放方式变换为C为最内层的循环。这样的效果是C的数据是挨在一起的,由此提高卷积运算的并行度,更易于多个特征图(Feature map)进行并行运算。可选的,将输入数据的摆放方式变换为维度顺序是NHWC或者NWHC的摆放方式每个基础单元,例如第i个基础单元,计算权值Ai中的卷积核和接收到的广播的数据对应部分(即运算窗口)的内积;权值Ai中对应部分的数据可以直接从片上缓存中读出来使用,也可以先读到寄存器中以便进行复用。每个基础单元内积运算的结果进行累加并传输回主单元。可以将每次基础单元执行内积运算得到的部分和传输回主单元进行累加;可以将每次基础单元执行的内积运算得到的部分和保存在基础单元的寄存器和/或片上缓存中,累加结束之后传输回主单元;也可以将每次基础单元执行的内积运算得到的部分和在部分情况下保存在基础单元的寄存器和/或片上缓存中进行累加,部分情况下传输到主单元进行累加,累加结束之后传输回主单元。
[0123] 采用芯片装置实现BLAS(英文:Basic Linear Algebra Subprograms,基础线性代数子程序)函数的方法
[0124] GEMM,GEMM计算是指:BLAS库中的矩阵-矩阵乘法的运算。该运算的通常表示形式为:C=alpha*op(A)*op(B)+beta*C,其中,A和B为输入的两个矩阵,C为输出矩阵,alpha和beta为标量,op代表对矩阵A或B的某种操作,此外,还会有一些辅助的整数作为参数来说明矩阵的A和B的宽高;
[0125] 使用所述装置实现GEMM计算的步骤为:
[0126] 对输入矩阵A和矩阵B进行各自相应的op操作;该op操作可以为矩阵的转置操作,当然还可以是其他的操作,例如,非线性函数运算,池化等。利用主单元的向量运算功能,实现矩阵op操作;如某个矩阵的op可以为空,则主单元对该矩阵不执行任何操作;
[0127] 采用如图2所示的方法完成op(A)与op(B)之间的矩阵乘法计算;
[0128] 利用主单元的向量运算功能,对op(A)*op(B)的结果中的每一个值进行乘以alpha的操作;
[0129] 利用主单元的向量运算功能,实现矩阵alpha*op(A)*op(B)和beta*C之间对应位置相加的步骤;
[0130] GEMV
[0131] GEMV计算是指:BLAS库中的矩阵-向量乘法的运算。该运算的通常表示形式为:C=alpha*op(A)*B+beta*C,其中,A为输入矩阵,B为输入的向量,C为输出向量,alpha和beta为标量,op代表对矩阵A的某种操作;
[0132] 使用所述装置实现GEMV计算的步骤为:
[0133] 对输入矩阵A进行相应的op操作;芯片装置的使用如图2所示的方法完成矩阵op(A)与向量B之间的矩阵-向量乘法计算;利用主单元的向量运算功能,对op(A)*B的结果中的每一个值进行乘以alpha的操作;利用主单元的向量运算功能,实现矩阵alpha*op(A)*B和beta*C之间对应位置相加的步骤。
[0134] 采用芯片装置实现激活函数的方法
[0135] 激活函数通常是指对一个数据块(可以是向量或者多维矩阵)中的每个数执行非线性运算。比如,激活函数可以是:y=max(m,x),其中x是输入数值,y是输出数值,m是一个常数;激活函数还可以是:y=tanh(x),其中x是输入数值,y是输出数值;激活函数也可以是:y=sigmoid(x),其中x是输入数值,y是输出数值;激活函数也可以是一个分段线性函数;激活函数可以是任意输入一个数,输出一个数的函数。
[0136] 实现激活函数时,芯片装置利用主单元的向量计算功能,输入一向量,计算出该向量的激活向量;主单元将输入向量中的每一个值通过一个激活函数(激活函数的输入时一个数值,输出也是一个数值),计算出一个数值输出到输出向量的对应位置;
[0137] 上述输入向量的来源包括但不限于:芯片装置的外部数据、芯片装置的分支单元转发的基本单元的计算结果数据。
[0138] 上述计算结果数据具体可以为进行矩阵乘向量的运算结果;上述计算结果数据具体还可以进行矩阵乘矩阵的运算结果;上述输入数据可以为主单元实现加偏置之后的计算结果。
[0139] 采用芯片装置实现加偏置操作
[0140] 利用主单元可以实现两个向量或者两个矩阵相加的功能;利用主单元可以实现把一个向量加到一个矩阵的每一行上,或者每一个列上的功能。
[0141] 可选的,上述矩阵可以来自所述设备执行矩阵乘矩阵运算的结果;所述矩阵可以来自所述装置执行矩阵乘向量运算的结果;所述矩阵可以来自所述装置的主单元从外部接受的数据。所述向量可以来自所述装置的主单元从外部接受的数据。
[0142] 上述输入数据以及计算结果数据仅仅是举例说明,在实际应用中,还可以是其他类型或来源的数据,本披露具体实施方式对上述数据的来源方式以及表达方式并不限定。
[0143] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
[0144] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0145] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
[0146] 另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元/模块都是以硬件的形式实现。比如该硬件可以是电路,包括数字电路,模拟电路等等。硬件结构的物理实现包括但不局限于物理器件,物理器件包括但不局限于晶体管,忆阻器等等。所述计算装置中的计算模块可以是任何适当的硬件处理器,比如CPU、GPU、FPGA、DSP和ASIC等等。所述存储单元可以是任何适当的磁存储介质或者磁光存储介质,比如RRAM,DRAM,SRAM,EDRAM,HBM,HMC等等。
[0147] 所述作为说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0148] 以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。