卷积运算方法及装置、卷积处理方法、设备与存储介质与流程

文档序号:32796556发布日期:2023-01-03 22:31阅读:23来源:国知局
卷积运算方法及装置、卷积处理方法、设备与存储介质与流程

1.本公开的实施例涉及一种卷积运算方法及装置、卷积处理方法、设备与存储介质。


背景技术:

2.人工智能(artificial intelligence)深度学习领域涉及到大量的卷积运算。在当前的计算设备中,诸如中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)、通用图形处理器(general-purpose computing on graphics processing units,gpgpu)等数据处理集成电路可以执行程序以完成诸如卷积神经网络(convolutional neural network,cnn)运算等各种功能。
3.gpgpu是用于通用计算的gpu,其利用图形处理器的高并发计算能力来执行原本由中央处理器处理的通用计算任务。随着互联网行业的飞速发展,人工智能领域的新兴,以及航空航天、气象预测、监控安防等传统行业随之而来的革新,用gpgpu来代替cpu解决大数据处理问题早已成为主要潮流之一。


技术实现要素:

4.本公开至少一实施例提供一种卷积运算方法,该卷积运算方法包括:获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵,其中,所述第一矩阵包括二维排布的多个元素;将所述权重矩阵划分为n个子权重矩阵,其中,n为正整数;对所述n个子权重矩阵中的第k个子权重矩阵设置对应于所述第一矩阵的沿第一方向的第k偏移,其中,1≤k≤n且k为整数;基于所述第k偏移,使用所述第k个子权重矩阵对所述第一矩阵进行多步卷积运算,以得到所述多步卷积运算分别对应的多个第k子运算结果;对所述多步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到所述每一步卷积运算对应的第一运算结果;将所述多步卷积运算对应的多个第一运算结果作为至少部分输出数据并输出所述多个第一运算结果。
5.例如,本公开至少一实施例提供的卷积运算方法还包括:对所述卷积核进行填充以得到所述权重矩阵。
6.例如,本公开至少一实施例提供的卷积运算方法还包括:对所述输入数据中的至少部分数据进行填充以得到所述第一矩阵。
7.例如,在本公开至少一实施例提供的卷积运算方法中,所述权重矩阵包括一维权重向量。
8.例如,在本公开至少一实施例提供的卷积运算方法中,所述n个子权重矩阵中的每个子权重矩阵包括至少一个元素,所述n个子权重矩阵包括至少一个第一子权重矩阵和至少一个第二子权重矩阵,所述至少一个第一子权重矩阵中的每个第一子权重矩阵包含的元素数量和所述至少一个第二子权重矩阵中的每个第二子权重矩阵包含的元素数量相同或者不同。
9.例如,在本公开至少一实施例提供的卷积运算方法中,所述每个第一子权重矩阵
中包含的元素数量为3,所述每个第二子权重矩阵中包含的元素数量为5。
10.例如,在本公开至少一实施例提供的卷积运算方法中,所述第k个子权重矩阵为所述第一子权重矩阵时对应的所述第k偏移与所述第k个子权重矩阵为所述第二子权重矩阵时对应的所述第k偏移不同。
11.例如,在本公开至少一实施例提供的卷积运算方法中,响应于所述第k个子权重矩阵为所述第一子权重矩阵,所述第k偏移为0;响应于所述第k个子权重矩阵为所述第二子权重矩阵,所述第k偏移等于所述每个第一子权重矩阵中包含的元素数量。
12.例如,本公开至少一实施例提供的卷积运算方法还包括:将所述第一矩阵划分为m个第一子矩阵,其中,所述m个第一子矩阵中的每个第一子矩阵包括排列为r行s列的多个元素,m为正整数,r为正整数且s为正整数。
13.例如,在本公开至少一实施例提供的卷积运算方法中,所述多步卷积运算包括p步卷积运算,其中,p为正整数,所述基于所述第k偏移,使用所述第k个子权重矩阵对所述第一矩阵进行多步卷积运算,以得到所述多步卷积运算分别对应的多个第k子运算结果,包括:基于所述第k偏移,使用所述第k个子权重矩阵分别与所述m个第一子矩阵进行p步卷积运算,以得到所述p步卷积运算分别对应的p个第k子运算结果。
14.例如,在本公开至少一实施例提供的卷积运算方法中,所述多步卷积运算包括p步卷积运算,其中,p为正整数,所述将所述多步卷积运算对应的多个第一运算结果作为至少部分输出数据并输出所述多个第一运算结果,包括:将所述p步卷积运算对应的p个第一运算结果作为对应于所述至少部分输出数据的第二子矩阵并输出所述第二子矩阵。
15.例如,在本公开至少一实施例提供的卷积运算方法中,所述获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵,包括:利用第一调度单元加载所述权重矩阵;利用第二调度单元沿所述第一方向依序加载所述m个第一子矩阵。
16.例如,在本公开至少一实施例提供的卷积运算方法中,所述多步卷积运算包括p步卷积运算,其中,p为正整数,所述基于所述第k偏移,使用所述第k个子权重矩阵对所述第一矩阵进行多步卷积运算,以得到所述多步卷积运算分别对应的多个第k子运算结果,包括:基于所述第k偏移,利用第三调度单元执行所述第k个子权重矩阵与所述m个第一子矩阵的p步卷积运算,以得到所述p步卷积运算分别对应的p个第k子运算结果。
17.例如,在本公开至少一实施例提供的卷积运算方法中,所述输入数据被划分为多个部分,所述多个部分中的每个部分对应于一个第一子矩阵,所述方法还包括:利用所述第二调度单元沿所述第一方向加载第m+1个第一子矩阵,其中,所述第m+1个第一子矩阵包括排列为r行s列的多个元素,r为正整数且s为正整数;基于所述第k偏移,利用所述第三调度单元执行所述第k个子权重矩阵与所述第m+1个第一子矩阵的q步卷积运算,以得到所述q步卷积运算分别对应的多个第k子运算结果,其中,q为正整数。
18.例如,在本公开至少一实施例提供的卷积运算方法中,所述第一方向为所述第一矩阵的列方向。
19.例如,在本公开至少一实施例提供的卷积运算方法中,所述多步卷积运算的步长为1。
20.本公开至少一实施例还提供一种卷积处理方法,该卷积处理方法包括:获取输入数据;将所述输入数据划分为多个部分,其中,所述多个部分中的每个部分对应于一个第一
矩阵;对于所述输入数据的所述每个部分所对应的第一矩阵,利用根据本公开任一实施例提供的卷积运算方法进行所述多步卷积运算,得到所述多步卷积运算对应的所述至少部分输出数据并输出所述至少部分输出数据;根据所述输入数据的所述每个部分对应的所述至少部分输出数据,得到完整的输出数据。
21.本公开至少一实施例还提供一种卷积运算装置,该卷积运算装置包括:获取模块,配置为获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵,其中,所述第一矩阵包括二维排布的多个元素;划分模块,配置为将所述权重矩阵划分为n个子权重矩阵,其中,n为正整数;处理模块,配置为对所述n个子权重矩阵中的第k个子权重矩阵设置对应于所述第一矩阵的沿第一方向的第k偏移,其中,1≤k≤n且k为整数;计算模块,配置为基于所述第k偏移,使用所述第k个子权重矩阵对所述第一矩阵进行多步卷积运算,以得到所述多步卷积运算分别对应的多个第k子运算结果;累加模块,配置为对所述多步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到所述每一步卷积运算对应的第一运算结果;输出模块,配置为将所述多步卷积运算对应的多个第一运算结果作为至少部分输出数据并输出所述多个第一运算结果。
22.本公开至少一实施例还提供一种电子设备。该电子设备包括:处理器;存储器,包括一个或多个计算机程序模块;其中,所述一个或多个计算机程序模块被存储在所述存储器中并被配置为由所述处理器执行,所述一个或多个计算机程序模块用于实现本公开任一实施例提供的卷积运算方法或本公开任一实施例提供的卷积处理方法。
23.本公开至少一实施例还提供一种存储介质,存储有非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时实现本公开任一实施例提供的卷积运算方法或本公开任一实施例提供的卷积处理方法。
附图说明
24.为了更清楚地说明本公开实施例的技术方案,下面将对实施例的附图作简单地介绍,显而易见地,下面描述中的附图仅仅涉及本公开的一些实施例,而非对本公开的限制。
25.图1为一种大尺寸卷积核与输入数据进行卷积运算的过程的示意图;
26.图2为本公开至少一实施例提供的卷积运算方法的示例性流程图;
27.图3a为本公开至少一实施例提供的权重矩阵划分的一个示例的示意图;
28.图3b为本公开至少一实施例提供的卷积运算方法的一个示例的示意图;
29.图4a为本公开至少一实施例提供的第一矩阵划分的一个示例的示意图;
30.图4b为本公开至少一实施例提供的卷积运算方法的另一个示例的示意图;
31.图4c为图4b中的权重矩阵划分的一个示例的示意图;
32.图5为本公开至少一实施例提供的卷积运算方法的又一个示例的示意图;
33.图6为本公开至少一实施例提供的卷积运算方法的再一个示例的示意图;
34.图7为本公开至少一实施例提供的卷积运算方法的另一示例性流程图;
35.图8为本公开至少一实施例提供的卷积处理方法的示例性流程图;
36.图9为本公开的至少一实施例提供的一种卷积运算装置的示意框图;
37.图10为本公开的至少一实施例提供的一种电子设备的示意框图;
38.图11为本公开的至少一实施例提供的另一种电子设备的示意框图;以及
39.图12为本公开的至少一实施例提供的一种存储介质的示意图。
具体实施方式
40.为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例的附图,对本公开实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本公开的一部分实施例,而不是全部的实施例。基于所描述的本公开的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
41.除非另外定义,本公开使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本公开中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。同样,“一个”、“一”或者“该”等类似词语也不表示数量限制,而是表示存在至少一个。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
42.下面通过几个具体的实施例对本公开进行说明。为了保持本公开实施例的以下说明清楚且简明,可省略已知功能和已知部件的详细说明。当本公开实施例的任一部件在一个以上的附图中出现时,该部件在每个附图中由相同或类似的参考标号表示。
43.利用gpgpu芯片的运算单元,可以大幅度提升卷积运算能力。这些运算单元成为gpgpu架构不同于cpu的显著特点。例如在gpgpu中存在统一计算设备架构(compute unified device architecture,cuda)核心单元(cuda core)、特殊功能单元(special function unit,sfu)、双精度单元(double precision unit,dpu)和张量核心单元(tensor core)等运算单元。例如,gpgpu以可编程多处理器为划分粒度,将各种类型的运算单元按照一定比例分组并组织在一起,从而支持通用计算、科学计算和神经网络计算等各种场景下多种多样的数据处理需求。
44.例如,对于常规尺寸的卷积核,可以直接利用特定的运算单元进行计算;对于大尺寸的卷积核,由于芯片硬件特性的限制,往往不能直接在特定的运算单元上进行计算。例如,以张量核心单元为例,当卷积核的高度小于等于7并且宽度小于等于7时,可以直接利用张量核心单元进行计算;当卷积核的高度大于7或者宽度大7时,则不能直接在张量核心单元上进行计算。
45.图1为一种大尺寸卷积核与输入数据进行卷积运算的过程的示意图。例如,如图1所示,该大尺寸卷积核为一维卷积核,其高度为31(例如,该一维卷积核尺寸记为weight(31
×
1));输入数据为二维排布的数据,其高度为40且宽度为16(例如,该输入数据尺寸记为input(40
×
16));经卷积运算得到的输出数据同样为二维排布的数据,其高度为40且宽度为16(例如,该输出数据尺寸记为output(40
×
16))。例如,在运算单元中,为了进行并行计算,输入数据可以为二维排布的输入数据,也可以为将一维输入数据经变维(reshape)处理得到的二维输入数据。
46.例如,如图1所示,卷积核weight(31
×
1)分别沿输入数据的行方向和列方向滑动
以完成二维卷积运算,得到二维的输出数据;在每一步卷积中,卷积核上31个元素与输入数据相乘得到31个子运算结果,需要将31个子运算结果进行累加才能得到二维输出数据上的一次卷积运算结果。然而,由于运算单元计算能力的限制,该累加过程不能直接在特定的运算单元(例如,张量核心)上进行,而需要先将多个子运算结果输入到内存,然后在内存中完成累加,再将累加后的结果传输回运算单元。在上述卷积运算过程中,运算单元与内存之间频繁的数据传输过程一定程度上造成了芯片的性能损失。
47.本公开至少一实施例提供一种卷积运算方法,该卷积运算方法包括:获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵,其中,第一矩阵包括二维排布的多个元素;将权重矩阵划分为n个子权重矩阵,其中,n为正整数;对n个子权重矩阵中的第k个子权重矩阵设置对应于第一矩阵的沿第一方向的第k偏移,其中,1≤k≤n且k为整数;基于第k偏移,使用第k个子权重矩阵对第一矩阵进行多步卷积运算,以得到多步卷积运算分别对应的多个第k子运算结果;对多步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到每一步卷积运算对应的第一运算结果;将多步卷积运算对应的多个第一运算结果作为至少部分输出数据并输出多个第一运算结果。
48.本公开的至少一实施例还提供一种卷积处理方法、卷积运算装置、电子设备与存储介质。
49.本公开至少一实施例提供的方法、装置、设备以及存储介质,基于芯片的存储能力、计算能力等特性,将大尺寸卷积核等效分解成多个权重矩阵,权重矩阵可以直接在芯片的运算单元上实现加速计算,并且可以适应芯片的硬件特性,充分发挥芯片算力,提高计算性能。
50.下面,将参考附图详细地说明本公开至少一实施例。应当注意的是,不同的附图中相同的附图标记将用于指代已描述的相同的元件。
51.图2为本公开至少一实施例提供的卷积运算方法的示例性流程图。
52.例如,如图2所示,本公开至少一实施例提供了一种卷积运算方法,该方法包括以下步骤s110~s160。
53.步骤s110:获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵;
54.步骤s120:将权重矩阵划分为n个子权重矩阵,这里n为正整数;
55.步骤s130:对n个子权重矩阵中的第k个子权重矩阵设置对应于第一矩阵的沿第一方向的第k偏移,这里1≤k≤n且k为整数;
56.步骤s140:基于第k偏移,使用第k个子权重矩阵对第一矩阵进行多步卷积运算,以得到多步卷积运算分别对应的多个第k子运算结果;
57.步骤s150:对多步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到每一步卷积运算对应的第一运算结果;
58.步骤s160:将多步卷积运算对应的多个第一运算结果作为至少部分输出数据并输出多个第一运算结果。
59.例如,在步骤s110中,输入数据为待进行卷积运算的数据(activation),例如,特征矩阵(feature map);为了可以在运算单元中进行并行计算,输入数据可以为二维排布的输入数据,也可以为将一维输入数据经变维处理得到的二维输入数据,本公开的实施例对
此不作限制。例如,在步骤s110中,选取输入数据中的至少部分数据作为第一矩阵,该第一矩阵包括二维排布的多个元素。
60.例如,在一些示例中,为了得到特定尺寸的至少部分输出数据,本公开至少一实施例提供的卷积运算方法还包括:对输入数据中的至少部分数据进行填充以得到第一矩阵。例如,填充操作为padding操作,填充的部分包括的元素值为0,因而不影响卷积运算结果。
61.例如,当对未填充的输入数据中的至少部分数据进行卷积运算得到的至少部分输出数据不满足特定尺寸需求时,需要先对输入数据中的至少部分数据进行填充以得到第一矩阵,再对第一矩阵进行卷积运算;当对未填充的输入数据中的至少部分数据进行卷积运算得到的至少部分输出数据满足特定尺寸需求时,可以不对输入数据中的至少部分数据进行填充;是否对输入数据中的至少部分数据进行填充也可以根据其他实际需要选择,本公开的实施例对此不作限制。
62.例如,在步骤s110中,卷积核为用于对输入数据进行卷积运算的卷积核,将卷积核对应的矩阵作为权重矩阵。例如,当卷积核为一维卷积核时,权重矩阵包括一维权重向量;当卷积核为二维卷积核时,权重矩阵可以为二维排布的元素矩阵;可以根据实际需求选择卷积核的维度,本公开的实施例对此不作限制。
63.例如,在一些示例中,在步骤s120之前,本公开至少一实施例提供的卷积运算方法还包括:对卷积核进行填充以得到权重矩阵。例如,填充操作为padding操作,填充的部分包括的元素值为0,因而不影响卷积运算结果。例如,当卷积核尺寸与输入数据对应的第一矩阵尺寸不匹配或者不满足划分要求时,需要先对卷积核进行填充以得到权重矩阵,再对权重矩阵进行划分处理;当卷积核尺寸与第一矩阵尺寸匹配或者满足划分要求时,不需要对卷积核进行填充,而是直接将卷积核作为权重矩阵;是否对卷积核进行填充也可以根据其他实际需要选择,本公开的实施例对此不作限制。
64.例如,在步骤s120中,根据芯片中运算单元计算能力的要求,将权重矩阵划分为n个子权重矩阵;每个子权重矩阵的尺寸满足运算单元计算能力的要求,从而可以直接在特定的运算单元上进行计算。
65.例如,n个子权重矩阵中的每个子权重矩阵包括至少一个元素;n个子权重矩阵包括至少一个第一子权重矩阵和至少一个第二子权重矩阵,每个第一子权重矩阵中包含的元素数量和每个第二子权重矩阵中包含的元素数量相同或者不同。例如,在一些示例中,第一子权重矩阵中包含的元素数量可以为3,第二子权重矩阵中包含的元素数量可以为5;在另一些示例中,第一子权重矩阵中包含的元素数量可以为4,第二子权重矩阵中包含的元素数量可以为4。
66.需要说明的是,只要权重矩阵划分成的多个子权重矩阵的尺寸之和不超过运算单元的硬件限制(例如,运算单元可以支持的最大卷积核尺寸可以为7
×
7、8
×
8等),即可根据实际需要为子权重矩阵选取合适的尺寸,本公开的实施例对此不作限制。例如,在一些示例中,子权重矩阵的尺寸可以为奇数(例如,3
×
1、5
×
1或7
×
1等);在另一些示例中,子权重矩阵的尺寸可以为偶数(例如,2
×
1、4
×
1或6
×
1等)。
67.例如,基于上述子权重矩阵的尺寸要求,可以第一子权重矩阵和第二子权重矩阵中包含的元素数量相同或者不同(可以为奇数或偶数);例如,第一子权重矩阵/第二子权重矩阵的尺寸组合可以为1
×
1/7
×
1,3
×
1/5
×
1,4
×
1/4
×
1等;具体可以根据实际需要进行
选择,本公开的实施例对此不作限制。
68.图3a为本公开至少一实施例提供的权重矩阵划分的一个示例的示意图。
69.例如,如图3a所示,以大尺寸一维卷积核为例,其高度为e(例如,该一维卷积核尺寸记为weight(e
×
1)),这里e为正整数且e为奇数。例如,该一维卷积核包括多个元素w1、w2、
……
、we。
70.例如,首先,对该一维卷积核在前面填充一位元素w0(w0=0),扩展成包括e+1个元素的权重矩阵weight((e+1)
×
1);然后,将权重矩阵weight((e+1)
×
1)分成n/2块weight(8
×
1)的矩阵;再将每块weight(8
×
1)进一步划分为第一子权重矩阵sub_weight(3
×
1)和第二子权重矩阵sub_weight(5
×
1),这里n为正整数且n为偶数。也即是,权重矩阵weight((e+1)
×
1)被划分为n个子权重矩阵,n个子权重矩阵包括第一子权重矩阵sub_weight(3
×
1)和第二子权重矩阵sub_weight(5
×
1),第一子权重矩阵中包含的元素数量为3,第二子权重矩阵中包含的元素数量为5。
71.例如,如图3a所示,该n个子权重矩阵包括n/2个高度为3且宽度为1的第一子权重矩阵(ww0、ww2、
……
、ww(n-2))和n/2个高度为5且宽度为1的第二子权重矩阵(ww1、ww3、
……
、ww(n-1)),从而满足了运算单元计算能力对卷积核尺寸的要求(例如,在张量核心中计算时要求子权重矩阵的高度和宽度均小于等于7)。
72.需要说明的是,图3a所示的权重矩阵划分方式仅为一个示例,在其他示例中(例如权重矩阵为二维矩阵时),权重矩阵也可以选择不同的划分方式;或者,权重矩阵也可以根据实际需要选取其他划分方式,本公开的实施例对此不作限制。
73.需要说明的是,本公开实施例提供的卷积运算方法仅针对卷积核为大尺寸的卷积核,在卷积核尺寸不满足运算单元计算能力时,对卷积核对应的权重矩阵进行划分处理;当卷积核为常规尺寸的卷积核时,不需要对卷积核对应的权重矩阵实施本公开实施例中的划分处理,而可以直接在特定的运算单元上进行计算。
74.例如,由于权重矩阵划分为第一子权重矩阵和第二子权重矩阵后,运算单元进行卷积运算时默认第一子权重矩阵例如从第一矩阵的第1行第1列的元素开始计算,同时默认第二子权重矩阵也从第一矩阵的第1行第1列的元素开始计算,这样会导致第一子权重矩阵和第二子权重矩阵分别得到的卷积运算结果累加后不同于未划分的权重矩阵的卷积运算结果,进而导致将权重矩阵划分后的卷积运算无法等效(也即,会得到错误的卷积运算结果)。
75.例如,为了解决上述问题,在步骤s130中,对每个子权重矩阵设置一个沿第一方向的偏移,以保证第一子权重矩阵和第二子权重矩阵的起始运算位置与其在未划分的权重矩阵中时的起始运算位置对应,从而可以得到正确的卷积运算结果。例如,第一方向可以为第一矩阵的列方向,也可以为第一矩阵的行方向,本公开的实施例对此不作限制。
76.例如,对于n个子权重矩阵中的第k个子权重矩阵(这里1≤k≤n且k为整数),第k个子权重矩阵为第一子权重矩阵时对应的第k偏移与第k个子权重矩阵为第二子权重矩阵时对应的第k偏移不同。例如,在一些示例中,响应于第k个子权重矩阵为第一子权重矩阵,第k偏移为0;响应于第k个子权重矩阵为第二子权重矩阵,第k偏移等于每个第一子权重矩阵中包含的元素数量。例如,以图3a中的多个子权重矩阵为例,响应于第k个子权重矩阵为第一子权重矩阵sub_weight(3
×
1),第k偏移为0;响应于第k个子权重矩阵为第二子权重矩阵
sub_weight(5
×
1),第k偏移等于第一子权重矩阵sub_weight(3
×
1)中包含的元素数量,也即是,第k偏移为3。
77.例如,对于n个子权重矩阵中的第k个子权重矩阵,沿第一方向设置相对于第一矩阵的第k偏移,从而可以在步骤s140中,基于第k偏移,将第k个子权重矩阵与第一矩阵对应位置上的元素进行多步卷积运算,进而使得n个子权重矩阵的多步卷积运算可以完全等效于未进行划分的权重矩阵的卷积运算。
78.例如,在一些示例中,多步卷积运算的步长为1;多步卷积运算的步长也可以根据实际需要选择其他步长值,本公开的实施例对此不作限制。
79.例如,在步骤s150中,将步骤s140中得到的多步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到每一步卷积运算对应的第一运算结果。
80.例如,n个子权重矩阵在每一步卷积运算得到的第一运算结果与未进行划分的权重矩阵在每一步卷积运算得到的卷积运算结果相同,从而实现了在每一步卷积运算中n个子权重矩阵的n次卷积运算与未进行划分的权重矩阵的一次卷积运算的完全等效。
81.例如,由于步骤s150中每一步卷积运算对应一个累加得到的第一运算结果,经过多步卷积运算可以得到多个第一运算结果;因此,在步骤s160中,可以将多个第一运算结果作为至少部分输出数据并输出上述多个第一运算结果。这里,输出的多个第一运算结果是输入数据中与第一矩阵对应的部分的运算结果。
82.图3b为本公开至少一实施例提供的卷积运算方法的一个示例的示意图。该卷积运算方法例如为图2所示的卷积运算方法。
83.例如,如图3b所示,在步骤s110中获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵,该卷积核例如为图3a中的大尺寸一维卷积核;在步骤s120中,按照图3a中的划分方式,将该一维卷积核对应的权重矩阵weight((e+1)
×
1)划分为n个子权重矩阵(ww0、ww1、
……
、ww(n-1));如图3b所示,n个子权重矩阵包括第一子权重矩阵(ww0、ww2、
……
、ww(n-2))和第二子权重矩阵(ww1、ww3、
……
、ww(n-1)),第一子权重矩阵中包含的元素数量为3,第二子权重矩阵中包含的元素数量为5。
84.在步骤s130中,对于n个子权重矩阵中的第k个子权重矩阵ww(k-1),沿第一方向(例如,第一方向为第一矩阵的列方向y)设置相对于第一矩阵的第k偏移(offset_y)。
85.例如,第k个子权重矩阵ww(k-1)为第一子权重矩阵时对应的第k偏移与第k个子权重矩阵ww(k-1)为第二子权重矩阵时对应的第k偏移不同。例如,响应于第k个子权重矩阵ww(k-1)为第一子权重矩阵,第k偏移为0;响应于第k个子权重矩阵ww(k-1)为第二子权重矩阵,第k偏移等于每个第一子权重矩阵中包含的元素数量,也即是,第二子权重矩阵的第k偏移为3。
86.例如,如图3b所示,子权重矩阵ww0为第一子权重矩阵,ww0对应的第1偏移为0(offset_y=0);子权重矩阵ww1为第二子权重矩阵,ww1对应的第2偏移为3(offset_y=3);
……
;子权重矩阵ww(n-2)为第一子权重矩阵,ww(n-2)对应的第(n-1)偏移为0(offset_y=0);子权重矩阵ww(n-1)为第二子权重矩阵,ww(n-1)对应的第n偏移为3(offset_y=3)。
87.例如,在步骤s140中,由于第一子权重矩阵offset_y=0,第一子权重矩阵可以直接与第一矩阵从默认起始运算位置开始进行多步卷积运算;由于第二子权重矩阵offset_y
=3,需要首先将第一矩阵向上移动3个元素的位置,使得第二子权重矩阵对应到正确的起始运算位置,再将第二子权重矩阵与第一矩阵进行多步卷积运算。
88.例如,如图3b所示,在步骤s140中,基于上述第k偏移,将第k个子权重矩阵ww(k-1)与第一矩阵对应位置上的元素进行多步卷积运算,以得到子权重矩阵ww(k-1)的多步卷积运算分别对应的多个第k子运算结果;例如,第1个子权重矩阵ww0的多步卷积运算分别对应多个第1子运算结果,第2个子权重矩阵ww1的多步卷积运算分别对应多个第2子运算结果,
……
,第n个子权重矩阵ww(n-1)的多步卷积运算分别对应多个第n子运算结果。
89.例如,在步骤s150中,以多步卷积运算中的其中一步卷积运算为例(例如图3b中的第一步卷积运算),将第一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到第一步卷积运算对应的第一运算结果。
90.例如,如图3b所示,n个子权重矩阵(ww0、ww1、
……
、ww(n-1))在第一步卷积运算得到的第一运算结果与未进行划分的权重矩阵weight((e+1)
×
1)在第一步卷积运算得到的卷积运算结果相同,从而实现了在第一步卷积运算中n个子权重矩阵的n次卷积运算与未进行划分的权重矩阵的一次卷积运算的完全等效。
91.例如,如图3b所示,由于在步骤s150中经过多步卷积运算可以得到多个第一运算结果,因而在步骤s160中,可以将多个第一运算结果作为至少部分输出数据并输出上述多个第一运算结果。
92.例如,在一些示例中,本公开至少一实施例提供的卷积运算方法还包括:将第一矩阵划分为m个第一子矩阵。例如,m个第一子矩阵中的每个第一子矩阵包括排列为r行s列的多个元素,这里r为正整数且s为正整数。
93.图4a为本公开至少一实施例提供的第一矩阵划分的一个示例的示意图。
94.例如,如图4a所示,第一矩阵包括排列为m
×
r行s列的多个元素,将第一矩阵划分为m个第一子矩阵(b0、b1、
……
、b(m-1)),m个第一子矩阵中的每个第一子矩阵包括排列为r行s列的多个元素,这里r为正整数且s为正整数。
95.需要说明的是,图4a所示的第一矩阵划分方式仅为一个示例,第一矩阵也可以根据实际需要选取其他不同的划分方式,本公开的实施例对此不作限制。
96.例如,在图2步骤s140中使用每个子权重矩阵对第一矩阵进行多步卷积运算时,多步卷积运算包括p步卷积运算,这里p为正整数。例如,对于m个第一子矩阵(b0、b1、
……
、b(m-1)),图2中步骤s140可以进一步包括:基于第k偏移,使用第k个子权重矩阵分别与m个第一子矩阵进行p步卷积运算,以得到p步卷积运算分别对应的p个第k子运算结果。
97.例如,基于上述步骤s140得到的p步卷积运算分别对应的p个第k子运算结果,进一步地,在图2中步骤s150中,对p步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,可以得到每一步卷积运算对应的第一运算结果;图2中步骤s160可以进一步包括:将p步卷积运算对应的p个第一运算结果作为对应于至少部分输出数据的第二子矩阵并输出第二子矩阵。
98.图4b为本公开至少一实施例提供的卷积运算方法的另一个示例的示意图;图4c为图4b中的权重矩阵划分的一个示例的示意图。该卷积运算方法例如为图2所示的卷积运算方法,并且卷积运算的步长例如为1。
99.例如,如图4b所示,第一矩阵包括排列为4
×
8行、8列的多个元素(即m=4,r=s=
8),将第一矩阵划分为4个第一子矩阵(b0、b1、b2、b3),每个第一子矩阵包括排列为8行8列的多个元素。例如,权重矩阵为32行1列的一维权重向量(例如,该权重矩阵尺寸记为weight(32
×
1)),该权重矩阵包括32个元素w0、w1、
……
、w31。例如,该权重矩阵可以为31行1列的一维卷积核在前面填充一位元素w0(w0=0)扩展而成的。
100.例如,如图4c所示,在步骤s120中,按照图3a中的划分方式,将权重矩阵weight(32
×
1)被划分为8个子权重矩阵(即n=8),8个子权重矩阵包括4个第一子权重矩阵(w00、w10、w20、w30)和4个第二子权重矩阵(w01、w11、w21、w31),第一子权重矩阵中包含的元素数量为3,第二子权重矩阵中包含的元素数量为5。例如,8个子权重矩阵中的元素分布如下表1所示:
101.表1 8个子权重矩阵中的元素分布
[0102][0103]
例如,在步骤s130中,对于8个子权重矩阵中的第k个子权重矩阵,沿第一方向(例如,第一方向为第一矩阵的列方向y)设置相对于第一矩阵的第k偏移(offset_y)。例如,响应于第k个子权重矩阵为第一子权重矩阵,第k偏移为0;响应于第k个子权重矩阵为第二子权重矩阵,第k偏移等于每个第一子权重矩阵中包含的元素数量,也即是,第二子权重矩阵的第k偏移为3。
[0104]
例如,如图4b所示,子权重矩阵w00为第一子权重矩阵,w00对应的第1偏移为0(offset_y=0);子权重矩阵w01为第二子权重矩阵,w01对应的第2偏移为3(offset_y=3);
……
;子权重矩阵w30为第一子权重矩阵,w30对应的第7偏移为0(offset_y=0);子权重矩阵w31为第二子权重矩阵,w31对应的第8偏移为3(offset_y=3)。
[0105]
例如,在步骤s140中,使用每个子权重矩阵对4个第一子矩阵(b0、b1、b2、b3)进行多步卷积运算,多步卷积运算包括p步卷积运算,这里p为正整数。例如,如图4b所示,由于第一子权重矩阵offset_y=0,第一子权重矩阵可以直接与4个第一子矩阵从默认起始运算位置开始进行p步卷积运算(在图4b的示例中,默认起始运算位置为第一子矩阵b0的第1行第1列元素所在的位置);由于第二子权重矩阵offset_y=3,需要首先将第一矩阵向上移动3个元素的位置,使得第二子权重矩阵对应到正确的起始运算位置,再将第二子权重矩阵与4个第一子矩阵进行p步卷积运算(在图4b的示例中,第二子权重矩阵对应的正确的起始运算位置为第一子矩阵b0的第4行第1列元素所在的位置)。
[0106]
例如,具体地,在图4b的示例中,如果第一矩阵不移动,则第二子权重矩阵w01默认从第一子矩阵b0的第1行第1列元素所在的位置开始卷积运算,第二子权重矩阵w11默认从第一子矩阵b1的第1行第1列元素所在的位置开始卷积运算,第二子权重矩阵w21默认从第一子矩阵b2的第1行第1列元素所在的位置开始卷积运算,第二子权重矩阵w31默认从第一子矩阵b3的第1行第1列元素所在的位置开始卷积运算;然而,将第一矩阵向上移动3个元素
的位置之后,第二子权重矩阵w01从第一子矩阵b0的第4行第1列元素所在的位置开始卷积运算,第二子权重矩阵w11从第一子矩阵b1的第4行第1列元素所在的位置开始卷积运算,第二子权重矩阵w21从第一子矩阵b2的第4行第1列元素所在的位置开始卷积运算,第二子权重矩阵w31从第一子矩阵b3的第4行第1列元素所在的位置开始卷积运算。因此,通过对第k个子权重矩阵设置第k偏移,保证了第一子权重矩阵和第二子权重矩阵的起始运算位置与其在未划分的权重矩阵中时的起始运算位置对应,从而可以得到正确的卷积运算结果。
[0107]
例如,在步骤s140中,对于第k个子权重矩阵,基于上述由第一子权重矩阵和第二子权重矩阵确定的第1偏移至第8偏移,使用第1个子权重矩阵w00至第8个子权重矩阵w31分别与4个第一子矩阵进行p步卷积运算。
[0108]
例如,如图4b所示,实线箭头为第一子权重矩阵(w00、w10、w20、w30)分别与4个第一子矩阵(b0、b1、b2、b3)进行p步卷积运算的过程;虚线箭头为第二子权重矩阵(w01、w11、w21、w31)分别与4个第一子矩阵(b0、b1、b2、b3)进行p步卷积运算的过程。例如,经过8个子权重矩阵与4个第一子矩阵的p步卷积运算,得到该p步卷积运算中每一步卷积运算分别对应的第1子运算结果至第8子运算结果。
[0109]
例如,进一步地,在步骤s150中,对8个子权重矩阵的p步卷积运算中的每一步卷积运算对应的第1子运算结果至第8子运算结果进行累加,可以得到每一步卷积运算对应的第一运算结果。
[0110]
例如,如图4b所示,在步骤s160中,将p步卷积运算对应的p个第一运算结果作为对应于至少部分输出数据的第二子矩阵c2,并输出第二子矩阵c2。也即是,8个子权重矩阵与4个第一子矩阵(b0、b1、b2、b3)经过p步卷积运算得到第二子矩阵c2。
[0111]
例如,8个子权重矩阵与4个第一子矩阵(b0、b1、b2、b3)在前8步卷积运算仅可以得到第二子矩阵c2的第一行元素;因此,为了得到第二子矩阵c2,在步骤s140之前,还可以对输入数据中的至少部分数据进行填充以得到第一矩阵。例如,如图4b所示,在第一子矩阵b3之后填充一个第一子矩阵b4,填充的第一子矩阵b4包括的元素值为0,因而不影响卷积运算结果。例如,8个子权重矩阵与4个第一子矩阵(b0、b1、b2、b3)以及填充的第一子矩阵b4(即从b0的最后一行到b4的倒数第二行)在最后8步卷积运算得到第二子矩阵c2的最后一行元素。
[0112]
图5为本公开至少一实施例提供的卷积运算方法的又一个示例的示意图。该卷积运算方法例如为图2所示的卷积运算方法,并且卷积运算的步长例如为1。
[0113]
例如,如图5所示,第一矩阵包括排列为8
×
8行8列的多个元素(即m=8,r=s=8),将第一矩阵划分为8个第一子矩阵(b0、b1、
……
、b7),每个第一子矩阵包括排列为8行8列的多个元素。例如,权重矩阵为32行1列的一维权重向量(例如,该权重矩阵尺寸记为weight(32
×
1)),该权重矩阵包括32个元素w0、w1、
……
、w31。例如,该权重矩阵可以为31行1列的一维卷积核在前面填充一位元素w0(w0=0)扩展而成的。
[0114]
例如,在步骤s120中,按照图3a中的划分方式,将权重矩阵weight(32
×
1)被划分为8个子权重矩阵(即n=8);如表1所示,8个子权重矩阵包括4个第一子权重矩阵(w00、w10、w20、w30)和4个第二子权重矩阵(w01、w11、w21、w31),第一子权重矩阵中包含的元素数量为3,第二子权重矩阵中包含的元素数量为5。
[0115]
例如,在步骤s130中,对于8个子权重矩阵中的第k个子权重矩阵,沿第一方向(例
如,第一方向为第一矩阵的列方向y)设置相对于第一矩阵的第k偏移(offset_y)。例如,例如,响应于第k个子权重矩阵为第一子权重矩阵,第k偏移为0;响应于第k个子权重矩阵为第二子权重矩阵,第k偏移等于每个第一子权重矩阵中包含的元素数量,也即是,第二子权重矩阵的第k偏移为3。
[0116]
例如,如图5所示,子权重矩阵w00为第一子权重矩阵,w00对应的第1偏移为0(offset_y=0);子权重矩阵w01为第二子权重矩阵,w01对应的第2偏移为3(offset_y=3);
……
;子权重矩阵w30为第一子权重矩阵,w30对应的第7偏移为0(offset_y=0);子权重矩阵w31为第二子权重矩阵,w31对应的第8偏移为3(offset_y=3)。
[0117]
例如,如图5所示,8个子权重矩阵与8个第一子矩阵(b0、b1、
……
、b7)经过8
×
p步卷积运算得到8个第二子矩阵(c0、c1、
……
、c7),这里p为正整数;因此,为了得到上述8个第二子矩阵,在步骤s140之前,在第一子矩阵b0之前依次填充2个第一子矩阵b-1和b-2,以及在第一子矩阵b7之后填充2个第一子矩阵b8和b9,填充的4个第一子矩阵b-1、b-2、b8和b9中包括的元素值为0,因而不影响卷积运算结果。
[0118]
例如,如图5所示,在步骤s140中,使用8个子权重矩阵分别对8个第一子矩阵(b0、b1、
……
、b7)以及填充的4个第一子矩阵(b-1、b-2、b8、b9)进行8
×
p步卷积运算,以得到8个第二子矩阵(c0、c1、
……
、c7)。例如,由于第一子权重矩阵offset_y=0,第一子权重矩阵可以直接与多个第一子矩阵从默认起始运算位置开始进行8
×
p步卷积运算(在图5的示例中,默认起始运算位置为第一子矩阵b-2的第1行第1列元素所在的位置);由于第二子权重矩阵offset_y=3,需要首先将第一矩阵向上移动3个元素的位置,使得第二子权重矩阵对应到正确的起始运算位置,再将第二子权重矩阵与多个第一子矩阵进行8
×
p步卷积运算(在图5的示例中,第二子权重矩阵对应的正确的起始运算位置为第一子矩阵b-2的第4行第1列元素所在的位置)。
[0119]
例如,如图5的右侧所示,第二子权重矩阵的默认起始运算位置也是第一子矩阵b-2的第1行第1列元素所在的位置,即图5右侧虚线框所在的位置,这会导致第二子权重矩阵得到错误的卷积运算结果;将第一矩阵向上移动3个元素的位置之后,即图5右侧第一矩阵实际所在的位置,使得第二子权重矩阵对应到了正确的起始运算位置(即第一子矩阵b-2的第4行第1列元素所在的位置),从而得到正确的卷积运算结果。
[0120]
例如,在步骤s150中,对8个子权重矩阵的8
×
p步卷积运算中的每一步卷积运算对应的第1子运算结果至第8子运算结果进行累加,可以得到每一步卷积运算对应的第一运算结果;在步骤s160中,将8
×
p步中每p步卷积运算对应的p个第一运算结果作为对应于至少部分输出数据的第二子矩阵(c0、c1、
……
或c7),并输出第二子矩阵。也即是,8个子权重矩阵与8个第一子矩阵(b0、b1、
……
、b7)以及4个填充的第一子矩阵(b-1、b-2、b8、b9)经过8
×
p步卷积运算得到8个第二子矩阵(c0、c1、
……
、c7)。
[0121]
例如,如图5所示,左侧第一组实线箭头为第一子权重矩阵(w00、w10、w20、w30)分别与第一子矩阵(b-2、b-1、b0、b1)进行p步卷积运算得到第1、第3、第5、第7子运算结果,右侧第一组虚线箭头为第二子权重矩阵(w01、w11、w21、w31)分别与第一子矩阵(b-2、b-1、b0、b1)进行p步卷积运算得到第2、第4、第6、第8子运算结果;将每一步卷积运算对应的第1子运算结果至第8子运算结果进行累加,得到的p个第一运算结果对应的第二子矩阵c0,并输出第二子矩阵c0。
[0122]
例如,如图5所示,左侧第二组实线箭头为第一子权重矩阵(w00、w10、w20、w30)分别与第一子矩阵(b3、b4、b5、b6)进行p步卷积运算得到第1、第3、第5、第7子运算结果,右侧第二组虚线箭头为第二子权重矩阵(w01、w11、w21、w31)分别与第一子矩阵(b3、b4、b5、b6)进行p步卷积运算得到第2、第4、第6、第8子运算结果;将每一步卷积运算对应的第1子运算结果至第8子运算结果进行累加,得到的p个第一运算结果对应的第二子矩阵c5,并输出第二子矩阵c5。
[0123]
例如,在图5的示例中,上述卷积运算过程的伪代码的一个示例如下:
[0124]
for i in(0,1,2,3)
[0125]
cn+=conv(wi0,b[n-2+i],offset_y=0)
[0126]
cn+=conv(wi1,b[n-2+i],offset_y=3)
[0127]
其中,i为第一子权重矩阵的其中一位编号,n为需要得到的第二子矩阵的编号(即cn);conv指令用于执行子权重矩阵与第一子矩阵的卷积运算。例如,cn+=conv(wi0,b[n-2+i],offset_y=0)指示第一子权重矩阵与第一子矩阵的卷积运算,cn+=conv(wi1,b[n-2+i],offset_y=3)指示第二子权重矩阵与第一子矩阵的卷积运算。例如,在图5的示例中,经过以上伪代码示例的for循环,可以完成8个子权重矩阵与对应第一子矩阵的卷积运算,以得到指定的第二子矩阵cn。
[0128]
需要说明的是,图2~图5中的权重矩阵和第一矩阵的划分方式、子权重矩阵与第一子矩阵的具体数量以及卷积运算等具体处理方式仅为一些示例,也可以根据实际需要选取其他处理方式,本公开的实施例对此不作限制。
[0129]
本公开至少一实施例提供的卷积运算方法,针对大尺寸卷积核由于芯片硬件特性的限制而不能直接在特定的运算单元上进行计算的问题,将大尺寸卷积核等效分解成多个权重矩阵,权重矩阵可以直接在芯片的运算单元上实现加速计算。例如,在特定的运算单元(例如,张量核心)上,通过一条(或几条)指令即可完成权重矩阵的卷积运算,相比大尺寸卷积核需要先传输到内存中再完成卷积运算,本公开至少一实施例提供的卷积运算方法大大提升了运算速度,并且可以适应芯片的硬件特性,充分发挥芯片算力,提高计算性能。
[0130]
图6为本公开至少一实施例提供的卷积运算方法的再一个示例的示意图。该卷积运算方法例如为图2所示的卷积运算方法。
[0131]
例如,在运算单元上进行卷积运算时,运算单元上用于执行卷积运算的程序包括多个工作组(workgroup),每一个工作组中包括多个线程(thread);同一个工作组中的线程可以按照调度单位分组,然后一组一组地调度至硬件去执行,每组调度单位被称作调度单元(cwarp)。
[0132]
例如,如图6所示,步骤s110可以进一步包括:利用第一调度单元(cwarp0)加载权重矩阵;利用第二调度单元(cwarp1)沿第一方向依序加载m个第一子矩阵(例如,b-2、b-1、b0、b1
……
,这里m个第一子矩阵包括填充的第一子矩阵b-2和b-1),这里m为正整数。
[0133]
例如,在步骤s140中使用每个子权重矩阵对第一矩阵进行多步卷积运算时,多步卷积运算包括p步卷积运算,这里p为正整数;如图6所示,步骤s140可以进一步包括:基于第k偏移,利用第三调度单元(cwarp2)执行第k个子权重矩阵与m个第一子矩阵的p步卷积运算,以得到p步卷积运算分别对应的p个第k子运算结果。
[0134]
例如,运算单元的内部还集成有累加模块(图中未示出),用于在步骤s150中执行
每一步卷积运算对应的第1子运算结果至第n子运算结果的累加,然后在步骤s160中将累加得到的多个第一运算结果作为对应于至少部分输出数据的第二子矩阵并输出第二子矩阵(例如,c0、c1、c2
……
)。
[0135]
例如,利用第一调度单元(cwarp0)、第二调度单元(cwarp1)、第三调度单元(cwarp2)和累加模块执行步骤s110~s160的具体过程详见图2~图5中的描述,在此不再赘述。
[0136]
在本公开实施例提供的卷积运算方法中,权重矩阵可以直接在运算单元上实现加速计算,因而可以直接使用运算单元内部集成的累加模块对每一步卷积运算的多个子运算结果进行累加,而不需要再去内存上完成累加过程,从而避免了运算单元与内存之间频繁的数据传输造成的芯片性能损失。
[0137]
图7为本公开至少一实施例提供的卷积运算方法的另一示例性流程图。图6所示的卷积运算方法例如为图7中卷积运算方法的一个示例。
[0138]
例如,输入数据被划分为多个部分,多个部分中的每个部分对应于一个第一子矩阵。例如,当完成输入数据的至少部分数据对应的第一矩阵的卷积运算后(例如,第一矩阵被划分为m个第一子矩阵),还可以继续加载第一子矩阵(例如,第m+1个第一子矩阵),并且在加载过程中并行地进行卷积运算,直到输入数据全部计算完成。例如,如图7所示,本公开至少一实施例提供的卷积运算方法还可以包括以下步骤s210~s220。
[0139]
步骤s210:利用第二调度单元沿第一方向加载第m+1个第一子矩阵;
[0140]
步骤s220:基于第k偏移,利用第三调度单元执行第k个子权重矩阵与第m+1个第一子矩阵的q步卷积运算,以得到q步卷积运算分别对应的多个第k子运算结果,这里q为正整数。
[0141]
例如,以图6为例,第一矩阵划分成的m个第一子矩阵例如仅包括b-2、b-1、
……
、b3,权重矩阵与第一子矩阵b-2、b-1、
……
、b3经过3
×
p步卷积运算得到3个第二子矩阵(c0、c1、c2)。
[0142]
例如,在步骤s210中,可以利用第二调度单元(cwarp1)沿第一方向继续加载第m+1个第一子矩阵(例如,第m+1个第一子矩阵为b4);然后,在步骤s220中,通过与之前m个第一子矩阵相同的卷积运算方式,基于第k偏移,利用第三调度单元(cwarp2)执行第k个子权重矩阵与第m+1个第一子矩阵的q步卷积运算,以得到q步卷积运算分别对应的多个第k子运算结果。
[0143]
例如,如图6所示,可以按照图7中的卷积运算方法,继续加载第一子矩阵b5、b6
……
,并且在加载过程中并行地进行卷积运算,以得到并输出第二子矩阵c4、c5
……
,直到输入数据全部计算完成,从而得到完整的输出数据。
[0144]
例如,执行本公开实施例提供的卷积运算方法的具体过程详见图2~图5中的描述,在此不再赘述。
[0145]
在本公开实施例提供的卷积运算方法中,可以在运算单元上实现输入数据分块加载与卷积的并行过程,从而可以实现加速计算,提升了芯片的整体计算性能。
[0146]
图8为本公开至少一实施例提供的卷积处理方法的示例性流程图。
[0147]
例如,本公开至少一实施例还提供一种卷积处理方法,用于实现全部输入数据的卷积运算,以得到完整的输出数据。例如,如图8所示,该卷积处理方法可以包括以下步骤
s310~s340。
[0148]
步骤s310:获取输入数据;
[0149]
步骤s320:将输入数据划分为多个部分;
[0150]
步骤s330:对于输入数据的每个部分所对应的第一矩阵,利用根据本公开任一实施例提供的卷积运算方法进行多步卷积运算,得到多步卷积运算对应的至少部分输出数据并输出至少部分输出数据;
[0151]
步骤s340:根据输入数据的每个部分对应的至少部分输出数据,得到完整的输出数据。
[0152]
例如,在步骤s310中,获取的输入数据包括例如图2中步骤s110获取的输入数据中的至少部分数据;在步骤s320中,在输入数据划分成的多个部分中,每个部分对应于一个第一矩阵;在步骤s330中,利用例如图2中的卷积运算方法对输入数据的每个部分所对应的第一矩阵进行多步卷积运算,得到并输出输入数据的每个部分对应的至少部分输出数据;在步骤s340中,根据输入数据的每个部分对应的至少部分输出数据,得到完整的输出数据。
[0153]
例如,对输入数据的每个部分进行本公开实施例提供的卷积运算方法的具体过程详见图2~图5中的描述,在此不再赘述。
[0154]
本公开至少一实施例提供的卷积运算方法和卷积处理方法,基于芯片的存储能力、计算能力等特性,将大尺寸卷积核等效分解成多个权重矩阵,权重矩阵可以直接在芯片上实现加速计算,从而适应了芯片的硬件特性,充分发挥了芯片算力,提高了计算性能。
[0155]
图9为本公开的至少一实施例提供的一种卷积运算装置的示意框图
[0156]
例如,如图9所示,该卷积运算装置200包括获取模块210、划分模块220、处理模块230、计算模块240、累加模块250和输出模块260。
[0157]
例如,获取模块210配置为获取输入数据中的至少部分数据对应的第一矩阵和卷积核对应的权重矩阵。例如,第一矩阵包括二维排布的多个元素。也即是,该获取模块210可以被配置为执行例如图2所示的步骤s110。
[0158]
例如,划分模块220配置为将权重矩阵划分为n个子权重矩阵,这里n为正整数。也即是,该划分模块220可以被配置为执行例如图2所示的步骤s120。
[0159]
例如,处理模块230配置为对n个子权重矩阵中的第k个子权重矩阵设置对应于第一矩阵的沿第一方向的第k偏移,这里1≤k≤n且k为整数。也即是,该处理模块230可以被配置为执行例如图2所示的步骤s130。
[0160]
例如,计算模块240配置为基于第k偏移,使用第k个子权重矩阵对第一矩阵进行多步卷积运算,以得到多步卷积运算分别对应的多个第k子运算结果。也即是,该计算模块240可以被配置为执行例如图2所示的步骤s140。
[0161]
例如,该计算模块240可以集成在运算单元(例如,张量核心)的内部,张量核心例如通过一条(或几条)指令即可完成步骤s140中的多步卷积运算,相比大尺寸卷积核需要先传输到内存中再完成卷积运算,本公开至少一实施例提供的卷积运算方法大大提升了运算速度,并且可以适应芯片的硬件特性,充分发挥芯片算力,提高计算性能。
[0162]
例如,累加模块250配置为对多步卷积运算中的每一步卷积运算对应的第1子运算结果至第n子运算结果进行累加,得到每一步卷积运算对应的第一运算结果。也即是,该累加模块250可以被配置为执行例如图2所示的步骤s150。
[0163]
例如,该累加模块250集成在运算单元的内部,可以直接在运算单元的内部完成步骤s150中每一步卷积运算对应的第1子运算结果至第n子运算结果的累加,而不需要再去内存上完成累加过程,从而避免了运算单元与内存之间频繁的数据传输造成的芯片性能损失。
[0164]
例如,输出模块260配置为将多步卷积运算对应的多个第一运算结果作为至少部分输出数据并输出多个第一运算结果。也即是,该输出模块260可以被配置为执行例如图2所示的步骤s160。
[0165]
由于在上述描述例如图2所示的卷积运算方法的过程中,已经对上述卷积运算装置200的操作所涉及的内容的细节进行了介绍,因此这里为简洁起见不再赘述,相关细节可参照以上关于图1~图8的描述。
[0166]
需要说明的是,图9所示的卷积运算装置200中上述的各个模块可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些模块可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。作为示例,参照图9描述的装置可以是pc计算机、平板装置、个人数字助理、智能手机、web应用或其它能够执行程序指令的装置,但不限于此。
[0167]
另外,尽管以上在描述卷积运算装置200时将其划分为用于分别执行相应处理的模块,然而,本领域技术人员清楚的是,各模块执行的处理也可以在装置中不进行任何具体模块划分或者各模块之间并无明确划界的情况下执行。此外,以上参照图9描述的卷积运算装置200并不限于包括以上描述的模块,而是还可以根据需要增加一些其它模块(例如,写入模块、控制模块等),或者以上模块也可被组合。
[0168]
本公开的至少一实施例还提供一种电子设备,该电子设备包括处理器和存储器;该存储器包括一个或多个计算机程序模块;一个或多个计算机程序模块被存储在存储器中并被配置为由处理器执行,一个或多个计算机程序模块包括用于实现上文所述的本公开的实施例提供的卷积运算方法或卷积处理方法。
[0169]
图10为本公开的至少一实施例提供的一种电子设备的示意框图
[0170]
例如,如图10所示,该电子设备300包括处理器310和存储器320。例如,存储器320用于存储非暂时性计算机可读指令(例如一个或多个计算机程序模块)。处理器310用于运行非暂时性计算机可读指令,非暂时性计算机可读指令被处理器310运行时可以执行根据上文所述的卷积运算方法或卷积处理方法的一个或多个步骤。存储器320和处理器310可以通过总线系统和/或其它形式的连接机构(未示出)互连。
[0171]
例如,处理器310可以是中央处理单元(cpu)、数字信号处理器(dsp)或者具有数据处理能力和/或程序执行能力的其它形式的处理单元,例如现场可编程门阵列(fpga)等;例如,中央处理单元(cpu)可以为x86或arm架构等。处理器310可以为通用处理器或专用处理器,可以控制电子设备300中的其它组件以执行期望的功能。
[0172]
例如,存储器320可以包括一个或多个计算机程序产品的任意组合,计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。易失性存储器例如可以包括随机存取存储器(ram)和/或高速缓冲存储器(cache)等。非易失性存储器例如可以包括只读存储器(rom)、硬盘、可擦除可编程只读存储器(eprom)、便携式紧致盘只读存储器(cd-rom)、usb存储器、闪存等。在计算机可读存储介质上可以存储一个
或多个计算机程序模块,处理器310可以运行一个或多个计算机程序模块,以实现电子设备300的各种功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据以及应用程序使用和/或产生的各种数据等。
[0173]
需要说明的是,本公开的实施例中,电子设备300的具体功能和技术效果可以参考上文中关于本公开至少一实施例提供的卷积运算方法和卷积处理方法的描述,此处不再赘述。
[0174]
图11为本公开的至少一实施例提供的另一种电子设备的示意框图。
[0175]
例如,如图11所示,该电子设备400例如适于用来实施本公开实施例提供的卷积运算方法或卷积处理方法。需要注意的是,图11示出的电子设备400仅是一个示例,其不会对本公开实施例的功能和使用范围带来任何限制。
[0176]
例如,如图11所示,电子设备400可以包括处理装置(例如中央处理器、图形处理器等)41,其可以根据存储在只读存储器(rom)42中的程序或者从存储装置48加载到随机访问存储器(ram)43中的程序而执行各种适当的动作和处理。在ram 43中,还存储有用于缓存系统模拟的设备400操作所需的各种程序和数据。处理装置41、rom 42以及ram 43通过总线44彼此相连。输入/输出(i/o)接口45也连接至总线44。通常,以下装置可以连接至i/o接口45:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置46;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置47;包括例如磁带、硬盘等的存储装置48;以及通信装置49。通信装置49可以允许电子设备400与其他电子设备进行无线或有线通信以交换数据。
[0177]
虽然图11示出了具有各种装置的电子设备400,但应理解的是,并不要求实施或具备所有示出的装置,电子设备400可以替代地实施或具备更多或更少的装置。
[0178]
关于电子设备400的详细说明和技术效果,可以参考上文关于卷积运算方法或卷积处理方法的相关描述,此处不再赘述。
[0179]
图12为本公开的至少一实施例提供的一种存储介质的示意图。
[0180]
例如,如图12所示,存储介质500存储有非暂时性计算机可读指令510。例如,当非暂时性计算机可读指令510由计算机执行时执行根据上文所述的卷积运算方法或卷积处理方法中的一个或多个步骤。
[0181]
例如,该存储介质500可以应用于图10所示的电子设备300中。例如,存储介质500可以为电子设备300中的存储器320。例如,关于存储介质500的相关说明可以参考图10所示的电子设备300中的存储器320的相应描述,此处不再赘述。
[0182]
对于本公开,有以下几点需要说明:
[0183]
(1)本公开实施例附图中,只涉及到与本公开实施例涉及到的结构,其他结构可参考通常设计。
[0184]
(2)在不冲突的情况下,本公开同一实施例及不同实施例中的特征可以相互组合。
[0185]
以上,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1