神经网络训练装置及相关产品转让专利

申请号 : CN201711498720.5

文献号 : CN109993301B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 不公告发明人

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

摘要 :

本披露提供一种神经网络训练装置及相关产品,所述训练装置包括:X个神经网络芯片,所述X个神经网络芯片之间连接,所述X的取值范围为大于或等于2的整数;所述X个神经网络芯片中的Y个神经网络芯片用于接收神经网络训练数据执行训练运算得到Y个权值梯度,所述Y≤X;所述X个神经网络芯片中的Z个神经网络芯片用于接收所述Y个神经网络芯片发送的权值梯度,并根据预先策略将所述Y个权值梯度整合成所述训练的最终权值梯度,所述Z≤X。本披露提供的技术方案具有训练速度快,耗时短的优点。

权利要求 :

1.一种神经网络训练装置,其特征在于,所述训练装置包括:X个神经网络芯片,所述X个神经网络芯片之间连接,所述X的取值范围为大于或等于2的整数;所述X个神经网络芯片中的Y个神经网络芯片用于接收神经网络训练数据执行训练运算得到Y个权值梯度,所述Y≤X;所述X个神经网络芯片中的Z个神经网络芯片用于接收所述Y个神经网络芯片发送的权值梯度,并根据预先策略将所述Y个权值梯度整合成所述训练的最终权值梯度,所述Z≤X;

若所述X个神经网络芯片以星型拓扑结构相连,且Y=X-1,Z=1,其中,所述Y个神经网络芯片为(X-1)个从神经网络芯片,所述(X-1)个从神经网络芯片用于接收神经网络训练数据执行训练运算得到(X-1)个权值梯度;所述Z个神经网络芯片为主神经网络芯片,所述主神经网络芯片用于接收所述(X-1)个神经网络芯片发送的权值梯度,并根据预先策略将所述(X-1)个权值梯度整合成所述训练的最终权值梯度;

其中,所述主神经网络芯片用于根据预先策略将所述(X-1)个权值梯度整合成所述训练的最终权值梯度,具体包括:所述主神经网络芯片用于将所述(X-1)个权值梯度中对应位置的非零值整合至所述训练的最终权值梯度;

或,将所述(X-1)个权值梯度中对应位置的零值整合至所述训练的最终权值梯度;

或,将所述(X-1)个权值梯度中预先设定的多个指定位置的非零值整合至所述训练的最终权值梯度;

若所述X个神经网络芯片以环型拓扑结构相连,且Y=Z=X,其中,所述X个神经网络芯片用于接收神经网络训练数据执行训练运算得到X个权值梯度,并将各自的权值梯度按照预设规则发送至相邻的神经网络芯片;所述X个神经网络芯片用于根据预先策略将所述X个权值梯度整合成所述训练的最终权值梯度;

其中,所述X个神经网络芯片用于根据预先策略将所述X个权值梯度整合成所述训练的最终权值梯度,具体包括:所述X个神经网络芯片用于将所述X个权值梯度中对应位置的非零值整合至所述训练的最终权值梯度;

或,将所述X个权值梯度中对应位置的零值整合至所述训练的最终权值梯度;

或,将所述X个权值梯度中预先设定的多个指定位置的非零值整合至所述训练的最终权值梯度。

2.根据权利要求1所述的装置,其特征在于,

所述神经网络芯片包括主处理电路以及多个基础处理电路;所述主处理电路或多个基础处理电路中至少一个电路包括:数据类型运算电路;所述数据类型运算电路,用于执行第一类型数据与第二类型数据之间的转换;

其中,所述多个基础处理电路呈阵列分布;每个基础处理电路与相邻的其他基础处理电路连接,所述主处理电路连接第1行的n个基础处理电路、第m行的n个基础处理电路以及第1列的m个基础处理电路;

所述主处理电路,用于执行神经网络运算中的各个连续的运算以及和与其相连的所述基础处理电路传输数据;

所述多个基础处理电路,用于依据传输的数据以并行方式执行神经网络中的运算,并将运算结果通过与所述主处理电路连接的基础处理电路传输给所述主处理电路。

3.根据权利要求2所述的装置,其特征在于,

所述数据类型转换电路,具体用于将连续数据转化为离散数据,并将该离散数据进行K比特量化,所述K为大于1的整数;

其中,所述数据类型转换电路包括预处理电路、随机数生成电路和判断电路,所述预处理电路用于对连续数据进行预处理得到预处理数据;所述随机数生成电路用于生成(0,1)之间的随机数;所述判断电路用于比较该预处理数据和随机数得到离散数据,并将所述离散数据量化为K比特数据。

4.根据权利要求2所述的装置,其特征在于,

所述主处理电路,用于获取待计算的数据块以及运算指令,依据该运算指令对所述第二类型的待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至与其连接的基础处理电路,将所述广播数据块广播至与其连接的基础处理电路;

所述基础处理电路,用于对所述基本数据块与所述广播数据块以第二数据类型执行内积运算得到结果,将所述运算结果发送至所述主处理电路;

或将所述基本数据块与所述广播数据块转发给其他基础处理电路以第二数据类型执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路。

5.根据权利要求4所述的装置,其特征在于,

所述基础处理电路,具体用于将所述基本数据块与所述广播数据块以第二数据类型执行内积处理得到内积处理结果,将所述内积处理结果累加得到运算结果,将所述运算结果发送至所述主处理电路。

6.根据权利要求4所述的装置,其特征在于,

所述主处理电路,用于在如所述运算结果为内积处理的结果时,对所述运算结果累加后得到累加结果,将该累加结果排列得到所述待计算的数据块以及运算指令的指令结果。

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

所述主处理电路,具体用于将所述广播数据块分成多个部分广播数据块,将所述多个部分广播数据块通过多次广播至所述基础处理电路;所述多个部分广播数据块组合形成所述广播数据块。

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

所述基础处理电路,具体用于复用α次该部分广播数据块执行该部分广播数据块与该α个基本数据块内积运算得到α个部分处理结果,将α个部分处理结果分别累加后得到α个部分运算结果,将所述α个部分运算结果发送至主处理电路,所述α为大于等于2的整数。

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

所述神经网络芯片包括主处理电路、分支处理电路以及多个基础处理电路,所述主处理电路或多个基础处理电路中至少一个基础处理电路包括:数据类型运算电路;所述数据类型运算电路,用于执行第一类型数据与第二类型数据之间的转换;

所述主处理电路,用于执行神经网络运算中的各个连续的运算以及与所述基础处理电路传输数据;

所述多个基础处理电路,用于依据所述主处理电路传输的数据以并行方式执行神经网络中的运算,并将运算结果传输给所述主处理电路。

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

所述数据类型转换电路,具体用于将连续数据转化为离散数据,并将该离散数据进行K比特量化,所述K为大于1的整数;

其中,所述数据类型转换电路包括预处理电路、随机数生成电路和判断电路,所述预处理电路用于对连续数据进行预处理得到预处理数据;所述随机数生成电路用于生成(0,1)之间的随机数;所述判断电路用于比较该预处理数据和随机数得到离散数据,并将所述离散数据量化为K比特数据。

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

所述主处理电路,用于获取待计算的数据块以及运算指令,依据该运算指令对第二类型的待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至所述至少一个基础处理电路,将所述广播数据块广播至所述至少一个基础处理电路;

所述基础处理电路,用于对所述基本数据块与所述广播数据块以第二类型执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路;

所述主处理电路,用于对所述运算结果处理得到所述待计算的数据块以及运算指令的指令结果。

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

所述基础处理电路,具体用于将所述基本数据块与所述广播数据块以第二数据类型执行内积处理得到内积处理结果,将所述内积处理结果累加得到运算结果,将所述运算结果发送至所述主处理电路。

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

所述主处理电路,用于在如所述运算结果为内积处理的结果时,对所述运算结果累加后得到累加结果,将该累加结果排列得到所述待计算的数据块以及运算指令的指令结果。

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

所述主处理电路,具体用于将所述广播数据块分成多个部分广播数据块,将所述多个部分广播数据块通过多次广播至所述多个基础处理电路。

15.根据权利要求14所述的装置,其特征在于,

所述基础处理电路,具体用于复用β次该部分广播数据块执行该部分广播数据块与该β个基本数据块内积运算得到β个部分处理结果,将β个部分处理结果分别累加后得到β个部分运算结果,将所述β个部分运算结果发送至主处理电路,所述β为大于等于2的整数。

16.一种神经网络运算装置,其特征在于,所述神经网络运算装置包括一个或多个如权利要求1-15任意一项所述的装置。

17.一种神经网络训练方法,其特征在于,所述训练方法应用如权利要求1~15中任一项所述的装置执行正向运算、方向运算和权值更新。

18.一种芯片,其特征在于,所述芯片集成如权利要求1-15任意一项所述装置。

19.一种智能设备,其特征在于,所述智能设备包括如权利要求18所述的芯片。

说明书 :

神经网络训练装置及相关产品

技术领域

[0001] 本披露涉及神经网络领域,尤其涉及一种神经网络训练装置及相关产品。

背景技术

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

发明内容

[0004] 本披露实施例提供了一种神经网络训练装置及相关产品,可提升训练装置的训练速度,提高效率。
[0005] 第一方面,提供一种神经网络训练装置,所述训练装置包括:X个神经网络芯片,所述X个神经网络芯片包括:主神经网络芯片和(X-1)个从神经网络芯片,所述主神经网络芯片与(X-1) 个从神经网络芯片连接;所述X的取值范围为大于或等于3的整数;
[0006] 所述主神经网络芯片,用于接收并分发神经网络训练数据;
[0007] 所述从神经网络芯片,用于将接收到的训练数据执行神经网络训练得到权值梯度,并将权值梯度发送给所述主神经网络芯片;
[0008] 所述主神经网络芯片,用于接收(X-1)个从神经网络芯片发送的(X-1)个权值梯度,根据预先策略将所述(X-1)个权值梯度整合成所述训练的最终权值梯度。
[0009] 第二方面,提供一种神经网络运算装置,所述神经网络运算装置包括一个或多个第一方面提供的装置。
[0010] 第三方面,提供一种组合处理装置,所述组合处理装置包括:第二方面提供的神经网络运算装置、通用互联接口和通用处理装置;
[0011] 所述神经网络运算装置通过所述通用互联接口与所述通用处理装置连接。
[0012] 第四方面,提供一种芯片,所述芯片集成第一方面的装置、第二方面的装置或第三方面的装置。
[0013] 第五方面,提供一种电子设备,所述电子设备包括第四方面的芯片。
[0014] 第六方面,提供一种神经网络的运算方法,所述方法应用在第一方面训练装置内,所述训练装置用于执行神经网络的运算。
[0015] 可以看出,通过本披露实施例,多个从芯片接收主芯片下发的训练数据,并行的进行神经网络训练得到各自的权值梯度,主芯片整合从设备发送的权值梯度,得到最终的权值梯度,提高了训练速度和精度,节省了训练时间。

附图说明

[0016] 图1a是一种神经网络训练装置示意图。
[0017] 图1b是另一种神经网络训练装置示意图。
[0018] 图1c是一种集成电路芯片装置结构示意图。
[0019] 图1d是另一种集成电路芯片装置结构示意图。
[0020] 图1e是一种基础处理电路的结构示意图。
[0021] 图1f是一种主处理电路的结构示意图。
[0022] 图1g是一种数据转换运算电路结构示意图。
[0023] 图2a是一种基础处理电路的使用方法示意图。
[0024] 图2b是一种主处理电路传输数据示意图。
[0025] 图2c是矩阵乘以向量的示意图。
[0026] 图2d是一种集成电路芯片装置结构示意图。
[0027] 图2e是又一种集成电路芯片装置结构示意图。
[0028] 图3a一种集成电路芯片装置结构示意图。
[0029] 图3b是另一种集成电路芯片装置结构示意图。
[0030] 图4a为本披露还揭露了一个组合处理装置结构示意图。
[0031] 图4b为本披露还揭露了一个组合处理装置另一种结构示意图。
[0032] 图5为本披露揭露的一种神经网络训练方法流程示意图。

具体实施方式

