CN112346877B - 一种有效加速深度学习计算的内存分配方法及*** - Google Patents

一种有效加速深度学习计算的内存分配方法及*** Download PDF

Info

Publication number
CN112346877B
CN112346877B CN202110028503.XA CN202110028503A CN112346877B CN 112346877 B CN112346877 B CN 112346877B CN 202110028503 A CN202110028503 A CN 202110028503A CN 112346877 B CN112346877 B CN 112346877B
Authority
CN
China
Prior art keywords
branch
target
memory
memory space
operation layer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110028503.XA
Other languages
English (en)
Other versions
CN112346877A (zh
Inventor
李国亮
张磊
杨勤富
钱军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hanbo Semiconductor Shanghai Co ltd
Original Assignee
Hanbo Semiconductor Shanghai Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hanbo Semiconductor Shanghai Co ltd filed Critical Hanbo Semiconductor Shanghai Co ltd
Priority to CN202110028503.XA priority Critical patent/CN112346877B/zh
Publication of CN112346877A publication Critical patent/CN112346877A/zh
Application granted granted Critical
Publication of CN112346877B publication Critical patent/CN112346877B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Biomedical Technology (AREA)
  • Artificial Intelligence (AREA)
  • Mathematical Physics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请提供一种有效加速深度学习的内存分配方法及***,所述的方法及***可以根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序;确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案;根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案。从而在执行多分支运算时,可以选择运算过程中占用内存空间最小的运算顺序作为目标运算顺序,根据所述多分支运算层各分支结果连续存储的目标内存方案,对所述多分支逐层进行内存分配设置,确保各分支运算结果连续存储在内存空间中,从而降低了占用内存空间大小,提高了整个神经网络的运算效率。

Description

一种有效加速深度学习计算的内存分配方法及***
技术领域
本申请涉及深度学习***优化领域,尤其涉及一种基于多分支调度、分配的有效加速深度学习计算的内存分配方法及***。
背景技术
近几年来,人工智能研究十分热门,深度学习是其中的一种核心技术,其基本模型是深度神经网络。随着深度学习研究的日趋深入,人工神经网络的层数不断增加,从AlexNet的8层,到VGG的19层和GoogLeNet的22层,甚至ResNet更是深达152层,同时,神经网络中也逐渐出现更多的多分支网络,更广,更加复杂化。更深、更广的网络意味着训练网络模型需要用到更大的内存。
由于总体上更深更广的网络对深度学习的精度提高有显著的作用,深度神经网络有朝着更深更广的方向发展,其面临的一个问题便是内存的不足。一般计算机的内存大小非常有限,因此如何利用有限的内存构建更深更广的网络便成为一个迫切的问题。
发明内容
本申请的一个目的是提供一种有效加速深度学习计算的内存分配方法,所述深度学习计算网络包括多分支运算层,其中,该方法包括:
根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序;
确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案;
根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案。
与现有技术相比,本申请所述的方法及***可以根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序;确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案;根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案。从而在执行多分支运算时,可以选择运算过程中占用内存空间最小的运算顺序作为目标运算顺序,并确定根据目标顺序执行所述多分支运算过程中的目标内存分配方案,以确保执行所述多分支运算过程中占用最少的内存空间,同时,根据所述多分支运算层各分支结果连续存储的目标内存方案,对多分支运算层运算过程中的数据存储方式及位置进行设置,确保各分支运算结果连续存储在内存空间中,从而降低了占用内存空间大小,提高了整个神经网络的运算效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是根据本申请一个实施例的有效加速深度学习计算的内存分配方法流程图;
图2是根据本申请一个实施例的一种深度学习计算网络的运算层示意图;
图3是上述图2中多分支深度学习计算网络对应的有向图;
图4为执行图2中多分支深度学习计算网络的目标运算顺序时的输入/输出内存大小信息表;
图5示出图2中多分支深度学习计算网络按照目标运算顺序运算时各分支运算结果内存大小信息表;
图6为执行图2中多分支深度学习计算网络的目标运算顺序时的输入/输出内存分配示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
为了使本技术领域的人员更好地理解本申请的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请提供的有效加速深度学习的内存分配方法及***,适用于深度学习神经网络运算层包括多分支运算层的情况,基于多分支调度、内存分配,实现有效加速深度学习计算效率。其中具体多分支运算层的分支方式不做限制,只要包含多分支运算即适用于本申请的技术方案。本申请的方案适用于深度学习计算网络运算处理器设置的编译或运行阶段,根据深度学习计算网络运算层包括的多分支运算层的属性和特点,为所述多分支运算层进行目标运算顺序的确定,及目标内存分配方案的设置,也即将执行所述多分支运算层过程中占用内存空间最小的运算顺序作为目标运算顺序,在所述目标运算顺序基础上,在确保各分支运算结果连续分配内存空间的情况下,对所述多分支运算过程进行目标内存方案的设置,从而在确保多分支运算执行占用内存空间最下的运算顺序的情况下,将各分支结果连续存储在内存空间中,降低多分支运算占用内存空间,避免各分支输出结果在内存空间中存储不连续,有效防止产生内存碎片,提高内存使用效率。
参图1所示,本申请提供一种有效加速深度学习计算的内存分配方法,所述深度学习计算网络包括多分支运算层,其中,该方法包括:
S1根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序。
具体地,在执行运算过程中一般将所述多分支运算层整体作为神经网络的一个独立运算层进行处理,所述多分支运算层的输入即为所述独立运算层的输入,例如图2中pooling对应的运算结果;所述多分支运算层的输出作为所述独立运算层的输出,例如图2中concat的输出结果。进一步地,因多分支运算层包括多个运算分支,每个运算分支的运算顺序不同,不同的运算顺序对应不同的运算输入、输出信息对内存大小具有不同的需求。
其中,目标运算顺序为执行所述多分支运算层整个过程中所占用内存空间最小的运算顺序,参图2所示的多分支,根据不同的运算顺序,包括多个运算方案,一般地,在确定所述多分支运算的运算顺序时可以通过将分支结构转换为有向图,如图3所示将图2中多分支的每层的输出张量作为有向图的顶点,顶点值为执行该层的输出结果需要的内存空间,根据有向图中,同一分支中的顶点运算先后顺序不能调整,不同分支中的顶点运算先后顺序可以随意调整的运算方式,确定在执行所有运算顺序中,对应顶点值最小,也即占用内存空间最小的运算顺序为目标运算顺序。此外,还可以通过广度优先或深度优先等方式确定多分支运算层的多种运算方式,然后再根据每种运算方式占用内存空间大小,确定出其中占用内存空间最小的运算方式为目标运算方式。
S2确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案。
具体地,按照确定的多分支运算的目标运算顺序执行运算,最终需在内存空间中存储每个分支的运算结果,多分支中每个分支的运算结果需连续存储在内存空间,从而避免内存空间碎片化。参图4所示为图2中多分支运算按照目标运算顺序即T0->T1,TI->T2,T0->T3,T3->T4,T0->T5,T5->T6,T0->T7执行过程中输入及输出内存占用统计表,对应的各分支的运算结果为其中下划线标记部分“32、32、128、64”,也即图5中所示的目标内存分配方案。
S3根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案。
具体地,在执行多分支运算层过程中为了确保各分支运算结果可以连续存储在内存空间中,需将根据目标运算顺序执行分支运算过程中的每个输入、输出结果进行内存分配方案的设置,也即需对图4中多分支中的7个运算层对应的输入、输出进行内存分配,同时确保图5中4个分支运算结果连续存储在内存空间中。
进一步地,在设置执行多分支运算过程中内存分配方案时,需提前考虑目标内存方案中各分支运算结果的内存分配位置及大小,同时,在分支运算层中的输出结果不再作为后续运算层的输入时,释放该输出结果的内存空间。以确保各分支运算结果按照目标内存分配方案连续存储在内存空间中,避免内存空间中出现碎片,提供内存空间的利用率。
继续参图2、3所示,在其中一些优选的实施例中,所述S1包括:
根据有向图运算方式,确定所述多分支运算层的多种运算顺序及目标运算顺序。
具体地,在确定多分支运算层的运算顺序时,可以将多分支运算层转换为有向图结构,参图2所示为一个多分支运算层,对应地图3为其转换的有向图结构,其中每层的输出结果作为图中的顶点,顶点的值表示该输出结果所需的内存空间,对应分支运算层第一个运算层的顶点为头顶点,对应分支运算层最后一个运算层的顶点为尾顶点;顶点之间的边按照如下规则连接:
(1)同一分支中的顶点,运算先后顺序不能随意调整,按照运算先后顺序,用单向边连接,例如,图3中的实线及箭头部分;
(2)不同分支中的顶点,运算先后顺序可以随意调整,用双向边连接,如图3中的虚线及箭头部分。
更进一步地,从头顶点开始,至尾顶点结束,遍历所述有向图。在同一分支中,若某一单向边从u指向v,称顶点v为顶点u的后驱顶点,顶点u为v的前驱顶点;并以此创建每一顶点的前驱列表predecessor_list和后驱列表successor_list。
遍历起始于头顶点,结束于尾顶点,具体遍历过程如下:
在遍历开始时,设一变量total_size表示该分支结构所需内存空间,并设该变量值为0,即total_size = 0;
在遍历开始时,设一列表iter_list表示已遍历的顶点,并将头顶点加入该列表,即iter_list = {head};
在将尾顶点加入iter_list之前,其他所有顶点必须已经加入iter_list;尾顶点tail加入iter_list时,表示遍历结束;
在遍历过程中,离开某一顶点u时(即新的顶点v加入遍历列表iter_list时),total_size增加,增加值为顶点u的curr_size,即total_size = total_size + curr_size;
在遍历过程中,离开某一顶点u时(即新的顶点v加入遍历列表iter_list时),将u从其前驱顶点w的后驱列表successor_list中删除,若顶点w的后驱列表successor_list为空,则减少total_size,减少值为顶点w的curr_size,即total_size = total_size –curr_size;
遍历结束时,iter_list表示计算顺序,total_size即为该计算顺序所需的内存空间。穷举所有计算顺序,找出所需内存最小的运算顺序即为目标运算顺序。
在其中一些优选的实施例中,所述S1包括:
S11(未示出)确定所述多分支运算层的多个运算顺序;
S12(未示出)根据所述多个运算顺序中对应占用内存空间大小,确定占用内存空间最小的运算顺序为目标运算顺序。
具体地,在确定多分支运算层的目标运算顺序时,可以首先确定所述多分支运算层的多个运算顺序,例如可以通过深度优先原则或者广度优先原则,确定多个不同的运算顺序,进一步计算执行每个不同的运算顺序过程中对应需要的内存空间大小,选择其中所需内存空间最小的运算顺序作为所述多分支运算层的目标运算顺序。
在其中一些优选的实施例中,所述S11包括:
根据深度优先原则,确定所述多分支运算层的多种运算顺序;或根据广度优先原则,确定所述多分支运算层的多种运算顺序。
具体地,以图2所示的多分支为例,根据深度优先原则,运算顺序包括但不限于如下两种:
(a)T0->T7,T0->T5,T5->T6,T0->T3,T3->T4,T0->T1,TI->T2;
(b)T0->T1,TI->T2,T0->T3,T3->T4,T0->T5,T5->T6,T0->T7。
根据广度优先原则,运算顺序包括但不限于如下两种:
(c)T0->T7,T0->T5,T0->T3,T0->T1,T5->T6,T3->T4,TI->T2;
(d)T0->T1,T0->T3,T0->T5,T0->T7,T1->T2,T3->T4,T5->T6。
在其中一些优选的实施例中,所述S2包括:
S21(未示出)根据所述目标运算顺序执行所述多分支运算层,确定所述多分支运算层中每个分支的运算结果;
S22(未示出)根据所述目标运算顺序及所述每个分支的运算结果的内存空间大小,确定所述目标内存分配方案。
具体地,如图5中展示的即为执行图2所示多分支的目标运算顺序过程中情况,其中的运算层及其对应的输入内存、输出内存为执行多分支运算层中该层对应的输入、输出所需内存空间大小,其中带有下划线的输出结果“32、32、128、64”即为图2中多分支运算层的四个分支分别对应的运算结果,按照目标运算顺序排列即为图5中展示的信息,也即图2中多分支运算层对应的目标内存分配方案,为将该四个分支的运算结果连续存储在内存空间中。
在其中一些优选的实施例中,所述S3包括:
S31(未示出)根据所述目标运算顺序逐层为每个分支运算层的输入信息及输出结果分配内存空间;
S32(未示出)根据所述内存空间分配结果,确定所述多分支运算层的内存分配方案。
具体地,如图4所展示的按照目标运算顺序执行图2所示多分支运算层的运算过程,需逐层为其中的输入、输出信息分配内存空间,如图6展示了为图2中多分支运算层按照目标运算顺序运算过程的内存分配图,上方一行展示了图4中的7个运算层的运算类型,每个运算层类型对应下面一列即为执行本层时的输入、输出信息内存分配方案,其中标号为1的填充区域代表“锁定区”即本层运算的输入、输出不可存储在该区域,标号为2的填充区域代表“输出结果存储区”即本层运算的输出结果存储位置及空间,标号为3的填充区域代表“未参与分配”即未分配的内存空间,标号为4的填充区域代表“输入信息存储区”即本层运算的输入信息所存储的位置和空间。
在其中一些优选的实施例中,所述S31包括:
优先将所述内存空间顶部/底部两端的存储空间分配给运算层的输入信息及输出结果。
具体地,为了确保内存空间的充分利用,以及最终各分支结果可以按照目标内存方案进行存储,防止内存空间碎片化,在执行分支运算层过程中,优先将输入信息或输出结果存入内存空间的上/下两端处,参图6所示,执行运算层incept3a_pool时,其输入信息存入标号4对应的区域,输出结果存入标号2对应的区域,中间位置标号3对应的区域处于未分配状态。
在其中一些优选的实施例中,所述S31包括:
S311(未示出)判断下一运算层的输出结果是否为对应所在分支的运算结果;
S312(未示出)若是,在为当前执行运算层输入信息及输出结果分配内存空间时,预留所述分支运算结果对应的内存空间。
具体地,为确保最终各分支结果可以按照目标内存方案进行存储,防止内存空间碎片化,在执行分支运算层过程中进行内存分配方案设置时,如果下一层的输出结果为该分支运算结果,还需要考虑提前预留该分支结果的内存空间,也即提前锁定该分支结果的内存空间位置,如图6所示,在对运算层incept3a_pool的输入、输出信息分配内存时,判断出下一个运算层incept3a_1x1_poolproj的输出结果为该分支的运算结果,此时,需将该运算结果“32”对应的内存空间进行锁定,如图6的标号1对应的区域,意味着不得将运算层incept3a_pool的输入、输出信息的内存分配至标号1对应的区域。为运算层incept3a_5x5_reduce、incept3a_3x3_reduce的输入、输出信息分配内存空间时也存在同样的情况。从而可以确保多分支运算层的各分支运算结果均可以按照目标内存方案连续存储在内存空间中,防止内存碎片化,提高了内存的利用效率。
在其中一些优选的实施例中,所述方法还包括:
S4(未示出)执行当前运算层后,判断所述当前运算层的输入信息是否还需要作为后续运算层的输入信息;
S5(未示出)若否,释放所述当前运算层的输入信息的内存空间。
具体地,在内存方案设置阶段,在一个运算层的输入数据被读取参与运算执行后,还需要判断该数据是否还会作为其他运算层的输入,也即是否还会被后续运算所需要,以此判断是否保留该数据,若是,该数据应保留,并仍然存储在当前读取的内存空间内;若否,则删除该数据,并释放所述输入信息对应的内存空间,被后续运算使用,从而更加高效、合理使用内存资源,增加深度学习计算网络的运算效率。
进一步地,参图2所示,在多分支运算层中因输出结果T0为后续多个运算层的输入,故T0需一直保留在内存空间中,参图6所示内存分配方案最下面一行即为T0对应192大小的内存空间,但在作为运算层incept3a_1x1的输入信息后,T0不再作为后续运算层的输入信息,此时可将T0删除,释放其对应的192大小的内存空间。释放的内存空间可被后续运算层的输入、输出重复使用。
根据本申请的另一方面,本申请还提供一种有效加速深度学习计算的内存管理***,其中,所述***至少包括:
决策器,其用于基于深度学习计算网络中包括的多分支运算层信息制定对应的内存管理决策,其中,所述决策器被配置为:
根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序。
具体地,在执行运算过程中一般将所述多分支运算层整体作为神经网络的一个独立运算层进行处理,所述多分支运算层的输入即为所述独立运算层的输入,例如图2中pooling对应的运算结果;所述多分支运算层的输出作为所述独立运算层的输出,例如图2中concat的输出结果。进一步地,因多分支运算层包括多个运算分支,每个运算分支的运算顺序不同,不同的运算顺序对应不同的运算输入、输出信息对内存大小具有不同的需求。
其中,目标运算顺序为执行所述多分支运算层整个过程中所占用内存空间最小的运算顺序,参图2所示的多分支,根据不同的运算顺序,包括多个运算方案,一般地,在确定所述多分支运算的运算顺序时可以通过将分支结构转换为有向图,如图3所示将图2中多分支的每层的输出张量作为有向图的顶点,顶点值为执行该层对应需要的内存空间,根据有向图中,同一分支中的顶点运算先后顺序不能调整,不同分支中的顶点运算先后顺序可以随意调整的运算方式,确定在执行所有运算顺序中,对应顶点值最小,也即占用内存空间最小的运算顺序为目标运算顺序。此外,还可以通过广度优先或深度优先等方式确定多分支运算层的多种运算方式,然后再根据每种运算方式占用内存空间大小,确定出其中占用内存空间最小的运算方式为目标运算方式。
确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果对应的目标内存分配方案。
具体地,按照确定的多分支运算的目标运算顺序执行运算,最终需在内存空间中存储每个分支的运算结果,多分支中每个分支的运算结果需连续存储在内存空间,从而避免内存空间碎片化。参图4所示为图2中多分支运算按照目标运算顺序即T0->T1,TI->T2,T0->T3,T3->T4,T0->T5,T5->T6,T0->T7执行过程中输入及输出内存占用统计表,对应的各分支的运算结果为其中下划线标记部分“32、32、128、64”,也即图5中所示的目标内存分配方案。
内存分配器,其用于基于所述决策器制定的内存管理决策,将所述深度学习计算网络中多分支运算层运算时的内存空间进行分配管理,其中,所述内存分配器被配置为:
根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案。
具体地,在执行多分支运算层过程中为了确保各分支运算结果可以连续存储在内存空间中,需将根据目标运算顺序执行分支运算过程中的每个输入、输出结果进行内存分配方案的设置,也即需对图4中多分支中的7个运算层对应的输入、输出进行内存分配,同时确保图5中4个分支运算结果连续存储在内存空间中。
进一步地,在设置执行多分支运算过程中内存分配方案时,需提前考虑目标内存方案中各分支运算结果的内存分配位置及大小,同时,在分支运算层中的输出结果不再作为后续运算层的输入时,释放该输出结果的内存空间。以确保各分支运算结果按照目标内存分配方案连续存储在内存空间中,避免内存空间中出现碎片,提供内存空间的利用率。
与现有技术相比,本申请所述的方法及***可以根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序;确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案;根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案。从而在执行多分支运算时,可以选择运算过程中占用内存空间最小的运算顺序作为目标运算顺序,并确定根据目标顺序执行所述多分支运算过程中的目标内存分配方案,以确保执行所述多分支运算过程中占用最少的内存空间,同时,根据所述多分支运算层各分支结果连续存储的目标内存方案,对多分支运算层运算过程中的数据存储方式及位置进行设置,确保各分支运算结果连续存储在内存空间中,从而降低了占用内存空间大小,提高了整个神经网络的运算效率。
本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如前任一项所述的方法被执行。
本申请还提供了一种计算机程序产品,当所述计算机程序产品被计算机设备执行时,如前任一项所述的方法被执行。
本申请还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个计算机程序;
当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前任一项所述的方法。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。本领域技术人员应能理解,计算机程序指令在计算机可读介质中的存在形式包括但不限于源文件、可执行文件、安装包文件等,相应地,计算机程序指令被计算机执行的方式包括但不限于:该计算机直接执行该指令,或者该计算机编译该指令后再执行对应的编译后程序,或者该计算机读取并执行该指令,或者该计算机读取并安装该指令后再执行对应的安装后程序。在此,计算机可读介质可以是可供计算机访问的任意可用的计算机可读存储介质或通信介质。
通信介质包括藉此包含例如计算机可读指令、数据结构、程序模块或其他数据的通信信号被从一个***传送到另一***的介质。通信介质可包括有导的传输介质(诸如电缆和线(例如,光纤、同轴等))和能传播能量波的无线(未有导的传输)介质,诸如声音、电磁、RF、微波和红外。计算机可读指令、数据结构、程序模块或其他数据可被体现为例如无线介质(诸如载波或诸如被体现为扩展频谱技术的一部分的类似机制)中的已调制数据信号。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被更改或设定的信号。调制可以是模拟的、数字的或混合调制技术。
作为示例而非限制,计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。例如,计算机可读存储介质包括,但不限于,易失性存储器,诸如随机存储器(RAM, DRAM, SRAM);以及非易失性存储器,诸如闪存、各种只读存储器(ROM,PROM, EPROM, EEPROM)、磁性和铁磁/铁电存储器(MRAM, FeRAM);以及磁性和光学存储设备(硬盘、磁带、CD、DVD);或其它现在已知的介质或今后开发的能够存储供计算机***使用的计算机可读信息/数据。
在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (9)

1.一种有效加速深度学习计算的内存分配方法,所述深度学习计算网络包括多分支运算层,其中,该方法包括:
根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序;
确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案;
根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案,具体包括:
m. 根据所述目标运算顺序逐层为每个分支运算层的输入信息及输出结果分配内存空间;
n. 根据所述内存空间分配结果,确定所述多分支运算层的内存分配方案;
其中,所述m包括:
判断下一运算层的输出结果是否为对应所在分支的运算结果;
若是,在为当前执行运算层输入信息及输出结果分配内存空间时,预留所述分支运算结果对应的内存空间;及,
优先将所述内存空间顶部/底部两端的存储空间分配给运算层的输入信息及输出结果。
2.根据权利要求1所述的方法,其中,所述根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序包括:
根据有向图运算方式,确定所述多分支运算层的多种运算顺序及对应的目标运算顺序。
3.根据权利要求1所述的方法,其中,所述根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序包括:
确定所述多分支运算层的多个运算顺序;
根据所述多个运算顺序中对应占用内存空间大小,确定占用内存空间最小的运算顺序为目标运算顺序。
4.根据权利要求3所述的方法,其中,所述确定所述多分支运算层的多个运算顺序包括:
根据深度优先原则,确定所述多分支运算层的多种运算顺序;或,
根据广度优先原则,确定所述多分支运算层的多种运算顺序。
5.根据权利要求1所述的方法,其中,所述确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果连续存储的目标内存分配方案包括:
根据所述目标运算顺序执行所述多分支运算层,确定所述多分支运算层中每个分支的运算结果;
根据所述目标运算顺序及所述每个分支的运算结果的内存空间大小,确定所述目标内存分配方案。
6.根据权利要求1至5中任一项所述的方法,其中,所述方法还包括:
执行当前运算层后,判断所述当前运算层的输入信息是否还需要作为后续运算层的输入信息;
若否,释放所述当前运算层的输入信息的内存空间。
7.一种有效加速深度学习计算的内存管理***,其中,所述***至少包括:
决策器,其用于基于深度学习计算网络中包括的多分支运算层信息制定对应的内存管理决策,其中,所述决策器被配置为:
根据多分支运算层运算所需内存空间大小,确定所述多分支运算层的目标运算顺序;
确定按照所述目标运算顺序执行所述多分支运算层的各分支运算结果对应的目标内存分配方案;
内存分配器,其用于基于所述决策器制定的内存管理决策,将所述深度学习计算网络中多分支运算层运算时的内存空间进行分配管理,其中,所述内存分配器被配置为:
根据所述目标内存分配方案及所述目标运算顺序,确定执行所述多分支运算层的内存分配方案,具体包括:
m根据所述目标运算顺序逐层为每个分支运算层的输入信息及输出结果分配内存空间;
n根据所述内存空间分配结果,确定所述多分支运算层的内存分配方案;
其中,所述m包括:
判断下一运算层的输出结果是否为对应所在分支的运算结果;
若是,在为当前执行运算层输入信息及输出结果分配内存空间时,预留所述分支运算结果对应的内存空间;及,
优先将所述内存空间顶部/底部两端的存储空间分配给运算层的输入信息及输出结果。
8.一种计算机可读存储介质,其特征在于,该计算机可读存储介质上存储有计算机程序,所述计算机程序被执行时能够实现权利要求1-6中任一项所述的有效加速深度学习计算的内存分配方法。
9.一种电子设备,其特征在于,所述电子设备至少包括:
一个或多个处理器;
存储器,其用于存储可执行指令;
所述一个或多个处理器被配置为经由所述可执行指令来实现权利要求1-6中任一项所述的有效加速深度学习计算的内存分配方法。
CN202110028503.XA 2021-01-11 2021-01-11 一种有效加速深度学习计算的内存分配方法及*** Active CN112346877B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110028503.XA CN112346877B (zh) 2021-01-11 2021-01-11 一种有效加速深度学习计算的内存分配方法及***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110028503.XA CN112346877B (zh) 2021-01-11 2021-01-11 一种有效加速深度学习计算的内存分配方法及***

Publications (2)

Publication Number Publication Date
CN112346877A CN112346877A (zh) 2021-02-09
CN112346877B true CN112346877B (zh) 2021-04-16

Family

ID=74427548

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110028503.XA Active CN112346877B (zh) 2021-01-11 2021-01-11 一种有效加速深度学习计算的内存分配方法及***

Country Status (1)

Country Link
CN (1) CN112346877B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113806078A (zh) * 2021-08-27 2021-12-17 南京中科逆熵科技有限公司 一种用于边缘ai推理框架的内存调度方法
CN114298294B (zh) * 2021-12-28 2022-11-01 杭州雄迈集成电路技术股份有限公司 一种基于硬件加速器的神经网络内存优化方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110766135A (zh) * 2019-10-15 2020-02-07 北京芯启科技有限公司 一种对任意深度神经网络优化其运行功能时所需存储的方法
CN111814971A (zh) * 2020-06-30 2020-10-23 杭州国芯科技股份有限公司 一种神经网络的内存分配方法
CN111984400A (zh) * 2020-07-17 2020-11-24 深圳云天励飞技术有限公司 神经网络的内存分配方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108304265B (zh) * 2018-01-23 2022-02-01 腾讯科技(深圳)有限公司 内存管理方法、装置及存储介质
CN109447253B (zh) * 2018-10-26 2021-04-27 杭州比智科技有限公司 显存分配的方法、装置、计算设备及计算机存储介质
US11687789B2 (en) * 2019-05-31 2023-06-27 Apple Inc. Decomposition of machine learning operations
CN110378413A (zh) * 2019-07-17 2019-10-25 Oppo广东移动通信有限公司 神经网络模型处理方法、装置以及电子设备
CN112084037A (zh) * 2020-09-23 2020-12-15 安徽寒武纪信息科技有限公司 神经网络的内存分配方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110766135A (zh) * 2019-10-15 2020-02-07 北京芯启科技有限公司 一种对任意深度神经网络优化其运行功能时所需存储的方法
CN111814971A (zh) * 2020-06-30 2020-10-23 杭州国芯科技股份有限公司 一种神经网络的内存分配方法
CN111984400A (zh) * 2020-07-17 2020-11-24 深圳云天励飞技术有限公司 神经网络的内存分配方法及装置

Also Published As

Publication number Publication date
CN112346877A (zh) 2021-02-09

Similar Documents

Publication Publication Date Title
CN112346877B (zh) 一种有效加速深度学习计算的内存分配方法及***
CN110597616B (zh) 一种神经网络的内存分配方法及装置
CN112286694B (zh) 基于深度学习计算网络的硬件加速器内存分配方法及***
CN108981739A (zh) 一种路径规划方法、装置、服务器及存储介质
CN106709503B (zh) 一种基于密度的大型空间数据聚类算法k-dbscan
CN112543918A (zh) 神经网络切分方法、预测方法及相关装置
CN113485836B (zh) 一种基于张量切分的张量处理方法和张量处理***
CN116302461A (zh) 深度学习内存分配优化方法和***
CN116739323B (zh) 一种面向应急资源调度的智能评估方法和***
CN104459781A (zh) 三维叠前地震数据的随机噪声衰减方法
CN114399125B (zh) 车队最优轨迹控制方法、装置、电子设备及存储介质
CN115461718A (zh) 神经网络中的内存分配
CN112256440B (zh) 神经网络推理的内存管理方法及装置
CN110930092B (zh) 一种配送路线调整方法、装置、电子设备和存储介质
CN116862019A (zh) 基于数据并行范式的模型训练方法及装置
CN110334994A (zh) 一种播种位预分配方法、装置、计算机设备及存储介质
CN110321998B (zh) 卷积神经网络实现方法、装置、加速设备、存储介质
Pu et al. MPEFT: A novel task scheduling method for workflows
CN115809243A (zh) 基于b树的重叠社区发现方法、装置、设备及存储介质
KR20230058621A (ko) 메모리-한도 스케줄링
CN116360961A (zh) 基于多线程的内存分配方法及装置
CN116700995B (zh) 一种异构内存池并发访问方法、装置、设备及存储介质
CN114265556B (zh) 一种数据存储方法及装置
CN116679639B (zh) 金属制品生产控制***的优化方法及***
CN116610456B (zh) 一种基于急切内存重用算法的内存优化方法

Legal Events

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