一种基于固态盘扩展内存的大规模深度学习方法及系统与流程

文档序号:18213560发布日期:2019-07-19 22:28阅读:283来源:国知局
一种基于固态盘扩展内存的大规模深度学习方法及系统与流程

本发明涉及面向深度学习应用的运行支撑系统领域,具体涉及一种基于固态盘(ssd)扩展内存的大规模深度学习方法及系统,用于在深度学习应用运行过程中将部分暂时不用的数据写回ssd、在数据即将使用时及时地从ssd预取到内存,从而借助ssd扩展内存的实现对大规模深度学习的加速。



背景技术:

近几年来,人工智能研究十分热门,深度学习是其中的一种核心技术,其基本模型是深度神经网络。随着深度学习研究的日趋深入,人工神经网络的层数不断增加,从alexnet的8层,到vgg的19层和googlenet的22层,甚至resnet更是深达152层。更深的网络意味着训练网络模型需要用到更大的内存。另外,深度神经网络训练时的批次大小(batchsize)对深度学习模型的优化程度和训练速度也有较大的影响,较大的批尺寸有利于加快深度网络训练的收敛速度。批次大小是深度网络的超参数,被称为网络的宽度,训练更宽的网络同样意味着需要用到更大的内存。

由于总体上更深更广的网络对深度学习的精度提高有显著的作用,深度神经网络有朝着更深更广的方向发展,其面临的一个问题便是内存的不足。一般计算机的内存大小非常有限,因此如何利用有限的内存构建更深更广的网络便成为一个迫切的问题。

目前深度学习支撑技术领域的内存管理尚处于初步研究的阶段。深度学习的研究一般是以深度学习框架为载体的,主流深度学习框架包括caffe、tensorflow和mxnet等,它们的内存管理方案代表了最常用的内存管理策略。caffe是较为早期的深度学习框架,它是在网络层数较少的背景下出现的,更多地注重性能,因此忽视了内存管理策略。tensorflow是比较新的深度学习框架,它使用静态计算图模型构建深度神经网络,其内存管理采用了有效内存存活时间分析和将部分参数从gpu显存写到cpu内存的策略等。mxnet同样分析了有效内存的存活时间,并且还采用了重计算的内存管理策略。

有效内存存活时间分析,是通过分析深度神经网络结构的图模型中各结点在时间上的依赖,当某一内存块不再需要被用到的时候释放掉,达到节省内存的目的。这一方案对于节省内存的作用有限,最优的情况下节省一半的内存,内存占用会维持在同一量级。部分参数从gpu显存写到cpu内存的策略则是将cpu内存作为gpu显存的扩展,将短时间内不需使用的内存数据通过通信转移的方法,并在需要用到的时候再将数据取回。这一方案需要额外的通信开销,并且同样会受限于cpu内存。重计算策略是,对于内存数据中容易计算得到的暂时不存放在内存中,等待需要用到的时候重新计算得到这一部分数据。这一方案则是需要付出额外的计算开销。总的来讲,现有方案存在几个问题,如通信时间与计算时间不充分重叠、后备存储空间有限等。本发明从新的角度出发,试图利用低延迟高带宽的固态硬盘(ssd,solidstatedrive)扩充内存,提出一种提高深度学习应用内存使用效率的方法。

计算机内存是dram,较为昂贵的造价和较低的存储密度决定了其容量一般要比计算机外部存储即磁盘的容量要小得多。过去受限于机械硬盘的物理旋转寻道结构,磁盘的速度与延迟非常大,和dram相比是不能接受的,因此传统的计算机软件结构设计大多尽可能避免磁盘io。机械硬盘读写速度的量级大概为200mb/s左右(连续读写时可取得),而dramddr4的读写速度则达到25gb/s,两者的量级相差上百倍,而且机械硬盘随机读写速度比连续读写的速度还要慢很多。近年来固态硬盘ssd的出现促使外部存储的速度有了革命性的突破,使得当前在软件架构设计时合理利用ssd作内存的扩展成为可能。picessd固态硬盘速度高达3gb/s,与dram的速度相比差距已经在可以容忍的范围之内。因此将ssd纳入深度学习框架的内存管理机制中以提高深度学习中的内存效率变得很有前景和实际意义。