[0033] 为了使本技术领域的人员更好地理解本披露方案,下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
[0034] 在第一方面提供的装置中,所述神经网络芯片包括主处理电路以及多个基础处理电路;所述主处理电路或多个基础处理电路中至少一个电路包括:数据类型运算电路;所述数据类型运算电路,用于执行第一类型数据与第二类型数据之间的转换,其中,第一类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据,K为大于1的正整数,同理,第二类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据;
[0035] 其中,所述多个基础处理电路呈阵列分布;每个基础处理电路与相邻的其他基础处理电路连接,所述主处理电路连接第1行的n个基础处理电路、第m行的n个基础处理电路以及第1列的 m个基础处理电路;
[0036] 所述主处理电路,用于执行神经网络运算中的各个连续的运算以及和与其相连的所述基础处理电路传输数据;
[0037] 所述多个基础处理电路,用于依据传输的数据以并行方式执行神经网络中的运算,并将运算结果通过与所述主处理电路连接的基础处理电路传输给所述主处理电路。
[0038] 在第一方面提供的装置中,所述主处理电路,用于获取待计算的数据块以及运算指令,依据该运算指令对所述第二类型的待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至与其连接的基础处理电路,将所述广播数据块广播至与其连接的基础处理电路;
[0039] 所述基础处理电路,用于对所述基本数据块与所述广播数据块以第二数据类型执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路;
[0040] 或将所述基本数据块与所述广播数据块转发给其他基础处理电路以第二数据类型执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路。
[0041] 在第一方面提供的装置中,所述主处理电路,具体用于将所述广播数据块通过一次广播发送至与其连接的所述基础处理电路。
[0042] 在第一方面提供的装置中,所述基础处理电路,具体用于将所述基本数据块与所述广播数据块以第二数据类型执行内积处理得到内积处理结果,将所述内积处理结果累加得到运算结果,将所述运算结果发送至所述主处理电路。
[0043] 在第一方面提供的装置中,所述主处理电路,用于在如所述运算结果为内积处理的结果时,对所述运算结果累加后得到累加结果,将该累加结果排列得到所述待计算的数据块以及运算指令的指令结果。
[0044] 在第一方面提供的装置中,所述主处理电路,具体用于将所述广播数据块分成多个部分广播数据块,将所述多个部分广播数据块通过多次广播至所述基础处理电路;所述多个部分广播数据块组合形成所述广播数据块。
[0045] 在第一方面提供的装置中,所述基础处理电路,具体用于将所述部分广播数据块与所述基本数据块以第二数据类型执行一次内积处理后得到内积处理结果,将所述内积处理结果累加得到部分运算结果,将所述部分运算结果发送至所述主处理电路。
[0046] 在第一方面提供的装置中,所述基础处理电路,具体用于复用α次该部分广播数据块执行该部分广播数据块与该α个基本数据块内积运算得到α个部分处理结果,将α个部分处理结果分别累加后得到α个部分运算结果,将所述α个部分运算结果发送至主处理电路,所述α为大于等于 2的整数。
[0047] 在第一方面提供的装置中,所述主处理电路包括:主寄存器或主片上缓存电路;
[0048] 所述基础处理电路包括:基本寄存器或基本片上缓存电路。
[0049] 在第一方面提供的装置中,所述主处理电路包括:向量运算器电路、算数逻辑单元电路、累加器电路、矩阵转置电路、直接内存存取电路、数据类型运算电路或数据重排电路中的一种或任意组合。
[0050] 在第一方面提供的装置中,所述主处理电路,用于获取待计算的数据块以及运算指令,依据该运算指令对所述待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至所述至少一个基础处理电路,将所述广播数据块广播至所述至少一个基础处理电路;
[0051] 所述基础处理电路,用于对所述基本数据块与所述广播数据块转换成第二类型的数据块,依据第二类型的数据块执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路;
[0052] 所述主处理电路,用于对所述运算结果处理得到所述待计算的数据块以及运算指令的指令结果。
[0053] 在第一方面提供的装置中,所述分支处理电路包含多个分支处理电路,所述主处理电路与所述多个分支处理电路分别连接,每个分支处理电路与至少一个基础处理电路连接。
[0054] 在第一方面提供的装置中,所述数据为:向量、矩阵、三维数据块、四维数据块以及n维数据块中一种或任意组合。
[0055] 在第一方面提供的装置中,如所述运算指令为乘法指令,所述主处理电路确定乘数数据块为广播数据块,被乘数数据块为分发数据块;
[0056] 如所述运算指令为卷积指令,所述主处理电路确定输入数据块为广播数据块,卷积核为分发数据块。
[0057] 在第一方面提供的装置中,所述神经网络芯片还包括:处理电路、分支处理电路以及多个基础处理电路,所述主处理电路或多个基础处理电路中至少一个基础处理电路包括:数据类型运算电路,所述数据类型运算电路,用于执行第一类型数据与第二类型数据之间的转换,其中,第一类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据,K 为大于1的正整数,同理,第二类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据;
[0058] 所述主处理电路,用于执行神经网络运算中的各个连续的运算以及与所述基础处理电路传输数据;
[0059] 所述多个基础处理电路,用于依据所述主处理电路传输的数据以并行方式执行神经网络中的运算,并将运算结果传输给所述主处理电路。
[0060] 在第一方面提供的装置中,所述神经网络芯片还包括:分支处理电路,所述分支处理电路设置在主处理电路与至少一个基础处理电路之间;
[0061] 所述分支处理电路,用于在主处理电路与至少一个基础处理电路之间转发数据。
[0062] 在第一方面提供的装置中,所述主处理电路,用于获取待计算的数据块以及运算指令,通过所述数据类型运算电路将待计算的数据块转换成定点类型的数据块,依据该运算指令对定点类型的待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至所述至少一个基础处理电路,将所述广播数据块广播至所述至少一个基础处理电路;
[0063] 所述基础处理电路,用于对所述基本数据块与所述广播数据块以定点类型执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路;
[0064] 所述主处理电路,用于对所述运算结果处理得到所述待计算的数据块以及运算指令的指令结果。
[0065] 在第一方面提供的装置中,所述主处理电路,具体用于将所述广播数据块通过一次广播至所述多个基础处理电路。
[0066] 在第一方面提供的装置中,所述基础处理电路,具体用于将所述基本数据块与所述广播数据块以定点数据类型执行内积处理得到内积处理结果,将所述内积处理结果累加得到运算结果,将所述运算结果发送至所述主处理电路。
[0067] 在第一方面提供的装置中,所述主处理电路,用于在如所述运算结果为内积处理的结果时,对所述运算结果累加后得到累加结果,将该累加结果排列得到所述待计算的数据块以及运算指令的指令结果。
[0068] 在第一方面提供的装置中,所述主处理电路,具体用于将所述广播数据块分成多个部分广播数据块,将所述多个部分广播数据块通过多次广播至所述多个基础处理电路。
[0069] 在第一方面提供的装置中,所述基础处理电路,具体用于将所述部分广播数据块与所述基本数据块以第二数据类型执行一次内积处理后得到内积处理结果,将所述内积处理结果累加得到部分运算结果,将所述部分运算结果发送至所述主处理电路。
[0070] 在第一方面提供的装置中,所述基础处理电路,具体用于复用β次该部分广播数据块执行该部分广播数据块与该β个基本数据块内积运算得到β个部分处理结果,将β个部分处理结果分别累加后得到β个部分运算结果,将所述β个部分运算结果发送至主处理电路,所述β为大于等于 2的整数。
[0071] 在第一方面提供的装置中,所述主处理电路包括:主寄存器或主片上缓存电路;
[0072] 所述基础处理电路包括:基本寄存器或基本片上缓存电路。
[0073] 在第一方面提供的装置中,所述主处理电路包括:向量运算器电路、算数逻辑单元电路、累加器电路、矩阵转置电路、直接内存存取电路、数据类型运算电路或数据重排电路中的一种或任意组合。
[0074] 在第一方面提供的装置中,所述主处理电路,用于获取待计算的数据块以及运算指令,依据该运算指令对所述待计算的数据块划分成分发数据块以及广播数据块;对所述分发数据块进行拆分处理得到多个基本数据块,将所述多个基本数据块分发至所述至少一个基础处理电路,将所述广播数据块广播至所述至少一个基础处理电路;
[0075] 所述基础处理电路,用于对所述基本数据块与所述广播数据块转换成第二类型的数据块,依据第二类型的数据块执行内积运算得到运算结果,将所述运算结果发送至所述主处理电路;
[0076] 所述主处理电路,用于对所述运算结果处理得到所述待计算的数据块以及运算指令的指令结果。
[0077] 在第一方面提供的装置中,所述分支处理电路包含多个分支处理电路,所述主处理电路与所述多个分支处理电路分别连接,每个分支处理电路与至少一个基础处理电路连接。
[0078] 在第一方面提供的装置中,所述数据为:向量、矩阵、三维数据块、四维数据块以及n维数据块中一种或任意组合。
[0079] 在第一方面提供的装置中,如所述运算指令为乘法指令,所述主处理电路确定乘数数据块为广播数据块,被乘数数据块为分发数据块;
[0080] 如所述运算指令为卷积指令,所述主处理电路确定输入数据块为广播数据块,卷积核为分发数据块。
[0081] 在第六方面提供的方法中,所述神经网络的运算包括:卷积运算、矩阵乘矩阵运算、矩阵乘向量运算、偏执运算、全连接运算、GEMM运算、GEMV运算、激活运算中的一种或任意组合。
[0082] 参阅图1a,图1a为一种神经网络训练装置示意图,如图1a所示,该训练装置包括:
[0083] X个神经网络芯片,所述X个神经网络芯片之间连接,所述X的取值范围为大于或等于2的整数;所述X个神经网络芯片中的Y个神经网络芯片用于接收神经网络训练数据执行训练运算得到Y个权值梯度,所述Y≤X;所述X个神经网络芯片中的Z个神经网络芯片用于接收所述Y个神经网络芯片发送的权值梯度,并根据预先策略将所述Y个权值梯度整合成所述训练的最终权值梯度,所述Z≤X。
[0084] 一种可选的实施例,如图1a所示,,所述X个神经网络芯片以星型拓扑结构相连,所述Y=X-1,所述Z=1,其中,所述Z个神经网络芯片作为主神经网络芯片,用于接收(X-1)个从神经网络芯片发送的(X-1)个权值梯度,根据预先策略将所述(X-1)个权值梯度整合成所述训练的最终权值梯度;所述Y个神经网络作为从神经网络芯片,用于将接收到的训练数据执行神经网络训练得到权值梯度,并将权值梯度发送给所述Z个主神经网络芯片;所述X的取值范围为大于或等于3 的整数,中,X个神经网络芯片具有相同的神经网络模型,该X个神经网络芯片具有相同的运算功能;
[0085] 可选的,该神经网络芯片包括主处理电路以及多个基础处理电路;所述主处理电路或多个基础处理电路中至少一个电路包括:数据类型运算电路;所述数据类型运算电路,用于执行第一类型数据与第二类型数据之间的转换,其中,第一类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据,K为大于1的正整数,同理,第二类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据。当然,本发明并不限制上述数据类型转换运算电路的具体形式。
[0086] 可选的,以将输入的连续数据转换为离散数据,并将该离散数据转量化为K比特数据为例做具体说明,其中,该数据转换运算电路1(如图1g所示)包括预处理电路11、随机数生成电路12 和判断电路13。当然,本发明并不限制该数据转换运算电路转换进行其他数据类型的转换。其中,将连续数据转换为离散数据具体过程为:
[0087] 所述预处理电路11(如图1g所示)用于使用clip(a,b)运算对输入的连续数据x进行预处理,得到预处理数据y,其中,预处理的方法可有多种,例如,通过与最大值的比、开方和求正弦等;
[0088] 所述随机数生成电路12用于生成电路生成(0,1)之间的随机数z;
[0089] 所述判断电路13用于将区间[a,b]划分成2k-1个子区间,计算所述预处理数据y到每个区间端点的距离,计算所述预处理数据y分别到距离最近的两个端点的归一化概率,所述K为所述连续数据量化的比特位,所述K为正整数;
[0090] 所述判断电路13还用于将所述两个端点中的一个端点对应的归一化概率与所述随机数z比较,若所述随机数z小于所述端点对应的归一化概率,则输出所述端点作为所述连续数据x对应的离散数据,否则输出另一个端点作为所述连续数据x对应的离散数据。
[0091] 举例来说,假设k=3,即将离散后的连续数据x量化为3比特数据,则可能取值该连续数据对应的的离散数据最多有八个,若设定为{-1,-0.67,-0.33,0,0.33,0.67,1},这里以取七个为例;将该连续数据x经预处理后,得到一个预处理数据;假设该预处理数据为0.4,可知该预处理数据落在区间[0.33,0.67]中,将该预处理数据传输至判断电路进行归一化概率计算,计算该预处理数据到该区间端点0.33的归一化概率P=(0.4-0.33)/(0.67-
0.33)=0.212;随机数生成电路生成(0, 1)之间的随机数z,并将该随机数z传输给判断电路;该判断电路将该随机数与归一化概率P进行比较,若z>P,则该连续数据x对应的离散数据为0.33,并量化为101,若z<0.212,则该连续数据x对应的离散数据为为0.67,并量化为
110。
[0092] 可选的,所述Z个主神经网络芯片还用于根据预先策略将所述Y个权值梯度整合成所述训练的最终权值梯度,其中,所述预先策略包括:所述Z个神经网络芯片用于将所述Y个权值梯度中对应位置的非零值整合至所述训练的最终权值梯度;或,将所述Y个权值梯度中对应位置的零值整合至所述训练的最终权值梯度;或,将所述Y个权值梯度中预先设定的多个指定位置的非零值整合至所述训练的最终权值梯度。
[0093] 举例来说,假设X=4,Z=1,Y=3,且三个从神经网络以星型的拓扑结构和主芯片相连,假设该三个从神经网络生成的权值梯度为3×3矩阵,从神经网络芯片1生成的权值梯度 从神经网络芯片2生成的权值梯度 从神经网络芯片3生成的权值梯度 其中,假定权值梯度g1中的非零元素为a11、a22和
a33,权值梯度g2中的非零元素为b13、b22和b31,权值梯度g3中的非零元素为c12、c22和c32,另外,在该主神经网络芯片根据预设策略进行整合时,当权值梯度g1、g2和g3的对应位置中至少存在两个非零值时,则保留最大非零值至最终的权值梯度,假定c22大于a22,且c22大于b22。
可以理解的是,若保留对应位置的非零值整合至所述训练的最终权值梯度,则可得最终的权值梯度 若保留对应位置的零值整合至所述训练的最终权值梯度,则
可得最终的权值梯度 若保留指定位置的非零值整合至所述训练的最终权
值梯度,假定指定保留各权值梯度的第三行非零值至所述训练的最终权值梯度,其他对应的位置保留最大值,且还假定a11>b11=c11=0,c12>a12=b12=0,c13>a13=b13=0,则可得最终的权值梯度 可选的这里的权值梯度和整合策略只做举例说明,并不对
整合策略做具体限定。
[0094] 可选的,该主神经网络主芯片在整合从神经网络芯片发送的权值梯度得到最终的权值梯度G 后,将该最终的权值梯度G下发至从神经网络,该从神经网络芯片根据该最终的权值梯度更新该芯片的权值。
[0095] 另一种可选的实施例,参阅图1b,图1b为另一种神经网络训练装置示意图,如图1b所示,该训练装置中的X个神经网络芯片以环型拓扑结构相连,其中,Y=Z=X,该X个神经网络芯片分别获取训练数据得到X个权值梯度,所述X个神经网络芯片按照预先设定的发送方向将各自的权值梯度发送至相邻的神经网络芯片,相邻的神经网络芯片接收相邻的神经网络芯片的权值梯度后,将该神经网络芯片和相邻的权值梯度发送至与该神经网络芯片相邻的神经网络芯片,当X个神经网络芯片得到X个权值梯度后根据预先策略整合X个权值梯度,得到最终权值梯度,此处的预先策略与上述预先策略一致,不再叙述。如图1b中所示,X个神经网络芯片按照顺时针的方向将各自的权值梯度发送至相邻的神经网络芯片,如神经网络芯片1接收神经网络芯片2发送的权值梯度g2,神经网络芯片1将同时权值梯度g1和g2发送至神经网络芯片n,当然,神经网络芯片2 发送权值梯度的也可能是权值梯度g2和g3,或者,g2、g3和g4……或者g2、g3……gx,这里以神经网络芯片2发送的权值梯度g2为例做具体说明,并不做过度叙述。当神经网络芯片1、 2……x都接收到x个权值梯度后,按照预先策略整合该x个权值梯度得到最终的权值梯度。
[0096] 参阅图1c,图1c为一种神经网络芯片装置结构示意图,该芯片包括:主处理电路、数据转换电路和多个基础处理电路,所述多个基础处理电路呈阵列排布(m*n阵列),其中,m、n的取值范围为大于等于1的整数且m、n中至少有一个值大于等于2。对于m*n阵列分布的多个基础处理电路,每个基础处理电路与相邻的基础处理电路连接,所述主处理电路连接多个基础处理电路的k 个基础处理电路,所述k个基础处理电路可以为:第1行的n个基础处理电路、第m行的n个基础处理电路以及第1列的m个基础处理电路。如图1c所示的集成电路芯片装置,主处理电路和/ 或多个基础处理电路可以包括数据类型转换运算电路,具体的多个基础处理电路中可以有部分基础处理电路包括数据类型转换电路,例如,在一个可选的技术方案中,可以将k个基础处理电路配置数据类型转换电路,这样n个基础处理电路可以分别负责对本列的m个基础处理电路的数据进行数据类型转换步骤。此设置能够提高运算效率,降低功耗,因为对于第1行的n个基础处理电路来说,由于其最先接收到主处理电路发送的数据,那么将该接收到的数据转换成第二类型的数据可以减少后续基础处理电路的计算量以及与后续基础处理电路的数据传输的量,同理,对于第一列的m个基础处理电路配置数据类型转换电路也具有计算量小和功耗低的优点。另外,依据该结构,主处理电路可以采用动态的数据发送策略,例如,主处理电路向第1列的m个基础处理电路广播数据,主处理电路向第1行的n个基础处理电路发送分发数据,此优点是,通过不同的数据输入口传递不同的数据到基础处理电路内,这样基础处理电路可以不区分该接收到的数据是何种数据,只需要确定该数据从哪个接收端口接收即可以获知其属于何种数据。
[0097] 所述主处理电路,用于执行神经网络运算中的各个连续的运算以及和与其相连的所述基础处理电路传输数据;上述连续的运算但不限于:累加运算、ALU运算、激活运算等等运算。
[0098] 所述多个基础处理电路,用于依据传输的数据以并行方式执行神经网络中的运算,并将运算结果通过与所述主处理电路连接的基础处理电路传输给所述主处理电路。上述并行方式执行神经网络中的运算包括但不限于:内积运算、矩阵或向量乘法运算等等。
[0099] 所述数据转换运算电路,用于将输入的数据和生成的权值梯度的数据类型从第一类型转化为第二类型,其中,所述第一类型包括但不限于连续数据、离散数据、浮点数据、定点数据和概率数据等等,所述第二类型包括但不限于连续数据、离散数据、浮点数据、定点数据和概率数据等等。当然,本发明并不限制上述数据类型转换运算电路的具体形式。
[0100] 主处理电路可以包括:数据发送电路、数据接收电路或接口,该数据发送电路可以集成数据分发电路以及数据广播电路,当然在实际应用中,数据分发电路以及数据广播电路也可以分别设置。对于广播数据,即需要发送给每个基础处理电路的数据。对于分发数据,即需要有选择的发送给部分基础处理电路的数据,具体的,如卷积运算,卷积运算的卷积输入数据需要发送给所有的基础处理电路,所有其为广播数据,卷积核需要有选择的发送给部分基础数据块,所以卷积核为分发数据。分发数据具体的选择发送给那个基础处理电路的方式可以由主处理电路依据负载以及其他分配方式进行具体的确定。对于广播发送方式,即将广播数据以广播形式发送至每个基础处理电路。(在实际应用中,通过一次广播的方式将广播数据发送至每个基础处理电路,也可以通过多次广播的方式将广播数据发送至每个基础处理电路,本披露具体实施方式并不限制上述广播的次数),对于分发发送方式,即将分发数据有选择的发送给部分基础处理电路。
[0101] 主处理电路(如图1f所示)可以包括寄存器和/或片上缓存电路,该主处理电路还可以包括: 控制电路、向量运算器电路、ALU(arithmetic and logic unit,算数逻辑单元)电路、累加器电路、 DMA(Direct Memory Access,直接内存存取)电路等电路,当然在实际应用中,上述主处理电路还可以添加,转换电路(例如矩阵转置电路)、数据重排电路或激活电路等等其他的电路。
[0102] 每个基础处理电路可以包括基础寄存器和/或基础片上缓存电路;每个基础处理电路还可以包括:内积运算器电路、向量运算器电路、累加器电路等中一个或任意组合。上述内积运算器电路、向量运算器电路、累加器电路都可以是集成电路,上述内积运算器电路、向量运算器电路、累加器电路也可以为单独设置的电路。
[0103] 对于数据类型转换可以由主处理电路来分配执行的电路,具体的,可以通过显示或隐式的方式来分配执行的电路,对于显示方式,主处理电路可以配置一个特殊指示或指令,当基础处理电路接收到该特殊指示或指令时,确定执行数据类型转换,如基础处理电路未接收到特殊指示或指令时,确定不执行数据类型转换。又如,可以以暗示的方式来执行,例如,基础处理电路接收到数据类型为浮点类型的数据且确定需要执行内积运算时,将该数据类型转换成定点类型的数据。对于显示配置的方式,特殊指令或指示可以配置一个递减序列,该递减序列的每经过一个基础处理电路,数值减1,基础处理电路读取该递减序列的值,如该值大于零,则执行数据类型转换,如该值等于或小于零,则不执行数据类型转换。此设置是依据阵列分配的基础处理电路所配置的,例如对于第i列的m个基础处理电路来说,主处理电路需要前面5个基础处理电路执行数据类型转换,则主处理电路下发一个特殊指令,该特殊指令包含有递减序列,该递减序列的初始值可以为5,则每经过一个基础处理电路,递减序列的值即减1,到第5个基础处理电路时,该递减序列的值为1,到第6个基础处理电路时,该递减序列为0,此时第6个基础处理电路将不在执行该数据类型转换,此种方式可以使得主处理电路可以动态的配置数据类型转换的执行主体以及执行次数。
[0104] 本披露一个实施例提供一种集成电路芯片装置,包括一个主处理电路(也可以称为主单元) 和多个基础处理电路(也可以称为基础单元);实施例的结构如图1d所示;其中,虚线框中是所述神经网络运算装置的内部结构;灰色填充的箭头表示主处理电路和基础处理电路阵列之间的数据传输通路,空心箭头表示基础处理电路阵列中各个基础处理电路(相邻基础处理电路)之间的数据传输通路。其中,基础处理电路阵列的长宽长度可以不同,即m、n的取值可以不同,当然也可以相同,本披露并不限制上述取值的具体值。
[0105] 基础处理电路的电路结构如图1e所示;图中虚线框表示基础处理电路的边界,与虚线框交叉的粗箭头表示数据输入输出通道(指向虚线框内是输入通道,指出虚线框是输出通道);虚线框中的矩形框表示存储单元电路(寄存器和/或片上缓存),包括输入数据1,输入数据2,乘法或内积结果,累加数据;菱形框表示运算器电路,包括乘法或内积运算器,加法器。
[0106] 本实施例中,所述神经网络运算装置包括一个主处理电路和16个基础处理电路(16个基础处理电路仅仅为了举例说明,在实际应用中,可以采用其他的数值);
[0107] 本实施例中,基础处理电路有两个数据输入接口,两个数据输出接口;在本例的后续描述中,将横向的输入接口(图1d中指向本单元的横向箭头)称作输入0,竖向的输入接口(图1d中指向本单元的竖向箭头)称作输入1;将每一个横向的数据输出接口(图1d中从本单元指出的横向箭头)称作输出0,竖向的数据输出接口(图1d中从本单元指出的竖向箭头)称作输出1。
[0108] 每一个基础处理电路的数据输入接口和数据输出接口可以分别连接不同的单元,包括主处理电路与其他基础处理电路;
[0109] 本例中,基础处理电路0,4,8,12(编号见图1d)这四个基础处理电路的输入0与主处理电路的数据输出接口连接;
[0110] 本例中,基础处理电路0,1,2,3这四个基础处理电路的输入1与主处理电路的数据输出接口连接;
[0111] 本例中,基础处理电路12,13,14,15这四个基础处理电路的输出1与主处理电路的数据输入接口相连;
[0112] 本例中,基础处理电路输出接口与其他基础处理电路输入接口相连接的情况见图1b所示,不再一一列举;
[0113] 具体地,S单元的输出接口S1与P单元的输入接口P1相连接,表示P单元将可以从其P1接口接收到S单元发送到其S1接口的数据。
[0114] 本实施例包含一个主处理电路,主处理电路与外部装置相连接(即由输入接口也有输出接口),主处理电路的一部分数据输出接口与一部分基础处理电路的数据输入接口相连接;主处理电路的一部分数据输入接口与一部分基础处理电路的数据输出接口相连。
[0115] 需要在基础处理电路中完成的运算,可以使用下述方法进行:
[0116] 主处理电路先对数据的类型进行转换然后再传输给基础处理电路运算(例如,主处理电路可以将浮点数转换成位宽更低的定点数再传输给基础处理电路,其优点是可以减少传输数据的位宽,减少传输的总比特数量,基础处理电路执行地位宽定点运算的效率也更高,功耗更低)
[0117] 基础处理电路可以收到数据后先进行数据类型转化然后再进行计算(例如,基础处理电路收到主处理电路传输过来的浮点数,然后转换为定点数进行运算,提高运算效率,降低功耗)。
[0118] 基础处理电路计算出结果之后可以先进行数据类型转换然后再传输给主处理电路(例如,基础处理电路计算出的浮点数运算结果可以先转换为低位宽的定点数然后再传输给主处理电路,其好处是降低了传输过程的数据位宽,效率更高,而且节约了功耗)。
[0119] 基础处理电路的使用方法(如图2a);
[0120] 步骤1:主处理电路从装置外部接收待计算的输入数据;
[0121] 步骤2:主处理电路利用本单元的各种运算电路,向量运算电路,内积运算器电路、累加器电路等对数据进行运算处理;
[0122] 步骤3:主处理电路通过数据输出接口向基础处理电路阵列(把所有基础处理电路的集合称作基础处理电路阵列)发送数据(如图2b所示);
[0123] 此处的发送数据的方式可以是向一部分基础处理电路直接发送数据,即多次广播方式;
[0124] 此处发送数据的方式可以向不同的基础处理电路分别发送不同的数据,即分发方式;
[0125] 基础处理电路阵列对数据进行计算;
[0126] 基础处理电路接收到输入数据后进行运算;
[0127] 可选地,基础处理电路接收到数据后将该数据从本单元的数据输出接口传输出去;(传输给其他没有直接从主处理电路接收到数据的基础处理电路。)
[0128] 可选地,基础处理电路将运算结果从数据输出接口传输出去;(中间计算结果或者最终计算结果)
[0129] 步骤4:主处理电路接收到从基础处理电路阵列返回的输出数据。
[0130] 步骤5:主处理电路是否要对此数据继续进行后续处理(例如累加或激活操作)。
[0131] 步骤6:主处理电路处理完毕,将处理结果从数据输出接口传输给装置外部。
[0132] 以下详细描述使用所述电路装置完成矩阵乘向量运算过程:
[0133] (矩阵乘向量可以是矩阵中的每一行分别与向量进行内积运算,并将这些结果按对应行的顺序摆放成一个向量。)
[0134] 下面描述计算尺寸是M行L列的矩阵S和长度是L的向量P的乘法的运算,如下图2c所示。
[0135] 此方法用到所述神经网络计算装置的全部或者一部分基础处理电路,假设用到了K个基础处理电路;
[0136] 主处理电路将矩阵S的部分或全部行中的数据发送到k个基础处理电路中的每个基础处理电路;
[0137] 在一种可选的方案中,主处理电路的控制电路将矩阵S中某行的数据每次发送一个数或者一部分数给某个基础处理电路;(例如,对于每次发送一个数,可以为对于某一个基础处理电路,第 1次发送第3行第1个数,第2次发送第3行数据中的第2个数,第3次发送第3行的第3个数……,或者对于每次发送一部分数,第1次发送第3行前两个数(即第1、2个数),第二次发送第3行第3和第4个数,第三次发送第3行第5和第6个数……;)
[0138] 在一种可选的方案中,主处理电路的控制电路将矩阵S中某几行的数据每次各发送一个数者一部分数给某个基础处理电路;(例如,对于某一个基础处理电路,第1次发送第3,4,5行每行的第1个数,第2次发送第3,4,5行每行的第2个数,第3次发送第3,4,5行每行的第3个数……,或者第1次发送第3,4,5行每行前两个数,第二次发送第3,4,5行每行第3和第
4个数,第三次发送第3,4,5行每行第5和第6个数……。)
[0139] 主处理电路的控制电路将向量P中的数据逐次发送到第0个基础处理电路;
[0140] 第0个基础处理电路接收到向量P的数据之后,将该数据发送给与其相连接的下一个基础处理电路,即基础处理电路1;
[0141] 具体的,有些基础处理电路不能直接从主处理电路处获得计算所需的所有的数据,例如,图 2d中的基础处理电路1,只有一个数据输入接口与主处理电路相连,所以只能直接从主处理电路获得矩阵S的数据,而向量P的数据就需要依靠基础处理电路0输出给基础处理电路1,同理,基础处理电路1也要收到数据后也要继续把向量P的数据输出给基础处理电路2。
[0142] 每一个基础处理电路对接收到的数据进行运算,该运算包括但不限于:内积运算、乘法运算、加法运算等等;
[0143] 在一种可选方案中,基础处理电路每次计算一组或多组两个数据的乘法,然后将结果累加到寄存器和或片上缓存上;
[0144] 在一种可选方案中,基础处理电路每次计算一组或多组两个向量的内积,然后将结果累加到寄存器和或片上缓存上;
[0145] 基础处理电路计算出结果后,将结果从数据输出接口传输出去(即传输给与其连接的其他基础处理电路);
[0146] 在一种可选方案中,该计算结果可以是内积运算的最终结果或中间结果;
[0147] 基础处理电路接收到来自其他基础处理电路的计算结果之后,将该数据传输给与其相连接的其他基础处理电路或者主处理电路;
[0148] 主处理电路接收到各个基础处理电路内积运算的结果,将该结果处理得到最终结果(该处理可以为累加运算或激活运算等等)。
[0149] 采用上述计算装置实现矩阵乘向量方法的实施例:
[0150] 在一种可选方案中,方法所用到的多个基础处理电路按照如下图2d或者图2e所示的方式排列;
[0151] 如图2c所示,主处理电路的数据转换运算电路将矩阵S和矩阵P转换成第二类型的数据;主处理单元的控制电路将矩阵S的M行数据分成K组,分别由第i个基础处理电路负责第i组(该组数据中行的集合记为Ai)的运算;
[0152] 此处对M行数据进行分组的方法是任意不会重复分配的分组方式;
[0153] 在一种可选方案中,采用如下分配方式:将第j行分给第j%K(%为取余数运算)个基础处理电路;
[0154] 在一种可选方案中,对于不能平均分组的情况也可以先对一部分行平均分配,对于剩下的行以任意方式分配。
[0155] 主处理电路的控制电路每次将矩阵S中部分或全部行中的数据依次发送给对应的基础处理电路;
[0156] 在一种可选方案中,主处理电路的控制电路每次向第i个基础处理电路发送其负责的第i组数据Mi中的一行数据中的一个或多个数据;
[0157] 在一种可选方案中,主处理电路的控制电路每次向第i个基础处理电路发送其负责的第i组数据Mi中的部分或全部行中的每行的一个或多个数据;
[0158] 主处理电路的控制电路将向量P中的数据依次向第1个基础处理电路发送;
[0159] 在一种可选方案中,主处理电路的的控制电路每次可以发送向量P中的一个或多个数据;
[0160] 第i个基础处理电路接收到向量P的数据之后发送给与其相连的第i+1个基础处理电路;
[0161] 每个基础处理电路接收到来自矩阵S中某一行或者某几行中的一个或多个数据以及来自向量 P的一个或多个数据后,进行运算(包括但不限于乘法或加法);
[0162] 在一种可选方案中,基础处理电路每次计算一组或多组两个数据的乘法,然后将结果累加到寄存器和或片上缓存上;
[0163] 在一种可选方案中,基础处理电路每次计算一组或多组两个向量的内积,然后将结果累加到寄存器和或片上缓存上;
[0164] 在一种可选方案中,基础处理电路接收到的数据也可以是中间结果,保存在寄存器和或片上缓存上;
[0165] 基础处理电路将本地的计算结果传输给与其相连接的下一个基础处理电路或者主处理电路;
[0166] 在一种可选方案中,对应于图2d的结构,只有每列的最后一个基础处理电路的输出接口与主处理电路相连接的,这种情况下,只有最后一个基础处理电路可以直接将本地的计算结果传输给主处理电路,其他基础处理电路的计算结果都要传递给自己的下一个基础处理电路,下一个基础处理电路传递给下下个基础处理电路直至全部传输给最后一个基础处理电路,最后一个基础处理电路将本地的计算结果以及接收到的本列的其他基础处理电路的结果执行累加计算得到中间结果,将中间结果发送至主处理电路;当然还可以为最后一个基础处理电路可以将本列的其他基础电路的结果以及本地的处理结果直接发送给主处理电路。
[0167] 在一种可选方案中,对应于图2e的结构,每一个基础处理电路都有与主处理电路相连接的输出接口,这种情况下,每一个基础处理电路都直接将本地的计算结果传输给主处理电路;
[0168] 基础处理电路接收到其他基础处理电路传递过来的计算结果之后,传输给与其相连接的下一个基础处理电路或者主处理电路。
[0169] 主处理电路接收到M个内积运算的结果,作为矩阵乘向量的运算结果。
[0170] 参阅图3a,图3a为一种神经网络芯片装置结构示意图,该芯片包括:主处理电路、基本处理电路和分支处理电路。
[0171] 主处理电路可以包括寄存器和/或片上缓存电路,该主处理电路还可以包括:控制电路、向量运算器电路、ALU(arithmetic and logic unit,算数逻辑单元)电路、累加器电路、DMA(Direct Memory Access,直接内存存取)电路等电路,当然在实际应用中,上述主处理电路还可以添加,转换电路 (例如矩阵转置电路)、数据重排电路或激活电路等等其他的电路;
[0172] 可选的,主处理电路可以包括:数据类型转换运算电路,所述数据类型运算电路,用于执行第一类型数据与第二类型数据之间的转换,其中,第一类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据,K为大于1的正整数,同理,第二类型包括但不限于离散型数据、连续型数据、概率数据、浮点数据、定点数据和K比特数据。当然,本发明并不限制上述数据类型转换运算电路的具体形式。
[0173] 主处理电路还包括数据发送电路、数据接收电路或接口,该数据发送电路可以集成数据分发电路以及数据广播电路,当然在实际应用中,数据分发电路以及数据广播电路也可以分别设置;在实际应用中上述数据发送电路以及数据接收电路也可以集成在一起形成数据收发电路。对于广播数据,即需要发送给每个基础处理电路的数据。对于分发数据,即需要有选择的发送给部分基础处理电路的数据,具体的选择方式可以由主处理电路依据负载以及计算方式进行具体的确定。对于广播发送方式,即将广播数据以广播形式发送至每个基础处理电路。(在实际应用中,通过一次广播的方式将广播数据发送至每个基础处理电路,也可以通过多次广播的方式将广播数据发送至每个基础处理电路,本申请具体实施方式并不限制上述广播的次数),对于分发发送方式,即将分发数据有选择的发送给部分基础处理电路。
[0174] 在实现分发数据时,主处理电路的控制电路向部分或者全部基础处理电路传输数据(该数据可以相同,也可以不同,具体的,如果采用分发的方式发送数据,各个接收数据的基础处理电路收到的数据可以不同,当然也可以有部分基础处理电路收到的数据相同;
[0175] 具体地,广播数据时,主处理电路的控制电路向部分或者全部基础处理电路传输数据,各个接收数据的基础处理电路可以收到相同的数据。
[0176] 可选的,上述主处理电路的向量运算器电路可以执行向量运算,包括但不限于:两个向量加减乘除,向量与常数加、减、乘、除运算,或者对向量中的每个元素执行任意运算。其中,连续的运算具体可以为,向量与常数加、减、乘、除运算、激活运算、累加运算等等。
[0177] 每个基础处理电路可以包括基础寄存器和/或基础片上缓存电路;每个基础处理电路还可以包括:内积运算器电路、向量运算器电路、累加器电路等中一个或任意组合。上述内积运算器电路、向量运算器电路、累加器电路都可以是集成电路,上述内积运算器电路、向量运算器电路、累加器电路也可以为单独设置的电路。
[0178] 该芯片装置可选的还可以包括一个或多个分支处理电路,如具有分支处理电路时,其中主处理电路与分支处理电路连接,该分支处理电路与基本处理电路连接,该基本处理电路的内积运算器电路用于执行数据块之间的内积运算,该主处理电路的控制电路控制数据接收电路或数据发送电路收发外部数据,以及通过控制电路控制数据发送电路将外部数据分发至分支处理电路,该分支处理电路用于收发主处理电路或基本处理电路的数据。如图3a所示的结构适合复杂数据的计算,因为对于主处理电路来说,其连接的单元的数量有限,所以需要在主处理电路与基本处理电路之间添加分支处理电路以实现更多的基本处理电路的接入,从而实现对复杂数据块的计算。分支处理电路和基础处理电路的连接结构可以是任意的,不局限在图3a的H型结构。可选的,主处理电路到基础处理电路是广播或分发的结构,基础处理电路到主处理电路是收集(gather)的结构。广播,分发和收集的定义如下,对于分发或广播结构,此时的基础处理电路的数量大于主处理电路,即1个主处理电路对应多个基础处理电路,即从主处理电路到多个基础处理电路为广播或分发的结构,反之,从多个基础处理电路到主处理电路可以为收集结构。
[0179] 基础处理电路,接收主处理电路分发或者广播的数据保存到基础处理电路的片上缓存中,可以进行运算产生结果,可以向主处理电路发送数据。
[0180] 基础处理电路中所涉及到的数据可以是任意数据类型的数据,可以是任意位宽的浮点数表示的数据也可以是任意位宽的定点数表示的数据;涉及到的所有运算电路和存储电路都可以是能够处理的任意数据类型的运算电路和存储电路,可以是任意位宽的浮点数的运算电路和存储电路也可以是任意位宽的定点数的运算电路和存储电路。
[0181] 可选的,每个基础处理电路均可以包括数据类型转换运算电路,也可以在部分基础处理电路配置数据类型转换运算电路;数据类型转换运算电路可以用于将接收或发送的数据从浮点类型数据转换成定点类型数据,也可以将定点类型数据转换成浮点类型数据。本发明并不限制上述数据类型转换运算电路的具体形式。
[0182] 可选的,该基础处理电路的向量运算器电路可以对数据类型转换后的两个向量执行的向量运算,当然在实际应用中,基础处理电路的内积运算器电路可以对数据类型转换后的两个向量执行内积运算,累加器电路也可以对内积运算的结果进行累加。
[0183] 所述数据转换运算电路,用于输入的数据和生成的权值梯度的数据类型从第一类型转化为第二类型,其中,所述第一类型包括但不限于连续数据、离散数据、浮点数据、定点数据和概率数据等等,所述第二类型包括但不限于连续数据、离散数据、浮点数据、定点数据和概率数据等等。
[0184] 在一种可选方案中,两个向量可以存放在片上缓存和/或寄存器中,基础处理电路可以根据实际计算的需要提取两个向量执行运算。该运算包括但不限于:内积运算、乘法运算、加法运算或其他的运算。
[0185] 在一种可选方案中,每个基础处理电路可以执行多组两个向量的内积运算,也可以对多组内积运算的结果分别进行累加;
[0186] 在一种可选方案中,多组的两个向量数据可以存放在片上缓存和/或寄存器中;
[0187] 在一种可选方案中,多组内积运算的结果可以分别累加到片上缓存和/或寄存器中;
[0188] 在一种可选方案中,各组内积运算的结果可以不进行累加,直接作为结果传输;
[0189] 在一种可选方案中,每个基础处理电路可以执行同一个向量与多个向量分别进行内积运算的操作(“一对多”内积,即多组内积里每组的两个向量中有一个向量是共享的),并将每个向量对应的内积结果分别进行累加。此技术方案可以实现同一套权值对不同的输入数据进行多次计算,增加了数据复用,减少基础处理电路内部数据的数据传输量,提高计算效率,降低功耗。
[0190] 具体地,计算内积使用的数据中,各组共享的向量和每组的另一个向量(即每组之间不同的那个向量)的数据来源可以不同:
[0191] 在一种可选方案中,在计算内积时,各组共享的向量来自主处理电路或者分支处理电路的广播或者分发;
[0192] 在一种可选方案中,在计算内积时,各组共享的向量来自片上缓存;
[0193] 在一种可选方案中,在计算内积时,各组共享的向量来自寄存器;
[0194] 在一种可选方案中,在计算内积时,每组的另一个非共享向量来自主处理电路或者分支处理电路的广播或者分发;
[0195] 在一种可选方案中,在计算内积时,每组的另一个非共享向量来自从片上缓存;
[0196] 在一种可选方案中,在计算内积时,每组的另一个非共享向量来自寄存器;
[0197] 在一种可选方案中,在进行多组的内积运算时,每组共享的向量在基础处理电路的片上缓存和/寄存器中保留任意份数;
[0198] 在一种可选方案中,共享向量可以对应每组内积各保留一份;
[0199] 在一种可选方案中,共享向量可以只保留一份;
[0200] 具体地,多组内积运算的结果可以分别累加到片上缓存和/或寄存器中;
[0201] 具体地,各组内积运算的结果可以不进行累加,直接作为结果传输;
[0202] 参阅图3a所示的结构,其包含一主处理电路(可以执行向量操作),多基础处理电路(可以执行内积操作)。这样组合的好处是:装置不仅能使用基础处理电路执行矩阵和向量乘法运算,也能使用主处理电路执行其他任意的向量运算,使装置在有限的硬件电路的配置下,能够更快的完成更多的运算,减少了与装置外部进行数据传输的次数,提高了计算效率,降低了功耗。另外,本芯片在基础处理电路和/或主处理电路均可以设置数据类型转换运算电路,这样在进行神经网络计算时能够将浮点类型数据转换成定点类型数据,也可以将定点类型数据转换成浮点类型数据,并且本芯片可以依据各个电路(主要是主处理电路和基础处理电路)的运算量(即负载量)动态的分配由那个电路将数据类型进行转换,这样能够减少数据计算的复杂程序,降低功耗,并且动态的分配数据类型的转换能够实现不影响芯片的计算效率。该分配的方式包括但不限于:负载均衡、负载最小值分配等等方式。
[0203] 参阅图3b所示的装置,图3b所示的装置为无分支处理电路的计算装置,如图3b所示的装置,其包括:主处理电路以及N个基础处理电路,其中,主处理电路(具体的结构如图1d所示)与N 个基础处理电路可以直接或间接连接,如为间接连接的方式时,一种可选的方案如图3a所示可以包括N/4个分支处理电路,每个分支处理电路分别连接4个基础处理电路,对于主处理电路以及N 个基础处理电路分别包含的电路可以参见上述如图3a所示的描述,这里不再赘述,这里需要说明的是,上述基础处理电路还可以设置在分支处理电路内,另外,每个分支处理电路连接基础处理电路的数量也可以不局限于4个,厂家可以根据实际需要进行配置。该上述主处理电路和/或N个基础处理电路均可以包括数据类型转换运算电路,具体的,可以是主处理电路包括数据类型运算电路,也可以是N个基础处理电路或其中的一部分包括数据类型转换电路,也可以是主处理电路和N个基础处理电路或其中的一部分均包括。上述主处理电路可以根据神经网络计算指令动态的分配数据类型转换步骤的操作实体,具体的,主处理电路可以根据自身的负载确定是否对接收到的数据执行数据类型转换步骤,具体的,可以将负载的值设置多个区间,每个区间对应分配数据类型转换步骤的执行主体,例如,以3个区间为例,区间1的负载值较低,可以由主处理电路单独执行数据类型转换步骤,区间2负载值位于区间1以及区间3之间,可以由主处理电路或N个基础处理电路共同执行数据类型转换步骤,区间3负载值较高,可以由N个基础处理电路执行数据类型转换步骤。对此,可以以明示的方式来执行,例如主处理电路可以配置一个特殊指示或指令,当基础处理电路接收到该特殊指示或指令时,确定执行数据类型转换步骤,如基础处理电路未接收到特殊指示或指令时,确定不执行数据类型转换步骤。又如,可以以暗示的方式来执行,例如,基础处理电路接收到数据类型为浮点类型的数据且确定需要执行内积运算时,将该数据类型转换成定点类型的数据。
[0204] 下面提供一种采用如图3a所示的装置实现计算的方法,该计算的方法具体可以为神经网络的计算方式,例如神经网络的正向运算,神经网络的训练,在实际应用中,正向运算依据不同的输入数据可以执行矩阵乘矩阵、卷积运算、激活运算、变换运算等等运算,上述运算均可以采用如图3a所示的装置实现。
[0205] 主处理电路的数据类型转换运算电路先对数据的类型进行转换然后由控制电路传输给基础处理电路运算,例如,主处理电路的数据类型转换运算电路可以将连续数据转化为离散数据,在将离散数据量化为3比特数据后,再传输给基础处理电路,其优点是可以减少传输数据的位宽,减少传输的总比特数量,基础处理电路执行3比特运算的效率也更高,功耗更低。
[0206] 再如基础处理电路接收到的数据为浮点数据,那么基础处理电路可以收到数据后由数据转换运算电路先进行数据类型转化然后再进行计算,例如,基础处理电路收到主处理电路传输过来的浮点数,数据转换运算电路然后转换为定点数,然后基础处理电路的内积运算器电路、向量运算器电路或累加器电路进行运算,提高运算效率,降低功耗。
[0207] 基础处理电路计算出结果之后可以先进行数据类型转换然后再传输给主处理电路,例如,基础处理电路计算出的浮点数运算结果可以先转换为低位宽的定点数然后再传输给主处理电路,其好处是降低了传输过程的数据位宽,效率更高,而且节约了功耗。
[0208] 主处理电路将待计算的数据传输到全部或者一部分基础处理电路上;以矩阵乘以向量计算为例,主处理电路的控制电路可以将矩阵数据拆分每列作为一个基础数据,例如m*n矩阵,可以拆分成n个m行的向量,主处理电路的控制电路将拆分后的n个m行的向量分发给多个基础处理电路。对于向量,主处理电路的控制电路可以将向量整体广播给每个基础处理电路。如果m的值比较大,那么控制电路可以先将m*n矩阵拆分成x*n个向量,以x=2为例,具体的可以拆分成,2n 个向量,每个向量包含m/2行,即将n个m行的向量中每个向量均分成2个向量,以第一行为例,如n个m行的向量的第一个向量为1000行,那么均分成2个向量可以为,将前500行组成第一向量,将后500行组成第二向量,控制电路通过2个广播将2个向量广播给多个基础处理电路。
[0209] 所述数据传输的方式可以是广播或者分发,或者其他任何可能的传输方式;
[0210] 基础处理电路接收到数据后,执行运算,得到运算结果;
[0211] 基础处理电路将运算结果传输回主处理电路;
[0212] 所述运算结果可以是中间运算结果,也可以是最终运算结果。
[0213] 使用如图1f所示装置完成矩阵乘向量的运算;
[0214] (矩阵乘向量可以是矩阵中的每一行分别与向量进行内积运算,并将这些结果按对应行的顺序摆放成一个向量。)
[0215] 本披露还揭露了一个神经网络运算装置,其包括一个或多个在如图1c或如图3a所示的芯片,用于从其他处理装置中获取待运算数据和控制信息,执行指定的神经网络运算,执行结果通过I/O 接口传递给外围设备。外围设备譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口,服务器。当包含一个以上神在如图1c或如图3a所示的芯片时,如图1c或如图3a所示的芯片间可以通过特定的结构进行链接并传输数据,譬如,通过PCIE总线进行互联并传输数据,以支持更大规模的神经网络的运算。此时,可以共享同一控制系统,也可以有各自独立的控制系统;可以共享内存,也可以每个加速器有各自的内存。此外,其互联方式可以是任意互联拓扑。
[0216] 该神经网络运算装置具有较高的兼容性,可通过PCIE接口与各种类型的服务器相连接。
[0217] 本披露还揭露了一个组合处理装置,其包括上述的神经网络运算装置,通用互联接口,和其他处理装置(即通用处理装置)。神经网络运算装置与其他处理装置进行交互,共同完成用户指定的操作。如4a下图为组合处理装置的示意图。
[0218] 其他处理装置,包括中央处理器CPU、图形处理器GPU、神经网络处理器等通用/专用处理器中的一种或以上的处理器类型。其他处理装置所包括的处理器数量不做限制。其他处理装置作为神经网络运算装置与外部数据和控制的接口,包括数据搬运,完成对本神经网络运算装置的开启、停止等基本控制;其他处理装置也可以和神经网络运算装置协作共同完成运算任务。
[0219] 通用互联接口,用于在所述神经网络运算装置与其他处理装置间传输数据和控制指令。该神经网络运算装置从其他处理装置中获取所需的输入数据,写入神经网络运算装置片上的存储装置;可以从其他处理装置中获取控制指令,写入神经网络运算装置片上的控制缓存;也可以读取神经网络运算装置的存储模块中的数据并传输给其他处理装置。
[0220] 如图4b所示,可选的,该结构还包括存储装置,用于保存在本运算单元/运算装置或其他运算单元所需要的数据,尤其适用于所需要运算的数据在本神经网络运算装置或其他处理装置的内部存储中无法全部保存的数据。
[0221] 该组合处理装置可以作为手机、机器人、无人机、视频监控设备等设备的SOC片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。此情况时,该组合处理装置的通用互联接口与设备的某些部件相连接。某些部件譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口。
[0222] 如图5所示,本披露还揭露了一种执行神经网络训练的方法,所述方法中应用上述一个或多个训练装置,可选的,以应用一个训练装置为例做具体说明,所述方法包括但不限于以下步骤:
[0223] 步骤501:所述X个神经网络芯片中的Y个神经网络芯片用于接收神经网络训练数据执行训练运算得到Y个权值梯度,,其中,所述X的取值范围为大于或等于2,所述Y≤X。
[0224] 可选的,所述X个神经网络芯片可以以星型拓扑结构和环型拓扑结构进行连接,但本披露并不限于这两种拓扑结构。
[0225] 可选的,对于不同的拓扑结构,Y与Z的取值不同。
[0226] 步骤502:所述X个神经网络芯片中的Z个神经网络芯片接收所述Y个神经网络芯片发送的权值梯度,所述Z≤X。
[0227] 可选的,不同的拓扑结构发送权值梯度的方式不同,如上述的星型拓扑结构,(X-1)个从神经网络芯片将权值梯度发送至主神经网络芯片,再如上述的环型拓扑结构,X个神经网络芯片按照预设规则将各自的权值梯度发送至相邻的神经网络芯片。
[0228] 步骤503:所述Z个神经网络芯片根据预先策略将所述Y个权值梯度整合成所述训练的最终权值梯度。
[0229] 可选的,所述预先策略与上述的预先策略一致,这里不再叙述。
[0230] 在一个实施例里,本公开公开了一个芯片,其包括了上述神经网络处理器。
[0231] 在一个实施例里,本公开公开了一个芯片封装结构,其包括了上述芯片。
[0232] 在一个实施例里,本公开公开了一个板卡,其包括了上述芯片封装结构。
[0233] 在一个实施例里,本公开公开了一个电子装置,其包括了上述板卡。
[0234] 电子装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
[0235] 所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
[0236] 以上所述的具体实施例,对本披露的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本披露的具体实施例而已,并不用于限制本披露,凡在本披露的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本披露的保护范围之内。