System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种面向神经网络作业优化的内存分配方法组成比例_技高网

一种面向神经网络作业优化的内存分配方法组成比例

技术编号:40287139 阅读:4 留言:0更新日期:2024-02-07 20:39
本发明专利技术公开了一种面向神经网络作业优化的内存分配方法,通过修改Tensor的基类的数据结构;使用分块布局实例化神经网络模型的参数对象;初始化并同步参数对象的所有副本;判断神经网络模型的所有参数是否完成初始化;若识别到所有参数完成初始化时,则实例化中间结果对象;判断中间结果是否从第一维进行划分;若识别到中间结果从第一维进行划分时,则将原来Tensor对象的内存区修改为分块布局;判断任务划分是否使用静态调度策略;若识别到任务划分使用静态调度策略时,则顺序分配子任务到子线程并将子数据对应到NUMA节点上;将对应到一个NUMA节点的所有子数据作为一个分块分配内存。本发明专利技术稳定提升神经网络作业的执行效率。

【技术实现步骤摘要】

本专利技术涉及操作系统,尤其公开了一种面向神经网络作业优化的内存分配方法


技术介绍

1、神经网络(neural network,nn)是一种模拟人类神经系统的计算模型,由多个神经元按照层次结构连接在一起组成。一个典型的的神经网络由输入层、隐藏层和输出层组成,每个神经元都与前一层的神经元或输入数据相连,并通过权重和偏置进行信息传递和计算。神经网络作业执行过程中需要分配的内存空间主要用于三种数据(tensor),数据集数据,神经网络参数数据和中间结果数据,其中数据集数据可以理解为一种特殊的中间结果数据。具体到神经网络的一层,一般会访问三个内存,输入、输出和模型参数内存,其中输入和输出表示为中间结果数据或者数据集数据(神经网络的第一层)。

2、当前的ai(artificial intelligence,人工智能)计算框架,大多使用openmp(open multi-processing,共享存储并行编程)作为cpu(central processing unit,中央处理器)并行计算的底层实现。openmp是一种用于共享内存并行计算的并行编程接口。用户可以使用它提供的预处理指令来指定哪些部分的代码应该并行执行,哪些部分应该串行执行,并行执行的代码块也被称为并行域。作为一个成熟的并行编程接口,openmp在许多领域都得到了广泛应用,例如用于加速计算密集型任务,包括矩阵运算、图像处理和科学计算等。同时,openmp还可以用于图形界面和网络服务器等应用中提高程序的响应性。

3、numa(non-uniform memory access)是一种多处理器计算机系统架构,其主要特点是每个处理器可以访问不同的物理内存,而访问本地内存的速度比访问远程内存的速度更快。这种架构的设计目的是提高多处理器系统的性能和可扩展性。numa的主要优点在于其能够提高多处理器系统的并行处理能力和可扩展性,同时降低系统整体的延迟和负载。采用numa架构的计算机系统可以通过增加处理器和内存单元来扩展系统的性能和容量,同时还能够支持更大规模的内存访问。然而,numa架构也存在一些问题。由于每个处理器访问不同的物理内存,因此在数据访问上存在局部性和平衡性问题。具体来说,局部性问题指的是当一个处理器需要访问远程内存时,访问速度会变慢,从而导致性能下降;而平衡性问题则指的是当多个处理器同时访问同一块内存时,会由于带宽不足导致访问速度变慢,从而导致性能下降。

4、使用openmp并行计算的神经网络作业也拥有fork-join(分解-合并)模型的特征,这种模型下一般存在内存分配与高频访问的执行线程不同和内存分配与高频访问的时机不同两个特征。按照操作系统(如linux)默认的内存分配策略,物理内存会被分配到第一次触发访问的线程所在numa节点上。结果是,神经网络作业通常会将内存分配到主线程所在节点上,在numa架构服务器上进行并行计算时,访存压力就会集中在一个内存控制器上,并且与主线程不在同一节点的线程需要进行远端访问,不仅无法发挥numa架构的优势,甚至反而造成性能下降的问题。

