CN115185692A - 支持动态重计算的内存分配和释放决策系统及其方法 - Google Patents
支持动态重计算的内存分配和释放决策系统及其方法 Download PDFInfo
- Publication number
- CN115185692A CN115185692A CN202210842115.XA CN202210842115A CN115185692A CN 115185692 A CN115185692 A CN 115185692A CN 202210842115 A CN202210842115 A CN 202210842115A CN 115185692 A CN115185692 A CN 115185692A
- Authority
- CN
- China
- Prior art keywords
- tensor
- memory
- continuous
- sub
- tensors
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 626
- 238000000034 method Methods 0.000 title claims abstract description 68
- 238000004364 calculation method Methods 0.000 claims abstract description 108
- 238000011156 evaluation Methods 0.000 claims abstract description 43
- 238000012544 monitoring process Methods 0.000 claims abstract description 35
- 230000002441 reversible effect Effects 0.000 claims description 70
- 238000012545 processing Methods 0.000 claims description 39
- 238000012163 sequencing technique Methods 0.000 claims description 3
- QIVBCDIJIAJPQS-SECBINFHSA-N D-tryptophane Chemical compound C1=CC=C2C(C[C@@H](N)C(O)=O)=CNC2=C1 QIVBCDIJIAJPQS-SECBINFHSA-N 0.000 description 21
- 230000008569 process Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 12
- 230000002829 reductive effect Effects 0.000 description 7
- 238000012549 training Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 238000012937 correction Methods 0.000 description 4
- 230000002427 irreversible effect Effects 0.000 description 4
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000000670 limiting effect Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 2
- 238000000691 measurement method Methods 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 238000013459 approach Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000005215 recombination Methods 0.000 description 1
- 230000006798 recombination Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24564—Applying rules; Deductive queries
- G06F16/24566—Recursive queries
-
- 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/5022—Mechanisms to release resources
-
- 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/08—Learning methods
- G06N3/084—Backpropagation, e.g. using gradient descent
-
- 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/5011—Pool
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Databases & Information Systems (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开涉及一种支持动态重计算的内存分配和释放决策系统及其方法。所述系统包括:内存池初始化组件申请一段连续内存空间作为内存池,并划分为了至少两个子内存池;内存空间监测分配组件基于请求轮询所有子内存池,将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点;连续张量获取组件在确定没有大于所述当前请求的所请求尺寸的连续内存空间时,通过尺取法顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列;重计算代价评估组件计算连续张量子序列的总重计算代价;内存释放组件对所有连续张量子序列的总重计算代价排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放。
Description
技术领域
本公开涉及一种数据处理技术。更具体地说,本公开涉及一种支持动态重计算的内存分配和释放决策系统及其方法。
背景技术
在深度学习领域,模型规模和复杂度的增加对计算存储资源尤其是GPU显存(或内存)的大小提出了更高的需求。事实上,在模型训练的第一阶段——正向计算中,有大量中间变量被保存。这些变量中的很大一部分在生成后不会在短时间内被用到,而是进入反向传播阶段才被使用。动态重计算(DTR,Dynamic Tensor Recomputation)便是根据这一现象,使模型在训练时能自动释放显存池内的变量,在反向传播时重新计算这些变量的值,以时间换空间的方式减少显存占用,达到在有限的显存上训练大模型的目的。
动态重计算的核心思想是当显存占用超出设定的阈值后,不断从显存池中寻找计算成本最小的张量(tensor)进行释放(或假删除),直到显存重新低于阈值。这一计算成本与张量的计算开销成正比。在实践中,人们更倾向于重新计算ReLU,而不是Conv2d。
重计算的代价或开销不仅仅是待释放的张量本身的计算开销,而是递归地将不在显存内的父代张量和子代张量的计算开销也计算在内。这样做的原因是在重计算一个当前张量时,如果它的父代张量也不在显存内,那是要先把父代张量计算出来,再基于父代张量计算出当前张量。这种将不在显存内的父代张量和子代张量的计算开销纳入当前张量的重计算开销之内,这就会抑制这样的连续重计算,导致需要反复进行显存的释放过程才可能满足比较大的内存空间申请需求。
例如,在当前需要腾出空间来容纳一个100M的张量,一般如果释放一个60M的张量所占据的空间并再释放一个40M的张量所占据的空间就可以放置该100M的张量了。但是如果按照现有的释放方式下,很可能出现被释放的60M的张量与40M的张量并不是连续放置的,也就是60M的张量与40M的张量所占据的空间在内存池中并不连续,则即使采用现有技术释放了60M的张量与40M的张量所所占据的空间,依然没有连续的空间来放置该100M的内存空间,因此就需要再次进行释放。很显然这必然会增加网络训练的时间。
因此,人们需要一种能够支持动态重计算的内存分配和释放决策系统及其方法,能够无需过度重复地进行释放操作以满足动态重计算的内存分配额和释放。
发明内容
因此,为了在估算张量的重计算开销时在降低重计算开销的基础上更快地获得可释放的连续内存空间,缩短网络训练的时间,本公开提供了一种支持动态重计算的内存分配和释放决策系统,包括:内存池初始化组件,为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池;内存空间监测分配组件,部署在内存分配器中,基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点;连续张量获取组件,在内存空间监测分配组件针对所有子内存池轮询完一遍之后确定没有任何子内存池存在大于所述当前请求的所请求尺寸的连续内存空间时,按照所述内存池的地址顺序,通过尺取法,顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列;重计算代价评估组件,计算构成每个连续张量子序列的每个当前张量的重计算代价,并进行求和以获得所述连续张量子序列的总重计算代价;以及内存释放组件,对所有连续张量子序列的总重计算代价按照大小进行排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放,从而增加所述内存池的可再分配的内存空间。
根据本公开的支持动态重计算的内存分配和释放决策系统,所述内存空间监测分配组件在只有两个子内存池时,按照当前请求的顺序交替地在两个子内存池中分配所请求的内存空间,其中在第一子内存池的从其起始地址顺序进行内存分配的情况下,第二子内存池从其终止地址倒序进行分配。
根据本公开的支持动态重计算的内存分配和释放决策系统,所述内存空间监测分配组件在两个以上的子内存池存在满足所请求内存空间尺寸的情况下,基于当前请求的顺序序号,以子内存池的数量n为模量,在编号为m的子内存池的中为序号相对于模量n的余数同为1+(m-1)*k的张量顺序分配内存空间,其中k为是与n互质的整数,其中n个子内存池相邻两个子内存池在分配内存空间时,在一个是从起始地址顺序进行分配的情况下,另一个是从终止地址倒序进行分配。
根据本公开的支持动态重计算的内存分配和释放决策系统,其中k为是最接近n/2的数。
根据本公开的支持动态重计算的内存分配和释放决策系统,其中所述内存空间监测分配组件在轮询所有子内存池中的当前子内存池并确认其剩余内存空间小于所述当前请求的所请求尺寸的连续内存空间时,沿着所轮询的子内存池延伸扩展轮询到相邻子内存池,以便在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间不小于所述当前请求的所请求尺寸的连续内存空间时,将所扩展轮询获得的相邻的连接处的连续空间分配给所提出请求的所述计算逻辑节点,并在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间依然小于所述当前请求的所请求尺寸的连续内存空间时,则跳过所述当前子内存池以及其相邻子内存池进行下一子内存池的轮询。
根据本公开的支持动态重计算的内存分配和释放决策系统,其中所述连续张量子序列所包含的张量数量为一个、两个或两个以上的彼此存储空间连续的张量、或者两个或两个以上的彼此存储空间之间存在空闲空间的张量。
根据本公开的支持动态重计算的内存分配和释放决策系统,其中所述重计算代价评估组件针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,其中处于两个张量的之间空闲空间被视为重计算代价为零的张量。
根据本公开的支持动态重计算的内存分配和释放决策系统,其中所述重计算代价评估组件包括:张量使用历史记录单元,记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;张量递归查询单元,从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;以及代价估算单元,用于对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和作为所述每个连续张量子序列的总重计算代价。
根据本公开的支持动态重计算的内存分配和释放决策系统,其中所述重计算代价评估组件包括:张量使用历史记录单元,记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;张量递归查询单元,从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;代价估算单元,用于对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和,并计算所述每个待估算张量的正向计算代价和与所述待估算张量的时间间隔之间的重计算代价时间比值,并对每个连续张量子序列的所有待估算张量的对应的重计算代价时间比值进行求和得到重计算代价时间比值和,以及通过计算所述重计算代价时间比值和与所述每个连续张量子序列的空间大小之间的比值作为所述每个连续张量子序列的总重计算代价。
根据本公开的另一个方面,提供了一种支持动态重计算的内存分配和释放决策方法,包括:通过内存池初始化组件,为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池;基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,通过部署在内存分配器中的内存空间监测分配组件,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点;在内存空间监测分配组件针对所有子内存池轮询完一遍之后确定没有任何子内存池存在大于所述当前请求的所请求尺寸的连续内存空间时,通过连续张量获取组件,按照所述内存池的地址顺序,通过尺取法,顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列;通过重计算代价评估组件计算构成每个连续张量子序列的每个当前张量的重计算代价,并进行求和以获得所述连续张量子序列的总重计算代价;以及通过内存释放组件对所有连续张量子序列的总重计算代价按照大小进行排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放,从而增加所述内存池的可再分配的内存空间。
根据本公开的支持动态重计算的内存分配和释放决策方法,所述内存空间监测分配组件在只有两个子内存池时,按照当前请求的顺序交替地在两个子内存池中分配所请求的内存空间,其中在第一子内存池的从其起始地址顺序进行内存分配的情况下,第二子内存池从其终止地址倒序进行分配。
根据本公开的支持动态重计算的内存分配和释放决策方法,所述内存空间监测分配组件在两个以上的子内存池存在满足所请求内存空间尺寸的情况下,基于当前请求的顺序序号,以子内存池的数量n为模量,在编号为m的子内存池的中为序号相对于模量n的余数同为1+(m-1)*k的张量顺序分配内存空间,其中k为是与n互质的整数,其中n个子内存池相邻两个子内存池在分配内存空间时,在一个是从起始地址顺序进行分配的情况下,另一个是从终止地址倒序进行分配。
根据本公开的支持动态重计算的内存分配和释放决策方法,其中k为是最接近n/2的数。
根据本公开的支持动态重计算的内存分配和释放决策方法,其中所述内存空间监测分配组件在轮询所有子内存池中的当前子内存池并确认其剩余内存空间小于所述当前请求的所请求尺寸的连续内存空间时,沿着所轮询的子内存池延伸扩展轮询到相邻子内存池,以便在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间不小于所述当前请求的所请求尺寸的连续内存空间时,将所扩展轮询获得的相邻的连接处的连续空间分配给所提出请求的所述计算逻辑节点,并在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间依然小于所述当前请求的所请求尺寸的连续内存空间时,则跳过所述当前子内存池以及其相邻子内存池进行下一子内存池的轮询。
根据本公开的支持动态重计算的内存分配和释放决策方法,其中所述连续张量子序列所包含的张量数量为一个、两个或两个以上的彼此存储空间连续的张量、或者两个或两个以上的彼此存储空间之间存在空闲空间的张量。
根据本公开的支持动态重计算的内存分配和释放决策方法,其中所述重计算代价评估组件针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,并将处于两个张量的之间空闲空间被视为重计算代价为零的张量。
根据本公开的支持动态重计算的内存分配和释放决策方法,其中所述重计算代价评估组件进行重计算代价评估包括:通过张量使用历史记录单元记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;通过张量递归查询单元,从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;以及通过代价估算单元,对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和作为所述每个连续张量子序列的总重计算代价。
根据本公开的支持动态重计算的内存分配和释放决策方法,其中所述重计算代价评估组件进行重计算代价评估包括:通过张量使用历史记录单元记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;通过张量递归查询单元从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;以及通过代价估算单元对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和,并计算所述每个待估算张量的正向计算代价和与所述待估算张量的时间间隔之间的重计算代价时间比值,并对每个连续张量子序列的所有待估算张量的对应的重计算代价时间比值进行求和得到重计算代价时间比值和,以及通过计算所述重计算代价时间比值和与所述每个连续张量子序列的空间大小之间的比值作为所述每个连续张量子序列的总重计算代价。
通过采用根据本公开的支持动态重计算的内存分配和释放决策系统及其方法,通过将预先申请预定阈值容量的内存池划分为多个子内存池,使得网络计算过程中连续张量的分配减少连续分布在内存池中,并通过尺取法获得更大的连续空间内的张量进行释放,减少了网络计算过程中连续张量被释放的,导致重计算开销较大的情形,也加快了获得可释放的连续内存空间的时间以及缩短网络训练的时间。并且通过采用本公开对预定大小的连续空间按整体释放的方式,使得内存释放决策更为灵活和全面,并且在实现内存释放目标的同时极大降低了重计算成本。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1所示的是根据本公开的支持动态重计算的内存分配和释放决策系统的第一实施例的示意图。
图2所示的是根据本公开的支持动态重计算的内存分配和释放决策系统的内存分配的应用场景示意图。
图3所示的是采用本公开的支持动态重计算的内存分配和释放决策系统100的场景的一个实例的示意图。
图4所示的是采用本公开的支持动态重计算的内存分配和释放决策系统100的场景的另一个实例的示意图。
图5所示的是采用本公开的支持动态重计算的内存分配和释放决策系统100的场景的另一个实例的示意图。
图6所示的是根据本公开的支持逆向动态重计算的内存释放决策方法的流程示意图。
图7所示的是根据本公开的支持动态重计算的内存分配和释放决策系统的内存分配的另一个应用场景示意图。
具体实施方式
下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,在下文中,两个可能对象之一可以被称为第一张量也可以被称为第二张量。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
图1所示的是根据本公开的支持动态重计算的内存分配和释放决策系统的第一实施例的示意图。如图1所示,根据本公开的支持动态重计算的内存分配和释放决策系统100包括内存分配器110、内存池初始化组件120、内存空间监测分配组件130、连续张量获取组件140、重计算代价评估组件150以及内存释放组件160。
内存池初始化组件120在数据处理网络开始进行处理时或者在基于用户的启动重计算功能时,为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池。如图1所示,其上部的虚线框OP序列为逻辑计算节点构成的数据处理网络,其下部对应的实现框OP序列为该数据处理网络的运行时状态。所申请的一段连续的预定尺寸的内存空间不会超过数据处理网络所运行的GPU显存的大小。
图2所示的是根据本公开的支持动态重计算的内存分配和释放决策系统的内存分配的应用场景示意图。如图2所示内存池初始化组件120在获得数据处理网络的初始信息或在用户启动重计算功能时,针对为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池。其中数据处理网络通过简化的各个逻辑计算节点OP所使用张的张量来替代表示,例如张量A、张量B、张量C以及张量D。尽管这里示出了四个OP的张量,但是在数据处理网络中远比这些多。内存池则被平均地划分成三个组,即子内存池1、子内存池2以及子内存池3。
在应用过程中,内存分配器110的内存空间监测分配组件130基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点。具体而言,如图2所示,内存空间监测分配组件130会按照张量所属逻辑计算节点的序列,为张量A首先分配子内存池1中的内存空间(如果内存池1中具有足够张量A的空闲内存空间),随后为张量B分配子内存池2中的内存空间(如果内存池2中具有足够张量B的空闲内存空间),同样,为张量C分配子内存池3中的内存空间(如果内存池3中具有足够张量C的空闲内存空间),以及为张量D分配子内存池1中的内存空间(如果内存池1中具有足够张量D的空闲内存空间),并置于张量A之后,如此循环进行空间分配。可选择地,如果为张量B分配子内存池2中的内存空间时,内存池2中不具有足够张量B的空闲内存空间,则为其分配子内存池3中的空闲空间,如果依然没有,则继续为其分配子内存池1中的空闲空间。如果内存空间监测分配组件130遍历一遍每个子内存池之后依然没有连续的空间可以分配给为当前张量申请的内存空间的逻辑计算节点,则会触发内存释放进程中的释放对象的查询确定过程。
因此,连续张量获取组件140在内存空间监测分配组件130针对所有子内存池轮询完一遍之后确定没有任何子内存池存在大于所述当前请求的所请求尺寸的连续内存空间时,按照所述内存池的地址顺序,通过尺取法,顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列。具体而言,连续张量获取组件140把内存池中的所有张量按照其在内存池中得地址顺序排列成一个列表,在列表中,其中将每个独立的空闲空间视为一个空闲张量进行排序,空闲张量的计算代价为零,其占用的空间尺寸为其空闲空间尺寸。随后,连续张量获取组件140随后按照尺取法,按照顺序,选取空间尺寸大于第一尺寸K的连续张量子序列。本公开的尺取法通过将尺的两个下标起点和终点初始化为0,随后不断递增终点的值,直到和取尺所覆盖的连续张量所占据的空间的大小大于第一尺寸K。此时,在将取尺的起点值加1,如果加1之后起点和终点之间覆盖的连续张量所占据的空间小于第一尺寸K,则保持起点值不变情况下,再递增终点的值,直到取尺的起点和终点之间所覆盖的连续张量所占据的内存空间大于第一尺寸K为止。需要指出的是,这里的加1都是将起点或终点的地址移动增加到一个张量的末尾地址位,也就是按照张量的排列顺序,移动一个张量所占据的内存空间的地址序列,每次加1所移动的地址序列的间隔彼此之间并不相同,只与张量的大小一致。此后反复重复前述过程,直到遍历整个内存池为止。通过上述尺取法可以得到一系列连续张量子序列。采用本领域常规的方式进行。由于本公开并不对尺取法本申请进行任何改进,因此不在此进行详细描述。
随后,在获得连续的张量子序列之后,重计算代价评估组件150计算构成每个连续张量子序列的每个当前张量的重计算代价,并进行求和以获得所述连续张量子序列的总重计算代价。需要指出的是,在每个张量子序列中,如果存在两个张量之间的空闲空间,则该空闲空间被视为重计算代价为零的张量。每个张量子序列中的每个当前张量的重计算代价可以直接通过其所述的逻辑计算单元的计算代价直接获得。因此,在简单模式下,可以采用每个张量子序列中的每个当前张量的重计算代价进行简单求和进而可以得到该连续张量子序列的总重计算代价。
可选择地,考虑到每个张量不一定都能直接通过其父代张量或子代张量获得,因为其父代张量或子代张量可能已经被释放而不再内存池中,因此需要递归查询获得能够执行重计算而获得当前张量的父代张量或子代张量,因此,距离其最近的未存在内存池中的父代张量和子代张量的重计算成本也需要考虑在内。因此重计算代价评估组件150针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价。在每个张量子序列中的每个当前张量t的可重计算的正向重计算成本由重计算代价评估组件150采用如下公式来计算:
hDTR(t)=c(t)/[m(t)·s(t)]
其中hDTR(t)为当前张量t的正向重计算成本,m(t)为当前张量t所占据的内存池的空间大小,s(t)为当前张量t从上次使用(即最近一次被使用)的时刻到当前时刻之间的时间距离,而c(t)则为
c(t)表示进行重计算时,当前张量t(即所选择进行可进行重计算的张量)以及当前张量t不在显存或内存池中的父代和子代张量t′的正向计算成本之和。其中,e*(t)表示当前张量t不在显存或内存池中的父代和子代张量t′集合,c0(t′)就是该集合e*(t)中每个张量t′的计算成本。e*(t)表示当前张量t不在显存或内存池中的父代和子代张量t′集合中的元素通过重计算代价评估组件150采用递归查询的方式获得,即查询当前张量t的连续不在显存或内存池中的父代和子代张量t′,如果找到距离其最近的父代或子代张量,则停止递归查询。这样在内存池中找到的父代张量t′和当前张量t之间所有在内存池中不存在的父代张量t′以及在内存池中找到的子代张量t′和当前张量t之间所有在内存池中不存在的子代张量t′则都是集合e*(t)中的元素。由于这些在内存池中不存在的父代张量t′的都是当前张量t在正向重计算时需要重新计算的张量。此外,在当前张量t被释放的假设下,其目前为存在内存池的子代张量也可能会被重计算,这些计算成本被视为当前张量t重计算的“沉没成本”,应该计算在当前张量t重计算成本中。因此,尽管hDTR(t)为当前张量t的正向重计算成本,但是c(t)的计算中还包含了当前张量t的子代张量t′的计算成本。因此,重计算代价评估组件150也需要采用递归查询的方式获取当前张量t之间所有在内存池中不存在的子代张量t′并用于估算当前张量t的重计算成本的计算。
通过连续张量子序列的每个当前张量的正向重计算代价hDTR(t)进行求和,得到每个连续张量子序列的总重计算代价。
可选择地,在连续张量子序列中的待估算张量或当前张量能通过逆向重计算获得的情况下,在本公开中,除了要考虑当前张量t的正向重计算成本,还需要考虑当前张量t的逆向重计算成本。还估算其逆向重计算代价,并将所述正向重计算代价和逆向重计算代价中的最小值作为所述待估算张量的当前重计算代价。针对同一当前张量t,其逆向重计算成本和正向重计算成本之间会存在差异。因此,采用两者之间更小的成本,会得到当前张量t重计算更小的成本。因此,重计算代价评估组件150可以直接采用所递归查询获得当前张量t不在显存或内存池中的父代和子代张量t′集合来计算获得逆向计算成本的和作为逆向冲击计算成本,即,
h′DTR(t)=c′(t)/[m(t)·s(t)]
其中h′DTR(t)为当前张量t的逆向重计算成本,m(t)为当前张量t所占据的内存池的空间大小,s(t)为当前张量t从上次使用(即最近一次被使用)的时刻到当前时刻之间的时间距离,而c′(t)则为
c′(t)表示进行重计算时,当前张量t(即所选择进行可进行重计算的张量)以及当前张量t不在显存或内存池中的父代和子代张量t′的逆向计算成本之和。其中,e′*(t)表示当前张量t不在显存或内存池中的父代和子代张量t′集合,c′0(t′)就是该集合e′*(t)中每个张量t′的逆向计算成本。
重计算代价评估组件150在估算当前张量t的逆向重计算代价h′DTR(t)后,并将所述正向重计算代价hDTR(t)和逆向重计算代价h′DTR(t)中的最小值作为所述待估算张量的当前重计算代价。重计算代价评估组件150会将连续张量子序列的每个当前张量的当前重计算代价进行求和得到该连续张量子序列的总重计算代价。
但是,在考虑逆向重计算的情况下,由于存在当前张量t可被逆向重计算或生成当前张量t的逻辑计算节点不可逆(即当前张量t不能作为子代张量逆向计算出与其关联的父代张量)以及当前张量t不可被逆向重计算的情况,需要重新考虑当前张量t的正向重计算的成本代价。为此,重计算代价评估组件150针对当前张量t可被逆向重计算或生成当前张量t的逻辑计算节点不可逆的情况,保持上述当前张量t的正向重计算的成本代价的计算方式。
但是在当前张量t不可被逆向重计算的情况下,则需要考虑在当前张量t如果被释放的情况下,要实现正向重计算获得,则其在内存池中是否存在连续可逆向重计算的父代张量,以便能够实现当前张量t的正向重计算。因此,此时需要考虑其父代张量的逆向重计算的成本代价。此时,当前张量t的正向重计算的实际重计算获得成本将成比例上升。为此,重计算代价评估组件150在已经算出的hDTR(t)上赋予其一个成本系数coeff(t),
coeff(t)=(∑t′∈r(t)p(t′))/c0(t)
其中r(t)表示重计算代价评估组件150在当前张量t不可被逆向重计算的情况下从当前张量t向其父代进行递归查询获得的连续可逆向重计算的父代张量t′的集合,而p(t′)则是该集合中每个父代张量t′的重计算成本代价,如下:
p(t′)=c0(t′)+cuser(t′)
其中c0(t′)是该父代张量t′的正向计算成本,而cuser(t′)则是针对该父代张量t′进行递归查询获得的连续不可被逆向重计算的子代张量t″的正向重计算的成本代价和。通过对集合r(t)中的所有父代张量t′的p(t′)进行求和,并计算和值与c0(t)的比值,获得该调整系数,coeff(t),并最终获得当前张量t在其不可被逆向重计算的情况下的正向重计算成本cfwd(t)如下:
cfwd(t)=coeff(t)*hDTR(t)
可选择地,在本公开中,针对同一当前张量t,其逆向重计算成本在考虑到反向传播中自然存在的逆向计算的情况下,因此某些当前张量t的逆向重计算的代价成本会自然降低。为此,重计算代价评估组件150在递归查询获得当前张量t的父代和子代张量时,所述递归查询过程只需要遇到被反向传播所依赖的张量(如卷积、BN、全连接层的输入张量(input tensor)等)就可以结束。这种进一步限定递归查询结束条件的原因在于,例如,如果数据处理网络中有一个逻辑计算节点(OP f),其输入和输出张量A和B都被反向传播所依赖,由于反向传播的方向和网络本身的方向相反,所以在反向传播中往往是先用到B,再用到A,因此在通常数据处理过程中,有理由假设,当需要用到A时,B因为刚刚被用到所以还没有被踢出显存。因此,这意味着即使张量B看起来是不存在于内存池中的,但是由于其被反向传播所依赖,因此也被认为是实际存在于内存池中的,因此也被递归查询视为遇到存自啊与内存池中的张量。
为此,重计算代价评估组件150尽管看起来采用所递归查询获得当前张量t不在显存或内存池中的父代和子代张量t′集合来计算获得逆向计算成本的和作为逆向冲击计算成本,逆向重计算成本的计算过程中,当前张量t不在显存或内存池中的父代和子代张量t′集合e′*(t)与集合e*(t)并不相同:
h′DTR(t)=c′(t)/[m(t)·s(t)]
其中h′DTR(t)为当前张量t的逆向重计算成本,m(t)为当前张量t所占据的内存池的空间大小,s(t)为当前张量t从上次使用(即最近一次被使用)的时刻到当前时刻之间的时间距离,而c′(t)则为
c′(t)表示进行重计算时,当前张量t(即所选择进行可进行重计算的张量)以及当前张量t不在显存或内存池中的父代和子代张量t′的逆向计算成本之和。其中,c′0(t′)就是该集合e′*(t)中每个张量t′的逆向计算成本,e′*(t)表示当前张量t不在显存或内存池中的父代和子代张量t′集合,其中父代和子代张量t′则是当前张量t与递归查询遇到的被反向传播所依赖的张量之间的不在显存或内存池中的父代和子代张量t′。集合e′*(t)与集合e*(t)两者在被反向传播所依赖的张量刚好是内存池中存在的张量或者递归查询首先遇到的内存池存在张量不是被反向传播所依赖的张量时,两者相同,当时在先遇到的被反向传播所依赖的张量不是首先遇到的内存池存在张量时,两者是不同的。
重计算代价评估组件150通过上述方式针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,以及在所述待估算张量能通过逆向重计算获得的情况下,还估算其逆向重计算代价,并将所述正向重计算代价和逆向重计算代价中的最小值作为所述待估算张量的当前重计算代价。因此,重计算代价评估组件150针对h′DTR(t)和hDTR(t)执行取最小值:
min{cfwd(t),cbwd(t)}
并将其结果作为当前张量t此次重计算代价估算的结果。需要指出的是,这种估算会随时进行。在下一次遍历估算时,如果该当前张量t依然存在与内存池中,则会重新估算,两次估算的结果可能会由于内存出中的现有存在张量情形不同而具有不同的重计算代价成本。
数据处理网络正向计算过程中每一轮寻找最优张量的过程可以通过如下代码执行上述步骤来完成:
可选择的,重计算代价评估组件150也可以通过对连续张量子序列进行整体估算来获得每个连续张量子序列的重计算代价。具体而言,一种方法是,直接计算连续张量子序列中每个当前张量的c/s值,其中c是每个当前张量的当前重计算代价,而如上所述s是当前张量当前时刻距离最近被使用过的时刻之间的时间间隔。在获得每个当前张量的c/s值之后,对其进行求和,得到比值之和。同时,对连续张量子序列所占用的空间进行求和获得连续张量子序列比值和sum(c/s),即获得连续张量子序列所占用的空间尺寸,即sum(m)。最后通过计算连续张量子序列比值和与空间尺寸sum(m)之间的比值,从而获得每个连续张量子序列的总重计算代价。
可选择地,另一方方法是,每个连续张量子序列中的每个当前张量的重计算代价c可以通过如上所述的递归查询方式获得其父代和子代张量的重计算代价作为当前张量的计算代价的一部分。对于每个当前张量递归计算代价,可以参见如上所述,不再赘述。在采用递归查询方式计算出每个当前张量的c之后,通过如前所述的sum(c/s)/sum(m)总重计算代价方式获得连续张量子序列的总重计算代价。
在获得连续张量子序列的总重计算代价之后,内存释放组件160对所有连续张量子序列的总重计算代价按照大小进行排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放,从而增加所述内存池的可再分配的内存空间。
返回参见图1,所述重计算代价评估组件150可以包括:张量使用历史记录单元151、张量递归查询单元152以及代价估算单元153。张量使用历史记录单元151记录张量使用历史并提供每个连续张量子序列中的当前张量作为待估算张量的最近使用时刻距离当前时刻的时间间隔。张量递归查询单元152从内存池中每一个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量。
随后代价估算单元150用于对所述待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述待估算张量的正向计算代价和,对所述待估算张量的逆向计算代价以及所述第一集合的各个张量的逆向计算代价进行求和,以获得所述待估算张量的逆向计算代价和,以及对所述待估算张量所占用空间的大小和所述时间间隔进行求积,由此计算所述正向计算代价和与所述乘积的比值,作为所述待估算张量的正向重计算代价,以及计算所述逆向计算代价和与所述乘积的比值作为所述待估算张量的逆向重计算代价。
在采用本公开的支持动态重计算的内存分配和释放决策系统100的场景,例如一种直线型数据处理op序列:x1->x2->x3->x4->x5中,如果x1为外界输入的张量,因此其逻辑计算节点(op)为空,不可释放。x2->x3,x3->x4,x4->x5的逻辑计算节点可逆。假如x1->x2、x2->x3、x3->x4的逻辑计算节点比较复杂(如卷积),而x4->x5的逻辑计算节点相对简单(如scalar)。
如果要根据不可逆的逻辑计算节点由x5生成x6时,假设由于内存池阈值限制无法为x6申请空间,这时内存释放决策系统100会释放掉最佳张量x4所占据的内存空间,从而为张量x6腾出空间。因为在上述假设条件下,释放掉张量x4,要重计算张量x4,其重计算代价为
cost(x4)=min(cfwd(x4),cbwd(x4))=cbwd(x4)=xc5-->x4/m(x4)/s(m4)
x5->x4的逆向计算代价(xx5->x4)要比释放张量x2或x3之后重计算张量x2或x3的计算代价小,与释放张量x5之后重计算张量x5的计算代价相当。在两者相当的情况下,如果两者间隔时间不同,则比较两者的间隔时间。在s(x4)>s(x5)情况下,则cost(x4)<cost(x5),因此选择张量x4释放。
在上面所述的情况下,面临生成x7时还需要再次释放张量,则张量x2、x3的计算消耗较大不予考虑。因此,会从x5、x6中选择张量释放。如果由于s(x5)>s(x6),在不需要考虑系数coeff的情况下,张量x5会被选择释放。
如果x2->x5的计算逻辑节点都是可逆的,在反向传播时可以由x5通过O(1)空间复杂度逆向重计算出x2->x4,所以希望保留x5,释放x6。为此,就需要计算系数coeff(x5)和coeff(x6):
coeff(x5)=(p(x2)+p(x3)+p(x4))/c0(x5)
=(c0(x2)+c0(x3)+c0(x4))/c0(x5)>>1
而
coeff(x6)=1
因此,这样就可以使得代价估算单元153估算出:
cost(x5)>cost(x6)
由此,内存释放组件160保证DTR策略按照预期释放x6而不是x5。
图3所示的是采用本公开的支持动态重计算的内存分配和释放决策系统100的场景的一个实例的示意图。如图3所示,直线型op序列:x1->...->x11,其如果x1为外界输入的张量,因此其逻辑计算节点(op)为空,不可释放。假设当前显存池中仅剩张量x5,x8,需要从x5和x8中选择一个张量释放以腾出显存。图中虚线表示x2->x3,x3->x4,x4->x5的逻辑计算节点(OP)是可逆的。因此,由于当前张量t的x5的父代张量存在连续可逆的逻辑计算节点,所以需要考虑其正向重计算的系数coeff(x5)和coeff(x8):
为了便于理解,简化该实例条件。假设c0(xi)=c,m(xi)=m,2≤i≤11。
由于在直线序列实例下其使用时间间隔s(x5)>s(x8),因此,在无需考虑系数的情况下(不是属于图3中虚线所表示的情况),cost(x5)<cost(x8),因此会释放张量x5。
但是,在x2->x3,x3->x4,x4->x5的逻辑计算节点(OP)可逆的情况下,即x2、x3、x3、x4可以经过x5逆向计算获得,因此,如果在这种情况下,不考虑增加本公开所采用的系数,将x5释放,这种结果将导致在反向传播时可以以O(1)的空间复杂度重计算x2->x4的优良特性便被丢弃了,这一损失还会随“x2->...->x4”的增长(即这种连续的可逆向计算的父代节点的数量增加)而增加。因此,本公开除了考虑估算张量逆向重计算的代价成本之外,还增加考虑通过加入正向重计算的系数来消除优良特性丢失的情况下。
为此,在图3所示的实例中,如上假设c0(xi)=c,m(xi)=m,2≤i≤11的情况下,coeff(x5)=3;coeff(x8)=1,这样,cost(x5)>cost(x8),因此,内存释放组件160会优先释放张量x8。
图4所示的是采用本公开的支持动态重计算的内存分配和释放决策系统100的场景的另一个实例的示意图。如图4所示所示的数据处理网络的序列场景,其中,假设显存池中当前仅剩张量x5,y1。x2->x3->x4->x5的op可逆的情形。
按照本公开的上述重计算代价估算方式,张量x5,y1正向重计算代价计算如下:
coeff(x5)=(p(x2)+p(x3)+p(x4))/c0(x5)
=(c0(x2)+c0(x3)+c0(x4)+c0(y1)+c0(y2))/c0(x5)
≈5
coeff(y1)=1
如果这个计算序列张量的计算消耗和显存占用相当,则不考虑系数时cost(y1)与cost(x5)大小接近。但是由于x5之前有更多的连续的可逆的逻辑计算节点,因此,相比于张量y1,保留张量x5会更有价值。因为张量y1不可逆计算,可以正向重计算由x4获得,因此,释放张量y1后,可以通过x5->x4->y1重计算张量y1,但释放张量x5后,只能通过x1->x2->...->x5重计算x5,消耗更大,其重计算代价更大。因此,通过递归查询当前张量t的父代张量的连续可逆性,赋予较高的重计算代价系数,从而可以将这种具有连续可逆父代张量的当前张量保留,以防止被释放后需要过高的重计算代价。
图5所示的是采用本公开的支持动态重计算的内存分配和释放决策系统100的场景的另一个实例的示意图。图5所示的实例以可逆的残差网络块(RevNet Block)为基本单元,其中X1->Y1->Y2->Y3是3个首尾相接且可逆的残差块(residual block)。
根据RevNet的设计,张量X1->Y1->Y2->Y3的计算都可逆,因此在正向计算过程中可以将X1,x11,x12,y11,y12,y21,y22,y31,y32释放,只保留Y3,并在反向传播中由Y3及其梯度(grad)依次把前项及其梯度计算出。与RevNet的设计一致,增加了逆向重计算代价cost以及系数的DTR策略同样优先保留Y3这类位于连续可逆计算链末端的张量。由于可逆模块是串联的,X1与Y3的维度相同,分块后的x11,x12,y11,y12,y21,y22,y31,y32维度相同,通道(channel)数是X1,Y3的一半。因此各自的实际占用内存空间如下:
对这些张量的最近访问或使用时间S,彼此之间的时间间隔关系如下:
s(X1)>s(x11)>s(x12)>…>s(y31)=s(y32)>s(Y3)
因此,在初次释放时,所有张量的邻居代价为零(neighbor_cost=0)。假设逻辑节点函数(function F,G)结构相似,其内部的OP可逆性未知(当作不可逆处理),则计算代价或计算消耗之间有如下关系:
cchunk≈cconcat≈cadd<<cop in F,G
在这种情况下,通常期望是:张量Y3的计算代价比小写字母代表的张量以及F,G模块中间变量的计算代价都小。原因在于,只要保留Y3,便能逆向重计算出以上提到的任意一个变量。但是代价小的张量往往最先被释放。因此,如果释放Y3,将导致其前方的张量难以逆向重计算获得。因此,考虑到其存在连续可逆向重计算的父代张量,因此要将其尽可能保留而不是被释放,这也是本公开之所以要施加系统的原因,也就是要将其连续可逆向重计算获得父代张量的计算代价统计在当前张量t的重计算代价中的原因。
如果不加系数,cost(Y3)=cconcat/m(Y3)/s(Y3)就会非常小(因为concat的计算消耗很小)。在这种情况下,图5所示的整个序列张量计算代价使得各个张量之间的被释放的顺序大致是:X1、Y3、y11-y22,最后是F,G内部的中间变量。根据公式(1)
r(Y3)={X1,x12,x11,y12,y11,y22,y21,y32,y31}
p(X1)=c0(X1)
p(x11)=cchunk
p(y32)=cadd
cost(Y3)=coeff(Y3)·cconcat/m(Y3)/s(Y3)
其中t∈r(Y3)∪F∪G
从上述cost(Y3)的计算中可以看出,其分子部分包含了集合r(Y3)的计算代价以及F,G内所有张量的计算代价,因此其重计算大家将会最大,由此导致张量Y3在该张量序列中将最晚被释放,或者说最不可能被先选择为被释放的张量。
可选择地,如图1所示,张量递归查询单元152在递归查询到的所述待估算张量t的当前存在于内存池中的第一个父代张量和第一个子代张量之前,如果递归查询到的所述待估算张量的将被反向传播所使用的一个父代张量或一个子代张量,则所述将被反向传播所使用的一个父代张量或一个子代张量则被确定为第一个父代张量或第一个子代张量。
可选择地,张量递归查询单元152在基于所述张量使用历史记录单元151所记录的信息获知所述待估算张量基于当前内存池所存储的张量不能可逆重计算或者生成所述待估算张量的计算逻辑节点本身可逆的情况下,通过递归查询获得所述待估算张量的连续可逆向计算的父代张量以及所述连续可逆向计算的父代张量的各自的连续不能逆向计算的子代张量的第二张量集合;以及所述代价估算单元153对所述第二张量集合的各个张量的正向计算代价进行求和得到代价修正系数,并利用所述代价修正系数与所述正向重计算代价的乘积结果作为所述待估算张量的正向重计算代价。
可选择地,如图1所示,内存空间监测分配组件130还监测在所述内存池的任意连续可分配内存空间是否小于任意计算逻辑节点向所述内存池申请的内存空间。重计算代价评估组件150还在所述内存池的任意连续可分配内存空间小于任意计算逻辑节点向所述内存池申请的内存空间时,针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,以及在所述待估算张量能通过逆向重计算获得的情况下,还估算其逆向重计算代价,并将所述正向重计算代价和逆向重计算代价中的最小值作为所述待估算张量的当前重计算代价。
图6所示的是根据本公开的支持逆向动态重计算的内存释放决策方法的流程示意图。如图6所示,首先,在步骤S610处,通过内存池初始化组件120为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池。随后在数据处理网络处于运行时状态时,在步骤S640处,基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,通过部署在内存分配器110中的内存空间监测分配组件130,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点。如果在步骤S640处,在内存空间监测分配组件130针对所有子内存池轮询完一遍之后确定没有任何子内存池存在大于所述当前请求的所请求尺寸的连续内存空间时,则在步骤S630处,通过连续张量获取组件140按照所述内存池的地址顺序,通过尺取法,顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列。接着,在步骤S640处,通过重计算代价评估组件150计算构成每个连续张量子序列的每个当前张量的重计算代价,并进行求和以获得所述连续张量子序列的总重计算代价。最后,在步骤S650处,通过内存释放组件160对所有连续张量子序列的总重计算代价按照大小进行排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放,从而增加所述内存池的可再分配的内存空间。
可选择地,所述重计算代价评估步骤S640可按照如上所述的直接简单计算连续张量子序列中的各个张量的计算代价和作为总重计算代价进行,也可以考虑连续张量子序列中的各个张量的正向或逆向重计算代价的和来进行计算,还可以通过考虑每个张量的递归父代和子代张量的各个张量的重计算代价并进行求和后来实现。在如上所述考虑递归父代和子代张量的重计算代价的请下,首先,在任何数据处理过程中,针对每个进入运行时的数据计算逻辑节点,针对其输入、输出以及所产生的中间张量进行记录。这种记录张量使用历史的方式是现有方式,因此不在公开中详细描述。因此,在步骤S641处,通过张量使用历史记录单元151获取待估算张量最近使用时刻距离当前时刻的时间间隔S。接着,在步骤S642处,通过张量递归查询单元152从内存池中每一个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量。也就是从待估算张量开始往前和往后所查询出的未存在于内存池中的连续的父代和子代张量构成的集合。接着基于这些张量集合,在步骤S643处,通过代价估算单元153对所述待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述待估算张量的正向计算代价和,对所述待估算张量的逆向计算代价以及所述第一集合的各个张量的逆向计算代价进行求和,以获得所述待估算张量的逆向计算代价和,以及对所述待估算张量所占用空间的大小和所述时间间隔进行求积,由此计算所述正向计算代价和与所述乘积的比值,作为所述待估算张量的正向重计算代价,以及计算所述逆向计算代价和与所述乘积的比值作为所述待估算张量的逆向重计算代价。
可选择地,在步骤S642处,张量递归查询单元152在递归查询到的所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量之前,如果通过所述张量递归查询单元递归查询到的所述待估算张量的将被反向传播所使用的一个父代张量或一个子代张量,则所述将被反向传播所使用的一个父代张量或一个子代张量则被确定为第一个父代张量或第一个子代张量,并终结所述递归查询。
可选择地,在步骤S642处,在基于所述张量使用历史记录单元所记录的信息获知所述待估算张量基于当前内存池所存储的张量不能可逆重计算或者生成所述待估算张量的计算逻辑节点本身可逆的情况下,张量递归查询单元152递归查询获得所述待估算张量的连续可逆向计算的父代张量以及所述连续可逆向计算的父代张量的各自的连续不能逆向计算的子代张量的第二张量集合。随后在步骤S643处,所述代价估算单元对所述第二张量集合的各个张量的正向计算代价进行求和得到代价修正系数,并利用所述代价修正系数与所述正向重计算代价的乘积结果作为所述待估算张量的正向重计算代价。
可选择地,在步骤S610处,所述内存空间监测分配组件还监测在所述内存池的任意连续可分配内存空间是否小于任意计算逻辑节点向所述内存池申请的内存空间。以及在步骤S640处,在所述内存池的任意连续可分配内存空间小于任意计算逻辑节点向所述内存池申请的内存空间时,所述重计算代价评估组件针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,以及在所述待估算张量能通过逆向重计算获得的情况下,还估算其逆向重计算代价,并将所述正向重计算代价和逆向重计算代价中的最小值作为所述待估算张量的当前重计算代价。
图7所示的是根据本公开的支持动态重计算的内存分配和释放决策系统的内存分配的另一个应用场景示意图。如图7所示内存池初始化组件120在获得数据处理网络的初始信息或在用户启动重计算功能时,针对为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池。其中数据处理网络通过简化的各个逻辑计算节点OP所使用张的张量来替代表示,例如张量A、张量B、张量C、张量D、张量E以及张量F。尽管这里示出了六个OP的张量,但是在数据处理网络中远比这些多。内存池则被平均地划分成五个组,即子内存池1、子内存池2、子内存池3、子内存池4以及子内存池5。在实际使用过程中,通常采用m来表示子内存池的数量。
在应用过程中,内存分配器110的内存空间监测分配组件130基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点。在初始阶段,每个子内存池都具有足够的内存空间,因此通常按照所申请内存空间的张量(或计算逻辑节点)的顺序序号,按照预定顺序在各个子内存池中分配内存空间。为了采用上述方式在释放张量时,时间上顺序上连续的张量被一次性释放,导致后续进行重计算计算时,重计算代价都很高,因此,在初期阶段,尽可能使得连续的张量所在内存空间中彼此地址间隔距离远一点,由此使得在尺取过程中获得连续(这里的连续指的是内存地址空间上的“连续”)张量子序列所包含的张量在运行时间顺序上是不连续的。
为此,在只有两个子内存池时,如图7中的第一示意表格所示,内存空间监测分配组件130按照当前请求的顺序交替地在两个子内存池中分配所请求的内存空间。即,第一子内存池的从其起始地址顺序进行内存分配,张量A、张量C以及张量E从子内存池1的起始位置存储;第二子内存池从其终止地址倒序进行分配,张量B、张量D以及张量F从末位地址倒着申请内存空间。
在两个以上的子内存池存在满足所请求内存空间尺寸的情况下,例如n=5,所述内存空间监测分配组件130基于当前请求的顺序序号,以子内存池的数量n为模量,在编号为m的子内存池的中为序号相对于模量n的余数同为1+(m-1)*k的张量顺序分配内存空间,其中k为是与n互质的整数,其中n个子内存池相邻两个子内存池在分配内存空间时,在一个是从起始地址顺序进行分配的情况下,另一个是从终止地址倒序进行分配。如图7的第二示意表格所示,其表示在k=2时,从m=1-5,张量编号相对模量5的余分别为:1、3、5、7、9,由于有些余数大于5,因此,实际余数分别为:1、3、0、2、4,因此,张量A、B、C、D、E、F子内存池中的存储顺序则为张量A、C、E、B、D、F,其中张量A和F在同一子内存池1中。此外,为了减少相邻两个子内存池之间的连接处出现碎内存块,因此使得相邻的子内存池在分配内存空间时,起始点刚好相反。如图7所示,例如子内存池1从其内存空间的左侧起点开始顺序分配内存空间,而子内存池2从其内存空间的右侧终点开始倒序分配内存空间,这样在子内存池1和2之间的空余空间尽可能大,以便尽可能降低形成碎内存的机会。更重要的是,由于子内存池3从其内存空间的左侧起点开始顺序分配内存空间,因此,在子内存池2和3之间的就会完全不存在碎内存空间。而且,由于张量A与张量B作为在时序上连续的张量,为了避免通过张量子序列方式被同时释放,因此,通过上述分配内存方式在地址空间上被隔离开,因此,其很难同时存在于同一子序列中,从而能够避免被同时释放而导致后续重计算成本增大的情形。
如图7的第三示意表格所示,其表示在k=3时,从m=1-5,张量编号相对模量5的余分别为:1、4、7、10、13,由于有些余数大于5,因此,实际余数分别为:1、4、2、0、3,因此,张量A、B、C、D、E、F子内存池中的存储顺序则为张量A、D、B、E、C、F,其中张量A和F在同一子内存池1中。此外,为了减少相邻两个子内存池之间的连接处出现碎内存块,因此使得相邻的子内存池在分配内存空间时,起始点刚好相反。如图7所示,例如子内存池1从其内存空间的左侧起点开始顺序分配内存空间,而子内存池2从其内存空间的右侧终点开始倒序分配内存空间,这样在子内存池1和2之间的空余空间尽可能大,以便尽可能降低形成碎内存的机会。更重要的是,由于子内存池3从其内存空间的左侧起点开始顺序分配内存空间,因此,在子内存池2和3之间的就完全按不存在碎内存空间。而且,由于张量A与张量B作为在时序上连续的张量,为了避免通过张量子序列方式被同时释放,因此,通过上述分配内存方式在地址空间上被隔离开,因此,其很难同时存在于同一子序列中,从而能够避免被同时释放而导致后续重计算成本增大的情形。
在子内存池数量n比较多的情况下,为了使得时序上相邻或相近的张量接可能在存储空间上相距远一点,使得k为是最接近n/2的数中与1相距更远的数。例如,在n为5的情况下,k=5/2,相对2和3都一样最接近,因此选择距离1更远的3。当然,选择k=2也是可行的。
需要指出的是,所述内存空间监测分配组件130在轮询所有子内存池中的当前子内存池并确认其剩余内存空间小于所述当前请求的所请求尺寸的连续内存空间时,沿着所轮询的子内存池延伸扩展轮询到相邻子内存池,以便在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间不小于所述当前请求的所请求尺寸的连续内存空间时,将所扩展轮询获得的相邻的连接处的连续空间分配给所提出请求的所述计算逻辑节点。如图7所示的第四示意表格所示,当张量N所述的逻辑计算节点按照所分组的子内存池,应该在子内存池2中分配内存空间时,如果张量N的大小所需要的内存空间为300M,但是子内存池2的左侧剩余空间为200M。但是与子内存池2相邻的子内存池1的右侧末尾还剩余100M。因此,内存空间监测分配组件130就会从子内存池2的左侧向左侧继续扩展查询到子内存池1,此时,内存空间监测分配组件130会将被扩展的本属于子内存池1的部分空间视为属于子内存池2的内存空间。由此,由于这相邻的两部分的空余内存空间正好300M,满足张量N的需要,因此会将这300的内存空间分配给张量N。在当前子内存池(例如子内存池2)与其相邻的子内存池(例如子内存池1)之间的邻接处的连续内存空间依然小于所述当前请求的所请求尺寸的连续内存空间时,例如小于张量N所需的内存空间300M,则跳过所述当前子内存池以及其相邻子内存池进行下一子内存池(例如子内存池3和4)的轮询。如果下一子内存池存在足够的空间,则为张量N分配内存空间。
通过采用根据本公开的支持动态重计算的内存分配和释放决策系统及其方法,通过将显存划分为多个连续的子内存池,即分成多个连续的分组,并且使得在时序上顺序的张量在各个子内存池中存在足够可用空间的情况下分配到不同子内存池,使得在时序上连续的张量可以尽可能分配到不同子内存池中,这样在直线型的数据处理网络上,就能够尽可能实现选择释放连续的显存其实就是在隔几个张量释放一个张量,从而减少了释放一连串的张量,导致后期为释放内存而形成重计算成本增加的情形。更重要的是,通过选取连续张量的子序列,使得内存的释放不再是一个一个释放代价最小的张量而是考虑释放哪些张量可以带来足够连续显存,这就消除了任何非必要的释放(例如在一个一个释放代价最小张量的情况下,可能释放一个张量后的空间依然不满足空间需求,因此不得不继续进行释放,这种情况反复就会导致非必要的释放,即是释放了张量依然不能解决OOM问题)。因此,通过释放连续张量子序列,就可以做到只产生连续的显存。而且通过将空闲显存作为一个代价为0张量,使得连续张量子序列的获取不会造成无法选取的境地。
概括而言,通过采用根据本公开的支持动态重计算的内存分配和释放决策系统及其方法,通过将预先申请预定阈值容量的内存池划分为多个子内存池,使得网络计算过程中连续张量的分配减少连续分布在内存池中,并通过尺取法获得更大的连续空间内的张量进行释放,减少了网络计算过程中连续张量被释放的,导致重计算开销较大的情形,也加快了获得可释放的连续内存空间的时间以及缩短网络训练的时间。并且通过采用本公开对预定大小的连续空间按整体释放的方式,使得内存释放决策更为灵活和全面,并且在实现内存释放目标的同时极大降低了重计算成本。
此外,在将逆向重计算的成本作为评估是否释放内存的因素引入动态重计算中,主要是因为神经网络中存在可逆的模块,并且可逆模块的输入可被输出反推得到。例如被称为“流模型(flow-based model)”的NICE、RealNVP、Glow。这类流模型中每个可逆基本单元的雅可比矩阵都是三角阵,且行列式为1,因此可以方便地应用于求解生成模型逆变换后的概率密度分布。此外,例如可逆残差网络(RevNet,Reversible Residual Network)设计的可逆模块也可以根据输出结果(例如图3所示场景中,y1和y2)和梯度(例如,grad_y)求出输入(例如,x1、x2以及grad_x)。RevNet将ResNet中的residual module替换为reversiblemodule,只保留最终层的输出,在大幅减少显存占用的同时取得了和ResNet相当的实验结果,计算时间为ResNet的1.5-2倍。还例如,普通的操作如:add_n,scalar_mul,以及weight可逆的全连接层,都是可逆的。通过将逆向重计算作为内存释放决策的因素之一,使得内存释放决策更为灵活和全面,并且在实现内存释放目标的同时极大降低了重计算成本。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。
因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (18)
1.一种支持动态重计算的内存分配和释放决策系统,包括:
内存池初始化组件,为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池;
内存空间监测分配组件,部署在内存分配器中,基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点;
连续张量获取组件,在内存空间监测分配组件针对所有子内存池轮询完一遍之后确定没有任何子内存池存在大于所述当前请求的所请求尺寸的连续内存空间时,按照所述内存池的地址顺序,通过尺取法,顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列;
重计算代价评估组件,计算构成每个连续张量子序列的每个当前张量的重计算代价,并进行求和以获得所述连续张量子序列的总重计算代价;
内存释放组件,对所有连续张量子序列的总重计算代价按照大小进行排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放,从而增加所述内存池的可再分配的内存空间。
2.根据权利要求1所述的支持动态重计算的内存分配和释放决策系统,其中所述内存空间监测分配组件在只有两个子内存池时,按照当前请求的顺序交替地在两个子内存池中分配所请求的内存空间,其中在第一子内存池的从其起始地址顺序进行内存分配的情况下,第二子内存池从其终止地址倒序进行分配。
3.根据权利要求1所述的支持动态重计算的内存分配和释放决策系统,其中所述内存空间监测分配组件在两个以上的子内存池存在满足所请求内存空间尺寸的情况下,基于当前请求的顺序序号,以子内存池的数量n为模量,在编号为m的子内存池的中为序号相对于模量n的余数同为1+(m-1)*k的张量顺序分配内存空间,其中k为是与n互质的整数,其中n个子内存池相邻两个子内存池在分配内存空间时,在一个是从起始地址顺序进行分配的情况下,另一个是从终止地址倒序进行分配。
4.根据权利要求1所述的支持动态重计算的内存分配和释放决策系统,其中k为是最接近n/2的数。
5.根据权利要求1-4之一所述的支持动态重计算的内存分配和释放决策系统,其中所述内存空间监测分配组件在轮询所有子内存池中的当前子内存池并确认其剩余内存空间小于所述当前请求的所请求尺寸的连续内存空间时,沿着所轮询的子内存池延伸扩展轮询到相邻子内存池,以便在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间不小于所述当前请求的所请求尺寸的连续内存空间时,将所扩展轮询获得的相邻的连接处的连续空间分配给所提出请求的所述计算逻辑节点,并在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间依然小于所述当前请求的所请求尺寸的连续内存空间时,则跳过所述当前子内存池以及其相邻子内存池进行下一子内存池的轮询。
6.根据权利要求5所述的支持动态重计算的内存分配和释放决策系统,其中所述连续张量子序列所包含的张量数量为一个、两个或两个以上的彼此存储空间连续的张量、或者两个或两个以上的彼此存储空间之间存在空闲空间的张量。
7.根据权利要求6所述的支持动态重计算的内存分配和释放决策系统,其中
所述重计算代价评估组件针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,其中处于两个张量的之间空闲空间被视为重计算代价为零的张量。
8.根据权利要求7所述的支持动态重计算的内存分配和释放决策系统,其中所述重计算代价评估组件包括:
张量使用历史记录单元,记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;
张量递归查询单元,从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;
代价估算单元,用于对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和作为所述每个连续张量子序列的总重计算代价。
9.根据权利要求7所述的支持动态重计算的内存分配和释放决策系统,其中所述重计算代价评估组件包括:
张量使用历史记录单元,记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;
张量递归查询单元,从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;
代价估算单元,用于对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和,并计算所述每个待估算张量的正向计算代价和与所述待估算张量的时间间隔之间的重计算代价时间比值,并对每个连续张量子序列的所有待估算张量的对应的重计算代价时间比值进行求和得到重计算代价时间比值和,以及通过计算所述重计算代价时间比值和与所述每个连续张量子序列的空间大小之间的比值作为所述每个连续张量子序列的总重计算代价。
10.一种支持动态重计算的内存分配和释放决策方法,包括:
通过内存池初始化组件,为数据处理网络申请一段连续的预定尺寸的内存空间作为内存池,并将所述预定尺寸的内存池划分为了至少两个子内存池;
基于数据处理网络中的当前计算逻辑节点请求分配用于其数据处理的连续内存空间的当前请求,通过部署在内存分配器中的内存空间监测分配组件,从基于所述当前请求的前一请求所分配内存空间的子内存池的下一内存池开始,轮询所有子内存池,以确定所有子内存池之一中是否存在大于所述当前请求的所请求尺寸的连续内存空间,并将首次轮询到的存在大于所述当前请求的所请求尺寸的连续内存空间的子内存池中的连续内存空间分配给提出请求的所述计算逻辑节点;
在内存空间监测分配组件针对所有子内存池轮询完一遍之后确定没有任何子内存池存在大于所述当前请求的所请求尺寸的连续内存空间时,通过连续张量获取组件,按照所述内存池的地址顺序,通过尺取法,顺序查找所述内存池中的所占据的内存空间之和大于第一尺寸的连续张量子序列;
通过重计算代价评估组件计算构成每个连续张量子序列的每个当前张量的重计算代价,并进行求和以获得所述连续张量子序列的总重计算代价;
通过内存释放组件对所有连续张量子序列的总重计算代价按照大小进行排序,并将最小的总重计算代价所对应的连续张量子序列中所包含的所有张量所占据的内存予以释放,从而增加所述内存池的可再分配的内存空间。
11.根据权利要求10所述的支持动态重计算的内存分配和释放决策方法,其中所述内存空间监测分配组件在只有两个子内存池时,按照当前请求的顺序交替地在两个子内存池中分配所请求的内存空间,其中在第一子内存池的从其起始地址顺序进行内存分配的情况下,第二子内存池从其终止地址倒序进行分配。
12.根据权利要求10所述的支持动态重计算的内存分配和释放决策方法,其中所述内存空间监测分配组件在两个以上的子内存池存在满足所请求内存空间尺寸的情况下,基于当前请求的顺序序号,以子内存池的数量n为模量,在编号为m的子内存池的中为序号相对于模量n的余数同为1+(m-1)*k的张量顺序分配内存空间,其中k为是与n互质的整数,其中n个子内存池相邻两个子内存池在分配内存空间时,在一个是从起始地址顺序进行分配的情况下,另一个是从终止地址倒序进行分配。
13.根据权利要求12所述的支持动态重计算的内存分配和释放决策方法,其中k为是最接近n/2的数。
14.根据权利要求9-13之一所述的支持动态重计算的内存分配和释放决策系统,其中所述内存空间监测分配组件在轮询所有子内存池中的当前子内存池并确认其剩余内存空间小于所述当前请求的所请求尺寸的连续内存空间时,沿着所轮询的子内存池延伸扩展轮询到相邻子内存池,以便在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间不小于所述当前请求的所请求尺寸的连续内存空间时,将所扩展轮询获得的相邻的连接处的连续空间分配给所提出请求的所述计算逻辑节点,并在当前子内存池与其相邻的子内存池之间的邻接处的连续内存空间依然小于所述当前请求的所请求尺寸的连续内存空间时,则跳过所述当前子内存池以及其相邻子内存池进行下一子内存池的轮询。
15.根据权利要求14所述的支持动态重计算的内存分配和释放决策方法,其中所述连续张量子序列所包含的张量数量为一个、两个或两个以上的彼此存储空间连续的张量、或者两个或两个以上的彼此存储空间之间存在空闲空间的张量。
16.根据权利要求15所述的支持动态重计算的内存分配和释放决策方法,其中
所述重计算代价评估组件针对内存池中当前所保存的张量中的每一个张量,估算作为待估算张量的每个张量的正向重计算代价,并将处于两个张量的之间空闲空间被视为重计算代价为零的张量。
17.根据权利要求16所述的支持动态重计算的内存分配和释放决策方法,其中所述重计算代价评估组件进行重计算代价评估包括:
通过张量使用历史记录单元记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;
通过张量递归查询单元,从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;
通过代价估算单元,对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和作为所述每个连续张量子序列的总重计算代价。
18.根据权利要求16所述的支持动态重计算的内存分配和释放决策方法,其中所述重计算代价评估组件进行重计算代价评估包括:
通过张量使用历史记录单元记录张量使用历史并提供待估算张量最近使用时刻距离当前时刻的时间间隔;
通过张量递归查询单元从内存池中的每个连续张量子序列的每个待估算张量开始递归查询的其父代张量和子代张量,并且所述递归查询终止于查询到所述待估算张量的当前存在于内存池中的第一个父代张量和第一个子代张量,由此确定用于估算所述待估算张量的重计算代价的所有父代张量和所有子代张量的第一集合,其中所有父代张量包括所述第一个父代张量与所述待估算张量之间的所有中间父代张量,所有子代张量包括所述第一子代张量与待估算张量之间的所有中间子代张量;
通过代价估算单元对每个连续张量子序列的每个待估算张量的正向计算代价以及所述第一集合中的各个张量的正向计算代价进行求和,以获得所述每个待估算张量的正向计算代价和,并计算所述每个待估算张量的正向计算代价和与所述待估算张量的时间间隔之间的重计算代价时间比值,并对每个连续张量子序列的所有待估算张量的对应的重计算代价时间比值进行求和得到重计算代价时间比值和,以及通过计算所述重计算代价时间比值和与所述每个连续张量子序列的空间大小之间的比值作为所述每个连续张量子序列的总重计算代价。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210842115.XA CN115185692A (zh) | 2022-07-18 | 2022-07-18 | 支持动态重计算的内存分配和释放决策系统及其方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210842115.XA CN115185692A (zh) | 2022-07-18 | 2022-07-18 | 支持动态重计算的内存分配和释放决策系统及其方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115185692A true CN115185692A (zh) | 2022-10-14 |
Family
ID=83520214
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210842115.XA Pending CN115185692A (zh) | 2022-07-18 | 2022-07-18 | 支持动态重计算的内存分配和释放决策系统及其方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115185692A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501502A (zh) * | 2023-06-25 | 2023-07-28 | 电子科技大学 | 一种基于Pytorch框架的数据并行优化方法 |
CN117032954A (zh) * | 2023-07-17 | 2023-11-10 | 北京泛睿科技合伙企业(有限合伙) | 针对终端训练模型的内存优化方法、系统、设备及介质 |
-
2022
- 2022-07-18 CN CN202210842115.XA patent/CN115185692A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116501502A (zh) * | 2023-06-25 | 2023-07-28 | 电子科技大学 | 一种基于Pytorch框架的数据并行优化方法 |
CN116501502B (zh) * | 2023-06-25 | 2023-09-05 | 电子科技大学 | 一种基于Pytorch框架的数据并行优化方法 |
CN117032954A (zh) * | 2023-07-17 | 2023-11-10 | 北京泛睿科技合伙企业(有限合伙) | 针对终端训练模型的内存优化方法、系统、设备及介质 |
CN117032954B (zh) * | 2023-07-17 | 2024-04-26 | 北京泛睿科技合伙企业(有限合伙) | 针对终端训练模型的内存优化方法、系统、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115185692A (zh) | 支持动态重计算的内存分配和释放决策系统及其方法 | |
US11372869B2 (en) | Frequent pattern mining | |
US6408359B1 (en) | Storage device management system and method for distributively storing data in a plurality of storage devices | |
US9489409B2 (en) | Rollover strategies in a N-bit dictionary compressed column store | |
CN112711422A (zh) | 一种神经网络编译的优化方法及系统 | |
JPH09171503A (ja) | 並列処理方法および並列処理装置 | |
CN114330730B (zh) | 量子线路分块编译方法、装置、设备、存储介质和产品 | |
CN115168041A (zh) | 支持逆向动态重计算的内存释放决策系统及其方法 | |
CN110858162A (zh) | 内存管理方法及装置、服务器 | |
US6976021B2 (en) | Method, system, and computer program product for managing a re-usable resource with linked list groups | |
KR101136200B1 (ko) | 분할된 도메인들의 중요 샘플링을 위한 시스템, 방법 및 컴퓨터 판독가능 기록 매체 | |
CN116401258A (zh) | 数据索引方法、数据查询方法及对应装置 | |
CN114556309A (zh) | 内存空间的分配方法、装置及存储介质 | |
CN114282661A (zh) | 神经网络模型的运行方法、可读介质和电子设备 | |
CN115700641A (zh) | 最短路径的确定方法、装置、电子设备和存储介质 | |
JP4749237B2 (ja) | 可変長フレームバッファ装置 | |
CN113343725B (zh) | Rfid多阅读器的防碰撞方法及系统 | |
CN112445613A (zh) | 用于流处理平台的弹性扩缩容方法、电子设备和存储介质 | |
CN111813525B (zh) | 一种异构系统工作流调度方法 | |
KR20170037851A (ko) | 매니코어 시스템을 작동하기 위한 방법 및 장치 | |
CN114329058A (zh) | 图像聚档方法、装置和电子设备 | |
CN110543362B (zh) | 一种图形处理器管理方法、装置及服务器 | |
CN112883239A (zh) | 一种资源分配方法、装置、计算机设备及存储介质 | |
CN116360963A (zh) | 内存分配方法及装置 | |
US9223689B2 (en) | Apparatus and method for managing memory |
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 |