内存分配方法、装置、存储介质及电子设备
技术领域
本申请涉及人工智能技术领域,具体涉及一种内存分配方法、装置、存储介质及电子设备。
背景技术
人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
其中,机器学习(Machine Learning,ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习等技术。利用机器学习技术,以及对应的数据集,能够训练得到实现不同功能的计算模型,比如,基于某数据集训练得到用于性别分类的计算模型,基于某数据集训练得到图像优化的计算模型等。
目前,随着人工智能技术的不断发展,计算模型被部署在如智能手机、平板电脑等电子设备上,用于增强电子设备的处理能力。比如,电子设备通过其部署的图像优化模型,可以对其拍摄的图像进行优化,提升图像质量。
然而,计算模型在计算时会占用电子设备大量的内存空间,这会影响电子设备上系统和功能应用的正常运行,另外,当电子设备的系统和功能应用占用过多的内存空间时,将限制计算模型所能够占用的内存空间,这样也会影响计算模型的计算效果。因此,如何降低计算模型占用的内存空间是当前亟需解决的问题。
发明内容
本申请提供了一种内存分配方法、装置、存储介质及电子设备,能够降低计算模型占用的内存空间。
本申请提供一种内存分配方法,包括:
确定需要分配内存的多个目标计算模型;
确定每一所述目标计算模型在计算过程中需要占用内存的目标张量;
根据所述目标张量的生命周期,确定每一所述目标计算模型在计算过程中占用的目标内存空间;
将所述多个目标计算模型中占用的最大目标内存空间设为所述多个目标计算模型在计算过程中占用的总内存空间。
本申请提供一种内存分配装置,包括:
一模型确定模块,用于确定需要分配内存的多个目标计算模型;
一张量确定模块,用于确定每一所述目标计算模型在计算过程中需要占用内存的目标张量;
一空间确定模块,用于根据所述目标张量的生命周期,确定每一所述目标计算模型在计算过程中占用的目标内存空间;
一空间设定模块,用于将所述多个目标计算模型中占用的最大目标内存空间设为所述多个目标计算模型在计算过程中占用的总内存空间。
本申请提供一种存储介质,其上存储有一计算机程序,当所述计算机程序被一处理器加载时执行如本申请任一实施例提供的内存分配方法。
本申请提供的电子设备,包括一处理器和一存储器,所述存储器存储有一计算机程序,在所述计算机程序被所述处理器加载时执行如上文所述的内存分配方法。
将本申请提供的内存分配方法应用于电子设备时,将使得电子设备能够确定需要分配内存的多个目标计算模型;以及确定每一目标计算模型在计算过程中需要占用内存的目标张量;以及根据目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间;以及将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间。相应的,电子设备可以将该总内存空间大小的内存区域分配给多个目标计算模型,供其在计算过程中占用,而剩余的其它内存区域则可供电子设备运行系统、功能应用等。由此,电子设备可以仅为计算模型计算过程中的部分张量分配内存空间,而无需为其全部张量分配内存空间,从而达到降低计算模型占用内存空间的目的。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的内存分配方法的一应用场景示意图。
图2为本申请实施例提供的内存分配方法的一流程示意图。
图3是本申请实施例中确定出的总内存空间的示意图。
图4是本申请实施例中网络模型的一拓扑结构示意图。
图5是本申请实施例中划分的一算子集合的拓扑结构示例图。
图6是本申请实施例中划分的另一算子集合的拓扑结构示例图。
图7是本申请实施例中预分配内存空间的一示意图。
图8是本申请实施例中预分配内存空间的又一示意图。
图9是本申请实施例中目标张量对的一示例图。
图10是本申请实施例中为图9示出的目标张量对预分配内存的示意图。
图11是本申请实施例中执行内存整理操作的示意图。
图12是本申请实施例提供的内存分配方法的另一流程示意图。
图13是本申请实施例提供的内存分配装置300的一结构示意图。
图14是本申请实施例提供的电子设备400的一结构示意图。
具体实施方式
应当说明的是,本申请的原理是以实施在一适当的运算环境中来举例说明。以下的说明是通过所例示的本申请具体实施例,其不应被视为限制本申请未在此详述的其它具体实施例。
本申请实施例提供的方案涉及人工智能的机器学习技术,具体涉及计算模型的计算阶段,通过如下实施例进行说明:
本申请实施例提供一种内存分配方法、内存分配装置、存储介质以及电子设备,其中,该内存分配方法的执行主体可以是本申请实施例中提供的内存分配装置,或者是本申请实施例提供的电子设备,其中该内存分配装置可以采用硬件或软件的方式实现。其中,电子设备的实体展现形式可以是智能手机、平板电脑、车载电脑、掌上电脑、笔记本电脑、或者台式电脑等配置有处理器(包括但不限于通用处理器、专用处理器等,其中专用处理器比如神经网络处理器、智能处理器等)而具有处理能力的设备。
请参照图1,图1为本申请实施例提供的内存分配方法的应用场景示意图,以内存分配方法应用于实体展现形式为智能手机的电子设备为例,电子设备可以确定需要分配内存的多个目标计算模型(比如,电子设备中预置了训练完成的多个同类型或不同类型的计算模型,可以从这些预置的计算模型中确定出需要分配内存的计算模型,记为目标计算模型);确定每一目标计算模型在计算过程中需要占用内存的目标张量;根据目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间;将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间。由此,电子设备可以将该总内存空间大小的内存区域分配给多个目标计算模型,供其在计算过程中占用,而剩余的其它内存区域则可供电子设备运行系统、功能应用等。
请参照图2,图2为本申请实施例提供的内存分配方法的流程示意图,本申请实施例提供的内存分配方法的流程可以如下:
在101中,确定需要分配内存的多个目标计算模型。
以下以内存分配方法的执行主体为电子设备进行说明。
应当说明的是,计算模型(包括但不限于高斯模型、回归模型、网络模型等)在计算过程中会产生中间数据,这些中间数据通常需要通过内存进行承载,相应的,为了确保计算模型能够正常计算,电子设备需要为计算模型分配内存。
相应的,在本申请实施例中,电子设备首先按照配置的模型确定策略,确定出需要分配内存的多个计算模型,记为目标计算模型。其中,本申请实施例对模型确定策略的配置不做具体限定,可由本领域普通技术人员根据实际需要进行配置。
示例性的,模型确定策略可以被配置为:将电子设备上部署全部的计算模型确定为需要分配内存的目标计算模型。
模型确定策略还可以被配置为:将电子设备上部署的且预设时间段内存在计算需求的计算模型确定为需要分配内存的目标计算模型等。
比如,假设电子设备上部署有4个计算模型,分别为计算模型A、计算模型B、计算模型C以及计算模型D,若模型确定策略被配置为:将电子设备上全部的计算模型确定为需要分配内存的目标计算模型,则电子设备将其上部署的计算模型A、计算模型B、计算模型C以及计算模型D共4个计算模型确定为需要分配内存的多个目标计算模型。
在102中,确定每一目标计算模型在计算过程中需要占用内存的目标张量。
如上所述,张量作为计算模型计算过程中的中间数据,通常需要通过内存进行承载,但是,在特定情形下,计算模型计算过程中产生的张量可以通过内存之外的其它器件承载,比如,可以通过处理器中的缓存进行承载。基于此,本申请实施例预先配置有张量确定策略,该张量确定策略用于描述如何确定需要占用内存的张量,也即是由内存承载的张量。
相应的,电子设备在确定出需要分配内存的多个目标计算模型之后时,进一步按照配置的张量确定策略,确定出每一目标计算模型在计算过程中需要占用内存的张量,记为目标张量。由此,电子设备并不为目标计算模型在计算过程中产生的全部张量分配内存,而是为其中的部分张量分配内存。
比如,假设计算模型A在计算过程中共产生5个张量,则根据配置的张量确定策略,电子设备可以仅将5个张量中的1个、2个、3个、或者4个张量确定为需要分配内存的目标张量。
在103中,根据每一目标计算模型中目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间。
其中,目标张量的生命周期可以理解为目标张量从开始产生到使用完成的整个周期,可以划分为两个阶段,即存活状态和非存活状态。基于此,本申请实施例配置有基于生命周期的空间确定策略,比如,仅确保处于存活状态的目标张量占用内存。
本申请实施例中,在确定出每一目标计算模型在计算过程中需要占用内存的目标张量之后,电子设备进一步获取到每一目标物理模型中目标张量的生命周期,并按照配置的空间确定策略,根据每一目标计算模型中目标张量的生命周期,确定出每一目标计算模型在计算过程中占用的内存空间,记为目标内存空间。
在104中,将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间。
本申请实施例中,在确定出每一目标计算模型在计算过程中占用的目标内存空间之后,电子设备进一步将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间,即,多个目标计算模型将在计算时复用该总内存空间大小的内存区域。
比如,电子设备确定出三个目标计算模型,分别为目标计算模型A、目标计算模型B以及目标计算模型C,假设确定出目标计算模型A在计算过程中占用的目标内存空间为电子设备全部内存空间的25%,目标计算模型B在计算过程中占用的目标内存空间为电子设备全部内存空间的20%,目标计算模型C在计算过程中占用的目标内存空间为电子设备全部内存空间的15%,则电子设备将电子设备全部内存空间的25%设为目标计算模型A、目标计算模型B以及目标计算模型C在计算过程中占用的总内存空间,如图3所示。
由上可知,将本申请提供的内存分配方法应用于电子设备时,将使得电子设备能够确定需要分配内存的多个目标计算模型;以及确定每一目标计算模型在计算过程中需要占用内存的目标张量;以及根据目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间;以及将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间。相应的,电子设备可以将该总内存空间大小的内存区域分配给多个目标计算模型,供其在计算过程中占用,而剩余的其它内存区域则可供电子设备运行系统、功能应用等。由此,电子设备可以仅为计算模型计算过程中的部分张量分配内存空间,而无需为其全部张量分配内存空间,从而达到降低计算模型占用内存空间的目的。
可选地,在一实施例中,确定每一目标计算模型在计算过程中需要占用内存的目标张量,包括:
(1)对每一目标计算模型进行拓扑分析,得到每一目标计算模型中算子的拓扑结构;
(2)根据拓扑结构,对每一目标计算模型中的算子进行深度优先排序,得到排序信息;
(3)根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合;
(4)确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量;
其中,算子集合至少包括一个预设类型算子,预设类型算子的输入张量的形状与输出张量的形状不同。
应当说明的是,计算模型从宏观上来看是网状结构,由多种不同类型的算子构成。比如,请参照图4,图中圆形代表不同的算子,任意两个圆形之间的连线即代表了对应两个算子间的连接关系以及数据流向。
本申请实施例中,对于每一目标计算模型,电子设备首先对其进行拓扑分析,从而得到每一目标计算模型中算子的拓扑结构,该拓扑结构即描述了目标计算模型算子的连接关系,以及其中数据的流向。如图4所示,每一目标计算模型的拓扑结构可以通过有向无环图的形式进行可视化的呈现。
在完成对全部目标计算模型的拓扑分析,并相应得到每一目标计算模型的拓扑结构之后,电子设备进一步根据每一目标计算模型的拓扑结构,对每一目标计算模型中的算子进行深度优先排序,得到对应的排序信息。
在完成对全部目标计算模型的排序,并相应得到每一目标计算模型的排序信息之后,电子设备进一步根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合。其中,算子集合至少包括一个预设类型算子,预设类型算子的输入张量的形状与输出张量的形状不同。比如,请参照图5,划分的某算子集合包括三个算子,分别为依次连接的预设类型算子A、非预设类型算子B和非预设类型算子C。其中,非预设类型算子的输入张量的形状与输出张量的形状相同,包括但不限于加法算子、减法算子、乘法算子、除法算子以及激活算子等。
在完成对全部目标计算模型的划分之后,电子设备进一步按照配置的张量确定策略,确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量。
本申请实施例通过将完整的目标计算模型拆分为多个算子集合,并将算子集合作为内存分配的对象,相较于将整个目标计算模型作为内存分配的对象,本申请实施例能够提高内存分配的准确性。
可选地,在一实施例中,根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合,包括:
根据每一目标计算模型的排序信息,以算子集合的首位算子为预设类型算子,将预设类型算子以及预设类型算子连接的非预设类型算子划分为同一算子集合。
本申请实施例进一步提供一种可选的算子集合的划分方式。
其中,在进行算子集合的划分时,电子设备可以根据每一目标计算模型的排序信息,以算子集合的首位算子为预设类型算子,且预设类型算子和非预设类型算子不交叉为约束条件,将预设类型算子以及预设类型算子连接的非预设类型算子划分为同一算子集合。
比如,请参照图6,示出了一算子集合,该算子集合的首位算子为卷积算子,依次连接了乘法算子、加法算子以激活算子,其中,卷积算子为预设类型算子,乘法算子、加法算子和激活算子为非预设类型算子。如图6所示,其中卷积算子的输出张量的形状为(1x112x112x64);乘法算子的输入张量即为卷积算子的输出张量,乘法算子的输出张量与自身输入张量的形状相同,同为(1x112x112x64);加法算子的输入张量即为乘法算子的输出张量,加法算子的输出张量与自身输入张量的形状相同,同为(1x112x112x64);激活算子的输入张量即为加法算子的输出张量,激活算子的输出张量与自身输入张量的形状相同,同为(1x112x112x64)。
通过以上相关描述,本领域普通技术人员应当可以理解,本申请实施例中所划分的算子集合至少包括一个预设类型算子(可以不包括非预设类型算子),通俗的说,算子集合中可以仅存在一个预设类型算子,也可以存在一个预设类型算子、及与其连接的一个或多个非预设类型算子(具体根据目标计算模型的排序信息确定)。
基于本申请实施例所提供的算子集合的划分方式,在确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量时,电子设备可以将每一目标计算模型所包括的算子集合的输入张量和输出张量确定为目标张量。
本领域普通技术人员应当理解的是,对于本申请实施例所划分的算子集合,从整体上看,该算子集合内部的张量形状是相同的,仅其输入张量(即首位预设类型算子的输入张量)和输出张量(即末位非预设类型算子的输出张量,若算子集合仅存在一个预设类型算子而不存在非预设类型算子,算子集合的输出张量即为该预设类型算子的输出张量)的形状不同,因此,本申请实施例中仅为算子集合的输入张量和输出张量分配内存,相应将其设为目标张量,而算子集合内部的张量则可以通过缓存进行承载,无需为其分配内存。
可选地,在一实施例中,根据目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间,包括:
(1)根据目标张量的生命周期,以处于存活状态的目标张量占用内存空间且处于非存活状态的目标张量释放内存空间为约束条件,为每一目标计算模型预分配内存空间;
(2)将预分配的每一目标计算模型的内存空间确定为其在计算过程中占用内存的目标内存空间。
本申请实施例进一步提供一种可选的空间确定策略。
其中,在确定每一目标计算模型在计算过程中占用的目标内存空间时,电子设备根据目标张量的生命周期,以处于存活状态的目标张量占用内存空间且处于非存活状态的目标张量释放内存空间为约束条件,为每一目标计算模型预分配内存空间,得到预分配的内存空间。
应当说明的是,预分配并不实际分配内存,而是一个预测的过程,通过仅保证处于存活状态的目标张量占用内存空间,在其切换至非存活状态时释放其占用的内存空间,供存活状态的其它目标张量复用,由此,可以得到目标计算模型计算所需要的内存空间的最大值,将其作为预分配的内存空间。
比如,在目标张量A由非存活状态切换至存活状态时,为目标张量A预分配其实际需要大小的内存空间,而当其由存活状态切换至非存活状态时,将分配给目标张量A的内存空间释放,该释放的空间可以再次分配给其它由费存活状态切换至存活状态的目标张量,而无需预分配的新的内存空间。
如上所述,预分配的内存空间也即是预测的目标计算模型计算所需要的内存空间的最大值,因此,可以直接将预分配的每一目标计算模型的内存空间确定为其在计算过程中占用内存的目标内存空间。
可选地,在一实施例中,为每一目标计算模型预分配内存空间,包括:
在目标张量由非存活状态切换至存活状态时,若已释放的内存空间足够目标张量占用,则从已释放的内存空间中为目标张量预分配内存空间。
比如,请参照图7,当目标张量A由非存活状态切换至存活状态时,电子设备识别曾经分配给其它目标张量但是当前已释放的内存空间是否足够目标张量A占用,如图7所示,当前已释放的内存空间足够目标张量A占用,此时电子设备从已释放的内存空间中为目标张量A预分配其需要占用大小的内存空间,这样剩余的已释放内存空间则可在需要时预分配给其它目标张量。
可选地,在一实施例中,为每一目标计算模型预分配内存空间,还包括:
在目标张量由非存活状态切换至存活状态时,若已释放的内存空间不足以供目标张量占用,则为目标张量预分配新的内存空间。
比如,请参照图8,在t1时刻,目标张量A和目标张量B由非存活状态切换至存活状态,由于此时并不存在已释放的内存空间,电子设备将分别为目标张量A和目标张量B预分配其需要占用大小的内存空间。
在t2时刻,目标张量A由存活状态切换至非存活状态,电子设备相应释放分配给目标张量A的内存空间。
在t3时刻,目标张量C由非存活状态切换至存活状态,但是当前已释放的内存空间不足够目标张量C占用,此时电子设备为目标张量C预分配新的内存空间,此时,用于承载目标张量的总的内存空间相应增加。
在t4时刻,目标张量B由存活状态切换费存活状态,电子设备相应释放分配给目标张量B的内存空间。
在t5时刻,已释放的内存空间包括之前预分配给目标张量A的内存空间和预分配给目标张量B的内存空间,此时目标张量D由非存活状态切换至存活状态,且已释放的内存空间足够目标张量D占用,则电子设备相应从已释放的内存空间中为目标张量D预分配内存空间。
总的说来,本申请实施例中,在预分配内存空间时,按照存活状态的目标张量占用内存,释放非存活状态的目标张量的内存空间为约束,即在预分配内存空间时,对于存活状态的目标张量,优先从已释放的内存空间中预分配内存空间,若已释放的内存空间不足够目标张量占用,则为目标张量预分配新的内存空间。
可选地,在一实施例中,为每一目标计算模型预分配内存空间,还包括:
(1)确定出每一目标计算模型的目标张量中存在输入输出关系目标张量对,目标张量对包括输入目标张量和对应的输出目标张量;
(2)对于每一目标张量对,若其中的输入目标张量被输入后不再使用,则为目标张量对预分配同一内存空间。
应当说明的是,就单层的输入和输出而言,输入张量及其对应的目标张量同时存活,数据一个一个的计算,若输入张量使用一次后不再使用第二次,则该输入张量所占的内存空间就可以被重写,这样,在一定程度上,输出张量可以复用其对应的输入张量的内存空间。
相应的,在本申请实施例中,在为每一所述目标计算模型预分配内存空间时,电子设备还确定出每一目标计算模型的目标张量中存在输入输出关系的目标张量对,该目标张量对包括输入目标张量和对应的输出目标张量。
比如,请参照图9,存在两个目标张量,分别为目标张量A和目标张量B,其中目标张量A为图示算子的输入目标张量,目标张量B为图示算子的输出目标张量,相应的,目标张量A和目标张量B构成目标张量对,其中目标张量A为输入目标张量,目标张量B为输出目标张量。
在确定出目标计算模型中的目标张量对之后,针对该目标计算模型中的每一目标张量对,若其中的输入目标张量被输入后不再使用,则为该目标张量对预分配同一内存空间,也即目标张量对中的输出目标张量复用输入目标张量的内存空间。
比如,请参照图10,在t1时刻,电子设备为目标张量A预分配了内存空间,在t2时刻,目标张量A被读入缓存进行计算,且目标张量A不会被再次使用,电子设备将预分配给目标张量A的内存空间释放,并预分配给目标张量B,其中,目标张量B为目标张量A进行计算后所输出的目标张量。
可选地,在一实施例中,将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间之后,还包括:
将前述总内存空间分配给前述多个目标计算模型,其中,每一目标计算模型复用前述内存。
如上所述,以上总内存空间为多个目标计算模型在计算过程中占用的目标内存空间的最大值,该总内存空间可以满足每一目标计算模型的计算所需。因此,可以为多个目标计算模型分配前述总内存空间大小的内存区域,其中,每一目标计算模型复用分配的前述总内存空间大小的内存区域。
应当说明的是,以上目标计算模型占用的内存方式可以参照预分配内存的过程相应实施,此处不再祥述。
可选地,在一实施例中,将前述总内存空间分配给前述多个目标计算模型之后,还包括:
在每一目标计算模型的计算过程中,通过预设缓存承载其包括的每一算子集合内部的非目标张量。
通过以上相关描述,本领域普通技术人员可以理解的是,对于每一目标计算模型而言,其包括多个算子集合,针对任一算子集合,该算子集合内部的非目标张量的形状相同,无需通过内存承载。相应的,在本申请实施例中,在每一目标计算模型的计算过程中,电子设备通过预设缓存承载其包括的每一算子集合内部的非目标张量。比如,请参照图6,在图6所示的算子集合内部,卷积算子至激活算子之间的张量均为非目标张量,电子设备相应通过预设缓存承载。
应当说明的是,本申请实施例中对于预设缓存的配置不做具体限制,可由本领域普通技术人员根据实际需要进行配置,比如,可以配置为电子设备处理器的内部缓存。
可选地,将前述总内存空间分配给前述多个目标计算模型之后,还包括:
在每一目标计算模型的计算过程中,在总内存空间中的未占用内存空间足够目标张量占用,但未占用内存空间的最大空白块不足够目标张量占用时,对未占用内存空间执行内存整理操作。
本申请实施例中,为了确保目标张量对内存的稳定占用,在每一目标计算模型的计算过程中,电子设备会实时判断总内存空间中的未占用内存空间(包括已释放的内存空间和未被占用过内存空间)是否足够目标张量占用,若足够,则进一步判断未占用内存空间的最大空白块是否足够目标张量,若未占用内存空间的最大空白块不足够目标张量占用时,电子设备将对未占用内存空间执行内存整理操作。
比如,请参照图11,在t1时刻,目标张量D由非存活状态切换至存活状态,此时未占用内存空间包括两个空白块,分别为空白块1和空白块2,但是其中的最大空白块“空白块2”也不足够目标张量D占用。相应的,电子设备对未占用空间执行内存整理操作,将空白块1和空白块2整合为更大的空白块3。然后,电子设备从空白块3中为目标张量D分配内存空间供其占用,并剩余空白块4可用。
可选地,在一实施例中,确定需要分配内存的多个目标计算模型,包括:
在接收到计算任务时,将执行接收到的计算任务所需的计算模型设为目标计算模型。
本申请实施例进一步提供一种可选地模型确定策略。
其中,电子设备在接收到计算任务时,将执行接收到的计算任务所需的计算模型设为目标计算模型。
比如,假设电子设备上部署有4个计算模型,分别为计算模型A、计算模型B、计算模型C以及计算模型D,在接收到某计算任务,且该计算任务需要由计算模型A、计算模型C以及计算模型D协同完成时,则电子设备相应将计算模型A、计算模型B以及计算模型C确定为需要分配内存的多个目标计算模型。
可选地,在一实施例中,目标计算模型为一网络模型。
请参照图12,图12为本申请实施例提供的内存分配方法的另一流程示意图,以下以内存分配方法的执行主体为本申请提供的电子设备,计算模型为网络模型为例进行说明,如图12所示,本申请实施例提供的内存分配方法的流程还可以如下:
在201中,电子设备确定需要分配内存的多个目标网络模型。
应当说明的是,网络模型在计算过程中会产生中间数据,这些中间数据通常需要通过内存进行承载,相应的,为了确保网络模型能够正常计算,电子设备需要为网络模型分配内存。
相应的,在本申请实施例中,电子设备首先按照配置的模型确定策略,确定出需要分配内存的多个网络模型,记为目标网络模型。其中,本申请实施例对模型确定策略的配置不做具体限定,可由本领域普通技术人员根据实际需要进行配置。
示例性的,模型确定策略可以被配置为:将电子设备上部署全部的网络模型确定为需要分配内存的目标网络模型。
模型确定策略还可以被配置为:将电子设备上部署的且预设时间段内存在计算需求的网络模型确定为需要分配内存的目标网络模型等。
比如,假设电子设备上部署有4个网络模型,分别为网络模型A、网络模型B、网络模型C以及网络模型D,若模型确定策略被配置为:将电子设备上全部的网络模型确定为需要分配内存的目标网络模型,则电子设备将其上部署的网络模型A、网络模型B、网络模型C以及网络模型D共4个网络模型确定为需要分配内存的多个目标网络模型。
在202中,电子设备对每一目标网络模型进行拓扑分析,得到每一目标网络模型中算子的拓扑结构。
应当说明的是,网络模型从宏观上来看是网状结构,由多种不同类型的算子构成。比如,请参照图4,图中圆形代表不同的算子,任意两个圆形之间的连线即代表了对应两个算子间的连接关系以及数据流向。
本申请实施例中,对于每一目标网络模型,电子设备首先对其进行拓扑分析,从而得到每一目标网络模型中算子的拓扑结构,该拓扑结构即描述了目标网络模型算子的连接关系,以及其中数据的流向。如图4所示,每一目标网络模型的拓扑结构可以通过有向无环图的形式进行可视化的呈现。
在203中,电子设备根据每一目标网络模型拓扑结构,对每一目标网络模型中的算子进行深度优先排序,得到排序信息。
在完成对全部目标网络模型的拓扑分析,并相应得到每一目标网络模型的拓扑结构之后,电子设备进一步根据每一目标网络模型的拓扑结构,对每一目标网络模型中的算子进行深度优先排序,得到对应的排序信息。
在204中,电子设备根据每一目标网络模型的排序信息,以算子集合的首位算子为预设类型算子,将预设类型算子以及预设类型算子连接的非预设类型算子划分为同一算子集合,相应得到多个算子集合。
在完成对全部目标网络模型的排序,并相应得到每一目标网络模型的排序信息之后,电子设备进一步根据每一目标网络模型的排序信息,将每一目标网络模型划分为多个算子集合。
其中,在进行算子集合的划分时,电子设备可以根据每一目标网络模型的排序信息,以算子集合的首位算子为预设类型算子,且预设类型算子和非预设类型算子不交叉为约束条件,将预设类型算子以及预设类型算子连接的非预设类型算子划分为同一算子集合。
比如,请参照图6,示出了一算子集合,该算子集合的首位算子为卷积算子,依次连接了乘法算子、加法算子以激活算子,其中,卷积算子为预设类型算子,乘法算子、加法算子和激活算子为非预设类型算子。如图6所示,其中卷积算子的输出张量的形状为(1x112x112x64);乘法算子的输入张量即为卷积算子的输出张量,乘法算子的输出张量与自身输入张量的形状相同,同为(1x112x112x64);加法算子的输入张量即为乘法算子的输出张量,加法算子的输出张量与自身输入张量的形状相同,同为(1x112x112x64);激活算子的输入张量即为加法算子的输出张量,激活算子的输出张量与自身输入张量的形状相同,同为(1x112x112x64)。
通过以上相关描述,本领域普通技术人员应当可以理解,本申请实施例中所划分的算子集合至少包括一个预设类型算子(可以不包括非预设类型算子),通俗的说,算子集合中可以仅存在一个预设类型算子,也可以存在一个预设类型算子、及与其连接的一个或多个非预设类型算子(具体根据目标网络模型的排序信息确定)。
比如,请参照图5,划分的某算子集合包括三个算子,分别为依次连接的预设类型算子A、非预设类型算子B和非预设类型算子C。其中,非预设类型算子的输入张量的形状与输出张量的形状相同,包括但不限于加法算子、减法算子、乘法算子、除法算子以及激活算子等。
在205中,电子设备将每一目标网络模型所包括的算子集合的输入张量和输出张量确定为需要占用内存的目标张量。
基于本申请实施例所提供的算子集合的划分方式,在确定每一目标网络模型包括的算子集合在计算过程中需要占用内存的目标张量时,电子设备可以将每一目标网络模型所包括的算子集合的输入张量和输出张量确定为目标张量。
本领域普通技术人员应当理解的是,对于本申请实施例所划分的算子集合,从整体上看,该算子集合内部的张量形状是相同的,仅其输入张量(即首位预设类型算子的输入张量)和输出张量(即末位非预设类型算子的输出张量,若算子集合仅存在一个预设类型算子而不存在非预设类型算子,算子集合的输出张量即为该预设类型算子的输出张量)的形状不同,因此,本申请实施例中仅为算子集合的输入张量和输出张量分配内存,相应将其设为目标张量,而算子集合内部的张量则可以通过缓存进行承载,无需为其分配内存。
在206中,电子设备根据目标张量的生命周期,以处于存活状态的目标张量占用内存空间且处于非存活状态的目标张量释放内存空间为约束条件,为每一目标网络模型预分配内存空间。
其中,目标张量的生命周期可以理解为目标张量从开始产生到使用完成的整个周期,可以划分为两个阶段,即存活状态和非存活状态。基于此,本申请实施例配置有基于生命周期的空间确定策略,比如,仅确保处于存活状态的目标张量占用内存。
本申请实施例中,在确定出每一目标网络模型在计算过程中需要占用内存的目标张量之后,电子设备进一步获取到每一目标物理模型中目标张量的生命周期。然后,电子设备根据目标张量的生命周期,以处于存活状态的目标张量占用内存空间且处于非存活状态的目标张量释放内存空间为约束条件,为每一目标网络模型预分配内存空间,得到预分配的内存空间。
应当说明的是,预分配并不实际分配内存,而是一个预测的过程,通过仅保证处于存活状态的目标张量占用内存空间,在其切换至非存活状态时释放其占用的内存空间,供存活状态的其它目标张量复用,由此,可以得到目标网络模型计算所需要的内存空间的最大值,将其作为预分配的内存空间。
比如,在目标张量A由非存活状态切换至存活状态时,为目标张量A预分配其实际需要大小的内存空间,而当其由存活状态切换至非存活状态时,将分配给目标张量A的内存空间释放,该释放的空间可以再次分配给其它由费存活状态切换至存活状态的目标张量,而无需预分配的新的内存空间。
在207中,电子设备将预分配的每一目标网络模型的内存空间确定为其在计算过程中占用内存的目标内存空间。
如上所述,预分配的内存空间也即是预测的目标网络模型计算所需要的内存空间的最大值,因此,可以直接将预分配的每一目标网络模型的内存空间确定为其在计算过程中占用内存的目标内存空间。
在208中,电子设备将多个目标网络模型中占用的最大目标内存空间设为多个目标网络模型在计算过程中占用的总内存空间。
本申请实施例中,在确定出每一目标网络模型在计算过程中占用的目标内存空间之后,电子设备进一步将多个目标网络模型中占用的最大目标内存空间设为多个目标网络模型在计算过程中占用的总内存空间,即,多个目标网络模型将在计算时复用该总内存空间大小的内存区域。
比如,电子设备确定出三个目标网络模型,分别为目标网络模型A、目标网络模型B以及目标网络模型C,假设确定出目标网络模型A在计算过程中占用的目标内存空间为电子设备全部内存空间的25%,目标网络模型B在计算过程中占用的目标内存空间为电子设备全部内存空间的20%,目标网络模型C在计算过程中占用的目标内存空间为电子设备全部内存空间的15%,则电子设备将电子设备全部内存空间的25%设为目标网络模型A、目标网络模型B以及目标网络模型C在计算过程中占用的总内存空间,如图3所示。
请参照图13,图13为本申请实施例提供的内存分配装置300的结构示意图。其中该内存分配装置300应用于电子设备,该内存分配装置300包括:
一模型确定模块301,用于确定需要分配内存的多个目标计算模型;
一张量确定模块302,用于确定每一目标计算模型在计算过程中需要占用内存的目标张量;
一空间确定模块303,用于根据每一目标计算模型中目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间;
一空间设定模块304,用于将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间。
可选地,在一实施例中,在确定每一目标计算模型在计算过程中需要占用内存的目标张量时,张量确定模块302用于:
对每一目标计算模型进行拓扑分析,得到每一目标计算模型中算子的拓扑结构;
根据拓扑结构,对每一目标计算模型中的算子进行深度优先排序,得到排序信息;
根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合;
确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量;
其中,算子集合至少包括一个预设类型算子,预设类型算子的输入张量的形状与输出张量的形状不同。
可选地,在一实施例中,在根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合时,张量确定模块302用于:
根据每一目标计算模型的排序信息,以算子集合的首位算子为预设类型算子,将预设类型算子以及预设类型算子连接的非预设类型算子划分为同一算子集合。
可选地,在一实施例中,在确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量时,张量确定模块302用于:
将每一目标计算模型所包括的算子集合的输入张量和输出张量确定为目标张量。
可选地,在一实施例中,在根据目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间时,空间确定模块303用于:
根据目标张量的生命周期,以处于存活状态的目标张量占用内存空间且处于非存活状态的目标张量释放内存空间为约束条件,为每一目标计算模型预分配内存空间;
将预分配的每一目标计算模型的内存空间确定为其在计算过程中占用内存的目标内存空间。
可选地,在一实施例中,在为每一目标计算模型预分配内存空间时,空间确定模块303用于:
在目标张量由非存活状态切换至存活状态时,若已释放的内存空间足够目标张量占用,则从已释放的内存空间中为目标张量预分配内存空间。
可选地,在一实施例中,在为每一目标计算模型预分配内存空间时,空间确定模块303还用于:
在目标张量由非存活状态切换至存活状态时,若已释放的内存空间不足以供目标张量占用,则为目标张量预分配新的内存空间。
可选地,在一实施例中,在为每一目标计算模型预分配内存空间时,空间确定模块303还用于:
确定出每一目标计算模型的目标张量中存在输入输出关系目标张量对,目标张量对包括输入目标张量和对应的输出目标张量;
对于每一目标张量对,若其中的输入目标张量被输入后不再使用,则为目标张量对预分配同一内存空间。
可选地,在一实施例中,在将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间之后,空间设定模块304还用于:
将前述总内存空间分配给前述多个目标计算模型,其中,每一目标计算模型复用前述内存。
可选地,在一实施例中,本申请提供的内存分配装置还包括张量承载模块,在将前述总内存空间分配给前述多个目标计算模型之后,用于:
在每一目标计算模型的计算过程中,通过预设缓存承载其包括的每一算子集合内部的非目标张量。
可选地,在一实施例中,本申请提供的内存分配装置300还包括内存整理模块,在将前述总内存空间分配给前述多个目标计算模型之后,用于:
在每一目标计算模型的计算过程中,在总内存空间中的未占用内存空间足够目标张量占用,但未占用内存空间的最大空白块不足够目标张量占用时,对未占用内存空间执行内存整理操作。
可选地,在一实施例中,在确定需要分配内存的多个目标计算模型时,模型确定模块301用于:
在接收到计算任务时,将执行接收到的计算任务所需的计算模型设为目标计算模型。
可选地,在一实施例中,目标计算模型为一网络模型。
应当说明的是,本申请实施例提供的内存分配装置300与上文实施例中的内存分配方法属于同一构思,在内存分配装置300上可以运行内存分配方法实施例中提供的任一方法,其具体实现过程详见以上实施例,此处不再赘述。
在一实施例中,还提供一种电子设备,请参照图14,电子设备400包括一处理器401和一存储器402。
本申请实施例中的处理器401可以是通用处理器,也可以是专用处理器,比如一神经网络处理器。
存储器402中存储有一计算机程序,其可以为高速随机存取存储器,还可以为非易失性存储器,比如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件等。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402中计算机程序的访问,实现如下功能:
确定需要分配内存的多个目标计算模型;
确定每一目标计算模型在计算过程中需要占用内存的目标张量;
根据每一目标计算模型中目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间;
将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间。
在一实施例中,在确定每一目标计算模型在计算过程中需要占用内存的目标张量时,处理器401用于:
对每一目标计算模型进行拓扑分析,得到每一目标计算模型中算子的拓扑结构;
根据拓扑结构,对每一目标计算模型中的算子进行深度优先排序,得到排序信息;
根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合;
确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量;
其中,算子集合至少包括一个预设类型算子,预设类型算子的输入张量的形状与输出张量的形状不同。
可选地,在一实施例中,在根据每一目标计算模型的排序信息,将每一目标计算模型划分为多个算子集合时,处理器401用于:
根据每一目标计算模型的排序信息,以算子集合的首位算子为预设类型算子,将预设类型算子以及预设类型算子连接的非预设类型算子划分为同一算子集合。
可选地,在一实施例中,在确定每一目标计算模型包括的算子集合在计算过程中需要占用内存的目标张量时,处理器401用于:
将每一目标计算模型所包括的算子集合的输入张量和输出张量确定为目标张量。
可选地,在一实施例中,在根据目标张量的生命周期,确定每一目标计算模型在计算过程中占用的目标内存空间时,处理器401用于:
根据目标张量的生命周期,以处于存活状态的目标张量占用内存空间且处于非存活状态的目标张量释放内存空间为约束条件,为每一目标计算模型预分配内存空间;
将预分配的每一目标计算模型的内存空间确定为其在计算过程中占用内存的目标内存空间。
可选地,在一实施例中,在为每一目标计算模型预分配内存空间时,处理器401:
在目标张量由非存活状态切换至存活状态时,若已释放的内存空间足够目标张量占用,则从已释放的内存空间中为目标张量预分配内存空间。
可选地,在一实施例中,在为每一目标计算模型预分配内存空间时,处理器401还用于:
在目标张量由非存活状态切换至存活状态时,若已释放的内存空间不足以供目标张量占用,则为目标张量预分配新的内存空间。
可选地,在一实施例中,在为每一目标计算模型预分配内存空间时,处理器401还用于:
确定出每一目标计算模型的目标张量中存在输入输出关系目标张量对,目标张量对包括输入目标张量和对应的输出目标张量;
对于每一目标张量对,若其中的输入目标张量被输入后不再使用,则为目标张量对预分配同一内存空间。
可选地,在一实施例中,在将多个目标计算模型中占用的最大目标内存空间设为多个目标计算模型在计算过程中占用的总内存空间之后,处理器401还用于:
将前述总内存空间分配给前述多个目标计算模型,其中,每一目标计算模型复用前述内存。
可选地,在一实施例中,在将前述总内存空间分配给前述多个目标计算模型之后,处理器401还用于:
在每一目标计算模型的计算过程中,通过预设缓存承载其包括的每一算子集合内部的非目标张量。
可选地,在一实施例中,在将前述总内存空间分配给前述多个目标计算模型之后,处理器401还用于:
在每一目标计算模型的计算过程中,在总内存空间中的未占用内存空间足够目标张量占用,但未占用内存空间的最大空白块不足够目标张量占用时,对未占用内存空间执行内存整理操作。
可选地,在一实施例中,在确定需要分配内存的多个目标计算模型时,处理器401用于:
在接收到计算任务时,将执行接收到的计算任务所需的计算模型设为目标计算模型。
可选地,在一实施例中,目标计算模型为一网络模型。
应当说明的是,本申请实施例提供的电子设备400与上文实施例中的内存分配方法属于同一构思,在电子设备400上可以运行内存分配方法实施例中提供的任一方法,其具体实现过程详见内存分配方法实施例,此处不再赘述。
需要说明的是,对本申请实施例的内存分配方法而言,本领域普通技术人员可以理解实现本申请实施例的内存分配方法的全部或部分流程,是可以通过计算机程序来控制相关的硬件来完成,所述计算机程序可存储于一计算机可读取存储介质中,如存储在电子设备的存储器中,并被该电子设备内的处理器执行,在执行过程中可包括如内存分配方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储器、随机存取记忆体等。
以上对本申请实施例所提供的一种内存分配方法、装置、存储介质及电子设备进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。