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

一种内存管理的方法、设备及系统与流程

2022-05-21 08:03:40 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,具体涉及一种内存管理的方法、设备及系统。


背景技术:

2.随着互联网的发展,人工智能(artificial intelligence,ai)发展迅猛,ai模型被应用到各种产品和服务中。一般的,ai模型是采用深度神经网络或卷积神经网络进行模型构造,然后使用训练样本对构造好的模型进行训练,从而得到可以在应用场景中进行推理的ai模型的。
3.ai模型可以转换为计算图,一个计算图中会包括多个算子和多条边,每条边会关联两个算子,该边也用于表示所关联的两个算子之间的输入/输出关系。在ai推理过程中,端侧需要按照计算图中各算子的执行顺序逐个计算,每一个算子都有输入数据和输出数据,比如卷积算子,就是将输入的数据进行卷积计算后输出。因此,对应每一个算子都需要一块内存来存放相应的输出数据,并且这个输出数据作为下一个与之关联的算子的输入数据。若不对这些算子的内存进行管理,正在执行的算子无法获知从哪里调度输入数据,也无法确定输出数据在内存中应该存放的位置,造成数据错乱,无法完成推理,目前,针对计算图中的每一个算子都分配一块内存,造成了内存资源的浪费。


技术实现要素:

4.本技术实施例提供一种内存管理的方法,用于提高内存利用率。本技术还提供了相应的装置、计算机可读存储介质、计算机程序产品等。
5.本技术第一方面提供一种内存管理的方法,该方法应用于人工智能技术中,该方法包括:获取人工智能模型的计算图,计算图包括多个算子和至少一条边,其中,每条边用于表示多个算子中两个算子之间的输入关系或输出关系;按照多个算子中每个算子对内存需求从大到小的顺序,依次为每个算子分配内存,其中,第一算子的内存地址与第二算子的内存地址存在重叠,且第二算子不是第一算子的互斥算子,其中第一算子的互斥算子的内存不能被第一算子复用。换句话说,在为第一算子或第二算子分配内存时,从非互斥的且已经分配内存的算子的内存中划出全部或部分内存作为第一算子或第二算子的内存。应理解的是,这里的“第一算子”和“第二算子”是为表述方便,给多个算子中的两个非互斥算子的代称。
6.可选地,上述第一方面中,在为多个算子分配内存前,还可以确定多个算子之间的互斥关系,也就是确定每个算子的互斥算子。
7.需要说明的是,前述步骤之间的顺序不以文字记载顺序为局限,比如多个算子之间的互斥关系可以是在前述分配内存之前就确定的,在分配内存的时候利用确定出来的互斥关系进行内存分配。也可以是在前述分配内存的过程中,执行到第一算子的时候再确定该第一算子的互斥算子。即,前述确定互斥算子的步骤可以是在分配内存之前执行,也可以是在分配内存的过程中执行。第一个被分配内存的算子,也就是内存需求最大的算子,可以
不需要确定它的互斥算子,但它有可能在后续被确定为其它算子的互斥算子。该第一方面所提供的内存管理的方法可以由训练人工智能模型的服务器来执行,也可以由使用该人工智能模型的终端设备来执行。人工智能模型指的是服务器训练好的可以应用于推理过程的ai模型。ai模型可以是应用于智能制造、智能交通、智能家居、智能医疗、智能安防、自动驾驶,平安城市,智能终端等各领域。执行该方法的设备可以是除了是上述列举的服务器或终端设备,还可以是虚拟机(virtual machine,vm)或容器(container)。
8.ai模型中会包括多个计算单元,如:卷积单元、池化单元或合并单元等各种类型用于执行相应计算的单元,每个计算单元可以称为一个“算子”。ai模型的执行逻辑也就是每个计算单元执行的先后顺序。ai模型中的计算单元以及计算单元之间的输入或输出关系可以用图来表达,该图称为“计算图”。该计算图中会包括ai模型中的所有算子,在计算图中,两个算子之间的输入关系或输出关系用“边”来表示。在计算图中,通过一条边连接的两个算子具有依赖关系,该依赖关系指的是一个算子向该边连接的另一个算子输出数据,另一个算子接收该一个算子输入的数据,因此,该依赖关系也描述为两个算子具有输入关系或输出关系。
9.因为计算图中各算子是按顺序执行的,在执行到在后算子时,可能执行顺序在前的在前算子的内存已经清空。这样,在后算子就可以使用在前算子的全部或部分内存,但有些在前算子的内存是不能被在后算子使用的,这些内存不能被在后算子使用的在前算子就称为该在后算子的互斥算子。也可以将互斥算子理解为在内存使用上与第一算子相互排斥的算子,互斥算子的内存不能被第一算子使用。
10.本技术中,在为计算图中的多个算子分配内存时,按照大内存优先原则,即先为内存需求最大的算子分配内存,然后按照各算子内存需求递减的顺序,依次为计算图中的各算子分配内存。
11.本技术中,第一算子和第二算子的内存地址存在重叠包括部分重叠或全部重叠。若第一算子的内存需求小于第二算子的内存需求,则第二算子的内存是先于第一算子分配的。这样,在为第一算子分配内存时,若第二算子不是该第一算子的互斥算子,那么该第一算子可以使用该第二算子的内存,则可以将该第二算子的内存分配给该第一算子。因为第一算子在第二算子之后分配内存,所以第一算子的内存需求小于或等于该第二算子的内存需求。若该第一算子的内存需求与该第二算子的内存需求相同,则将该第二算子的内存全部分配给该第一算子,这样,第一算子的内存地址与该第二算子的内存地址全部重叠。若该第二算子的内存需求小于该第二算子的内存需求,则从该第二算子的内存中分出部分内存给该第一算子,这样,第一算子的内存地址与该第二算子的内存地址部分重叠。反之,若第一算子的内存需求大于第二算子的内存需求,则第一算子的内存是先于第二算子分配的。这样,在为第二算子分配内存时的执行过程可以参考上述为第一算子分配内存的执行过程进行理解,只是需要将第二算子替换为第一算子,将第一算子替换为第二算子。
12.由上述第一方面的方案可知,在为计算图中的算子分配内存时,可以从与该算子不互斥,且已分配内存的算子中为该算子分配内存,这样,不需要再为该算子单独申请内存,可以提高已分配内存的利用率,还可以降低该计算图所占用的内存的峰值需求。
13.在第一方面的一种可能的实现方式中,互斥算子包括与第一算子具有输入关系或输出关系的算子。
14.该种可能的实现方式中,因为通过同一条边连接的两个算子,输出数据的算子需要内存存储该输出输入,而接收数据的算子需要从输出数据的算子的内存中读取数据,并存入自己的内存中,因此,这两个算子的内存不能复用,这样,这两个具有输入关系或输出关系的算子也就成为了互斥算子。该种可能的实现方式提供的互斥算子的思想,这样,可以避免算子间在复用内存时出现互相干扰的情况。
15.在一种可能的实现方式中,互斥算子还包括以下两种算子中的至少一种;以下两种算子包括:计算图中与第一算子所在的第一分支并列的第二分支上的算子,以及在执行顺序上位于第一算子之前的网络输出算子,网络输出算子为与计算图中的其他算子有输入关系,且没有输出关系的算子。
16.该种可能的实现方式中,在计算图中经常会有并列的多个分支,并列的分支指的是从一个算子分出的多支,这些分支也可能又在另一个算子处聚合。当然,这些分支也可以不在另一算子聚合,本技术中,这些分支无论是否聚合都不影响多个分支称为并列分支。网络输出算子指的是整个计算图的输出算子。因为并列分支的算子都在各自并行执行计算过程,都会使用到内存,所以,并列分支上的算子的内存不能复用,而网络输出算子需要一直保存自己的输出结果,所以,该网络输出算子的内存也不能被其他算子复用。这样,该种可能的实现方式中,考虑到了多种互斥算子的情况,有利于提高推理过程的准确度。
17.在一种可能的实现方式中,上述步骤:按照多个算子中每个算子对内存需求从大到小的顺序,依次为每个算子分配内存,包括:第一算子是多个算子中内存需求最大的算子,则按照第一算子的内存需求,为第一算子申请内存。
18.该种可能的实现方式中,内存需求最大的算子为第一个分配内存的算子,因此,不存在复用其他算子的内存的可能性,所以,直接为该内存需求最大的算子申请内存即可。
19.在一种可能的实现方式中,上述步骤:按照多个算子中每个算子对内存需求从大到小的顺序,依次为每个算子分配内存,包括:第一算子不是多个算子中内存需求最大的算子,则获取已分配内存的每个算子的内存地址;从已分配内存的非互斥算子的内存中为第一算子分配内存,非互斥算子为多个算子中除第一算子的互斥算子之外的算子,非互斥算子包括第二算子。
20.该种可能的实现方式中,若该第一算子不是内存需求最大的算子,则说明该第一算子不是第一个分配内存的算子,这时,针对该计算图已经分配了一些内存,可以先考虑已分配的内存中是否有该第一算子可复用的内存。若已分配的内存中有该第一算子的非互斥算子的内存,则可以从该非互斥算子的内存中为该第一算子分配内存,这样,实现了对已分配内存的复用,又不会影响到内存中存储的数据,提高了内存的利用率。
21.在一种可能的实现方式中,上述步骤:从已分配内存的非互斥算子的内存中为第一算子分配内存,包括:已分配内存的非互斥算子的剩余内存满足第一算子的内存需求,则从非互斥算子的剩余内存中为第一算子分配对应内存需求的内存,非互斥算子的剩余内存为非互斥算子被分配的总内存或为非互斥算子的总内存中被第三算子占用后剩余的内存,所述第三算子为在第一算子之前被分配内存,且与非互斥算子不互斥的算子。
22.该种可能的实现方式中,因为在前分配的算子的内存需求较大,在后分配的算子的内存需求较小,所以可能会出现在前分配的一个算子的内存被多个在后分配的算子复用的情况,若该在前分配的非互斥算子的剩余内存能满足第一算子的内存需求,则可以直接
分配。本技术中,在后分配内存的算子的内存可以是从一个已分配的非互斥算子的内存中分配的,也可以是从多个已分配的非互斥算子的内存中分配的,该在后分配的算子的内存可以零散分布在多个非互斥算子的内存中。这样,可以尽可能多的复用已分配的内存,进一步提高内存的利用率。
23.在一种可能的实现方式中,该方法还包括:已分配内存的非互斥算子的剩余内存不满足第一算子的内存需求,则将剩余内存分配给第一算子,并再为第一算子申请余量内存,余量内存的值为第一算子的内存需求与非互斥算子的剩余内存的差值。
24.该种可能的实现方式中,若在前分配的非互斥算子的剩余内存不能满足第一算子的内存需求,则可以先将该剩余内存分配完,再申请不足部分的内存,这样可以尽可能多的复用已分配的内存,进一步提高内存的利用率。
25.在一种可能的实现方式中,该方法还包括:向终端设备发送多个算子中每个算子的内存地址,每个算子的内存地址指示终端设备使用人工智能模型执行数据推理时每个算子所使用的内存。
26.该种可能的实现方式中,若该内存管理的过程是由用于模型训练的服务器来完成,则可以将每个算子对应的内存地址发送给该终端设备,这样,终端设备在执行推理的过程中,可以根据每个算子的内存地址使用相应的内存。该种方案可以节省终端设备为执行每个算子的内存管理所消耗的资源。
27.本技术第二方面提供一种内存管理的装置,该内存管理的装置具有实现上述第一方面或第一方面任意一种可能实现方式的方法的功能。该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块,例如:获取单元和分配单元。
28.本技术第三方面提供一种计算机设备,该计算机设备包括至少一个处理器、存储器、输入/输出(input/output,i/o)接口以及存储在存储器中并可在处理器上运行的计算机执行指令,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
29.本技术第四方面提供一种存储一个或多个计算机执行指令的计算机可读存储介质,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
30.本技术第五方面提供一种存储一个或多个计算机执行指令的计算机程序产品,当计算机执行指令被处理器执行时,处理器执行如上述第一方面或第一方面任意一种可能的实现方式的方法。
31.本技术第六方面提供了一种芯片系统,该芯片系统包括至少一个处理器,至少一个处理器用于支持内存管理的装置实现上述第一方面或第一方面任意一种可能的实现方式中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存内存管理的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
32.本技术实施例中,在为计算图中的算子分配内存时,可以从与该算子不互斥,且已分配内存的算子中为该算子分配内存,这样,不需要再为该算子单独申请内存,可以提高已分配内存的利用率,还可以降低该计算图所占用的内存的峰值需求。
附图说明
33.图1是本技术实施例提供的一应用场景示意图;
34.图2是本技术实施例提供的另一应用场景示意图;
35.图3是本技术实施例提供的内存管理的方法的一实施例示意图;
36.图4是本技术实施例提供的一计算图的示例示意图;
37.图5是本技术实施例提供的一内存分配的场景示意图;
38.图6是本技术实施例提供的内存管理的装置的一实施例示意图;
39.图7是本技术实施例提供的计算机设备的一结构示意图。
具体实施方式
40.下面结合附图,对本技术的实施例进行描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。本领域普通技术人员可知,随着技术发展和新场景的出现,本技术实施例提供的技术方案对于类似的技术问题,同样适用。
41.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
42.本技术实施例提供一种内存管理的方法,用于提高内存利用率。本技术还提供了相应的装置、计算机可读存储介质、计算机程序产品等。以下分别进行详细说明。
43.本技术实施例中提供的内存管理方法适用于人工智能(artificial intelligence,ai)技术。
44.人工智能是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
45.人工智能是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
46.本技术实施例提供的内存管理的方法可以应用于智能制造、智能交通、智能家居、智能医疗、智能安防、自动驾驶,平安城市或智能终端等。
47.人工智能在各场景中的应用,通常是通过ai模型对数据进行推理来实现的。ai模型通常是在模型所有者的设备或平台(如:服务器、虚拟机(virtual machine,vm)或容器(container))中进行训练得到的,训练好的模型会以模型文件的形式存储。在模型使用者的设备(如:终端设备、服务器或边缘设备、vm或容器等)需要使用该ai模型时,可以是模型
使用者的设备主动加载该ai模型的模型文件。也可以是模型所有者的设备主动发送给模型使用者的设备安装该ai模型的模型文件,然后由模型使用者的设备使用该ai模型对数据进行推理。
48.服务器指的是物理机。
49.终端设备(也可以称为用户设备(user equipment,ue))是一种具有无线收发功能的设备,可以部署在陆地上,包括室内或室外、手持或车载;也可以部署在水面上(如轮船等);还可以部署在空中(例如飞机、气球和卫星上等)。所述终端可以是手机(mobile phone)、平板电脑(pad)、带无线收发功能的电脑、虚拟现实(virtual reality,vr)终端、增强现实(augmented reality,ar)终端、工业控制(industrial control)中的无线终端、无人驾驶(self driving)中的无线终端、远程医疗(remote medical)中的无线终端、智能电网(smart grid)中的无线终端、运输安全(transportation safety)中的无线终端、智慧城市(smart city)中的无线终端、智慧家庭(smart home)中的无线终端等。
50.vm或容器都可以是在物理机的硬件资源上采用虚拟化的方式划分出来的虚拟化的设备。
51.ai模型中会包括多个计算单元,如:卷积单元、池化单元或合并单元等各种类型用于执行相应计算的单元,每个计算单元可以称为一个“算子”。ai模型的执行逻辑也就是每个计算单元执行的先后顺序。ai模型中的计算单元以及计算单元之间的输入或输出关系可以用图来表达,该图称为“计算图”。该计算图中会包括ai模型中的所有算子,在计算图中,两个算子之间的输入关系或输出关系用“边”来表示。在计算图中,通过一条边连接的两个算子具有依赖关系,该依赖关系指的是一个算子向该边上的另一个算子输出数据,另一个算子接收该一个算子输入的数据,因此,该依赖关系也描述为两个算子具有输入关系或输出关系。
52.因为在执行推理过程中,计算图中的每个算子都会有输出数据,这样,每个算子都需要一块内存来存放该算子的输出数据,若为每个算子都分配一块该算子所需要的内存,而这些内存也不会实时都会被使用到,无疑会造成内存资源的浪费。因此,本技术实施例提供一种内存管理的方法,可以减少内存资源的浪费,下面结合附图介绍本技术实施例提供的内存管理的方法。
53.本技术实施例提供的内存管理的方法可以在服务器来执行,也可以在终端设备中来执行。若在服务器来执行,则该过程可以参阅图1进行理解。若在终端设备来执行,则该过程可以参阅图2进行理解。
54.如图1所示,服务器对初始ai模型进行训练,会得到目标ai模型。然后,服务器会将该目标ai模型转换为计算图的形式,为计算图中的每个算子分配该算子在终端设备中所需内存,并记录每个算子所需内存的内存地址,在发送该目标ai模型时,一并将该计算图中每个算子的内存地址发送给对应的终端设备。这样,终端设备在使用该目标ai模型进行推理时,就可以使用各算子的内存地址来使用对应的内存。本技术中的算子的内存地址的范围可以使用偏移地址和地址偏移长度的方式来表示。
55.如图2所示,服务器对初始ai模型进行训练,会得到目标ai模型。然后,服务器将该目标ai模型发送给终端设备,终端设备接收到该目标ai模型后,将该目标ai模型转换为计算图的形式,为计算图中的每个算子分配该算子在终端设备中所需内存,并记录每个算子
所需内存的内存地址。这样,终端设备在使用该目标ai模型进行推理时,就可以使用各算子的内存地址来使用对应的内存。
56.上述图1或图2所提供的场景,无论是服务器来管理算子的内存,还是终端设备来管理算子的内存,内存管理的过程基本是相同的,不同的是若由服务器来管理,服务器需要获取相应终端设备中可用内存空间的地址,然后再将每个算子的内存地址发送给终端设备。下面针对服务器或终端设备都会执行的管理过程进行介绍。该过程可以参阅图3进行理解。
57.如图3所示,本技术实施例提供的内存管理的方法的一实施例包括:
58.101、获取人工智能模型的计算图,计算图包括多个算子和至少一条边。
59.其中,每条边用于表示多个算子中两个算子之间的输入关系或输出关系。
60.人工智能模型可以转换为计算图的形式,人工智能模型中的计算单元为计算图中的算子,人工智能模型的各计算单元之间的关联关系为计算图中的边。
61.计算图可以参阅图4进行理解。如图4所示的计算图中包括8个算子,分别为算子1至算子8,图4中有多条边,每条边用于连接两个算子,表示这两个算子之间的输入关系或输出关系。如算子1和算子2之间有一条边,则表示算子1和算子2之间具有输入关系或输出关系。该图4中执行顺序是从算子1开始的,则表示算子1的输出数据会输入给算子2。
62.102、按照多个算子中每个算子对内存需求从大到小的顺序,依次为每个算子分配内存。
63.其中,第一算子的内存地址与第二算子的内存地址存在重叠,且第二算子不是第一算子的互斥算子,其中,第一算子的互斥算子的内存不能被第一算子复用。
64.因为计算图中各算子是按顺序执行的,在执行到在后算子时,可能执行顺序在前的在前算子的内存已经清空。这样,在后算子就可以使用在前算子的内存,但有些在前算子的内存是不能被在后算子使用的,这些内存不能被在后算子使用的在前算子就称为该在后算子的互斥算子。也可以将互斥算子理解为在内存使用上与第一算子相互排斥的算子,互斥算子的内存不能被第一算子使用。
65.本技术实施例中,在为计算图中的多个算子分配内存时,按照大内存优先原则,即先为内存需求最大的算子分配内存,然后按照各算子内存需求递减的顺序,依次为计算图中的各算子分配内存。
66.本技术实施例中,第一算子和第二算子的内存地址存在重叠包括部分重叠或全部重叠。若第一算子的内存需求小于第二算子的内存需求,则第二算子的内存是先于第一算子分配的。这样,在为第一算子分配内存时,若第二算子不是该第一算子的互斥算子,那么该第一算子可以使用该第二算子的内存,则可以将该第二算子的内存分配给该第一算子。因为第一算子在第二算子之后分配内存,所以第一算子的内存需求小于或等于该第二算子的内存需求。若该第一算子的内存需求与该第二算子的内存需求相同,则将该第二算子的内存全部分配给该第一算子,这样,第一算子的内存地址与该第二算子的内存地址全部重叠。若该第二算子的内存需求小于该第二算子的内存需求,则从该第二算子的内存中分出部分内存给该第一算子,这样,第一算子的内存地址与该第二算子的内存地址部分重叠。反之,若第一算子的内存需求大于第二算子的内存需求,则第一算子的内存是先于第二算子分配的。这样,在为第二算子分配内存时的执行过程可以参考上述为第一算子分配内存的
执行过程进行理解,只是需要将第二算子替换为第一算子,将第一算子替换为第二算子。
67.针对上述方案,概括来说,在为第一算子或第二算子分配内存时,从非互斥的且已经分配内存的算子的内存中划出全部或部分内存作为第一算子或第二算子的内存。应理解的是,这里的“第一算子”和“第二算子”是为表述方便,给多个算子中的两个非互斥算子的代称。
68.需要说明的是,前述步骤之间的顺序不以文字记载顺序为局限,比如多个算子之间的互斥关系可以是在前述分配内存之前就确定的,在分配内存的时候利用确定出来的互斥关系进行内存分配。也可以是在前述分配内存的过程中,执行到第一算子的时候再确定该第一算子的互斥算子。即,前述确定互斥算子的步骤可以是在分配内存之前执行,也可以是在分配内存的过程中执行。第一个被分配内存的算子,也就是内存需求最大的算子,可以不需要确定它的互斥算子,但它有可能在后续被确定为其它算子的互斥算子。
69.本技术实施例中,在为计算图中的算子分配内存时,可以从与该算子不互斥,且已分配内存的算子中为该算子分配内存,这样,不需要再为该算子单独申请内存,可以提高已分配内存的利用率,还可以降低该计算图所占用的内存的峰值需求。
70.上述步骤102中会为第一算子确定互斥算子。该互斥算子可以包括三种类型,下面分别进行介绍。
71.1、互斥算子包括与第一算子具有输入关系或输出关系的算子。
72.该种情况中,通过同一条边连接的两个算子互为互斥算子。如图4中,算子1与算子2互为互斥算子,算子2与算子3互为互斥算子,算子2与算子4互为互斥算子,算子2与算子5互为互斥算子,算子3与算子6互为互斥算子,算子4与算子7互为互斥算子,算子6与算子7互为互斥算子,算子6与算子8互为互斥算子。
73.2、计算图中与第一算子所在的第一分支并列的第二分支上的算子。
74.在计算图中经常会有并列的多个分支,并列的分支指的是从一个算子分出的多支,这些分支也可能又在另一个算子出聚合,如图4中的算子2与算子7之间包含两个并列的分支,一个分支上包含算子3和算子6,另一个分支上包括算子4。当然,这些分支也可以不在另一算子聚合,这些分支无论是否聚合都不影响多个分支称为并列分支。如图4中,节点5也可以为算子3和算子6,或者,算子4的并列分支。
75.这样,在图4所示的示例中,算子3与算子4互为互斥算子,算子6与算子4互为互斥算子,算子5与算子3互为互斥算子,算子5与算子4互为互斥算子,算子5与算子6互为互斥算子。
76.3、在执行顺序上位于第一算子之前的网络输出算子,网络输出算子为与计算图中的其他算子有输入关系,且没有输出关系的算子。
77.本技术实施例中,网络输出算子指的是整个计算图的输出算子。如图4中的算子5和算子8都为网络输出算子。
78.图4所示的计算图从算子1开始执行,执行到算子2时,该算子2有三个输出,分别输出给算子3、算子4和算子5,算子3还会将输出数据传递给算子6,算子4还会将输出数据传递给算子7,而算子5没有再连接其他算子了,不需要再向其他算子输出数据,则该算子5对应的内存需要保存该算子5的输出数据,为了避免该算子5的输出数据被其他算子覆盖,则在算子5之后被执行的算子不能再使用该算子5对应的内存。在图4中,在算子5之后被执行的
算子有算子6、算子7和算子8,因此,该算子6、算子7和算子8都不能使用该算子5的内存,则该算子6、算子7和算子8的互斥算子都包括算子5。
79.在图4所示的场景中,若满足上述三个类型的条件,经上述分析,图4中8个算子的互斥算子可以参阅表1进行理解。
80.表1:第一算子的互斥算子
81.第一算子互斥算子算子1算子2算子2算子1、算子3、算子4、算子5算子3算子2、算子4、算子5、算子6算子4算子2、算子3、算子5、算子6、算子7算子5算子2、算子3、算子4、算子6、算子7、算子8算子6算子3、算子4、算子5、算子7算子7算子4、算子5、算子6、算子8算子8算子7、算子5
82.在确定计算图中各算子的互斥算子后,可以先按照计算图中各算子的内存需求对各算子进行排序。图4中8个算子的内存需求可以参表2的示例进行理解。
83.表2:算子的内存需求
84.算子名称内存需求(兆:m)算子15算子210算子38算子420算子52算子66算子715算子83
85.由该表2所示例的各算子的内存需求可知,8个算子的内存需求从大到小的顺序排序为:算子4(20m)>算子7(15m)>算子2(10m)>算子3(8m)>算子6(6m)>算子1(5m)>算子8(3m)>算子5(2m)。
86.接下来可以按照该排序为8个算子依次分配内存。若所要分配内存的第一算子为计算图中内存需求最大的算子,如:上述算子4,则表示该第一算子是该计算图中第一个分配内存的算子,那么目前该计算图对应的内存池中的内存量为0,则直接为该第一算子分配内存即可。如图5中,为该算子4分配20m内存。算子4分配内存后,记录该算子4的内存地址。
87.若所要分配内存的第一算子不是计算图中内存需求最大的算子,则获取已分配内存的每个算子的内存地址;从已分配内存的非互斥算子的内存中为第一算子分配内存,非互斥算子为多个算子中除第一算子的互斥算子之外的算子,非互斥算子包括第二算子。
88.本技术实施例中,若已分配内存的非互斥算子的剩余内存满足第一算子的内存需求,则从非互斥算子的剩余内存中为第一算子分配对应内存需求的内存,非互斥算子的剩余内存为非互斥算子被分配的总内存或为非互斥算子的总内存中被第三算子占用后剩余
的内存,第三算子为在第一算子之前被分配内存,且与非互斥算子不互斥的算子。
89.本技术实施例中,若已分配内存的非互斥算子的剩余内存不满足第一算子的内存需求,则将剩余内存分配给第一算子,并再为第一算子申请余量内存,余量内存的值为第一算子的内存需求与非互斥算子的剩余内存的差值。
90.结合上述图4中的8个算子,算子4分配完20m内存后,会继续为排序在第二位的算子7分配内存。如图5所示,这时,内存池中已有为算子4分配的20m内存。结合表1可以确定,算子7与算子4互为互斥算子,则该算子7不能使用该算子4的20m内存,需要再为该算子7分配所需的15m内存。算子7分配内存后,记录该算子7的内存地址。
91.接下来为排序在第三位的算子2分配内存。如图5所示,这时,内存池中已有为算子4和算子7分配的35m内存。结合表1可以确定,算子2的互斥算子包括算子4,但不包括算子7,则可以从算子7中为该算子2分配所需的10m内存。这时只需要获取算子4和算子7的内存地址,然后排除算子2的互斥算子4的内存地址,根据算子7的内存地址为该算子2分配相应的内存即可,并记录该算子2的内存地址。
92.接下来为排序在第四位的算子3分配内存。如图5所示,这时,内存池中已有为算子4和算子7分配的35m内存,算子2的复用算子7中的10m内存。结合表1可以确定,算子3的互斥算子包括算子4和算子2,但不包括算子7,目前算子7中已有10m内存被算子2复用,只有5m内存空余,而算子3的内存需求是8m,还有3m不足,这时,可以再为该算子3申请3m内存,并记录该算子3包括算子7中的5m以及新申请的3m的内存地址,这样,内存池中就有38m内存。
93.接下来为排序在第五位的算子6分配内存。如图5所示,这时,内存池中已有38m内存。结合表1可以确定,算子6的互斥算子包括已分配内存的算子3、算子4和算子7,不包括已分配内存的算子2,但该算子2的内存复用的是算子7的内存,所以,目前内存池的38m内存中没有该算子6的非互斥算子的内存,需要另外为该算子6申请6m内存,并记录该算子6的内存地址,申请该6m内存后,该内存池中的内存为44m。
94.接下来为排序在第六位的算子1分配内存。如图5所示,这时,内存池中已有44m内存。结合表1可以确定,算子1的互斥算子只有算子2,可以从已分配的其他非互斥算子的内存中为该算子1分配内存,如:从算子1中为该算子1分配5m内存,并记录该算子1的内存地址。因为采用复用算子4的内存方式分配的内存,所以内存池中的内存还为44m。
95.接下来为排序在第七位的算子8分配内存。如图5所示,这时,内存池中已有44m内存。结合表1可以确定,算子8的互斥算子有7和算子5,目前内存池中已分配内存的互斥算子只有算子7,则可以为该算子8从其他非互斥算子中分配3m内存,如从算子4的内存中为该算子8分配3m内存。图5中所示的是在算子4中排除算子1的内存的一段为该算子8分配的3m内存,因为算子1和算子8不是互斥算子,所以,也可以在算子1复用的5m内存中为该算子8分配3m内存。为该算子8分配内存后,记录该算子8的内存地址,因为采用复用算子4的内存方式分配的内存,所以内存池中的内存还为44m。
96.接下来为排序在第八位的算子5分配内存。如图5所示,这时,内存池中已有44m内存。结合表1可以确定,算子5的互斥算子有算子2、算子3、算子4、算子6、算子7、算子8,只有算子1不是该算子5的互斥算子,但该算子1复用的是算子4的内存,因此,需要再为该算子5申请2m内存,申请2m内存后,记录该算子5的内存地址,这时,该内存池中的内存为46m。
97.由上述图4到图5的场景可知,该计算图中8个算子的内存总需求=20 15 10 8 6
5 3 2=69m,但采用本技术复用非互斥算子的内存的方式只需要46m内存就可以完成该计算图中各算子的内存分配,由此可见,本技术实施例提供的内存管理的方法,可以很大程度上提高内存的利用率,而且,还可以降低该计算图所占用的内存的峰值需求。
98.若上述图3至图5的过程是在服务器执行,则该服务器还会执行如下步骤:向终端设备发送多个算子中每个算子的内存地址,每个算子的内存地址指示终端设备使用人工智能模型执行数据推理时每个算子所使用的内存。
99.在上述每个算子的内存地址都确定后,在使用该ai模型执行数据推理的过程中,就针对每个算子都可以使用该算子对应的内存地址去使用该算子对应的内存,有效避免了推理过程中出现数据错乱的问题。
100.以上介绍了本技术实施例提供的内存管理的方法,下面结合附图介绍本技术实施例提供的内存管理的装置。
101.如图6所示,本技术实施例提供的内存管理的装置20的一实施例包括:
102.获取单元201,用于获取人工智能模型的计算图,计算图包括多个算子和至少一条边,其中,每条边用于表示多个算子中两个算子之间的输入关系或输出关系。
103.分配单元202,用于按照多个算子中每个算子对内存需求从大到小的顺序,依次为每个算子分配内存,其中,第一算子的内存地址与第二算子的内存地址存在重叠,且第二算子不是第一算子的互斥算子,其中,第一算子的互斥算子的内存不能被第一算子复用。
104.本技术实施例中,在为计算图中的算子分配内存时,可以从与该算子不互斥,且已分配内存的算子中为该算子分配内存,这样,不需要再为该算子单独申请内存,可以提高已分配内存的利用率,还可以降低该计算图所占用的内存的峰值需求。可选地,该装置20还可以包括确定单元203,该确定单元203,用于确定多个算子中每个算子的互斥算子。
105.可选地,互斥算子包括与第一算子具有输入关系或输出关系的算子。
106.可选地,互斥算子还包括以下两种算子中的至少一种;以下两种算子包括:计算图中与第一算子所在的第一分支并列的第二分支上的算子,以及在执行顺序上位于第一算子之前的网络输出算子,网络输出算子为与计算图中的其他算子有输入关系,且没有输出关系的算子。
107.可选地,分配单元202,用于若第一算子是多个算子中内存需求最大的算子,则按照第一算子的内存需求,为第一算子申请内存。
108.可选地,分配单元202,用于若第一算子不是多个算子中内存需求最大的算子,则获取已分配内存的每个算子的内存地址;从已分配内存的非互斥算子的内存中为第一算子分配内存,非互斥算子为多个算子中除第一算子的互斥算子之外的算子,非互斥算子包括第二算子。
109.可选地,分配单元202,用于若已分配内存的非互斥算子的剩余内存满足第一算子的内存需求,则从非互斥算子的剩余内存中为第一算子分配对应内存需求的内存,非互斥算子的剩余内存为非互斥算子被分配的总内存或为非互斥算子的总内存中被第三算子占用后剩余的内存,第三算子为在第一算子之前被分配内存,且与非互斥算子不互斥的算子。
110.可选地,分配单元202,还用于若已分配内存的非互斥算子的剩余内存不满足第一算子的内存需求,则将剩余内存分配给第一算子,并再为第一算子申请余量内存,余量内存的值为第一算子的内存需求与非互斥算子的剩余内存的差值。
111.可选地,发送单元204,用于向终端设备发送多个算子中每个算子的内存地址,每个算子的内存地址指示终端设备使用人工智能模型执行数据推理时每个算子所使用的内存。
112.以上所描述的内存管理的装置20可以参阅前述方法实施例部分的相应描述进行理解,此处不做重复赘述。
113.图7所示,为本技术的实施例提供的计算机设备30的一种可能的逻辑结构示意图。计算机设备30包括:处理器301、通信接口302、存储器303以及总线304。处理器301、通信接口302以及存储器303通过总线304相互连接。在本技术的实施例中,处理器301用于对计算机设备30的动作进行控制管理,例如,处理器301用于执行图2至图5的方法实施例中101至102的步骤,通信接口302用于支持计算机设备30进行通信。存储器303,用于存储计算机设备30的程序代码和数据。
114.其中,处理器301可以是中央处理器单元,通用处理器,数字信号处理器,专用集成电路,现场可编程门阵列或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本技术公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器301也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器和微处理器的组合等等。总线304可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
115.在本技术的另一实施例中,还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当设备的处理器执行该计算机执行指令时,设备执行上述图2至图5中内存管理的方法。
116.在本技术的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;当设备的处理器执行该计算机执行指令时,设备执行上述图2至图5中内存管理的方法。
117.在本技术的另一实施例中,还提供一种芯片系统,该芯片系统包括处理器,该处理器用于支持内存管理的装置实现上述图2至图5中内存管理的方法。在一种可能的设计中,芯片系统还可以包括存储器,存储器,用于保存内存管理的装置必要的程序指令和数据。该芯片系统,可以由芯片构成,也可以包含芯片和其他分立器件。
118.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术实施例的范围。
119.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
120.在本技术实施例所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组
件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
121.作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
122.另外,在本技术实施例各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
123.功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术实施例各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
124.以上,仅为本技术实施例的具体实施方式,但本技术实施例的保护范围并不局限于此。
再多了解一些

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

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

相关文献