技术实现要素:

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于固态盘扩展内存的大规模深度学习方法及系统,本发明在深度神经网络学习时利用预取和写回机制实现内存和固态盘的协作,能够有效缓解深度神经网络的训练过程中内存不足的问题,从而提高内存利用效率的方法,使得训练更深更广的深度网络变得更容易。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于固态盘扩展内存的大规模深度学习方法,实施步骤包括:

1)根据神经网络定义文件确定深度神经网络的计算及数据依赖关系;

2)建立训练线程及内存管理调度线程;

3)通过训练线程训练深度神经网络,且在训练过程中通过内存管理调度线程检测深度神经网络的训练情况,每完成一个层的训练则跳转执行步骤4);

4)针对后续训练需要的控制参数数据执行从固态盘的预取、针对后续训练不需要的控制参数数据执行从固态盘的预取,所述后续训练需要的控制参数数据、后续训练不需要的控制参数数据均为事先根据深度神经网络的计算及数据依赖关系确定。

优选地,步骤1)中构建深度神经网络的拓扑结构图的详细步骤包括:

1.1)扫描深度神经网络定义,把深度神经网络中的每一层作为层顶点从而建立层顶点;

1.2)确定各个层顶点的输入输出,把深度神经网络中每一层网络的输入和输出则看作是图中的数据顶点从而建立数据顶点;

1.3)针对前向传播中的每一个层顶点,将层顶点的与输出进行有向边连接,将输入与层顶点进行有向边连接,确立深度神经网络前向传播的数据依赖以及计算依赖;

1.4)一方面,针对每一个层顶点,首先将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,建立依赖网络的前向传播部分,然后将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输出数据顶点建立有向连接、层顶点的前向依赖数据顶点与层顶点建立有向连接,建立依赖网络的后向传播部分,最后将依赖网络的前向传播部分和后向传播部分相结合构成依赖网络;另一方面,针对每一个层顶点,首先将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,确立计算网络的前向传播部分;然后将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输入数据顶点建立有向连接,确立计算网络的反向传播部分,最后将计算网络的前向传播部分和后向传播部分相结合构成计算网络。

优选地,步骤3)在训练过程中通过内存管理调度线程检测深度神经网络的训练情况的步骤包括:

3.1)训练线程训练深度神经网络,且每执行完一层的运算后跳转执行下一步;

3.2)针对预设的全局共享队列请求互斥锁加锁;

3.3)如果互斥锁加锁请求成功,则将当前层的标识加入全局共享队列,释放互斥锁并触发条件变量唤醒,跳转执行步骤3.4);如果互斥锁加锁请求失败,则线程挂起等待条件变量唤醒,且在条件变量唤醒后跳转执行步骤3.2);

3.4)内存管理调度线程请求互斥锁加锁;

3.5)如果互斥锁加锁请求成功,跳转执行步骤3.6);如果互斥锁加锁请求失败,则线程挂起等待条件变量唤醒,且在条件变量唤醒后跳转执行步骤3.4);

3.6)检查全局共享队列是否为空,如果非空则将全局共享队列中的一个消息作为训练完成的一个层,释放互斥锁并触发条件变量唤醒,跳转执行步骤4);否则,线程挂起等待条件变量唤醒,且在条件变量唤醒后跳转执行步骤3.4)。

优选地,步骤4)包括执行可配置方案,所述执行可配置方案包括针对完成训练的层,从固态盘中预取或预分配该层的后续num_prefetch层的依赖数据,并将用过的不是后续num_writeout层的数据依赖顶点写到固态盘中,其中num_prefetch、num_writeout为预设的配置参数。

优选地,步骤4)包括执行基于时间方案,所述执行基于时间方案包括:所述执行可配置方案包括针对完成训练的层,针对该层的“预取”集合执行从固态盘预取到内存中的预取操作,且“预取”的数据顶点如果尚未分配内存空间则为其分配内存空间;针对该层的“写回”集合执行从内存写回固态盘的写回操作;针对该层的“释放”集合执行从内存中释放的释放操作;其中“预取”、“写回”和“释放”集合的事先根据深度神经网络的计算及数据依赖关系确定的步骤包括:

为计算网络的每个层顶点建立“预取”、“释放”和“写回”三个集合,然后依次扫描计算网络的数据顶点:对计算网络的每个数据顶点m,沿着计算网络训练的逆顺序扫描,累加路径上各个层顶点的计算时间,当该数据顶点m的读取时间刚好小于x层计算时间之和time(x)而大于x+1层的计算时间之和time(x+1)时,前x+1层顶点的“预取”集合加入该顶点m;

