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

神经网络模型的内存管理方法、装置、设备、介质及产品与流程

2023-10-20 21:34:07 来源:中国专利 TAG:


1.本技术实施例涉及内存管理技术领域,特别涉及一种神经网络模型的内存管理方法、装置、设备、介质及产品。


背景技术:

2.随着计算机深度学习技术的发展,神经网络模型的应用越来越频繁。为了取得更好的算法精度,神经网络模型变得越来越复杂,硬件能力限制了神经网络向更深的方向发展。
3.相关技术中,通过获取神经网络模型中各个网络层需要占用的内存,然后按照整个神经网络模型运行顺序,为整个神经网络模型分配内存。例如,神经网络模型在运行过程中,依次需要占用100m的内存块、10m的内存块和50m的内存块,10m的内存块和50m的内存块的存储周期存在交叉,即,10m的内存块和50m的内存块的被占用时间存在交集。当神经网络模型申请100m的内存块时,可为神经网络分配100m的内存块,然后当神经网络模型申请10m的内存块时,可判断一下该10m的内存块申请是否可用复用上述已分配的100m内存块,如果可以,则不再为所申请的10m内存块分配新的内存块,而使该10m内存块申请复用上述100m内存块,同理,当神经网络模型申请50m的内存块时,也判断一下该50m的内存块申请是否可复用上述已分配的100m内存块,且如果可复用,则分配该50m的内存块复用上述已分配的100m内存块,否则,为该50m内存块申请分配一新的50m内存块。
4.由上述相关技术可知,当神经网络模型申请一内存块时,由于申请的10m的内存块和申请的50m的内存块的存储周期存在交叉,在申请的10m内存块复用已分配的100m内存块后,申请的50m内存块将不能再复用已分配的100m内存块,需要另外申请分配一新的50m内存块,因此整个神经网络模型需共占用150m的内存块,导致整个神经网络模型占用的内存较大。因此,如何合理地管理神经网络模型占用的内存,提高内存的利用率,是亟待解决的重要问题。


技术实现要素:

