CN114327844A - 内存分配方法、相关设备及计算机可读存储介质 - Google Patents
内存分配方法、相关设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN114327844A CN114327844A CN202011057095.2A CN202011057095A CN114327844A CN 114327844 A CN114327844 A CN 114327844A CN 202011057095 A CN202011057095 A CN 202011057095A CN 114327844 A CN114327844 A CN 114327844A
- Authority
- CN
- China
- Prior art keywords
- tensor data
- memory space
- nodes
- allocated
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 132
- 238000003860 storage Methods 0.000 title claims abstract description 42
- 238000013528 artificial neural network Methods 0.000 claims abstract description 158
- 238000004364 calculation method Methods 0.000 claims abstract description 72
- 238000004519 manufacturing process Methods 0.000 claims description 52
- 238000012163 sequencing technique Methods 0.000 claims description 39
- 238000011144 upstream manufacturing Methods 0.000 claims description 38
- 230000006870 function Effects 0.000 claims description 22
- 238000004422 calculation algorithm Methods 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 14
- 238000005457 optimization Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 description 43
- 238000010586 diagram Methods 0.000 description 23
- 238000004891 communication Methods 0.000 description 14
- 238000013527 convolutional neural network Methods 0.000 description 11
- 238000013135 deep learning Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 230000001537 neural effect Effects 0.000 description 9
- 238000013473 artificial intelligence Methods 0.000 description 8
- 239000011159 matrix material Substances 0.000 description 8
- 239000013598 vector Substances 0.000 description 8
- 210000002569 neuron Anatomy 0.000 description 7
- 230000004913 activation Effects 0.000 description 6
- 238000004088 simulation Methods 0.000 description 6
- 238000007726 management method Methods 0.000 description 5
- 238000011176 pooling Methods 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 238000012549 training Methods 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000009826 distribution Methods 0.000 description 3
- 238000003062 neural network model Methods 0.000 description 3
- 238000013500 data storage Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000005284 excitation Effects 0.000 description 1
- 238000003709 image segmentation Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000007477 logistic regression Methods 0.000 description 1
- 239000004576 sand Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012546 transfer Methods 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
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5033—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering data affinity
-
- 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/04—Architecture, e.g. interconnection topology
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- 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
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Artificial Intelligence (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Neurology (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种内存分配方法、相关设备及计算机可读存储介质,该方法包括:获取神经网络对应的计算图;基于M个张量数据的排序结果,依次给M个张量数据分配内存空间,其中,若M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将张量数据可复用的至少一部分内存空间分配给张量数据,已分配的内存空间为在张量数据之前,已经分配给M个张量数据的内存空间,排序结果指示为M个张量数据分配内存空间时的顺序,排序结果与M个张量数据中每个张量数据的信息有关。实施本申请,可避免内存分配不合理。
Description
技术领域
本申请涉及人工智能技术领域,尤其涉及一种内存分配方法、相关设备及计算机可读存储介质。
背景技术
在当前的计算机深度学习领域,为了取得更好的算法精度,深度学习神经网络越来越复杂,硬件能力限制了神经网络向更深的方向发展,必须进行内存的优化。为了实现内存优化,业界通常采用以下内存分配策略:
运行整个神经网络,然后按照整个神经网络运行的前后顺序,为整个神经网络分配内存。比如,神经网络在运行过程中,依次需要占用100M的内存空间、10M的内存空间和50M的内存空间。当神经网络申请100M的内存空间时,可为神经网络分配一个100M的内存空间,然后,当神经网络申请10M的内存空间时,判断是否可以复用上述已分配的10M的内存空间,如果可以复用,则不再为所申请的10M内存空间分配新的内存空间,而是复用上述100M的内存空间。同理,当神经网络申请50M的内存空间时,先判断该50M的内存空间是否可以复用已分配的100M内存空间,如果可以复用,则不再为所申请的50M的内存空间分配新的内存空间。
通过上述描述可以知道的是,在现有技术中,当神经网络申请一内存空间时,首先需要判断一下该申请的内存空间是否可以复用已分配的内存空间,如果可以,则直接分配该申请的内存空间复用已分配的内存空间,如果不可以,再为该内存空间申请分配新的内存空间。但是,若申请的10M内存空间和申请的50M内存空间都可复用已分配的100M内存空间,会出现申请的10M内存空间复用已分配的100M内存空间,而对神经网络额外分配一50M的内存空间,从而整个神经网络需占用150M的内存空间,导致整个神经网络占用的内存较大,内存分配不合理。
发明内容
本申请提供了一种内存分配方法、相关设备及计算机可读存储介质,可避免出现内存分配不合理。例如,该内存分配不合理可以体现在:整个神经网络占用的内存较大。
第一方面,提供了一种内存分配方法,该方法可以包括如下步骤:首先,获取神经网络对应的计算图;其中,计算图包括N个节点和连接不同节点的有向边,节点用于指示神经网络中的一种计算逻辑,有向边用于指示计算逻辑中张量数据的流向;计算图的有向边上承载有张量数据,计算图中包括M个张量数据,M为大于1整数;其次,基于M个张量数据的排序结果,依次给M个张量数据分配内存空间,其中,若M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将张量数据可复用的至少一部分内存空间分配给张量数据,已分配的内存空间为在张量数据之前,已经分配给M个张量数据的内存空间,排序结果指示为M个张量数据分配内存空间时的顺序,排序结果与M个张量数据中每个张量数据的信息有关,每个张量数据的信息指示以下信息中的至少一种:每个张量数据对应的约束关系以及每个张量数据流向的节点的数量,约束关系指示M个张量数据中一个张量数据的可用内存空间分别与M个张量数据中的其他张量数据的可用内存空间的关系。其中,已经分配给M个张量数据的内存空间这句话中,是将M个张量数据作为一个整体,描述的是这个整体已分配的内存空间,这个整体里可能有一部分张量数据是还没有被分配到内存空间的。具体来说,是指,在给上述方法中描述的张量数据分配内存空间前,该M个张量数据中已经被分配了内存空间的一个或多个张量数据的内存空间,例如,按次序该给排序结果中的第m个张量数据分配内存空间,则已经分配给M个张量数据的内存空间就是前m-1个已分配的张量数据所分配到的内存空间,m小于M,大于1。
当然,对于排序结果中的第一个张量,由于没有已分配给M个张量数据的内存空间,直接分配内存空间即可,这是现有技术,不再展开描述。
通俗地来说,张量数据流向的节点即为消费节点。张量数据流出的节点即为生产节点。
需要说明的是,一个张量数据可以承载于不同的有向边上,一个张量数据也可以承载在一个有向边上。
实施本申请实施例,内存分配装置基于M个张量数据的排序结果依次为每个张量数据分配相应大小的内存空间,相较于现有技术中,按照整个神经网络运行的前后顺序,进行内存空间的分配和复用,可以避免出现内存分配不合理现象,从而可节省整个神经网络需要占用的内存,优化了神经网络的内存分配。
在一种可能的实现方式中,该方法还可以包括如下步骤:若张量数据不可复用已分配的内存空间,则为张量数据分配其他的内存空间,其他的内存空间与已分配的内存空间不同。
在一种可能的实现方式中,约束关系指示以下至少一种关系:一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。在实际应用中,上述约束关系具有不同的优先级,换句话说,当两个张量的可用内存空之间的关系是不可复用且连续时,必然也是不可复用的,那么这两个张量的可用内存空之间的关系在约束关系中指示为不可复用且连续。也就是可以理解为不可复用且连续的优先级高于不可复用。
在一种可能的实现方式中,约束关系承载于约束关系表,约束关系表中包括M个数据张量的标识,在约束关系表中,通过第一值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,通过第二值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,通过第三值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。具体地,第一值、第二值以及第三值可以为能够相互区分的数值,例如,第一值可以为“0”,第二值可以为“1”,第三值可以为“2”。结合前文,一种实现方式下,如果一个关系是不可复用且连续,约束关系表的这个关系只会被标记为“2”,而不是“1”和“2”。通过这一实现方式,为后续结合约束关系获取M个张量数据的排序结果提供了便利。进一步地,当通过该排序结果依次为张量数据分配相应大小的内存空间时,可以避免出现内存不合理现象。
在一些可能的实现方式中,在第一张量数据的所有消费节点是第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据可以复用为所述第二张量数据分配的内存空间;在所述第一张量数据的所有消费节点不是所述第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点不是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据不可以复用为所述第二张量数据分配的内存空间;所述第一张量数据和所述第二张量数据为所述M个张量数据中任意的两个;所述消费节点为张量数据流向的节点,所述生产节点为张量数据流出的节点。具体来说,节点A是节点B的上游节点是指,在计算图中可以通过一条或多条有向边从节点A到节点B,节点A和节点B之间可以由从节点A指向节点B的有向边连接,也可以由多条有向边以及这些有向边经过的节点连接。第一第一通过这一实现方式,可以确定每个张量数据的约束关系,为后续获取M个张量数据的排序结果提供了基础。当通过该排序结果依次为张量数据分配相应大小的内存空间时,可以避免出现内存不合理现象。
在一种可能的实现方式中,计算图包括多个计算子任务,计算子任务通过一组节点和与一组节点有关的边指示一种计算功能,多个计算子任务之间的执行关系为并行执行;该方法还可以包括如下步骤:在一个计算子任务中,若相邻两个节点之间没有有向边,则在相邻两个节点之间添加有向边,以更新计算图;其中,添加的每条有向边上承载有相应的张量数据;相邻两个节点为计算子任务中执行顺序相邻的两个节点;这里,执行顺序是指具有时序关系的顺序。基于更新后的计算图,获取每个张量数据的信息。实施本申请实施例,在计算子任务之间的执行关系全部为并行的情况下,在计算图中的一个计算子任务内,若相邻两个节点之间没有有向边,则在相邻两个节点之间添加一条有向边,以更新计算图,为后续基于计算图分析各节点的祖先关系(例如,上游节点)和确定每个节点各自对应的约束关系提供了基础。需要说明的是,多个计算子任务之间的执行关系是并行是指,执行该多个计算子任务所需的时间段在同一时间基准的情况下有重叠,不强调计算子任务在同一时间开始,和/或在同一时间上结束。在实际应用中,可以通过不同的处理器核来并行执行上述具有并行执行关系的计算子任务。
在一种可能的实现方式中,计算图还包括执行关系为串行的第一计算子任务和第二计算子任务,第一计算子任务的执行顺序在第二计算子任务之前;更新计算图的实现过程还可以包括如下步骤:若第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间没有有向边,则在第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间添加有向边。在计算子任务之间的执行关系包括串行和并行的情况下,通过这一实现方式可以更新计算图,为后续基于计算图分析各节点的祖先关系和确定每个节点各自对应的约束关系提供了基础。例如,计算子任务1与计算子任务之间的执行关系为串行是指,在处理器执行完计算子任务之后,才执行计算子任务2。又例如,计算子任务1与计算子任务2之间的执行关系为串行,计算子任务2与计算子任务3之间的执行关系为并行是指,可以将计算子任务1与计算子任务2看做一个整体,通过处理器核1来运行计算子任务1和计算子任务2,通过处理器核2来运行计算子任务3。处理器核1和处理器核2在执行上述计算子任务所需的时间段在同一时间基准的情况下有重叠。
在一种可能的实现方式中,在计算图中,张量数据的生产节点的标识小于该张量数据的消费节点的标识;张量数据的生产节点与该张量数据的消费节点为相邻的两个节点。通过这一实现方式可以确定每个节点各自对应的标识,为后续基于每个节点各自对应的标识分析各节点的祖先关系和确定每个节点各自对应的约束关系提供了基础。
在一种可能的实现方式中,计算图中各节点的标识用于确定M个张量数据中每个张量数据的信息。以每个张量数据的信息指示每个张量数据的约束关系为例,可以根据各节点的标识,分析各节点的祖先关系(祖先关系关系中可以反映哪些节点是生产节点,哪些节点是消费节点),然后,结合该祖先关系获取每个张量数据的约束关系。
在一种可能的实现方式中,每个张量数据的信息指示每个张量数据对应的约束关系,该方法还可以包括如下步骤:根据每个张量数据对应的约束关系获取M个张量数据各自对应的约束量;约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;根据M个张量数据各自对应的约束量,对M个张量数据排序,以得到M个张量数据的排序结果。
在一种可能的实现方式中,每个张量数据的信息指示每个张量数据流向的节点的数量,方法还包括:根据M个张量数据各自对应的消费节点数量,对M个张量数据排序,以得到M个张量数据的排序结果。
需要说明的是,在一些可能的实现方式中,还可以根据每个张量数据的信息中的至少两种对M个张量数据按照从大到小排序,得到M个张量数据的排序结果。例如,根据M个张量数据各自对应的约束量和每个张量数据各自对应的内存空间大小对M个张量数据按照从大到小排序,得到M个张量数据的排序结果。又例如,根据M个张量数据各自对应的约束量和每个张量数据各自对应的消费节点数量按照从大到小排序,得到M个张量数据的排序结果。
在一些可能的实现方式中,该方法还可以包括如下步骤:基于每个张量数据的信息使用启发式算法对M个张量数据进行排序,以在预设时间段内获取M个张量数据的排序结果。在一种可能的实现方式中,排序结果是优化后的排序结果,其中,优化后的排序结果对应的神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的神经网络需要占用的最大内存大小。通过这一实现方式,由于优化后的排序结果确定神经网络需要占用的最大内存大小小于根据排序结果确定神经网络需要占用的最大内存大小,可以节省内存空间。
第二方面,本申请实施例还提供了一种内存分配方法,该方法可以包括如下步骤:首先,获取神经网络对应的计算图;其中,计算图包括N个节点和连接不同节点的有向边,节点用于指示神经网络中的一种计算逻辑,有向边用于指示计算逻辑中张量数据的流向;计算图的有向边上承载有张量数据,计算图中包括M个张量数据,M为大于1整数;其次,基于每个张量数据对应的约束关系,按照M个张量数据在神经网络中的执行顺序,依次给M个张量数据分配内存空间,其中,若M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将张量数据可复用的至少一部分内存空间分配给张量数据,已分配的内存空间为在张量数据之前,已经分配给M个张量数据的内存空间,约束关系指示M个张量数据中一个张量数据的可用内存空间与M个张量数据中的其他张量数据的可用内存空间的关系。实施本申请实施例,终端设备可以基于每个张量数据各自对应的约束关系,按照M个张量数据的执行顺序,依次给M个张量数据分配内存空间,可以避免在并行场景下,不同执行流中因算子复用同一个内存空间而带来的算子运算结果出错的情形,可以保证神经网络的计算结果的准确性。
在一种可能的实现方式中,该方法还可以包括如下步骤:若张量数据不可复用已分配的内存空间,则为张量数据分配其他的内存空间,其他的内存空间与已分配的内存空间不同。
总的来说,本申请提出的方法可以解决内存分配不合理的问题,例如,内存分配不合理可以体现在:避免为神经网络分配的内存过大,避免在并行场景下,不同执行流中因算子复用同一个内存空间而带来的算子运算结果出错的情形,可以保证神经网络的计算结果的准确性。
第三方面,本申请实施例提供了一种内存分配装置,该装置可以包括:获取计算图单元,用于获取神经网络对应的计算图;其中,计算图包括N个节点和连接不同节点的有向边,计算图的有向边上承载有张量数据,计算图中包括M个张量数据,M为大于1的整数;分配单元,用于基于M个张量数据的排序结果,依次给M个张量数据分配内存空间,其中,若M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将张量数据可复用的至少一部分内存空间分配给张量数据,已分配的内存空间为在张量数据之前,已经分配给M个张量数据的内存空间,排序结果指示为M个张量数据分配内存空间时的顺序,排序结果与M个张量数据中每个张量数据的信息有关,每个张量数据的信息指示以下信息中的至少一种:每个张量数据对应的约束关系以及每个张量数据流向的节点的数量,约束关系指示M个张量数据中一个张量数据的可用内存空间分别与M个张量数据中的其他张量数据的可用内存空间的关系。
在一种可能的实现方式中,分配单元,还用于:若张量数据不可复用已分配的内存空间,则为张量数据分配其他的内存空间,其他的内存空间与已分配的内存空间不同。
在一种可能的实现方式中,约束关系指示以下至少一种关系:一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
在一种可能的实现方式中,约束关系承载于约束关系表,约束关系表中包括M个数据张量的标识,在约束关系表中,通过第一值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,通过第二值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,通过第三值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
在一种可能的实现方式中,在第一张量数据的所有消费节点是第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据可以复用为所述第二张量数据分配的内存空间;在所述第一张量数据的所有消费节点不是所述第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点不是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据不可以复用为所述第二张量数据分配的内存空间;所述第一张量数据和所述第二张量数据为所述M个张量数据中任意的两个;所述消费节点为张量数据流向的节点,所述生产节点为张量数据流出的节点。
在一种可能的实现方式中,计算图包括多个计算子任务,计算子任务通过一组节点和与一组节点有关的边指示一种计算功能,多个计算子任务之间的执行关系为并行执行;装置还包括:更新计算图单元,用于在一个计算子任务中,若相邻两个节点之间没有有向边,则在相邻两个节点之间添加有向边,以更新计算图;其中,添加的每条有向边上承载有相应的张量数据;相邻两个节点为计算子任务中执行顺序相邻的两个节点;获取信息单元,用于基于更新后的计算图,获取每个张量数据的信息。
在一种可能的实现方式中,计算图还包括执行关系为串行的第一计算子任务和第二计算子任务,第一计算子任务的执行顺序在第二计算子任务之前;更新计算图单元,还用于:若第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间没有有向边,则在第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间添加有向边。
在一种可能的实现方式中,在所述计算图中,张量数据的生产节点的标识小于所述张量数据的消费节点的标识;所述张量数据的生产节点与所述张量数据的消费节点为相邻的两个节点。
在一种可能的实现方式中,所述计算图中各节点的标识用于确定所述M个张量数据中每个张量数据的信息。
在一种可能的实现方式中,所述每个张量数据的信息指示所述每个张量数据对应的约束关系,所述装置还包括:第一排序单元,用于根据所述每个张量数据对应的约束关系获取所述M个张量数据各自对应的约束量;所述约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;根据所述M个张量数据各自对应的约束量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
在一种可能的实现方式中,所述每个张量数据的信息指示所述每个张量数据流向的节点的数量,所述装置还包括:第二排序单元,用于根据所述M个张量数据各自对应的消费节点数量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
在一种可能的实现方式中,所述装置还包括:
第三排序单元,用于基于所述每个张量数据的信息使用启发式算法对所述M个张量数据进行排序,以在预设时间段内获取所述M个张量数据的排序结果。
在一种可能的实现方式中,所述排序结果是优化后的排序结果,其中,所述优化后的排序结果对应的所述神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的所述神经网络需要占用的最大内存大小。
第四方面,本申请实施例还提供了一种内存分配装置,该装置可以包括:获取计算图单元,用于获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;分配单元,用于基于每个张量数据对应的约束关系,按照所述M个张量数据在所述神经网络中的执行顺序,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间与所述M个张量数据中的其他张量数据的可用内存空间的关系。
在一种可能的实现方式中,分配单元,还用于:若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
第五方面,本申请实施例还提供一种内存分配设备,该内存分配设备可以包括存储器和处理器,所述存储器用于存储支持内存分配设备执行上述方法的计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面中任一项或第二方面中任一项的内存分配方法。
第六方面,本申请实施例还提供一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面中任一项或第二方面中任一项的内存分配方法。
第七方面,本申请实施例还提供了一种计算机程序,所述计算机程序包括计算机软件指令,所述计算机软件指令当被计算机执行时使所述计算机执行如上述第一方面中任一项或第二方面中任一项的内存分配方法。
附图说明
图1a为本申请实施例提供的一种神经网络的计算图的结构示意图;
图1b为本申请实施例提供的另一种神经网络的计算图的结构示意图;
图1c为本申请实施例提供的一种计算图中各算子的执行顺序的示意图;
图1d为本申请实施例提供的一种计算图中各算子的执行顺序的示意图;
图2a为本申请实施例提供的一种神经网络的计算图以及计算图中各算子的执行顺序的示意图;
图2b为本申请实施例提供的一种为张量数据分配内存空间的示意图;
图2c为本申请实施例提供的一种在并行场景下神经网络的计算图以及计算图中各算子的执行顺序的示意图;
图3a为本申请实施例提供的一种内存分配设备的结构示意图;
图3b为本申请实施例提供的服务器或终端设备侧架构的示意图;
图3c为本申请实施例提供的一种网络架构示意图;
图3d为本申请实施例提供的一种有向无环图DAG的示意图;
图4a为本申请实施例提供的一种内存分配方法的流程示意图;
图4b为本申请实施例提供的一种卷积神经网络400的结构示意图;
图4c为本申请实施例提供的一种确定排序结果的示意图;
图4d为本申请实施例提供的一种已分配集合中内存空间的示意图;
图4e为本申请实施例提供的一种更新后的计算图的示意图;
图4f为本申请实施例提供的一种已分配集合中内存空间的示意图;
图4g为本申请实施例提供的一种已分配集合中内存空间的示意图;
图5为本申请实施例提供的另一种内存分配方法的流程示意图;
图6为本申请实施例提供的一种内存分配装置60的结构示意图;
图7为本申请实施例提供的一种内存分配设备70的结构示意图。
具体实施方式
下面结合附图对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
本申请的说明书以及附图中的术语“第一”和“第二”等是用于区分不同的对象,或者用于区别对同一对象的不同处理,而不是用于描述对象的特定顺序。此外,本申请的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一些列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。需要说明的是,本申请实施例中,“示例性地”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性地”或者“例如”的任何实施例或设计方法不应被解释为比其他实施例或设计方案更优地或更具优势。确切而言,使用“示例性地”或者“例如”等词旨在以具体方式呈现相关概念。在本申请实施例中,“A和/或B”表示A和B,A或B两个含义。“A,和/或B,和/或C”表示A、B、C中的任一个,或者,表示A、B、C中的任两个,或者,表示A和B和C。
为了更好的理解本申请所描述的技术方案,下面先解释本申请实施例涉及的相关技术术语:
(1)神经网络
神经网络可以是由神经单元组成的,神经单元可以是指以xs和截距b为输入的运算单元,该运算单元的输出可以为:
其中,s=1、2、……n,n为大于1的自然数,ws为xs的权重,b为神经单元的偏置。f为神经单元的激活函数(activation functions),用于将非线性特性引入神经网络中,来将神经单元中的输入信号转换为输出信号。该激活函数的输出信号可以作为下一层卷积层的输入。激活函数可以是sigmoid函数。神经网络是将许多个上述单一的神经单元联结在一起形成的网络,即一个神经单元的输出可以是另一个神经单元的输入。每个神经单元的输入可以与前一层的局部接受域相连,来提取局部接受域的特征,局部接受域可以是由若干个神经单元组成的区域。
(2)深度神经网络
深度神经网络(deep neural network,DNN),也称多层神经网络,可以理解为具有很多层隐含层的神经网络,这里的“很多”并没有特别的度量标准。从DNN按不同层的位置划分,DNN内部的神经网络可以分为三类:输入层,隐含层,输出层。一般来说第一层是输入层,最后一层是输出层,中间的层数都是隐含层。层与层之间可以是全连接的,也可以是非全连接的。在层与层之间是全连接的情况下,第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。虽然DNN看起来很复杂,但是就每一层的工作来说,其实并不复杂,简单来说就是如下线性关系表达式:其中,是输入向量,是输出向量,b是偏移向量,w是权重矩阵(也称系数),α()是激活函数。每一层仅仅是对输入向量经过如此简单的操作得到输出向量由于DNN层数多,则系数w和偏移向量b的数量也就很多了。这些参数在DNN中的定义如下所述:以系数w为例:假设在一个三层的DNN中,第二层的第4个神经元到第三层的第2个神经元的线性系数定义为上标3代表系数W所在的层数,而下标对应的是输出的第三层索引2和输入的第二层索引4。
总结就是:第L-1层的第k个神经元到第L层的第j个神经元的系数定义为需要注意的是,输入层是没有w参数的。在深度神经网络中,更多的隐含层让网络更能够刻画现实世界中的复杂情形。理论上而言,参数越多的模型复杂度越高,“容量”也就越大,也就意味着它能完成更复杂的学习任务。训练深度神经网络的也就是学习权重矩阵的过程,其最终目的是得到训练好的深度神经网络的所有层的权重矩阵(由很多层的向量w形成的权重矩阵)。
(3)计算图
在本申请中,计算图是使用图结构对神经网络的计算过程进行描述的一种方式。如果计算有明显的模块性,并且模块之间有明显的时间上和逻辑上的依赖关系,通常可以使用有向图结构来进行描述。在实际应用中,图结构的基本元素有两个,分别为节点和有向边。神经网络模型可以抽象为张量数据和算子所组成的有向图结构。节点,又称为算子。顾名思义,有向边是指,带方向的边,其描述了算子与算子之间的指向方向,用于表征算子与算子之间的依赖关系。在本申请中,出于阐述的便利,以节点为例进行说明。
如图1a所示,计算图中包含8个算子和9个张量数据。具体地,8个算子分别为算子a、算子b、算子c、算子d、算子e、算子f、算子g和算子h,9个张量数据分别为张量数据t0、张量数据t1、张量数据t2、张量数据t3、张量数据t4、张量数据t5、张量数据t6、张量数据t7和张量数据t8。以算子a、算子b和算子c为例,对算子a来说,算子a与算子b之间存在一条有向边,该有向边的指向方向为算子a指向算子b,该有向边表示算子a生成的张量数据t0为算子b的输入;与此同时,算子a与算子c之间存在一条有向边,该有向边的指向方向为算子a指向算子c,该有向边表示算子a生成的张量数据t0为算子b的输入。
一般来说,对神经网络模型使用计算图的方式进行描述,有利于对整个神经网络计算任务进行整体的把握,与此同时,计算图的表达方式也方便对计算任务进行调度和并行执行。
在本申请中,计算图内的算子可以被分配到多个计算子任务,不同计算子任务之间可以并行,也可以串行。同一个计算子任务内的算子的运行顺序为串行。例如,如图1b所示,算子a和算子c被分配到计算子任务0内,算子b、算子d、算子e和算子f被分配到计算子任务1内,算子g和算子h被分配到计算子任务2内。关于如何确定计算图中计算子任务的数量请参考现有的实现方式,此处不多加限定。例如,可以通过对神经网络计算任务进行拆分,得到多个计算子任务,从而可以得到多个计算子图,一个计算子图即为一个计算子任务。
在一些实施例中,当计算子任务0、计算子任务1和计算子任务2处于并行状态时,不同计算子任务之间算子的执行顺序取决于算子间有向边的指向,举例来说,在计算子任务0内,算子之间的执行顺序为算子a-算子c;在计算子任务1内,算子之间的执行顺序为算子b-算子d/算子e-算子f;在计算子任务2内,算子之间的执行顺序为算子g-算子h。在图1b中,算子c和算子g在两个计算子任务中并行执行,由于算子c生成的张量数据t4为算子g的输入,所以,在算子c运行结束之后才会执行算子g。算子e和算子g在两个计算子任务中并行执行,对算子e来说,算子e生成的张量数据t6不是算子g的输入;对算子g来说,算子g生成的张量数据t8不是算子e的输入,也即:算子e和算子g之间没有张量数据的产生和消费,所以,并不限定算子e与算子g之间的执行顺序。具体地,该计算图中各算子的执行顺序可以如图1c所示。需要说明的是,在图1c中,并不限定算子d与算子e之间的执行顺序,基于此,将其表示为算子d/算子e。
在一些实施例中,当计算子任务0、计算子任务1处于并行状态,计算子任务1和计算子任务2处于串行状态时,不同计算子任务之间算子的执行顺序取决于算子间有向边的指向,举例来说,在计算子任务0内,算子之间的执行顺序为算子a-算子c;在计算子任务1内,算子之间的执行顺序为算子b-算子d/算子e-算子f;在计算子任务2内,算子之间的执行顺序为算子g-算子h。对计算子任务1和计算子任务2来说,在计算子任务1中的算子f运行结束之后才会运行计算子任务2中的算子g。具体地,该计算图中各算子的执行顺序可以如图1d所示。
(4)依赖关系
在本申请中,算子A依赖于算子B,表示算子A在开始它自己的计算任务前必须等待算子B对应的内核函数执行完毕。
(5)张量
在本申请中,张量仅仅是对存储的一块数据的特征描述,张量记录了数据的形状、类型等信息。
在本申请中,张量应该理解为张量数据,可以包括神经网络模型中的输入张量数据、输出张量数据,也可以包括特征张量数据等。
以人工智能深度学习框架TensorFlow为例,一般使用阶(rank)、形状(shape)和纬数(dimension number)来描述张量的纬度,其关系可以表示为下表所示:
阶 | 形状 | 维数 | 举例 |
0 | [] | 0-D | 4 |
1 | [D1] | 1-D | [2] |
2 | [D1,D2] | 2-D | [6,2] |
3 | [D1,D2,D3] | 3-D | [7,3,2] |
… | … | … | |
n | [D1,D2,D3,…Dn] | n-D | 形状为[D1,D2,D3,…Dn]的张量 |
如上表所示,张量A=4,其表示一个数。
如上表所示,张量A=[6,2],其表示二维矩阵。具体地,该矩阵为6行2列的矩阵。
(6)已分配集合
在本申请中,已分配集合是指,存储神经网络的张量数据的过程中,已分配内存空间信息的集合。上述已分配集合也可以称为共享内存队列,本申请对此不作具体限定。
(7)神经网络的内存分配策略
第一种策略:称为In-Place策略,该策略是指神经网络中各节点的输入和输出共用一块内存空间。
第二种策略:称为Co-share策略,该策略是指某块内存空间可以供神经网络中的多个节点使用,当这些节点均执行完毕时,该内存空间的生命周期结束,此时该内存空间可供神经网络中的其他节点使用。比如,可预设内存空间A的生命周期为(1,2,3),代表该内存空间A可供节点1、节点2和节点3使用,当节点1、节点2以及节点3均执行完成,内存空间A的生命周期结束,此时,内存空间A可放置于空闲链表中,供神经网络中的其他节点使用。
目前,针对上述第二种策略,内存分配的具体方法为:按照神经网络中节点执行的先后顺序进行内存空间的分配和复用,内存分配效果较差。
比如,神经网络在运行过程中,依次需要占用100M的内存空间、10M的内存空间和50M的内存空间。当神经网络申请100M的内存空间时,可为神经网络分配一个100M的内存空间,然后,当神经网络申请10M的内存空间时,判断是否可以复用上述已分配的10M的内存空间,如果可以复用,则不再为所申请的10M内存空间分配新的内存空间,而是复用上述100M的内存空间。同理,当神经网络申请50M的内存空间时,先判断该50M的内存空间是否可以复用已分配的100M内存空间,如果可以复用,则不再为所申请的50M的内存空间分配新的内存空间。但是,若申请的10M内存空间和申请的50M内存空间都可复用已分配的100M内存空间,会出现申请的10M内存空间复用已分配的100M内存空间,而对神经网络额外分配一50M的内存空间,从而整个神经网络需占用150M的内存空间,导致整个神经网络占用的内存较大,内存分配不合理。
针对以上,本申请提供一种内存分配方法,该方法的主要原理为:根据每个张量数据的信息获取整个神经网络中多个张量数据的排序结果,其中,每个张量数据的信息可以包括每个张量数据需要占用内存空间大小、每个张量数据各自对应的约束关系以及消费算子中的至少一种,此外,对每个张量数据来说,均包括各自对应的标识,然后,按照排序结果依次为张量数据分配内存空间。采用上述方法,可以避免上述现有技术中出现的内存规划空间不合理的情况,从而可以节省整个神经网络需要占用的内存,优化了神经网络的内存分配。此外,该方法还可以解决并行场景下,不同计算子任务中因算子复用同一个内存空间而带来的算子运算结果出错的问题。
又比如,如图2a所示,整个神经网络包括8个节点,按照运行的先后顺序,索引分别为a至h。而通过预分析,可获得上述图1a所示的神经网络在运行时,按照算子的执行顺序{a,b,c,d,e,f,g,h},先后需占用5个内存空间,每个内存空间用于张量数据,分别为第一内存空间、第二内存空间、第三内存空间、第四内存空间以及第五内存空间。
具体来说,为张量数据预先分配内存的实现过程可以如图2b所示,当模拟执行算子a的运算逻辑之前,为张量数据t0分配第一内存空间,为张量数据t1分配第二内存空间。当模拟执行算子b的运算逻辑之前,为张量数据t2分配第三内存空间,为张量数据t3分配第四内存空间。当模拟执行算子c的运算逻辑之前,为张量数据t4分配第五内存空间。与此同时,释放第一内存空间,对接下来的张量数据来说,可以复用第一内存空间。当模拟执行算子d的运算逻辑之前,为张量数据t5分配上述可以复用的第一内存空间。与此同时,释放第三内存空间,对接下来的张量数据来说,可以复用第三内存空间。当模拟执行算子e的运算逻辑之前,为张量数据t6分配上述可以复用的第三内存空间。与此同时,释放第四内存空间,对接下来的张量数据来说,可以复用第四内存空间。当模拟执行算子f的运算逻辑之前,为张量数据t7分配上述可以复用的第四内存空间。与此同时,释放第一内存空间和第三内存空间,对接下来的张量数据来说,可以复用上述第一内存空间和第三内存空间。当模拟执行算子g的运算逻辑之前,为张量数据t8分配上述可以复用的第一内存空间。与此同时,释放第五内存空间。当模拟执行算子h的运算逻辑之前,释放第二内存空间、第四内存空间以及第一内存空间。与此同时,将神经网络的运算结果存储在设定的内存空间中。
如图2b所示,为整个神经网络确定的内存规划空间的大小为上述5个内存空间的大小之和。
在图1b所示的计算图中,该计算图包括三个计算子任务,这三个计算子任务分别代表不同的神经网络计算子任务。一般来说,这三个计算子任务之间的关系可以为串行,也可以为并行。在同一个计算子任务内,算子之间的执行顺序为串行。如图2c所示,当计算子任务0与计算子任务1之间的关系为并行时(例如,可用通过不同的处理器核来运行上述两个计算子任务),由于算子c与算子d之间的执行顺序为并行关系,如果在执行算子d的运算时,算子c的运算并没有完成,在这种情况下,如果张量数据t0和张量数据t5复用同一个内存空间(第一内存空间),会导致算子a生成的张量数据t0被覆盖,从而导致算子c的运算结果出错。可以理解的是,现有技术中,在计算图中存在并行计算子任务的情况下,图2b所示的内存规划空间不合理,该内存规划空间不合理体现在:在两个并行计算子任务中,不同计算子任务中的算子复用同一个内存空间,会导致其中一个算子的运算结果出错。
针对以上,本申请提供另一种内存分配方法,该方法的主要原理为:在并行场景下,确定计算图中每个张量数据各自对应的约束关系,然后,基于每个张量数据各自对应的约束关系为张量数据分配内存空间。采用上述方法,可以避免上述现有技术中出现的内存规划空间不合理的情况,避免不同计算子任务中因算子复用同一个内存空间而带来的算子运算结果出错的情形,可以保证神经网络的计算结果的准确性。
为了便于更好的理解本申请,下面介绍几个本申请所描述的方法可以应用的应用场景:
如图3a所示,本申请所描述的方法可以应用在神经网络在线训练/推理,也可以应用在神经网络离线训练/推理。具体来说,在神经网络在线训练/推理的场景下,处理器CPU与人工智能处理器通过I/O总线进行通信,为处于运行状态的神经网络分配内存。在神经网络离线/推理的场景下,通用处理器通过获取硬盘中存储的神经网络离线文件,当调用该神经网络离线文件时,为其分配内存。
在本申请中,内存分配设备可以具体为服务器或终端设备。如图3b所示,服务器或终端设备侧中可以包括深度学习算法、深度学习框架、计算资源以及内存资源等。其中,深度学习算法可通过深度学习框架来调用计算资源和内存资源。
以卷积神经网络框架(Convolution Architecture For Fast Featureembedding,Caffe)为例,Caffe可以支持多种类型的深度学习框架、面向图像分类和图像分割,还可以支持卷积神经网络(Convolutional Neural Networks,CNN)、用于目标检测的卷积神经网络(Region-CNN,RCNN)、长短期记忆神经网络(Long Short-Term Memory,LSTM)和全连接神经网络设计。如图3c所示,深度学习算法中可以包括网络模型,深度学习框架中可包括NET类、层、Blob、任务管理和内存管理模块(syncmem),其中,在内存管理模块中可设置有MemModel模块,基于blob和内存管理模块的原有逻辑,可实现内存优化。
在本申请实施例中,上述网络模型可具体为神经网络的网络模型。NET类中可存储神经网络所对应的有向无环图(Directed acyclic graph,DAG),比如,如图3d所示,提供DAG的一种示例,在图3d的示例中,神经网络包括A、B、C、E、F以及G五个节点,节点A的输出参数(例如,张量数据),作为节点B的输入参数,节点B的输出参数,分别作为节点C和节点F的输入参数,节点C的输出参数,作为节点E的输入参数,节点E和节点F的输出参数,作为节点G的输入参数。层,用于存储神经网络所包括节点的信息,节点也可称为层。Blob用于存储神经网络的每个节点在运算过程中,所对应的输入参数、输出参数以及中间参数所占用内存空间的信息。内存管理模块用于对神经网络所占用内存空间的信息进行管理和分配。
请参见图4a,为本申请实施例提供的一种神经网络的内存分配方法的流程示意图。该方法的执行主体可以为运行神经网络的服务器,也可以为运行神经网络的终端设备。出于阐述的便利,以执行主体为运行神经网络的终端设备为例,进行说明。在图4a所示的方法流程示意图中,可设定整个神经网络在运行时,需要多个内存空间。如图4a所示,该方法可以包括但不限于如下步骤:
步骤S401、获取神经网络对应的计算图;其中,计算图包括N个节点和和连接不同节点的有向边,计算图的有向边上承载有张量数据,计算图中包括M个张量数据,M为大于1的整数。
在本申请实施例中,节点,用于指示神经网络中的一种计算逻辑,也即:实现某种特定功能的函数。在实际应用中,可以使用OP表示节点,tensor表示张量数据。
例如,以神经网络为卷积神经网络为例,该一种卷积神经网络的具体结构可以如图4b所示,该卷积神经网络(CNN)400可以包括输入层410,卷积层/池化层420(其中池化层为可选的)、全连接层430以及输出层440。这里,全连接层430是指全连接特性的网络结构。以隐含层1为例,可以通过隐含层1的输入数据与隐含层1对应的权值张量的乘积来表示全连接特性,例如,该全连接特性可以量化为ωx,其中,ω表示隐含层1对应的权值张量,x表示隐含层1的输入数据。具体来说,卷积层420,用于提取输入数据的特征,例如,当输入数据为图像时,卷积层420用于提取输入图像的特征,以减少输入图像带来的参数;全连接层430,用于整合卷积层420(或者池化层)中具有类别区分性的局部信息,例如,全连接层430可以连接卷积层420提取到的特征。在实际应用中,为了提升卷积神经网络400的网络性能,全连接层430中每个神经元的激励函数一般采用ReLU函数。最后一层全连接层430的输出值被传递给一个输出,例如,可以采用softmax逻辑回归(softmax regression)进行分类,从而可以得到处理结果。例如,该处理结果可以为图像的识别概率,从而可以通过输出层440输出该处理结果。
终端设备可以获取上述卷积神经网络对应的计算图,该计算图包括卷积节点,全连接节点(FC),激活节点(Relu)、池化节点(Pooling)、分类器节点(softmax)等。
在本申请实施例中,有向边可以用于表征节点与节点之间的连接关系,该有向边上承载有张量数据,有向边的指向用于反映张量数据的流向。
步骤S402、基于M个张量数据的排序结果,依次给M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间。
在本申请实施例中,M个张量数据的排序结果指示为M个张量数据分配内存空间时的执行顺序,该排序结果与M个张量数据中的每个张量数据的信息有关,每个张量数据的信息指示以下信息中的至少一种:每个张量数据对应的约束关系以及每个张量数据流向的节点的数量。
在本申请中,张量数据可以包括输入张量数据、输出张量数据以及中间张量数据。
在本申请中,消费节点是指,在计算图中,消费张量数据的节点,也即张量数据流向的节点。顾名思义,“消费”是说,节点运算过程中对物质(例如,张量数据)的使用和消耗。
在本申请中,生产节点是指,在计算图中,生成张量数据的节点,也即张量数据流出的节点。顾名思义,“生产”是“消费”的逆过程,表示节点运算过程中输出的事物。
在本申请中,节点A是节点B的上游节点是指,在计算图中存在至少一条路径可以从节点A到节点B。例如,可以在计算图中,以节点B为起点,通过反向遍历的方式(也即:沿着有向边的反方向)获取节点B对应的上游节点。
在本申请中,该约束关系可以承载于约束关系表,在该约束关系表中,可以通过第一值指示各张量数据可以与其他张量数据复用同一个内存空间,通过第二值指示各张量数据不可以与其他张量数据复用同一个内存空间,通过第三值指示各张量数据可以与其他张量数据在同一个内存空间中进行连续存储。
具体地,第一值、第二值以及第三值可以为能够相互区分的数值,例如,第一值可以为“0”,第二值可以为“1”,第三值可以为“2”。
在一些实施例中,上述约束关系具有不同的优先级,换句话说,当两个张量的可用内存空之间的关系是不可复用且连续时,必然也是不可复用的,那么这两个张量的可用内存空之间的关系在约束关系中指示为不可复用且连续。也就是可以理解为不可复用且连续的优先级高于不可复用。
需要说明的是,在一些实施例中,该约束关系还可以不局限于约束关系表的表现形态,还可以通过其他数据结构来呈现。
在一些实施例中,确定计算图中每个张量数据各自对应的约束关系的实现过程可以包括:判断第一张量数据的所有消费节点是否为第二张量数据的生产节点的上游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。
在一些实施例中,确定计算图中每个张量数据各自对应的约束关系的实现过程可以包括:判断第二张量数据的所有消费节点是否为所述第一张量数据的生产节点的下游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。
在本申请中,张量数据A可以复用为张量数据B分配的至少一部分内存空间是指,张量数据A可以完全复用为张量数据B分配的内存空间,或者,张量数据A可以复用为张量数据B分配的一部分内存空间。
在本申请中,节点A是节点B的上游节点是指,在计算图中存在至少一条路径可以从节点A到节点B。例如,可以在计算图中,以节点B为起点,通过反向遍历的方式(也即:沿着有向边的反方向)获取节点B对应的上游节点。
在一些实施例中,确定计算图中每个张量数据需要占用的内存空间大小的实现过程可以包括:终端设备运行神经网络,记录神经网络中每个张量数据需要占用的内存空间大小,根据记录的每个张量数据需要占用的内存空间大小来确定神经网络处于运行状态时,每个张量数据需要占用的内存空间大小,为后续给张量数据分配相应的内存空间提供了基础。比如,整个神经网络包括节点1和节点2,终端设备通过人工智能处理器运行该神经网络,可记录在神经网络运行过程中,张量数据1需要占用的内存空间大小为1000Kb,张量数据2需要占用的内存空间大小为500Kb,从而可以根据记录的每个张量数据需要占用的内存空间大小来确定神经网络处于运行状态时,每个张量数据需要占用的内存空间大小。
此外需要说明的是,在本申请中,默认每个张量数据均有自身对应的标识,以图1b所示的计算图为例,在该计算图中包括8个算子和9个张量数据,其中,9个张量数据可以表示为张量数据t0、张量数据t1、张量数据t2、张量数据t3、张量数据t4、张量数据t5、张量数据t6、张量数据t7和张量数据t8。可以理解的是,每个张量数据各自对应的标识具有唯一性。
在一些实施例中,上述标识可以为一系列有顺序的号码,从而可以根据每个张量数据各自对应的标识确定张量数据的顺序。
在一些实施例中,可以根据每个张量数据对应的约束关系获取M个张量数据各自对应的约束量,该约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;之后,根据M个张量数据各自对应的约束量的大小,对M个张量数据按照从大到小排序,得到M个张量数据的排序结果。
在一些实施例中,可以根据M个张量数据各自对应的消费节点数量的大小,对M个张量数据按照从大到小排序,得到M个张量数据的排序结果。
可以理解的是,还可以根据每个张量数据的信息中的至少两种对M个张量数据按照从大到小排序,得到M个张量数据的排序结果。例如,以每个张量数据的信息包括每个张量数据需要占用的内存空间大小和每个张量数据各自对应的约束关系为例,计算图中包括2个张量数据,分别为张量数据1和张量数据2,其中,张量数据1需要占用的内存空间大小为1000Kb,张量数据1与张量数据2之间的约束关系为张量数据1不可以与张量数据2复用同一个内存空间,其约束量为1;张量数据1需要占用的内存空间大小为500Kb,张量数据2与张量数据1之间的约束关系为张量数据2不可以与张量数据1复用同一个内存空间,其约束量为1。对上述2个张量数据按照从大到小进行排序,得到的排序结果:张量数据1、张量数据2。
在一些实施例中,可以通过启发式算法对M个张量数据进行排序,以在预设时间段内获取M个张量数据的排序结果。这里,启发式算法是指,一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被预计。
如前所述,每个张量数据的信息包括每个张量数据各自对应的标识之外,还可以包括如下的一项或多项:每个张量数据需要占用的内存空间大小、每个张量数据各自对应的约束关系、每个张量数据流向的消费节点数量。在终端设备通过启发式算法对M个张量数据进行排序时,需要考虑每个张量数据所包含的信息之间的顺序,然后,以该顺序作为一个独立的个体进行排序。例如,当每个张量数据的信息包括每个张量数据各自对应的标识、每个张量数据需要占用的内存空间大小、每个张量数据各自对应的约束关系和每个张量数据流向的消费节点数量的情况下,这4个信息之间的混合排序结果可以包括632种。
举例来说,计算图中包括4个张量数据,分别为张量数据1、张量数据2、张量数据3、张量数据4和张量数据5,终端设备通过上述启发式算法对5个张量数据进行排序,获取在预设时间段内启发式算法确定的排序序列(例如,该排序序列为:张量数据2、张量数据3、张量数据4、张量数据1和张量数据5)为5个张量数据的排序结果。从而,终端设备可以根据确定好的排序结果为张量数据分配内存空间。
在一些实施例中,内存分配装置可以通过约束规划求解器CPsolver(ConstraintProgrammingsolver)调用启发式算法(例如,启发式算法包括确定性算法和随机算法)来进行M个张量数据排序。需要说明的是,上述排序结果可能为需要优化的排序结果,也可能为不需要优化的排序结果。
在一些实施例中,为了节省内存,上述排序结果为优化后的排序结果,其中,优化后的排序结果对应的神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的神经网络需要占用的最大内存大小。例如,计算图中包括4个张量数据,分别为张量数据1、张量数据2、张量数据3、张量数据4和张量数据5,其中,张量数据1、张量数据2、张量数据3、张量数据4之间的排列顺序依次为:张量数据1、张量数据2、张量数据3、张量数据4,在该排序结果中,如图4c所示,张量数据5存在4种可能的位置(可能位置1、可能位置2、可能位置3以及可能位置4),其中,可能位置1为介于张量数据1和张量数据2之间的位置;可能位置2为介于张量数据2和张量数据3之间的位置;可能位置3为介于张量数据3和张量数据4之间的位置;可能位置4为位于张量数据4之后的位置。如图4c所示,上述4个潜在的可能位置各自对应着不同的内存空间。基于上述潜在的可能位置,内存分配装置根据不同的判断条件来确定张量数据5的位置,其中,该判断条件可以包括但不限于:对某一个张量数据来说,为该张量数据分配的内存空间对应的首地址最小或最大;对某一个张量数据来说,确定潜在可能位置对应的内存空间大小与张量数据需要占用的内存空间大小之间的差值满足阈值,例如,该阈值可以为0,也可以为其他数值。在该阈值为0的情况下,表示潜在可能位置对应的内存空间大小等于张量数据需要占用的内存空间大小。当张量数据5在排序结果中的位置为可能位置1时,终端设备根据该排序结果为张量数据分配内存空间,例如,通过已分配的内存空间确定运行整个神经网络需要的最大内存大小为4500Kb;当张量数据5在排序结果中的位置为可能位置2时,终端设备根据该排序结果为张量数据分配内存空间,例如,通过已分配的内存空间确定运行整个神经网络需要的最大内存大小为3500Kb;当张量数据5在排序结果中的位置为可能位置3时,终端设备根据该排序结果为张量数据分配内存空间,例如,通过已分配的内存空间确定运行整个神经网络需要的最大内存大小为5000Kb;当张量数据5在排序结果中的位置为可能位置4时,终端设备根据该排序结果为张量数据分配内存空间,例如,通过已分配的内存空间确定运行整个神经网络需要的最大内存大小为4000Kb。
下面结合具体的实例阐述如何为张量数据分配内存空间的:
在一些实施例中,以图1b所示的计算图为例,计算子任务0中包含节点a和节点c,其执行顺序为节点a-节点c;计算子任务1中包含节点b、节点d、节点e和节点f,其执行顺序为节点b-节点d/e-节点f;计算子任务2中包含节点g和节点h,其执行顺序为节点g-节点h。其中,计算子任务0、计算子任务1和计算子任务2之间的执行关系为并行。由于在每个计算子任务中,相邻两个节点之间均有有向边,此时,无需对该计算图进行调整。
其次,在该计算图中,确定每个节点对应的上游节点,每个节点对应的输出张量数据以及输入张量数据。以节点A为节点B的上游节点为例,表示在计算图中,存在至少一条路径可以从节点A到节点B。具体地,每个节点对应的上游节点,每个节点对应的输出张量数据以及输入张量数据可以如表1所示:
节点 | 上游节点 | 输出张量数据 | 输入张量数据 |
a | - | t0,t1 | - |
b | a | t2,t3 | t0 |
c | a | t4 | t0 |
d | a,b | t5 | t2 |
e | a,b | t6 | t3 |
f | a,b,c,d,e | t7 | t5,t6,t4 |
g | a,c | t8 | t4 |
h | a,b,c,d,e,f,g | - | t1,t7,t8 |
表1
如表1所示,在图1b所示的计算图中,以节点a为例,节点a为起始节点,没有对应的上游节点,节点a在运算的过程中,可以得到输出张量数据t0和输出张量数据t1。又例如,以节点b为例,节点a为节点b的上游节点,这表示在计算图中存在一条路径从节点a到节点b,节点b在运算的过程中,其输入张量数据为t0,可以得到输出张量数据t2和输出张量数据t3。关于确定其他节点对应的上游节点,输出张量数据以及输入张量数据的实现过程,此处不多加赘述。
之后,确定每个张量数据各自对应的约束关系。例如,可以判断第一张量数据的所有消费节点是否为第二张量数据的生产节点的上游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。又例如,可以判断第二张量数据的所有消费节点是否为所述第一张量数据的生产节点的下游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。
具体地,上述约束关系可以承载于约束关系表,在该约束关系表中,可以通过第一值指示各张量数据可以与其他张量数据复用同一个内存空间,通过第二值指示各张量数据不可以与其他张量数据复用同一个内存空间,通过第三值指示各张量数据可以与其他张量数据在同一个内存空间中进行连续存储。出于阐述的便利,通过第一值“0”指示张量数据可以与除自身之外的其他张量数据复用同一个内存空间;通过第二值“1”指示张量数据不可以与除自身之外的其他张量数据复用同一个内存空间;通过第三值“2”指示张量数据可以与除自身之外的其他张量数据在同一个内存空间中进行连续存储。需要说明的是,上述描述只是一种示例,不应构成限定。具体地,该约束关系表可以表示为如表2所示:
t0 | t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8 | |
t0 | - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
t1 | 1 | - | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
t2 | 1 | 1 | - | 1 | 1 | 1 | 0 | 0 | 1 |
t3 | 1 | 1 | 0 | - | 1 | 0 | 1 | 0 | 1 |
t4 | 1 | 1 | 1 | 1 | - | 1 | 1 | 1 | 1 |
t5 | 1 | 1 | 1 | 0 | 1 | - | 0 | 1 | 1 |
t6 | 1 | 1 | 0 | 1 | 1 | 0 | - | 1 | 1 |
t7 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 2 | - |
t8 | 1 | 2 | 1 | 1 | 1 | 1 | 1 | - | 1 |
表2
需要说明的是,在考虑是否复用内存空间的情况下,两两张量数据之间的约束关系是对称的,该对称性体现在:与自身的逆关系完全相同的那种关系。如表2所示,以确定张量数据t2与张量数据t8之间的约束关系为例,在图1b所示的计算图中,张量数据t7的生产节点为f,张量数据t2的消费节点为d,由于张量数据t2的消费节点d是张量数据t7的生产节点f的上游节点,此时,可以确定张量数据t7可以与张量数据t2复用同一个内存空间。在图1b所示的计算图中,在计算子任务1内,节点b为控制选择节点,该节点有两条分支,一条分支为:节点b-节点d-节点f;一条分支为:节点b-节点e-节点f。在神经网络的一次运算中,只有一条分支是有效的。对张量数据t2和张量数据t3来说,张量数据t2与张量数据t3之间的约束关系为张量数据t2和张量数据t3并不需要两个独立的内存空间,也即:可以复用同一个内存空间;对张量数据t5和张量数据t6来说,张量数据t5与张量数据t6之间的约束关系为张量数据t5和张量数据t6并不需要两个独立的内存空间,也即:可以复用同一个内存空间。
还需要说明的是,在考虑将多个张量数据存储在同一个连续的内存空间的情况下,两两张量数据之间的约束关系是不对称的。此时,需要考虑两两内存空间之间的有序性。
之后,以每个张量数据的信息包括每个张量数据需要占用的内存空间大小和每个张量数据各自对应的约束关系为例,根据每个张量数据需要占用的内存空间大小和每个张量数据各自对应的约束量的大小,对M个张量数据按照从大到小进行排序,得到M个张量数据的排序结果。在排序时,可以将约束关系为在同一个内存空间中进行连续存储的多个张量数据作为一个独立的整体进行排序。
具体地,基于表2所示的约束关系,可以得到每个张量数据各自对应的约束量,例如,对张量数据t0来说,张量数据t0不可以与其他张量数据(t1、t2、t3、t4、t5、t6、t7、t8)复用同一个内存空间,其约束量为8;对张量数据t1来说,张量数据t1不可以与其他张量数据(t0、t2、t3、t4、t5、t6、t7、t8)复用同一个内存空间,其约束量为8;对张量数据t2来说,张量数据t2不可以与张量数据(t0、t1、t3、t4、t5、t8)复用同一个内存空间,其约束量为6;对张量数据t3来说,张量数据t3不可以与张量数据(t0、t1、t4、t6、t8)复用同一个内存空间,其约束量为5;对张量数据t4来说,张量数据t4不可以与张量数据(t0、t1、t2、t3、t5、t6、t7、t8),其约束量为8;对张量数据t5来说,张量数据t5不可以与张量数据(t0、t1、t2、t4、t7、t8)复用同一个内存空间,其约束量为6;对张量数据t6来说,张量数据t6不可以与张量数据(t0、t1、t3、t4、t7、t8),其约束量为6;对张量数据t7来说,张量数据t7不可以与张量数据(t0、t1、t4、t5、t6),其约束量为5;对张量数据t8来说,张量数据t8不可以与张量数据(t0、t2、t3、t4、t5、t6、t7),其约束量为7。
进一步地,张量数据t0需要占用的内存空间大小为500Kb;张量数据t1需要占用的内存空间大小为500Kb;张量数据t2需要占用的内存空间大小为500Kb;张量数据t3需要占用的内存空间大小为500Kb;张量数据t4需要占用的内存空间大小为500Kb;张量数据t5需要占用的内存空间大小为1000Kb;张量数据t6需要占用的内存空间大小为1000Kb;张量数据t7需要占用的内存空间大小为1000Kb;张量数据t8需要占用的内存空间大小为1000Kb。
从而可以对上述9个张量数据按照从大到小进行排序,该排序结果可以如表3所示:
t1,t8,t7 | t5 | t6 | t0 | t4 | t2 | t3 |
表3
需要说明的是,在排序时,将约束关系为在同一个内存空间中进行连续存储的多个张量数据作为一个单独的整体进行排序的方法只是一种示例,不应构成限定。在实际应用中,还可以将每个张量数据作为一个单独的整体进行排序。
那么,在这种情况下,首先,分配第一内存空间给张量数据t1、t7和t8,此时,已分配的内存空间包括第一内存空间;其中,第一内存空间包括内存空间a,第二内存空间b和第三内存空间c,内存空间a,内存空间b和内存空间c为连续的内存空间,其中,内存空间a用于存储张量数据t1(也即:内存空间a的大小等于张量数据t1的大小),内存空间b用于存储张量数据t7(也即:内存空间b的大小等于张量数据t7的大小),内存空间c用于存储张量数据t8(也即:内存空间c的大小等于张量数据t8的大小);之后,为张量数据t5分配内存空间,该实现过程可以包括:结合表2中张量数据t5与其他张量数据之间的约束关系判断张量数据t5是否可复用已分配的内存空间(第一内存空间),由于张量数据t5不可复用已分配的第一内存空间,此时,根据张量数据t5需要的内存空间大小为张量数据t5分配相应大小的第二内存空间,此时,已分配的内存空间包括第一内存空间和第二内存空间。之后,为张量数据t6分配内存空间,该实现过程可以包括:结合表2中张量数据t6与其他张量数据之间的约束关系判断张量数据t6是否可复用已分配的内存空间(第一内存空间和第二内存空间),由于张量数据t6可以复用第二内存空间,将第二内存空间分配给张量数据t6。之后,为张量数据t0分配内存空间,该实现过程可以包括:结合表2中张量数据t0与其他张量数据之间的约束关系判断张量数据t0是否可复用已分配的内存空间(第一内存空间和第二内存空间),由于张量数据t0不可复用已分配的内存空间,此时,根据张量数据t0需要占用的内存空间大小为张量数据t0分配相应大小的第三内存空间,在这种情况下,已分配的内存空间包括第一内存空间、第二内存空间和第三内存空间。之后,为张量数据t4分配内存空间,该实现过程可以包括:结合表2中张量数据t4与其他张量数据之间的约束关系判断张量数据t4是否可复用已分配的内存空间(第一内存空间、第二内存空间和第三内存空间),由于张量数据t4不可复用已分配的内存空间,此时,根据张量数据t4需要占用的内存空间大小为张量数据t4分配相应大小的第四内存空间,在这种情况下,已分配的内存空间包括第一内存空间、第二内存空间、第三内存空间和第四内存空间。之后,为张量数据t2分配内存空间,该实现过程可以包括:结合表1中张量数据t2与其他张量数据之间的约束关系判断张量数据t2是否可复用已分配的内存空间(第一内存空间、第二内存空间、第三内存空间和第四内存空间),由于张量数据t2可复用第一内存空间,将第一内存空间分配给张量数据t2(例如,可以将第一内存空间中的内存空间c分配给张量数据t2)。之后,为张量数据t3分配内存空间,该实现过程可以包括:结合表2中张量数据t3与其他张量数据之间的约束关系判断张量数据是否可复用已分配的内存空间(第一内存空间、第二内存空间、第三内存空间和第四内存空间),由于张量数据可复用第一内存空间,将第一内存空间分配给张量数据t3(例如,可以将第一内存空间中的内存空间c分配给张量数据t3)。具体地,该分配过程可以如图4d所示。可以理解的是,通过这一实现方式,为每个张量数据均分配了一个独立的内存空间,张量数据与内存空间之间的关系为一一对应,也即:张量数据的数量与内存空间的数量是相同的。
可以理解的是,在上述分配内存空间的过程中,每个内存空间包括各自对应的首地址和存储空间大小。具体地,为每个张量数据分配的内存空间可以如表4所示:
标识 | 张量数据大小 | 首地址 | 存储空间大小 | 排序结果 |
张量数据t0 | 500 | 3500 | [3500,4000[ | 6 |
张量数据t1 | 500 | 0 | [0,500[ | 1 |
张量数据t2 | 500 | 1500 | [1500,2000[ | 8 |
张量数据t3 | 500 | 1500 | [1500,2000[ | 9 |
张量数据t4 | 500 | 4000 | [4000,4500[ | 7 |
张量数据t5 | 1000 | 2500 | [2500,3500[ | 4 |
张量数据t6 | 1000 | 2500 | [2500,3500[ | 5 |
张量数据t7 | 1000 | 1500 | [1500,2500[ | 3 |
张量数据t8 | 1000 | 500 | [500,1500[ | 2 |
表4
如表4所示,[3500,4000[表示包括3500-3999,不包括4000,其存储空间大小为500。
在一些实施例中,在确定了已分配的内存空间之后,通过已分配的内存空间,可以确定整个神经网络需要占用的最大内存大小。例如,基于图4d的分配过程,可以确定图1b所示的神经网络需要占用的最大内存大小为4500Kb。通过这一实现方式,可以确定计算机设备运行整个神经网络需要的最大内存大小,可以避免分配的内存无法支持神经网络正常运行的情形。
在一些实施例中,在为每个张量数据分配了相应的内存空间之后,根据每个张量数据各自对应的约束关系验证已分配的内存空间是否正确,若否,则重新为M个张量数据分配内存空间。例如,对张量数据t8来说,在第一内存空间中,判断张量数据t8对应的内存空间是否在张量数据t1对应的内存空间的右边,例如,如表4所示,张量数据t1对应的内存空间为[0,500[,张量数据t8对应的内存空间为[500,1500[,基于张量数据t1对应的内存空间以及张量数据t8对应的内存空间,可以确定张量数据t8对应的内存空间在张量数据t1对应的内存空间的右边,这意味着该分配是正确的。又例如,对张量数据t1、张量数据t7以及张量数据t8来说,判断张量数据t1、张量数据t8以及张量数据t7各自对应的内存空间是否为连续的内存空间,例如,如表4所示,张量数据t1、张量数据t8以及张量数据t7各自对应的内存空间为连续的内存空间,其中,第一内存空间为[0,500[,第二内存空间为[500,1500[,第三内存空间为[1500,2500[,基于张量数据t1、张量数据t8以及张量数据t7各自对应的存储空间,可以确定张量数据t1、张量数据t8以及张量数据t7各自对应的内存空间为一段连续的内存空间,这意味着该分配是正确的。通过这一实现方式,可以避免出现内存分配不合理的情形。例如,该内存分配不合理可以体现在:已分配的内存空间中出现与约束关系互斥的分配结果。
在一些实施例中,以图1b所示的计算图为例,计算子任务0中包含节点a和节点c,其执行顺序为节点a-节点c;计算子任务1中包含节点b、节点d、节点e和节点f,其执行顺序为节点b-节点d/e-节点f;计算子任务2中包含节点g和节点h,其执行顺序为节点g-节点h。其中,计算子任务0与计算子任务1之间的执行关系为并行,计算子任务1与计算子任务2之间的执行关系为串行。由于在计算图中的同一个计算子任务内,相邻两个节点之间均有有向边,此时,无需对每个计算子任务对应的计算图进行调整。针对执行关系为串行的两个计算子任务(例如,计算子任务1和计算子任务2),由于计算子任务1的最后一个节点f与计算子任务2的第一个节点g之间没有有向边,此时,在计算子任务1的最后一个节点f与计算子任务2的第一个节点g之间添加一条有向边,得到更新后的计算图如图4e所示。
其次,在该计算图中,确定每个节点对应的上游节点,每个节点对应的输出张量数据以及输入张量数据。具体地,每个节点对应的上游节点,每个节点对应的输出张量数据以及输入张量数据可以如表5所示:
节点 | 上游节点 | 输出张量数据 | 输入张量数据 |
a | - | t0,t1 | - |
b | a | t2,t3 | t0 |
c | a | t4 | t0 |
d | a,b | t5 | t2 |
e | a,b | t6 | t3 |
f | a,b,c,d,e | t7,t<sub>dep</sub> | t5,t6,t4 |
g | a,b,c,d,e,f | t8 | t4,t<sub>dep</sub> |
h | a,b,c,d,e,f,g | - | t1,t7,t8 |
表5
如表5所示,在图4e所示的计算图中,以节点f为例,由于在计算图中,存在如下路径:节点a-节点b-节点d-节点f,节点a-节点b-节点e-节点f,节点a-节点c-节点f,可以确定节点f的上游节点可以包括节点a、节点b、节点c、节点d、节点e。输入节点f的张量数据包括张量数据t5,张量数据t6以及张量数据t4,节点f输出的张量数据包括张量数据t7和张量数据tdep。关于确定其他节点对应的上游节点,输出张量数据以及输入张量数据的实现过程,此处不多加赘述。
之后,确定每个张量数据各自对应的约束关系。例如,可以判断第一张量数据的所有消费节点是否为第二张量数据的生产节点的上游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。又例如,可以判断第二张量数据的所有消费节点是否为所述第一张量数据的生产节点的下游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。
具体地,上述约束关系可以承载于约束关系表,在该约束关系表中,可以通过第一值指示各张量数据可以与其他张量数据复用同一个内存空间,通过第二值指示各张量数据不可以与其他张量数据复用同一个内存空间,通过第三值指示各张量数据可以与其他张量数据在同一个内存空间中进行连续存储。出于阐述的便利,通过第一值“0”指示张量数据可以与除自身之外的其他张量数据复用同一个内存空间;通过第二值“1”指示张量数据不可以与除自身之外的其他张量数据复用同一个内存空间;通过第三值“2”指示张量数据可以与除自身之外的其他张量数据在同一个内存空间中进行连续存储。需要说明的是,上述描述只是一种示例,不应构成限定。具体地,该数据结构可以表示为如表6所示:
t0 | t1 | t2 | t3 | t4 | t5 | t6 | t7 | t8 | |
t0 | - | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
t1 | 1 | - | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
t2 | 1 | 1 | - | 0 | 1 | 1 | 0 | 0 | 0 |
t3 | 1 | 1 | 0 | - | 1 | 0 | 1 | 0 | 0 |
t4 | 1 | 1 | 1 | 1 | - | 1 | 1 | 1 | 1 |
t5 | 1 | 1 | 1 | 0 | 1 | - | 0 | 1 | 0 |
t6 | 1 | 1 | 0 | 1 | 1 | 0 | - | 1 | 0 |
t7 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 2 | - |
t8 | 0 | 2 | 0 | 0 | 1 | 0 | 0 | - | 1 |
表6
需要说明的是,在考虑是否复用内存空间的情况下,两两张量数据之间的约束关系是对称的,该对称性体现在:与自身的逆关系完全相同的那种关系。如表2所示,以确定张量数据t2与张量数据t8之间的约束关系为例,在图4e所示的计算图中,张量数据t7的生产节点为f,张量数据t2的消费节点为d,由于张量数据t2的消费节点d是张量数据t7的生产节点f的上游节点,此时,可以确定张量数据t7可以与张量数据t2复用同一个内存空间。在图4e所示的计算图中,在计算子任务1内,节点b为控制选择节点,该节点有两条分支,一条分支为:节点b-节点d-节点f;一条分支为:节点b-节点e-节点f。在神经网络的一次运算中,只有一条分支是有效的。对张量数据t2和张量数据t3来说,张量数据t2与张量数据t3之间的约束关系为张量数据t2和张量数据t3并不需要两个独立的内存空间,也即:可以复用同一个内存空间;对张量数据t5和张量数据t6来说,张量数据t5与张量数据t6之间的约束关系为张量数据t5和张量数据t6并不需要两个独立的内存空间,也即:可以复用同一个内存空间。
还需要说明的是,在考虑将多个张量数据存储在连续的内存空间的情况,两两张量数据之间的约束关系是不对称的。进一步地,需要考虑两两内存空间之间的有序性。
之后,以每个张量数据的信息包括每个张量数据需要占用的内存空间大小和每个张量数据各自对应的约束关系为例,根据每个张量数据需要占用的内存空间大小和每个张量数据各自对应的约束量的大小,对M个张量数据按照从大到小进行排序,得到M个张量数据的排序结果。在排序时,可以将约束关系为在同一个内存空间中进行连续存储的多个张量数据作为一个独立的整体进行排序。
基于表6所示的约束关系,可以得到每个张量数据各自对应的约束量,例如,对张量数据t0来说,张量数据t0不可以与其他张量数据(t1、t2、t3、t4、t5、t6、t7)复用同一个内存空间,其约束量为7;对张量数据t1来说,张量数据t1不可以与其他张量数据(t0、t2、t3、t4、t5、t6、t7、t8)复用同一个内存空间,其约束量为8;对张量数据t2来说,张量数据t2不可以与张量数据(t0、t1、t4、t5)复用同一个内存空间,其约束量为4;对张量数据t3来说,张量数据t3不可以与张量数据(t0、t1、t4、t6)复用同一个内存空间,其约束量为4;对张量数据t4来说,张量数据t4不可以与张量数据(t0、t1、t2、t3、t5、t6、t7、t8),其约束量为8;对张量数据t5来说,张量数据t5不可以与张量数据(t0、t1、t2、t4、t7)复用同一个内存空间,其约束量为5;对张量数据t6来说,张量数据t6不可以与张量数据(t0、t1、t3、t4、t7),其约束量为5;对张量数据t7来说,张量数据t7不可以与张量数据(t0、t1、t4、t5、t6),其约束量为5;对张量数据t8来说,张量数据t8不可以与张量数据(t4、t8),其约束量为2。
进一步地,张量数据t0需要占用的内存空间大小为500Kb;张量数据t1需要占用的内存空间大小为500Kb;张量数据t2需要占用的内存空间大小为500Kb;张量数据t3需要占用的内存空间大小为500Kb;张量数据t4需要占用的内存空间大小为500Kb;张量数据t5需要占用的内存空间大小为1000Kb;张量数据t6需要占用的内存空间大小为1000Kb;张量数据t7需要占用的内存空间大小为1000Kb;张量数据t8需要占用的内存空间大小为1000Kb。
从而可以对上述9个张量数据按照从大到小进行排序,该排序结果可以如表7所示:
t1,t8,t7 | t5 | t6 | t0 | t4 | t2 | t3 |
表7
需要说明的是,在排序时,将约束关系为在同一个内存空间中进行连续存储的多个张量数据作为一个单独的整体进行排序的方法只是一种示例,不应构成限定。在实际应用中,还可以将每个张量数据作为一个单独的整体进行排序。
那么,在这种情况下,首先,分配第一内存空间给张量数据t1、t7和t8,此时,已分配包括第一内存空间;其中,第一内存空间包括内存空间a,内存空间b和内存空间c,内存空间a,内存空间b和内存空间c为连续的内存空间,其中,内存空间a用于存储张量数据t1(也即:内存空间a的大小等于张量数据t1的大小),内存空间b用于存储张量数据t8(也即:内存空间b的大小等于张量数据t8的大小),内存空间c用于存储张量数据t7(也即:内存空间c的大小等于张量数据t7的大小);之后,为张量数据t5分配内存空间,该实现过程可以包括:结合表7中张量数据t5与其他张量数据之间的约束关系判断张量数据t5是否可复用已分配的内存空间(第一内存空间),由于张量数据t5可以复用第一内存空间,将第二内存空间分配为张量数据t5(例如,可以将第一内存空间中的内存空间b分配给张量数据t5)。之后,为张量数据t6分配内存空间,该实现过程可以包括:结合表7中张量数据t6与其他张量数据之间的约束关系判断张量数据t6是否可复用已分配的内存空间(第一内存空间),由于张量数据t6可以复用第一内存空间,将第一内存空间分配为张量数据t6(例如,可以将第一内存空间中的内存空间b分配给张量数据t6)。之后,为张量数据t0分配内存空间,该实现过程可以包括:结合表7中张量数据t0与其他张量数据之间的约束关系判断张量数据t0是否可复用已分配的内存空间(第一内存空间),由于张量数据t0不可复用已分配的内存空间,此时,根据张量数据t0需要占用的内存空间大小为张量数据t0分配相应大小的第二内存空间,在这种情况下,已分配的内存空间包括第一内存空间和第二内存空间。之后,为张量数据t4分配内存空间,该实现过程可以包括:结合表7中张量数据t4与其他张量数据之间的约束关系判断张量数据t4是否可复用已分配的内存空间(第一内存空间和第二内存空间),由于张量数据t4不可复用已分配结合中的内存空间,此时,根据张量数据t4需要占用的内存空间大小为张量数据t4分配相应大小的第三内存空间,在这种情况下,已分配的内存空间包括第一内存空间、第二内存空间和第三内存空间。之后,为张量数据t2分配内存空间,该实现过程可以包括:结合表7中张量数据t2与其他张量数据之间的约束关系判断张量数据t2是否可复用已分配的内存空间(第一内存空间、第二内存空间和第三内存空间),由于张量数据t2可复用第一内存空间,将第一内存空间分配给张量数据t2(例如,可以将第一内存空间中的第三内内存空间分配给张量数据t2)。之后,为张量数据t3分配内存空间,该实现过程可以包括:结合表7中张量数据t3与其他张量数据之间的约束关系判断张量数据是否可复用已分配的内存空间(第一内存空间、第二内存空间和第三内存空间),由于张量数据可复用第一内存空间,将第一内存空间分配给张量数据t3(例如,可以将第一内存空间中的第三内存空间分配给张量数据t3)。具体地,该分配过程可以如图4f所示。可以理解的是,通过这一实现方式,为每个张量数据均分配了一个独立的内存空间,张量数据与内存空间之间的关系为一一对应,也即:张量数据的数量与内存空间的数量是相同的。
可以理解的是,在上述分配内存空间的过程中,每个内存空间包括各自对应的首地址和存储空间大小。具体地,为每个张量数据分配的内存空间可以如表8所示:
标识 | 张量数据大小 | 首地址 | 存储空间大小 | 排序结果 |
t0 | 500 | 2500 | [2500,3000[ | 6 |
t1 | 500 | 0 | [0,500[ | 1 |
t2 | 500 | 1500 | [1500,2000[ | 8 |
t3 | 500 | 1500 | [1500,2000[ | 9 |
t4 | 500 | 3000 | [3000,3500[ | 7 |
t5 | 1000 | 500 | [500,1500[ | 4 |
t6 | 1000 | 500 | [500,1000[ | 5 |
t7 | 1000 | 1500 | [1500,2500[ | 3 |
t8 | 1000 | 500 | [500,1000[ | 2 |
表8
在一些实施例中,在确定了已分配的内存空间之后,通过已分配的内存空间,可以确定整个神经网络需要占用的最大内存大小。例如,图4e所示的神经网络需要占用的最大内存大小为3500Kb。通过这一实现方式,可以确定计算机设备运行整个神经网络需要的最大内存大小,可以避免分配的内存无法支持神经网络正常运行的情形。
在一些实施例中,在为每个张量数据分配了相应的内存空间之后,根据每个张量数据各自对应的约束关系验证已分配的内存空间是否正确,若否,则重新为M个张量数据分配内存空间。例如,对张量数据t8来说,在第一内存空间中,判断张量数据t8对应的内存空间是否在张量数据t1对应的内存空间的右边,例如,如表4所示,张量数据t1对应的内存空间为[0,500[,张量数据t8对应的内存空间为[500,1000[,基于张量数据t1对应的内存空间以及张量数据t8对应的内存空间,可以确定张量数据t8对应的内存空间在张量数据t1对应的内存空间的右边,这意味着该分配是正确的。通过这一实现方式,可以避免出现内存分配不合理的情形。例如,该内存分配不合理可以体现在:已分配的内存空间中出现与约束关系互斥的分配结果。
在一些实施例中,以图1b所示的计算图为例,计算子任务0中包含节点a和节点c,其执行顺序为节点a-节点c;计算子任务1中包含节点b、节点d、节点e和节点f,其执行顺序为节点b-节点d/e-节点f;计算子任务2中包含节点g和节点h,其执行顺序为节点g-节点h。其中,计算子任务0、计算子任务1与计算子任务2之间的执行关系为并行。在计算图中的同一个计算子任务内,获取各节点的先后执行顺序,然后,根据各节点的先后执行顺序对同一个节点依次进行编码,得到每个节点对应的标识(例如,序号),在相邻两个节点中,前一个对应的标识小于后一个节点对应的标识。例如,以图1b中的计算子任务0为例,计算子任务0内每个节点的标识可以如表9所示:
表9
需要说明的是,表9所示的标识具有唯一性。
例如,若End ID大于Start ID,表示End ID对应的节点为Start ID对应的节点的上游节点。之后,确定每个张量数据各自对应的约束关系。关于如何根据每个张量数据的信息对M个张量数据进行排序,以及如何为张量数据分配内存空间的具体实现请参考前述描述,此处不多加赘述。
在一些实施例中,以图1b所示的计算图为例,计算子任务0中包含节点a和节点c,其执行顺序为节点a-节点c;计算子任务1中包含节点b、节点d、节点e和节点f,其执行顺序为节点b-节点d/e-节点f;计算子任务2中包含节点g和节点h,其执行顺序为节点g-节点h。其中,计算子任务0与计算子任务1之间的执行关系为并行,计算子任务1与计算子任务2之间的执行关系为串行。在计算图中的同一个计算子任务内,获取各节点的先后执行顺序,然后,根据各节点的先后执行顺序对同一个节点依次进行编码,得到每个节点对应的标识(例如,序号)。在执行关系为串行的至少两个计算子任务内,获取上述至少两个计算子任务内各节点的先后执行顺序,并根据各节点的先后执行顺序对上述至少两个计算子任务内的节点依次进行编码,得到每个节点各自对应的标识;在相邻两个节点中,前一个节点对应的标识小于后一个节点对应的标识。
例如,以图1b中的计算子任务2为例,计算子任务2内每个节点的标识可以如表10所示:
表10
需要说明的是,表10所示的标识具有唯一性。
例如,若End ID大于Start ID,表示End ID对应的节点为Start ID对应的节点的上游节点。之后,确定每个张量数据各自对应的约束关系。关于如何根据每个张量数据的信息对M个张量数据进行排序,以及如何为张量数据分配内存空间的具体实现请参考前述描述,此处不多加赘述。
在一些实施例中,神经网络对应的计算图中包含3个张量数据,分别可以表示为张量数据t000、张量数据t100和张量数据t200,其中,张量数据t000需要占用的内存空间大小为1000Kb,张量数据t100需要占用的内存空间大小为600Kb,张量数据t200需要占用的内存空间大小为450Kb。
进一步地,上述3个张量数据各自对应的约束关系可以如表11所示:
t000 | t100 | t200 | |
t000 | - | 0 | 0 |
t100 | 0 | - | 1 |
t200 | 0 | 1 | - |
表11
在表11所示的约束关系表中,通过第一值“0”表示张量数据可以除自身之外的其他数据复用同一个内存空间;通过第二值“1”表示张量数据不可以除自身之外的其他张量数据复用同一个内存空间。关于如何确定每个张量数据各自对应的约束关系,请参考前述描述,此处不多加赘述。
如表11所示,对张量数据t000来说,张量数据t000可以与张量数据t100复用同一个内存空间,也可以与张量数据t200复用同一个内存空间;对张量数据t100来说,张量数据t100可以与张量数据t000复用同一个内存空间,不可以与张量数据t200复用同一个内存空间;对张量数据t200来说,张量数据t200可以与张量数据t000复用同一个内存空间,不可以与张量数据t100复用同一个内存空间。
之后,根据每个张量数据各自需要占用的内存空间大小对上述3个张量数据按照从大到小进行排序,得到排序结果,具体地,该排序结果可以如表12所示:
t000 | t100 | t200 |
表12
那么,在这种情况下,内存分配装置为上述3个张量数据分配内存空间时,首先,创建第一内存空间,第一内存空间用于存储张量数据t000。例如,创建好的第一内存空间的首地址为a,其存储空间大小为张量数据t000需要占用的内存空间大小;之后,创建第二内存空间,第二内存空间用于存储张量数据t100。由于张量数据t100可以复用为张量数据t000分配的内存空间,此时,创建的第二内存空间的首地址为a(也即:与第一内存空间的首地址相同),其存储空间的大小为张量数据t100需要占用的内存空间。如前所述,张量数据t000需要占用的内存空间大小为1000Kb,张量数据t100需要占用的内存空间大小为600Kb,这意味着张量数据t100复用第一内存空间中的部分内存空间[a,600[。之后,创建第三内存空间,第三内存空间用于存储张量数据t200。由于张量数据t200可以复用为张量数据t000分配的内存空间[a,1000[,不可以复用为张量数据t100分配的内存空间[a,600[,因此,第三内存空间的首地址为600,其存储空间大小为张量数据t200需要占用的内存空间大小,这意味着张量数据t200复用第一内存空间中的部分内存空间[600,1000[。具体地,该分配过程可以如图4g所示。
需要说明的是,在一些实施例中,上述约束关系还可以体现在:张量数据分配的内存空间与除自身之外的其他张量数据分配的内存空间是非连续的内存空间(例如,为张量数据废品内存空间1,为张量数据2分配内存空间2,其中,内存空间1和内存空间2之间存在空间间隔),张量数据是否与除自身之外的其他张量数据满足空间同位约束,其中,空间同位约束体现在:第i张量数据不可以与第j张量数据复用同一个内存空间,第i张量数据可以与第k张量数据复用同一个内存空间,则第i张量数据不可以与第l张量数据复用同一个内存空间,其中,第l张量数据为第j张量数据与第k张量数据之间产生重叠的张量数据,等等。
实施本申请实施例,内存分配装置基于M个张量数据的排序结果依次为每个张量数据分配相应大小的内存空间,相较于现有技术中,按照整个神经网络运行的前后顺序,进行内存空间的分配和复用,可以避免出现内存分配不合理现象,从而可节省整个神经网络需要占用的内存,优化了神经网络的内存分配。
请参见图5,为本申请实施例提供的一种神经网络的内存分配方法的流程示意图。该方法的执行主体可以为运行神经网络的服务器,也可以为运行神经网络的终端设备。出于阐述的便利,以执行主体为运行神经网络的终端设备为例,进行说明。在图5所示的方法流程示意图中,可设定整个神经网络在运行时,需要多个内存空间。如图5所示,该方法可以包括但不限于如下步骤:
步骤S501、获取神经网络对应的计算图;其中,计算图包括N个节点和连接不同节点的有向边,计算图的有向边上承载有张量数据,计算图中包括M个张量数据,M为大于1的整数。
关于步骤S501的具体实现,请参考前述描述,此处不多加赘述。
步骤S502、基于每个张量数据对应的约束关系,按照所述M个张量数据在所述神经网络中的执行顺序,依次给所述M个张量数据分配内存空间。
在本申请实施例中,确定计算图中每个张量数据各自对应的约束关系的实现过程可以包括:可以判断第一张量数据的所有消费节点是否为第二张量数据的生产节点的上游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。又例如,可以判断第二张量数据的所有消费节点是否为所述第一张量数据的生产节点的下游节点,若是,则确定第一张量数据可以复用为第二张量数据分配的内存空间;若否,则确定第一张量数据不可以复用为第二张量数据分配的内存空间。
在本申请实施例中,上述方法可以应用于多个计算子任务并行的场景(例如,多个计算子任务之间的执行关系为全部并行;又例如,多个计算子任务之间的执行关系包括串行和并行),终端设备获取每个张量数据各自对应的约束关系,之后,结合神经网络中张量数据的执行顺序以及每个张量数据各自对应的约束关系依次为张量数据分配内存,可以避免在并行场景下,不同计算子任务中因算子复用同一个内存空间而带来的算子运算结果出错的情形,可以保证神经网络的计算结果的准确性。
上文图1a-图5详细描述了本申请实施例涉及的内存分配方法。下面结合附图介绍本申请实施例涉及的装置。
图6为本申请实施例中一种内存分配装置60的结构示意图。图6所示的内存分配装置60可以包括:
获取计算图单元600,用于获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;分配单元602,用于基于所述M个张量数据的排序结果,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述排序结果指示为所述M个张量数据分配内存空间时的顺序,所述排序结果与所述M个张量数据中每个张量数据的信息有关,所述每个张量数据的信息指示以下信息中的至少一种:所述每个张量数据对应的约束关系以及所述每个张量数据流向的节点的数量,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间分别与所述M个张量数据中的其他张量数据的可用内存空间的关系。在一种可能的实现方式中,所述分配单元606,还用于:若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
在一种可能的实现方式中,所述约束关系指示以下至少一种关系:一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
在一种可能的实现方式中,所述约束关系承载于约束关系表,所述约束关系表中包括所述M个数据张量的标识,在所述约束关系表中,通过第一值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,通过第二值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,通过第三值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
在一种可能的实现方式中,在第一张量数据的所有消费节点是第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据可以复用为所述第二张量数据分配的内存空间;在所述第一张量数据的所有消费节点不是所述第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点不是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据不可以复用为所述第二张量数据分配的内存空间;所述第一张量数据和所述第二张量数据为所述M个张量数据中任意的两个;所述消费节点为张量数据流向的节点,所述生产节点为张量数据流出的节点。
在一种可能的实现方式中,所述计算图包括多个计算子任务,所述计算子任务通过一组节点和与所述一组节点有关的边指示一种计算功能,所述多个计算子任务之间的执行关系为并行执行;所述装置还包括:
更新计算图单元604,用于在一个所述计算子任务中,若相邻两个节点之间没有有向边,则在所述相邻两个节点之间添加有向边,以更新所述计算图;其中,添加的每条有向边上承载有相应的张量数据;所述相邻两个节点为所述计算子任务中执行顺序相邻的两个节点;
获取信息单元606,用于基于所述更新后的计算图,获取每个张量数据的信息。
在一种可能的实现方式中,所述计算图还包括执行关系为串行的第一计算子任务和第二计算子任务,所述第一计算子任务的执行顺序在所述第二计算子任务之前;所述更新计算图单元604,还用于:
若第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间没有有向边,则在所述第一计算子任务的最后一个节点与所述第二计算子任务的第一个节点之间添加有向边。
在一种可能的实现方式中,在所述计算图中,张量数据的生产节点的标识小于所述张量数据的消费节点的标识;所述张量数据的生产节点与所述张量数据的消费节点为相邻的两个节点。
在一种可能的实现方式中,所述计算图中各节点的标识用于确定所述M个张量数据中每个张量数据的信息。
在一种可能的实现方式中,所述每个张量数据的信息指示所述每个张量数据对应的约束关系,所述装置还包括:
第一排序单元608,用于根据所述每个张量数据对应的约束关系获取所述M个张量数据各自对应的约束量;所述约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;根据所述M个张量数据各自对应的约束量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
在一种可能的实现方式中,所述每个张量数据的信息指示所述每个张量数据流向的节点的数量,所述装置还包括:
第二排序单元6010,用于根据所述M个张量数据各自对应的消费节点数量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
在一种可能的实现方式中,所述装置还包括:
第三排序单元6012,用于基于所述每个张量数据的信息使用启发式算法对所述M个张量数据进行排序,以在预设时间段内获取所述M个张量数据的排序结果。
在一种可能的实现方式中,所述排序结果是优化后的排序结果,其中,所述优化后的排序结果对应的所述神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的所述神经网络需要占用的最大内存大小。
本申请实施例中,各个的单元的具体实现可以参见上述实施例中的相关描述,此处不再赘述。
实施本申请实施例,内存分配装置根据每个张量数据的信息获取M各张量数据的排序结果,从而根据该排序结果为每个张量数据分配相应大小的内存空间,相较于现有技术中,按照整个神经网络运行的前后顺序,进行内存空间的分配和复用,可以避免出现内存分配不合理现象,从而可节省整个神经网络需要占用的内存,优化了神经网络的内存分配。
如图7所示,本申请实施例提供的一种内存分配装置70,该内存分配装置70可具体为终端设备或服务器。在一些实施例中,内存分配装置70可以具体为服务器中的中控模块,或者其功能由服务器中的中控模块实现。在一些实施例中,内存分配装置70可以具体为终端设备中的中控模块,或者其功能由终端设备中的中控模块实现。如图7所示,该内存分配装置可以包括处理器701、存储器702、通信总线703和通信接口704,处理器701通过通信总线连接存储器702和通信接口703。
处理器701可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(Graphics Processing Unit,GPU)、神经网络处理器(Network Processing Unit,NPU)或者一个或多个集成电路,用于执行相关程序,以执行本申请方法实施例的所描述的内存分配方法。
处理器701还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的内存分配方法的各个步骤可以通过处理器701中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器701还可以是通用处理器、数字信号处理器(Digital SignalProcessing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(Field Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器701,处理器701读取存储器702中的信息,结合其硬件执行本申请方法实施例的内存分配方法。
存储器702可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器702可以存储程序和数据,例如本申请实施例中内存分配方法的程序等。当存储器701中存储的程序被处理器702执行时,处理器701和通信接口704用于执行本申请实施例的内存分配方法的各个步骤。
例如,本申请实施例中用于实现本申请实施例中内存分配方法的程序等。
通信接口704使用例如但不限于收发器一类的收发装置,来实现内存分配装置700与其他设备或通信网络之间的通信。例如,可以通过通信接口704获取训练好的神经网络,以实现与执行设备、客户设备、用户设备或者终端设备等的信息交互。
可选地,该内存分配装置还可以包括人工智能处理器705,人工智能处理器705可以是神经网络处理器(Network Processing Unit,NPU),张量处理器(Tensor ProcessingUnit,TPU),或者图形处理器(Graphics Processing Unit,GPU)等一切适合用于大规模异或运算处理的处理器。人工智能处理器705可以作为协处理器挂载到主CPU(Host CPU)上,由主CPU为其分配任务。人工智能处理器705可以实现上述内存分配方法中涉及的一种或多种运算。例如,以NPU为例,NPU的核心部分为运算电路,通过控制器控制运算电路提取存储器702中的矩阵数据并进行乘加运算。
处理器701用于调用存储器中的数据和程序代码,执行:
获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;
基于所述M个张量数据的排序结果,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述排序结果指示为所述M个张量数据分配内存空间时的顺序,所述排序结果与所述M个张量数据中每个张量数据的信息有关,所述每个张量数据的信息指示以下信息中的至少一种:所述每个张量数据对应的约束关系以及所述每个张量数据流向的节点的数量,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间分别与所述M个张量数据中的其他张量数据的可用内存空间的关系。
其中,所述处理器701还用于:
若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
其中,所述约束关系指示以下至少一种关系:一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
其中,所述约束关系承载于约束关系表,所述约束关系表中包括所述M个数据张量的标识,在所述约束关系表中,通过第一值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,通过第二值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,通过第三值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
其中,在第一张量数据的所有消费节点是第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据可以复用为所述第二张量数据分配的内存空间;在所述第一张量数据的所有消费节点不是所述第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点不是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据不可以复用为所述第二张量数据分配的内存空间;所述第一张量数据和所述第二张量数据为所述M个张量数据中任意的两个;所述消费节点为张量数据流向的节点,所述生产节点为张量数据流出的节点。
其中,所述计算图包括多个计算子任务,所述计算子任务通过一组节点和与所述一组节点有关的边指示一种计算功能,所述多个计算子任务之间的执行关系为并行执行;所述处理器701还用于:
在一个所述计算子任务中,若相邻两个节点之间没有有向边,则在所述相邻两个节点之间添加有向边,以更新所述计算图;其中,添加的每条有向边上承载有相应的张量数据;所述相邻两个节点为所述计算子任务中执行顺序相邻的两个节点;
基于所述更新后的计算图,获取每个张量数据的信息。
其中,所述计算图还包括执行关系为串行的第一计算子任务和第二计算子任务,所述第一计算子任务的执行顺序在所述第二计算子任务之前;所述处理器701更新所述计算图,还包括:
若第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间没有有向边,则在所述第一计算子任务的最后一个节点与所述第二计算子任务的第一个节点之间添加有向边
其中,在所述计算图中,张量数据的生产节点的标识小于所述张量数据的消费节点的标识;所述张量数据的生产节点与所述张量数据的消费节点为相邻的两个节点。
其中,所述计算图中各节点的标识用于确定所述M个张量数据中每个张量数据的信息。
其中,所述每个张量数据的信息指示所述每个张量数据对应的约束关系,所述处理器701还用于:
根据所述每个张量数据对应的约束关系获取所述M个张量数据各自对应的约束量;所述约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;
根据所述M个张量数据各自对应的约束量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
其中,所述每个张量数据的信息指示所述每个张量数据流向的节点的数量,所述处理器701还用于:
根据所述M个张量数据各自对应的消费节点数量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
所述处理器701还用于:
基于所述每个张量数据的信息使用启发式算法对所述M个张量数据进行排序,以在预设时间段内获取所述M个张量数据的排序结果。
其中,所述排序结果是优化后的排序结果,其中,所述优化后的排序结果对应的所述神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的所述神经网络需要占用的最大内存大小。
应理解,各个器件的实现还可以对应参照上述内存分配方法实施例中的相应描述,本申请实施例不再赘述。
本申请实施例还提供了一种计算机存储介质,该计算机可读存储介质中存储有指令,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个实施例所述方法中的一个或多个步骤。上述装置的各组成模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在所述计算机可读取存储介质中,基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机产品存储在计算机可读存储介质中。
上述计算机可读存储介质可以是前述实施例所述的设备的内部存储单元,例如硬盘或内存。上述计算机可读存储介质也可以是上述设备的外部存储设备,例如配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,上述计算机可读存储介质还可以既包括上述设备的内部存储单元也包括外部存储设备。上述计算机可读存储介质用于存储上述计算机程序以及上述设备所需的其他程序和数据。上述计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可通过计算机程序来指令相关的硬件来完成,该计算机的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可存储程序代码的介质。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
可以理解,本领域普通技术人员可以意识到,结合本申请各个实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本领域技术人员能够领会,结合本申请各个实施例中公开描述的各种说明性逻辑框、模块和算法步骤所描述的功能可以硬件、软件、固件或其任何组合来实施。如果以软件来实施,那么各种说明性逻辑框、模块、和步骤描述的功能可作为一或多个指令或代码在计算机可读媒体上存储或传输,且由基于硬件的处理单元执行。计算机可读媒体可包含计算机可读存储媒体,其对应于有形媒体,例如数据存储媒体,或包括任何促进将计算机程序从一处传送到另一处的媒体(例如,根据通信协议)的通信媒体。以此方式,计算机可读媒体大体上可对应于(1)非暂时性的有形计算机可读存储媒体,或(2)通信媒体,例如信号或载波。数据存储媒体可为可由一或多个计算机或一或多个处理器存取以检索用于实施本申请中描述的技术的指令、代码和/或数据结构的任何可用媒体。计算机程序产品可包含计算机可读媒体。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (32)
1.一种内存分配方法,其特征在于,包括:
获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;
基于所述M个张量数据的排序结果,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述排序结果指示为所述M个张量数据分配内存空间时的顺序,所述排序结果与所述M个张量数据中每个张量数据的信息有关,所述每个张量数据的信息指示以下信息中的至少一种:所述每个张量数据对应的约束关系以及所述每个张量数据流向的节点的数量,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间分别与所述M个张量数据中的其他张量数据的可用内存空间的关系。
2.如权利要求1所述的方法,其特征在于,若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
3.如权利要求1或2所述的方法,其特征在于,所述约束关系指示以下至少一种关系:一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
4.如权利要求3所述的方法,其特征在于,所述约束关系承载于约束关系表,所述约束关系表中包括所述M个数据张量的标识,在所述约束关系表中,通过第一值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,通过第二值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,通过第三值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
5.如权利要求1-4任一项所述的方法,其特征在于,在第一张量数据的所有消费节点是第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据可以复用为所述第二张量数据分配的内存空间;在所述第一张量数据的所有消费节点不是所述第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点不是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据不可以复用为所述第二张量数据分配的内存空间;所述第一张量数据和所述第二张量数据为所述M个张量数据中任意的两个;所述消费节点为张量数据流向的节点,所述生产节点为张量数据流出的节点。
6.如权利要求1-5任一项所述的方法,其特征在于,所述计算图包括多个计算子任务,所述计算子任务通过一组节点和与所述一组节点有关的边指示一种计算功能,所述多个计算子任务之间的执行关系为并行执行;所述方法还包括:
在一个所述计算子任务中,若相邻两个节点之间没有有向边,则在所述相邻两个节点之间添加有向边,以更新所述计算图;其中,添加的每条有向边上承载有相应的张量数据;所述相邻两个节点为所述计算子任务中执行顺序相邻的两个节点;
基于所述更新后的计算图,获取每个张量数据的信息。
7.如权利要求6所述的方法,其特征在于,所述计算图还包括执行关系为串行的第一计算子任务和第二计算子任务,所述第一计算子任务的执行顺序在所述第二计算子任务之前;所述更新所述计算图,还包括:
若第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间没有有向边,则在所述第一计算子任务的最后一个节点与所述第二计算子任务的第一个节点之间添加有向边。
8.如权利要求1-5任一项所述的方法,其特征在于,在所述计算图中,张量数据的生产节点的标识小于所述张量数据的消费节点的标识;所述张量数据的生产节点与所述张量数据的消费节点为相邻的两个节点。
9.如权利要求8所述的方法,其特征在于,所述计算图中各节点的标识用于确定所述M个张量数据中每个张量数据的信息。
10.如权利要求1所述的方法,其特征在于,所述每个张量数据的信息指示所述每个张量数据对应的约束关系,所述方法还包括:
根据所述每个张量数据对应的约束关系获取所述M个张量数据各自对应的约束量;所述约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;
根据所述M个张量数据各自对应的约束量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
11.如权利要求1所述的方法,其特征在于,所述每个张量数据的信息指示所述每个张量数据流向的节点的数量,所述方法还包括:
根据所述M个张量数据各自对应的消费节点数量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
12.如权利要求1所的方法,其特征在于,所述方法还包括:
基于所述每个张量数据的信息使用启发式算法对所述M个张量数据进行排序,以在预设时间段内获取所述M个张量数据的排序结果。
13.如权利要求12所述的方法,其特征在于,所述排序结果是优化后的排序结果,其中,所述优化后的排序结果对应的所述神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的所述神经网络需要占用的最大内存大小。
14.一种内存分配方法,其特征在于,包括:
获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;
基于每个张量数据对应的约束关系,按照所述M个张量数据在所述神经网络中的执行顺序,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间与所述M个张量数据中的其他张量数据的可用内存空间的关系。
15.如权利要求14所述的方法,其特征在于,若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
16.一种内存分配装置,其特征在于,包括:
获取计算图单元,用于获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;
分配单元,用于基于所述M个张量数据的排序结果,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述排序结果指示为所述M个张量数据分配内存空间时的顺序,所述排序结果与所述M个张量数据中每个张量数据的信息有关,所述每个张量数据的信息指示以下信息中的至少一种:所述每个张量数据对应的约束关系以及所述每个张量数据流向的节点的数量,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间分别与所述M个张量数据中的其他张量数据的可用内存空间的关系。
17.如权利要求16所述的装置,其特征在于,所述分配单元,还用于:
若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
18.如权利要求16或17所述的装置,其特征在于,所述约束关系指示以下至少一种关系:一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
19.如权利要求18所述的装置,其特征在于,所述约束关系承载于约束关系表,所述约束关系表中包括所述M个数据张量的标识,在所述约束关系表中,通过第一值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是可复用,通过第二值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用,通过第三值指示一个张量数据的可用内存空间与另一个张量数据的可用内存空间的关系是不可复用且连续。
20.如权利要求16-19任一项所述的装置,在第一张量数据的所有消费节点是第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据可以复用为所述第二张量数据分配的内存空间;在所述第一张量数据的所有消费节点不是所述第二张量数据的生产节点的上游节点的情况下,或,在所述第二张量数据的所有消费节点不是所述第一张量数据的生产节点的下游节点的情况下,所述第一张量数据不可以复用为所述第二张量数据分配的内存空间;所述第一张量数据和所述第二张量数据为所述M个张量数据中任意的两个;所述消费节点为张量数据流向的节点,所述生产节点为张量数据流出的节点。
21.如权利要求16-20任一项所述的装置,其特征在于,所述计算图包括多个计算子任务,所述计算子任务通过一组节点和与所述一组节点有关的边指示一种计算功能,所述多个计算子任务之间的执行关系为并行执行;所述装置还包括:
更新计算图单元,用于在一个所述计算子任务中,若相邻两个节点之间没有有向边,则在所述相邻两个节点之间添加有向边,以更新所述计算图;其中,添加的每条有向边上承载有相应的张量数据;所述相邻两个节点为所述计算子任务中执行顺序相邻的两个节点;
获取信息单元,用于基于所述更新后的计算图,获取每个张量数据的信息。
22.如权利要求21所述的装置,其特征在于,所述计算图还包括执行关系为串行的第一计算子任务和第二计算子任务,所述第一计算子任务的执行顺序在所述第二计算子任务之前;所述更新计算图单元,还用于:
若第一计算子任务的最后一个节点与第二计算子任务的第一个节点之间没有有向边,则在所述第一计算子任务的最后一个节点与所述第二计算子任务的第一个节点之间添加有向边。
23.如权利要求16-20任一项所述的装置,其特征在于,在所述计算图中,张量数据的生产节点的标识小于所述张量数据的消费节点的标识;所述张量数据的生产节点与所述张量数据的消费节点为相邻的两个节点。
24.如权利要求23所述的装置,其特征在于,所述计算图中各节点的标识用于确定所述M个张量数据中每个张量数据的信息。
25.如权利要求16所述的装置,其特征在于,所述每个张量数据的信息指示所述每个张量数据对应的约束关系,所述装置还包括:
第一排序单元,用于根据所述每个张量数据对应的约束关系获取所述M个张量数据各自对应的约束量;所述约束量为其他张量数据中不可以与张量数据复用同一个内存空间的张量数据的数量;根据所述M个张量数据各自对应的约束量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
26.如权利要求16所述的装置,其特征在于,所述每个张量数据的信息指示所述每个张量数据流向的节点的数量,所述装置还包括:
第二排序单元,用于根据所述M个张量数据各自对应的消费节点数量,对所述M个张量数据排序,以得到所述M个张量数据的排序结果。
27.如权利要求16所述的装置,其特征在于,所述装置还包括:
第三排序单元,用于基于所述每个张量数据的信息使用启发式算法对所述M个张量数据进行排序,以在预设时间段内获取所述M个张量数据的排序结果。
28.如权利要求27所述的装置,其特征在于,所述排序结果是优化后的排序结果,其中,所述优化后的排序结果对应的所述神经网络需要占用的最大内存大小小于根据优化前的排序结果确定的所述神经网络需要占用的最大内存大小。
29.一种内存分配装置,其特征在于,包括:
获取计算图单元,用于获取神经网络对应的计算图;其中,所述计算图包括N个节点和连接不同节点的有向边,所述计算图的有向边上承载有张量数据,所述计算图中包括M个张量数据,所述M为大于1的整数;
分配单元,用于基于每个张量数据对应的约束关系,按照所述M个张量数据在所述神经网络中的执行顺序,依次给所述M个张量数据分配内存空间,其中,若所述M个张量数据中的一个张量数据可复用已分配的内存空间中的至少一部分,则将所述张量数据可复用的至少一部分内存空间分配给所述张量数据,所述已分配的内存空间为在所述张量数据之前,已经分配给所述M个张量数据的内存空间,所述约束关系指示所述M个张量数据中一个张量数据的可用内存空间与所述M个张量数据中的其他张量数据的可用内存空间的关系。
30.如权利要求29所述的装置,其特征在于,所述分配单元,还用于:
若所述张量数据不可复用已分配的内存空间,则为所述张量数据分配其他的内存空间,所述其他的内存空间与所述已分配的内存空间不同。
31.一种分配内存装置,其特征在于,包括处理器和存储器;
所述存储器用于存储计算机程序,所述计算机程序包括程序指令;
所述处理器被配置用于调用所述程序指令,执行如权利要求1-15任一项所述的方法。
32.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-15任一项所述的方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011057095.2A CN114327844A (zh) | 2020-09-29 | 2020-09-29 | 内存分配方法、相关设备及计算机可读存储介质 |
EP21874324.3A EP4209902A4 (en) | 2020-09-29 | 2021-09-23 | MEMORY ALLOCATION METHOD, ASSOCIATED APPARATUS AND COMPUTER-READABLE STORAGE MEDIUM |
PCT/CN2021/119829 WO2022068663A1 (zh) | 2020-09-29 | 2021-09-23 | 内存分配方法、相关设备及计算机可读存储介质 |
US18/127,300 US20230236888A1 (en) | 2020-09-29 | 2023-03-28 | Memory allocation method, related device, and computer-readable storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011057095.2A CN114327844A (zh) | 2020-09-29 | 2020-09-29 | 内存分配方法、相关设备及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114327844A true CN114327844A (zh) | 2022-04-12 |
Family
ID=80949565
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011057095.2A Pending CN114327844A (zh) | 2020-09-29 | 2020-09-29 | 内存分配方法、相关设备及计算机可读存储介质 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20230236888A1 (zh) |
EP (1) | EP4209902A4 (zh) |
CN (1) | CN114327844A (zh) |
WO (1) | WO2022068663A1 (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115080240A (zh) * | 2022-06-29 | 2022-09-20 | 美的集团(上海)有限公司 | 语音处理模型的部署方法、电子设备及存储介质 |
CN116700996A (zh) * | 2023-08-04 | 2023-09-05 | 北京燧原智能科技有限公司 | 一种神经网络的内存分配方法、装置、设备及介质 |
CN116893904A (zh) * | 2023-09-11 | 2023-10-17 | 腾讯科技(深圳)有限公司 | 神经网络模型的内存管理方法、装置、设备、介质及产品 |
CN117032954A (zh) * | 2023-07-17 | 2023-11-10 | 北京泛睿科技合伙企业(有限合伙) | 针对终端训练模型的内存优化方法、***、设备及介质 |
WO2023221626A1 (zh) * | 2022-05-20 | 2023-11-23 | 北京希姆计算科技有限公司 | 一种内存分配的方法和装置 |
WO2024114378A1 (zh) * | 2022-12-01 | 2024-06-06 | 马上消费金融股份有限公司 | 资源分配方法、装置及电子设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114819084B (zh) * | 2022-04-26 | 2024-03-01 | 北京百度网讯科技有限公司 | 模型推理方法、装置、设备及存储介质 |
CN115268936B (zh) * | 2022-09-27 | 2022-12-27 | 之江实验室 | 一种用于计算图编译的优化方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11907760B2 (en) * | 2016-09-23 | 2024-02-20 | Apple Inc. | Systems and methods of memory allocation for neural networks |
CN108829610B (zh) * | 2018-04-02 | 2020-08-04 | 浙江大华技术股份有限公司 | 一种神经网络前向计算过程中的内存管理方法及设备 |
CN110597616B (zh) * | 2018-06-13 | 2022-07-29 | 华为技术有限公司 | 一种神经网络的内存分配方法及装置 |
CN110490313B (zh) * | 2019-08-14 | 2022-03-18 | 中科寒武纪科技股份有限公司 | 一种内存复用方法及其相关产品 |
CN111488221B (zh) * | 2020-06-29 | 2020-10-09 | 北京一流科技有限公司 | 静态网络中的内存空间预配***及其方法 |
-
2020
- 2020-09-29 CN CN202011057095.2A patent/CN114327844A/zh active Pending
-
2021
- 2021-09-23 EP EP21874324.3A patent/EP4209902A4/en active Pending
- 2021-09-23 WO PCT/CN2021/119829 patent/WO2022068663A1/zh unknown
-
2023
- 2023-03-28 US US18/127,300 patent/US20230236888A1/en active Pending
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023221626A1 (zh) * | 2022-05-20 | 2023-11-23 | 北京希姆计算科技有限公司 | 一种内存分配的方法和装置 |
CN115080240A (zh) * | 2022-06-29 | 2022-09-20 | 美的集团(上海)有限公司 | 语音处理模型的部署方法、电子设备及存储介质 |
CN115080240B (zh) * | 2022-06-29 | 2023-10-10 | 美的集团(上海)有限公司 | 语音处理模型的部署方法、电子设备及存储介质 |
WO2024114378A1 (zh) * | 2022-12-01 | 2024-06-06 | 马上消费金融股份有限公司 | 资源分配方法、装置及电子设备 |
CN117032954A (zh) * | 2023-07-17 | 2023-11-10 | 北京泛睿科技合伙企业(有限合伙) | 针对终端训练模型的内存优化方法、***、设备及介质 |
CN117032954B (zh) * | 2023-07-17 | 2024-04-26 | 北京泛睿科技合伙企业(有限合伙) | 针对终端训练模型的内存优化方法、***、设备及介质 |
CN116700996A (zh) * | 2023-08-04 | 2023-09-05 | 北京燧原智能科技有限公司 | 一种神经网络的内存分配方法、装置、设备及介质 |
CN116700996B (zh) * | 2023-08-04 | 2023-11-07 | 北京燧原智能科技有限公司 | 一种神经网络的内存分配方法、装置、设备及介质 |
CN116893904A (zh) * | 2023-09-11 | 2023-10-17 | 腾讯科技(深圳)有限公司 | 神经网络模型的内存管理方法、装置、设备、介质及产品 |
CN116893904B (zh) * | 2023-09-11 | 2023-12-26 | 腾讯科技(深圳)有限公司 | 神经网络模型的内存管理方法、装置、设备、介质及产品 |
Also Published As
Publication number | Publication date |
---|---|
EP4209902A4 (en) | 2024-01-10 |
EP4209902A1 (en) | 2023-07-12 |
WO2022068663A1 (zh) | 2022-04-07 |
US20230236888A1 (en) | 2023-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114327844A (zh) | 内存分配方法、相关设备及计算机可读存储介质 | |
CN113449857B (zh) | 一种数据处理方法和数据处理设备 | |
Karloff et al. | A model of computation for MapReduce | |
CN104036451B (zh) | 基于多图形处理器的模型并行处理方法及装置 | |
CN112084038B (zh) | 神经网络的内存分配方法及装置 | |
JáJá | Parallel algorithms | |
CN108292241A (zh) | 处理计算图 | |
CN106649391B (zh) | 处理图数据的方法和装置 | |
CN110383247A (zh) | 由计算机执行的方法、计算机可读介质与异构计算*** | |
CN114492782B (zh) | 基于强化学习的神经网络的片上核心编译映射方法及装置 | |
Arnaiz-González et al. | MR-DIS: democratic instance selection for big data by MapReduce | |
CN110889497B (zh) | 一种人工智能处理器的学习任务编译方法及相关产品 | |
CN112084037A (zh) | 神经网络的内存分配方法及装置 | |
CN106875320A (zh) | 云环境下船舶航行数据的高效可视分析方法 | |
CN115168281B (zh) | 一种基于禁忌搜索算法的神经网络片上映射方法和装置 | |
CN115860081A (zh) | 一种芯粒算法调度方法、***、电子设备及存储介质 | |
CN111008631A (zh) | 图像的关联方法及装置、存储介质和电子装置 | |
CN116501505A (zh) | 负载任务的数据流生成方法、装置、设备及介质 | |
CN115860066A (zh) | 一种基于批处理的神经网络推理流水线复用的方法 | |
CN112799852B (zh) | 逻辑节点的多维sbp分布式签名决策***及其方法 | |
CN110766146B (zh) | 一种人工智能处理器的学习任务编译方法及相关产品 | |
CN110175172B (zh) | 基于稀疏二分图的极大二分团并行枚举方法 | |
US11775264B2 (en) | Efficient deployment of machine learning and deep learning model's pipeline for serving service level agreement | |
CN114724103A (zh) | 神经网络处理***、指令生成方法、装置及电子设备 | |
KR102372869B1 (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 |