用于存储器管理的方法和用于机器学习的系统及方法与流程

文档序号:18451158发布日期:2019-08-17 01:16阅读:330来源:国知局
用于存储器管理的方法和用于机器学习的系统及方法与流程

根据本发明的实施例的一个或多个方面涉及存储器管理,且更具体来说,涉及一种用于为机器学习而管理存储器的系统及方法。



背景技术:

机器学习(machinelearning,ml)当在图形处理器(graphicsprocessingunit,gpu)上执行时可遭受与gpu存储器相关的性能瓶颈。因此,当某些数据对象对于有待执行的计算来说不再被需要时,如果存储器仍被不必要地分配给那些数据对象,则性能可能会受到影响。

因此,需要一种改善的存储器管理系统及方法。



技术实现要素:

根据本发明的实施例,提供一种用于存储器管理的方法,包括:产生依赖关系结构(dependencystructure),所述依赖关系结构包含一个或多个任务识别符及一个或多个数据对象识别符,所述依赖关系结构包含对所述一个或多个数据对象识别符中的第一数据对象识别符的一个或多个依赖关系的列表,所述列表的第一依赖关系识别以由所述第一数据对象识别符识别的第一数据对象作为输入的第一任务;确定计数,所述计数是对所述第一数据对象识别符的依赖关系的数目;确定所述第一任务已完成执行;至少部分地基于确定所述第一任务已完成执行而将所述计数递减1;确定所述计数小于第一阈值;以及至少部分地基于确定所述计数小于所述第一阈值而将所述第一数据对象解除分配。

在一个实施例中,所述第一阈值是1。

在一个实施例中,所述方法包括确定与所述第一任务相关联的依赖关系的数目。

在一个实施例中,所述第一任务是神经网络的第一层中的计算运算。

在一个实施例中,所述第一数据对象是所述第一层中的激活(activation)。

在一个实施例中,所述第一任务包括在反向推算(backwardpass)期间:计算所述激活中的梯度;以及计算权重中的梯度。

在一个实施例中,所述第一数据对象是所述第一层中的输入梯度。

在一个实施例中,所述第一任务包括在反向推算期间:计算激活中的梯度;以及计算权重中的梯度。

在一个实施例中,所述第一数据对象是所述第一层中的权重梯度。

在一个实施例中,所述第一任务包括对与所述权重梯度对应的权重执行就地更新(in-placeupdate)。

在一个实施例中,所述方法包括:产生零个或更多个推算内存留(pass-persistent)数据对象识别符的列表,所述零个或更多个推算内存留数据对象识别符中的第一推算内存留数据对象识别符识别神经网络中的第一数据对象;确定反向推算已完成;以及基于确定所述反向推算已完成而将所述第一数据对象解除分配。

在一个实施例中,所述第一数据对象是神经网络的第一层的激活。

在一个实施例中,所述方法包括:产生零个或更多个训练内存留(training-persistent)数据对象识别符的列表,第一训练内存留数据对象识别符识别神经网络中的第一数据对象,确定所述神经网络的训练已完成,以及基于确定所述神经网络的训练已完成而将所述第一数据对象解除分配。

在一个实施例中,所述第一数据对象是神经网络的第一层中的权重。

根据本发明的实施例,提供一种用于机器学习的系统,所述系统包括:图形处理器及连接到所述图形处理器的存储器,所述图形处理器被配置成:调用非复用检测器(noreusedetector);以及在调用所述非复用检测器之后,启动图形处理器内核,所述非复用检测器被配置成:识别第一数据对象,所述第一数据对象具有至少由以所述数据对象作为输入的一个或多个任务界定的存留期(persistence);产生依赖关系结构,所述依赖关系结构包含识别所述第一数据对象的第一数据对象识别符、以及所述一个或多个任务中以所述数据对象作为输入的第一任务;确定计数,所述计数是对所述第一数据对象识别符的依赖关系的数目;确定所述第一任务已完成执行;至少部分地基于确定所述第一任务已完成执行而将所述计数递减1;确定所述计数小于第一阈值;以及至少部分地基于确定所述计数小于所述第一阈值而将所述第一数据对象解除分配。

在一个实施例中,所述第一阈值是1。

在一个实施例中,所述第一任务是神经网络的第一层中的计算运算。

在一个实施例中,所述第一数据对象是所述第一层中的激活。

在一个实施例中,所述第一任务包括在反向推算期间:计算所述激活中的梯度;以及计算权重中的梯度。

根据本发明的实施例,提供一种用于机器学习的方法,所述方法包括:为神经网络中的第一数据对象分配存储器;确定所述第一数据对象具有至少由以所述第一数据对象作为输入的一个或多个任务界定的存留期;确定以所述第一数据对象作为输入的所述一个或多个任务中的最后一个已完成执行;以及基于确定以所述第一数据对象作为输入的所述一个或多个任务中的所述最后一个已完成执行且基于确定所述第一数据对象具有至少由以所述第一数据对象作为输入的所述一个或多个任务界定的存留期而将所述第一数据对象解除分配。

在一个实施例中,所述方法包括:为所述神经网络中的第二数据对象分配存储器;确定所述第二数据对象具有由反向推算的完成界定的存留期;以及基于确定所述第二数据对象具有由所述反向推算的所述完成界定的存留期而在所述反向推算的完成时将所述第二数据对象解除分配。

在一个实施例中,所述方法包括:为所述神经网络中的第三数据对象分配存储器;确定所述第三数据对象具有由所述神经网络的训练的完成界定的存留期;以及基于确定所述第三数据对象具有由所述神经网络的训练的完成界定的存留期而在所述神经网络的训练的完成时将所述第三数据对象解除分配。

附图说明

参照说明书、权利要求书及附图,将了解及理解本发明的这些以及其他特征及优点,附图中:

图1是根据本发明实施例的流程图。

图2是根据本发明实施例的有向非循环图的图示。

图3是根据本发明实施例的正向推算(forwardpass)的数据流程图。

图4是根据本发明实施例的反向推算的数据流程图。

图5a是根据本发明实施例的矢量和图。

图5b是根据本发明实施例的数据流程图。

[符号的说明]

100:gpu存储器;

105:慢速系统存储器;

110:机器学习执行引擎;

115:机器学习存储器管理器;

120:非复用检测器;

a、b、c、d、e:数据对象;

de:误差梯度;

dwx:权重梯度/原始梯度;

dwy:梯度/输入/权重梯度;

dx、dy:梯度;

dz:损失梯度/输入/输入梯度/梯度;

e:误差;

mwx:滑动平均值;

mwx*:经更新的滑动平均值;

wx、wx*、wy*:权重;

wy:权重/输入;

x:数据对象/输入;

y:输出/输入/激活;

z:输出/所预测输出/输入/数据对象;

z*:真实输出。

具体实施方式

以下结合附图所述的详细说明旨在作为对根据本发明所提供的用于为机器学习而管理存储器的系统及方法的示例性实施例的说明,而非旨在表示其中可构造或利用本发明的仅有形式。所述说明结合所示的实施例陈述本发明的特征。然而,应理解,可通过也旨在涵盖于本发明的范围内的不同实施例来实现相同的或等效的功能及结构。如本文中别处所示,相同的元件编号旨在指示相同的元件或特征。

在一些相关技术系统中,在机器学习训练期间为数据对象分配存储器,且所述数据对象存留至其被释放为止,并且所述数据对象中的一些数据对象被高速缓存在gpu存储器中。一旦gpu存储器达到其最大容量,系统便在操作系统(operatingsystem,os)级上将分配在gpu上的数据对象以页粒度(pagegranularity)迁移到系统存储器。此种方法可导致性能的损失。

对于gpu上的机器学习(ml)运算,有限的gpu存储器可造成性能瓶颈。因此,一些实施例通过将较慢但较大的存储器与快速gpu存储器一起使用来为gpu提供大的存储器以进行高效机器学习训练。

图1示出在主机上利用快速gpu存储器100及慢速系统存储器105来为gpu提供大存储器的一些实施例的整体流程。此种实施例可包括机器学习执行引擎110、机器学习存储器管理器115及非复用检测器120。机器学习执行引擎110执行gpu代码,且通过调用机器学习存储器管理器115来存取数据对象。机器学习存储器管理器115可为基于平板(slab)的用户级存储器管理引擎,其管理由机器学习执行引擎110执行的gpu代码所存取的数据对象。非复用检测器120依据数据对象类型(或“类别”,如以下更详细地论述)来区分数据对象,并通过检查神经网络的有向非循环图(directedacyclicgraph,dag)来对不需要存留的数据对象进行标记,以使得机器学习存储器管理器115可将这些数据对象解除分配。机器学习执行引擎110在执行每一gpu代码之后执行对非复用检测器120的调用。

在一些实施例中,以上所提及的非复用检测器利用机器学习训练的特性,且缓解因在gpu上的机器学习训练期间不必要地请求大的动态随机存取存储器(dynamicrandomaccessmemory,dram)大小所致的性能关键低效性。所述非复用检测器对非复用的数据对象进行识别及标记,以使得机器学习存储器管理器可将这些数据对象解除分配以减少数据对象迁移开销(overhead)。

如在图2所示的实例中,非复用检测器检查神经网络的有向非循环图(dag),以识别非复用的数据对象。图2例如示出在计算出“b”及“c”之后,准备好执行计算“d”及“e”。在此实例中,非复用检测器识别出不存在需要“a”的其他计算(或“任务”)并将“a”标记为“非复用”,以使得“a”可由机器学习存储器管理器解除分配。

图3及图4示出可如何为机器学习训练而使用非复用检测器的实例。神经网络的每一层的计算是依序执行:对于正向推算是从左向右,且对于反向推算是从右向左。在图3中的第一层以输入“x”及权重“wx”计算出输出“y”之后,第二层以输入“y”及权重“wy”来计算输出“z”。在计算出所预测输出“z”之后,损失函数将“z”与真实输出“z*”进行比较并计算误差“e”。

参照图4,反向推算通过以输入“z”及误差梯度“de”来计算损失梯度(或“输入梯度”)“dz”而开始。然后,下一层以输入“dz”、“y”及“wy”来计算梯度“dy”及“dwy”。当输入“dwy”变得可用时,执行如下计算:执行将权重“wy”更新成“wy*”的就地更新(in-placeupdating)。当梯度“dy”变得可用时,类似地执行图4中最左层的反向推算。

在一些实施例中,非复用检测器产生依赖关系结构,所述依赖关系结构包含:一个或多个任务识别符,其各自识别相应的任务(例如,在正向推算期间计算输出“y”的任务、在反向推算期间计算输入梯度“dz”的任务、以及在反向推算期间计算激活“y”中的梯度“dy”及权重“wy”中的梯度“dwy”的任务);以及一个或多个数据对象识别符(例如,作为任务输入的数据对象的识别符,例如“x”及“wx”(用于在正向推算期间计算输出“y”的任务)的识别符、或者“y”及“dz”(用于在反向推算期间计算梯度“dy”及梯度“dwy”的任务)的识别符)。所述依赖关系结构可将数据对象识别符链接到需要所述数据对象识别符来作为输入的任务。举例来说,所述依赖关系结构可包含对第一数据对象识别符(例如,“x”的识别符)的一个或多个依赖关系的列表,且所述列表的第一依赖关系可识别以由第一数据对象识别符识别的数据对象(“x”)作为输入的第一任务(例如,在正向推算期间计算输出“y”的任务)。非复用检测器可计数例如对第一数据对象识别符的依赖关系的数目,只有当第一任务完成执行时才将计数减小1,且当计数达到零时,将第一数据对象解除分配。如此一来,第一数据对象的存留期是由以第一数据对象作为输入的一个或多个任务界定(或者至少由所述一个或多个任务界定或至少部分地由所述一个或多个任务界定)。

在此实例中,一些实施例中的非复用检测器在反向推算期间通过利用以下特性将正向推算期间每一层的输出(图3及图4中的“x”、“y”及“z”)标记为“非复用”:在使用这些数据对象来计算出梯度(图4中的“dx”、“dy”及“dz”)之后,这些数据对象不再被使用。举例来说,在计算出梯度“dz”之后,数据对象“z”不再被参考。由于在下一迭代(对下一数据项进行处理的机器学习训练)处“z”的值不取决于前一迭代处“z”的值,因此不需要为下一迭代维持“z”的值。在一些实施例中,非复用检测器维持此类别中的数据对象或“推算内存留”数据对象(即,激活)的列表,并在反向推算结束时将所述数据对象标记为“非复用”,以便在反向推算完成时将所述数据对象解除分配。非复用检测器可进一步维持“训练内存留”数据对象识别符的列表,所述数据对象识别符中的每一者可识别只有当训练完成时才被解除分配的数据对象(例如,权重,例如“wx”)。

在一些实施例中,非复用检测器还使用依赖关系结构在使用在反向推算期间计算出的权重梯度(图4中的“dwx”、“dwy”)来更新权重之后将这些数据对象标记为“非复用”。图5a及图5b示出使用动量更新进行的权重更新的实例。类似于多种权重更新方法,动量更新维持权重梯度(图5b中的“dwx”)的滑动平均值(runningaverage)(图5a中的“mwx”),并应用滑动平均值来更新权重(在图5b中从“wx”更新成“wx*”)而非应用原始梯度。在计算出权重及滑动平均值并对其执行就地更新之后,不再需要原始梯度(图5b中的“dwx”)。将在反向推算期间计算出的权重梯度以及正向推算的输出解除分配可降低在gpu上的机器学习训练期间对gpu存储器的存储器压力,因此减少gpu上的系统存储器与gpu存储器之间的不必要迁移。

用语“处理电路”在本文中用于意指处理数据或数字信号所采用的硬件、固件及软件的任一组合。处理电路硬件可例如包括专用集成电路(applicationspecificintegratedcircuit,asic)、通用或专用中央处理器(cpu)、数字信号处理器(digitalsignalprocessor,dsp)、图形处理器(gpu)及可编程逻辑装置(例如现场可编程门阵列(fieldprogrammablegatearray,fpga))。在本文所使用的处理电路中,每一功能由被配置(即,被硬连线)成执行所述功能的硬件执行,或者由被配置成执行存储在非暂时性存储媒体中的指令的更通用硬件(例如cpu)执行。处理电路可制作在单个印刷电路板(printedcircuitboard,pcb)上,或者分布在若干经互连的pcb上。处理电路可包含其他处理电路;例如,处理电路可包括在pcb上被互连的两个处理电路,即fpga及cpu。

应理解,虽然本文中可使用用语“第一”、“第二”、“第三”等来阐述各种元件、组件、区、层及/或区段,然而这些元件、组件、区、层及/或区段不应受这些用语限制。这些用语仅用于将一个元件、组件、区、层或区段与另一元件、组件、区、层或区段区分开。因此,在不背离本发明概念的精神及范围的条件下,本文中所述的第一元件、第一组件、第一区、第一层或第一区段可被称为第二元件、第二组件、第二区、第二层或第二区段。

本文中所使用的用语仅用于阐述特定实施例,而非旨在限制本发明概念。如本文中所使用,用语“实质上(substantially)”、“约(about)”及类似用语用作近似用语而非用作程度用语,且旨在考虑到所属领域中的普通技术人员将认识到的所测量值或所计算值的固有偏差。如本文中所使用,用语“主要组分(majorcomponent)”指代以比组合物、聚合物或产物中的任何其他单一组分的量大的量存在于所述组合物或产物中的组分。相比之下,用语“主组分(primarycomponent)”指代构成组合物、聚合物或产物的按重量计至少50%或更多的组分。如本文中所使用,用语“主要部分(majorportion)”在应用于多个项时意指各项的至少一半。

如本文中所使用,除非上下文另有清楚指示,否则单数形式“一个(a及an)旨在也包括复数形式。应进一步理解,在本说明书中所使用的用语“包括(comprises及/或comprising)”指明所陈述特征、整数、步骤、操作、元件及/或组件的存在,但并不排除一个或多个其他特征、整数、步骤、操作、元件、组件及/或其群组的存在或添加。如本文中所使用,用语“及/或(and/or)”包括相关联所列各项中的一者或多者的任意及所有组合。当位于一系列元件之前时,例如“…中的至少一者(atleastoneof)”等表达语修饰整个所述一系列元件且不修饰所述一系列中的个别元件。此外,在阐述本发明概念的实施例时所使用的“可(may)”指代“本发明概念的一个或多个实施例”。此外,用语“示例性(exemplary)”旨在指代实例或例证。如本文中所使用,用语“使用(use)”、“正使用(using)”、“被使用(used)”可被视为分别与用语“利用(utilize、utilizing及utilized)”、“正利用(utilizing)”、“被利用(utilized)”同义。

应理解,当将元件或层称为“位于”另一元件或层“上”、“连接到”、“耦合到”或“相邻于”另一元件或层时,所述元件或层可直接位于所述另一元件或层上、直接连接到、直接耦合到或直接相邻于所述另一元件或层,或者可存在一个或多个中间元件或层。相比之下,当将元件或层称为“直接位于”另一元件或层“上”、“直接连接到”、“直接耦合到”或“紧邻于”另一元件或层时,不存在中间元件或层。

虽然本文中已具体阐述及示出了用于为机器学习而管理存储器的系统及方法的示例性实施例,然而对于所属领域中的技术人员来说,许多修改及变化形式将为显而易见的。因此,应理解,使用根据本发明原理所构造的用于为机器学习而管理存储器的系统及方法可以除本文中所具体阐述的方式之外的方式来实施。本发明还在以上权利要求书及其等效内容中被界定。

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