一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于异构协同计算核心的融合算子设计与实现方法与流程

2022-08-26 22:46:14 来源:中国专利 TAG:


1.本发明涉及一种算子融合方法,特别涉及一种基于异构协同计算核心的融合算子设计与实现方法。


背景技术:

2.在深度学习领域中,对于算力的要求很高、对计算精度的要求不高。目前,主流的算力芯片主要分为以下两类:少量复杂同构核心的中央处理器(cpu)和大量简单同构核心的图形处理器(gpu)。cpu虽然每个处理器计算精度比卷积专用计算核心更高,但是运算单元一般不多,做简单运算的速度上没什么优势;gpu则可以用一些工具让大量处理器做并行运算,在深度学习领域中,面对简单而又大量的运算时,gpu有设计上的优越性。
3.在深度学习领域中,卷积神经网络(cnn)模型由执行不同计算功能的算子组成,主要包含卷积(convolution,conv)、批归一化(batchnormalization, bn)、激活(acitivation,常见的主要有relu,tanh,sigmoid等)、池化(pooling) 等算子。其中,非卷积算子的计算量和访存量低于卷积算子,将卷积算子融合其他非卷积算子,可以降低访存量,加速卷积神经网络的运算速度。
4.主流卷积神经网络模型(resnet-50、inceptionv3、densenet等)中, conv-》bn-》relu结构块占据了网络结构的80%以上,是一种经典结构。
5.如图1所示,为上述经典结构前向计算过程中各个算子的数据依赖关系图。运算过程中,conv算子和relu算子各自的输入数据间不存在相互依赖关系;而在bn算子前向计算过程中,首先求输入数据的均值μ与方差δ
2 (μ、δ2与输入特征图x存在依赖关系);接着使用均值μ、方差δ2对每个输入数据进行归一化及缩放操作。
6.依赖关系为:
7.1、均值μ及方差δ2计算依赖于输入数据x;
8.2、归一化及缩放计算的输入则依赖于输入数据x、均值μ、方差δ2以及参数γ、β;
9.3、两部分计算存在前后计算依赖关系,因此两部分计算串行。
10.如图2所示,为bn算子反向计算过程中各个算子的数据依赖关系图。 bn算子反向计算过程中,首先求参数误差δγ,δβ;然后使用参数误差δγ、δβ计算输入数据误差δx。
11.依赖关系为:
12.1、参数误差δγ、δβ依赖于输出结果误差δy以及输入数据x;
13.2、输入数据误差δx依赖于参数误差δγ、δβ及输入数据x、输出误差δy;
14.3、两部分操作存在前后计算依赖关系,因此两部分计算串行。
15.由于反向计算过程包括求参数误差以及输入数据误差两部分计算,因此 bn层反向计算的关键访存特征是两次使用输入特征数据x及输出误差δy,分别用于计算参数误差δγ、δβ及输入数据误差δx。网络模型训练时,需要保存每层前向计算时输出结果,用于反向计算过程参数误差、输入误差的计算。
16.随着深度学习模型的加深,需要保存的中间参数逐渐增加,需要消耗较大的内存资源。由于片上缓存容量十分有限,无法保存大量数据。因此需将中间结果及参数写出到主存中,并在反向计算时依次从主存读入使用。
17.如图3所示,为非融合状态下卷积运算访存过程与数据的关系示意图,s 是算子在非融合状态下conv-》bn-》relu的访存过程,其中,bn层的输入为 x,bn层的输出为y,激活层的输出为z。
18.前向计算过程中,每层的计算结果需写出主存,用于反向计算过程中计算输入误差;反向计算过程中,每层的结果误差也需写出到主存,原因是反向计算时bn层及卷积层都需要进行两次计算,分别求参数误差及输入数据误差,如图3所示,x、δy须加载两次来计算参数误差δγ、δβ及输入误差δx;计算relu层输入误差δy不需要输入数据,直接依据结果z即可计算出其输入数据误差,因而relu层输入数据y不需要保存。
19.现有的融合算子减少了模型训练过程中的读入数据量,及,中间结果的写回,降低了访存操作。前向计算过程中,将bn层重构为两个子层:bn_a 和bn_b。其中bn_a计算均值μ与方差δ2,bn_b完成归一化与缩放,分别融合于相邻卷积层及激活层,即通过读入数据完成卷积及其附属非卷积算子的计算。
20.如图4所示,为现有融合算子的前向计算阶段示意图。首先,从主存读取相邻“前”卷积层(上一层卷积运算的输出结果)的结果x、均值μ、方差δ2、参数γ、β,计算bn_b,即完成归一化及缩放计算,将结果y直接用于激活层的计算,其输出z直接进行卷积层计算,在卷积结果x

写出到主存之前,计算bn_a,即求均值μ

与方差δ2'。
21.完成“归一化缩放-》激活层-》卷积层-》计算卷积结果的均值与方差”结构模块的前向计算过程只需要读取一次“前”卷积层的输出x及相关参数(均值、方差、缩放参数),并写回“本”卷积层的计算结果x