对计算网络的每个数据顶点d,沿着计算网络训练的顺序扫描,累加路径上各个层顶点的计算时间,寻找依赖该数据顶点d的层;如果存在两个或以上依赖该数据顶点d的层顶点l1和层顶点l2,且相邻两个层顶点之间的各层计算时间之和time(y)大于该顶点的读取时间和写回时间之和,则在层l1的“写回”集合加入该数据顶点d;如果只有一个依赖该数据顶点d的层,则在层l1的“释放”集合加入该数据顶点d。

此外,本发明还提供一种基于固态盘扩展内存的大规模深度学习系统,包括具有固态盘的计算机设备,该计算机设备被编程或者配置以执行本发明前述基于固态盘扩展内存的大规模深度学习方法的步骤。

此外,本发明还提供一种基于固态盘扩展内存的大规模深度学习系统,包括具有固态盘的计算机设备,该计算机设备的存储介质上存储有被编程或者配置以执行本发明前述基于固态盘扩展内存的大规模深度学习方法的计算机程序。

此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或者配置以执行本发明前述基于固态盘扩展内存的大规模深度学习方法的计算机程序。

此外,本发明还提供一种基于固态盘扩展内存的大规模深度学习方法系统,包括:

依赖关系分析程序单元,用于根据神经网络定义文件确定深度神经网络的计算及数据依赖关系;

线程初始化程序单元,用于建立训练线程及内存管理调度线程;

训练线程,用于训练深度神经网络;

内存管理调度线程,用于在训练过程中内存管理调度线程检测深度神经网络的训练情况,每完成一个层的训练则针对后续训练需要的控制参数数据执行从固态盘的预取、针对后续训练不需要的控制参数数据执行从固态盘的预取,所述后续训练需要的控制参数数据、后续训练不需要的控制参数数据均为事先根据深度神经网络的计算及数据依赖关系确定。

和现有技术相比,本发明具有下述优点:

1、本发明能够实现将部分参数写回固态盘所需通信和计算在时间上充分重叠。本发明使用多线程的技术方案,在多线程之间通过异步通信机制同步网络训练进度信息,使得调度线程能够在训练线程执行计算的同时,执行将部分参数写到固态盘的操作。调度操作与计算操作在时间上的重叠,使得在深度神经网络的训练中加入内存调度方案的代价较小。

2、本发明提供了更充足的扩展存储空间。本发明使用了容量大的固态盘作为内存的扩展,使得深度神经网络训练时可用存储空间和数据交换不再局限于gpu内存和cpu内存,提供了非常充足的后备存储空间,增加了深度神经网络的可扩展性,能够很大程度加大加深可训练的深度神经网络模型的深度和宽度。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本实施例的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例一方法的基本流程示意图。

图2为本发明实施例一及实施例二方法的方案设计流程示意图。

图3为本发明实施例一的网络拓扑结构示意图。

图4为本发明实施例一中确定计算及数据依赖关系的流程示意图。

图5为本发明实施例一中异步通信机制的原理示意图。

图6为本发明实施例一中训练线程的异步通信流程示意图。

图7为本发明实施例一中内存管理调度线程的异步通信流程示意图。

图8为本发明实施例一中可配置方案的执行原理示意图。

图9为本发明实施例一中可配置方案的执行流程示意图。

图10为本发明实施例一中基于时间方案的执行原理示意图。

图11为本发明实施例一中基于时间方案的执行流程示意图。

具体实施方式

实施例一:

如图1所示,本实施例基于固态盘扩展内存的大规模深度学习方法的实施步骤包括:

1)根据神经网络定义文件确定深度神经网络的计算及数据依赖关系;

2)建立训练线程及内存管理调度线程;

3)通过训练线程训练深度神经网络,且在训练过程中通过内存管理调度线程检测深度神经网络的训练情况,每完成一个层的训练则跳转执行步骤4);

4)针对后续训练需要的控制参数数据执行从固态盘的预取、针对后续训练不需要的控制参数数据执行从固态盘的预取,后续训练需要的控制参数数据、后续训练不需要的控制参数数据均为事先根据深度神经网络的计算及数据依赖关系确定。

如图2所示,本实施例基于固态盘扩展内存的大规模深度学习方法的方案设计流程为:

s1、输入的深度神经网络的定义;

