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

一种算子处理方法、装置、设备、系统及存储介质与流程

2022-06-01 17:38:14 来源:中国专利 TAG:


1.本公开涉及信息技术领域,尤其涉及一种算子处理方法、装置、设备、系统及存储介质。


背景技术:

2.现有技术中,机器学习的计算任务,例如机器学习模型的训练任务和推理任务是由各类算子组成的。
3.通常情况下,算子的计算效率决定了计算任务的计算效率。因此,现有技术可以通过编译优化技术提高算子的计算效率。编译优化技术有两种接入方式:一种接入方式为即时编译(just in time,jit),另一种接入方式为离线编译(ahead-of-time,aot)。
4.但是,即时编译需要占用计算任务的计算资源,从而影响计算任务的性能。离线编译可以提前编译算子,但是提前编译的算子可能并不在计算任务中出现,从而导致算子的命中率较低。


技术实现要素:

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.第六方面,本公开实施例提供一种系统,该系统包括如第一方面所述的第一设备、以及如第二方面所述的第二设备。
32.第七方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现第一方面或第二方面所述的方法。
33.本公开实施例提供的算子处理方法、装置、设备、系统及存储介质,通过第一设备向中心化系统发送针对第一算子的查询请求,使得中心化系统可以根据第一设备的查询请求判断第一算子的最佳实现是否存在,在第一算子的最佳实现存在的情况下,中心化系统可以将第一算子的最佳实现发送给第一设备;在第一算子的最佳实现不存在的情况下,中心化系统可以通过计算加速库、编译优化技术、人工优化方式中的至少一种确定第一算子的最佳实现。从而使得执行计算任务的第一设备可以在中心化系统中实时查询该计算任务中的算子的最佳实现,在该算子的最佳实现不存在的情况下,中心化系统可以确定该算子的最佳实现。由于中心化系统在确定算子最佳实现的过程中并不占用第一设备中执行的计算任务的计算资源,因此,提高了计算任务的性能。另外,由于中心化系统中可以累积有大量的在历史任务执行过程中遇到的算子的编译优化结果,因此,算子的命中率会随着中心化系统累积的算子数量的增加而不断提高。
附图说明
34.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
35.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
36.图1为现有技术中即时编译接入计算任务的同步方式的流程图;
37.图2为现有技术中即时编译接入计算任务的异步方式的流程图;
38.图3为现有技术中离线编译接入计算任务的流程图;
39.图4为本公开实施例提供的算子处理方法流程图;
40.图5为本公开实施例提供的一种应用场景的示意图;
41.图6为本公开实施例提供的另一种应用场景的示意图;
42.图7为本公开实施例提供的另一种算子处理方法流程图;
43.图8为本公开实施例提供的另一种算子处理方法流程图;
44.图9为本公开实施例提供的另一种算子处理方法流程图;
45.图10为本公开实施例提供的另一种算子处理方法流程图;
46.图11为本公开实施例提供的中心化系统的结构示意图;
47.图12为本公开实施例提供的又一种算子处理方法流程图;
48.图13为本公开实施例提供的在云服务基础上引入客户端的示意图;
49.图14为本公开实施例提供的又一种算子处理方法流程图;
50.图15为本公开实施例提供的又一种算子处理方法流程图;
51.图16为本公开实施例提供的算子处理装置的结构示意图;
52.图17为本公开实施例提供的另一种算子处理装置的结构示意图;
53.图18为本公开实施例提供的一种设备的结构示意图。
具体实施方式
54.为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
55.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
56.通常情况下,机器学习的计算任务是由各类算子组成的。算子(operators,op)在人工智能计算中是指一个对张量的操作。张量(tensor)是指一个多维的数据存储形式,例如,向量可以看成是一维张量,矩阵可以看成是两维的张量。算子的计算效率决定了计算任务的计算效率。因此,现有技术提出了一些能够提高算子计算效率的方法,具体包括如下几种方法:一种方法是通过计算加速库提高算子的计算效率。另一种方法是通过编译优化技术提高算子的计算效率。再一种方法是通过人工优化的方法提高算子的计算效率。
57.例如,硬件厂商通常会提供计算加速库以提高算子的计算效率。但是这些计算加速库主要为常见算子和尺寸提供了高效的实现,无法覆盖实际业务中出现的所有算子。其中,尺寸(shape)用来表示张量的每个维度元素的数量。计算加速库(vendor library)具体是指硬件厂商开发的计算库,用于加速高性能计算以及人工智能任务的计算。
58.随着人工智能(artificial intelligence,ai)模型结构的快速演化以及底层计算硬件的层出不穷,计算加速库无法完全覆盖实际业务中出现的所有算子。虽然通过专家人工实现算子也能够获得较好的性能,但基于人工优化的方法会消耗人力,难以规模化的
对大量算子生成高效的代码。
59.当前ai编译优化技术已经成为一个获得广泛关注的技术方向。利用编译优化技术可以规模化的为算子生成高效代码,从而解决人工优化难以规模化的问题,以及计算加速库无法覆盖所有算子并且实际场景中出现的尺寸可能没有高效实现的问题。编译优化技术一般指在算子优化过程中采用了自动或者半自动的代码生成方法,以替代人工优化的方法。也就是说,利用编译优化技术可以自动生成代码,基于编译优化技术自动生成算子代码是指通过特定算法在优化空间(optimization space)中遍历和搜索可能的算子实现即调度,并从可能的算子实现即调度中选择出最佳调度(best schedule)的过程。也就是说,自动生成代码的过程是一个在优化空间中搜索最佳调度的过程。其中,优化空间是指探索最佳调度的整个搜索空间,即搜索空间可以称之为优化空间。优化空间的大小直接影响了最终代码的效率。更大的优化空间意味着有更大机会探索到更高效的代码,但代价是消耗大量算力以及增加了搜索时间。
60.另外,调度(schedule)是自动代码生成技术的核心。对于一个算子,调度可以描述如何具体做计算。通常情况下,一个算子有多种计算方式,多种计算方式可以计算得到相同的结果,但是不同计算方式的执行效率却相差较大,因此,算子的一种计算方式叫做该算子的一种调度。
61.具体的,计算平台每天处理大量的计算任务,计算任务包括:训练任务和推理任务。具体的,针对训练任务中的算子和推理任务中的算子还可以采用编译优化技术取得更高效的执行效率。其中,编译优化技术有两种接入方式:一种接入方式为即时编译(just in time,jit),另一种接入方式为离线编译(ahead-of-time,aot)。
62.即时编译也可以称为动态编译,具体是指在计算任务运行时对实时遇到的算子做编译优化。即时编译会占用当前计算任务的计算资源,从而影响线上的计算任务的性能。也就是说,在计算任务运行时,边运行边编译,但是编译时需要占用运行时的计算资源。
63.离线编译也可以称为提前编译,离线编译不需要占用计算任务的计算资源,但需要在部署前对计算任务中可能会遇到的算子提前做编译优化。而提前编译的算子可能在实际运行中并不会出现,从而出现算子命中率低的情况。也就是说,在计算任务运行前编译,可以避免在运行时的编译过程造成的计算资源被占用。下面结合具体的流程图对即时编译和离线编译进行介绍。
64.编译优化通过即时编译接入计算任务是比较常见的方案。例如,在计算平台遇到计算任务中新的算子时,会在本地以同步或异步的方式触发编译优化探索。探索结束后可以将编译优化的结果记录在本地,供本地复用该算子的编译优化结果。其中,即时编译接入计算任务的同步方式包括如图1所示的如下步骤:
65.s101、计算平台执行机器学习训练任务或推理任务。
66.s102、计算平台执行训练任务或推理任务中的算子o。
67.s103、判断本地是否有算子o的编译优化结果,若是则执行s106,否则执行s104。
68.s104、同步对算子o做编译优化。
69.s105、在本地保存算子o的编译优化结果,并结束探索。
70.s106、返回算子o的编译优化结果。
71.即时编译接入计算任务的异步方式包括如图2所示的如下步骤:
72.s201、计算平台执行机器学习训练任务或推理任务。
73.s202、计算平台执行训练任务或推理任务中的算子o。
74.s203、判断本地是否有算子o的编译优化结果,若是则执行s206,否则执行s204和s205。
75.s204、异步对算子o做编译优化。
76.s205、确定按照默认方式执行算子o。
77.其中,默认方式可以理解为算子的默认代码,该默认代码可能并不是最佳的代码。
78.s206、返回算子o的编译优化结果。
79.s207、在本地保存算子o的编译优化结果,并结束探索。
80.根据图1和图2可知,即时编译的算子即是实际运行中遇到的算子,避免了编译实际中不会出现的算子的问题。但不管是同步方式还是异步方式均会占用当前计算资源,影响线上计算任务的性能。传统即时编译的方法适用范围比较有限,例如,适合用在编译优化开销较小的算子上,编译开销过大会阻塞计算任务。另外,需要模型中出现的算子和尺寸比较稳定,否则会大量触发编译,影响计算任务的性能。另外,即时编译还有一个比较明显的局限是同一个算子的编译优化结果无法在不同计算任务之间进行复用,例如,对于一个计算任务中的某个算子搜索到了最佳调度,在执行下一个计算任务时,若下一个计算任务也包括该算子,那么在执行下一个计算任务时还需要重新搜索该算子的最佳调度。而ai模型中的计算任务尤其是训练任务的一个典型特点是多次重复训练和执行,用于用户选择和调整模型超参数。因此,即时编译的优化策略在每次任务执行时均需重新编译,无法复用,从而导致计算资源的浪费;同时不同的ai任务之间存在较多相似的算子,而这些算子同样在每次任务执行时需要重新编译,由于计算平台每天接收大量的计算任务,相同的算子会在不同计算任务中反复出现,重复编译会造成巨大的算力浪费。
81.图3所示为离线编译接入计算任务的流程图,离线编译接入计算任务的过程包括如下步骤:
82.s301、计算平台对训练任务或推理任务中可能出现的算子做编译优化。
83.s302、计算平台将编译优化结果打包并载入当前执行的训练任务或推理任务中。
84.s303、计算平台执行机器学习训练任务或推理任务。
85.s304、计算平台执行训练任务或推理任务中的算子o。
86.s305、判断本地是否有算子o的编译优化结果,若是则执行s306,否则执行s307。
87.s306、返回算子o的编译优化结果。
88.s307、确定按照默认方式执行算子o。
89.根据图3可知,离线编译是在计算任务运行前对该计算任务中可能会遇到的算子提前做编译优化,并将编译优化结果打包、插入计算任务中。当计算任务处理算子时先判断本地是否有该算子的编译优化结果,如果有就用该编译优化结果替换原本的执行方式。离线编译的优点是可以避免运行时编译造成的资源消耗。离线编译的缺点是:对计算任务中出现的算子需要提前准备,在部署时,需要打包并插入到该计算任务中;另一方面,提前准备的算子,可能在实际运行中不会出现,导致命中率低的问题。
90.传统离线优化的方式适合对重点任务做优化。对于重点任务允许有足够的资源对其中的算子做离线优化探索,并将结果保存在任务中。整个过程成本较高。
91.由于计算平台每天接收大量机器学习的训练任务和推理任务,需要处理海量算子。大量算子会在同一个模型的不同机器上反复出现;或者相同算子在不同的模型上反复出现;或者相同模型被反复调用导致相同算子反复出现,这三种情况都会带来重复编译造成巨大算力浪费的问题。
92.针对上述关于即时编译需要占用计算任务的计算资源,从而影响计算任务的性能。离线编译可以提前编译算子,但是提前编译的算子可能并不在计算任务中出现,从而导致算子的命中率较低的问题,本公开实施例提供了一种算子处理方法,下面结合具体的实施例对该方法进行介绍。
93.图4为本公开实施例提供的算子处理方法流程图。该方法可以适用于如图5所示的应用场景。如图5所示,第一设备51和第二设备52之间可以进行通信交互。
94.第一设备51具体可以是如上所述的计算平台,该计算平台用于执行计算任务,例如,训练任务或推理任务。其中,训练任务例如可以是训练机器学习模型的任务。推理任务例如可以是采用训练完成的机器学习模型进行计算的任务,例如,语义识别、自然语言处理、文本识别等。另外,计算平台可以是一个计算机或计算机集群。在计算平台是一个计算机的情况下,该计算平台中可运行一个或多个计算任务。在计算平台是计算机集群的情况下,该计算机集群可包括多个计算机,每个计算机中可运行一个或多个计算任务。此外,计算平台可以是用户自己的设备,或者计算平台可以是用户租赁的服务器,该服务器可以是虚拟机、云服务器等。
95.第二设备52具体可以是中心化系统,中心化系统也可以是一个计算机或计算机集群。该中心化系统可统一对算子做离线编译、并保存离线编译结果。此外,该中心化系统还可以以云服务的形式对外提供服务。也就是说,第二设备52可以给第一设备51提供云服务。该方法具体步骤如下:
96.s401、接收第一设备针对第一算子的查询请求。
97.例如,第一设备51在执行计算任务的过程中遇到了该计算任务中的某个算子,该算子记为第一算子,第一设备51的本地没有第一算子的最佳实现,此时,第一设备51可以向第二设备52发送针对第一算子的查询请求,查询请求用于指示第二设备52查询第一算子的最佳实现。
98.s402、根据所述查询请求,判断所述第一算子的最佳实现是否存在。
99.例如,在第二设备52接收到该查询请求的情况下,第二设备52可以判断第二设备52的本地或第二设备52关联的数据库53中是否已存在该第一算子的最佳实现。具体的,数据库53可以集成在第二设备52中,或者,数据库53和第二设备52可以是相互独立的设备,并且数据库53和第二设备52之间可以进行通信连接。
100.s403、若所述第一算子的最佳实现存在,则将所述第一算子的最佳实现发送给所述第一设备。
101.例如,在第二设备52的本地或数据库53中存在第一算子的最佳实现的情况下,第二设备52可以将该第一算子的最佳实现发送给第一设备51。该第一算子的最佳实现可以包括编译优化的调度、代码、或者计算加速库的调用方式。另外,第一算子的最佳实现还可以包括相应的执行时间。其中,调度可以是算子和代码之间的中间表示,调度可以进一步转换成代码。
102.s404、若所述第一算子的最佳实现不存在,则通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现。
103.例如,在第二设备52的本地或数据库53中不存在第一算子的最佳实现的情况下,第二设备52可以通过计算加速库、编译优化技术、人工优化方式中的至少一种确定第一算子的最佳实现。
104.本公开实施例通过第一设备向中心化系统发送针对第一算子的查询请求,使得中心化系统可以根据第一设备的查询请求判断第一算子的最佳实现是否存在,在第一算子的最佳实现存在的情况下,中心化系统可以将第一算子的最佳实现发送给第一设备;在第一算子的最佳实现不存在的情况下,中心化系统可以通过计算加速库、编译优化技术、人工优化方式中的至少一种确定第一算子的最佳实现。从而使得执行计算任务的第一设备可以在中心化系统中实时查询该计算任务中的算子的最佳实现,在该算子的最佳实现不存在的情况下,中心化系统可以确定该算子的最佳实现。由于中心化系统在确定算子最佳实现的过程中并不占用第一设备中执行的计算任务的计算资源,因此,提高了计算任务的性能。另外,由于中心化系统中可以累积有大量的在历史任务执行过程中遇到的算子的编译优化结果,因此,算子的命中率会随着中心化系统累积的算子数量的增加而不断提高。
105.在上述实施例的基础上,通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现,包括:通过计算加速库、编译优化技术、人工优化方式中的至少一种探索所述第一算子的最佳实现。
106.例如,在第二设备52的本地或数据库53中不存在第一算子的最佳实现的情况下,第二设备52可以触发其后台以异步的方式离线探索第一算子的最佳实现。其中,第一算子的最佳实现可能来自于计算加速库,也可能来自于编译优化,还有可能来自于人工优化。因此,探索第一算子的最佳实现的过程具体可以是通过计算加速库、编译优化技术、人工优化方式中的至少一种探索第一算子的最佳实现的过程。该探索过程可以是异步离线探索,也可以是同步离线探索。下面以异步离线探索进行示意性说明。
107.可选的,通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现,包括:在计算加速库中探索所述第一算子的最佳实现,得到所述第一算子的第一实现;通过多种编译优化技术中的每一种编译优化技术分别探索所述第一算子的最佳实现,并根据所述每一种编译优化技术的探索结果得到所述第一算子的第二实现;通过人工优化方式探索所述第一算子的最佳实现,得到所述第一算子的第三实现;根据所述第一实现、所述第二实现和所述第三实现中的至少一种,确定所述第一算子的最佳实现。
108.例如,在第二设备52的本地或数据库53中不存在第一算子的最佳实现的情况下,第二设备52可以通过计算加速库、编译优化技术、人工优化方式中的至少一种异步离线探索所述第一算子的最佳实现。具体的,第二设备52可以在计算加速库中异步离线探索该第一算子的最佳实现,得到第一算子的第一实现。具体的,该计算加速库可以包括多个算子、以及多个算子中每个算子的调用方式、执行时间、代码等。其中,每个算子的调用方式可以有多种,在该算子的调用方式不同的情况下,该算子的执行时间可能相同,也可能不同。在该算子的调用方式不同的情况下,该算子的代码可能不同。第二设备52在计算加速库中异步离线探索该第一算子的最佳实现的情况下,具体可以根据该第一算子的标识信息确定该计算加速库中是否包括该第一算子。在该计算加速库包括该第一算子的情况下,第二设备
52可以进一步从该计算加速库中确定出该第一算子的性能最佳的调用方式、以及相应的执行时间和代码等。进一步,第二设备52可以将该第一算子的性能最佳的调用方式、以及相应的执行时间和代码等作为该第一算子的第一实现。可选的,该第一算子的第一实现包括如下至少一种:在该计算加速库中异步离线探索到的该第一算子的最佳调用方式、该第一算子的第一执行时间、该第一算子的第一代码。其中,该第一算子的最佳调用方式具体是指采用计算加速库得到的该第一算子的性能最佳的调用方式。第一算子的第一执行时间具体是指采用该第一算子的性能最佳的调用方式的情况下,第一算子的执行时间。该第一算子的第一代码具体是指采用该第一算子的性能最佳的调用方式的情况下,第一算子的代码。进一步,第二设备52可以将该第一算子的最佳调用方式、该第一算子的第一执行时间、该第一算子的第一代码记录在本地或数据库53中。
109.另外,第二设备52可以遍历多种编译优化技术,即采用该多种编译优化技术中的每一种编译优化技术分别异步离线探索该第一算子的最佳实现。其中,不同的编译优化技术在异步离线探索该第一算子的最佳实现之后得到的异步离线探索结果可能不同。进一步,第二设备52可以根据每一种编译优化技术分别得到的异步离线探索结果得到该第一算子的第二实现。例如,每一种编译优化技术得到的异步离线探索结果可以包括该第一算子的调度方式、该编译优化技术自动生成的该第一算子的代码、以及该第一算子的执行时间等。该第一算子的第二实现可以是使得该第一算子的调度方式为最佳调度方式的异步离线探索结果。可选的,该第一算子的第二实现包括如下至少一种:该第一算子的最佳调度方式、该第一算子的第二执行时间、该第一算子的第二代码。其中,该第一算子的最佳调度方式可以是通过多种编译优化技术分别得到的该第一算子的调度方式中的最佳调度方式。该第一算子的第二执行时间可以是该第一算子的调度方式采用该最佳调度方式时,该第一算子的执行时间。该第一算子的第二代码可以是该第一算子的调度方式采用该最佳调度方式时,该最佳调度方式对应的编译优化技术自动生成的该第一算子的代码。进一步,第二设备52可以将该第一算子的最佳调度方式、该第一算子的第二执行时间、该第一算子的第二代码记录在本地或数据库53中。
110.此外,第二设备52还可以通过人工优化方式异步离线探索第一算子的最佳实现,得到该第一算子的第三实现。可选的,该第一算子的第三实现包括如下至少一种:所述第一算子的第三代码、所述第一算子的第三执行时间。其中,第一算子的第三代码可以是通过手工优化方式得到的第一算子的代码,第一算子的第三执行时间可以是通过手工优化方式得到的第一算子的执行时间。进一步,第二设备52可以将所述第一算子的第三代码、所述第一算子的第三执行时间记录在本地或数据库53中。
111.可选的,所述第一算子的最佳实现是所述第一实现、所述第二实现和所述第三实现中使得所述第一算子的执行时间最短的实现。
112.例如,所述第一实现包括该第一算子的第一执行时间,所述第二实现包括该第一算子的第二执行时间,所述第三实现包括该第一算子的第三执行时间。第二设备52可以比较该第一执行时间、该第二执行时间和该第三执行时间,并将第一实现、第二实现和第三实现中执行时间最短的实现确定为第一算子的最佳实现。
113.可选的,在所述第一算子的最佳实现为所述第一实现的情况下,所述第一算子的最佳实现包括如下至少一种:在所述计算加速库中探索到的所述第一算子的最佳调用方
式、所述第一算子的第一执行时间、所述第一算子的第一代码。
114.例如,该第一算子的第一实现包括如下至少一种:在该计算加速库中异步离线探索到的该第一算子的最佳调用方式、该第一算子的第一执行时间、该第一算子的第一代码。在该第一算子的最佳实现为该第一实现的情况下,该第一算子的最佳实现包括如下至少一种:在该计算加速库中异步离线探索到的该第一算子的最佳调用方式、该第一算子的第一执行时间、该第一算子的第一代码。
115.可选的,在所述第一算子的最佳实现为所述第二实现的情况下,所述第一算子的最佳实现包括如下至少一种:所述第一算子的最佳调度方式、所述第一算子的第二执行时间、所述第一算子的第二代码;其中,所述第一算子的最佳调度方式是通过所述每一种编译优化技术分别得到的所述第一算子的调度方式中的最佳调度方式。
116.例如,该第一算子的第二实现包括如下至少一种:该第一算子的最佳调度方式、该第一算子的第二执行时间、该第一算子的第二代码。在该第一算子的最佳实现为该第二实现的情况下,该第一算子的最佳实现包括如下至少一种:该第一算子的最佳调度方式、该第一算子的第二执行时间、该第一算子的第二代码。其中,该第一算子的最佳调度方式通过多种编译优化技术分别得到的该第一算子的调度方式中的最佳调度方式。
117.本实施例通过计算加速库、编译优化技术、人工优化方式中的至少一种异步离线探索所述第一算子的最佳实现,使得第二设备例如中心化系统离线探索第一算子的最佳实现的过程与第一设备执行计算任务的过程是异步的,从而使得中心化系统在离线探索第一算子的最佳实现的过程并不占用第一设备中执行的计算任务的计算资源,因此,提高了计算任务的性能。另外,通过中心化系统以离线的方式探索第一算子的最佳实现,使得中心化系统在探索第一算子的最佳实现的过程中,中心化系统还可以接收来自于第一设备的查询请求,以及对该查询请求进行处理,提高了中心化系统的处理效率。
118.在一些实施例中,在第二设备52的本地或第二设备52关联的数据库53中存在算子的最佳实现的情况下,或者在第一设备51中缓存有算子的最佳实现的情况下,可以认为算子命中。在这种情况下,第二设备52或第一设备51可以向终端设备发送通知消息,该通知消息用于通知用户算子已命中。进一步,终端设备可以与用户进行交互,例如,通知用户算子已命中。其中,终端设备具体包括但不限于智能手机、掌上电脑、平板电脑、带显示屏的可穿戴设备、台式机、笔记本电脑、一体机、智能家居设备等。另外,本实施例并不限定终端设备与用户之间的交互方式,例如,可以是语音交互方式、手势交互方式、用户界面交互方式等。
119.通常情况下,算子命中后可以直接展示给用户而不需向用户收费。但是,在一些情况下,第二设备52或第一设备51可以通过终端设备提示用户算子命中后需要收费。例如,在算子命中后,第二设备52或第一设备51可以将命中的算子的最佳实现推送给终端设备,终端设备在展示算子命中结果即算子最佳实现的同时提示用户执行付费操作。
120.此外,第一设备51或第二设备52还可以统计每个算子的复用情况(例如,算子被多少个计算任务所复用),以及每个算子的命中率。进一步,第一设备51或第二设备52可以将每个算子的复用情况、以及每个算子的命中率发送给终端设备。在用户需要某个算子的最佳实现时,可以通过终端设备查询该算子的命中率,从而使得用户进一步决定是否对该算子进行优化。
121.根据上述实施例可知,第二设备52可以通过计算加速库、编译优化技术、人工优化
方式中的至少一种来确定例如离线探索算子的最佳实现。因此,在一些实施例中,第二设备52还可以对计算加速库、编译优化技术、人工优化方式等不同优化方式的性能进行对比。例如,第二设备52可以分别统计计算加速库、编译优化技术、人工优化方式中每一种优化方式所命中的算子的个数、以及每一种优化方式命中算子所需要的时间等指标,进一步根据每一种优化方式的指标对不同优化方式的性能进行对比,得到计算加速库、编译优化技术、人工优化方式的性能比较结果。
122.在其他一些实施例中,第二设备52或第一设备51还可以将计算加速库、编译优化技术、人工优化方式的性能比较结果发送给终端设备,进一步,终端设备可以显示该性能比较结果,从而将该性能比较结果呈现给用户。
123.在上述实施例的基础上,第一设备51可以通过应用程序接口(application programming interface,api)接入第二设备52(例如,中心化系统)。第一设备51可以通过中心化系统实时查询计算任务中遇到的算子的最佳实现。在该算子的最佳实现不存在的情况下,中心化系统可以向第一设备51返回空,并在后台以异步的方式触发离线探索。离线探索的目的是探索算子的最佳实现。最佳实现可能来自于计算加速库,可能来自于编译优化,也可能来自于手工优化,因此需要分别进行探索,最后将离线探索得到的结果记录在中心化系统本地或中心化系统关联的数据库中。具体的查询过程具体如图7所示,该查询过程包括如下几个步骤:
124.s701、计算平台执行机器学习训练任务或推理任务。
125.s702、计算平台向中心化系统发送针对算子o的查询请求。
126.例如,中心化系统可以作为云端接收针对算子o的查询请求。
127.s703、中心化系统接收针对算子o的查询请求。
128.s704、中心化系统判断本地或数据库中是否有算子o的最佳实现,若是则执行s705,否则执行s706。
129.s705、返回算子o的最佳实现。
130.若数据库中存储有算子o的最佳实现,则中心化系统可以返回算子o的最佳实现,该最佳实现可以包括:编译优化的调度、代码、或者计算加速库的调用方式。另外,第一算子的最佳实现还可以包括相应的执行时间。整个过程结束。
131.s706、返回空。
132.若算子o的最佳实现在数据库中不存在,则返回空。用户流程结束,进一步执行s707。
133.s707、以异步的方式触发离线探索,离线探索包括:尝试计算加速库、尝试编译优化技术、尝试手工优化。
134.例如,离线探索的过程是探索算子o的最佳实现。最佳实现可能来自于计算加速库,可能来自于编译优化,也可能来自于手工优化,因此需要分别进行探索。分别进行探索的过程如下a、b、c所示。
135.a、在计算加速库中探索算子o的最佳实现,并将性能最佳的调用方式以及执行时间记录下来,例如,保存在数据库。
136.b、遍历各种编译优化技术,并将各种编译优化技术得到的调度、自动生成的代码、以及执行时间记录下来,例如,保存在数据库。
137.c、若该算子o存在手工优化的实现,则测量其手工优化实现的执行时间,并将执行时间记录下来,例如,保存在数据库。
138.s708、保存结果。
139.对a,b,c中的执行时间进行对比,选择执行时间最短的最优结果记录在数据库中,作为该算子的最佳实现。
140.s709、结束算子o的探索。
141.例如,执行到s709时,整个过程结束。
142.本实施例通过中心化系统统一对算子做离线编译并保存结果,使得执行计算任务的第一设备可以实时查询该计算任务所涉及到的算子的最佳调度以及执行时间,从而使得算子编译优化的结果可以被不同的计算任务所复用,从而节省了计算资源。
143.图8为本公开另一实施例提供的算子处理方法流程图。该方法具体步骤如下:
144.s801、接收第一设备针对第一算子的查询请求。
145.s802、根据所述查询请求,判断所述第一算子的最佳实现是否存在。
146.s803、若所述第一算子的最佳实现存在,则将所述第一算子的最佳实现发送给所述第一设备。
147.s804、若所述第一算子的最佳实现不存在,则通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现。
148.具体的,s801-s804的实现过程和具体原理可以参照上述s401-s404,此处不再赘述。
149.s805、将所述第一算子的最佳实现发送给所述第一设备。
150.例如,在中心化系统确定出第一算子的最佳实现后,中心化系统可以将该第一算子的最佳实现发送给第一设备。
151.图9为本公开另一实施例提供的算子处理方法流程图。该方法具体步骤如下:
152.s901、接收第一设备针对第一算子的查询请求。
153.s902、根据所述查询请求,判断所述第一算子的最佳实现是否存在。
154.s903、若所述第一算子的最佳实现存在,则将所述第一算子的最佳实现发送给所述第一设备。
155.s904、若所述第一算子的最佳实现不存在,则通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现。
156.具体的,s901-s904的实现过程和具体原理可以参照上述s401-s404,此处不再赘述。
157.s905、存储所述第一算子的最佳实现。
158.例如,在中心化系统确定出第一算子的最佳实现后,中心化系统可以在本地或数据库中存储该第一算子的最佳实现。
159.s906、在所述第一设备再次发送所述查询请求的情况下,将所述第一算子的最佳实现发送给所述第一设备。
160.例如,在第一设备再次向中心化系统发送针对该第一算子的查询请求的情况下,由于中心化系统的本地或数据库中已存储有该第一算子的最佳实现,因此中心化系统可以将该第一算子的最佳实现发送给第一设备。另外,可以理解的是,若其他设备执行的计算任
务中涉及到第一算子时,其他设备也可以向中心化系统发送针对该第一算子的查询请求,从而使得中心化系统可以将该第一算子的最佳实现发送给其他设备。也就是说,针对中心化系统本地或数据库中未存储有最佳实现的算子,中心化系统可以通过离线探索的方式获得该算子的最佳实现并保存在本地或数据库中,进一步可以向请求获取该算子最佳实现的设备发送该算子的最佳实现,即该算子的最佳实现可以被不同的设备或不同的计算任务所复用。也就是说,中心化系统只需对某个算子的最佳实现进行一次离线探索后该算子的最佳实现即可被多次复用,从而使得算子编译优化的收益可以被不断复用,编译的开销可以被不断平摊。
161.本实施例通过中心化系统以云服务的形式接入计算任务,使得执行该计算任务的设备可以从中心化系统中实时查询并利用算子编译优化的结果,达到加速算子计算的效果。如果中心化系统中没有算子编译优化的结果,中心化系统后台会触发对该算子的离线编译优化过程,使得执行该计算任务的设备下次查询同样的算子时能够得到相应的编译优化结果。
162.在上述实施例的基础上,所述第一算子是所述第一设备执行的计算任务中的算子;和/或所述第一算子是与第二算子相关的算子,所述第二算子是所述第一设备执行的计算任务中的算子。
163.例如,在一种可能的实现方式中,第一设备用于执行计算任务,该计算任务中涉及到第一算子,在第一设备本地没有第一算子的最佳实现的情况下,第一设备可以向中心化系统发送针对该第一算子的查询请求。
164.例如,在另一种可能的实现方式中,第一设备用于执行计算任务,该计算任务中涉及到第二算子,第一设备可以根据第二算子确定出与该第二算子相关的其他算子,其他算子可以记为第一算子,并向中心化系统发送针对该第一算子的查询请求。
165.在又一种可能的实现方式中,第一设备用于执行计算任务,该计算任务中涉及到多个算子,该多个算子包括第二算子。第一设备可以根据第二算子确定出与该第二算子相关的第一算子,并且该第一算子也可以是该计算任务中涉及到的多个算子中的算子。
166.也就是说,执行计算任务的第一设备不仅可以从中心化系统中查询该计算任务直接涉及到的算子的最佳实现,还可以查询与计算任务直接涉及到的算子相关的其他算子的最佳实现,从而可以进一步提高算子的命中率。
167.可选的,若所述第一算子的最佳实现不存在,则通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现,包括如图10所示的如下步骤:
168.s1001、若所述第一算子的最佳实现不存在,则将所述第一算子放入第一队列。
169.如图11所示,110表示如上所述的计算平台,该计算平台用于执行计算任务。中心化系统主要包括前端、中端和后端。其中,中心化系统可作为云端。前端可以为用户提供接口api,例如,查询api、统计api和操作api。不同的api用于接收用户不同的服务请求。例如,查询api可以接收用户的查询请求。统计api可以接收用户的统计请求。操作api可以接收用户的操作请求。其中,查询api对应的用户可以是计算平台的用户。统计api和操作api分别对应的用户可以是中心化系统的维护人员。
170.例如,前端服务可以提供一种网络应用程序的设计风格和开发方式(representational state transfer,restful)的api接口,其中,restful可以是一种协
议,该api接口用于接收来自执行计算任务的计算平台的算子查询请求。一方面,中心化系统提供查询api,使得用户或计算平台可以通过查询api发起查询请求。另一方面,中心化系统还提供了统计api和操作api,用于统计或完成其他操作。前端接收到算子查询请求后,首先会查询数据库,确定数据库中是否有该算子的最佳实现的记录。若该算子的最佳实现的记录存在于数据库中,说明该算子命中,进一步,中心化系统可以从数据库中返回该算子的最佳实现,整个流程结束。若数据库中没有该算子的最佳实现的记录,说明该算子未命中,此时,中心化系统可以返回空,并将该算子传到中端的收集队列。其中,该算子可以是上述的第一算子。中端的收集队列可以记为第一队列。
171.s1002、在需要确定所述第一算子的最佳实现的情况下,将所述第一队列中的所述第一算子放入第二队列中。
172.如图11所示的中心化系统的中端主要用于对算子进行管理,中端主要功能包含收集算子、管理算子探索队列和探索任务调度。例如,中端的收集队列可以收集所有未命中的算子。另外,收集队列中的算子不会必然发生编译优化,中心化系统可以根据其当前状态,例如系统当前剩余资源、已用资源等确定是否需要探索该算子的最佳实现、或者还可以根据其当前状态确定该算子的优先级。当中心化系统确定不探索该算子的最佳实现时,可以直接将该算子从第一队列即收集队列中丢弃。当中心化系统确定探索该算子的最佳实现时,可以将该算子从收集队列传入到探索队列,该探索队列可以记为第二队列。
173.s1003、通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第二队列中的所述第一算子的最佳实现。
174.可选的,将所述第一队列中的所述第一算子放入第二队列中,包括:根据所述第一算子的优先级,将所述第一队列中的所述第一算子放入与所述优先级相匹配的第二队列中。相应的,通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第二队列中的所述第一算子的最佳实现,包括:按照所述优先级,通过计算加速库、编译优化技术、人工优化方式中的至少一种探索所述第二队列中的所述第一算子的最佳实现。
175.例如,中心化系统将算子从收集队列传入到探索队列时,可以根据该算子的优先级,将该算子从收集队列传入到与该优先级相匹配的探索队列中。可选的,中端中的探索队列是优先级队列,高优先级的算子会被放入高优先级的探索队列中。其中,在计算资源紧张的情况下,高优先级探索队列中的算子可以被任务调度器优先探索。进一步,中端的任务调度器可以根据系统资源情况将探索队列中的算子打包在一起生成探索任务,并将探索任务发送到后端计算集群,由后端计算集群执行探索过程的步骤。
176.如图11所示,中心化系统的后端主要用于对探索任务中的每个算子执行最佳实现的探索过程。算子的最佳实现可能来自于计算加速库,可能来自手工优化,也可能来自于编译优化,因此需要分别进行探索。
177.例如,后端可以通过计算加速库测量算子的性能,例如cublas、mkldnn、cudnn等,并将性能最佳的调用方式和执行时间记录在数据库中。其中,cublas指统一计算设备架构(compute unified device architecture,cuda)矩阵运算库。mkldnn是一款面向深度学习应用的开源性能库。cudnn是用于深度神经网络的图形处理器(graphics processing unit,gpu)加速库。
178.另外,后端还可以通过编译优化技术测量算子的性能,例如tvm、halide、加速线性
代数(accelerated linear algebra,xla)、自动调度(autoschedule)等,并将最佳调度、自动生成的代码和执行时间记录在数据库中。其中,tvm可以指深度学习(deep learning)模型的优化编译器。halide是用c 作为宿主语言的一个图像处理相关的领域专用语言(domain specified language,dsl)。
179.此外,如果该算子存在手工优化的实现,则后端还可以测量其手工优化实现的性能,并将执行时间记录在数据库中。
180.本实施例通过在算子最佳实现不存在的情况下,将算子放入第一队列,并在确定需要探索该算子最佳实现的情况下,将第一队列中的算子放入第二队列中,进一步,通过计算加速库、编译优化技术、人工优化方式中的至少一种探索该第二队列中的每个算子的最佳实现,从而使得不需要探索最佳实现的算子可以从第一队列中直接被丢弃,从而节省了计算资源。
181.图12为本公开另一实施例提供的算子处理方法流程图。本实施例可应用于如图13所示的应用场景。如图13所示,在云服务的基础上,引入了客户端。该客户端可以部署在计算平台110中,或者,该客户端可以独立于计算平台110设置。具体的,该客户端可以支持跨平台的计算机程序设计语言(python)或c 编程语言。在本实施例中,计算平台110可以通过客户端与中心化系统进行通信。如图13所示,云服务前端具体可以是上述实施例所述的中心化系统的前端。另外,可以理解的是,计算平台110也可以不通过客户端直接与中心化系统进行通信。具体的,该客户端可以提供不同语言(例如,python、c 等)的api接口,计算平台可以通过调用客户端提供的查询api查询算子的最佳实现,从而可以减少计算平台接入云端的开发成本。另外,该客户端还可以提供算子的缓存和预取功能,其中,缓存是指将计算平台110从中心化系统中已经查询到的算子的最佳实现缓存在客户端中,避免当前计算任务中同一个算子的最佳实现在中心化系统中反复查询,从而降低计算平台110和中心化系统之间的通信开销。预取是指预测哪些算子与当前算子有相关性,进一步将这些有相关性的算子的最佳实现从中心化系统中预取到客户端的本地缓存中,从而提高客户端查询缓存时算子的命中率,进一步降低计算平台110和中心化系统之间的通信开销。另外,可以理解的是,计算平台110中可以运行多个计算任务,该多个计算任务中的每个计算任务可对应一个客户端。
182.如图12所示,该方法具体可以是如图13所示的客户端执行的方法,该方法具体步骤如下:
183.s1201、获取针对第一算子的查询请求。
184.例如,客户端接收到计算平台针对第一算子的查询请求。
185.s1202、根据所述查询请求,判断本地缓存中是否包括所述第一算子的最佳实现。
186.客户端根据该查询请求,判断客户端的本地缓存中是否包括该第一算子的最佳实现。
187.s1203、若本地缓存中包括所述第一算子的最佳实现,则返回所述第一算子的最佳实现。
188.如果客户端缓存中包括该第一算子的最佳实现,则客户端可以向计算平台返回该第一算子的最佳实现。
189.s1204、若本地缓存中不包括所述第一算子的最佳实现,则向第二设备发送针对所
述第一算子的查询请求,所述查询请求用于查询所述第一算子的最佳实现。
190.如果客户端缓存中不包括该第一算子的最佳实现,则客户端可以向第二设备即中心化系统发送针对该第一算子的查询请求。例如图13所示,客户端可以通过查询api向云服务前端发送针对该第一算子的查询请求。中心化系统在接收到该查询请求后,首先判断中心化系统的本地或相关的数据库中是否存在该第一算子的最佳实现。在中心化系统的本地或相关的数据库中不存在该第一算子的最佳实现的情况下,进一步以异步的方式离线探索该第一算子的最佳实现,具体过程可以参照上述实施例所述的过程,此处不再赘述。本实施例通过在云端的基础上引入客户端,客户端可以提供不同语言的api接口,方便计算平台和云端之间复用已有的交互逻辑,节省了计算平台和云端之间通信的开发成本。另外,通过客户端提供的预取和缓存功能,可以有效的降低计算平台和云端之间的通信开销。
191.可选的,所述第一算子是计算任务中的算子;和/或所述第一算子是与第二算子相关的算子,所述第二算子是计算任务中的算子。
192.例如,在一种可能的实现方式中,第一设备用于执行计算任务,该计算任务中涉及到第一算子,在第一设备本地没有第一算子的最佳实现的情况下,第一设备可以向中心化系统发送针对该第一算子的查询请求。
193.例如,在另一种可能的实现方式中,第一设备用于执行计算任务,该计算任务中涉及到第二算子,第一设备可以根据第二算子确定出与该第二算子相关的其他算子,其他算子可以记为第一算子,并向中心化系统发送针对该第一算子的查询请求。
194.在又一种可能的实现方式中,第一设备用于执行计算任务,该计算任务中涉及到多个算子,该多个算子包括第二算子。第一设备可以根据第二算子确定出与该第二算子相关的第一算子,并且该第一算子也可以是该计算任务中涉及到的多个算子中的算子。
195.也就是说,执行计算任务的第一设备不仅可以从中心化系统中查询该计算任务直接涉及到的算子的最佳实现,还可以查询与计算任务直接涉及到的算子相关的其他算子的最佳实现,从而可以进一步提高算子的命中率。
196.在图12所示的实施例的基础上,图14为本公开另一实施例提供的算子处理方法流程图。该方法具体步骤如下:
197.s1401、获取针对第一算子的查询请求。
198.例如,客户端接收到计算平台针对第一算子的查询请求。
199.s1402、获取与所述第一算子相关的一个或多个第三算子。
200.客户端接收到该查询请求后,预测与第一算子有相关性的一个或多个第三算子。
201.s1403、将所述一个或多个第三算子放入集合中。
202.例如,客户端可以将一个或多个第三算子加入到查询集合s中。
203.可选的,将所述一个或多个第三算子放入集合中,包括:针对所述一个或多个第三算子中的每个第三算子,若所述第三算子的最佳实现未缓存在所述本地缓存中,则将所述第三算子放入所述集合中。
204.例如,客户端将一个或多个第三算子加入查询集合s的过程中,可以针对一个或多个第三算子中的每个第三算子,检测该第三算子是否缓存在客户端中。若该第三算子未缓存在客户端中,则客户端将该第三算子加入到查询集合s。也就是说,查询集合s可以包括与第一算子有相关性并且未被客户端缓存的第三算子。
205.s1404、根据所述查询请求,判断本地缓存中是否包括所述第一算子的最佳实现。
206.例如,客户端可以根据该查询请求,判断客户端的本地缓存中是否包括第一算子的最佳实现。
207.s1405、若本地缓存中包括所述第一算子的最佳实现,则返回所述第一算子的最佳实现。
208.如果客户端缓存中包括该第一算子的最佳实现,则该客户端可以向计算平台返回该第一算子的最佳实现。
209.s1406、从第二设备查询所述集合中每个第三算子的最佳实现。
210.例如,客户端可以从云端即中心化系统中查询该集合s中每个第三算子的最佳实现,中心化系统判断本地或相关的数据库中是否包括每个第三算子的最佳实现的过程、以及中心化系统离线探索该集合中部分或全部第三算子的最佳实现的过程均可以参照上述实施例所述相应过程,此处不再赘述。
211.s1407、接收所述第二设备查询到的所述集合中部分或全部第三算子的最佳实现。
212.在本实施例中,第二设备查询到的任一算子的最佳实现包括在第二设备的本地或相关的数据库中包括该算子的最佳实现的情况下,第二设备从其本地或相关的数据库中获取到的该算子的最佳实现。另外,第二设备查询到的任一算子的最佳实现也包括在第二设备的本地或相关的数据库中不包括该算子的最佳实现的情况下,第二设备以异步的方式离线探索到的该算子的最佳实现。
213.可以理解的是,第二设备例如中心化系统可能查询到该集合中全部第三算子的最佳实现,或者中心化系统也可能只查询到该集合中部分第三算子的最佳实现。进一步,中心化系统可以将其查询到的该集合中部分或全部第三算子的最佳实现发送给客户端,相应的,客户端接收中心化系统查询到的该集合中部分或全部第三算子的最佳实现。
214.s1408、将所述第二设备查询到的所述集合中部分或全部第三算子的最佳实现更新到所述本地缓存中。
215.客户端将该第二设备查询到的该集合中部分或全部第三算子的最佳实现更新到本地缓存中。
216.s1409、若本地缓存中不包括所述第一算子的最佳实现,则向第二设备发送针对所述第一算子的查询请求。
217.如果客户端缓存中不包括该第一算子的最佳实现,则该客户端可以向中心化系统发送针对该第一算子的查询请求。
218.可选的,若本地缓存中不包括所述第一算子的最佳实现,则向第二设备发送针对所述第一算子的查询请求,包括:若本地缓存中不包括所述第一算子的最佳实现,则将所述第一算子放入所述集合中;向所述第二设备发送针对所述集合中的每个算子的查询请求。
219.例如,在客户端缓存中不包括该第一算子的最佳实现的情况下,客户端可以将第一算子也放入该集合中,从而使得该集合不仅包括与第一算子相关的第三算子,还包括该第一算子。进一步,客户端可以向中心化系统发送针对该集合中每个算子的查询请求,即客户端请求从中心化系统中获取该集合中每个算子的最佳实现。
220.可选的,向所述第二设备发送针对所述集合中的每个算子的查询请求之后,所述方法还包括:接收所述第二设备查询到的所述集合中部分或全部算子的最佳实现;将所述
第二设备查询到的所述集合中部分或全部算子的最佳实现更新到所述本地缓存中。
221.同理,中心化系统可能查询到该集合中全部算子的最佳实现,或者中心化系统也可能只查询到该集合中部分算子的最佳实现。因此,中心化系统可以将其查询到的该集合中部分或全部算子的最佳实现发送给客户端,相应的,客户端接收中心化系统查询到的该集合中部分或全部算子的最佳实现,并将中心化系统查询到的该集合中部分或全部算子的最佳实现更新到本地缓存中。
222.可选的,将所述第二设备查询到的所述集合中部分或全部算子的最佳实现更新到所述本地缓存中之后,所述方法还包括:确定所述第二设备查询到的所述集合中部分或全部算子的最佳实现中是否包括所述第一算子的最佳实现;若所述第二设备查询到的所述集合中部分或全部算子的最佳实现中包括所述第一算子的最佳实现,则返回所述第一算子的最佳实现。
223.例如,客户端将中心化系统查询到的该集合中部分或全部算子的最佳实现更新到本地缓存中之后,可以进一步确定中心化系统查询到的该集合中部分或全部算子的最佳实现中是否包括第一算子的最佳实现,若中心化系统查询到的该集合中部分或全部算子的最佳实现中包括第一算子的最佳实现,则向计算平台返回该第一算子的最佳实现。
224.本实施例通过在云端的基础上引入客户端,客户端可以提供不同语言的api接口,方便计算平台和云端之间复用已有的交互逻辑,节省了计算平台和云端之间通信的开发成本。另外,通过客户端提供的预取和缓存功能,可以有效的降低计算平台和云端之间的通信开销。
225.图15为本公开实施例提供的客户端与云端交互的流程图,该流程图包括如下几个步骤:
226.s1501、计算平台执行机器学习训练任务或推理任务。
227.s1502、计算平台向客户端发送针对算子o的查询请求。
228.s1503、客户端查询算子o的最佳实现。
229.s1504、客户端预测与算子o有相关性的算子,并且将与算子o有相关性的算子中不存在于本地缓存的算子加入集合s。
230.例如,客户端可以采用不同的模型来预测与算子o有相关性的算子,该模型具体可以是神经网络模型。此处的本地缓存可以是客户端缓存。本地缓存可以是本地数据库,例如,轻型数据库(sqlite)。客户端可以剔除掉本地数据库中已经存在的算子,使得集合s中不包括本地数据库中已经存在的算子。
231.s1505、客户端判断本地缓存中是否包括算子o的最佳实现,若是则执行s1506和s1507,否则执行s1510。
232.s1506、客户端返回算子o的最佳实现。
233.例如,算子o的最佳实现包括:编译优化的调度(或者代码)、或者计算加速库的调用方式、以及对应的执行时间。
234.s1507、客户端从云端查询集合s中的算子的最佳实现。
235.例如,客户端可以通过restful api从云端查询集合s中的算子的最佳实现,即客户端可以从云端预取集合s中的算子。
236.s1508、客户端获取云端返回的集合s中部分或全部算子的最佳实现,并将云端返
回的集合s中部分或全部算子的最佳实现更新到客户端缓存中。
237.由于云端可能查询到集合s中部分或全部算子的最佳实现,因此,客户端可以从云端预取到该集合s中部分或全部算子的最佳实现。
238.s1509、结束。
239.s1510、客户端将算子o加入集合s。
240.s1511、客户端从云端查询集合s中的算子的最佳实现。
241.s1512、客户端获取云端返回的集合s中部分或全部算子的最佳实现,并将云端返回的集合s中部分或全部算子的最佳实现更新到客户端缓存中。
242.s1513、客户端判断云端返回的集合s中部分或全部算子的最佳实现中是否包括算子o的最佳实现,若是则执行s1506,否则执行s1514。
243.s1514、客户端返回空。
244.本实施例通过云端以服务的形式接入计算任务,使得执行计算任务的计算平台可以实时查询并利用算子的最佳实现,达到加速算子计算的效果。如果云端没有算子的最佳实现,云端可以触发其后台对该算子的最佳实现进行离线探索,使得下次查询同样的算子时能够得到该算子的最佳实现,从而可以避免即使编译占用计算任务的计算资源的问题。另外,由于算子的最佳实现可以保存在云端,因此通过不断复用算子的最佳实现可以平摊编译优化的开销,相比于传统的即时编译和离线编译的方法,降低了编译成本。由于传统的离线编译的方法需要在计算任务部署前先对可能遇到的算子提前做编译优化,而本实施例的方法是以服务的形式接入计算任务,执行计算任务的计算平台可以实时查询云端已有的算子的最佳实现,因此不需要为计算任务可能会遇到的算子提前做编译优化。由于云端可以累积大量算子的最佳实现,因此可以提高算子的命中率,并且命中率还可以随着算子在云端不断累积而越来越高。
245.图16为本公开实施例提供的算子处理装置的结构示意图。该算子处理装置具体可以是上述实施例所述的第二设备或第二设备中的部件。本公开实施例提供的算子处理装置可以执行算子处理方法实施例提供的处理流程,如图16所示,算子处理装置160包括:
246.接收模块161,用于接收第一设备针对第一算子的查询请求;
247.判断模块162,用于根据所述查询请求,判断所述第一算子的最佳实现是否存在;
248.发送模块163,用于在所述第一算子的最佳实现存在的情况下,将所述第一算子的最佳实现发送给所述第一设备;
249.确定模块164,用于在所述第一算子的最佳实现不存在的情况下,通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现。
250.可选的,确定模块164具体用于:通过计算加速库、编译优化技术、人工优化方式中的至少一种异步离线探索所述第一算子的最佳实现。
251.可选的,确定模块164具体用于:
252.在计算加速库中探索所述第一算子的最佳实现,得到所述第一算子的第一实现;
253.通过多种编译优化技术中的每一种编译优化技术分别探索所述第一算子的最佳实现,并根据所述每一种编译优化技术的探索结果得到所述第一算子的第二实现;
254.通过人工优化方式探索所述第一算子的最佳实现,得到所述第一算子的第三实现;
255.根据所述第一实现、所述第二实现和所述第三实现中的至少一种,确定所述第一算子的最佳实现。
256.可选的,所述第一算子的最佳实现是所述第一实现、所述第二实现和所述第三实现中使得所述第一算子的执行时间最短的实现。
257.可选的,在所述第一算子的最佳实现为所述第一实现的情况下,所述第一算子的最佳实现包括如下至少一种:在所述计算加速库中探索到的所述第一算子的最佳调用方式、所述第一算子的第一执行时间、所述第一算子的第一代码。
258.可选的,在所述第一算子的最佳实现为所述第二实现的情况下,所述第一算子的最佳实现包括如下至少一种:所述第一算子的最佳调度方式、所述第一算子的第二执行时间、所述第一算子的第二代码;其中,所述第一算子的最佳调度方式是通过所述每一种编译优化技术分别得到的所述第一算子的调度方式中的最佳调度方式。
259.可选的,发送模块163还用于:在确定模块164通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现之后,将所述第一算子的最佳实现发送给所述第一设备。
260.可选的,算子处理装置160还包括:存储模块165,用于确定模块164通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第一算子的最佳实现之后,存储所述第一算子的最佳实现;发送模块163还用于:在所述第一设备再次发送所述查询请求的情况下,将所述第一算子的最佳实现发送给所述第一设备。
261.可选的,所述第一算子是所述第一设备执行的计算任务中的算子;和/或
262.所述第一算子是与第二算子相关的算子,所述第二算子是所述第一设备执行的计算任务中的算子。
263.可选的,确定模块164具体用于:
264.若所述第一算子的最佳实现不存在,则将所述第一算子放入第一队列;
265.在需要确定所述第一算子的最佳实现的情况下,将所述第一队列中的所述第一算子放入第二队列中;
266.通过计算加速库、编译优化技术、人工优化方式中的至少一种确定所述第二队列中的所述第一算子的最佳实现。
267.可选的,确定模块164具体用于:
268.根据所述第一算子的优先级,将所述第一队列中的所述第一算子放入与所述优先级相匹配的第二队列中;
269.按照所述优先级,通过计算加速库、编译优化技术、人工优化方式中的至少一种探索所述第二队列中的所述第一算子的最佳实现。
270.图16所示实施例的算子处理装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
271.图17为本公开实施例提供的另一种算子处理装置的结构示意图。该算子处理装置具体可以是上述实施例所述的客户端,该客户端可以部署在第一设备中。本公开实施例提供的算子处理装置可以执行算子处理方法实施例提供的处理流程,如图17所示,算子处理装置170包括:
272.获取模块171,用于获取针对第一算子的查询请求;
273.判断模块172,用于根据所述查询请求,判断本地缓存中是否包括所述第一算子的最佳实现;
274.返回模块173,用于在本地缓存中包括所述第一算子的最佳实现的情况下,返回所述第一算子的最佳实现;
275.发送模块174,用于在本地缓存中不包括所述第一算子的最佳实现的情况下,向第二设备发送针对所述第一算子的查询请求,所述查询请求用于查询所述第一算子的最佳实现。
276.可选的,所述第一算子是计算任务中的算子;和/或
277.所述第一算子是与第二算子相关的算子,所述第二算子是计算任务中的算子。
278.可选的,获取模块171还用于:在获取针对第一算子的查询请求之后,获取与所述第一算子相关的一个或多个第三算子;算子处理装置170还包括:处理模块175,用于将所述一个或多个第三算子放入集合中。
279.可选的,处理模块175具体用于:针对所述一个或多个第三算子中的每个第三算子,若所述第三算子的最佳实现未缓存在所述本地缓存中,则将所述第三算子放入所述集合中。
280.可选的,算子处理装置170还包括:查询模块176、接收模块177和更新模块178。若本地缓存中包括所述第一算子的最佳实现,则返回模块173用于返回所述第一算子的最佳实现,以及查询模块176用于从第二设备查询所述集合中每个第三算子的最佳实现;接收模块177用于接收所述第二设备查询到的所述集合中部分或全部第三算子的最佳实现;更新模块178用于将所述第二设备查询到的所述集合中部分或全部第三算子的最佳实现更新到所述本地缓存中。
281.可选的,处理模块175还用于:在本地缓存中不包括所述第一算子的最佳实现的情况下,将所述第一算子放入所述集合中;发送模块174还用于:向所述第二设备发送针对所述集合中的每个算子的查询请求。
282.可选的,接收模块177还用于:接收所述第二设备查询到的所述集合中部分或全部算子的最佳实现;更新模块178还用于:将所述第二设备查询到的所述集合中部分或全部算子的最佳实现更新到所述本地缓存中。
283.可选的,算子处理装置170还包括:确定模块179,用于确定所述第二设备查询到的所述集合中部分或全部算子的最佳实现中是否包括所述第一算子的最佳实现;返回模块173还用于:在查询模块176查询到的所述集合中部分或全部算子的最佳实现中包括所述第一算子的最佳实现的情况下,返回所述第一算子的最佳实现。
284.图17所示实施例的算子处理装置可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
285.另外,本公开实施例提供的一种系统,该系统包括上述实施例所述的第一设备和第二设备。
286.图18为本公开实施例提供的一种计算机设备的结构示意图。本公开实施例提供的计算机设备可以执行算子处理方法实施例提供的处理流程,如图18所示,计算机设备180包括:存储器181、处理器182、计算机程序和通讯接口183;其中,计算机程序存储在存储器181中,并被配置为由处理器182执行如上所述的算子处理方法。
287.另外,本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的算子处理方法。
288.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
289.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

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

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

相关文献