及相关参数。
22.现有卷积计算融合算子的前向计算阶段在通用计算核心或者卷积专用计算核心上执行的过程中,按照预处理、卷积、后处理的顺序完成串行计算,达到了减少访存量的目的。如图5所示,为卷积融合算子的串行计算过程图,从图中可以看出,计算的过程仍然是串行完成的,无法减少计算的时间。


技术实现要素:

23.本发明提供一种基于异构协同计算核心的融合算子设计与实现方法,在该算子减少访存量的基础上,将计算进行并行流水分配,通过不同计算核心的并行执行,减少计算的时间。
24.本发明的一种基于异构协同计算核心的融合算子设计与实现方法,其中,异构协同计算核心包括通用计算核心、卷积专用计算核心,融合算子以如下方法运行:
25.s1、通用计算核心将数据进行分块处理;
26.s2、通用计算核心对第一分块进行预处理计算,并将第一分块的预处理结果映射到卷积专用计算核心;
27.s3、卷积专用计算核心依据s2中第一分块的预处理结果进行卷积计算;
28.s4、通用计算核心载入第二分块,并进行预处理,并将第二分块的预处理结果映射到卷积专用计算核心;由于s3、s4分别由卷积专用计算核心、通用计算核心处理,且无相互
依赖关系,,只要s2内容完成,s3、s4可以同时开始,也可以先开始s3,再开始s4;
29.s5、卷积专用计算核心向通用计算核心反馈对第一分块进行卷积计算的结果,通用计算核心依据第一分块的卷积计算结果,对第一分块进行后处理运算获得第一结果块,并将第一结果块返回内存,同时,通用计算核心载入第三分块,并进行预处理,并将第三分块的预处理结果映射到卷积专用计算核心;
30.s6、卷积专用计算核心依据第二分块的预处理结果返回s3进行卷积计算,直至全部分块处理完成、结果块全部进行存储。
31.本发明还提供一种基于异构协同计算核心的融合算子设计与实现方法,其中,异构协同计算核心包括通用计算核心、卷积专用计算核心,融合算子以如下方法运行:
32.s1、通用计算核心将数据进行分块处理;
33.s2、通用计算核心对全部分块进行预处理计算,并将第一分块的预处理结果映射到卷积专用计算核心;
34.s3、卷积专用计算核心依据s2中第一分块的预处理结果进行卷积计算;
35.s4、通用计算核心将第二分块的预处理结果映射到卷积专用计算核心;
36.s5、卷积专用计算核心向通用计算核心反馈对第一分块进行卷积计算的结果,通用计算核心依据第一分块的卷积计算结果,对第一分块进行后处理运算获得第一结果块,并将第一结果块返回内存,同时,通用计算核心将第三分块的预处理结果映射到卷积专用计算核心;
37.s6、卷积专用计算核心依据第二分块的预处理结果返回s3进行卷积计算,直至全部分块处理完成、结果块全部进行存储。
38.本发明的一种基于异构协同计算核心的融合算子设计与实现方法,通过将卷积计算分配给卷积专用计算核心、非卷积计算分配给通用计算核心,使通用计算核心与卷积专用计算核心协同工作,提升了核心运算效率;通过对数据分块,每块卷积融合算子串行计算、多块卷积融合算子形成并行计算,使非卷积算子的计算时间与卷积算子的计算时间重合/部分重合,达到了运算加速的效果。
39.该种基于异构协同计算核心结构的融合算子计算方式,使通用计算核心与卷积专用计算核心同时流水线式工作,同一时间,同时进行不同的运算,减少了总体的运算时间,达到了计算加速的效果。
40.于一实施例中,所述融合算子包含:卷积(convolution,conv)、批归一化(batchnormalization,bn)、激活(acitivation,如:relu,tanh, sigmoid)、池化(pooling)等算子。
41.于一实施例中,所述融合算子包含conv-》bn-》relu结构块。
附图说明
42.图1为前向计算数据依赖关系示意图
43.图2为反向计算数据依赖关系示意图
44.图3为非融合状态下卷积运算访存过程与数据的关系示意图
45.图4为前向计算阶段的融合算子
46.图5为卷积融合算子的串行计算过程图
47.图6为异构协同计算核心运行示意图
48.图7为卷积融合算子的流水线式并行计算一示例的过程图
49.图8为卷积融合算子的流水线式并行计算另一示例的过程图
50.图9为前向计算数据采用其它激活算子时的依赖关系示意图
具体实施方式
51.为清楚描述,现结合附图进一步说明。
52.如图6所示,为异构协同计算核心运行示意图,异构协同计算核心包括通用计算核心、卷积专用计算核心,通用计算核心用于接收指令,并对数据进行分块处理;对各数据分块进行的处理依序包括预处理、卷积运算、后处理;通用计算核心用于对数据分块进行预处理,并将预处理结果映射到卷积专用计算核心;卷积专用计算核心用于依据预处理结果进行卷积计算,并向通用计算核心反馈卷积计算结果;通用计算核心还用于依据卷积计算结果对数据分块进行后处理,并将结果块返回内存。
53.以主流卷积神经网络模型(resnet-50、inceptionv3、densenet等) 中,具有conv-》bn-》relu结构块的网络结构为例,
54.如图1的前向计算过程中各个算子的数据依赖关系图所示。
55.conv算子的输入数据间不存在相互依赖关系,输出数据x;
56.bn算子的均值μ及方差δ2计算依赖于conv算子的输出数据x;
57.bn算子的归一化及缩放计算依赖于输入数据x、均值μ、方差δ2以及参数γ、β;
58.bn算子的两部分计算存在前后计算依赖关系,须串行计算;
59.relu算子依赖bn算子的运算结果y,输出数据z。
60.如图7所示,本发明的一种基于异构协同计算核心的融合算子设计与实现方法:
61.s1、通用计算核心从内存获取指令数据后,先将数据分成数据块1、数据块2
……
数据块n;
62.s2、通用计算核心对数据块1进行预处理(conv算子运算),并将数据块1的预处理结果x1映射到卷积专用计算核心;
63.s3、卷积专用计算核心依据预处理结果x1进行卷积(bn算子)计算,由于bn算子实质进行了2个串行运算,所需时间长;
64.s4、在卷积专用计算核心进行卷积计算同时,通用计算核心载入数据块 2,对其进行预处理,并将预处理结果x2映射到卷积专用计算核心;
65.由于s3、s4分别由卷积专用计算核心、通用计算核心处理,且无相互依赖关系,,只要s2内容完成,s3、s4可以同时开始,也可以先开始s3,再开始s4;
66.s5、卷积专用计算核心完成卷积计算后,向通用计算核心反馈卷积计算结果y1,通用计算核心依据y1对分块1进行后处理(relu算子)运算,并将结果z1返回内存;
67.同时,通用计算核心载入数据块3,对其进行预处理,并将预处理结果 x3映射到卷积专用计算核心;
68.s6、至此,当前已经完成了数据块1的全部计算,并将结果z1写回了内存,后续实质是对后续数据块从步骤s3开始重复处理:
69.在卷积专用计算核心进行卷积计算同时,通用计算核心载入数据块 (i 2),对其
进行预处理,并将预处理结果x(i 2)映射到卷积专用计算核心;
70.卷积专用计算核心完成卷积计算后,向通用计算核心反馈卷积计算结果 y(i 2),通用计算核心依据y(i 1)对分块(i 1)进行后处理(relu算子)运算,并将结果z(i 1)返回内存;
71.同时,通用计算核心载入数据块(i 2),对其进行预处理,并将预处理结果x(i 2)映射到卷积专用计算核心;
72.i从1开始直至n,即全部分块处理完成。
73.如图8所示,本发明的一种基于异构协同计算核心的融合算子设计与实现方法:
74.s1、通用计算核心从内存获取指令数据后,先将数据分成数据块1、数据块2
……
数据块n;
75.s2、通用计算核心对数据块1至n进行预处理(conv算子运算)产生预处理结果x1、x2
……
xn,并将数据块1的预处理结果x1映射到卷积专用计算核心;
76.s3、卷积专用计算核心依据预处理结果x1进行卷积(bn算子)计算,由于bn算子实质进行了2个串行运算,所需时间长;
77.s4、在卷积专用计算核心进行卷积计算同时,通用计算核心将预处理结果x2映射到卷积专用计算核心;
78.s5、卷积专用计算核心完成卷积计算后,向通用计算核心反馈卷积计算结果y1,通用计算核心依据y1对分块1进行后处理(relu算子)运算,并将结果z1返回内存;
79.同时,通用计算核心将预处理结果x3映射到卷积专用计算核心;
80.s6、至此,当前已经完成了数据块1的全部计算,并将结果z1写回了内存,后续实质是对后续数据块从步骤s3开始重复处理:
81.在卷积专用计算核心进行卷积计算同时,通用计算核心将预处理结果x (i 2)映射到卷积专用计算核心;
82.卷积专用计算核心完成卷积计算后,向通用计算核心反馈卷积计算结果 y(i 2),通用计算核心依据y(i 1)对分块(i 1)进行后处理(relu算子)运算,并将结果z(i 1)返回内存;
83.同时,通用计算核心将预处理结果x(i 2)映射到卷积专用计算核心;
84.i从1开始直至n,即全部分块处理完成。
85.假设预处理(conv算子)所需时间为t1、卷积(bn算子)所需时间为 t2、后处理(relu算子)所需时间为t3;可拆分为n个数据块的融合算子,按原融合算子方法完成时间是n*(t1 t2 t3),本发明所述的融合算子完成时间是t1 n*(t2 t3),减少了(n-1)*t1时间。
86.本发明的基于异构协同计算核心的融合算子设计与实现方法,使通用计算核心与卷积专用计算核心同时流水线式工作,同一时间,同时进行不同的运算,减少了总体的运算时间,达到了计算加速的效果。
87.本发明所述的融合算子方法,适用于包含:卷积(convolution,conv)、批归一化(batchnormalization,bn)、激活(acitivation,如:relu, tanh,sigmoid)、池化(pooling)等算子。
88.本发明所述的融合算子方法,适用于至少包含conv-》bn-》relu结构块的融合算子,还可以改变激活算子的模式,如图9所示,其中f=tanh或者 sigmoid。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献