s2、根据输入的深度神经网络的定义,构建深度神经网络的结构图(含计算网络和依赖网络),作为规划内存管理策略的根据;

s3、构建异步通信机制的相关数据结构。

s4、在深度神经网络结构图的基础上规划内存管理策略(本实施例为可配置方案,实施例二为基于时间方案);

s5、进入深度神经网络训练阶段,内存管理策略开始执行,采用多线程并行执行训练和管理调度的方法,在深度神经训练的同时进行内存的管理调度。训练过程中,训练线程和调度线程通过异步通信的数据结构同步信息,调度线程得知训练线程执行到的在网络中的位置,并执行内存管理策略。

本实施例中需要接受一个深度神经网络文本定义的输入,然后选择合适的数据结构,构建整个深度神经网络模型的拓扑图,以确定在前向和后向传播中各层的运算顺序和数据依赖关系。目前深度神经网络的结构是固定的,由一层层的各种网络层组成。网络的每一层都有输入数据和输出数据,称为中间结果数据,前一层的输出可以是下一层或后面的层的输入。将网络的每一层看成图的层顶点,网络的输入和输出则看作是图中的数据顶点;由于神经网络模型的静态不变性,可以在训练之前就确定各个顶点的计算依赖关系和数据依赖关系,并使用有向图表示。因此深度神经网络结构的拓扑图可以使用图这种数据结构表示,图的储存可以用邻接矩阵或者邻接表,本发明涉及的技术方案可使用其中任一种储存方案。存在运算依赖性的两个顶点,被依赖的顶点发出一条有向边到达依赖的顶点,所有的依赖关系可以由图的有向边表示,整个深度神经网络模型的拓扑结构就以有向图的形式表示出来了;数据依赖关系也可以类似地用有向边表示。表示运算依赖性的有向边和表示数据依赖关系的有向边一起构成了深度神经网络结构图。

本实施例中的深度神经网络具体采用lenet为例,lenet局部如图3所示。为了方便方案实施过程的管理,本实施例需构建两种网络深度神经网络模型的拓扑结构图:表示各层运算的先后的计算网络,表示各层运算的数据依赖顺序的依赖网络。图3包含了计算网络和依赖网络:由实线箭头和点线箭头连接的是计算网络,由所有三种箭头连接的是依赖网络,两种网络存在部分重叠。两种网络的有向边的箭头表示有向边的方向;在计算网络中,边的方向表示计算的前后顺序,而在依赖网络中,边的方向表示计算时的数据依赖。深度神经网络图的顶点还需要保存网络训练过程中的数据:数据顶点保存中间结果数据和i/o耗时数据,层顶点保存可学习参数数据和计算耗时数据。后续的技术方案将用到这些数据。深度神经网络结构图的数据结构构建过程为:输入神经网络定义,构建层顶点和数据顶点,用邻接表或邻接矩阵表示计算网络和依赖网络。

如图4所示,步骤1)中构建深度神经网络的拓扑结构图的详细步骤包括:

1.1)扫描深度神经网络定义,把深度神经网络中的每一层作为层顶点从而建立层顶点;

1.2)确定各个层顶点的输入输出,把深度神经网络中每一层网络的输入和输出则看作是图中的数据顶点从而建立数据顶点;

1.3)针对前向传播中的每一个层顶点,将层顶点的与输出进行有向边连接,将输入与层顶点进行有向边连接,确立深度神经网络前向传播的数据依赖以及计算依赖;

1.4)一方面,针对每一个层顶点,首先将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,建立依赖网络的前向传播部分,然后将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输出数据顶点建立有向连接、层顶点的前向依赖数据顶点与层顶点建立有向连接,建立依赖网络的后向传播部分,最后将依赖网络的前向传播部分和后向传播部分相结合构成依赖网络;另一方面,针对每一个层顶点,首先将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,确立计算网络的前向传播部分;然后将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输入数据顶点建立有向连接,确立计算网络的反向传播部分,最后将计算网络的前向传播部分和后向传播部分相结合构成计算网络。

本实施例中,深度神经网络定义以caffe为例,是以proto文件形式保存的。proto文件由神经网络所有的层及其参数组成,每层的参数指明了输入和输出。本实施例实施方式将网络拓扑数据结构分成两个网络,一个是计算网络,另一个是依赖网络。

依赖网络的构建过程为:

1.1a)扫描神经网络定义文件;

1.2a)建立层顶点;

1.3a)根据在proto文件中指明的每层的输入输出,建立数据顶点;

1.4a)首先将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,建立依赖网络的前向传播部分,然后将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输出数据顶点建立有向连接、层顶点的前向依赖数据顶点与层顶点建立有向连接,建立依赖网络的后向传播部分,最后将依赖网络的前向传播部分和后向传播部分相结合构成依赖网络;

首先将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,确立计算网络的前向传播部分;然后将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输入数据顶点建立有向连接,确立计算网络的反向传播部分,最后将计算网络的前向传播部分和后向传播部分相结合构成计算网络。

计算网络的构建过程为:

2.1b)扫描神经网络定义文件;

2.2b)建立层顶点;

2.3b)根据在proto文件中指明的每层的输入输出,建立数据顶点;

2.4b)将层顶点与层的输出数据顶点建立有向连接、层的输入数据顶点与层顶点建立有向连接,确立计算网络的前向传播部分;将层的输出数据顶点与层顶点建立有向连接、层顶点与层的输入数据顶点建立有向连接,确立计算网络的反向传播部分,两部分相结合即构成计算网络。

本实施例设计的内存管理机制采用多线程并行执行训练和内存管理调度的方法,不同线程之间需要简单高效的通信机制。因此,本实施例设计了一个异步通信机制,来协调各个线程的工作。异步通信机制相关的数据结构包括:一个全局共享队列、一个互斥锁和一个条件变量。本实施例涉及的线程包括两种,训练线程和内存管理调度线程,训练线程负责深度神经网络训练过程的计算任务,即训练数据的前向传播和后向传播;内存管理调度线程负责在适当的时间将部分适于写出的数据通过io写到ssd中,将需要用到的数据从ssd中预取。由于线程的隔离性,两种线程之间不能直接获得彼此的运行状态信息。但是内存管理调度线程需要获得训练进行到哪一层的信息,这部分信息被训练线程所掌握,因此训练线程需要通过以下异步通信机制通知内存管理调度线程:设置一个全局共享队列,该队列有三种主要功能:入队、出队和非空与否的判断。训练线程和内存管理调度线程都能访问这个队列,将需要同步的消息入队和出队。两个线程都可以访问该全局共享队列,就会存在线程不安全的问题,因此本实施例使用锁机制和条件变量机制保证共享队列的互斥访问,以保障全局共享队列的线程安全。互斥锁和与其关联的条件变量可以保障一个数据结构在同一时刻只有一个线程在访问,从而保证对共享队列的访问是互斥的。

如图5所示,异步通信的数据结构包括一个全局的共享队列、一个保证多线程互斥访问队列的互斥锁,一个和互斥锁关联的条件变量。共享队列通过封装一个队列得到。共享队列提供了三个功能,分别是入队、出队和非空判断。入队功能把消息加到队列的尾部,出队功能从队列头部取出一个消息,非空判断功能返回队列是否为空。互斥锁使用c++语言的boost库中的mutex实现。互斥锁在一个时刻只能由一个线程锁定,在其锁定时,其它线程对该互斥锁的锁定尝试都会被阻塞,等待该线程解锁后其他线程才能重新锁定该互斥锁。条件变量使用c++语言的boost库中的conditonal_variable实现。在条件变量等待时,线程会挂起,并暂时地解锁与之关联的互斥锁;在条件变量被唤醒后,线程重新尝试锁定互斥锁。训练线程是深度网络训练的执行线程,控制前向传播和后向传播的计算。训练线程在每层训练结束之后将消息入队,这一消息包含了训练进行到网络哪一部分的信息。训练线程给共享队列加互斥锁,将同步消息入队,再执行唤醒条件变量操作。

如图5所示,异步通信的过程为:训练线程在训练过程中,到达需要发送同步消息给内存管理调度线程的时候,给共享队列加上互斥锁,表明共享队列已被该训练线程独占,然后将封装好的包含训练进度的消息入队,再释放互斥锁,同时唤醒条件变量。内存管理调度线程则不断尝试从共享队列中读取消息,执行相应的内存管理策略,如果队列为空,则进入等待条件变量的线程挂起状态,直到被训练线程唤醒。通信的异步性体现在训练线程给内存管理调度线程发送消息时,内存管理调度线程不需要停下来等待接收。因此该异步通信机制能够节省下许多训练线程的等待时间,可以提高整体性能。