5、综上,numa架构上系统运行时的神经网络程序性能受内存分配策略影响十分显著,目前存在多种解决思路:

6、操作系统提供的静态内存分配策略,如:

7、首次访问内存分配策略(first touch),一般作为默认内存分配策略。如前文所述,在fork-join模型下,平衡性和局部性都很差。

8、交错分配策略(interleave)。它在内存分配时,将数据块交错地分配到不同的内存节点上。这种策略可以均衡地分配内存负载,提高内存访问的并行性。但是其粒度仍然较粗,完全无启发地均匀分配内存,对于一些存在极端访存拥塞问题的应用确实带来了提升,但是对于大多数应用,由于其造成的大量远端访问反而使执行效率下降。

9、numabalancing等操作系统级技术针对的是整个操作系统的性能提升,对单个应用程序的执行效率的提升并不显著,并且动态内存分配策略往往伴随着数据统计或者页迁移等其他操作,而神经网络作业所需要的三种数据:模型参数的内存被所有线程共同访问,无论页迁移到哪个线程的本地,对其他线程都是负面的;中间结果的内存生命周期较短,页迁移不一定能产生正收益;数据集数据每次前传都会复制一个批的数据到新的内存,这部分内存参与前传计算,它的生命周期与中间结果相似都比较短,也不适合动态迁移。相对而言,神经网络作业涉及的数据更适合静态分配策略。

10、由于fork-join模型的特性,内存分配与访问是不同时发生的,这造成了一些根据系统实时状态决定内存分配位置的技术失效。

11、因此,现有内存分配方法中存在的上述缺陷,是目前亟待解决的技术问题。


技术实现思路

1、本专利技术提供了一种面向神经网络作业优化的内存分配方法,旨在解决现有内存分配方法中存在的上述缺陷。

2、本专利技术的涉及一种面向神经网络作业优化的内存分配方法,包括以下步骤:

3、修改tensor的基类的数据结构;

4、使用分块布局实例化神经网络模型的参数对象;

5、初始化并同步参数对象的所有副本;

6、判断神经网络模型的所有参数是否完成初始化;

7、若识别到所有参数完成初始化时,则实例化中间结果对象;

8、判断中间结果是否从第一维进行划分;

9、若识别到中间结果从第一维进行划分时,则将原来tensor对象的内存区修改为分块布局;

10、判断任务划分是否使用静态调度策略;

11、若识别到任务划分使用静态调度策略时,则顺序分配子任务到子线程并将子数据对应到numa节点上;

12、将对应到一个numa节点的所有子数据作为一个分块分配内存;

13、判断所有中间结果是否完成初始化;

14、若识别到所有中间结果完成初始化时,则反向传播后更新参数对象的主副本并同步其他副本;

15、判断神经网络是否训练完成;

16、若识别到神经网络已经训练完成时,则结束。

17、进一步地,修改tensor的基类的数据结构的步骤包括:

18、实现tensor的基类的数据结构添加block属性,当block属性为真时,tensor对象的内存区使用分块的布局;

19、将线程按其编号顺序均匀对应到各个numa节点,并以numa节点为单位划分成线程组。

20、进一步地,初始化并同步参数对象的所有副本的步骤包括:

21、在存在神经网络模型参数未初始化时,对任意参数pi实例化获得tensor对象parameteri,并修改block属性为真;

22、在主线程所在节点上分配内存,在每个其它numa节点上分配一个副本,并将内存指针赋值给parameteri的内存区;

23、将所有副本完成相同的初始化,保证每个副本的一致性。

24、进本文档来自技高网...

【技术保护点】

1.一种面向神经网络作业优化的内存分配方法,其特征在于,包括以下步骤:

2.如权利要求1所述的面向神经网络作业优化的内存分配方法,其特征在于,所述修改Tensor的基类的数据结构的步骤包括:

3.如权利要求2所述的面向神经网络作业优化的内存分配方法,其特征在于,所述初始化并同步参数对象的所有副本的步骤包括:

4.如权利要求1所述的面向神经网络作业优化的内存分配方法,其特征在于,所述若识别到所有参数完成初始化时,则实例化中间结果对象的步骤中,将在并行域Ai中的中间结果数据Di实例化获得Tensor对象Tei。

5.如权利要求4所述的面向神经网络作业优化的内存分配方法,其特征在于,所述判断中间结果是否从第一维进行划分的步骤中,判断线程与线程之间对中间结果数据Di的访问在逻辑上是否从第一维进行划分的,即划分后的数据逻辑上相邻的元素在数据Di中是不是相邻的,如果是,则修改Tensor对象Tei的block属性为真;如果不是,则中间结果数据Di在物理结构上难以分块。

6.如权利要求5所述的面向神经网络作业优化的内存分配方法,其特征在于,所述若识别到任务划分使用静态调度策略时,则顺序分配子任务到子线程并将子数据对应到NUMA节点的步骤中,静态调度下所有子任务会在执行前分配给所有线程,并且分配方式不是随机的,一般按照OpenMP分配给子线程的tid按顺序分配子任务,子任务的区别表现为线程Tj访问数据Di的范围不同,将线程Tj访问数据Di的部分称为子数据SDj。

7.如权利要求6所述的面向神经网络作业优化的内存分配方法,其特征在于,所述若识别到所有中间结果完成初始化时,则反向传播后更新参数对象的主副本并同步其他副本的步骤中,反向传播结束后,获取主线程所在NUMA节点Nk,然后对任意模型参数Pi的实例化对象Parameteri的指针数组下标为k的副本对象进行更新,将更新结果拷贝到该指针数组下的其他副本,直至所有副本再次保持一致。

8.如权利要求1所述的面向神经网络作业优化的内存分配方法,其特征在于,所述判断中间结果是否从第一维进行划分的步骤之后还包括:

9.如权利要求8所述的面向神经网络作业优化的内存分配方法,其特征在于,所述判断任务划分是否使用静态调度策略的步骤之后还包括:

10.如权利要求8所述的面向神经网络作业优化的内存分配方法,其特征在于,所述判断所有中间结果是否完成初始化的步骤之后包括:

...

【技术特征摘要】

1.一种面向神经网络作业优化的内存分配方法,其特征在于,包括以下步骤:

2.如权利要求1所述的面向神经网络作业优化的内存分配方法,其特征在于,所述修改tensor的基类的数据结构的步骤包括:

3.如权利要求2所述的面向神经网络作业优化的内存分配方法,其特征在于,所述初始化并同步参数对象的所有副本的步骤包括:

4.如权利要求1所述的面向神经网络作业优化的内存分配方法,其特征在于,所述若识别到所有参数完成初始化时,则实例化中间结果对象的步骤中,将在并行域ai中的中间结果数据di实例化获得tensor对象tei。

5.如权利要求4所述的面向神经网络作业优化的内存分配方法,其特征在于,所述判断中间结果是否从第一维进行划分的步骤中,判断线程与线程之间对中间结果数据di的访问在逻辑上是否从第一维进行划分的,即划分后的数据逻辑上相邻的元素在数据di中是不是相邻的,如果是,则修改tensor对象tei的block属性为真;如果不是,则中间结果数据di在物理结构上难以分块。

6.如权利要求5所述的面向神经网络作业优化的内存分配方法,其特征在于,所述若识别到任务划分使用静态调度策略时,则顺序分配子任务到子线...

【专利技术属性】
技术研发人员:董攀方孝翔李磊磊谭郁松蹇松雷罗军任怡王怡琦黄辰林丁滟李宝
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1