CN110597616B - 一种神经网络的内存分配方法及装置 - Google Patents
一种神经网络的内存分配方法及装置 Download PDFInfo
- Publication number
- CN110597616B CN110597616B CN201810607693.9A CN201810607693A CN110597616B CN 110597616 B CN110597616 B CN 110597616B CN 201810607693 A CN201810607693 A CN 201810607693A CN 110597616 B CN110597616 B CN 110597616B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- neural network
- memory blocks
- node
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation 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/5016—Allocation 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0207—Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/04—Addressing variable-length words or parts of words
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/501—Performance criteria
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
- G06F2212/1044—Space efficiency improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Neurology (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Artificial Intelligence (AREA)
- Memory System (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
- Image Analysis (AREA)
Abstract
本申请涉及人工智能或者机器学习领域,具体提供一种神经网络的内存分配方法及装置,神经网络在运行时,需占用N个内存块,该方法包括:确定N个内存块的信息;根据N个内存块的大小,对N个内存块进行由大到小排序,获得N个内存块的排序序列;分配第一内存块给神经网络,用于进行神经网络中第一节点集合的运算;判断第n内存块是否可复用已分配集合中的内存块,已分配集合中包括已经分配给神经网络的内存块,如果第n内存块可复用已分配集合中的内存块,则将可复用的内存块分配给神经网络,用于进行神经网络中第n节点集合的运算,并更新已分配集合;其中,所述第n内存块为第二内存块至第N内存块中的任一内存块。采用本申请的方法及装置,可优化神经网络的内存分配。
Description
技术领域
本申请涉及深度学习技术领域,尤其涉及一种神经网络的内存分配方法及装置。
背景技术
在当前的计算机深度学习领域,为了取得更好的算法精度,深度学习神经网络越来越复杂,硬件能力限制了神经网络向更深的方向发展,必须进行内存的优化。为了实现内存的优化,业界通常采用以下内存分配策略:
运行整个神经网络,然后按照整个神经网络运行的前后顺序,为整个神经网络分配内存。比如,神经网络在运行过程中,依次需要占用100M的内存块、10M的内存块和50M的内存块。那么在现有技术中,当神经网络申请100M的内存块时,可为神经网络分配一100M的内存块,然后当神经网络申请10M的内存块时,可判断一下该10M的内存块申请是否可用复用上述已分配的100M内存块,如果可以,则不再为所申请的10M内存块分配新的内存块,而使该10M内存块申请复用上述100M内存块,同理,当神经网络申请50M的内存块时,也判断一下该50M的内存块申请是否可复用上述已分配的100M内存块,且如果可复用,则分配该50M的内存块复用上述已分配的100M内存块,否则,为该50M内存块申请分配一新的50M内存块。
通过上述记载可知,在现有技术中,当神经网络申请一内存块时,首先需要判断一下该申请的内存块是否可复用已分配的内存块,如果可以,则直接分配该申请的内存块复用已分配的内存块,如果不可以,再为该内存块申请分配新的内存块。但是,若申请的10M内存块和申请的50M内存块都可复用已分配的100M的内存块,会出现申请的10M内存块复用已分配的100M内存块,而对神经网络分配一50M内存块,整个神经网络需共占用150M的内存块,导致整个神经网络占用的内存较大,内存分配不合理。
发明内容
本申请实施例提供一种神经网络的内存分配方法及装置,以优化神经网络的内存。
第一方面,提供一种神经网络的内存分配方法,神经网络在运行时,需占用N个内存块,N为大于等于1的整数,方法包括:确定N个内存块的信息,N个内存块的信息包括N个内存块的大小和N个内存块中每个内存块一一对应的节点集合,每个内存块用于进行神经网络中与每个内存块一一对应的节点集合的运算;根据N个内存块的大小,对N个内存块进行由大到小排序,获得N个内存块的排序序列;分配第一内存块给神经网络,用于进行神经网络中第一节点集合的运算,其中,第一内存块为N个内存块中大小最大的内存块;判断第n内存块是否可复用已分配集合中的内存块,已分配集合中包括已经分配给神经网络的内存块,如果第n内存块可复用已分配集合中的内存块,则将可复用的内存块分配给神经网络,用于进行神经网络中第n节点集合的运算,并更新已分配集合,其中,n为大于或等于2,小于或等于N的正整数;根据排序序列,从n=2到n=N依次执行上述判断,若判断为是,则更新已分配集合。
由上可见,在本申请实施例中,按照内存块的大小,进行内存块的分配与复用,相对于现有技术中,按照内存块的申请顺序,进行内存块的分配与复用,可得到全部内存块中复用的全局最优解,从而在内存块复用过程中,可在大小相近的内存块间进行复用,避免了较小内存块复用已分配较大内存块,为较大内存块重新分配内存块的问题,优化了神经网络的内存分配。
在一种可能的实现方式中,如果第n内存块不可复用已分配集合中的内存块,则分配第n内存块给神经网络,用于进行神经网络中第n节点集合的运算。
在一种可能的实现方式中,判断第n内存块是否可复用已分配集合中的内存块,包括:
判断第n节点集合与第x节点集合之间的交集是否为0,若为0,则判断第n内存块可复用第x节点集合对应的第x内存块,其中,已分配集合包括第x内存块,第x内存块用于进行神经网络中第x节点集合的运算,x为小于n的正整数。
在一种可能的实现方式中,更新已分配集合,包括:根据第n节点集合,更新可复用的内存块所对应的节点集合。
在一种可能的实现方式中,确定N个内存块的信息,包括:运行神经网络;
记录神经网络中每个节点的输入参数所占用内存块的信息和每个节点的输出参数所占用内存块的信息,以及每个节点的中间参数所占用内存块的信息;根据神经网络中每个节点的输入参数所占用内存块的信息、输出参数所占用内存块的信息以及中间参数所占用内存块的信息,确定N个内存块的信息。
由上可见,在本申请实施例中,可获取整个神经网络的需要使用的全部内存块的信息,不仅包括节点的输入、输出参数需要占用的内存块信息,还包括了中间参数需要占用的内存块信息,避免了目前技术的中间参数需要占用的内存块不能被统计到,也不能被优化的问题,使得整个神经网络需要使用的全部内存块得到优化。同时,本申请实施例中,通过预先运行一遍神经网络的方式,将全部的需要使用的内存块的信息记录下来,并进行优化,能够得到整个神经网路中全部需要使用的内存块的全局最优解,以减少神经网络的内存占用空间。
第二方面,本申请提供一种神经网络的内存分配装置,用于终端设备或服务器,包括:用于执行以上第一方面各个步骤的单元或手段。
第三方面,本申请提供一种神经网络的内存优化装置,用于终端设备或服务器,包括至少一个处理元件和至少一个存储元件,其中至少一个存储元件用于存储程序和数据,至少一个处理元件用于执行本申请第一方面及第一方面任一种可能的实现方式提供的方法。
第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机指令,当其在处理器上运行时,使得处理器执行上述第一方面及第一方面任一种可能的实现方式提供的方法。
第五方面,本申请提供一种计算机程序产品,计算机程序产品包括计算机指令,当计算机指令被处理器运行时,使得处理器执行第一方面及第一方面任一种可能的实现方式提供的方法。
附图说明
图1为本申请实施例提供的内存块信息的一示意图;
图2为本申请实施例提供的神经网络内存分配方法的一流程图;
图3为本申请实施例提供的内存块排序的一示意图;
图4、图5以及图6为本申请实施例提供的内存块复用的示意图;
图7为本申请实施例提供的服务器或终端设备侧架构的示意图;
图8为本申请实施例提供的预分析的一流程图;
图9为本申请实施例提供的神经网络的一示意图;
图10为本申请实施例提供的神经网络内存分配方法的一流程图;
图11为本申请实施例提供的一网络架构图;
图12、图13以及图14为本申请实施例提供的神经网络内存分配的流程图;
图15为本申请实施例提供的内存优化效果的示意图;
图16为本申请实施例提供的DAG的一示意图;
图17和图18为本申请实施例提供的神经网络的内存分配装置的结构示意图。
具体实施方式
下面结合附图,对本申请实施例进行描述。
目前,在深度学习领域,为了实现优化神经网络的内存分配策略,业界通常采用以下两种策略:
第一种策略:称为In-Place策略,策略含义是指神经网络中各节点的输入和输出共用一块内存块。
第二种策略:称为Co-share策略,该策略含义是某块内存块可以供神经网络中的多个节点使用,当这些节点均执行完时,该内存块生命周期结束,此时该内存块可供神经网络中的其它节点使用。比如,可预设内存块A的生命周期为(1,2,3),代表内存块A可供节点1、节点2以及节点3使用,当节点1、节点2以及节点3均执行完成,内存块A的生命周期结束,此时内存块A可放置于空闲链表中,供神经网络中的其它节点使用。在本申请实施例中,神经网络中的节点,还可称为算子以及层等,在本申请实施例中,以节点为例,进行说明。
目前,针对上述第二种策略,内存分配的具体方法为:按照神经网络中节点执行的先后顺序进行内存块的分配与复用,内存分配效果较差。
比如,如图1所示,整个神经网络包括8个节点,按照运行的先后顺序,索引分别为1至8。而通过预分析,可获得上述图1所示的神经网络在运行时,按照时间顺序,先后需占用5个内存块,每个内存块用于进行该内存块对应的节点集合的运算,分别为第一内存块,第二内存块、第三内存块、第四内存块以及第五内存块。且神经网络所需占用的第一内存块的大小为100M,第一内存块所对应的节点集合为(1,2),神经网络所需占用的第二内存块的大小为10M,第二内存块所对应的节点集合为(2,3),神经网络所需占用的第三内存块的大小为20M,第三内存块所对应的节点集合为(3,4,5),神经网络所需占用的第四内存块的大小为50M,第四内存块所对应的节点集合为(5,6,7),神经网络所需占用的第五内存块的大小为20M,第五内存块所对应的节集合为(7,8)。
在本申请实施例中,可首先获取神经网络需占用第一内存块的信息,然后按照第一内存块的大小信息,为神经网络分配一100M内存块,且设置该100M内存块所对应的节点集合为(1、2),最后将该已分配100M内存块划分至已分配集合中。然后,获取神经网络需占用第二内存块的信息,判断该第二内存块所对应的节点集合(2、3)与上述已分配集合中的100M内存块的节点集合(1、2)是否有交集。若存在交集,第二内存块不可复用已分配集合中的100M内存块,因此为神经网络的节点集合(2、3)分配一10M大小的内存块,且设置该10M内存块所对应的节点集合为(2、3),最后将该已分配的10M内存块划分至已分配集合中。再然后,获取神经网络需占用第三内存块的信息,判断该第三内存块所对应的节点集合(3、4、5)与已分配集合中的100M内存块的节点集合(1、2)是否存在交集。可以看出,不存在交集,因此分配神经网络需占用的第三内存块复用已分配的100M内存块,且将该100M内存块所对应的节点集合更新为(1、2、3、4、5)。同理,获取神经网络所需占用的第四内存块的节点集合(5、6、7),然后确定该第四内存块的节点集合(5、6、7),与上述已分配100M内存块的节点集合(1、2、3、4、5)在交集,神经网络需占用的第四内存块不可复用已分配的100M内存块。同时,可确定神经网络需占用的第四内存块的节点集合(5、6、7)与上述已分配的10M内存块的节点集合(2、3)不存在交集,因此,可分配神经网络需占用的第四内存块,复用上述已分配的10M内存块,然后再额外申请一40M内存块,更新上述10M内存块的生命周期为(2、3、5、6、7、8),同时可将额外申请的40M内存块划分至已分配集合中。最后,获取神经网络需占用第五内存块的节点集合(7、8),可以发现其与上述已分配100M内存块的节点集合不存在交集,因此,可分配该第五内存块复用上述已分配100M内存块,同时可更新已分配100M内存块所对应的网络节点集合为(1、2、3、4、5、7、8)。采用上述内存分配方法,可以看出,需为上述图1所示的神经网络,分配100+10+40=150M的内存,内存分配的效果较差,神经网络仍需占用较大内存。
针对以上,本申请提供一种神经网络的内存分配方法,该方法的主要原理为:按照内存块的大小,对神经网络需占用的内存块进行排序,然后按照排序,进行内存块的分配。采用上述方法,可保证对于神经网络需占用的内存较大的内存块,复用已分配的内存块,而对于神经网络需占用的内存较小的内存块,分配新的内存块,从而可减小整个神经网络的内存占用,可提高内存优先效果。
以下,对本申请中的部分用语进行解释说明,以便于本领域技术人员理解。
1)每个内存块所对应的节点集合是指在神经网络中,可使用所述内存块进行运算的节点的集合。比如,在图1中,第一内存块所对应的节点集合为(1,2),代表在图1所示的神经网络中,节点1和节点2,可使用第一内存块进行运算。每个内存块所对应的节点集合,也可称为每个内存块的生命周期,比如,图1所示的第一内存块所对应的节点集合为(1、2),也可称为第一内存块的生命周期为(1、2)。
2)已分配集合,是指存储神经网络中,已分配内存块信息的集合。所述已分配集合也可称为共享内存队列等,在本申请中并不作限定。
3)节点,是指神经网络中用于运算的单位,所述节点还可称为算子,层等,在本申请中并不作限定。
针对以上场景,如图2所示,本申请实施例提供一种神经网络的内存分配方法的流程图。该方法的执行主体可以为运行神经网络的服务器,也可以为运行神经网络的终端设备。在本申请实施例中,以执行主体为运行神经网络的终端设备为例,进行说明。在图2所示的流程中,可设定整个神经网络在运行时,需占用N个内存块。如图2所示,该流程具体包括:
步骤S201:终端设备确定所述N个内存块的信息。
其中,在本申请实施例中,N个内存块的信息中包括N个内存块的大小和所述N个内存块中每个内存块一一对应的节点集合,每个内存块用于进行所述神经网络中与所述每个内存块一一对应的节点集合的运算。
在本申请实施例中,关于上述步骤S201中,终端设备确定N个内存块的信息,可具体采用以下方式:
示例一:终端设备运行所述神经网络,记录神经网络中每个节点的输入参数所占用内存块的信息和每个节点的输出参数所占用内存块的信息,以及每个节点的中间参数所占用内存块的信息,根据神经网络中每个节点的输入参数所占用内存块的信息、输出参数所占用内存块的信息以及中间参数所占用内存块的信息,确定所述N个内存块的信息。
在示例一中,终端设备可同时记录输入参数、输出参数以及中间参数所占用内存块的信息,根据输入参数、输出参数以及中间参数所占用内存块的信息,生成上述步骤S201中的N个内存块信息,然后,采用本申请图2所提供的方式,优化神经网络各节点的输入参数、输出参数以及中间参数所占用的内存块的分配策略。
比如,在示例一中,整个神经网络包括节点1和节点2,且通过运行所述神经网络,可记录到在神经网络的运行过程中,节点1的输入参数使用内存块A,中间参数使用内存块B,输出参数使用内存块C;节点2的输入参数使用内存块B、中间参数使用内存块C、输出参数使用内存块D,通过上述记录,可得到内存块A所对应的节点集合为(1)、内存地位B所对应的节点集合为(1、2),内存块C所对应的节点集合为(1,2),内存块D所对应的节点集合为(2)。整个神经网络可包括4个内存块信息,分别为第一内存块信息、第二内存块信息、第三内存块信息以及第四内存块信息,其中,第一内存块信息中存储有内存块A的大小以及内存块A所对应的节点集合(1),第二内存块信息中存储有内存块B的大小以及内存块B所对应的节点集合(1、2),第三内存块信息中存储有内存块C的大小以及内存块C所对应的节点集合(1、2),第四内存块信息中存储有内存块D的大小以及内存块D所对应的节点集合(2)。
针对上述示例一,在现有技术提供的内存分配方法中,是将神经网络转换为有向无环图(directed acyclic graph,DAG)图,通过遍历DAG图获取神经网络中内存块的使用情况,采用上述DAG图的方式,只能统计到神经网络的输入参数和输出参数所使用内存块的情况,不能统计到神经网络的中间参数使用内存块的情况,相应的,在现有技术中的内存分配策略,也仅能对神经网络的输入参数和输出参数所占用的内存的分配进行优化,而无法对神经网络的中间参数所使用内存的分配进行优化,而采用上述示例一中的方法,可同时对神经网络的输入参数、输入参数和中间参数使用内存的分配进行优先,对分配策略优化效果较好。
示例二:终端设备运行所述神经网络,记录所述神经网络中每个节点的输入参数、输出参数或中间参数所占用内存块的信息,根据每个节点的输入参数、输出参数或中间参数所占用内存块的信息,确定所述N个内存块的信息。
在示例二中,终端设备可仅记录每个节点的输入参数所占用内存块的信息,生成上述步骤S201中的N个内存块的信息,然后采用本申请图2所提供的方法,仅对输入参数所占用的内存进行优化。或者,终端设备可也仅记录每个节点的输出参数所占用内存块的信息,生成上述步骤S201中的N个内存块的信息,然后采用本申请图2所提供的方法,仅对输出参数所占用的内存进行优化,或者,仅为每个节点的中间参数所占用的内存进行优化。
示例三:终端设备运行所述神经网络,记录所述神经网络中每个节点的输入参数、输出参数和中间参数中的任两个参数,所占用内存块的信息,根据每个节点的任两个参数所占用内存块的信息,确定所述N个内存块的信息。
在示例三中,终端设备可仅记录每个节点的输入参数、中间参数和输出参数中的任两个参数,然后,对上述任两个参数进行优化。针对整个神经网络而言,示例三的优化效果要差于示例一,优化示例二。
步骤S202:终端设备根据N个内存块的大小,对N个内存块进行由大到小排序,获得N个内存块的排序序列。
在本申请实施例中,按照内存块的大小,对N个内存块进行排序后,所得到的N个内存块的排序序列,可为第一内存块,第二内存块,依次类推,直至第N内存块。其中,第一内存块为所述N个内存块中大小最大的内存块,第N内存块为所述N个内存块中大小最小的内存块。
在本申请实施例中,N个内存块中每个内存块对应一个节点集合,为了方便描述,可将第一内存块所对应的节点集合称为第一节点集合,第二内存块所对应的节点集合称为第二节点集合,第n内存块所对应的节点集合称为第n节点集合,依次类推,第N内存块所对应的节点集合称为第N节点集合。
步骤S203:终端设备分配第一内存块给神经网络,用于进行神经网络中第一节点集合的运算。
在本申请实施例中,终端设备可将第一内存块划分至已分配集合中,已分配集合中包括已经分配给神经网络的内存块。
步骤S204:针对第二内存块至第N内存块中的任一内存块,第n内存块,n为大于或等于2,小于或等于N的正整数,终端设备判断第n内存块是否可复用已分配集合中的内存块,如果是,执行步骤S205,否则,执行步骤S206。
具体的,在本申请实施例中,针对第二内存块至第N内存块,可根据排序序列中的大小顺序,由大到小依次执行上述步骤S204。其中,所述n的取值可从2至N,依次取值。
在本申请实施例中,设定已分配集合中包括第x内存块,第x内存块用于进行神经网络中第x节点集合的运算,也即第x内存块所对应的节点集合为第x节点集合。在本申请实施例中,可具体判断第n节点集合与第x节点集合之间的交集是否为0,若为0,则判断第n内存块可复用已分配的第x内存块,否则,判断第n内存块不可复用已分配的第x内存块,x可为小于n的正整数。
步骤S205:终端设备将第n内存块可复用的内存块分配给神经网络,用于神经网络中第n节点集合的运算,并更新已分配集合。
在本申请实施例中,可根据第n节点集合,更新可复用的内存块所对应的节点集合。在本申请的一示例中,比如,第n内存块所对应的第n节点集合为(1,2),已分配的第x内存块所对应的第x节点集合为(3,4)。可以看出,第n节点集合与第x节点集合的交集为0,可确定第n内存块可复用第x内存块,此时,可将第x内存块所对应的节点集合更新为(1,2,3,4)。
步骤S206:终端设备分配第n内存块给所述神经网络,用于进行所述神经网络中第n节点集合的运算。
同时,更新已分配集合,即将第n内存块划分至已分配集合。
由上可见,在本申请实施例中,是首先获取整个神经网络使用内存块的信息,然后对神经网络所需使用的内存块进行由大至小的排序,后续按照内存块的排序,进行内存块的分配,相对于现有技术中,按照神经网络占用内存块的先后顺序,进行内存块的分配,可保证分配较大内存块对已分配内存块的复用,分配新的内存给小内存块,从而可减少整个神经网络的内存占用,优化内存分配策略。
在本申请实施例中,如图1所示,将以整个神经网络包括8个节点,索引分别为1至8为例,详细介绍上述图2流程所提供的方法。
终端设备可预先运行图1所提供的神经网络,记录8个节点中每个节点的输入参数、输出参数以及中间参数所占用内存块的信息,最后通过统计分析可确定,上述图1所示的神经网络在运行过程中,按照先后顺序,共需占用5个内存块,分别为100M内存块、10M内存块、20M内存块、50M内存块以及20M内存块,且可确定上述100M内存块所对应的节点集合为(1,2),10M内存块所对应的节点集合为(2,3),20M内存块所占用的节点集合为(3,4,5),50M内存块所占用的节点集合为(5,6,7),20M内存块所占用的节点集合为(7,8)。此过程可对于上述图2所示的步骤S201,确定N个内存块的信息,在本示例中,所述N的取值为5。
然后终端设备可对上述5个内存块按照从大至小的顺序,进行排序,获得5个内存块的排序序列,上述5个内存块的排序序列,可分别为100M内存块、50M内存块、20M内存块、20M内存块以及10M内存块,可参见图3所示。此过程可对于上述图2所示的步骤S202。
终端设备可将上述5个内存块中大小最大的内存块,100M内存块,分配给图1所示的神经网络,用于节点1和节点2的运算,且可将上述100M内存块的信息存储至已分配集合中,该过程可对于上述图2所示的步骤S203。
终端设备可依次判断上述图3所示的50M内存块、20M内存块、20M内存块以及10M内存块,是否可复用已分配集合中的内存块,如果可复用已分配集合中的内存块,则分配可复用内存块进行神经网络中相应节点的运算,比如,确定50M内存块可复用已分配内存块,此时可分配所述已分配内存块进行50M内存块所对应的节点集合(5、6、4)的运算。如果不可复用已分配内存块,则分配相应的内存块进行相应节点集合的运算。经过程,可对于上述图2的示的步骤S204至步骤S206。
具体的,如图4所示,针对上述50M内存块,可首先判断该50M内存块所对应的节点集合(5、6、7)与已分配100M内存块的节点集合(1、2)的交集是否为零,可以看出,两者不存在交集,此时,可分配50M内存块复用上述100M内存块,即分配100M内存块用于节点(5、6、7)的运算,不再为节点(5、6、7)的运算重新分配50M的内存块。此时,可将已分配内队列中,100M内存块所对应的节点集合更新为(1、2、5、6、7),如图4所示。其中,在图4中,左黑斜线代表50M内存块与100M内存块实际为一块内存块。
在本申请实施例中,如图5,可按照顺序,判断20M内存块所对应的节点集合(3、4、5)与已分配集合中100M内存块所对应的节点集合(1、2、5、6、7、8)是否存在交集,可以看出,两者存在交集,此时可分配该20M的内存块用于神经网络中节点(3、4、5)的运算,且可将该已分配20M内存块的信息存储于已分配集合中。
同理,对于图5中的下一20M内存块,可首先判断该20M内存块的节点集合(7、8)与已分配集合中100M内存块的节点集合(1、2、5、6、7、8)是否存在交集,可以发现,两者存在交集。然后判断该20M内存块的节点集合(7、8)与已分配集合中20M内存块所对应的节点集合(3、4、5)是否存在交集,可以看出,两者不存在交集,此时,可分配已分配集合中的20M内存块用于神经网络中节点7和节点8的运算,不再为神经网络中的节点7和节点8分配新的内存块,并将已分配集合中20M内存块,所对应的节点集合更新为(3、4、5、7、8)。其中,在图5中,黑横线代表两个20M内存块实际为一块内存块。
而对于10M内存块的节点集合(2,3),可以发现其与已分配集合中的100M内存块的节点集合与20M内存块的节点集合均存在交集,因此,分配该10M内存块用于节点2和节点3的运算,且将10M内存块的信息加入到已分配集合中,最后形成的已分配集合可参见图6所示。
通过以上分析,可以看出,采用本申请实施例的方法,针对图1所示的神经网络,在运行过程中,一共需占用100M+20M+10M=130M的内存。相对于上述提供的,按照神经网络占用内存块的先后顺序,进行内存优先,图1所示的神经网络需占用150M的内存。可以看出,采用本申请的方式,可减少整个神经网络的内存占用。
在本申请实施例中,当采用深度学习算法,建立神经网络时,图2所示的神经网络的内存分配方法,可具体采用以下方式实现:
如图7所示,服务器或终端设备侧中可包括深度学习算法、深度学习框架、计算资源以及内存资源等。其中,深度学习算法可通过深度学习框架,调用计算资源以及内存资源。
在本申请实施例中,可在深度学习框架中新增MemModel(记忆模型)模块,MemModel模块的功能主要有两个:1)在预分析阶段,在深度学习框架进行内存操作(内存申请和使用)的时候,获取内存使用信息,记录在网络运行阶段内存使用的大小等信息。2)在产品实际使用阶段,加载内存使用信息,并通过MemMdel模块进行内存优化。
在本申请实施例中,可利用MemModel类结构来实现MemModel模块的具体功能,所述MemModel类结构中可记录有网络运行阶段所使用内存的大小等信息。
在本申请实施例中,图2所示的神经网络的内存分配方法可利用程序代码实现,程序代码可包含在机器学习、深度学习平台等软件中,并部署在服务器硬件或终端设备硬件上。
在本申请实施例中,在图7所示的架构下,实现图2所示的神经网络的内存分配方法,可具体包括内存采集阶段和内存分配阶段。
1)内存采集阶段:在实验阶段,预分析神经网络的内存使用情况,进行内存信息的采集。最后根据采集到的内存信息,生成内存模型,且导出所述内存模型。
具体的,上述内存采集阶段的流程,可参见图8所示:
步骤S81:输入神经网络模型,进行预分析。
步骤S82:使用低侵入式的MemModel模块进行内存块生命周期采集。
步骤S83:根据内存块大小和内存块的生命周期进行内存压缩分析。
步骤S84:生成内存模型并导出。
在本申请实施例中,内存模型中可包括内存块ID、内存块大小以及内存块的生命周期等信息。
比如,如图9所示,神经网络中包括3个节点,分别为L1、L2和L3。其中,L1节点的输入参数为input、输出参数为O1,L1节点内部使用参数为P1;L2节点的输入参数为O1,输出参数为O2,L2节点的内部使用参数P2、P21、P22;L3节点的输入参数为O2,输出参数为output,L3节点的内部使用参数P3。
在本申请实施例中,在上述预分析阶段,可先执行L1节点,在执行L1节点的过程中,记录下输入参数input、内部参数P1以及输出参数O1所占用内存块的信息,并设置上述L1节点所占用内存块的生命周期。比如,在执行L1节点的过程中,输入参数input占用内存块A中,内部参数P1占用内存块B中,输出参数O1占用内存块C中,那么可设置内存块A的生命周期为(L1),内存块B的生命周期为(L1),内存块C的生命周期为(L1)。执行L2节点,在执行L2节点的过程中,可记录L2节点的输入参数O1、输出参数O2以及中间参数P2、P21、P22所占用内存块的信息,并设置上述L2节点所占用内存块的生命周期。比如,在执行L2节点的过程中,输入参数O2占用内存块C,那么可设置内存块C的生命周期为(L1、L2),中间参数P2、P21以及P22占用内存块B,那么,可设置内存块B的生命周期为(L1、L2),输出参数O2占用内存块D,那么可设置内存块D的生命周期为(L2)。执行L3节点,在执行L3节点的过程中,记录下输入参数O2、中间参数P3以及输出参数output所占用内存块的信息,并设置上述L3所占用内存块的生命周期,比如,L3的输入参数O2占用内存块D,那么可设置内存块D的生命周期为(L1、L2),L3的中间参数P3占用内存块E,那么可设置内存块E的生命周期为(L3),L3的输出参数output占用内存块F,那么可设置内存块F的生命周期为(L3)。最后根据所获取的所有内存块的信息,生成并导出内存模块。仍沿用上述图9所示的示例,最后生成的内存模块中可包括如下信息:内存块A的标识信息,内存块A的大小信息,内存块A的生命周期(L1),内存块B的标识信息,内存块B的大小信息,内存块B的生命周期(L1、L2),内存块C的标识信息,内存块C的大小信息,内存块C的生命周期(L1,L2),内存块D的标识信息,内存块D的大小信息,内存储D的生命周期(L1、L2),内存块E的标识信息,内存块E的大小信息,以及内存块E的生命周期(L3),内存块F的标识信息,内存块F的大小信息以及内存块F的生命周期(L3)。
2)内存分配阶段:在本申请实施例中,在内存模型的执行过程中,可基于全局的内存优化方案进行优化,获取所有内存块后,按照内存块的大小和内存生命周期进行全局统筹分配,优化效果临近理论压缩比。
在本申请实施例中,如图10所示,内存分配阶段的执行过程,可为:
步骤S1001:将神经网络内存模型导入到终端设备中,获取内存块信息。
步骤S1002:将内存块信息按照大小顺序进行排序,假设共有N个内存块信息,内存块信息索引为i=0,需要使用的内存块索引为j=0。
步骤S1003:按照内存块信息i记录的内存块大小分配内存块j,使用内存块信息i的生命周期标记需要使用的内存块j的生命周期。
步骤S1004-S1006:遍历第一队列中全部的已申请的内存块,判断该第j内存块是否与第一队列中已申请的内存块的生命周期有重叠。如果第j内存块与已申请的所有的内存块的生命周期均有重叠,则依次执行步骤S1007、S1009、S1010,重新申请一个需要使用的内存块,并将第i信息中包括的生命周期标记第j内存块的生命周期。如果第j内存块与已申请的第k内存块的生命周期不重叠则,则执行步骤S1008,复用已申请的第k内存块,并用第i信息中包括的生命周期更新第k内存块的生命周期。i、j、k为大于1,小于N的整数。
比如,在本申请的一示例中,整个神经网络在运行过程中,需占用三个内存块,分别为100M大小的内存块、80M大小的内存块以及50M大小的内存块。且设定上述100M内存块供节点3至节点6使用,80M内存块供节点5至节点8使用,50M内存块供节点1和节点2使用。那么,可标识上述100M内存块的生命周期为(3、4、5、6),80M内存块的生命周期为(5、6、7、8),50M内存块的生命周期为(1、2)。可首先为100M内存块,实际分配一100M内存块,而80M内存块的生命周期与100M内存块的生命周期有重叠,该80M内存块不可复用上述100M内存块,因此为80M内存块重新分配内存,而50M内存块的生命周期与上述100M内存块的生命周期不存在重叠,因此分配该50M内存块复用上述100M内存块。
在本申请实施例中,按照内存大小和内存生命周期进行全局统筹分配,优化效果临近理论压缩比。
在本申请实施例中,当图7所示的网络架构,应用于开源的卷积神经网络框架(convolutional architecture for fast feature embedding,caffe)深度学习平台时,如图11所示,深度学习算法中可包括网络模型,所述深度学习框架中可包括NET类、层、Blob、任务管理和内存管理模块(syncmem),其中,在内存管理模块中可设置有MemModel模块,基于blob和内存管理模块的原有逻辑,可实现内存优化。
在本申请实施例中,所述网络模型可具体为神经网络的网络模型。所述NET类中可存储所述神经网络所对应的DAG图,比如,如图16所示,提供DAG的一种示例,在图16的示例中,神经网络包括A、B、C、E、F以及G五个节点,节点A的输出参数,作为节点B的输入参数,节点B的输出参数,分别作为节点C和节点F的输入参数,节点C的输出参数,作为节点E的输入参数,节点E和节点F的输出参数,作为节点G的输入参数。层用于存储神经网络所包括节点的信息,所述节点也可称为层。Blob用于存储神经网络的每个节点在运算过程中,所对应的输入参数、输出参数以及中间参数所占用内存块的信息。内存管理模块用于对神经网络所占用内存块的信息进行管理和分配。
在本申请实施例中,为了实现内存使用信息获取,具体的过程可如下:
(1)在神经网络使用内存时,保存内存块使用信息。
在本申请实施例中,可具体在Caffe的网络(Net)类模块初始化时,初始化MemModel模块。具体过程,可参见图12所示的流程:
步骤S121:初始化net类。
步骤S122:在MemModel模块中,保存net的结构。
步骤S123:MemModel模块中保存net的节点信息。
步骤S124:初始化net类结束。
(2)在神经网络的层(layer)使用内存时,记录内存信息。
在本申请实施例中,可具体的Caffe的layer模块中记录内存使用信息,具体过程,可参见图13所示的流程。
步骤S131:Net执行。
步骤S132:Layer是否结束,如果是,执行步骤S133,否则,执行步骤S134。
步骤S133:生成MemModel文件。
在本申请实施例中,MemModel文件中可包括内存块ID、内存块大小以及内存块的生命周期等信息。MemModel文件可与上述图8所示的内存模型所包括的信息相同。
步骤S134:Net中的第一layer使用第一内存块。
步骤S135:判断该第一layer是否首次申请第一内存块,如果是,执行步骤S136,否则,执行步骤S137。
步骤S136:新建一新的内存结构信息,记录内存标识和该内存块的起始生存时间。
步骤S137:更新当前内存块的结束生成时间。
(3)系统正式运行时,加载MemModel,进行内存优化。
在本申请实施例中,可在Caffe的net模块向前(forward)时,加载内存文件,将文件信息更新到MemModel类,并根据MemModel类的信息进行内存优化。在本申请实施例中,具体的过程,可参见图14所示的流程。
步骤S141:网络(net)执行开始。
步骤S142:加载内存文件,更新MemModel类。
步骤S143:内存块排序,根据算法计算是否可复用,按照计算好的内存块申请。
在本申请实施例中,对内存块排序以及内存块复用的具体实现方式,可参见上述图10或图2所记载的方法,在此不再赘述。
步骤S144:根据内存标识信息和Blob申请内存的顺序,绑定Blob和内存标识。
在本申请实施例中,通过上述记载可知,在图11所示的网络架构中,Blob中存储有内存块的不同参数所占用内存块的信息。比如,整个神经网络包括三个节点,分别为节点1、节点2以及节点3。在预分析阶段,节点1占用内存块A,节点2所占用内存块B,节点3占用内存块C,那么在Blob中可存储有节点1与内存块A的对应关系,节点2与内存块B的对应关系,节点3与内存块C的对应关系,而通过上述步骤S143的排序与内存复用,可分配节点2与节点3所对应的内存块B和内存块C,均复用内存块A,那么,可绑定节点1与内存块A的对应关系,节点2与内存块A的对应关系,节点3与内存块A的对应关系,且存储所述对应关系在Blob中。
步骤S145:运行网络,Blob使用内存时,直接使用绑定的内存即可。
采用本申请的方式,可有效的降低caffe等框架的显存使用,比如,在硬件资源不变的条件下,可以运行更加复杂的神经网络,在同种硬件,同种网络的条件下,可以增加运行时的批量尺寸(batchsize)。比如,对于深度学习网络resnet50(50层ResNet网络),采用本申请上述实施例的方案,仅需150M显存,而在现有技术中,需要命名用2G多的显存,具体的,可参见图15所示。
与上述构思相同,如图17所示,本申请提供一种神经网络的内存分配装置1700,设定神经网络在运行时,需占用N个内存块,N为大于等于1的整数,装置包括:
确定单元1701,用于确定N个内存块的信息,N个内存块的信息包括N个内存块的大小和N个内存块中每个内存块一一对应的节点集合,每个内存块用于进行神经网络中与每个内存块一一对应的节点集合的运算;
排序单元1702,用于根据N个内存块的大小,对N个内存块进行由大到小排序,获得N个内存块的排序序列;
第一分配单元1703,用于分配第一内存块给神经网络,用于进行神经网络中第一节点集合的运算,其中,第一内存块为N个内存块中大小最大的内存块;
判断单元1704,用于判断第n内存块是否可复用已分配集合中的内存块,已分配集合中包括已经分配给神经网络的内存块;
第二分配单元1705,用于在第n内存块可复用已分配集合中的内存块时,将可复用的内存块分配给神经网络,用于进行神经网络中第n节点集合的运算,并更新已分配集合,其中,n为大于或等于2,小于或等于N的正整数;根据排序序列,从n=2到n=N依次执行上述判断,若判断为是,则更新已分配集合。
可选的,神经网络的内存分配装置1700还可包括:第三分配单元1706,用于在第n内存块不可复用已分配集合中的内存块时,分配第n内存块给神经网络,用于进行神经网络中第n节点集合的运算。
在本申请的一示例中,判断单元1704,可具体用于:判断第n节点集合与第x节点集合之间的交集是否为0,若为0,则判断第n内存块可复用第x节点集合对应的第x内存块,其中,已分配集合包括第x内存块,第x内存块用于进行神经网络中第x节点集合的运算,x为小于n的正整数。
在本申请的一示例中,第二分配单元1705在更新已分配集合时,具体用于:
根据第n节点集合,更新可复用的内存块所对应的节点集合。
在本申请的一示例中,确定单元1701,可具体用于:运行神经网络;记录神经网络中每个节点的输入参数所占用内存块的信息和每个节点的输出参数所占用内存块的信息,以及每个节点的中间参数所占用内存块的信息;根据神经网络中每个节点的输入参数所占用内存块的信息、输出参数所占用内存块的信息以及中间参数所占用内存块的信息,确定N个内存块的信息。
在本申请实施例中,关于上述神经网络的内存分配装置1700的具体实现过程,可参见上述图2至图16方法实施例的介绍,在此不再赘述。
与上构思相同,如图18所示,本申请实施例还提供一种神经网络的内存分配装置1800的结构,神经网络的内存分配装置1800可具体为终端设备或服务器。
可选的,神经网络的内存分配装置1800可以具体为服务器中的中控模块,或者其功能由服务器中的中控模块实现;进一步可选的,神经网络的内存分配装置1800可以具体为终端设备中的中控模块,或者其功能由终端设备中的中控模块实现。如图18所示,神经网络的内存分配装置1800中可以包括通信接口1801、处理器1802。神经网络的内存分配装置1800中还可以包括存储器1803。存储器1803可以设置于神经网络的内存分配装置1800的内部,还可以设置于神经网络的内存分配装置1800的外部。上述图17中所示的确定单元1701、排序单元1702、第一分配单元1703、判断单元1704以及第二分配单元的功能可由处理器1802实现。
本申请实施例中处理器1802可以是通用处理器、数字信号处理器、专用集成电路、现场可编程门阵列或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,可以实现或者执行本申请实施例中的公开的图2至图16所示的神经网络内存分配的方法。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件单元组合执行完成。处理器1802用于实现上述方法所执行的程序代码可以存储在存储器1803中。存储器1803和处理器1802耦合。处理器1802可能和存储器1803协同操作。存储器1803可以是非易失性存储器,比如硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD)等,还可以是易失性存储器(volatile memory),例如随机存取存储器(random-accessmemory,RAM)。存储器1803是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
本申请实施例中不限定上述通信接口1801、处理器1802以及存储器1803之间的具体连接介质。本申请实施例在图18中以存储器1803、处理器1802以及通信接口1801之间通过总线连接,总线在图18中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图18中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
基于以上实施例,本申请实施例还提供了一种计算机存储介质,该存储介质中存储软件程序,该软件程序在被一个或多个处理器读取并执行时可实现上述任意一个或多个实施例提供的方法。计算机存储介质可以包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
基于以上实施例,本申请提供一种计算机程序,计算机程序包括计算机指令,当计算机指令被处理器执行时,使得处理器执行上述任意一个或多个实施例提供的方法。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种神经网络的内存分配方法,其特征在于,所述神经网络在运行时,需占用N个内存块,所述N为大于等于1的整数,所述方法包括:
确定所述N个内存块的信息,所述N个内存块的信息包括所述N个内存块的大小和所述N个内存块中每个内存块一一对应的节点集合,所述每个内存块用于进行所述神经网络中与所述每个内存块一一对应的节点集合的运算;
根据所述N个内存块的大小,对所述N个内存块进行由大到小排序,获得所述N个内存块的排序序列;
分配第一内存块给所述神经网络,用于进行所述神经网络中第一节点集合的运算,其中,所述第一内存块为所述N个内存块中大小最大的内存块;
判断第n内存块是否可复用已分配集合中的内存块,所述已分配集合中包括已经分配给所述神经网络的内存块,如果所述第n内存块可复用所述已分配集合中的内存块,则将所述可复用的内存块分配给所述神经网络,用于进行所述神经网络中第n节点集合的运算,并更新所述已分配集合,其中,所述n为大于或等于2,小于或等于N的正整数;
根据所述排序序列,从n=2到n=N依次执行上述判断,若判断为是,则更新所述已分配集合;
其中,所述判断第n内存块是否可复用已分配集合中的内存块,包括:
判断所述第n节点集合与第x节点集合之间的交集是否为0,若为0,则判断所述第n内存块可复用所述第x节点集合对应的第x内存块,其中,所述已分配集合包括所述第x内存块,所述第x内存块用于进行所述神经网络中所述第x节点集合的运算,x为小于n的正整数。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
如果所述第n内存块不可复用所述已分配集合中的内存块,则分配所述第n内存块给所述神经网络,用于进行所述神经网络中所述第n节点集合的运算。
3.如权利要求1或2项所述的方法,其特征在于,所述更新所述已分配集合,包括:
根据所述第n节点集合,更新所述可复用的内存块所对应的节点集合。
4.如权利要求1至3任一项所述的方法,其特征在于,所述确定所述N个内存块的信息,包括:
运行所述神经网络;
记录所述神经网络中每个节点的输入参数所占用内存块的信息和所述每个节点的输出参数所占用内存块的信息,以及所述每个节点的中间参数所占用内存块的信息;
根据所述神经网络中每个节点的输入参数所占用内存块的信息、输出参数所占用内存块的信息以及中间参数所占用内存块的信息,确定所述N个内存块的信息。
5.一种神经网络的内存分配装置,其特征在于,所述神经网络在运行时,需占用N个内存块,所述N为大于等于1的整数,所述装置包括:
确定单元,用于确定所述N个内存块的信息,所述N个内存块的信息包括所述N个内存块的大小和所述N个内存块中每个内存块一一对应的节点集合,所述每个内存块用于进行所述神经网络中与所述每个内存块一一对应的节点集合的运算;
排序单元,用于根据所述N个内存块的大小,对所述N个内存块进行由大到小排序,获得所述N个内存块的排序序列;
第一分配单元,用于分配第一内存块给所述神经网络,用于进行所述神经网络中第一节点集合的运算,其中,所述第一内存块为所述N个内存块中大小最大的内存块;
判断单元,用于判断第n内存块是否可复用已分配集合中的内存块,所述已分配集合中包括已经分配给所述神经网络的内存块;
第二分配单元,用于在所述第n内存块可复用所述已分配集合中的内存块时,将所述可复用的内存块分配给所述神经网络,用于进行所述神经网络中第n节点集合的运算,并更新所述已分配集合,其中,所述n为大于或等于2,小于或等于N的正整数;根据所述排序序列,从n=2到n=N依次执行上述判断,若判断为是,则更新所述已分配集合;
其中,所述判断单元,具体用于:
判断所述第n节点集合与第x节点集合之间的交集是否为0,若为0,则判断所述第n内存块可复用所述第x节点集合对应的第x内存块,其中,所述已分配集合包括所述第x内存块,所述第x内存块用于进行所述神经网络中所述第x节点集合的运算,x为小于n的正整数。
6.如权利要求5所述的装置,其特征在于,所述装置还包括:
第三分配单元,用于在所述第n内存块不可复用所述已分配集合中的内存块时,分配所述第n内存块给所述神经网络,用于进行所述神经网络中所述第n节点集合的运算。
7.如权利要求5或6所述的装置,其特征在于,所述第二分配单元在更新所述已分配集合时,具体用于:
根据所述第n节点集合,更新所述可复用的内存块所对应的节点集合。
8.如权利要求5至7任一项所述的装置,其特征在于,所述确定单元,具体用于:
运行所述神经网络;
记录所述神经网络中每个节点的输入参数所占用内存块的信息和所述每个节点的输出参数所占用内存块的信息,以及所述每个节点的中间参数所占用内存块的信息;
根据所述神经网络中每个节点的输入参数所占用内存块的信息、输出参数所占用内存块的信息以及中间参数所占用内存块的信息,确定所述N个内存块的信息。
9.一种神经网络的内存分配装置,其特征在于,包括处理器和存储器;
所述存储器用于存储计算机执行指令;
所述处理器用于执行所述存储器所存储的计算机执行指令,以使信息处理装置执行如权利要求1至4任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如权利要求1至4任一项所述的方法。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810607693.9A CN110597616B (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
CN202210865740.6A CN115220918A (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
EP19818511.8A EP3786795A4 (en) | 2018-06-13 | 2019-04-11 | MEMORY ALLOCATION PROCESS AND APPARATUS FOR NEURONAL NETWORK |
PCT/CN2019/082332 WO2019237811A1 (zh) | 2018-06-13 | 2019-04-11 | 一种神经网络的内存分配方法及装置 |
US17/112,374 US20210089355A1 (en) | 2018-06-13 | 2020-12-04 | Memory Allocation Method and Apparatus for Neural Network |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810607693.9A CN110597616B (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210865740.6A Division CN115220918A (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597616A CN110597616A (zh) | 2019-12-20 |
CN110597616B true CN110597616B (zh) | 2022-07-29 |
Family
ID=68841921
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810607693.9A Active CN110597616B (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
CN202210865740.6A Pending CN115220918A (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210865740.6A Pending CN115220918A (zh) | 2018-06-13 | 2018-06-13 | 一种神经网络的内存分配方法及装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20210089355A1 (zh) |
EP (1) | EP3786795A4 (zh) |
CN (2) | CN110597616B (zh) |
WO (1) | WO2019237811A1 (zh) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109359732B (zh) * | 2018-09-30 | 2020-06-09 | 阿里巴巴集团控股有限公司 | 一种芯片及基于其的数据处理方法 |
US11537436B2 (en) * | 2019-10-02 | 2022-12-27 | Qualcomm Incorporated | Method of configuring a memory block allocation of a machine learning network |
CN112783640B (zh) * | 2019-11-11 | 2023-04-04 | 上海肇观电子科技有限公司 | 预先分配内存的方法与设备、电路、电子设备及介质 |
US20210142154A1 (en) * | 2019-11-11 | 2021-05-13 | NextVPU (Shanghai) Co., Ltd. | Memory pre-allocation for forward calculation in a neural network |
CN111666150B (zh) * | 2020-05-09 | 2022-01-11 | 深圳云天励飞技术股份有限公司 | 存储空间的分配方法、装置、终端及计算机可读存储介质 |
WO2021232183A1 (zh) * | 2020-05-18 | 2021-11-25 | 华为技术有限公司 | 一种内存排布优化方法以及装置 |
CN111562988B (zh) * | 2020-05-19 | 2022-11-25 | 苏州浪潮智能科技有限公司 | 一种神经网络训练计算的迁移方法和装置 |
CN111814971B (zh) * | 2020-06-30 | 2022-08-05 | 杭州国芯科技股份有限公司 | 一种神经网络的内存分配方法 |
CN111708641B (zh) * | 2020-07-14 | 2024-03-19 | 腾讯科技(深圳)有限公司 | 一种内存管理方法、装置、设备及计算机可读存储介质 |
CN111984400B (zh) * | 2020-07-17 | 2024-04-02 | 深圳云天励飞技术有限公司 | 神经网络的内存分配方法及装置 |
CN112099943B (zh) * | 2020-08-13 | 2024-05-03 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN114327844A (zh) * | 2020-09-29 | 2022-04-12 | 华为技术有限公司 | 内存分配方法、相关设备及计算机可读存储介质 |
CN112306675B (zh) * | 2020-10-12 | 2024-06-04 | 网络通信与安全紫金山实验室 | 数据处理方法、相关设备以及计算机可读存储介质 |
CN112256440B (zh) * | 2020-12-23 | 2021-03-09 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存管理方法及装置 |
CN112256441B (zh) * | 2020-12-23 | 2021-05-04 | 上海齐感电子信息科技有限公司 | 神经网络推理的内存分配方法及装置 |
CN112965663A (zh) * | 2021-03-05 | 2021-06-15 | 上海寒武纪信息科技有限公司 | 对数据块的存储空间进行复用的方法和相关产品 |
US20240160891A1 (en) * | 2021-03-26 | 2024-05-16 | Allwinner Technology Co., Ltd. | Memory allocation method for ai processor, computer apparatus, and computer-readable storage medium |
CN112766467B (zh) * | 2021-04-06 | 2021-08-20 | 深圳市一心视觉科技有限公司 | 基于卷积神经网络模型的图像识别方法 |
US11954467B2 (en) * | 2021-08-05 | 2024-04-09 | Aarish Technologies | Convolutional neural network compiler for programmable functional array (PFA) processors |
CN113791910A (zh) * | 2021-09-22 | 2021-12-14 | 维沃移动通信有限公司 | 内存分配方法、内存分配装置、电子设备和可读存储介质 |
CN114298294B (zh) * | 2021-12-28 | 2022-11-01 | 杭州雄迈集成电路技术股份有限公司 | 一种基于硬件加速器的神经网络内存优化方法和装置 |
CN115269204B (zh) * | 2022-09-27 | 2022-12-30 | 之江实验室 | 一种用于神经网络编译的内存优化方法及装置 |
CN116700996B (zh) * | 2023-08-04 | 2023-11-07 | 北京燧原智能科技有限公司 | 一种神经网络的内存分配方法、装置、设备及介质 |
CN116893904B (zh) * | 2023-09-11 | 2023-12-26 | 腾讯科技(深圳)有限公司 | 神经网络模型的内存管理方法、装置、设备、介质及产品 |
CN117785759B (zh) * | 2024-02-28 | 2024-04-23 | 北京壁仞科技开发有限公司 | 数据存储方法、数据读取方法、电子设备和存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07334430A (ja) * | 1994-06-10 | 1995-12-22 | Fujitsu General Ltd | メモリ使用範囲自動検出方法およびメモリ使用範囲自動検出装置 |
CN105389211A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种适用于numa架构内多节点间访存延时平衡的内存分配方法及延时感知-内存分配装置 |
CN106095577A (zh) * | 2016-06-08 | 2016-11-09 | 东北林业大学 | 基于多路处理器的共享内存的优化处理方法及装置 |
CN106648907A (zh) * | 2017-02-24 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种提高内存复用的方法和装置 |
CN106776356A (zh) * | 2016-11-28 | 2017-05-31 | 新疆熙菱信息技术股份有限公司 | 一种实现内存高速交互的系统及方法 |
CN106980541A (zh) * | 2017-03-10 | 2017-07-25 | 浙江大学 | 一种大页内存压缩回收系统及方法 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0918281A1 (en) * | 1997-03-29 | 1999-05-26 | IMEC vzw | Method and apparatus for size optimisation of storage units |
US6757802B2 (en) * | 2001-04-03 | 2004-06-29 | P-Cube Ltd. | Method for memory heap and buddy system management for service aware networks |
US9329896B2 (en) * | 2014-06-13 | 2016-05-03 | Vmware, Inc. | Data reuse tracking and memory allocation management |
CN106445680B (zh) * | 2016-08-31 | 2020-01-14 | 杭州聚玻科技有限公司 | 基于综合效用的计算单元迁移方法 |
US11907760B2 (en) * | 2016-09-23 | 2024-02-20 | Apple Inc. | Systems and methods of memory allocation for neural networks |
CN106776042A (zh) * | 2016-12-30 | 2017-05-31 | 深圳市证通金信科技有限公司 | 终端的内存分配方法及装置 |
US11514306B1 (en) * | 2018-03-14 | 2022-11-29 | Meta Platforms, Inc. | Static memory allocation in neural networks |
FR3109833B1 (fr) * | 2020-04-30 | 2022-05-13 | St Microelectronics Rousset | Procédé d’allocation de données intermédiaires d’un réseau de neurones artificiel |
-
2018
- 2018-06-13 CN CN201810607693.9A patent/CN110597616B/zh active Active
- 2018-06-13 CN CN202210865740.6A patent/CN115220918A/zh active Pending
-
2019
- 2019-04-11 WO PCT/CN2019/082332 patent/WO2019237811A1/zh unknown
- 2019-04-11 EP EP19818511.8A patent/EP3786795A4/en active Pending
-
2020
- 2020-12-04 US US17/112,374 patent/US20210089355A1/en active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07334430A (ja) * | 1994-06-10 | 1995-12-22 | Fujitsu General Ltd | メモリ使用範囲自動検出方法およびメモリ使用範囲自動検出装置 |
CN105389211A (zh) * | 2015-10-22 | 2016-03-09 | 北京航空航天大学 | 一种适用于numa架构内多节点间访存延时平衡的内存分配方法及延时感知-内存分配装置 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN106095577A (zh) * | 2016-06-08 | 2016-11-09 | 东北林业大学 | 基于多路处理器的共享内存的优化处理方法及装置 |
CN106776356A (zh) * | 2016-11-28 | 2017-05-31 | 新疆熙菱信息技术股份有限公司 | 一种实现内存高速交互的系统及方法 |
CN106648907A (zh) * | 2017-02-24 | 2017-05-10 | 郑州云海信息技术有限公司 | 一种提高内存复用的方法和装置 |
CN106980541A (zh) * | 2017-03-10 | 2017-07-25 | 浙江大学 | 一种大页内存压缩回收系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115220918A (zh) | 2022-10-21 |
EP3786795A1 (en) | 2021-03-03 |
EP3786795A4 (en) | 2021-07-14 |
CN110597616A (zh) | 2019-12-20 |
WO2019237811A1 (zh) | 2019-12-19 |
US20210089355A1 (en) | 2021-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597616B (zh) | 一种神经网络的内存分配方法及装置 | |
US11074170B2 (en) | Computer memory management with persistent backup copies | |
CN107924328B (zh) | 选择虚拟机进行迁移的技术 | |
CN108153594B (zh) | 一种人工智能云平台的资源碎片整理方法及电子设备 | |
CN110531927B (zh) | 一种基于块分级的垃圾回收方法及非易失性的存储设备 | |
CN110442480B (zh) | 一种镜像数据清理方法、装置及系统 | |
CN112465146A (zh) | 一种量子与经典混合云平台以及任务执行方法 | |
CN112148468A (zh) | 一种资源调度方法、装置、电子设备及存储介质 | |
CN112559165A (zh) | 内存管理方法、装置、电子设备及计算机可读存储介质 | |
CN109033365B (zh) | 一种数据处理方法及相关设备 | |
EP3367310A1 (en) | Method and apparatus for parallelizing layers of deep neural networks onto parallel computing systems | |
CN112015765A (zh) | 基于缓存价值的Spark缓存淘汰方法及系统 | |
CN108108242B (zh) | 基于大数据的存储层智能分发控制方法 | |
CN112256441B (zh) | 神经网络推理的内存分配方法及装置 | |
CN104239520B (zh) | 一种基于历史信息的hdfs数据块放置策略 | |
CN113886092A (zh) | 一种计算图执行方法、装置及相关设备 | |
CN116483546B (zh) | 分布式训练任务调度方法、装置、设备及存储介质 | |
CN113407343A (zh) | 一种基于资源分配的业务处理方法、装置及设备 | |
CN110958138B (zh) | 一种容器扩容方法及装置 | |
CN112395045A (zh) | 虚拟机回收及其资源调整方法 | |
CN112580816A (zh) | 机器学习训练资源管理 | |
CN107291439B (zh) | 一种目标增量数据构建方法及装置 | |
EP3367309A1 (en) | Method and apparatus to distribute memory requirements of deep neural networks | |
CN112685334A (zh) | 一种分块缓存数据的方法、装置及存储介质 | |
KR101841847B1 (ko) | 가상 디스크 프로비저닝 관리 방법 및 장치 |
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 |