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

计算图的多后端映射方法、装置和存储介质与流程

2022-02-22 07:56:39 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别是涉及一种计算图的多后端映射方法、装置和存储介质。


背景技术:

2.随着深度学习的发展,神经网络模型越来越复杂,计算量越来越大,如何更加高效的执行整个计算图的重要性不断提高。同时深度学习的硬件设备种类也越来越多,提供了大量的计算资源。如何充分的利用这些不同类型的后端计算设备也是急需解决的问题。如何高效的把整个计算图划分到不同的硬件后端上运行是其中一个关键性的问题,不同的后端设备上执行计算图不同的部分,所有的后端设备联合在一起高效紧密的合作。
3.目前,各种深度学习框架中计算图执行通常是在单一的计算设备上,像tensorflow,pytorch等深度学习框架在gpu后端上取得非常好的效果,但对于其他的后端设备如fpga,其支持情况都不太完善,更无法同时利用两种以上的后端设备进行训练或推理。如果想同时利用多个后端设备进行训练或者推理,首先要有一个高效合理的划分策略把整个任务部署到不同的后端上。一种常见的划分方法是按照网络模型的层次进行划分,不同的层分到不同的后端设备上运行。此种传统的划分方法可以实现多后端设备的同时运行,但可以发现设备之间只能串行执行,而且所有后端设备都需要支持相应的层的计算任务。
4.而现实情况下,由于不同的后端对任务的支持情况有很大的区别,例如fpga(可编程门阵列)后端支持的算子极少,而gpu(图形处理器)和cpu(中央处理器)后端支持大部分的算子。而且不同的算子在不同的后端设备上执行的性能也不同。简单的按层划分很难实现高效划分。


技术实现要素:

5.基于此,有必要针对上述技术问题,提供一种计算图的多后端映射方法、装置和存储介质,把深度学习中计算图划分映射到不同的后端设备上,能够最大限度的利用各种计算资源,进而提升整个系统的性能。
6.一方面,提供一种计算图的多后端映射方法,所述方法包括:
7.获取各后端支持的算子以及对所述算子的执行优先级;
8.遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端。
9.在其中一个实施例中,所述方法包括:
10.在标记后的计算图中,对被分配相同后端的算子进行合并,形成聚合算子。
11.在其中一个实施例中,所述方法包括:
12.在聚合算子对应的后端之间添加缓冲器,实现多后端之间的流水运行。
13.在其中一个实施例中,所述方法包括:
14.根据各后端的性能确定算子的执行优先级,若多个后端同时支持同一个算子,则性能高的后端对所述算子的执行优先级高。
15.在其中一个实施例中,所述方法包括:
16.分析不同后端的性能和对算子的支持能力,形成映射列表,所述映射列表包括后端、算子、算子的执行优先级之间的对应关系;
17.根据所述映射列表在图中标记每个算子能够分配的后端。
18.在其中一个实施例中,所述方法包括:
19.通过统计的方式获取不同后端对算子的支持能力,在图中优先为算子分配执行优先级最高的后端。
20.另一方面,提供了一种计算图的多后端映射装置,所述装置包括:
21.获取模块,用于获取各后端支持的算子以及对所述算子的执行优先级;
22.映射模块,用于遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端。
23.在其中一个实施例中,所述映射模块还用于:
24.在标记后的计算图中,对被分配相同后端的算子进行合并,形成聚合算子。
25.在其中一个实施例中,所述映射模块还用于:
26.在聚合算子对应的后端之间添加缓冲器,实现多后端之间的流水运行。
27.又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
28.获取各后端支持的算子以及对所述算子的执行优先级;
29.遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端。
30.上述计算图的多后端映射方法、服务器和存储介质,通过获取各后端支持的算子以及对所述算子的执行优先级;遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端,能够最大限度的利用各种计算资源,进而提升整个系统的性能。
附图说明
31.图1为一个实施例中计算图的多后端映射方法流程示意图;
32.图2为一个实施例中计算图中算子的后端分配示意图;
33.图3为一个实施例中映射列表的示意图;
34.图4为一个实施例中算子聚合示意图;
35.图5为一个实施例中算子聚合后在后端之间添加buffer进行流水运行的示意图;
36.图6为一个实施例中计算图的后端映射装置的结构框图。
具体实施方式
37.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
38.在一个实施例中,如图1所示,提供一种计算图的多后端映射方法,所述方法包括:
39.步骤s1:获取各后端支持的算子以及对所述算子的执行优先级。
40.具体地,每个后端支持不同的算子,对于同一个算子,有些后端支持该算子,有些后端设备不支持该算子,并且在多个后端均支持同一个算子的情况下,这些后端在执行该算子时,其执行的优先级不同。本步骤中获取后端支持的算子以及对这些算子的执行优先级,以用于后续的设备分配。
41.步骤s2:遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端。
42.具体地,参考图2,图中的算子编号为a,b,c,

,i,j。
43.若此时服务器上有三种类型的后端设备cpu、gpu和fpga,由于不同的后端设备对算子的支持情况和性能都不同,分别统计不同后端的算子支持情况及优先级,在图中标记出每个算子支持的后端,标记后的计算图如图2所示。
44.上述计算图的后端映射方法,通过获取各后端支持的算子以及对所述算子的执行优先级;遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端,能够最大限度的利用各种计算资源,进而提升整个系统的性能。
45.在其中一个实施例中,所述方法包括:
46.在标记后的计算图中,对被分配相同后端的算子进行合并,形成聚合算子。
47.具体地,在整个计算图遍历完成后端设备标记后,每个算子都有相应的计算后端,但是如果每次执行一个算子都启动相应的后端,则会频繁的启动后端,这个过程非常耗时,对性能有较大的影响。为了减少后端的启动次数,我们采用一种聚类的策略,把标记后端相同的算子进行合并,形成一个聚合算子。在聚合过程中要遵循最小邻域原则,即不能跨越不同后端的算子进行聚合。图3展示了相同后端的算子聚合。由于a,b和f,g算子中间跨越了d算子,所以a,b和f,g不能聚合到一起。聚合完成后的计算图依赖关系如图3的右半图所示。整个计算过程只需要启动两次gpu后端和一次fpga后端。大大缩减了后端的启动次数。
48.在其中一个实施例中,所述方法包括:
49.在聚合算子对应的后端之间添加缓冲器,实现多后端之间的流水运行。
50.具体地,聚合完后还可以通过在后端中间添加多个buffer实现后端之间的流水运行。具体流水运行的过程如图4所示。
51.在其中一个实施例中,所述方法包括:
52.根据各后端的性能确定算子的执行优先级,若多个后端同时支持同一个算子,则性能较高的后端对所述算子的执行优先级较高。
53.具体地,分析不同后端对算子的支持情况和性能比较,分别标记算子在该后端上是否支持以及执行优先级,若两个设备同时支持同一个算子,则性能较高的后端优先级要比另一个高;然后遍历整个计算图,按照算子在不同后端的支持情况和优先级进行标记;标记出图中每一个算子可以在哪个后端上执行以及对于的优先级。
54.在其中一个实施例中,所述方法包括:
55.分析不同后端的性能和对算子的支持能力,形成映射列表,所述映射列表包括后端、算子、算子的执行优先级之间的对应关系;
56.根据所述映射列表在图中标记每个算子能够分配的后端。
57.具体地,如图5所示,映射列表列出了不同后端支持的不同算子和相同算子的优先级,其中标记格式为:支持算子名:优先级。优先级大小与性能强相关。
58.通过图5可以看出,fpga后端支持d,e,f,h,k,m算子,且d,e,h,m算子的性能要好于其他后端,优先级标记为1。而f算子的性能低于gpu后端上f算子的性能,优先级标记为2。
59.在其中一个实施例中,所述方法包括:
60.通过统计的方式获取不同后端对算子的支持能力,在图中优先为算子分配执行优先级最高的后端。
61.具体地,可以通过统计的方式获取不同后端对算子的支持能力,在得到不同后端的算子支持情况及优先级以后,遍历整个计算图然后在图上标记每个算子可以部署的后端以及优先级。在遍历计算图的过程中,根据后端的支持情况和优先级列表,为每个算子首先分配算子优先级为1的后端设备,即分配优先级最高的后端。
62.应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
63.在一个实施例中,如图6所示,提供了一种计算图的多后端映射装置,所述装置包括:
64.获取模块601,用于获取各后端支持的算子以及对所述算子的执行优先级;
65.映射模块602,用于遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端。
66.在其中一个实施例中,所述映射模块602还用于:
67.在标记后的计算图中,对被分配相同后端的算子进行合并,形成聚合算子。
68.在其中一个实施例中,所述映射模块602还用于:
69.在聚合算子对应的后端之间添加缓冲器,实现多后端之间的流水运行。
70.在其中一个实施例中,所述获取模块601还用于:
71.根据各后端的性能确定算子的执行优先级,若多个后端同时支持同一个算子,则性能较高的后端对所述算子的执行优先级较高。
72.在其中一个实施例中,
73.所述获取模块601分析不同后端的性能和对算子的支持能力,形成映射列表,所述映射列表包括后端、算子、算子的执行优先级之间的对应关系;
74.所述映射模块602根据所述映射列表在图中标记每个算子能够分配的后端。
75.在其中一个实施例中,
76.所述获取模块601通过统计的方式获取不同后端对算子的支持能力,所述映射模块602在图中优先为算子分配执行优先级最高的后端。
77.关于计算图的后端映射装置的具体限定可以参见上文中对于计算图的后端映射方法的限定,在此不再赘述。上述计算图的后端映射装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处
理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
78.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
79.获取各后端支持的算子以及对所述算子的执行优先级;
80.遍历计算图,根据各后端支持的算子以及对所述算子的执行优先级在图中标记每个算子能够分配的后端。
81.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
82.在标记后的计算图中,对被分配相同后端的算子进行合并,形成聚合算子。
83.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
84.在聚合算子对应的后端之间添加缓冲器,实现多后端之间的流水运行。
85.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
86.根据各后端的性能确定算子的执行优先级,若多个后端同时支持同一个算子,则性能较高的后端对所述算子的执行优先级较高。
87.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
88.分析不同后端的性能和对算子的支持能力,形成映射列表,所述映射列表包括后端、算子、算子的执行优先级之间的对应关系;
89.根据所述映射列表在图中标记每个算子能够分配的后端。
90.在一个实施例中,计算机程序被处理器执行时还实现以下步骤:
91.通过统计的方式获取不同后端对算子的支持能力,在图中优先为算子分配执行优先级最高的后端。
92.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
93.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
94.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
再多了解一些

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

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

相关文献