如图6和图7所示,步骤3)在训练过程中通过内存管理调度线程检测深度神经网络的训练情况的步骤包括:

3.1)训练线程训练深度神经网络,且每执行完一层的运算后跳转执行下一步;

3.2)针对预设的全局共享队列请求互斥锁加锁;

3.3)如果互斥锁加锁请求成功,则将当前层的标识加入全局共享队列,释放互斥锁并触发条件变量唤醒,跳转执行步骤3.4);如果互斥锁加锁请求失败,则线程挂起等待条件变量唤醒,且在条件变量唤醒后跳转执行步骤3.2);

3.4)内存管理调度线程请求互斥锁加锁;

3.5)如果互斥锁加锁请求成功,跳转执行步骤3.6);如果互斥锁加锁请求失败,则线程挂起等待条件变量唤醒,且在条件变量唤醒后跳转执行步骤3.4);

3.6)检查全局共享队列是否为空,如果非空则将全局共享队列中的一个消息作为训练完成的一个层,释放互斥锁并触发条件变量唤醒,跳转执行步骤4);否则,线程挂起等待条件变量唤醒,且在条件变量唤醒后跳转执行步骤3.4)。

本实施例的异步通信机制中,训练线程的执行流程如图6所示,步骤包括:

3.1a)训练线程执行深度神经网络训练过程的计算;

3.2a)训练线程执行完一层的运算,请求互斥锁的加锁;

3.3a)若成功获得互斥锁,则将当前层的标识加入全局共享队列;若不能获得互斥锁,则线程挂起等待条件变量唤醒;

3.4a)当队列被其它线程访问结束后互斥锁释放,条件变量唤醒训练线程,继续第3.3a)步。

内存管理调度线程是执行内存管理调度策略的线程,控制参数数据在内存和固态盘之间的移动。调度线程和训练线程同时开始运行,调度线程从共享队列中获得训练线程的消息,从而执行相应内存调度操作。调度线程给共享队列加互斥锁,判断队列的非空状态:如果队列为空,说明训练线程尚未到达同步点,在条件变量上等待;如果队列不为空,则将一个消息出队,执行对应的内存调度策略。

本实施例的异步通信机制中,内存管理调度线程的执行流程如图7所示,步骤包括:

3.1b)内存管理调度线程请求互斥锁加锁;

3.2b)若成功获得互斥锁,则检查队列是否为空;若不能获得互斥锁,则线程挂起等待条件变量唤醒;

3.3b)当队列被其它线程访问结束后互斥锁释放,条件变量唤醒内存管理调度线程,继续第2.1步;

3.4b)若队列非空,则将一个消息出队,执行内存管理调度策略,控制数据在内存和固态盘之间的移动;若队列为空,则线程挂起等待条件变量唤醒;

3.5b)当队列有新消息入队,条件变量唤醒内存管理调度线程,继续第3.4b)步。

调度线程在运行过程中根据从共享队列中获得的训练线程的消息,执行内存管理调度算法,控制参数数据在内存和固态盘之间的移动。内存管理调度算法有两种可选方案,可配置方案与基于时间的方案;两种方案本质上都是对深度神经网络结构的可预测性和局部性的利用,区别之处在于可配置方案给予熟悉其网络特性的用户更多的控制权,基于时间的方案则自动化规划内存的使用。在实施角度,两者都是基于在某一层的数据预取和写回,在某一层执行各自对应的数据预取和写回策略。

本实施例设计的内存管理机制需要在运行时管理调度内存,将部分适于写到外部存储的参数写到ssd,在训练之前需要规划内存管理调度策略,规定在训练过程的哪个时刻写回和预取哪一部分参数数据。本发明基于同一种构思提出可选的两种调度策略:可配置方案(实施例一)和基于时间方案(实施例二)。

如图8和图9所示,步骤4)包括执行可配置方案,执行可配置方案包括针对完成训练的层,从固态盘中预取或预分配该层的后续num_prefetch层的依赖数据,并将用过的不是后续num_writeout层的数据依赖顶点写到固态盘中,其中num_prefetch、num_writeout为预设的配置参数(超参数)。本实施例的可配置方案中,用户设置num_writeout参数和num_prefetch参数;本实施例中都设置为1,具体的使用中二者可以不同,设置成更高效的组合。