5.本技术提供了一种神经网络模型的内存管理方法、装置、设备、介质及产品,所述技术方案如下所述内容。
6.根据本技术的一方面,提供了一种神经网络模型的内存管理方法,所述方法包括以下步骤。
7.获取神经网络模型对应的计算图,所述计算图中包括至少两个网络层算子,所述网络层算子用于表示所述神经网络模型中的网络层。
8.基于所述计算图,确定待分配至所述网络层算子的内存大小,所述内存大小用于表示所述网络层算子在所述神经网络模型运行时需要占用的内存大小。
9.从空闲内存块列表中的空闲内存块中获取与所述内存大小匹配的分配内存块,将所述分配内存块分配给所述网络层算子。
10.其中,所述空闲内存块列表用于存放已被分配但被解除占用后的空闲内存块,所述分配内存块是指被分配给所述网络层算子用于存储数据的内存块。
11.根据本技术的一方面,提供了一种神经网络模型的内存管理装置,所述装置包括以下步骤。
12.获取模块,用于获取神经网络模型对应的计算图,所述计算图中包括至少两个网络层算子,所述网络层算子用于表示所述神经网络模型中的网络层。
13.确定模块,用于基于所述计算图,确定待分配至所述网络层算子的内存大小,所述内存大小用于表示所述网络层算子在所述神经网络模型运行时需要占用的内存大小。
14.分配模块,用于从空闲内存块列表中的空闲内存块中获取与所述内存大小匹配的分配内存块,将所述分配内存块分配给所述网络层算子。
15.其中,所述空闲内存块列表用于存放已被分配但被解除占用后的空闲内存块,所述分配内存块是指被分配给所述网络层算子用于存储数据的内存块。
16.根据本技术的另一方面,提供了一种计算机设备,该计算机设备包括:处理器和存储器,存储器中存储有至少一条计算机程序,至少一条计算机程序由处理器加载并执行以实现如上方面所述的神经网络模型的内存管理方法。
17.根据本技术的另一方面,提供了一种计算机存储介质,计算机可读存储介质中存储有至少一条计算机程序,至少一条计算机程序由处理器加载并执行以实现如上方面所述的神经网络模型的内存管理方法。
18.根据本技术的另一方面,提供了一种计算机程序产品,上述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;所述计算机程序由计算机设备的处理器从所述计算机可读存储介质读取并执行,使得所述计算机设备执行如上方面所述的神经网络模型的内存管理方法。
19.本技术提供的技术方案带来的有益效果至少包括以下内容。
20.通过获取神经网络模型对应的计算图;基于计算图,确定待分配至网络层算子的内存大小;基于内存大小,通过从空闲内存块列表中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子。本技术通过利用空闲内存块列表中的空闲内存块,为网络层算子分配到与内存大小匹配的分配内存块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
附图说明
21.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1是本技术一个示例性实施例提供的一种神经网络模型的内存管理方法的示意图;图2是本技术一个示例性实施例提供的计算机系统的架构示意图;图3是本技术一个示例性实施例提供的神经网络模型的内存管理方法的流程图;图4是本技术一个示例性实施例提供的另一神经网络模型的内存管理方法的流程
图;图5是本技术一个示例性实施例提供的计算图的示意图;图6是本技术一个示例性实施例提供的分配内存块的确定方法的示意图;图7是本技术一个示例性实施例提供的另一分配内存块的确定方法的示意图;图8是本技术一个示例性实施例提供的未分配内存的示意图;图9是本技术一个示例性实施例提供的释放内存块的示意图;图10是本技术一个示例性实施例提供的形状重塑算子进行重塑的示意图;图11是本技术一个示例性实施例提供的拼接算子进行拼接的示意图;图12是本技术一个示例性实施例提供的分裂算子进行分裂的示意图;图13是本技术一个示例性实施例提供的另一拼接算子进行拼接的示意图;图14是本技术一个示例性实施例提供的另一分裂算子进行分裂的示意图;图15是本技术一个示例性实施例提供的再一神经网络模型的内存管理方法的流程图;图16是本技术一个示例性实施例提供的神经网络模型的内存管理装置的框图;图17是本技术一个示例性实施例提供的计算机设备的结构示意图。
具体实施方式
23.为使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术实施方式作进一步地详细描述。这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
24.在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
25.应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。
26.本技术实施例提供了一种神经网络模型的内存管理方法的示意图,如图1所示,该方法可以由计算机设备执行,计算机设备可以是终端或服务器,具体地,该方法可以由计算机设备中的内存管理单元执行。
27.示例性地,计算机设备获取神经网络模型对应的计算图10;计算机设备基于计算图10,确定待分配至网络层算子40的内存大小;计算机设备从空闲内存块列表20中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子40。
28.计算图10用以表示神经网络模型的计算过程。
29.可选地,计算图10中包括至少两个网络层算子40和至少两个网络层算子之间的边50,网络层算子40用于表示神经网络模型中的网络层,边50用于表示网络层之间的数据流动。
30.如图1所示,计算机设备获取神经网络模型对应的计算图10,计算图10中包括至少
三个网络层算子40,分别为:网络层算子g0、网络层算子g1和网络层算子g2,在神经网络模型运行时,网络层算子40的运算顺序为网络层算子g0-网络层算子g1-网络层算子g2。其中,待分配至网络层算子g0的内存大小为16m,即,网络层算子g0在运行时需要占用16m的内存;待分配至网络层算子g1的内存大小为10m,即,网络层算子g1在运行时需要占用10m的内存;待分配至网络层算子g2的内存大小为5m,即,网络层算子g2在运行时需要占用5m的内存。
31.可选地,神经网络模型包括深度学习神经网络模型(deep neural network,dnn)、卷积神经网络模型(convolutional neural network,cnn)、极限学习机模型(extreme learning machine,elm)或其他的神经网络模型中的至少一种,但不限于此,本技术实施例对此不作具体限定。
32.内存大小用于表示网络层算子40在神经网络模型运行时需要占用的内存大小。
33.空闲内存块列表20用于存放已被分配但被解除占用后的空闲内存块。
34.分配内存块是指被分配给网络层算子40用于存储数据的内存块。
35.内存大小包括输入张量的大小和/或输出张量的大小。
36.输入张量用以表示输入至网络层算子40中的多维数组。
37.输出张量用以表示从网络层算子40输出的多维数组。
38.在一些实施例中,计算机设备基于计算图10,还可以确定网络层算子40的输入张量和输出张量对应的存储周期。
39.存储周期用于表示张量在内存块中占用的时间,即,在当前网络层算子执行完后,且不会被其他网络层算子调用后,该张量结束存储周期,该张量占用的内存块便可被释放。
40.示例性地,计算机设备获取网络层算子40的排列顺序;计算机设备在网络层算子40对应的输入张量的大小大于张量大小阈值的情况下,从空闲内存块列表20中获取与输入张量匹配的分配内存块,并按照排列顺序将分配内存块分配给网络层算子用于存储输入张量。
41.排列顺序用于表示网络层算子40在神经网络模型运行时的执行顺序。
42.在一些实施例中,分配内存块的确定方式包括以下方式中的至少一种,但不限于此。
43.(1)在网络层算子40对应的输入张量的大小小于或等于张量大小阈值的情况下,直接从未分配内存中获取与输入张量的大小匹配的分配内存块。
44.(2)在输入张量的大小大于张量大小阈值,且空闲内存块列表20中的空闲内存块的大小大于或等于输入张量的大小的情况下,从空闲内存块列表20中获取与输入张量的大小匹配的分配内存块。
45.(3)在输入张量的大小大于张量大小阈值,且空闲内存块列表20中的空闲内存块的大小小于输入张量的大小的情况下,从空闲内存块列表20和未分配内存中获取与输入张量的大小匹配的分配内存块。
46.(4)在输入张量的大小大于张量大小阈值,且空闲内存块列表20中没有空闲内存块的情况下,从未分配内存中划分出与输入张量的大小匹配的内存块作为分配内存块。
47.未分配内存是指存储空间中未被分配占用过的内存。
48.张量大小阈值是指能够进行内存复用的最小的内存块的大小。
49.可选地,张量大小阈值可采用自定义值、默认值中的至少一种,但不限于此,本申
请实施例对此不作具体限定。
50.示例性地,在网络层算子40对应的输入张量的大小小于或等于张量大小阈值的情况下,直接从未分配内存中获取与输入张量的大小匹配的分配内存块,从而避免产生内存碎片。
51.示例性地,在输入张量的大小大于张量大小阈值,且空闲内存块列表中包括与输入张量的大小相同第一空闲内存块的情况下,直接将第一空闲内存块作为分配内存块分配给对应的网络层算子40用于存储输入张量。
52.在输入张量的大小大于张量大小阈值,且空闲内存块列表20中包括大于输入张量的大小的第二空闲内存块的情况下,从第二空闲内存块中分割出与输入张量的大小匹配的第三内存块,并将第三内存块作为分配内存块分配给对应的网络层算子20用于存储输入张量。
53.例如,如图1所示出的分配内存块的确定方法,如图1中的(a)图所示,图中阴影部位为正在运行的网络层算子40,即当前运行的网络层算子40为网络层算子g0,网络层算子g0的输入张量需要占用的内存大小为16m,则,计算机设备向网络层算子g0分配16m内存块,分配后在已分配内存块列表30中显示已分配的16m内存块,此时,空闲内存块列表20中显示为空。如图1中的(b)图所示,在网络层算子g0运行完成后,网络层算子g0占用的16m内存块被释放,此时,空闲内存块列表20中显示被释放的16m内存块。
54.如图1中的(c)图所示,在网络层算子g1和网络层算子g2同时运行时,按照排列顺序先给网络层算子g1分配内存块,后给网络层算子g2分配内存块。此处假设张量大小阈值为4m,在网络层算子g1和网络层算子g2的输入张量的大小均大于张量大小阈值(4m)的情况下,进一步判断是否可从空闲内存块列表20中获取分配内存块。
55.在网络层算子g1的输入张量的大小(10m)大于张量大小阈值(4m),且空闲内存块列表20中的空闲内存块的大小(16m)大于网络层算子g1的输入张量的大小(10m)的情况下,从空闲内存块列表20中获取与网络层算子g1对应的输入张量的大小(10m)匹配的分配内存块,即,获取的网络层算子g1对应的分配内存块为(10m)。在网络层算子g2的输入张量的大小(5m)大于张量大小阈值(4m),且空闲内存块列表20中的剩余的空闲内存块的大小(6m)大于网络层算子g2的输入张量的大小(5m)的情况下,从空闲内存块列表20中获取与网络层算子g2对应的输入张量的大小(5m)匹配的分配内存块,即,获取的网络层算子g2对应的分配内存块为(5m)。此时,在空闲内存块列表20中显示被复用剩下的1m内存块,在已分配内存块列表30中显示网络层算子g1已分配的内存块(10m)和网络层算子g2已分配的内存块(6m)。
56.在一些实施例中,在输入张量的大小大于张量大小阈值,且空闲内存块列表20中包括小于输入张量的大小的第四空闲内存块的情况下,将第四空闲内存块与合并内存块进行合并,得到分配内存块。
57.合并内存块是从未分配内存中划分得到的内存块,合并内存块的大小为输入张量的大小与第四空闲内存块的大小的差值。
58.例如,当前输入张量的大小为10mb,空闲内存块列表中有两块大小分别为2mb和4mb的空闲内存块,其中,4mb的空闲内存块在空闲内存块列表的末尾,则取出4mb大小的空闲内存块并从未分配内存中划分出6mb大小的内存块进行合并,生成一个10mb大小的内存块作为分配内存块分配给对应的网络层算子40用于存储输入张量。
59.综上所述,本实施例提供的方法,通过获取神经网络模型对应的计算图;基于计算图,确定待分配至网络层算子的内存大小;基于内存大小,通过从空闲内存块列表中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子。本技术通过利用空闲内存块列表中的空闲内存块,为网络层算子分配到与内存大小匹配的分配内存块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
60.图2示出了本技术一个实施例提供的计算机系统的架构示意图。该计算机系统可以包括:终端100和服务器200。
61.终端100可以是诸如手机、平板电脑、车载终端(车机)、可穿戴设备、个人计算机(personal computer,pc)、车载终端、飞行器、无人售货终端等电子设备。终端100中可以安装运行目标应用程序的客户端,该目标应用程序可以是参考神经网络模型的内存管理的应用程序,也可以是提供有神经网络模型的内存管理功能的其他应用程序,本技术对此不作限定。另外,本技术对该目标应用程序的形式不作限定,包括但不限于安装在终端100中的应用程序(application,app)、小程序等,还可以是网页形式。
62.服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(content delivery network,cdn)、以及大数据和人工掌部图像识别平台等基础云计算服务的云服务器。服务器200可以是上述目标应用程序的后台服务器,用于为目标应用程序的客户端提供后台服务。
63.其中,云技术(cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
64.在一些实施例中,上述服务器还可以实现为区块链系统中的节点。区块链(blockchain)是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链,本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
65.终端100和服务器200之间可以通过网络进行通信,如有线或无线网络。
66.本技术实施例提供的神经网络模型的内存管理方法,各步骤的执行主体可以是计算机设备,计算机设备是指具备数据计算、处理和存储能力的电子设备。以图2所示的方案实施环境为例,可以由终端100执行神经网络模型的内存管理方法(如终端100中安装运行的目标应用程序的客户端执行神经网络模型的内存管理方法),也可以由服务器200执行该神经网络模型的内存管理方法,或者由终端100和服务器200交互配合执行,本技术对此不作限定。
67.图3是本技术一个示例性实施例提供的神经网络模型的内存管理方法的流程图。该方法可以由计算机设备执行,计算机设备可以是终端或服务器。该方法包括以下步骤。
68.步骤302:获取神经网络模型对应的计算图。
69.计算图用以表示神经网络模型的计算过程。
70.可选地,计算图中包括至少两个网络层算子和至少两个网络层算子之间的边,网络层算子对应神经网络模型中的网络层,一个网络层算子对应一个网络层,边用于表示网络层之间的数据流动。
71.可选地,神经网络模型包括深度学习神经网络模型(deep neural network,dnn)、卷积神经网络模型(convolutional neural network,cnn)、极限学习机模型(extreme learning machine,elm)或其他的神经网络模型中的至少一种,但不限于此,本技术实施例对此不作具体限定。
72.步骤304:基于计算图,确定待分配至网络层算子的内存大小。
73.内存大小用于表示网络层算子在神经网络模型运行时需要占用的内存大小。
74.示例性地,计算机设备基于计算图,确定待分配至网络层算子的内存大小。
75.可选地,内存大小包括输入张量的大小和/或输出张量的大小。
76.输入张量用以表示输入至网络层算子中的多维数组。
77.输出张量用以表示从网络层算子输出的多维数组。
78.步骤306:从空闲内存块列表中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子。
79.空闲内存块是指已被分配但被解除占用后的内存块。
80.空闲内存块列表用于存放已被分配但被解除占用后的空闲内存块。
81.分配内存块是指被分配给网络层算子用于存储数据的内存块。
82.示例性地,计算机设备通过重新利用空闲内存块列表中的空闲内存块,将空闲内存块列表中的空闲内存块进行调整,得到与内存大小匹配的分配内存块。
83.综上所述,本实施例提供的方法,通过获取神经网络模型对应的计算图;基于计算图,确定待分配至网络层算子的内存大小;基于内存大小,通过从空闲内存块列表中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子。本技术通过复用空闲内存块列表中的空闲内存块,为网络层算子分配到与内存大小匹配的分配内存块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
84.图4是本技术一个示例性实施例提供的神经网络模型的内存管理方法的流程图。该方法可以由计算机设备执行,计算机设备可以是终端或服务器。该方法包括以下步骤。
85.步骤401:获取神经网络模型对应的计算图。
86.计算图用以表示神经网络模型的计算过程。
87.可选地,计算图中包括至少两个网络层算子和至少两个网络层算子之间的边,网络层算子用于表示神经网络模型中的网络层,边用于表示网络层之间的数据流动。
88.示例性的,深度学习框架或者图编译设备对输入的神经网络模型进行解析并生成对应的计算图。
89.可选地,神经网络模型包括dnn、cnn、elm或其他的神经网络模型中的至少一种,但不限于此,本技术实施例对此不作具体限定。
90.步骤402:基于计算图,确定待分配至网络层算子的内存大小。
91.内存大小用于表示网络层算子在神经网络模型运行时需要占用的内存大小。
92.示例性地,计算机设备基于计算图,确定待分配至网络层算子的内存大小。
93.可选地,内存大小包括输入张量的大小和/或输出张量的大小。
94.输入张量用以表示输入至网络层算子中的多维数组。
95.输出张量用以表示从网络层算子输出的多维数组。
96.以输入张量为例,比如,输入张量a对应的多维数组为[512,32,32],假设输入张量a的数据类型都为float 32,即每个元素占用4bytes,则输入张量a的大小为:512*32*32*4=2mb。
[0097]
在本技术实施例中,神经网络模型中的张量(tensor)是一个多维数组,以开放神经网络交换格式(open neural network exchange,onnx)标准为例,张量以(秩(rank)、形状(shape)、数据类型(date type))三元组来表示。例如,张量以三元组来表示时,张量的三元组如表1所示。
[0098]
表1 张量的三元组如表1中第3行中的例子,张量=[9,10],表示一个9行10列的二维矩阵。
[0099]
如表1所示,张量是一个多维数组,在张量的三元组中,秩用以表示张量的维度,形状是张量的一种表现样式,数据类型用以表示张量形状中的元素数据的类型。
[0100]
以张量=[9,10]为例,该张量共有9*10=90个元素,该张量是float 32类型,即每个元素占用4bytes,则该张量的大小为9*10*4=360b=0.35kb。
[0101]
张量一个多维数组,张量可以以数组的形式表示,也可以形状来表示,本技术实施例中以形状表示张量。
[0102]
张量的形状为[],意为维度为0的标量;张量的形状为[10],意为维度为1的向量;张量的形状为[9,10],意为维度为2的矩阵,第一维有9个元素,第二维有10个元素,表示为9行10列的二维矩阵。
[0103]
形状中的数字的个数用以表示张量的维度,比如,[d0,d1,d2,d3]中有4个数字,则表示该张量为4维张量。张量的形状中的数字用以表示张量在该维度的元素个数。
[0104]
进一步地,通过元素的个数及单个元素占用的比特的乘积,最终得到张量的大小。
[0105]
在一些实施例中,计算机设备基于计算图,还可确定网络层算子对应的排列顺序。
[0106]
排列顺序用于表示网络层算子在神经网络模型运行时的执行顺序。
[0107]
示例性地,计算机设备获取网络层算子的排列顺序;计算机设备在网络层算子对
应的输入张量的大小大于张量大小阈值的情况下,从空闲内存块列表中获取与输入张量匹配的分配内存块,并按照排列顺序将分配内存块分配给网络层算子用于存储输入张量。
[0108]
例如,如图5所示出的计算图的示意图,计算图中包括g0,g1,g2,g3,g4共5个网络层算子,以g0算子的输出t1为例,t1共2*3*4=24个元素(假设t1是float 32类型,即t1每个元素占用4bytes),可以知道t1需要24*4=96bytes的存储空间,此外t1被g1和g3作为输入张量,所以t1在g3执行完之后存储周期结束,可知t1的存储周期为[g0,g3],其它输入张量的大小和生命周期获取同t1相同。按照执行顺序对网络层算子进行排序的结果为:[g0,g1,g2,g3,g4],按照该排序结果将分配内存块分配给网络层算子用于存储输入张量。比如,计算机设备按照g0-g1-g2-g3-g4的排序结果进行内存块的分配,第一,为g0算子分配96b的内存块一用以存储t0,在g0算子执行完成后,释放内存块一;第二,为g1算子分配96b的内存块二用以存储t1,由于t1的存储周期为[g0,g3],因此在g1算子执行完成后,不释放内存块二;第三,为g2算子分配96b的内存块三用以存储t2,在g2算子执行完成后,释放内存块三;第四,g3算子开始执行,在g3算子执行完成后,释放内存块二;第五,为g4算子分配96b的内存块四用以存储t3,在g4算子执行完成后,释放内存块五。
[0109]
步骤403:判断输入张量的大小是否小于张量大小阈值。
[0110]
张量大小阈值是指能够进行内存复用的最小的内存块的大小。
[0111]
可选地,张量大小阈值可采用自定义值、默认值中的至少一种,但不限于此,本技术实施例对此不作具体限定。
[0112]
示例性地,在输入张量的大小小于张量大小阈值的情况下,执行步骤409;在输入张量的大小大于或等于张量大小阈值的情况下,执行步骤404。
[0113]
步骤404:判断空闲内存块列表中是否有空闲内存块。
[0114]
示例性地,在空闲内存块列表中包括空闲内存块的情况下,执行步骤405;在空闲内存块列表中没有空闲内存块的情况下,执行步骤408。
[0115]
步骤405:判断空闲内存块的大小是否小于输入张量的大小。
[0116]
示例性地,在空闲内存块的大小小于输入张量的大小的情况下,执行步骤407;在空闲内存块的大小大于或等于输入张量的大小的情况下,执行步骤406。
[0117]
步骤406:从空闲内存块列表中获取与输入张量的大小匹配的分配内存块。
[0118]
在一些实施例中,在输入张量的大小大于张量大小阈值,且空闲内存块列表中的空闲内存块的大小大于或等于输入张量的大小的情况下,从空闲内存块列表中获取与输入张量的大小匹配的分配内存块。
[0119]
示例性地,在输入张量的大小大于张量大小阈值,且空闲内存块列表中包括第一空闲内存块的情况下,直接将第一空闲内存块作为分配内存块;其中,第一空闲内存块的大小与输入张量的大小相同。
[0120]
或,在输入张量的大小大于张量大小阈值,且空闲内存块列表中包括第二空闲内存块的情况下,从第二空闲内存块中分割出与输入张量的大小匹配的第三内存块,将第三内存块作为分配内存块;第二空闲内存块的大小大于输入张量的大小。
[0121]
例如,如图6所示出的分配内存块的确定方法的示意图,如图6中的(a)图所示,输入张量601为2mb,空闲内存块列表602中有一个10mb的空闲内存块,空闲内存块是指已分配但被释放了的内存块,则,计算机设备将10mb的空闲内存块分割成2mb和8mb的两个内存块,
并将2mb大小的内存块作为分配内存块分配给对应的网络层算子用于存储输入张量601,即,如图6中的(b)图所示,将2mb大小的内存块放于已分配内存块列表603中,并将8mb的内存块放回空闲内存块列表602。图中具有阴影效果的内存块为空闲内存块。
[0122]
步骤407:从空闲内存块列表和未分配内存中获取与输入张量的大小匹配的分配内存块。
[0123]
未分配内存是指存储空间中未被分配占用过的内存。
[0124]
在一些实施例中,在输入张量的大小大于张量大小阈值,且空闲内存块列表中的空闲内存块的大小小于输入张量的大小的情况下,从空闲内存块列表和未分配内存中获取与输入张量的大小匹配的分配内存块。
[0125]
示例性地,在输入张量的大小大于张量大小阈值,且空闲内存块列表中包括第四空闲内存块的情况下,将第四空闲内存块与合并内存块进行合并,得到分配内存块。
[0126]
第四空闲内存块的大小小于输入张量的大小。
[0127]
合并内存块是从未分配内存中划分得到的内存块。
[0128]
合并内存块的大小为输入张量的大小与第四空闲内存块的大小的差值。
[0129]
在一些实施例中,在输入张量的大小大于张量大小阈值,且空闲内存块列表中包括处于末尾的第四空闲内存块的情况下,将第四空闲内存块与合并内存块进行合并,得到分配内存块。
[0130]
例如,如图7所示出的分配内存块的确定方法的示意图,如图7中的(a)图所示,输入张量701为10mb,空闲内存块列表702中有一个2mb的空闲内存块和一个4mb的空闲内存块,计算机设备将4mb的空闲内存块从空闲内存块列表702中取出,并从未分配内存中划分得到一个6mb的合并内存块,计算机设备将来自空闲内存块列表702中的4mb的空闲内存块和来自未分配内存中的6mb的合并内存块进行合并后得到的内存块作为分配内存块分配给对应的网络层算子用于存储输入张量701,即,如图7中的(b)图所示,将4mb大小的内存块和6mb的合并内存块进行合并后得到的10mb的分配内存块放入已分配内存块列表703中。图中具有阴影效果的内存块为空闲内存块。
[0131]
步骤408:从未分配内存中划分出与输入张量的大小匹配的内存块作为分配内存块。
[0132]
未分配内存包括一级未分配内存和二级未分配内存,一级未分配内存的分配优先级高于二级未分配内存的分配优先级。
[0133]
在一些实施例中,在输入张量的大小大于张量大小阈值,且空闲内存块列表中没有空闲内存块的情况下,从未分配内存中划分出与输入张量的大小匹配的内存块作为分配内存块。
[0134]
例如,如图8所示出的未分配内存的示意图,神经网络模型运行在处理器上,处理器分布在不同的计算机群组,比如,计算机群组一801和计算机群组二802,处理器为了加速访存,通常会采用多级存储的架构,距离处理器近的存储层级拥有更大的数据传输带宽,但硬件成本更高,所以存储空间较为有限,本技术实施例中称为一级未分配内存803或l2存储空间,距离处理器远的存储层级数据传输带宽相小,但是硬件成本低,存储空间较大,本技术实施例中称为二级未分配内存804或l3存储空间。
[0135]
需要说明的是,一级未分配内存和二级未分配内存各自拥有了一个已分配内存块
列表和空闲内存块列表,初始状态下这两个列表中的内存块均为空。
[0136]
可选地,空闲内存块列表中的内存块从小到大依次进行排序,最大的内存块会排列在末尾。计算机设备获取空闲内存块列表中的最大内存块,在最大内存块位于末尾的情况下,则说明空闲内存块列表中有内存块;在最大内存块没有位于末尾的情况下,则说明空闲内存块列表中没有内存块。
[0137]
示例性地,在输入张量的大小大于张量大小阈值,且空闲内存块列表中没有空闲内存块的情况下,从一级未分配内存或二级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块。
[0138]
在一些实施例中,在输入张量的大小大于张量大小阈值,空闲内存块列表中没有空闲内存块,且一级未分配内存中的剩余内存大于或等于输入张量的大小的情况下,从一级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块。
[0139]
在一些实施例中,在输入张量的大小大于张量大小阈值,空闲内存块列表中没有空闲内存块,且一级未分配内存中的剩余内存小于输入张量的大小的情况下,从二级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块。
[0140]
步骤409:从未分配内存中获取与输入张量的大小匹配的分配内存块。
[0141]
在一些实施例中,在网络层算子对应的输入张量的大小小于或等于张量大小阈值的情况下,从未分配内存中获取与输入张量的大小匹配的分配内存块。
[0142]
示例性地,在网络层算子对应的输入张量的大小小于或等于张量大小阈值的情况下,不进行内存块的复用,直接从未分配内存中获取与输入张量的大小匹配的分配内存块。如果一级未分配内存能够划分出与输入张量的大小匹配的内存块,则优先从一级未分配内存上分配,反之,则从二级未分配内存上分配。
[0143]
其中,张量大小阈值的设定用于减少较小的输入张量对应的内存块的产生。
[0144]
在一些实施例中,基于计算图,确定网络层算子的输入张量和输出张量对应的存储周期;计算机设备响应于已分配内存块列表中的内存块的存储时间达到存储周期,释放内存块,并将内存块放入空闲内存块列表。
[0145]
已分配内存块列表用于存放已被占用的内存块。
[0146]
存储周期用于表示张量在内存块中占用的时间,即,在当前网络层算子执行完后,且不会被其他网络层算子调用后,该张量结束存储周期。
[0147]
示例性地,计算机设备响应于已分配内存块列表中的内存块的存储时间达到存储周期,释放内存块;在当前释放内存块的相邻位置存在已释放内存块的情况下,将当前释放内存块与已释放内存块进行合并,得到合并释放内存块;将合并释放内存块放入空闲内存块列表。
[0148]
合并释放内存块是指当前释放内存块和已释放内存块进行合并得到的内存块。
[0149]
例如,如图9所示出的释放内存块的示意图,如图9中的(a)图所示,一级/二级空闲内存块列表901中包括两个空闲内存块,分别为2m和6m,图中单阴影线的内存块为已释放内存块(包括2m已释放内存块的和6m已释放内存块),图中双阴影线的内存块为当前释放内存块(包括2m当前释放内存块)。如图9中的(b)图所示,在2m当前释放内存块的相邻位置存在2m已释放内存块的和6m已释放内存块的情况下,在一级/二级已分配内存块列表902中将2m当前释放内存块与2m、6m已释放内存块进行合并,得到10m合并释放内存块;将10m合并释放
内存块放入空闲内存块列表,在一级/二级已分配内存块列表902中仅剩下两个空闲内存块,分别为2m和4m。
[0150]
在一些实施例中,网络层算子包括数据处理层算子。
[0151]
数据处理层算子用于调整神经网络模型中的数据格式。数据处理层算子对应的网络层称为数据变换层。
[0152]
数据处理层算子包括形状重塑reshape算子、拼接concat算子及分裂split算子中的至少一种,但不限于此,本技术实施例对此不作具体限定。
[0153]
形状重塑算子用于对输入张量的形状进行重塑,以将输入张量的形状重塑为目标形状,但是在重塑数据的过程中,不改变数据包含的元素个数和元素在数据中的排布情况。例如,输入形状重塑算子的输入张量以矩阵的形式表示,如图10所示出的形状重塑算子进行重塑的示意图,输入形状重塑算子的矩阵的尺寸为[2,3,4],即输入形状重塑算子的矩阵为2
×3×
4的张量,形状重塑算子输出的矩阵的尺寸为[6,4],也即是形状重塑算子用于将尺寸为[2,3,4]的矩阵变换为尺寸为[6,4]的矩阵。
[0154]
拼接算子用于将至少两个输入张量进行拼接。例如,输入拼接算子的输入张量以矩阵的形式表示,如图11所示出的拼接算子进行拼接的示意图,输入拼接算子的矩阵的尺寸为:张量a=[1,3,2],张量b=[2,3,2],拼接算子输出的矩阵的尺寸为:张量c=[3,3,2],也即是拼接算子用于将尺寸为[1,3,2]、[2,3,2]的两个张量拼接为[3,3,2]的矩阵。
[0155]
分裂算子用于将输入张量按照分裂维度进行分裂,分裂为至少两个子输入张量,该分裂算子可以理解为拼接算子的一个逆过程。分裂维度为最高维度或者首个元素个数不为1的维度,则分裂算子的输出张量复用输入张量占用的内存块。比如,以张量a=[1,128,32,32]为例,其最高维度为维度0,即元素个数为1的维度;首个元素个数不为1的维度指的是维度1,即元素个数为128的维度。例如,输入分裂算子的输入张量以矩阵的形式表示,如图12所示出的分裂算子进行分裂的示意图,输入分裂算子的矩阵的尺寸为:张量c=[3,3,2],分裂算子输出的矩阵的尺寸为:张量a=[1,3,2],张量b=[2,3,2],也即是分裂算子用于将尺寸为[3,3,2]的张量分裂为[1,3,2]、[2,3,2]的矩阵。
[0156]
示例性地,计算机设备获取数据处理层算子对应的输入张量和输出张量;示例性地,计算机设备基于输入张量占用的分配内存块,使输出张量复用输入张量占用的分配内存块。
[0157]
可选地,数据处理层算子包括形状重塑算子,输出张量包括形状重塑张量。计算机设备基于输入张量占用的分配内存块,将输入张量占用的分配内存块分配给形状重塑张量。
[0158]
形状重塑算子用于调整输入张量的形状,但不会改变输入张量中的数据,形状重塑张量是指形状重塑算子输出的张量。
[0159]
形状重塑算子是对输入张量的形状进行重塑,并不会改变输入张量在内存块中的数据,所以形状重塑算子在神经网络模型运行时是将输入张量的内存数据拷贝到输出张量所在的内存(也即是下一层网络层的输入张量所在的内存)。在本技术实施例中,计算机设备可以通过使形状重塑算子的输出张量复用形状重塑算子的输入张量占用的内存块,来消除神经网络模型运行时形状重塑算子对应的数据拷贝操作。例如,张量a=[1,1,512,32,32]经过形状重塑算子,将张量a中的维度3和维度4合并,输出张量b=[1,512,1024](假设张量
a、张量b数据类型都为float 32),如果计算机设备为形状重塑算子的输入张量 a分配了512*32*32*4=2mb的内存块a,那么计算机设备为形状重塑算子的输出张量b分配内存是将内存块a分配给张量b,神经网络模型运行时该场景的形状重塑算子就无需做任何数据搬运操作,进而节省了处理器的资源。
[0160]
可选地,数据处理层算子包括拼接算子。计算机设备确定输出张量占用的分配内存块;计算机设备基于输出张量占用的分配内存块,使至少两个输入张量偏移复用输出张量占用的分配内存块。
[0161]
拼接算子是对2个或者以上的输入张量按照拼接维度进行拼接。
[0162]
拼接维度为最高维度或者首个元素个数不为1的维度。在本技术实施例中,如果拼接算子指定的拼接维度为最高维度或者首个元素个数不为1的维度,则拼接算子的输出张量和输入张量可复用同一内存块。计算机设备可以通过使拼接算子的多个输入张量按偏移复用拼接算子的输出张量占用的内存块,来消除神经网络模型运行时拼接算子对应的数据拷贝操作。例如,如图13所示出的拼接算子进行拼接的示意图,张量a=[512,32,32],张量b=[256,32,32],假设经过拼接维度为0的拼接算子,将张量a和张量b拼接为张量c=[768,32,32](假设张量a、张量b和张量c的数据类型都为float 32),如果计算机设备为拼接算子的输入张量a分配了768*32*32*4=3mb的内存块c,那么将内存块c根据输入张量a和张量b的大小划分为大小分别为2mb和1mb的两个子内存块a和子内存块b,并将子内存块a和子内存块b分别用于存储张量a和张量b,那么神经网络模型运行时,拼接算子就无需做任何数据搬运操作,进而节省了处理器的资源。
[0163]
可选地,数据处理层算子包括分裂算子,输出张量包括至少两个子输出张量。计算机设备将输入张量占用的分配内存块进行分割,得到至少两个子输入张量各自对应的子内存块;计算机设备将子内存块分配给至少两个子输出张量。
[0164]
分裂算子用于将输入张量分裂为至少两个子输入张量,子输出张量是指数据处理层算子输出的张量。
[0165]
分裂算子可以理解为拼接算子的逆运算,分裂算子是将输入张量按照分裂维度进行分裂,生成多个输出张量。如果分裂算子指定的分裂维度为最高维度或者首个元素个数不为1的维度,则分裂算子的输出张量复用输入张量占用的内存块。在本技术实施例中,计算机设备可以通过使分裂算子的多个张量按偏移复用分裂算子的输出张量占用的内存块来消除神经网络模型运行时,分裂算子对应的数据拷贝填充操作。例如,如图14所示出的分裂算子进行分裂的示意图,张量c=[768,32,32],假设张量c经过分裂维度为0的分裂算子,维度0由768分裂为512和256,对应输出张量a=[512,32,32],张量b=[256,32,32](假设张量a、张量b和张量c的数据类型都为float 32),如果计算机设备为分裂算子的输入张量a分配了768*32*32*4=3mb的内存块c,那么将内存块c根据输入张量a、张量b的大小划分为大小分别为2mb和1mb的两个子内存块a和子内存块b,并将子内存块a和子内存块b分别分配给张量a和张量b,那么神经网络模型运行时,该场景的分裂算子就无需做任何数据搬运操作,进而节省了处理器的资源。
[0166]
综上所述,本实施例提供的方法,通过获取神经网络模型对应的计算图;基于计算图,确定待分配至网络层算子的内存大小;基于内存大小,通过从空闲内存块列表中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子。本技术通
过复用空闲内存块列表中的空闲内存块,为网络层算子分配到与内存大小匹配的分配内存块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
[0167]
本实施例提供的方法,通过判断输入张量的大小与张量大小阈值之间的大小,从而确定不同的获取方式;基于不同的获取方式从空闲内存块列表中获取与输入张量的大小匹配的分配内存块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
[0168]
本实施例提供的方法,通过从空闲内存块列表和未分配内存中组合获取与输入张量的大小匹配的分配内存块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
[0169]
本实施例提供的方法,在输入张量的大小小于或等于张量大小阈值的情况下,直接从未分配内存中获取与输入张量的大小匹配的分配内存块,避免了小的内存块的产生,提高了内存的利用率。
[0170]
本实施例提供的方法,在释放内存块时,将当前释放内存块与已释放内存块进行合并,得到大的合并释放内存块,并将合并释放内存块放入空闲内存块列表。通过上述方法将零散的空闲内存块进行合并,从而使得空闲内存块列表中的空闲内存块可以应用于多种分配场景,提高了内存块的分配效率。
[0171]
本实施例提供的方法,针对神经网络模型中的数据处理层算子,使数据处理层算子的输入和输出复用同一个内存块,减少了神经网络模型运行时的数据搬运开销,提高了内存的利用率。
[0172]
图15是本技术一个示例性实施例提供的神经网络模型的内存管理方法的流程图。该方法可以由计算机设备执行,计算机设备可以是终端或服务器。该方法包括以下步骤。
[0173]
步骤1501:获取待分配至当前网络层算子的输入张量的大小。
[0174]
输入张量用以表示输入至网络层算子中的多维数组。
[0175]
以onnx标准为例,张量以(秩(rank)、形状(shape)、节点类型(date type))三元组来表示。
[0176]
输入张量的大小用于表示网络层算子的输入数据在神经网络模型运行时需要占用的内存大小。
[0177]
示例性地,计算机设备基于计算图,确定待分配至网络层算子的输入张量的大小。
[0178]
步骤1502:判断输入张量的大小是否小于张量大小阈值。
[0179]
张量大小阈值是指能够进行内存复用的最小的内存块的大小。
[0180]
计算机设备判断输入张量的大小是否小于张量大小阈值,在输入张量的大小小于张量大小阈值的情况下,执行步骤1508;在输入张量的大小大于或等于张量大小阈值的情况下,执行步骤1503。
[0181]
步骤1503:获取空闲内存块列表中最大的空闲内存块。
[0182]
空闲内存块列表用于存放已被分配但被解除占用后的空闲内存块。
[0183]
示例性地,在输入张量的大小大于或等于张量大小阈值的情况下,计算机设备获取空闲内存块列表中最大的空闲内存块。
[0184]
步骤1504:判断最大的空闲内存块是否大于或等于输入张量的大小。
[0185]
示例性地,在获取空闲内存块列表中最大的空闲内存块后,计算机设备判断最大
的空闲内存块是否大于或等于输入张量的大小,在最大的空闲内存块大于或等于输入张量的大小的情况下,执行步骤1505;在最大的空闲内存块小于输入张量的大小的情况下,执行步骤1506。
[0186]
步骤1505:将最大的空闲内存块分割成两个内存块,一个与输入张量的大小匹配,分配至网络层算子,另一个放回至空闲内存块列表。
[0187]
示例性地,在最大的空闲内存块大于或等于输入张量的大小的情况下,计算机设备将最大的空闲内存块分割成两个内存块,一个与输入张量的大小进行匹配,得到与输入张量的大小匹配的分配内存块,并将分配内存块分配至网络层算子;另一个放回至空闲内存块列表,以备下次使用。
[0188]
步骤1506:判断最大的空闲内存块是否处于末尾。
[0189]
空闲内存块列表中的空闲内存块由小到大依次排列。
[0190]
示例性地,在最大的空闲内存块小于输入张量的大小的情况下,判断最大的空闲内存块是否处于末尾,即判断空闲内存块列表中是否具有空闲内存块;在最大的空闲内存块处于末尾的情况下,执行步骤1507;在最大的空闲内存块未处于末尾的情况下,执行步骤1508。
[0191]
步骤1507:取出最大的空闲内存块,并从未分配内存中划分得到合并内存块,将最大的空闲内存块和合并内存块合并后,分配至网络层算子。
[0192]
示例性地,在最大的空闲内存块处于末尾的情况下,取出最大的空闲内存块,并从未分配内存中划分得到合并内存块,将最大的空闲内存块和合并内存块合并后,分配至网络层算子。
[0193]
步骤1508:判断一级未分配内存中的剩余内存是否大于/等于输入张量的大小。
[0194]
示例性地,在最大的空闲内存块未处于末尾的情况下,进一步判断一级未分配内存中的剩余内存是否大于/等于输入张量的大小,在一级未分配内存中的剩余内存大于/等于输入张量的大小的情况下,执行步骤1509;在一级未分配内存中的剩余内存小于输入张量的大小的情况下,执行步骤1510。
[0195]
步骤1509:从一级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块,分配至网络层算子。
[0196]
示例性地,在一级未分配内存中的剩余内存大于/等于输入张量的大小的情况下,直接从一级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块,并分配至网络层算子。
[0197]
步骤1510:从二级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块,分配至网络层算子。
[0198]
示例性地,在一级未分配内存中的剩余内存小于输入张量的大小的情况下,从二级未分配内存中划分与输入张量的大小匹配的内存块作为分配内存块,分配至网络层算子。
[0199]
综上所述,本实施例提供的方法,通过获取神经网络模型对应的计算图;基于计算图,确定待分配至网络层算子的内存大小;基于内存大小,通过从空闲内存块列表中的空闲内存块中获取与内存大小匹配的分配内存块,将分配内存块分配给网络层算子。本技术通过复用空闲内存块列表中的空闲内存块,为网络层算子分配到与内存大小匹配的分配内存
块,从而减少神经网络模型在运行过程中分配的内存,提高了内存的利用率。
[0200]
图16示出了本技术一个示例性实施例提供的神经网络模型的内存管理装置的结构示意图。该装置可以通过软件、硬件或者两者的结合实现成为计算机设备的全部或一部分,该装置包括以下模块。
[0201]
获取模块1601,用于获取神经网络模型对应的计算图,所述计算图中包括至少两个网络层算子,所述网络层算子用于表示所述神经网络模型中的网络层。
[0202]
确定模块1602,用于基于所述计算图,确定待分配至所述网络层算子的内存大小,所述内存大小用于表示所述网络层算子在所述神经网络模型运行时需要占用的内存大小。
[0203]
分配模块1603,用于从空闲内存块列表中的空闲内存块中获取与所述内存大小匹配的分配内存块,将所述分配内存块分配给所述网络层算子。
[0204]
其中,所述空闲内存块列表用于存放已被分配但被解除占用后的空闲内存块,所述分配内存块是指被分配给所述网络层算子用于存储数据的内存块。
[0205]
在一些实施例中,获取模块1601,用于获取所述网络层算子的排列顺序,所述排列顺序用于表示所述网络层算子在所述神经网络模型运行时的执行顺序。
[0206]
在一些实施例中,分配模块1603,用于在所述网络层算子对应的所述输入张量的大小大于张量大小阈值的情况下,从所述空闲内存块列表中获取与所述输入张量的大小匹配的所述分配内存块。
[0207]
在一些实施例中,分配模块1603,用于按照所述排列顺序将所述分配内存块分配给所述网络层算子用于存储所述输入张量。
[0208]
其中,所述输入张量是指输入至所述网络层算子中的多维数组。
[0209]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中的所述空闲内存块的大小大于或等于所述输入张量的大小的情况下,从所述空闲内存块列表中获取与所述输入张量的大小匹配的所述分配内存块。
[0210]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中包括第一空闲内存块的情况下,将所述第一空闲内存块作为所述分配内存块。
[0211]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中包括第二空闲内存块的情况下,从所述第二空闲内存块中分割出与所述输入张量的大小匹配的第三内存块,将所述第三内存块作为所述分配内存块。
[0212]
其中,所述第一空闲内存块的大小与所述输入张量的大小相同,所述第二空闲内存块的大小大于所述输入张量的大小。
[0213]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中的所述空闲内存块的大小小于所述输入张量的大小的情况下,从所述空闲内存块列表和未分配内存中获取与所述输入张量的大小匹配的所述分配内存块。
[0214]
其中,所述未分配内存是指存储空间中未被分配占用过的内存。
[0215]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中包括第四空闲内存块的情况下,将所述第四空闲内存块与
合并内存块进行合并,得到所述分配内存块。
[0216]
其中,所述第四空闲内存块的大小小于所述输入张量的大小,所述合并内存块是从所述未分配内存中划分得到的内存块,所述合并内存块的大小为所述输入张量的大小与所述第四空闲内存块的大小的差值。
[0217]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中没有空闲内存块的情况下,从所述未分配内存中划分出与所述输入张量的大小匹配的内存块作为所述分配内存块。
[0218]
所述未分配内存包括一级未分配内存和二级未分配内存,所述一级未分配内存的分配优先级高于所述二级未分配内存的分配优先级。
[0219]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,且所述空闲内存块列表中没有空闲内存块的情况下,从所述一级未分配内存或所述二级未分配内存中划分与所述输入张量的大小匹配的内存块作为所述分配内存块。
[0220]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,所述空闲内存块列表中没有空闲内存块,且所述一级未分配内存中的剩余内存大于或等于所述输入张量的大小的情况下,从所述一级未分配内存中划分与所述输入张量的大小匹配的内存块作为所述分配内存块。
[0221]
在一些实施例中,分配模块1603,用于在所述输入张量的大小大于所述张量大小阈值,所述空闲内存块列表中没有空闲内存块,且所述一级未分配内存中的剩余内存小于所述输入张量的大小的情况下,从所述二级未分配内存中划分与所述输入张量的大小匹配的内存块作为所述分配内存块。
[0222]
在一些实施例中,分配模块1603,用于在所述网络层算子对应的所述输入张量的大小小于或等于张量大小阈值的情况下,从所述未分配内存中获取与所述输入张量的大小匹配的所述分配内存块。
[0223]
在一些实施例中,确定模块1602,用于基于所述计算图,确定所述网络层算子的输入张量和输出张量对应的存储周期,所述存储周期用于表示所述网络层算子占用内存块的时间。
[0224]
在一些实施例中,所述装置还包括释放模块1604,释放模块1604用于响应于已分配内存块列表中的内存块的存储时间达到所述存储周期,释放所述内存块,并将所述内存块放入所述空闲内存块列表。
[0225]
其中,所述已分配内存块列表用于存放已被占用的内存块。
[0226]
在一些实施例中,释放模块1604,用于响应于所述已分配内存块列表中的内存块的存储时间达到所述存储周期,释放所述内存块。
[0227]
在一些实施例中,所述装置还包括合并模块1605,合并模块1605,用于在当前释放内存块的相邻位置存在已释放内存块的情况下,将所述当前释放内存块与所述已释放内存块进行合并,得到合并释放内存块。
[0228]
在一些实施例中,合并模块1605,用于将所述合并释放内存块放入所述空闲内存块列表。
[0229]
在一些实施例中,获取模块1601,用于获取所述数据处理层算子对应的输入张量和输出张量。
[0230]
在一些实施例中,所述装置还包括复用模块1606,复用模块1606,用于基于所述输入张量占用的所述分配内存块,使所述输出张量复用所述输入张量占用的所述分配内存块。
[0231]
在一些实施例中,复用模块1606,用于基于所述输入张量占用的所述分配内存块,将所述输入张量占用的所述分配内存块分配给所述形状重塑张量。
[0232]
其中,所述形状重塑算子用于调整所述输入张量的形状,但不会改变所述输入张量中的数据,所述形状重塑张量是指所述形状重塑算子输出的张量。
[0233]
在一些实施例中,复用模块1606,用于将所述输入张量占用的所述分配内存块进行分割,得到所述至少两个子输入张量各自对应的子内存块;将子内存块分配给所述至少两个子输出张量。
[0234]
其中,所述分裂算子用于将所述输入张量分裂为至少两个子输入张量,所述子输出张量是指所述数据处理层算子输出的张量。
[0235]
在一些实施例中,复用模块1606,用于确定所述输出张量占用的所述分配内存块;基于所述输出张量占用的所述分配内存块,使至少两个所述输入张量偏移复用所述输出张量占用的所述分配内存块。
[0236]
其中,所述拼接算子用于将至少两个所述输入张量进行拼接。
[0237]
图17示出了本技术一示例性实施例示出的计算机设备1700的结构框图。该计算机设备可以实现为本技术上述方案中的服务器。所述计算机设备1700包括中央处理单元(central processing unit,cpu)1701、包括随机存取存储器(random access memory,ram)1702和只读存储器(read-only memory,rom)1703的系统存储器1704,以及连接系统存储器1704和中央处理单元1701的系统总线1705。所述计算机设备1700还包括用于存储操作系统1709、应用程序1710和其他程序模块1711的大容量存储设备1706。
[0238]
所述大容量存储设备1706通过连接到系统总线1705的大容量存储控制器(未示出)连接到中央处理单元1701。所述大容量存储设备1706及其相关联的计算机可读介质为计算机设备1700提供非易失性存储。也就是说,所述大容量存储设备1706可以包括诸如硬盘或者只读光盘(compact disc read-only memory,cd-rom)驱动器之类的计算机可读介质(未示出)。
[0239]
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括ram、可擦除可编程只读寄存器(erasable programmable read only memory,eprom)、电子抹除式可复写只读存储器(electrically-erasable programmable read-only memory,eeprom)闪存或其他固态存储其技术,cd-rom、数字多功能光盘(digital versatile disc,dvd)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1704和大容量存储设备1706可以统称为存储器。
[0240]
可选地,存储器包括一级未分配内存(未示出)和二级未分配内存(未示出),中央处理单元1701为了加速访存,通常会采用多级存储的架构,一级未分配内存距离处理器近的存储层级拥有更大的数据传输带宽,但硬件成本更高,所以存储空间较为有限;二级未分
配内存距离处理器远的存储层级数据传输带宽相小,但是硬件成本低,存储空间较大。
[0241]
根据本公开的各种实施例,所述计算机设备1700还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即计算机设备1700可以通过连接在所述系统总线1705上的网络接口单元1707连接到网络1708,或者说,也可以使用网络接口单元1707来连接到其他类型的网络或远程计算机系统(未示出)。
[0242]
所述存储器还包括至少一段计算机程序,所述至少一段计算机程序存储于存储器中,中央处理器1701通过执行该至少一段程序来实现上述各个实施例所示的神经网络模型的内存管理方法中的全部或部分步骤。
[0243]
本技术实施例还提供一种计算机设备,该计算机设备包括处理器和存储器,该存储器中存储有至少一条程序,该至少一条程序由处理器加载并执行以实现上述各方法实施例提供的神经网络模型的内存管理方法。
[0244]
本技术实施例还提供一种计算机可读存储介质,该存储介质中存储有至少一条计算机程序,该至少一条计算机程序由处理器加载并执行以实现上述各方法实施例提供的神经网络模型的内存管理方法。
[0245]
本技术实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;所述计算机程序由计算机设备的处理器从所述计算机可读存储介质读取并执行,使得所述计算机设备执行以实现上述各方法实施例提供的神经网络模型的内存管理方法。
[0246]
可以理解的是,在本技术的具体实施方式中,涉及到的数据,历史数据,以及画像等与用户身份或特性相关的用户数据处理等相关的数据,当本技术以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
[0247]
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
[0248]
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0249]
以上所述仅为本技术的可选实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同切换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

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