本技术涉及计算机应用,特别是涉及一种内存共享方法、装置、设备及可读存储介质。
背景技术:
1、神经网络模型在硬件设备(如ai芯片)上执行的过程中会涉及到内存管理。具体来说,神经网络模型中算子的输入输出会占据一定的存储空间,这种对内存的占据具有时效性,当后续计算不会再用到这部分存储的数据时,该内存块即可重用,该部分存储的数据即可被后面计算数据所覆盖。
2、为了提高模型的推理速度,计算单元通常被设计成读取内存空间中的数据,执行相应的计算指令,会减少推理过程中的判断,动态管理内存等操作。因此需要深度学习编译器在编译神经网络模型的过程中安排好各个算子的内存使用情况,也就是每个算子所占用的内存空间大小,它在内存空间中的位移(即内存块编号)。
3、但是,目前的算子内存的管理存在明显缺陷。举例说明:tvm作为深度学习编译器的典型代表,它支持多种设备运行时的内存管理。它将整个模型进行剖分,得到分配到各个设备上运行的函数(func),在host端(编译器运行端)内存空间管理各个func的输入输出。但是,若在模型中添加伪量化算子,则会导致tvm的深度学习模型中携带的数据类型(dtype)与计算单元运行时的真实dtype不一致,这种情况下,tvm自身提供的内存管理方法存在问题。另外,tvm支持host端的内存空间管理,但对于函数内部算子的内存管理,它依赖于设备自身的软件栈(编译器),若设备的软件栈不支持内存管理,则需要对该设备内部及其输入输出进行内存管理
4、综上所述,如何有效地解决深度学习模型的内存管理等问题,是目前本领域技术人员急需解决的技术问题。
技术实现思路
1、本技术的目的是提供一种内存共享方法、装置、设备及可读存储介质,能够对自身软件栈不支持内存管理的设备提供一种设备内部及其输入输出的内存管理方法,可解决设备厂商软件开发中内存管理的问题。
2、为解决上述技术问题,本技术提供如下技术方案:
3、一种内存共享方法,包括:
4、获取深度学习模型中各个计算表达式所需的内存大小;
5、结合所述内存大小,创建所述计算表达式的内存标记;
6、基于所述内存标记,确定所述深度学习模型中异构计算单元间共享内存设置;
7、完成内存设置后,进行内存排布,得到内存排布方案,并按照所述内存排布方案实施内存共享。
8、优选地,所述获取深度学习模型中各个计算表达式所需的内存大小,包括:
9、将所述深度学习模型分为:模型层、函数层和算子层;所述函数层中的函数对应所述异构计算单元;
10、从所述模型层、函数层和算子层中获取各个所述计算表达式的数据维度;
11、对所述深度学习模型的输入和各个所述计算表达式进行遍历,得到各个所述计算表达式的数据类型和对齐方式;
12、利用所述数据维度、所述数据类型和所述对齐方式,确定各个计算表达式所需的内存大小。
13、优选地,对所述深度学习模型的输入和各个所述计算表达式进行遍历,得到各个所述计算表达式的数据类型和对齐方式,包括:
14、在所述函数层,对各个函数进行遍历,若函数与专用计算单元对应,则按照所述专用计算单元的要求计算数据类型和对齐方式,若函数未与专用计算单元对应,则按照所述深度学习模型的信息计算数据类型和对齐方式;
15、在所述算子层,对各个算子进行遍历,算子初始的数据类型和对齐方式按照所述深度学习模型的信息计算,与函数输入相对应的算子输入的数据类型和对齐方式更改为与该函数输入的数据类型和对齐方式相同;与函数输出相对应的算子输出的数据类型和对齐方式更改为与该函数输出的数据类型和对齐方式相同;若算子的后续算子为伪量化算子,则该算子输出的数据类型更改为按伪量化的要求计算;
16、在所述模型层,深度学习模型输入的数据类型和对齐方式确定为与对应函数输入的数据类型和对齐方式相同;深度学习模型输出的数据类型和对齐方式确定为与对应函数输出的数据类型和对齐方式相同。
17、优选地,结合所述内存大小,创建所述计算表达式的内存标记,包括:
18、结合所述内存大小,为各个所述计算表达式创建一个所述内存标记,并初始化所述内存标记。
19、优选地,为各个所述计算表达式创建一个所述内存标记,包括:
20、若所述计算表达式为张量类型节点,则为所述计算表达式创建包括一个张量内存标记的所述内存标记;
21、若所述计算表达式为元组类型节点,则为所述计算表达式创建包括多个张量内存标记的所述内存标记;
22、其中,所述张量内存标记包括:内存编号、内存复用标识、张量占用内存大小和内存分配大小;其中,内存复用标识初始值为0。
23、优选地,初始化所述内存标记,包括:
24、利用所述内存大小对所述内存标记中的张量占用内存大小进行赋值;
25、以节点类型进入分支,并为所述内存标记中的内存复用标识进行初始化。
26、优选地,所述以节点类型进入分支,并为所述内存标记中的内存复用标识进行初始化,包括:
27、对于输入型节点、常数节点或输出型节点,将所述计算表达式的所述内存复用标识值加1。
28、优选地,所述以节点类型进入分支,并为所述内存标记中的内存复用标识进行初始化,包括:
29、对于普通计算节点,获取所述计算表达式的输入的内存标记,并将所述内存复用标识值加1。
30、优选地,所述以节点类型进入分支,并为所述内存标记中的内存复用标识进行初始化,包括:
31、对于元组节点,将所述计算表达式对应的若干个普通分支节点的内存标记进行合并,得到合并结果;
32、利用所述合并结果,为所述内存标记中的内存复用标识进行初始化。
33、优选地,所述以节点类型进入分支,并为所述内存标记中的内存复用标识进行初始化,包括:
34、对于元组分支节点,获取与所述计算表达式相对应的元组节点类型中普通分支节点的内存标记;
35、利用所述普通分支节点的内存标记为所述计算表达式的所述内存复用标识进行初始化。
36、优选地,基于所述内存标记,确定所述深度学习模型中异构计算单元间共享内存设置,包括:
37、将所述深度学习模型分为:模型层、函数层和算子层;所述函数层中的函数对应所述异构计算单元;
38、基于所述内存标记,依次对所述模型层进行内存分配,对所述函数层进行内存分配,对所述算子层中的每一个算子进行内存分配;
39、确定所述模型层、所述函数层和所述算子层对应所述异构计算单元共享内存的共享信息。
40、优选地,对所述模型层进行内存分配,对所述深度学习模型的输入,以标志位为假,计算对应所述计算表达式的内存标记。
41、优选地,对所述函数层进行内存分配,包括:
42、以节点类型进入分支,并对每个函数对应的所述计算表达式进行内存分配。
43、优选地,所述以节点类型进入分支,并对每个函数对应的所述计算表达式进行内存分配,包括:
44、对应普通节点,则递归地遍历当前函数的每个输入参数,获取每个所述输入参数的内存标记;
45、判断所述当前函数是否满足所述输入参数的内存标记的复用条件;
46、如果是,则复用所述输入参数的内存标记,并为内存复用标识加1;
47、如果否,则以标志位为真,计算所述计算表达式的张量内存标记;
48、若当前函数的内存标记中的内存复用标识为0,则将对应的张量内存标记对应的内存块放入可复用内存块列表;
49、对当前函数的每个输入参数的张量内存标记中内存复用标识分别减1,若对应结果为0,则将该张量内存标记对应的内存块放入所述可复用内存块列表中。
50、优选地,所述以节点类型进入分支,并对每个函数对应的所述计算表达式进行内存分配,包括:
51、对应元组节点,该计算表达式对应多个普通节点,将所述多个普通节点的内存标记合并为一个内存标记,并将合并所得的内存标记确定为所述计算表达式的内存标记。
52、优选地,所述以节点类型进入分支,并对每个函数对应的所述计算表达式进行内存分配,包括:
53、对应元组分支节点,计算表达式的内存标记为与该计算表达式对应的元组中普通分支节点的内存标记。
54、优选地,对所述算子层中的每一个算子进行内存分配,包括:
55、对于通用计算单元的每个输入,以标志位为假,计算内存标记,并将所有输入计算表达式放入输入输出算子标志映射表中,并更新输入输出标号。
56、优选地,对所述算子层中的每一个算子进行内存分配,包括:
57、以节点类型进入分支,为每个算子确定内存标记并更新输入输出算子标志映射表。
58、优选地,确定所述模型层、所述函数层和所述算子层对应所述异构计算单元共享内存的共享信息,包括:
59、对所述输入输出算子标志映射表中的算子重新分配内存编号,并找出与该算子共享内存地址的对应函数输入输出的算子表达式;
60、根据输入输出算子标志映射表中算子的输入输出标号值,对内存编号重新分配至不同区间;其中,相同的输入输出标号值重新分配相同的内存编号;不相同的输入输出标号值重新分配不相同的内存编号,并使内存编号与内部算子的内存编号均不相同;算子的内存编号对应两个区间,分别为内部算子区间和输入输出算子区间;
61、根据函数的输入和函数输入算子对应同一个对象,找到与该函数输入算子相应的函数,建立该输入算子的内存编号与所找到的相应函数的对应关系;
62、根据函数的输出和函数输出算子对应同一个对象,找到与该函数输出算子相应的函数,建立该输出算子的内存编号与所找到的相应函数的对应关系。
63、一种内存共享装置,包括:
64、信息获取单元,用于获取深度学习模型中各个计算表达式所需的内存大小;
65、初始化单元,用于结合所述内存大小,创建所述计算表达式的内存标记;
66、内存规划单元,用于基于所述内存标记,确定所述深度学习模型中异构计算单元间共享内存设置;
67、内存排布单元,用于完成内存设置后,进行内存排布,得到内存排布方案;
68、内存共享单元,用于按照所述内存排布方案实施内存共享。
69、一种电子设备,包括:
70、存储器,用于存储计算机程序;
71、处理器,用于执行所述计算机程序时实现上述内存共享方法的步骤。
72、一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述内存共享方法的步骤。
73、应用本技术实施例所提供的方法,获取深度学习模型中各个计算表达式所需的内存大小;结合内存大小,创建计算表达式的内存标记;基于内存标记,确定深度学习模型中异构计算单元间共享内存设置;完成内存设置后,进行内存排布,得到内存排布方案,并按照内存排布方案实施内存共享。
74、在本技术中,首先获取到深度学习模型中各个计算表达式所需的内存大小,然后,再结合该内存大小,对计算表达式的内存标记进行初始化。结合内存标记可确定深度信息模型中异构计算单元间共享内存设置,并在完成内存设置之后,进行内存排布,得到内存排布方案,最终可按照该内存排布方案实施内存共享。即,在本技术中,依赖于内存标记从而实现深度学习模型中的异构计算单元间共享内存,可以避免同一数据的存储占用多块内存空间,能够有效节省内存空间,能够有效提升深度信息模型的执行效率。
75、相应地,本技术实施例还提供了与上述内存共享方法相对应的内存共享装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。