可配置方案给予用户充分的控制权,考虑到用户可能对其训练的深度神经网络更为熟悉,有利于做精细化配置。可配置方案是另外一种思路,把预取和写回的层数作为神经网络的超参数,交由使用者选择配置。可配置方案中配置的两个超参数是num_prefecth和num_writeout,使用者可根据机器内存大小、深度网络局部块的规模等因素确定。这种方案的优点是用户可根据需要自行配置。每一层的计算完成的时候,执行预取和写回策略:后续num_prefecth个层顶点依赖的各个数据顶点,对于尚未分配内存空间的数据顶点,分配所需的内存空间,对于已写回到外部存储的数据顶点,将其中间结果数据读取到内存中;该层依赖的各个数据顶点,写回不为后续num_writeout个层顶点的依赖的数据顶点所存储的中间结果数据。由于计算网络图表现的是训练过程各层运算的前后顺序,依赖网络表现的是各层所依赖的数据顶点,因此可配置方案涉及的数据顶点为依赖网络中的顶点。内存管理调度无须区分前向传播和后向传播,实际上两个阶段的方法是相同的。

此外,本实施例还提供一种基于固态盘扩展内存的大规模深度学习系统,包括具有固态盘的计算机设备,该计算机设备被编程或者配置以执行本实施例前述基于固态盘扩展内存的大规模深度学习方法的步骤。此外,本实施例还提供一种基于固态盘扩展内存的大规模深度学习系统,包括具有固态盘的计算机设备,该计算机设备的存储介质上存储有被编程或者配置以执行本实施例前述基于固态盘扩展内存的大规模深度学习方法的计算机程序。此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或者配置以执行本实施例前述基于固态盘扩展内存的大规模深度学习方法的计算机程序。此外,本实施例还提供一种基于固态盘扩展内存的大规模深度学习方法系统,包括:

依赖关系分析程序单元,用于根据神经网络定义文件确定深度神经网络的计算及数据依赖关系;

线程初始化程序单元,用于建立训练线程及内存管理调度线程;

训练线程,用于训练深度神经网络;

内存管理调度线程,用于在训练过程中内存管理调度线程检测深度神经网络的训练情况,每完成一个层的训练则针对后续训练需要的控制参数数据执行从固态盘的预取、针对后续训练不需要的控制参数数据执行从固态盘的预取,后续训练需要的控制参数数据、后续训练不需要的控制参数数据均为事先根据深度神经网络的计算及数据依赖关系确定。

实施例二:

本实施例与实施例一基本相同,其主要区别点为:本实施例步骤4)包括执行基于时间方案。基于时间的方案利用神经网络结构的可预测性,自动控制内存调度。基本思路是,参数只需要在要被用到的局部时间内存在于内存之中。因此其基本过程为:

对于计算网络的每个数据顶点,沿着计算网络训练的逆顺序搜索,到达某一层顶点,路径上的计算时间之和小于数据节点的预取时间,而到达该层顶点的下一层顶点的路径上的计算时间之和大于数据节点的预取时间,则在该层顶点的下一层顶点之前预取该数据顶点;如果要预取的数据顶点尚未分配内存空间的,则分配内存空间;

对于计算网络的每个数据顶点,沿着计算网络训练的顺序搜索,若存在依赖该数据顶点的层顶点,每连续两个之间的路径,如果满足计算时间之和大于这个数据节点的预取时间与写回时间之和,则在这两个层顶点的前一个使用该数据顶点之后将数据顶点写回ssd;如果只有一个依赖该数据顶点的层顶点,则在该层顶点使用后释放数据顶点的内存空间。

基于时间的方案考虑的是计算网络中每个数据顶点的预取和写回的基于时间的最合适的时机,表现为每个层都对应三组数据顶点,对应预取、写回和释放三种操作(预分配是预取的一种特例),在训练完一层时执行三组数据顶点的相应操作。

如图10和图11所示,本实施例中执行基于时间方案包括:

执行可配置方案包括针对完成训练的层,针对该层的“预取”集合执行从固态盘预取到内存中的预取操作,且“预取”的数据顶点如果尚未分配内存空间则为其分配内存空间;针对该层的“写回”集合执行从内存写回固态盘的写回操作;针对该层的“释放”集合执行从内存中释放的释放操作;其中“预取”、“写回”和“释放”集合的事先根据深度神经网络的计算及数据依赖关系确定的步骤包括:

为计算网络的每个层顶点建立“预取”、“释放”和“写回”三个集合,然后依次扫描计算网络的数据顶点:对计算网络的每个数据顶点m,沿着计算网络训练的逆顺序扫描,累加路径上各个层顶点的计算时间,当该数据顶点m的读取时间刚好小于x层计算时间之和time(x)而大于x+1层的计算时间之和time(x+1)时,前x+1层顶点的“预取”集合加入该顶点m;

对计算网络的每个数据顶点d,沿着计算网络训练的顺序扫描,累加路径上各个层顶点的计算时间,寻找依赖该数据顶点d的层;如果存在两个或以上依赖该数据顶点d的层顶点l1和层顶点l2,且相邻两个层顶点之间的各层计算时间之和time(y)大于该顶点的读取时间和写回时间之和,则在层l1的“写回”集合加入该数据顶点d;如果只有一个依赖该数据顶点d的层,则在层l1的“释放”集合加入该数据顶点d。

在基于时间的方案中,用户不需要设置超参数。基于时间的方案分为两步,第一步是在神经网络训练之前的规划,第二步才是神经网络训练过程中的调度执行。基于时间方案的规划流程如图10所示,具体步骤包括:

4.1a)为计算网络的每个层顶点建立“预取”、“释放”和“写回”三个集合,然后依次扫描计算网络的数据顶点;

4.2a)对计算网络的每个数据顶点m,沿着计算网络训练的逆顺序扫描(方向如图9所示),累加路径上各个层顶点的计算时间;

4.3a)当该数据顶点m的读取时间刚好小于x层计算时间之和time(x)而大于x+1层的计算时间之和time(x+1)时,前x+1层顶点的“预取”集合加入该顶点m;

4.4a)对计算网络的每个数据顶点d,沿着计算网络训练的顺序扫描,累加路径上各个层顶点的计算时间,寻找依赖该顶点的层;

4.5a)如果存在两个或以上依赖该数据顶点d的层顶点,且相邻两个层顶点之间的各层计算时间之和time(y)大于该顶点的读取时间和写回时间之和,则在层l1的“写回”集合加入该数据顶点d;如果只有一个依赖该数据顶点d的层,则在层l1的“释放”集合加入该数据顶点d。对于存在多个依赖该数据顶点d的层顶点的情况,例如3个层顶点,则第1和第2个层顶点为相邻两个层顶点,第2和第3个层顶点为相邻两个层顶点,都进行该检查),例如图9的层顶点l1和层顶点l2,则层l1的“写回”集合加入顶点d(如果只有一个依赖该顶点的层,则层l1的“释放”集合加入顶点d)。

以上是基于时间的方案的规划流程,是在神经网络训练之前、计算网络和依赖网络构建之后就已经完成的,是该方案的第一步,而该方案的第二步,在神经网络训练运行过程中执行的,基于时间的方案的执行流程为:对上述基于时间方案的规划流程得到的该层的“预取”、“写回”和“释放”集合执行对应的操作;“预取”的数据顶点如果尚未分配内存空间则为其分配内存空间。

此外,本实施例还提供一种基于固态盘扩展内存的大规模深度学习系统,包括具有固态盘的计算机设备,该计算机设备被编程或者配置以执行本实施例前述基于固态盘扩展内存的大规模深度学习方法的步骤。此外,本实施例还提供一种基于固态盘扩展内存的大规模深度学习系统,包括具有固态盘的计算机设备,该计算机设备的存储介质上存储有被编程或者配置以执行本实施例前述基于固态盘扩展内存的大规模深度学习方法的计算机程序。此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或者配置以执行本实施例前述基于固态盘扩展内存的大规模深度学习方法的计算机程序。此外,本实施例还提供一种基于固态盘扩展内存的大规模深度学习方法系统,包括:

依赖关系分析程序单元,用于根据神经网络定义文件确定深度神经网络的计算及数据依赖关系;

线程初始化程序单元,用于建立训练线程及内存管理调度线程;

训练线程,用于训练深度神经网络;

内存管理调度线程,用于在训练过程中内存管理调度线程检测深度神经网络的训练情况,每完成一个层的训练则针对后续训练需要的控制参数数据执行从固态盘的预取、针对后续训练不需要的控制参数数据执行从固态盘的预取,后续训练需要的控制参数数据、后续训练不需要的控制参数数据均为事先根据深度神经网络的计算及数据依赖关系确定。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1