CN111708641A - 一种内存管理方法、装置、设备及计算机可读存储介质 - Google Patents

一种内存管理方法、装置、设备及计算机可读存储介质 Download PDF

Info

Publication number
CN111708641A
CN111708641A CN202010677232.6A CN202010677232A CN111708641A CN 111708641 A CN111708641 A CN 111708641A CN 202010677232 A CN202010677232 A CN 202010677232A CN 111708641 A CN111708641 A CN 111708641A
Authority
CN
China
Prior art keywords
information
memory
input tensor
memory block
target
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010677232.6A
Other languages
English (en)
Other versions
CN111708641B (zh
Inventor
方佳瑞
于洋
周杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010677232.6A priority Critical patent/CN111708641B/zh
Publication of CN111708641A publication Critical patent/CN111708641A/zh
Application granted granted Critical
Publication of CN111708641B publication Critical patent/CN111708641B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0261Garbage collection, i.e. reclamation of unreferenced memory using reference counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种内存管理方法、装置、设备及计算机可读存储介质;方法包括:获取目标任务请求;响应目标任务请求,获取前次任务执行时所使用的前次内存块;其中,前次任务为执行目标任务之前所执行的任务,前次内存块为前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;通过遍历前次内存块,确定出目标任务对应的目标内存块;基于目标内存块,执行目标任务。通过本申请实施例,能够降低任务执行的内存消耗。

Description

一种内存管理方法、装置、设备及计算机可读存储介质
技术领域
本申请涉及计算机应用技术领域中人工智能技术,尤其涉及一种内存管理方法、装置、设备及计算机可读存储介质。
背景技术
内存是处理器直接寻址的存储空间,是外存与处理器进行沟通的桥梁;计算机中所有任务的执行,都需要利用内存来暂时存放处理器中的运算数据,以及与硬盘等外存交换的数据;也就是说,内存分配是任务执行的重要部分,因此,在利用网络模型执行正向传播预测任务的过程中,内存分配也非常重要。
一般来说,在利用网络模型执行预测任务时,如果输入数据的尺寸不断变化,中间数据的尺寸也会不断发生变化,从而,所占用的内存空间也是不断变化的;此时,在为任务的执行分配内存空间时,通常是分配一块足够大的内存块,以满足最大尺寸的输入数据对应的任务的执行;然而,在上述每次任务的执行过程中,由于每次任务的执行都是利用这样一块足够大的内存块实现的,因此内存空间的占用量较大,造成了内存空间的浪费,从而,任务执行的内存消耗大。
发明内容
本申请实施例提供一种内存管理方法、装置、设备及计算机可读存储介质,能够降低任务执行的内存消耗。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种内存管理方法,包括:
获取目标任务请求;
响应所述目标任务请求,获取前次任务执行时所使用的前次内存块;
其中,所述前次任务为执行目标任务之前所执行的任务,所述前次内存块为所述前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;
通过遍历所述前次内存块,确定出所述目标任务对应的目标内存块;
基于所述目标内存块,执行所述目标任务。
本申请实施例提供一种内存管理装置,包括:
请求获取模块,用于获取目标任务请求;
请求响应模块,用于响应所述目标任务请求,获取前次任务执行时所使用的前次内存块;其中,所述前次任务为执行目标任务之前所执行的任务,所述前次内存块为所述前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;
内存分配模块,用于通过复用所述前次内存块,确定出所述目标任务对应的目标内存块;
任务执行模块,用于基于所述目标内存块,执行所述目标任务。
在本申请实施例中,所述内存分配模块,还用于获取所述目标任务对应的输入参数信息,所述输入参数信息为所述目标任务对应的输入数据;基于预设网络模型和所述输入参数信息,计算所述目标任务对应的输入张量信息集合;遍历所述前次内存块,确定当前输入张量信息的内存块分配信息,所述当前输入张量信息为所述输入张量信息集合中的任一输入张量信息;当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块。
在本申请实施例中,所述内存分配模块,还用于依据所述预设网络模型,获取节点依赖关系和每个计算节点的张量参数,所述节点依赖关系为多个计算节点在计算顺序上的依赖关系;根据所述输入参数信息与所述张量参数,确定待分配空间量;依据所述节点依赖关系,将当前计算节点的计算顺序作为开始使用索引,将所述当前计算节点所流向节点的最后计算顺序作为终止使用索引,所述当前计算节点为所述多个计算节点中的任一计算节点;将所述待分配空间量、所述开始使用索引和所述终止使用索引,组合为与所述每个计算节点对应的输入张量信息,从而得到与所述目标任务的所述多个计算节点对应的所述输入张量信息集合。
在本申请实施例中,所述内存分配模块,还用于遍历所述前次内存块,针对当前内存块,获取已分配输入张量信息,所述当前内存块为所述前次内存块中的任一内存块,所述已分配输入张量信息为所述当前内存块中已分配的内存空间对应的输入张量信息所构成的集合;从所述已分配输入张量信息中,确定与所述当前输入张量信息相交的目标输入张量信息;基于所述目标输入张量信息所对应的内存地址信息和所述当前输入张量信息的待分配空间量,确定所述当前输入张量信息在所述当前内存块中的内存地址信息,从而得到所述内存块分配信息。
在本申请实施例中,所述内存分配模块,还用于根据所述目标输入张量信息所对应的内存地址信息,确定目标地址信息;在所述当前内存块中,获取所述目标地址信息之前的可分配空间;当所述可分配空间所对应的内存空间量大于等于所述当前输入张量信息的待分配空间量时,从所述可分配空间中确定所述当前输入张量信息在所述当前内存块中的内存地址信息;当所述可分配空间所对应的内存空间量小于所述当前输入张量信息的待分配空间量时,将所述目标地址信息更新为所述目标地址信息与所述目标输入张量信息的待分配空间量之和,从更新后的目标地址信息之后的内存空间中,确定所述当前输入张量信息在所述当前内存块中的内存地址信息。
在本申请实施例中,所述内存分配模块,还用于依据所述内存地址信息,对所述已分配输入张量信息进行排序;遍历排序后的已分配输入张量信息,获取当前已分配输入张量信息的开始使用索引和所述当前输入张量信息的开始使用索引中的最大索引,所述当前已分配输入张量信息为所述排序后的已分配输入张量信息中的任一输入张量信息;获取所述当前已分配输入张量信息的终止使用索引和所述当前输入张量信息的终止使用索引中的最小索引;当所述最大索引小于等于所述最小索引,确定所述当前已分配输入张量信息,为与所述当前输入张量信息相交的所述目标输入张量信息。
在本申请实施例中,所述内存分配模块,还用于当所述最大索引大于所述最小索引,确定所述当前已分配输入张量信息与所述当前输入张量信息不相交;当遍历完成所述排序后的已分配输入张量信息,确定不存在与所述当前输入张量信息相交的输入张量信息时,确定所述当前输入张量信息在所述当前内存块中的内存地址信息。
在本申请实施例中,所述内存分配模块,还用于当完成对所述输入张量信息集合的处理时,将所述前次内存块中遍历到的各个内存块对应的内存空间的分配信息,确定为与所述输入张量信息集合对应的所述各个内存块分配信息;将所述各个内存块分配信息,组合为所述目标内存块。
在本申请实施例中,所述内存分配模块,还用于释放所述前次内存块中未遍历到的内存块。
在本申请实施例中,所述内存分配模块,还用于遍历所述前次内存块,当遍历完所述前次内存块,确定所述前次内存块中不存在与所述当前输入张量信息适配的内存块时,基于所述当前输入张量信息的待分配空间量,分配新的内存块;确定所述当前输入张量信息在所述新的内存块的内存地址信息,从而得到所述内存块分配信息;所述当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块,包括:当完成对所述输入张量信息集合的处理时,将所述新的内存块对应的内存空间的分配信息和所述前次内存块对应的内存空间的分配信息,组合为所述目标内存块。
在本申请实施例中,所述内存分配模块,还用于计算所述当前输入张量信息对应的待分配空间量与预设规格的乘积,得到待选空间量;依据所述待选空间量和预设块空间量中的最大空间量,从内存系统中分配所述新的内存块。
在本申请实施例中,所述内存管理装置还包括下次任务执行模块,用于获取针对所述预设网络模型的下次任务请求;响应所述下次任务请求,通过遍历所述目标内存块,为下次任务分配内存空间,以执行所述下次任务。
本申请实施例提供一种内存管理设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的内存管理方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的内存管理方法。
本申请实施例至少具有以下有益效果:由于在利用预设网络模型执行目标任务时,是依据前次任务执行时所使用的内存块实现的内存空间的分配;因此,实现了对前次任务的内存块的复用,也就减少了目标任务在执行过程中内存空间的占用量,从而,能够降低任务执行的内存消耗。
附图说明
图1是一种示例性的任务执行过程中的硬件工作状态示意图;
图2a是本申请实施例提供的任务执行系统的一个可选的架构示意图;
图2b是本申请实施例提供的任务执行系统的另一个可选的架构示意图;
图3是本申请实施例提供的图2a中的服务器的组成结构示意图;
图4是本申请实施例提供的内存管理方法的一个可选的流程示意图;
图5是本申请实施例提供的内存管理方法的另一个可选的流程示意图;
图6是本申请实施例提供的一种示例性的节点依赖关系的示意图;
图7是本申请实施例提供的一种在内存块中确定内存地址信息的示意图;
图8是本申请实施例提供的另一种在内存块中确定内存地址信息的示意图;
图9是本申请实施例提供的一种示例性的内存管理方法的流程示意图;
图10是本申请实施例提供的一种示例性的输入张量信息的示意图;
图11是本申请实施例提供的一种示例性的输入张量信息集合的示意图;
图12是本申请实施例提供的一种示例性的目标内存块的示意图;
图13是本申请实施例提供的另一种示例性的内存管理方法的流程示意图;
图14是本申请实施例提供的一种示例性的拓扑结构示意图;
图15是本申请实施例提供的另一种示例性的输入张量信息集合的示意图;
图16是本申请实施例提供的另一种示例性的目标内存块的示意图;
图17是本申请实施例提供的再一种示例性的目标内存块的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)深度学习(Deep Learning,DL):是机器学习领域中一个新的研究方向,也就是说,深度学习是机器学习的一种,而机器学习是实现人工智能的必经路径。
2)自然语言处理(Nature Language processing,NLP):是计算机科学领域与人工智能领域中的一个重要方向,旨在研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法;自然语言处理时,输入数据的尺寸是变化的,是一种变输入尺度的深度学习方法。
3)人工智能(Artificial Intelligence,AI):是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。
4)机器学习(Machine Learning,ML):是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能;重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习通常包括人工神经网络、置信网络、强化学习、迁移学习和归纳学习等技术。
5)人工神经网络,是一种模仿生物神经网络结构和功能的数学模型,比如深度神经网络(Deep Neural Networks,DNN)、卷积神经网络(Convolutional Neural Network,CNN)和循环神经网络(Recurrent Neural Network,RNN)等。
6)云技术(Cloud Technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。
需要说明的是,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。
另外,人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。
随着人工智能技术的研究和进步,人工智能技术在多个领域展开了研究和应用;例如,常见的智能家居、智能穿戴设备、虚拟助理、智能音箱、智能营销、无人驾驶、自动驾驶、无人机、机器人、智能医疗和智能客服等;随着技术的发展,人工智能技术将在更多的领域得到应用,并发挥越来越重要的价值。而本申请实施例中,对人工智能的应用领域不作具体限定。
还需要说明的是,本申请实施例所提供的内存管理方法,可以应用在任意应用场景下利用网络模型进行正向传播处理的过程中;比如,可以应用在云平台利用网络模型进行正向传播处理的过程中,以降低云平台中内存空间的消耗,从而提升云服务质量;又比如,还可以在服务器中利用网络模型进行整形传播处理的过程中,以降低服务器中内存空间的消耗,从而提升服务器的服务计算质量。
需要说明的是,云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
一般来说,网络模型包括训练阶段、推理阶段和应用阶段;其中,训练阶段指利用样本数据在构建的网络模型中进行正向传播,以获得预测结果,将该预测结果与样本数据对应的实际结果进行对比,并通过反向传播,逐层更新模型参数的过程;即训练阶段是根据输入数据来训练网络模型获得有意义的网络模型参数的过程。推理阶段指训练阶段完成后的测试阶段,即利用现场数据,执行推理任务,测试训练好的网络模型能否达到业务需求的过程;即推理阶段是载入训练好的网络模型参数,通过网络模型获得推理结果的过程。应用阶段指网络模型投入实际应用场景中执行预测任务的过程。
本申请实施例所提供的内存管理方法,可以应用在推理阶段,也可以应用在应用阶段;也就是说,本申请实施例所提供的内存管理方法适用于利用网络模型执行正向传播处理的场景中。
另外,随着人工智能领域的发展,网络模型的输入数据的尺寸有的是变化的,有的是不变的,而本申请实施例所提供的内存管理方法,应用在输入数据的尺寸是变化的网络模型的预测任务或推理任务中。
需要说明的是,当网络模型的输入数据的尺寸不变时,表明任务执行过程中所需的内存空间量是不变的;此时,通过计算获得所需内存空间量,在反复执行任务的过程中,反复依据所需内存空间量进行内存空间的分配即可。然而,当网络模型的输入数据的尺寸是变化时,将导致任务执行过程中的中间数据的尺寸也是不断变化,表明任务执行过程中所需的内存空间量也是变化的;此时,考虑到输入数据是任务执行时就获取到的数据,对应的内存空间的分配不影响任务执行过程中的内存消耗;而网络模型是定的,其中的网络模型参数也是固定的,直接在网络模型对应的应用启动时为网络模型参数分配内存空间,并在应用终止时释放内存空间即可;因此,本申请实施例提供了一种为尺寸变化的中间数据分配内存空间,以实现网络模型对应的任务的执行的方法。
另外,在分配释放内存空间时,是非常耗时的;参见图1,图1是一种示例性的任务执行过程中的硬件工作状态示意图;如图1所示,示出了在运行网络模型对应的应用“runtime”时,GPU(Graphics Processing Unit,图形处理器)中的计算硬件1-1即CUDA(Compute Unified Device Architecture,运算平台)随时间(5698.5毫秒至5703.5毫秒)的工作状态;其中,1-2和1-3显示的信息表示CUDA处于工作状态,而1-4显示的信息表示CUDA在该段时间内等待内存空间的分配而无法进行计算,处于空闲状态。如此表明,反复的分配释放内存空间将会降低硬件的执行效率。另外,内存空间量的占用也是内存消息的一种形式。
一般来说,在利用网络模型执行预测任务时,如果输入数据的尺寸不断变化,中间数据的尺寸也会不断发生变化,从而,所占用的内存空间也是不断变化的;此时,在为任务的执行分配内存空间时,通常是分配一块足够大的内存块,以满足最大尺寸的输入数据对应的任务的执行;然而,在上述每次任务的执行过程中,由于每次任务的执行都是利用这样一块足够大的内存块实现的,因此在输入数据的尺寸较小时,造成了内存空间的浪费,从而,任务执行的内存消耗大。
本申请实施例提供一种内存管理方法、装置、设备和计算机可读存储介质,能够减少内存空间量的占用,降低内存消耗。
下面说明本申请实施例提供的内存管理设备的示例性应用,本申请实施例提供的内存管理设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的用户终端,也可以实施为服务器。其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。下面,将说明内存管理设备实施为服务器时的示例性应用。
参见图2a,图2a是本申请实施例提供的任务执行系统的一个可选的架构示意图;为支撑一个任务执行应用,在任务执行系统100中,终端400通过网络300连接服务器200(内存管理设备),网络300可以是广域网或者局域网,又或者是二者的组合。另外,任务执行系统100中还包括数据库500,用于向服务器200提供数据服务,以支持服务器200进行任务执行。
终端400,用于通过网络300向服务器200发送任务请求,以通过任务请求触发服务器200执行前次任务和目标任务。还用于通过网络300接收服务器200发送的任务执行结果并进行展示。
服务器200,用于通过网络300获取任务请求,以响应任务请求,获取目标任务请求;响应目标任务请求,获取前次任务执行时所使用的前次内存块;其中,前次任务为执行目标任务之前所执行的任务,前次内存块为前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;通过复用前次内存块,确定出目标任务对应的目标内存块;基于目标内存块,执行目标任务。还用于通过网络300向终端400发送任务执行结果。
下面,继续说明本申请实施例提供的任务执行系统;参见图2b,在任务执行系统100中,预设网络模型2b-1在服务器200上进行部署,也就得到了预测工具2b-2;当用户通过终端400向服务器200发送任务请求时,服务器200响应任务请求,通过预测工具2b-2执行任务;当执行第n-1次任务(前次任务)时,通过内存系统2b-3为第n-1次任务分配u个内存块(前次内存块);在完成第n-1次任务,执行第n次任务(目标任务)时,遍历u个内存块,确定执行第n次任务所需的v个内存块(目标内存块),从而内存系统2b-3中,为第n次任务分配v个内存块。这里,服务器200可以在所有任务执行完成时向终端400发送预测结果(任务执行结果),也可以每完成一次任务的执行就向终端400发送该次任务的预测结果。另外,任务请求可以是预测任务的执行请求,还可以是推理任务的执行请求;并且任务请求可以是请求执行批量任务,还可以是请求执行单次任务。此外,n-1、u和v均为大于0的正整数。
在一些实施例中,服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。终端400可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例中不做限制。
参见图3,图3是本申请实施例提供的图2a中的服务器的组成结构示意图,图3所示的服务器200包括:至少一个处理器210、存储器250、至少一个网络接口220和用户接口230。服务器200中的各个组件通过总线系统240耦合在一起。可理解,总线系统240用于实现这些组件之间的连接通信。总线系统240除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图3中将各种总线都标为总线系统240。
处理器210可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口230包括使得能够呈现媒体内容的一个或多个输出装置231,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口230还包括一个或多个输入装置232,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器250可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器250可选地包括在物理位置上远离处理器210的一个或多个存储设备。
存储器250包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器250旨在包括任意适合类型的存储器。
在一些实施例中,存储器250能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统251,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块252,用于经由一个或多个(有线或无线)网络接口220到达其他计算设备,示例性的网络接口220包括:蓝牙、无线相容性认证(Wi-Fi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块253,用于经由一个或多个与用户接口230相关联的输出装置231(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块254,用于对一个或多个来自一个或多个输入装置232之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的内存管理装置可以采用软件方式实现,图3示出了存储在存储器250中的内存管理装置255,其可以是程序和插件等形式的软件,包括以下软件模块:请求获取模块2551、请求响应模块2552、内存分配模块2553、任务执行模块2554和下次任务执行模块2555,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。
将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的内存管理装置可以采用硬件方式实现,作为示例,本申请实施例提供的内存管理装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的内存管理方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Programmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
下面,将结合本申请实施例提供的服务器的示例性应用和实施,说明本申请实施例提供的内存管理方法。
参见图4,图4是本申请实施例提供的内存管理方法的一个可选的流程示意图,将结合图4示出的步骤进行说明。
S401、获取目标任务请求。
在本申请实施例中,当服务器利用预设网络模型执行任务时,也就针对预设网络模型,获取到了目标任务请求,以根据目标任务请求利用预设网络模型执行任务。
需要说明的是,预设网络模型是在服务器上完成安装部署的网络模型,且预设网络模型的输入数据的尺寸是变化的,即预设网络模型为变输入尺寸的网络模型,比如,NLP网络模型;这里,预设网络模型的输入数据的尺寸的变化,是指输入数据中输入参数对应的参数值的大小的变化。目标任务请求用于请求利用预设网络模型执行目标任务,而目标任务是当前待执行的任务,可以是推理任务,还可以是应用过程的预测任务,总之,目标任务是一种利用预设网络模型执行正向传播处理的任务。
这里,预设网络模型在服务器上完成安装部署后,对应获得了网络模型工具,比如“TurboTransformers”、“Pytorch”、“Tensorflow”、“Onnxruntime”或“PaddlePaddle”。
S402、响应目标任务请求,获取前次任务执行时所使用的前次内存块。
在本申请实施例中,服务器获得了目标任务请求之后,响应该目标任务请求,开始执行目标任务。由于本申请实施例所提供的内存管理方法中,目标任务的执行过程中所进行的内存空间的分配,是通过复用前次任务执行时所使用的各个内存块实现;因此,服务器获取前次任务执行时所使用的各个内存块,此时,也就获得了前次内存块。
需要说明的是,前次任务为执行目标任务之前利用预设网络模型所执行的任务,前次内存块为前次任务执行时所使用的各个内存块构成的集合;易知,目标内存块包括至少一个内存块,并且目标内存块中的至少一个内存块在内存空间量上可能不同。这里,内存块为内存分配的最小分配单元;也就是说,服务器在利用预设网络模型执行各任务时,均是以内存块为粒度实现内存空间的分配的。
另外,前次任务和目标任务在输入数据的尺寸上是变化的,但前次任务和目标任务在输入数据的尺寸上也可以是相同的;前次任务同目标任务一样,属于同类型的任务,比如同为预设网络模型的推理任务,或同为预设网络模型在应用中的预测任务。
S403、通过遍历前次内存块,确定出目标任务对应的目标内存块。
在本申请实施例中,服务器获得了前次内存块之后,就可以遍历前次内存块,从前次内存块中选择满足目标任务或目标任务执行需求的各个内存块进行目标任务的内存空间的分配了。当通过遍历前次内存块中的各内存块,完成目标任务的内存空间的分配时,也就获得了目标内存块。
这里,目标内存块和前次内存块之间包括相同的内存块,另外,目标内存块可以是前次内存块中的部分内存块,也可以是前次内存块中的全部内存块,又可以是前次内存块中的全部内存块和新分配的内存块,等等,本申请实施例对此不作具体限定。
需要说明的是,目标内存块为目标任务执行时所使用的各个内存块构成的集合;易知,目标内存块包括至少一个内存块,并且目标内存块中的至少一个内存块在内存空间量上可能不同。
S404、基于目标内存块,执行目标任务。
在本申请实施例中,服务器获得了目标内存块之后,就可以依据该目标内存块,执行目标任务了,也就能够完成目标任务的执行了。
可以理解的是,由于在利用预设网络模型执行目标任务时,是依据前次任务执行时所使用的内存块实现的内存空间的分配;因此,实现了对前次任务的内存块的复用,也就减少了目标任务在执行过程中内存空间的占用,从而,能够降低任务执行的内存消耗。也就是说,服务器通过在不同的任务之间复用分配的内存块,减少了内存空间的分配释放,减少了内存空间的分配消耗;另外,还实现了动态地确定任务所需的内存块,减少了任务执行过程中的内存占用,减少了内存空间的使用消耗。
在本申请实施例中,参见图5,S403可通过S4031-S4034实现;也就是说,服务器通过遍历前次内存块,确定出目标任务对应的目标内存块,包括S4031-S4034,下面对各步骤分别进行说明。
S4031、获取目标任务对应的输入参数信息。
在本申请实施例中,由于针对目标任务对应着数据的输入,因此,服务器获取目标任务对应的输入数据,也就获得了目标任务对应的输入参数信息;也就是说,输入参数信息为目标任务对应的输入数据,比如,“batch_size=1,query_size=10,key_size=value_size=20,hidden_size=768”。
S4032、基于预设网络模型和输入参数信息,计算目标任务对应的输入张量信息集合。
在本申请实施例中,服务器获得了输入参数信息之后,由于输入参数信息包括各参数以及各参数对应的参数信息,而预设网络模型中包括了各计算节点的结构信息,包括了对应的参数等信息;因此,依据预设网络模型和输入参数信息,就能够计算出目标任务对应的中间张量的信息,即目标任务对应的输入张量信息集合。
需要说明的是,输入张量信息集合为执行目标任务所对应的中间张量的信息构成的集合;比如,包括各张量所占的内存空间量。
S4033、遍历前次内存块,确定当前输入张量信息的内存块分配信息。
在本申请实施例中,服务器获得了输入张量信息集合之后,针对任一输入张量信息,通过遍历前次内存块,以在前次内存块的一内存块中,完成对当前输入张量信息的内存空间的分配。易知,当前输入张量信息为输入张量信息集合中的任一输入张量信息,内存块分配信息包括当前输入张量信息在内存块中的内存地址信息。
需要说明的是,服务器以内存块进行内存空间分配时,输入张量信息占用的内存空间可以是内存块的部分内存空间,可以按偏移(offset)来索引,以标记输入张量信息在内存块的内存地址信息。而一个内存块中包括多个输入张量信息时,这多个输入张量信息所对应的该内存块的内存地址信息,可以是顺序排列,也可以是执行顺序上互不影响的其他方式的排列,等等,本申请实施例对此不作具体限定。
另外,在本申请实施例中,服务器得到多个计算节点对应的输入张量信息集合之后,以及遍历前次内存块中的内存块之前,该内存管理方法还包括:依据待分配空间量,对输入张量信息集合进行排序;从排序后的输入张量信息集合中,选择待分配空间量最大的输入张量信息集合作为当前输入张量信息。如此,以实现内存块中内存空间复用的最大化。
S4034、当完成对输入张量信息集合的处理时,将与输入张量信息集合对应的各个内存块分配信息组合为目标内存块。
需要说明的是,服务器针对每个输入张量信息均执行S4033,当完成对输入张量信息集合的处理时,也就得到了每个输入张量信息在对应内存块的内存地址信息即内存块分配信息;从而,输入张量信息集合对应的各个内存块分配信息也就组合成了目标内存块;此时,也就完成了对目标任务的内存空间的分配,输入张量信息集合对应的内存空间分配信息即目标内存块。这里,易知,目标内存块中的每个内存块中记录着对应的输入张量信息的内存地址信息。
在本申请实施例S4032中,服务器基于预设网络模型和输入参数信息,计算目标任务对应的输入张量信息集合,包括S40321-S40324,下面对各步骤分别进行说明。
S40321、依据预设网络模型,获取节点依赖关系和每个计算节点的张量参数。
需要说明的是,由于预设网络模型是固定的,从而预设网络模型中各计算节点的计算顺序以及各计算节点在计算顺序上的依赖关系均是固定不变的。这里,服务器依据预设网络模型执行任务的过程,记录各计算节点在计算顺序上的依赖关系,也就得到了预设网络模型的节点依赖关系;也就是说,节点依赖关系为多个计算节点在计算顺序上的依赖关系。
这里,节点依赖关系的表示形式可以是拓扑结构,还可以是链表结构,又可以是其他表示形式,等等,本申请实施例对此不作具体限定。
示例性地,参见图6,图6是本申请实施例提供的一种示例性的节点依赖关系的示意图;如图6所示,该示例性的节点依赖关系中共有9个计算节点,且这9个计算节点的计算顺序依次为:计算节点6-1、计算节点6-2、计算节点6-3、计算节点6-4、计算节点6-5、计算节点6-6、计算节点6-7、计算节点6-8和计算节点6-9;其中,计算节点6-2依赖于计算节点6-1,计算节点6-3、计算节点6-4和计算节点6-5均依赖于计算节点6-2,计算节点6-6依赖于计算节点6-3、计算节点6-4和计算节点6-5,计算节点6-7和计算节点6-8依赖于计算节点6-6,计算节点6-9依赖于计算节点6-7和计算节点6-8。
在本申请实施例中,服务器在依据前次内存块中的内存块为目标任务分配内存空间时,需要确定目标任务所需的内存空间量;这里,服务器依据预设网络模型的模型结构确定目标任务所需的内存空间量。由于预设网络模型是固定的,从而预设网络模型中的每个计算节点的张量参数是固定的,即不论在前次任务还是目标任务中,每个计算节点的张量参数不变。
需要说明的是,每个计算节点为预设网络模型中用于计算的模块或运算符,比如,激活函数或均值函数;张量参数为每个计算节点进行数据的计算时对应的输入张量的参数,比如,“query_size、key_size、value_size和hidden_size”。
S40322、根据输入参数信息中与张量参数,确定待分配空间量。
在本申请实施例中,服务器获得了输入参数信息和每个计算节点的张量参数之后,将张量参数与输入参数信息中参数对比,所匹配到的参数在输入参数信息对应的参数信息,即输入参数信息中与张量参数匹配的参数信息,这里称为每个计算节点对应的输入张量。
示例性地,对于计算节点“MatMul_K”,对应的张量参数为“batch_size,key_size和hidden_size”,当输入参数信息为“batch_size=1,query_size=10,key_size=value_size=20,hidden_size=768”时,则输入参数信息中与张量参数匹配的参数信息即计算节点“MatMul_K”的输入张量为:“batch_size=1,key_size=20,hidden_size=768”。
需要说明的是,服务器获得了输入张量之后,计算输入张量对应的数据量,也就得到了输入张量信息对应的待分配空间量。
示例性地,当输入张量为“batch_size=1,key_size=20,hidden_size=768”时,则对应的待分配空间量为:1*20*768*4=61440(字节);其中,由于该输入张量是以浮点数类型存储的,因此,计算输入张量对应的数据量时,将各参数信息相乘并乘以浮点数类型所占的字节数4,也就得到了待分配空间量。
S40323、依据节点依赖关系,将当前计算节点的计算顺序作为开始使用索引,将当前计算节点所流向节点的最后计算顺序作为终止使用索引。
在本申请实施例中,服务器获得了节点依赖关系之后,由于节点依赖关系表征了各计算节点在计算顺序上的依赖关系,针对多个计算节点中的任一计算节点,即当前计算节点,而输入张量为每个计算节点的输入数据;因此,依据该节点依赖关系,也就能够确定当前计算节点的输入张量的使用间隔信息,即输入张量开始被当前计算节点使用的时间到被当前计算节点终止使用的使用周期。
这里,服务器用输入张量的开始使用索引和终止使用索引表示输入张量的使用间隔信息;其中,开始使用索引为当前计算节点的计算顺序,终止使用索引为当前计算节点所流向节点的最后计算顺序。比如,图6中,当当前节点为计算节点6-6时,所流向节点为计算节点6-7和计算节点6-8,从而最后计算顺序为计算节点6-8的计算顺序。
示例性地,图6中,由于计算节点6-9为输出节点,不存在对应的输入张量;当各计算节点的执行顺序为0至8时,图6中的其他8个计算节点分别对应的输入张量的使用间隔信息依次为:{0,1}、{1,4}、{2,5}、{3,5}、{4,5}、{5,7}、{6,8}和{7,8}。
S40324、将待分配空间量、开始使用索引和终止使用索引,组合为与每个计算节点对应的输入张量信息,从而得到与目标任务的多个计算节点对应的输入张量信息集合。
需要说明的是,每个计算节点对应的输入张量信息包括待分配空间量、开始使用索引和终止使用索引。而服务器将多个计算节点中的每个计算节点对应的输入张量信息进行组合,也就得到了与目标任务的多个计算节点对应的输入张量信息集合。
可以理解的是,由于输入张量信息中还包括计算节点对应的输入张量的开始使用索引和终止使用索引,即包括计算节点对应的输入张量的使用间隔信息;从而,服务器通过该使用间隔信息,能够实现内存块中内存空间的共享;如此,也就减少了对内存空间的占用,降低了内存开销。
在本申请实施例中,S4033可通过S40331-S40333实现;也就是说,服务器遍历所述前次内存块,确定当前输入张量信息的内存块分配信息,包括S40331-S40333,下面对各步骤分别进行说明。
S40331、遍历前次内存块中,针对当前内存块,获取已分配输入张量信息。
在本申请实施例中,服务器对前次内存块中的内存块进行遍历,针对遍历到的每个内存块,即当前内存块,从该当前内存块中确定当前输入张量信息的内存地址信息时,先获取当前内存块中已分配的内存空间对应的输入张量信息,即已分配输入张量信息,以根据该已分配输入张量信息确定当前内存块中的可分配的内存空间,来分配给当前输入张量信息。
需要说明的是,当前内存块为前次内存块中的任一内存块,已分配输入张量信息为当前内存块中已分配的内存空间对应的输入张量信息所构成的集合。
S40332、从已分配输入张量信息中,确定与当前输入张量信息相交的目标输入张量信息。
需要说明的是,服务器获得了已分配输入张量信息之后,根据已分配输入张量信息,确定当前内存块中的可分配的内存空间。这里,服务器可以将当前内存块中未分配的内存空间分配给当前输入张量信息;还可以从已分配输入张量信息中确定与当前输入张量信息在时间上不相交的输入张量信息,将不相交的输入张量信息所对应的内存空间,也作为待分配给当前输入张量信息的内存空间。从而,针对已分配输入张量信息中与当前输入张量信息不相交的输入张量在当前内存块中所对应的内存地址信息,服务器不作处理,而是依据已分配输入张量信息中与当前输入张量信息相交的输入张量信息,确定当前内存块中待向当前输入张量信息分配的内存空间。故,服务器从已分配输入张量信息中,确定与当前输入张量信息相交的输入张量信息,而所确定的与当前输入张量信息相交的输入张量信息即目标输入张量信息。
这里,相交是指输入张量信息之间在使用周期上存在重叠,不相交是指输入张量信息之间在使用周期上无重叠,互不影响。
S40333、基于目标输入张量信息所对应的内存地址信息和当前输入张量信息的待分配空间量,确定当前输入张量信息在当前内存块中的内存地址信息,从而得到内存块分配信息。
在本申请实施例中,服务器获得了与当前输入张量信息相交的目标输入张量信息之后,基于该目标输入张量信息所对应的内存地址信息,在当前内存块中,确定可向当前输入张量信息分配的内存空间;从而从所确定的可向当前输入张量信息分配的内存空间中,确定当前输入张量信息在当前内存块中的内存地址信息,从而也就得到了内存块分配信息。
可以理解的是,服务器通过确定输入张量信息的使用周期,使得在一个内存块中,实现了时间上不相交的输入张量信息在内存空间上的复用,进一步减少了内存空间的占用,降低了内存消耗。
在本申请实施例中,S40333中,服务器基于目标输入张量信息所对应的内存地址信息和当前输入张量信息的待分配空间量,确定当前输入张量信息在当前内存块中的内存地址信息,包括S403331-S403334,下面对各步骤分别进行说明。
S403331、根据目标输入张量信息所对应的内存地址信息,确定目标地址信息。
在本申请实施例中,服务器将目标输入张量信息所对应的内存地址信息,作为目标地址信息,以根据目标地址信息确定用于向当前输入张量信息分配的内存空间。
S403332、在当前内存块中,获取目标地址信息之前的可分配空间。
在本申请实施例中,服务器获得了目标地址信息之后,由于该目标地址信息为目标输入张量信息在当前内存块的地址偏移,因此,服务器先获取当前内存块中目标地址信息之前的可分配空间,以根据该可分配空间实现当前输入张量信息的内存空间分配。
需要说明的是,可分配空间是指可用于分配给当前输入张量信息的内存空间,包括未分配的内存空间,还包括已分配但使用周期上与当前输入张量信息不相交的内存空间。
S403333、当可分配空间所对应的内存空间量大于等于当前输入张量信息的待分配空间量时,从可分配空间中确定当前输入张量信息在当前内存块中的内存地址信息。
需要说明的是,服务器获得了可分配空间之后,当可分配空间所对应的内存空间量大于等于当前输入张量信息的待分配空间量时,表明可分配空间能够满足当前输入张量信息的分配;此时,服务器从该可分配空间中,确定当前输入张量信息在当前内存块中的内存地址信息。
示例性地,参见图7,图7是本申请实施例提供的一种在内存块中确定内存地址信息的示意图;如图7所示,多个计算节点的执行顺序为0至8;如图左侧7-11所示,已分配输入张量信息包括输入张量信息7-1、7-2、7-3和7-4。其中,目标输入张量信息为输入张量信息7-3,输入张量信息7-3所对应的使用周期为2至5,对应的内存地址信息为“64”,对应的待分配空间量为“36”;当前输入张量信息7-5所对应的使用周期为1至4,对应的待分配空间量为“28”;此时,服务器先从内存地址信息“64”之前的可分配空间中判断是否能够满足当前输入张量信息7-5的分配,由于该可分配空间为“32至64”,对应的内存空间量“32”大于当前输入张量信息的待分配空间量“28”;从而从可分配空间“32至64”中确定当前输入张量信息7-5的内存地址信息,为“32”;此时,也就完成了当前输入张量信息7-5的内存空间的分配,如图右侧7-22所示。
另外,在本申请实施例中,该可分配空间要尽可能小,以在当前内存块中为更多输入张量信息分配内存空间
S403334、当可分配空间所对应的内存空间量小于当前输入张量信息的待分配空间量时,将目标地址信息更新为目标地址信息与目标输入张量信息的待分配空间量之和,从更新后的目标地址信息之后的内存空间中,确定当前输入张量信息在当前内存块中的内存地址信息。
需要说明的是,服务器获得了可分配空间之后,当可分配空间所对应的内存空间量小于当前输入张量信息的待分配空间量时,表明可分配空间不能够满足当前输入张量信息的分配;此时,服务器将目标地址信息更新为目标地址信息与目标输入张量信息的待分配空间量之和,然后,从更新后的目标地址信息之后的内存空间中,确定当前输入张量信息在当前内存块中的内存地址信息。
示例性地,参见图8,图8是本申请实施例提供的另一种在内存块中确定内存地址信息的示意图;如图8所示,多个计算节点的执行顺序为0至8;目标输入张量信息8-1所对应的使用周期为5至7,当前输入张量信息8-2所对应的使用周期为7至8;如图左侧8-3所示,目标输入张量信息8-1是已分配的输入张量信息,对应的内存地址信息为“0”;此时,服务器先从内存地址信息“0”之前的可分配空间中判断是否能够满足当前输入张量信息8-2的分配,由于该可分配空间为“0”,小于当前输入张量信息的待分配空间量“40”;从而将目标地址信息更新为“64”(内存地址信息“0”和目标输入张量信息8-1的待分配空间量“64”的和),从64之后的内存空间中确定当前输入张量信息8-2的内存地址信息,为“64”;此时,也就完成了当前输入张量信息8-2的内存空间的分配,如图右侧8-4所示。
在本申请实施例中,S40332还包括S403321-S403324;也就是说,服务器从已分配输入张量信息中,确定与当前输入张量信息相交的目标输入张量信息,包括S403321-S403324,下面对各步骤分别进行说明。
S403321、依据内存地址信息,对已分配输入张量信息进行排序。
在本申请实施例中,由于输入张量信息对应着内存地址信息,因此,为了实现对已分配输入张量信息遍历效率的提升,服务器依据输入张量信息对应的内存地址信息,对已分配输入张量信息进行排序,也就得到了排序后的已分配输入张量。
S403322、遍历排序后的已分配输入张量信息,获取当前已分配输入张量信息的开始使用索引和当前输入张量信息的开始使用索引中的最大索引。
在本申请实施例中,服务器获得排序后的已分配输入张量信息,可以是从内存地址信息最小的输入张量信息开始遍历,也可以是从内存地址信息最大的输入张量信息开始遍历,又可以是从中间任一输入张量信息开始遍历,等等;针对当前遍历到的输入张量信息,即当前已分配输入张量信息,服务器将当前已分配输入张量信息的开始使用索引与当前输入张量信息的开始使用索引进行对比,并将当前已分配输入张量信息的开始使用索引和当前输入张量信息的开始使用索引之中最大的开始使用索引作为最大索引。
这里,当前已分配输入张量信息为排序后的已分配输入张量信息中的任一输入张量信息。
S403323、获取当前已分配输入张量信息的终止使用索引和当前输入张量信息的终止使用索引中的最小索引。
在本申请实施例中,服务器将当前已分配输入张量信息的终止使用索引与当前输入张量信息的终止使用索引进行对比,并将当前已分配输入张量信息的终止使用索引和当前输入张量信息的终止使用索引之中最小的终止使用索引作为最小索引。
S403324、当最大索引小于等于最小索引,确定当前已分配输入张量信息,为与当前输入张量信息相交的目标输入张量信息。
在本申请实施例中,服务器获得了最大索引和最小索引之后,对比最大索引和最小索引,当最大索引小于等于最小索引,表明当前已分配输入张量信息与当前输入张量信息在执行时间上存在交集,也就能够确定当前已分配输入张量信息,为与当前输入张量信息相交的目标输入张量信息。
另外,在本申请实施例中,S403323之后还包括S403325和S403326;也就是说,服务器获取当前已分配输入张量信息的终止使用索引和当前输入张量信息的终止使用索引中的最小索引之后,该内存管理方法还包括S403325和S403326,下面对各步骤分别进行说明。
S403325、当最大索引大于最小索引,确定当前已分配输入张量信息与当前输入张量信息不相交。
在本申请实施例中,服务器对比最大索引和最小索引,当最大索引大于最小索引,表明当前已分配输入张量信息与当前输入张量信息在执行时间上不存在交集,也就能够确定当前已分配输入张量信息与当前输入张量信息不相交。
S403326、当遍历完排序后的已分配输入张量信息,确定不存在与当前输入张量信息相交的输入张量信息时,确定当前输入张量信息在当前内存块中的内存地址信息。
需要说明的是,如果服务器完成了对排序后的已分配输入张量信息的遍历之后,确定排序后的已分配输入张量信息中不存在与当前输入张量信息相交的输入张量信息,则表明当前内存块中的任意内存空间均能够分配给当前输入张量信息;此时,服务器从当前内存块中选择内存空间的地址信息,作为当前输入张量信息在当前内存块的内存地址信息。
在本申请实施例中,S4034可通过S40341和S40342实现;也就是说,当完成对输入张量信息集合的处理时,服务器将与输入张量信息集合对应的各个内存块分配信息组合为目标内存块,包括S40341和S40342,下面对各步骤分别进行说明。
S40341、当完成对输入张量信息集合的处理时,将前次内存块中遍历到的各个内存块对应的内存空间的分配信息,确定为与输入张量信息集合对应的各个内存块分配信息。
需要说明的是,服务器完成对输入张量信息集合中每个输入张量信息在内存块的内存地址信息的确定之后,也就完了对输入张量信息集合的处理;如果此时服务器还未遍历完前次内存块中的内存块,表明前次内存块所对应的内存空间,比目标任务所需的内存空间大;此时,服务器将前次内存块中遍历到的各个内存块对应的内存空间的分配信息,确定为与输入张量信息集合对应的各个内存块分配信息。
S40342、将各个内存块分配信息,组合为目标内存块。
需要说明的是,服务器获得了各个内存块分配信息之后,将各个内存块分配信息组合,也就得到输入张量信息集合对应的目标内存块。
在本申请实施例中,S40342之后还包括S40343;也就是说,服务器将各个内存块分配信息,组合为目标内存块之后,该内存管理方法还包括S40343,下面对该步骤进行说明。
S40343、释放前次内存块中未遍历到的内存块。
需要说明的是,如果前次内存块中存在未被遍历到的内存块,表明前次内存块中未遍历到的内存块在目标任务过程中是多余的;此时,服务器将前次内存块中未遍历到的内存块进行释放,以减少内存空间的占用。
可以理解的是,服务器通过将前次内存块中未被目标任务所利用的内存块进行释放,实现了动态准确确定目标任务所需内存空间的方案,减少了内存空间的占用,降低了内存的使用消耗。如此,也就能够支持更大规模的任务的执行,或者提升多个目标任务的并发效率。
在本申请实施例中,S4033还可通过S40334和S40335实现;也就是说,服务器遍历前次内存块,确定当前输入张量信息的内存块分配信息,包括S40334和S40335,下面对各步骤分别进行说明。
S40334、遍历前次内存块,当遍历完前次内存块,确定前次内存块中不存在与当前输入张量信息适配的内存块时,基于当前输入张量信息的待分配空间量,分配新的内存块。
在本申请实施例中,服务器对前次内存块中的内存块进行遍历,以在前次内存块的内存块中确定当前输入张量信息的内存地址信息。
需要说明的是,当服务器完成了对前次内存块中内存块的遍历时,如果确定前次内存块中不存在与当前输入张量信息适配的内存块,表明前次内存块所对应的内存空间量不足够向当前输入张量信息分配;又因为是以内存块为粒度进行内存空间的分配的;所以此时,服务器基于当前输入张量信息的待分配空间量,分配一个新的内存块,以将新的内存块中内存空间分配给当前输入张量信息。
这里,服务器分配新的内存块的过程即通过内存系统向目标任务分配一个新的内存块的过程。
S40335、确定当前输入张量信息在新的内存块的内存地址信息,从而得到内存块分配信息。
在本申请实施例中,当完成了新的内存块的分配之后,服务器基于当前输入张量信息的待分配空间量,将新的内存块中内存空间分配给当前输入张量信息,也就确定了当前输入张量信息在新的内存块的内存地址信息,从而得到了内存块分配信息。
可以理解的是,服务器在前次内存块不够目标任务所需内存空间的分配时,重新分配一个新的内存块用于实现当前输入张量信息的内存空间的分配,实现了动态准确确定目标任务所需内存空间的方案,如此,减少了内存的分配消耗。
相应地,S4034还可通过S40344实现;也就是说,当完成对输入张量信息集合的处理时,服务器将与输入张量信息集合对应的各个内存块分配信息组合为目标内存块,包括S40344。其中,
S40344、当完成对输入张量信息集合的处理时,将新的内存块对应的内存空间的分配信息和前次内存块对应的内存空间的分配信息,组合为目标内存块。
需要说明的是,在前次内存块中的内存块无法满足目标任务所需内存空间的分配,新分配了信息的内存块时,在完成输入张量信息集合的处理之后,将新的内存块对应的内存空间的分配信息和前次内存块中的内存块对应的内存空间的分配信息,共同组合为目标内存块,从而完成对目标任务的内存空间的分配。
在本申请实施例S40334中,服务器基于当前输入张量信息的待分配空间量,分配新的内存块,包括S403341和S403342,下面对各步骤分别进行说明。
S403341、计算当前输入张量信息对应的待分配空间量与预设规格的乘积,得到待选空间量。
在本申请实施例中,服务器确定分配的新的内存块的内存空间量时,是基于当前输入张量信息对应的待分配空间量确定的;从而,服务器先获取当前输入张量信息对应的待分配空间量。
需要说明的是,服务器中还设置有预设规格(比如,1.2),用于与当前输入张量信息对应的待分配空间量相乘,来确定新的内存块的内存空间量。这里,将当前输入张量信息对应的待分配空间量与预设规格的乘积,称为待选空间量。
S403342、依据待选空间量和预设块空间量中的最大空间量,从内存系统中分配新的内存块。
需要说明的是,为了控制内存块对应的内存空间量的合理性,即不会过大,也足够输入张量信息的内存空间的分配,服务器中还设置了预设块空间量(比如,2MB),用于初步确定新的内存块的内存空间量。
这里,服务器从待选空间量和预设块空间量中,选择最大内存空间量作为新的内存块的内存空间量。
在本申请实施例中,S404之后还包括S405和S406;也就是说,服务器基于目标内存块,执行目标任务之后,该内存管理方法还包括S405和S406,下面对各步骤分别进行说明。
S405、获取针对预设网络模型的下次任务请求。
在本申请实施例中,当完成了本次任务即目标任务的执行之后,也就接收到了用于请求利用预设网络模型执行下次任务的下次任务请求。
S406、响应下次任务请求,通过遍历目标内存块,为下次任务分配内存空间,以执行下次任务。
需要说明的是,服务器通过遍历前次任务所使用的各个内存块实现本次任务(目标任务)的内存空间的分配,以实现下次任务;如此,实现了任务之间的内存块的复用,降低了内存空间的临时分配,减少了内存空间的分配和释放;并且,相比于利用固定的足够大的内存块执行任务,也减少了内存空间的占用。
在本申请实施例中,服务器针对预设网络模型执行目标任务时,需要确定目标任务对应的目标内存块,即需要内存块的数量;还需要确定每个输入张量信息在对应内存块的内存地址信息;其中,确定每个输入张量信息在对应内存块的内存地址信息,属于二维旅行商问题,本申请实施例在多项式时间复杂度内找到近似最优内存分配方案。
示例性地,服务器确定目标任务对应的目标内存块的过程可通过以下代码实现:
Figure BDA0002584493120000281
Figure BDA0002584493120000291
其中,第1步为依据待分配空间量,对输入张量信息集合进行排序的过程;
第2步至第12步为从前次内存块中确定当前输入张量信息在对应的内存块中内存地址信息的过程;
第13步至第19步为从内存系统分配新的内存块,以确定当前输入张量信息在新的内存块中的内存地址信息的过程;
第20步为释放前次内存块中未遍历到的内存块的过程;
第21步为获得目标内存块的过程。
另外,“FindGapFromTrunk”例程用于来判断当前内存块是否可以完成当前输入张量信息的分配,如果能则返回在当前内存块的内存地址信息,如果不能则返回不能分配的结果。FindGapFromTrunk例程可以通过以下代码实现:
Figure BDA0002584493120000292
Figure BDA0002584493120000301
其中,第1步至第4步为设置变量的过程;
第5步为启动当前内存块“trunk”中的已分配输入张量信息的遍历的过程;
第6步至第8步为确定当前输入张量信息“t”与当前已分配输入张量信息“x”相交的过程;
第9步至第13步为依据目标输入张量信息对应的可分配空间为当前输入张量信息分配内存空间的过程;
第14步为将更新后的目标地址信息之后的内存空间分配给当前输入张量信息的过程;
第15步至第24步为返回内存地址信息的过程。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
参见图9,图9是本申请实施例提供的一种示例性的内存管理方法的流程示意图;如图9所示,包括如下步骤:
S901、获取神经网络模型(预设网络模型)的内存分配依赖关系的拓扑结构(节点依赖关系和每个计算节点的张量参数)。
需要说明的是,运行一次神经网络模型对应的应用程序(runtime),记录运行过程中内存分配依赖关系,也就得到了神经网络模型(预设网络模型)的内存分配依赖关系的拓扑结构,如图6所示,张量参数未示出。
另外,这里的神经网络模型为预测阶段的网络模型,所执行的任务为预测任务。
S902、接收预测计算请求,响应预测计算请求,获取输入张量(输入参数信息)。
S903、依据输入张量和拓扑结构,计算本次预测的每个中间张量的内存尺寸(待分配内存量)和使用周期(开始使用索引和终止使用索引),得到张量使用记录(输入张量信息)。
需要说明的是,使用周期是一个二元组:{开始使用时间(开始使用索引),结束使用时间(终止使用索引)},开始使用时间和结束使用时间用对应的计算节点的计算顺序来表示;张量使用记录为一个三元组:{开始使用时间,内存尺寸,结束使用时间}。另外,张量使用记录与张量相对应。
如图10所示,计算节点的执行顺序10-1为:0至8,张量10-1对应的使用记录为:开始使用时间=2,内存尺寸=36,结束使用时间=5。
参见图11,图11是本申请实施例提供的一种示例性的输入张量信息集合的示意图;如图11所示,计算节点的执行顺序11-1为:0至8,张量11-21对应的使用记录为{0,32,1},张量11-22对应的使用记录为{1,28,4},张量11-23对应的使用记录为{2,36,5},张量11-24对应的使用记录为{3,16,5},张量11-25对应的使用记录为{4,8,5},张量11-26对应的使用记录为{5,64,7},张量11-27对应的使用记录为{6,10,8},张量11-28对应的使用记录为{7,40,8}。
S904、获取前次预测所使用的内存块链表(前次内存块),遍历前次预测所使用的内存块链表,确定张量使用记录在内存块中的偏移,完成张量使用记录的内存空间的分配,从而得到本次预测所使用的内存块链表(目标内存块)。
需要说明的是,在遍历前次预测所使用的内存块链表,确定张量使用记录在内存块(trunk)中的偏移时,如果前次预测所使用的内存块链表无法满足分配则新分配一个内存块;而如果前次预测所使用的内存块链表中存在剩余内存块,则释放剩余内存块。
参见图12,图12是本申请实施例提供的一种示例性的目标内存块的示意图;如图12所示,本次预测所使用的内存块链表(目标内存块)中包括一个内存块,横轴为偏移坐标,纵轴为使用时间坐标;图11中的各个张量在该内存块的分配情况依次包括内存空间分配顺序、内存尺寸和内存块中的偏移;其中,张量11-21对应的分配情况为{4,32,0},张量11-22对应的分配情况为{5,28,32},张量11-23对应的分配情况为{3,36,64},张量11-24对应的分配情况为{6,16,100},张量11-25对应的分配情况为{8,8,116},张量11-26对应的分配情况为{1,64,0},张量11-27对应的分配情况为{7,10,104},张量11-28对应的分配情况为{2,40,64}。
参见图13,图13是本申请实施例提供的另一种示例性的内存管理方法的流程示意图;如图13所示,包括如下步骤:
S1301、获取神经网络模型(“BERT”模型,预设网络模型)的内存分配依赖关系的拓扑结构(节点依赖关系和每个计算节点的张量参数)。
需要说明的是,与S901类似,运行一次神经网络模型对应的应用程序(runtime),记录运行过程中内存分配依赖关系,也就得到了神经网络模型(预设网络模型)的内存分配依赖关系的拓扑结构。
如图14所示:该拓扑结构中共有12个计算节点,且这12个计算节点的计算顺序依次为:“MatMul_K”计算节点14-1、“MatMul_V”计算节点14-2、“MatMul_Q”计算节点14-3、“Transpose_K”计算节点14-4、“Transpose_V”计算节点14-5、“Transpose_Q”计算节点14-6、“BatchMatMul 3”计算节点14-7、“BatchMatMul 4”计算节点14-8、“Transpose”计算节点14-9、“MatMul 5”计算节点14-10、“MatMul 6”计算节点14-11和“MatMul 6”计算节点14-12;其中,“Transpose_K”计算节点14-4依赖于“MatMul_K”计算节点14-1,“Transpose_V”计算节点14-5依赖于“MatMul_V”计算节点14-2,Transpose_Q”计算节点14-6依赖于“MatMul_Q”计算节点14-3,“BatchMatMul 3”计算节点14-7依赖于“Transpose_K”计算节点14-4和“Transpose_Q”计算节点14-6,“BatchMatMul 4”计算节点14-8依赖于“Transpose_V”计算节点14-5和“BatchMatMul 3”计算节点14-7,“Transpose”计算节点14-9依赖于“BatchMatMul 4”计算节点14-8,“MatMul 5”计算节点14-10依赖于“Transpose”计算节点14-9,“MatMul 6”计算节点14-11依赖于“MatMul 5”计算节点14-10,“MatMul 6”计算节点14-12依赖于“MatMul6”计算节点14-11。
图14中各计算节点的输入参数配置如下(图中未示出):“MatMul_K”计算节点14-1的输入参数配置(张量参数)为:“batch,key_size,hidden_size”;“MatMul_V”计算节点14-2的输入参数配置为:“batch,value_size,hidden_size”;“MatMul_Q”计算节点14-3的输入参数配置为:“batch,query_size,hidden_size”;“Transpose_K”计算节点14-4的输入参数配置为:“batch,key_size,hidden_size”;“Transpose_V”计算节点14-5的输入参数配置为:“batch,value_size,hidden_size”;“Transpose_Q”计算节点14-6的输入参数配置为:“batch,query_size,hidden_size”;“BatchMatMul 3”计算节点14-7的输入参数配置为:“batch,head_num,query_size,key_size”;“BatchMatMul 4”计算节点14-8的输入参数配置为:“batch,query_size,hidden_size”;“Transpose”计算节点14-9的输入参数配置为:“batch,query_size,hidden_size”;“MatMul5”计算节点14-10的输入参数配置为:“batch,query_size,hidden_size”;“MatMul 6”计算节点14-11的输入参数配置为:“batch,query_size,hidden_size*4”;“MatMul 6”计算节点14-12为输出节点。
另外,这里的“BERT”模型为推理阶段的网络模型,所执行的任务为推理任务。
S1302、接收推理计算请求,响应推理计算请求,获取输入张量(输入参数信息)。
这里,输入张量为“batch=1,query_size=10,key_size=value_size=20,hidden_size=768”。
S1303、依据输入张量和拓扑结构,计算本次推理的每个中间张量的内存尺寸(待分配内存量)和使用周期(开始使用索引和终止使用索引),得到张量使用记录(输入张量信息)。
基于图14所示的拓扑结构,参见图15,图15是本申请实施例提供的另一种示例性的输入张量信息集合的示意图;如图15所示,计算节点的执行顺序15-1为:0至11,即计算节点分别依次为:“MatMul_K”计算节点14-1、“MatMul_V”计算节点14-2、“MatMul_Q”计算节点14-3、“Transpose_K”计算节点14-4、“Transpose_V”计算节点14-5、“Transpose_Q”计算节点14-6、“BatchMatMul 3”计算节点14-7、“BatchMatMul 4”计算节点14-8、“Transpose”计算节点14-9、“MatMul 5”计算节点14-10、“MatMul 6”计算节点14-11和“MatMul 6”计算节点14-12(图中未示出);另外,计算节点14-1至计算节点14-11分别对应的张量为张量15-21至张量15-211;张量15-21对应的使用记录为{0,61440,3},张量15-22对应的使用记录为{1,61440,4},张量15-23对应的使用记录为{2,30720,5},张量15-24对应的使用记录为{3,61440,6},张量15-25对应的使用记录为{4,61440,8},张量15-26对应的使用记录为{5,30720,6},张量15-27对应的使用记录为{6,2400,7},张量15-28对应的使用记录为{7,30720,8},张量15-29对应的使用记录为{8,30720,9},张量15-210对应的使用记录为{9,30720,10},张量15-211对应的使用记录为{10,122880,11}。
S1304、获取前次推理所使用的内存块链表(前次内存块),遍历前次推理所使用的内存块链表,确定张量使用记录在内存块中的偏移,完成张量使用记录的内存空间的分配,从而得到本次推理所使用的内存块链表(目标内存块)。
需要说明的是,在遍历前次推理所使用的内存块链表,确定张量使用记录在内存块(trunk)中的偏移时,如果前次推理所使用的内存块链表无法满足分配则新分配一个内存块;而如果前次推理所使用的内存块链表中存在剩余内存块,则释放剩余内存块。
参见图16,图16是本申请实施例提供的另一种示例性的目标内存块的示意图;如图16所示,本次推理所使用的内存块链表(目标内存块)中包括一个内存块16-1,横轴为偏移坐标,纵轴为使用时间坐标;图15中的各个张量在该内存块的分配情况依次包括内存空间分配顺序、内存尺寸和内存块中的偏移;其中,张量15-21对应的分配情况为{2,61440,0},张量15-22对应的分配情况为{3,61440,0},张量15-23对应的分配情况为{6,30720,184320},张量15-24对应的分配情况为{4,61440,122880},张量15-25对应的分配情况为{5,61440,0},张量15-26对应的分配情况为{7,30720,61440},张量15-27对应的分配情况为{10,30720,122880},张量15-28对应的分配情况为{8,30720,61440},张量15-29对应的分配情况为{9,30720,0},张量15-210对应的分配情况为{11,2400,92160},张量15-211对应的分配情况为{1,122880,0}。
这里,将输入张量由“batch=1,query_size=10,key_size=value_size=20,hidden_size=768”,增大至“batch=4,query_size=40,key_size=value_size=20,hidden_size=768”;此时,与图14示出的拓扑结构对应的目标内存块的示意图如图17所示,本次推理所使用的内存块链表(目标内存块)中包括两个内存块:内存块17-1和内存块17-2,横轴为偏移坐标,纵轴为使用时间坐标;其中,除张量15-10对应的内存空间在内存块17-2之中,其余张量对应的内存空间均在于内存块17-1之中。另外,各个张量在对应内存块的分配情况依次包括内存空间分配顺序、内存尺寸和内存块中的偏移;其中,张量15-21对应的分配情况为{4,245760,491520},张量15-22对应的分配情况为{5,245760,737280},张量15-23对应的分配情况为{2,491520,0},张量15-24对应的分配情况为{6,245760,983040},张量15-25对应的分配情况为{7,245760,1228800},张量15-26对应的分配情况为{3,491520,491520},张量15-27对应的分配情况为{8,153600,1382400},张量15-28对应的分配情况为{9,30720,0},张量15-29对应的分配情况为{10,30720,30720},张量15-210对应的分配情况为{11,30720,0},张量15-211对应的分配情况为{1,1966080,0}。
需要说明的是,内存开销包括内存使用开销和内存分配开销,其中,内存使用开销为内存使用量在任务执行次数上的积分,比如,一次推理使用100字节的内存空间,运行5次,则内存使用开销为5*100,即500字节;而内存分配开销为每次新分配的内存空间的累计。
在实际应用中,当采用预设网络模型执行1000次任务时,分别采用本申请实施例所提供的内存管理方法中的内存分配(简称本申请分配)、静态分配、“Cub”分配和直接分配,对应的内存开销(内存使用开销、归一化后的内存使用开销、内存分配开销和归一化后的内存分配开销)如表1所示:
表1
Figure BDA0002584493120000361
其中,静态分配为启动1000次任务的执行时一次性分配内存空间的分配方式,因此,均摊至1000次,内存分配开销几乎为0。本申请分配的内存使用开销约为静态分配的内存使用开销的1/3(0.721/2.039=0.353)。
Cub分配采用“CachingDeviceAllocator”算法,对应的的参数设置为“bin_growth=8,min_bin=6,max_bin=11,max_cached_bytes=16MB-1B”,由于其内存块中存在较多碎片,无法充分利用,内存开销最大。本申请分配在内存使用开销和内存分配开销上均优于Cub分配。
直接分配是在张量的使用间隔前分配内存空间,在使用间隔结束后释放内存空间的分配方式;本申请分配在内存使用开销和内存分配开销上均优于直接分配。
可以理解的是,本申请实施例所提供的内存管理方法,能够减小内存分配开销和内存使用开销,能够提升任务执行效率和任务执行规模,提升了内存管理效果。
下面继续说明本申请实施例提供的内存管理装置255的实施为软件模块的示例性结构,在一些实施例中,如图3所示,存储在存储器250的内存管理装置255中的软件模块可以包括:
请求获取模块2551,用于获取目标任务请求;
请求响应模块2552,用于响应所述目标任务请求,获取前次任务执行时所使用的前次内存块;其中,所述前次任务为执行目标任务之前所执行的任务,所述前次内存块为所述前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;
内存分配模块2553,用于通过复用所述前次内存块,确定出所述目标任务对应的目标内存块;
任务执行模块2554,用于基于所述目标内存块,执行所述目标任务。
在本申请实施例中,所述内存分配模块2553,还用于获取所述目标任务对应的输入参数信息,所述输入参数信息为所述目标任务对应的输入数据;基于预设网络模型和所述输入参数信息,计算所述目标任务对应的输入张量信息集合;遍历所述前次内存块,确定当前输入张量信息的内存块分配信息,所述当前输入张量信息为所述输入张量信息集合中的任一输入张量信息;当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块。
在本申请实施例中,所述内存分配模块2553,还用于依据所述预设网络模型,获取节点依赖关系和每个计算节点的张量参数,所述节点依赖关系为多个计算节点在计算顺序上的依赖关系;根据所述输入参数信息与所述张量参数,确定待分配空间量;依据所述节点依赖关系,将当前计算节点的计算顺序作为开始使用索引,将所述当前计算节点所流向节点的最后计算顺序作为终止使用索引,所述当前计算节点为所述多个计算节点中的任一计算节点;将所述待分配空间量、所述开始使用索引和所述终止使用索引,组合为与所述每个计算节点对应的输入张量信息,从而得到与所述目标任务的所述多个计算节点对应的所述输入张量信息集合。
在本申请实施例中,所述内存分配模块2553,还用于遍历所述前次内存块,针对当前内存块,获取已分配输入张量信息,所述当前内存块为所述前次内存块中的任一内存块,所述已分配输入张量信息为所述当前内存块中已分配的内存空间对应的输入张量信息所构成的集合;从所述已分配输入张量信息中,确定与所述当前输入张量信息相交的目标输入张量信息;基于所述目标输入张量信息所对应的内存地址信息和所述当前输入张量信息的待分配空间量,确定所述当前输入张量信息在所述当前内存块中的内存地址信息,从而得到所述内存块分配信息。
在本申请实施例中,所述内存分配模块2553,还用于根据所述目标输入张量信息所对应的内存地址信息,确定目标地址信息;在所述当前内存块中,获取所述目标地址信息之前的可分配空间;当所述可分配空间所对应的内存空间量大于等于所述当前输入张量信息的待分配空间量时,从所述可分配空间中确定所述当前输入张量信息在所述当前内存块中的内存地址信息;当所述可分配空间所对应的内存空间量小于所述当前输入张量信息的待分配空间量时,将所述目标地址信息更新为所述目标地址信息与所述目标输入张量信息的待分配空间量之和,从更新后的目标地址信息之后的内存空间中,确定所述当前输入张量信息在所述当前内存块中的内存地址信息。
在本申请实施例中,所述内存分配模块2553,还用于依据所述内存地址信息,对所述已分配输入张量信息进行排序;遍历排序后的已分配输入张量信息,获取当前已分配输入张量信息的开始使用索引和所述当前输入张量信息的开始使用索引中的最大索引,所述当前已分配输入张量信息为所述排序后的已分配输入张量信息中的任一输入张量信息;获取所述当前已分配输入张量信息的终止使用索引和所述当前输入张量信息的终止使用索引中的最小索引;当所述最大索引小于等于所述最小索引,确定所述当前已分配输入张量信息,为与所述当前输入张量信息相交的所述目标输入张量信息。
在本申请实施例中,所述内存分配模块2553,还用于当所述最大索引大于所述最小索引,确定所述当前已分配输入张量信息与所述当前输入张量信息不相交;当遍历完成所述排序后的已分配输入张量信息,确定不存在与所述当前输入张量信息相交的输入张量信息时,确定所述当前输入张量信息在所述当前内存块中的内存地址信息。
在本申请实施例中,所述内存分配模块2553,还用于当完成对所述输入张量信息集合的处理时,将所述前次内存块中遍历到的各个内存块对应的内存空间的分配信息,确定为与所述输入张量信息集合对应的所述各个内存块分配信息;将所述各个内存块分配信息,组合为所述目标内存块。
在本申请实施例中,所述内存分配模块2553,还用于释放所述前次内存块中未遍历到的内存块。
在本申请实施例中,所述内存分配模块2553,还用于遍历所述前次内存块,当遍历完所述前次内存块,确定所述前次内存块中不存在与所述当前输入张量信息适配的内存块时,基于所述当前输入张量信息的待分配空间量,分配新的内存块;确定所述当前输入张量信息在所述新的内存块的内存地址信息,从而得到所述内存块分配信息;所述当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块,包括:当完成对所述输入张量信息集合的处理时,将所述新的内存块对应的内存空间的分配信息和所述前次内存块对应的内存空间的分配信息,组合为所述目标内存块。
在本申请实施例中,所述内存分配模块2553,还用于计算所述当前输入张量信息对应的待分配空间量与预设规格的乘积,得到待选空间量;依据所述待选空间量和预设块空间量中的最大空间量,从内存系统中分配所述新的内存块。
在本申请实施例中,所述内存管理装置还包括下次任务执行模块,用于获取针对所述预设网络模型的下次任务请求;响应所述下次任务请求,通过遍历所述目标内存块,为下次任务分配内存空间,以执行所述下次任务。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的内存管理方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的内存管理方法,例如,如图4示出的内存管理方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,通过本申请实施例,由于在利用预设网络模型执行目标任务时,是依据前次任务执行时所使用的内存块实现的内存空间的分配;因此,实现了对前次任务的内存块的复用,也就减少了目标任务在执行过程中内存空间的占用量,从而,能够降低任务执行的内存消耗。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。

Claims (15)

1.一种内存管理方法,其特征在于,包括:
获取目标任务请求;
响应所述目标任务请求,获取前次任务执行时所使用的前次内存块;
其中,所述前次任务为执行目标任务之前所执行的任务,所述前次内存块为所述前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;
通过遍历所述前次内存块,确定出所述目标任务对应的目标内存块;
基于所述目标内存块,执行所述目标任务。
2.根据权利要求1所述的方法,其特征在于,所述通过遍历所述前次内存块,确定出所述目标任务对应的目标内存块,包括:
获取所述目标任务对应的输入参数信息,所述输入参数信息为所述目标任务对应的输入数据;
基于预设网络模型和所述输入参数信息,计算所述目标任务对应的输入张量信息集合;
遍历所述前次内存块,确定当前输入张量信息的内存块分配信息,所述当前输入张量信息为所述输入张量信息集合中的任一输入张量信息;
当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块。
3.根据权利要求2所述的方法,其特征在于,所述基于预设网络模型和所述输入参数信息,计算所述目标任务对应的输入张量信息集合,包括:
依据所述预设网络模型,获取节点依赖关系和每个计算节点的张量参数,所述节点依赖关系为多个计算节点在计算顺序上的依赖关系;
根据所述输入参数信息与所述张量参数,确定待分配空间量;
依据所述节点依赖关系,将当前计算节点的计算顺序作为开始使用索引,将所述当前计算节点所流向节点的最后计算顺序作为终止使用索引,所述当前计算节点为所述多个计算节点中的任一计算节点;
将所述待分配空间量、所述开始使用索引和所述终止使用索引,组合为与所述每个计算节点对应的输入张量信息,从而得到与所述目标任务的所述多个计算节点对应的所述输入张量信息集合。
4.根据权利要求3所述的方法,其特征在于,所述遍历所述前次内存块,确定当前输入张量信息的内存块分配信息,包括:
遍历所述前次内存块,针对当前内存块,获取已分配输入张量信息,所述当前内存块为所述前次内存块中的任一内存块,所述已分配输入张量信息为所述当前内存块中已分配的内存空间对应的输入张量信息所构成的集合;
从所述已分配输入张量信息中,确定与所述当前输入张量信息相交的目标输入张量信息;
基于所述目标输入张量信息所对应的内存地址信息和所述当前输入张量信息的待分配空间量,确定所述当前输入张量信息在所述当前内存块中的内存地址信息,从而得到所述内存块分配信息。
5.根据权利要求4所述的方法,其特征在于,所述基于所述目标输入张量信息所对应的内存地址信息和所述当前输入张量信息的待分配空间量,确定所述当前输入张量信息在所述当前内存块中的内存地址信息,包括:
根据所述目标输入张量信息所对应的内存地址信息,确定目标地址信息;
在所述当前内存块中,获取所述目标地址信息之前的可分配空间;
当所述可分配空间所对应的内存空间量大于等于所述当前输入张量信息的待分配空间量时,从所述可分配空间中确定所述当前输入张量信息在所述当前内存块中的内存地址信息;
当所述可分配空间所对应的内存空间量小于所述当前输入张量信息的待分配空间量时,将所述目标地址信息更新为所述目标地址信息与所述目标输入张量信息的待分配空间量之和,从更新后的目标地址信息之后的内存空间中,确定所述当前输入张量信息在所述当前内存块中的内存地址信息。
6.根据权利要求4或5所述的方法,其特征在于,所述从所述已分配输入张量信息中,确定与所述当前输入张量信息相交的目标输入张量信息,包括:
依据所述内存地址信息,对所述已分配输入张量信息进行排序;
遍历排序后的已分配输入张量信息,获取当前已分配输入张量信息的开始使用索引和所述当前输入张量信息的开始使用索引中的最大索引,所述当前已分配输入张量信息为所述排序后的已分配输入张量信息中的任一输入张量信息;
获取所述当前已分配输入张量信息的终止使用索引和所述当前输入张量信息的终止使用索引中的最小索引;
当所述最大索引小于等于所述最小索引,确定所述当前已分配输入张量信息,为与所述当前输入张量信息相交的所述目标输入张量信息。
7.根据权利要求6所述的方法,其特征在于,所述获取所述当前已分配输入张量信息的终止使用索引和所述当前输入张量信息的终止使用索引中的最小索引之后,所述方法还包括:
当所述最大索引大于所述最小索引,确定所述当前已分配输入张量信息与所述当前输入张量信息不相交;
当遍历完成所述排序后的已分配输入张量信息,确定不存在与所述当前输入张量信息相交的输入张量信息时,确定所述当前输入张量信息在所述当前内存块中的内存地址信息。
8.根据权利要求2至5任一项所述的方法,其特征在于,所述当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块,包括:
当完成对所述输入张量信息集合的处理时,将所述前次内存块中遍历到的各个内存块对应的内存空间的分配信息,确定为与所述输入张量信息集合对应的所述各个内存块分配信息;
将所述各个内存块分配信息,组合为所述目标内存块。
9.根据权利要求8所述的方法,其特征在于,所述将所述各个内存块分配信息,组合为所述目标内存块之后,所述方法还包括:
释放所述前次内存块中未遍历到的内存块。
10.根据权利要求2至5任一项所述的方法,其特征在于,所述遍历所述前次内存块,确定当前输入张量信息的内存块分配信息,包括:
遍历所述前次内存块,当遍历完所述前次内存块,确定所述前次内存块中不存在与所述当前输入张量信息适配的内存块时,基于所述当前输入张量信息的待分配空间量,分配新的内存块;
确定所述当前输入张量信息在所述新的内存块的内存地址信息,从而得到所述内存块分配信息;
所述当完成对所述输入张量信息集合的处理时,将与所述输入张量信息集合对应的各个内存块分配信息组合为所述目标内存块,包括:
当完成对所述输入张量信息集合的处理时,将所述新的内存块对应的内存空间的分配信息和所述前次内存块对应的内存空间的分配信息,组合为所述目标内存块。
11.根据权利要求10所述的方法,其特征在于,所述基于所述当前输入张量信息的待分配空间量,分配新的内存块,包括:
计算所述当前输入张量信息对应的待分配空间量与预设规格的乘积,得到待选空间量;
依据所述待选空间量和预设块空间量中的最大空间量,从内存系统中分配所述新的内存块。
12.根据权利要求1至5任一项所述的方法,其特征在于,所述基于所述目标内存块,执行所述目标任务之后,所述方法还包括:
获取针对所述预设网络模型的下次任务请求;
响应所述下次任务请求,通过遍历所述目标内存块,为下次任务分配内存空间,以执行所述下次任务。
13.一种内存管理装置,其特征在于,包括:
请求获取模块,用于获取目标任务请求;
请求响应模块,用于响应所述目标任务请求,获取前次任务执行时所使用的前次内存块;其中,所述前次任务为执行目标任务之前所执行的任务,所述前次内存块为所述前次任务执行时所使用的各个内存块构成的集合,内存块为内存分配的最小分配单元;
内存分配模块,用于通过遍历所述前次内存块,确定出所述目标任务对应的目标内存块;
任务执行模块,用于基于所述目标内存块,执行所述目标任务。
14.一种内存管理设备,其特征在于,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的内存管理方法。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于被处理器执行时,实现权利要求1至12任一项所述的内存管理方法。
CN202010677232.6A 2020-07-14 2020-07-14 一种内存管理方法、装置、设备及计算机可读存储介质 Active CN111708641B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010677232.6A CN111708641B (zh) 2020-07-14 2020-07-14 一种内存管理方法、装置、设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010677232.6A CN111708641B (zh) 2020-07-14 2020-07-14 一种内存管理方法、装置、设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN111708641A true CN111708641A (zh) 2020-09-25
CN111708641B CN111708641B (zh) 2024-03-19

Family

ID=72546364

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010677232.6A Active CN111708641B (zh) 2020-07-14 2020-07-14 一种内存管理方法、装置、设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN111708641B (zh)

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112256441A (zh) * 2020-12-23 2021-01-22 上海齐感电子信息科技有限公司 神经网络推理的内存分配方法及装置
CN112965663A (zh) * 2021-03-05 2021-06-15 上海寒武纪信息科技有限公司 对数据块的存储空间进行复用的方法和相关产品
CN113504994A (zh) * 2021-07-26 2021-10-15 上海遁一信息科技有限公司 一种内存池性能弹性伸缩的实现方法及系统
CN114237903A (zh) * 2021-12-22 2022-03-25 上海壁仞智能科技有限公司 内存分配优化方法、装置、电子设备、介质及程序产品
CN115080240A (zh) * 2022-06-29 2022-09-20 美的集团(上海)有限公司 语音处理模型的部署方法、电子设备及存储介质
CN115373839A (zh) * 2022-08-12 2022-11-22 北京觉非科技有限公司 一种推理过程的资源配置方法及系统
CN117591293A (zh) * 2023-12-01 2024-02-23 深圳计算科学研究院 内存管理方法、装置、计算机设备及计算机可读存储介质
CN118093452A (zh) * 2024-04-22 2024-05-28 北京壁仞科技开发有限公司 一种内存架构映射方法、设备、存储介质及程序产品
CN118093452B (zh) * 2024-04-22 2024-07-05 北京壁仞科技开发有限公司 一种内存架构映射方法、设备、存储介质及程序产品

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108292241A (zh) * 2015-10-28 2018-07-17 谷歌有限责任公司 处理计算图
US20180204117A1 (en) * 2017-01-19 2018-07-19 Google Inc. Dynamic-length stateful tensor array
CN109815162A (zh) * 2019-01-28 2019-05-28 Oppo广东移动通信有限公司 内存管理方法、装置、移动终端及存储介质
CN110008020A (zh) * 2019-03-05 2019-07-12 平安科技(深圳)有限公司 内存管理方法、装置、电子设备及计算机可读存储介质
CN110188795A (zh) * 2019-04-24 2019-08-30 华为技术有限公司 图像分类方法、数据处理方法和装置
CN110262886A (zh) * 2019-06-24 2019-09-20 上海商汤智能科技有限公司 任务执行方法及装置、电子设备和存储介质
CN110490313A (zh) * 2019-08-14 2019-11-22 北京中科寒武纪科技有限公司 一种内存复用方法及其相关产品
CN110597616A (zh) * 2018-06-13 2019-12-20 华为技术有限公司 一种神经网络的内存分配方法及装置
US20190391796A1 (en) * 2019-06-28 2019-12-26 Intel Corporation Control of scheduling dependencies by a neural network compiler
CN110659728A (zh) * 2019-09-24 2020-01-07 上海寒武纪信息科技有限公司 神经网络优化方法、装置、计算机设备及存储介质
US20200133735A1 (en) * 2018-10-31 2020-04-30 EMC IP Holding Company LLC Method, device, and computer program product for assigning tasks to dedicated processing resources
CN111133447A (zh) * 2018-02-18 2020-05-08 辉达公司 适于自主驾驶的对象检测和检测置信度
CN111338635A (zh) * 2020-02-20 2020-06-26 腾讯科技(深圳)有限公司 计算图的图编译方法、装置、设备及存储介质
CN111401539A (zh) * 2019-09-24 2020-07-10 上海寒武纪信息科技有限公司 一种数据处理方法、装置、计算机设备及存储介质

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108292241A (zh) * 2015-10-28 2018-07-17 谷歌有限责任公司 处理计算图
US20180204117A1 (en) * 2017-01-19 2018-07-19 Google Inc. Dynamic-length stateful tensor array
CN111133447A (zh) * 2018-02-18 2020-05-08 辉达公司 适于自主驾驶的对象检测和检测置信度
CN110597616A (zh) * 2018-06-13 2019-12-20 华为技术有限公司 一种神经网络的内存分配方法及装置
US20200133735A1 (en) * 2018-10-31 2020-04-30 EMC IP Holding Company LLC Method, device, and computer program product for assigning tasks to dedicated processing resources
CN109815162A (zh) * 2019-01-28 2019-05-28 Oppo广东移动通信有限公司 内存管理方法、装置、移动终端及存储介质
CN110008020A (zh) * 2019-03-05 2019-07-12 平安科技(深圳)有限公司 内存管理方法、装置、电子设备及计算机可读存储介质
CN110188795A (zh) * 2019-04-24 2019-08-30 华为技术有限公司 图像分类方法、数据处理方法和装置
CN110262886A (zh) * 2019-06-24 2019-09-20 上海商汤智能科技有限公司 任务执行方法及装置、电子设备和存储介质
US20190391796A1 (en) * 2019-06-28 2019-12-26 Intel Corporation Control of scheduling dependencies by a neural network compiler
CN110490313A (zh) * 2019-08-14 2019-11-22 北京中科寒武纪科技有限公司 一种内存复用方法及其相关产品
CN110659728A (zh) * 2019-09-24 2020-01-07 上海寒武纪信息科技有限公司 神经网络优化方法、装置、计算机设备及存储介质
CN111401539A (zh) * 2019-09-24 2020-07-10 上海寒武纪信息科技有限公司 一种数据处理方法、装置、计算机设备及存储介质
CN111338635A (zh) * 2020-02-20 2020-06-26 腾讯科技(深圳)有限公司 计算图的图编译方法、装置、设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
李昱锋;李建宏;文永明;: "基于TensorFlow的K-means算法的研究", 信息技术与网络安全, no. 05 *
王庆林;李东升;梅松竹;赖志权;窦勇;: "面向飞腾多核处理器的Winograd快速卷积算法优化", 计算机研究与发展, no. 06 *

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112256441A (zh) * 2020-12-23 2021-01-22 上海齐感电子信息科技有限公司 神经网络推理的内存分配方法及装置
CN112965663A (zh) * 2021-03-05 2021-06-15 上海寒武纪信息科技有限公司 对数据块的存储空间进行复用的方法和相关产品
CN113504994A (zh) * 2021-07-26 2021-10-15 上海遁一信息科技有限公司 一种内存池性能弹性伸缩的实现方法及系统
CN113504994B (zh) * 2021-07-26 2022-05-10 上海遁一信息科技有限公司 一种内存池性能弹性伸缩的实现方法及系统
CN114237903A (zh) * 2021-12-22 2022-03-25 上海壁仞智能科技有限公司 内存分配优化方法、装置、电子设备、介质及程序产品
CN114237903B (zh) * 2021-12-22 2024-03-22 上海壁仞智能科技有限公司 内存分配优化方法、装置、电子设备、介质及程序产品
CN115080240A (zh) * 2022-06-29 2022-09-20 美的集团(上海)有限公司 语音处理模型的部署方法、电子设备及存储介质
CN115080240B (zh) * 2022-06-29 2023-10-10 美的集团(上海)有限公司 语音处理模型的部署方法、电子设备及存储介质
CN115373839A (zh) * 2022-08-12 2022-11-22 北京觉非科技有限公司 一种推理过程的资源配置方法及系统
CN117591293A (zh) * 2023-12-01 2024-02-23 深圳计算科学研究院 内存管理方法、装置、计算机设备及计算机可读存储介质
CN118093452A (zh) * 2024-04-22 2024-05-28 北京壁仞科技开发有限公司 一种内存架构映射方法、设备、存储介质及程序产品
CN118093452B (zh) * 2024-04-22 2024-07-05 北京壁仞科技开发有限公司 一种内存架构映射方法、设备、存储介质及程序产品

Also Published As

Publication number Publication date
CN111708641B (zh) 2024-03-19

Similar Documents

Publication Publication Date Title
CN111708641B (zh) 一种内存管理方法、装置、设备及计算机可读存储介质
CN115248728B (zh) 面向智能计算的分布式训练任务调度方法、系统和装置
WO2022068663A1 (zh) 内存分配方法、相关设备及计算机可读存储介质
CN113821332B (zh) 自动机器学习系统效能调优方法、装置、设备及介质
CN100588197C (zh) 一种网格模拟方法及其模拟器
CN113515672A (zh) 数据处理方法、装置、计算机可读介质及电子设备
CN110705716A (zh) 一种多模型并行训练方法
CN100531070C (zh) 网络资源调度仿真系统
CN114356578A (zh) 自然语言处理模型的并行计算方法、装置、设备及介质
CN117785490A (zh) 一种图神经网络模型的训练架构、方法、系统及服务器
Risco-Martin et al. A parallel evolutionary algorithm to optimize dynamic memory managers in embedded systems
CN111190711A (zh) Bdd结合启发式a*搜索的多机器人任务分配方法
Stypka et al. The missing link! A new skeleton for evolutionary multi-agent systems in Erlang
CN113010296B (zh) 基于形式化模型的任务解析与资源分配方法及系统
CN115292044A (zh) 数据处理方法、装置、电子设备及存储介质
CN116795524A (zh) 任务处理方法、装置、计算机设备、存储介质及程序产品
CN114064235A (zh) 多任务教与学优化方法、系统及设备
CN109635191B (zh) 相似度确定方法、装置、存储介质和计算机设备
Zykov et al. Application of information processes applicative modelling to virtual machines auto configuration
Olden Performance Analysis of SWE Implementations based on modern parallel Runtime Systems
Nadeem et al. Task scheduling in large-scale distributed systems utilizing partial reconfigurable processing elements
CN117540783B (zh) 仿真脑活动数据的生成方法、装置、电子装置和存储介质
Chuang Design and qualitative/quantitative analysis of multi-agent spatial simulation library
CN114186674A (zh) 一种基于树结构划分的精细神经元高效仿真方法和装置
CN117709402A (zh) 模型构建方法、装置、平台、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant