一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

使用数据流图和动态存储器管理的神经网络训练的制作方法

2022-07-14 04:44:49 来源:中国专利 TAG:


1.本发明总体涉及在存储器容量有限的环境中处理大型机器学习和神经网络模型。更具体来说,本发明涉及对计算数据流图的修改,该修改将减少其存储器占用,即,在评估该图的过程中需要更少的存储器,因此可以处理更大的图或更大的数据样本(或一次处理多个样本)。


背景技术:

2.神经网络是模仿人类大脑功能建模的人工神经网络(ann),在其节点或“神经元”之间具有加权连接。深度神经网络(dnn)是在其输入和输出层之间具有多个“隐藏”层的人工神经网络。dnn的隐藏层允许它对以数据的较高抽象表示为特征的复杂非线性关系建模,其中每个隐藏层确定先前层的非线性变换。大型深度神经网络的训练是具有挑战性的计算问题。仅引入具有非凡性能的图形处理器(gpu)允许人们从识别手写数字(mnist)和微小图片(cifar 10)前进到对高分辨率图像(imagenet)进行分类。gpu计算性能的关键因素是其高速存储器。不幸的是,gpu存储器比计算机的主存储器(cpu存储器)小得多。图形处理器(gpu)存储器的大小限制dnn的深度和数据样本的大小两者。结果,常常存在对图像大小和分辨率的约束,这进而影响dnn的准确度。可以通过减少数据占用的存储器来减轻存储器约束。在说明性实施例中,gpu可将其存储器中的数据发送到cpu以释放额外存储器空间,然后在将额外存储器空间用于其既定功能之后从cpu检索数据。


技术实现要素:

3.本发明的实施例提供用于在处理神经网络的同时通过自动确定包括一组节点和一组边的基础数据流图中的存储器保存操作的插入点来减少总体gpu存储器使用的方法、系统和计算机程序产品。
4.在实施例中,一种如上所述的用于减少总体gpu存储器使用的方法计算一组输入张量的张量定时松弛(tts),使用具有大于阈值(thtts)的对应tts值的输入张量,编辑该组输入张量中的输入张量的候选列表(si),过滤si,以保留其大小满足阈值(ths)的输入张量,以及使用基于所述过滤的si来确定用于操作的插入点。
5.在实施例中,操作是缩减(reduction)操作和恢复(restoration)操作的组合,其中,缩减操作包括向中央处理单元(cpu)存储器复制操作和压缩操作中的任一或两者,并且其中,恢复操作包括从cpu存储器复制操作和解压操作中的任一或两者。
6.在实施例中,计算tts包括用输入张量来执行时间分析。
7.在实施例中,定时分析包括初始化输入张量的张量到达时间(tat)、张量需求时间(trt)和张量定时松弛(tts)值;针对一组输入张量q,当q不为空时,执行以下步骤:选择q中的要排除的节点q;从q中排除q;以及针对q的每个后继输入张量s,将s的tat设置为等于q的tat。
8.在实施例中,初始化包括将tat、trt和tts值初始化为未知值或零。
9.在实施例中,节点n的所有输入具有已知的tat值,其中,n是s作为输入张量的节点,并且其中,该方法进一步包括针对该组输入张量q执行以下进一步的步骤:将n的trt设置为n的输入s的tat的最大值;将n的每个输入i的tts设置为n的trt与s的tat之差;基于以节点延迟递增的n的trt设置n的tat;以及将n包括回q。
10.在实施例中,数据流图包括一对(n,e),其中,n包括一组节点,e包括一组超边(hyperedge),并且其中,n中的给定节点在一个或多个张量上实现一个或多个运算符(operator)。
11.在实施例中,给定节点包括三元组(f,i,o),其中f是由给定节点实现的运算符的函数,i是给定节点的一组输入张量,并且o是基于运算符生成的给定节点的一组输出。
12.在实施例中,超边定义如何将张量从生成该张量的运算符传递到将该张量用作自变量的运算符。
13.在实施例中,超边包括一对(s,h),其中s是节点输出,h是一组节点输入。
14.在实施例中,所述方法进一步包括:在数据流图中插入对应于所述操作的子图节点。
15.在实施例中,所述插入生成新的数据流图或修改现有的数据流图。
16.在实施例中,所述插入生成新的数据流图,其中,新的数据流图包括完整的数据流图或部分的数据流图。
17.在实施例中,该方法还包括:使用基于所述插入的数据流图来处理该组输入张量;以及基于所述处理,生成输出。
18.在实施例中,所述操作为存储器缩减操作,所述方法进一步包括插入对应于存储器缩减操作的存储器缩减子图节点。
19.在实施例中,所述插入进一步包括:通过第一超边将第一节点连接到存储器缩减子图节点,第一节点对应于源节点;以及通过第二超边将存储器缩减子图节点连接到第二节点,其中,第二超边包括串行化超边,,第二节点对应于中间节点或目的地节点。
20.在实施例中,所述插入进一步包括:通过第三超边将第一节点连接至第二节点。
21.在实施例中,所述操作为存储器恢复操作,所述方法进一步包括:插入与所述存储器恢复操作对应的存储器恢复子图节点。
22.在实施例中,所述插入进一步包括:通过第一超边将第一节点连接到存储器恢复子图节点,其中,第二超边包括串行化超边或预取超边;通过第二超边将存储器恢复子图节点连接到第二节点,第二节点对应于目的地节点;以及通过第三超边将存储器缩减子图节点连接到存储器恢复子图节点。
23.在实施例中,该方法进一步包括通过超边来连接数据流图的两个节点,其中所述连接包括下列中的任一者:通过两个节点之间的超边的直接连接;以及通过一个或多个附加节点和这两个节点之间的超边的间接连接。
24.在实施例中,迭代地执行该方法的步骤以将一组子图节点插入到流程图中以用于执行至少一个存储器缩减操作和至少一个存储器恢复操作。
25.在实施例中,迭代地执行该方法的步骤包括在流程图中插入一组超边,该组超边包括至少一个串行化超边、或至少一个预取超边、或至少一个串行化超边和至少一个预取超边。
26.在实施例中,上述方法被存储为存储在一个或多个计算机系统的一个或多个有形存储介质上并由执行编程指令的一个或多个计算机系统的一个或多个处理器执行的编程指令。编程指令可以存储为计算机程序产品。
27.根据一个方面,提供了一种用于在处理神经网络的同时减少总体gpu存储器使用的方法,所述方法包括:在包括一组节点和一组边的基础数据流图中,自动确定存储器保存操作的插入点。
28.根据另一方面,提供了一种方法,包括:基于一组张量定时松弛(tts)和输入张量(si)的候选列表来在数据流图中选择操作的插入点;计算一组输入张量的所述张量定时松弛(tts);使用具有大于阈值(thtts)的相应tts值的输入张量,编辑该组输入张量中的输入张量的候选列表(si);过滤si,以保留其大小满足阈值(ths)的输入张量;以及使用基于所述过滤的si来确定用于缩减和恢复操作的插入点。
29.根据另一方面,提供一种方法,其包括:通过识别将由节点p产生的输出数据的存储器需求来确定以子图节点a和节点p应用存储器缩减动作;将数据从源节点发送到子图节点a及子图节点p;使子图节点a能在节点p的执行之前执行存储器缩减动作,所述存储器缩减动作使额外的存储器空间可用于图形处理器gpu执行一个或多个功能;使子图节点b延迟存储器恢复动作,直到节点q已完成其执行为止;将所述数据从子图节点b的中央处理器cpu发送到gpu,以将所述数据恢复到gpu。
30.根据另一方面,提供了一种包括程序代码装置的计算机程序,当所述程序在计算机上运行时,所述程序代码装置被适配成用于执行如[0027]、[0028]或[0029]段中任一段所述的方法。
[0031]
根据另一方面,提供了一种用于在处理神经网络时减少总体gpu存储器使用的系统,所述系统可操作用于:在包括一组节点和一组边的基础数据流图中,自动确定存储器保存操作的插入点。
[0032]
根据另一方面,提供了一种可进行以下操作的系统:基于一组张量定时松弛(tts)和输入张量(si)的候选列表,在数据流图中选择用于操作的插入点;计算一组输入张量的张量定时松弛(tts);使用具有大于阈值(thtts)的相应tts值的输入张量,编辑一组输入张量中的输入张量的候选列表(si);过滤si,以保留其大小满足阈值(ths)的输入张量;使用基于所述过滤的si来确定用于缩减和恢复操作的插入点。
[0033]
根据另一方面,提供一种可进行以下操作的系统:通过识别将由节点p产生的输出数据的存储器需求,确定以子节点a和节点p应用存储器缩减动作;将数据从源节点发送到子图节点a和节点p;使子图节点a能在节点p的执行之前执行存储器缩减动作,存储器缩减动作使额外的存储器空间可用于图形处理器gpu执行一个或多个功能;使子图节点b延迟存储器恢复动作,直到节点q已完成其执行为止;以及
[0034]
将所述数据从子图节点b的中央处理器cpu发送到gpu,以将所述数据恢复到gpu。
附图说明
[0035]
现在将仅通过举例并参考以下附图来描述本发明的优选实施例:
[0036]
图1示出了其中可以实现说明性实施例的数据处理系统网络的框图;
[0037]
图2示出了其中可以实现说明性实施例的数据处理系统的框图;
[0038]
图3示出了根据说明性实施例的数据流图;
[0039]
图4示出了根据说明性实施例的具有存储器缩减子图的数据流图;
[0040]
图5示出了根据说明性实施例的具有预取(prefetching)和串行化(serialization)的数据流图;
[0041]
图6示出了根据说明性实施例的数据流子图;
[0042]
图7示出了根据说明性实施例的数据流子图;
[0043]
图8示出了根据说明性实施例的数据流子图;
[0044]
图9示出了根据说明性实施例的数据流子图;
[0045]
图10a示出了根据说明性实施例的用于确定缩减和恢复操作的插入点的示范性过程的流程图;
[0046]
图10b示出了根据说明性实施例的用于执行定时分析的示范性过程的流程图;
[0047]
图11示出了根据说明性实施例的存储器概略图(memory profile graph);
[0048]
图12示出了根据说明性实施例的存储器概略图;以及
[0049]
图13示出了根据说明性实施例的用于图形处理器中的存储器缩减的示范性过程的流程图。
具体实施方式
[0050]
gpu仅具有用于计算计算或执行不同功能的特定存储器空间(memory space)。说明性实施例认识到,gpu可以有效地将数据移动到cpu或压缩其自身的数据以释放执行计算和/或功能所需的额外存储器空间。换出节点(swap-out node)将其输入张量从gpu移动到cpu。换入节点(swap-in node)将数据从cpu移回gpu。延迟到gpu的数据恢复,直到需要所述数据用于进一步计算。
[0051]
说明性实施例认识到,串行化以及张量互换可以最小化gpu存储器需求(memory requirements)。将张量交换和数据压缩用于缩减。由于gpu压缩数据比将数据发送到cpu的速度更快,所以数据压缩显著减少计算时间。单独应用数据压缩可以节省存储器空间,而损失最小的运行时间。压缩要被交换的张量,可以减少由于数据传送而损失的时间。
[0052]
说明性实施例示出了如何通过数据流的适当串行化来改进存储器缩减。说明性实施例认识到,具有存储器管理的数据流图是用于训练深度神经网络的有效技术。数据流图图示在数据处理系统的节点内从gpu到cpu发生的张量流或数据流以及从一个数据节点到另一个数据节点发生的数据流。存储器管理是指gpu能够有效地释放额外存储器空间。通常,数据流图具有取得输入数据并产生输出数据的计算节点。gpu负责及时地对这些张量或数据进行分配和解除分配。然而,gpu存储器的不足会对数据流图和相应张量的大小具有严重限制。
[0053]
说明性实施例示出了gpu如何可以通过将数据传送到cpu来释放额外存储器空间。然而,gpu和cpu之间的数据交换(其中gpu将其数据中的一些传送到cpu以释放额外的存储器空间)的问题是,当数据在数据处理系统中流动并且通过各个节点被发送时,如何及时地执行该过程。将大量数据从gpu交换到cpu可能是耗时的。换出节点将数据或输入张量从gpu移动到cpu存储器。换入节点在存储器恢复期间将数据或输入张量移回gpu存储器。因而,可以用有限的gpu存储器来执行大的数据流图。gpu与cpu之间的张量交换以及数据压缩可以
有效地用于释放执行大数据流图所需的额外存储器空间。说明性实施例认识到,涉及存储器保存(memory conservation)的张量越多,存储器节省程度越高,并且由于gpu中可用的额外存储器空间,可以在gpu存储器中处理更大的数据流图。进一步,gpu还可决定转移较大数量的较小或中等大小的张量以释放存储器空间,这可比将大型数据移动到cpu耗时更少。
[0054]
说明性实施例认识到,可通过数据流图执行的适当串行化和预取来改进存储器缩减的过程。由于与cpu的张量交换,gpu的存储器需求显著减少。通过预取,可以延迟到gpu的数据恢复,直到实际上需要该数据。
[0055]
说明性实施例认识到,从一个设备到另一设备(例如从gpu到cpu,反之亦然)的数据传送可能花费大量时间。在实施例中,由于存储器保存招致用于数据传输、压缩和解压缩的时间(术语解压(decompress)及其其他形式与解压缩(uncompress)及其其他形式可互换地使用),因此它应当仅应用于占用gpu存储器足够长的时间而不参与任何计算的张量。因此,gpu可以将数据(张量)发送到cpu并且从cpu接收未涉及计算或功能的相同数据。通过串行化,能够以控制依赖关系边(control dependency edge)而不是常规数据传输边(egular data transmission edge)的形式向数据流图添加额外的结构修改。gpu可以将张量(数据)交换或发送到cpu,以释放执行一系列功能或计算所需的额外存储器空间。
[0056]
在说明性实施例中,可以延迟存储器恢复。能够将额外的结构修改以控制依赖关系边的形式添加到数据流图。gpu可以回收其最初已经传送到cpu的数据以执行功能和/或计算。节点可以将控制依赖关系边应用到子图节点上,以延迟存储器恢复,直到所述节点已完成其执行为止。
[0057]
在说明性实施例中,gpu还可以决定不与cpu或另一设备交换张量。相反,gpu可以决定在内部压缩其张量以释放额外存储器空间。串行化使gpu时间能在允许节点之间的数据传输恢复之前开始压缩数据,以释放额外存储器空间。预取可以使gpu能延迟对数据进行解压,以允许节点在gpu对压缩的数据进行解压之前传输其数据。
[0058]
说明性实施例提供存储器缩减和存储器恢复动作,其可允许gpu将数据发送到cpu以释放额外存储器空间来执行计算和/或功能,然后在额外存储器空间已被使用之后从cpu重新获取其数据。说明性实施例还提供了一种包括上述的用于将数据传送到cpu以释放额外的存储器空间、然后在额外存储器空间已被使用之后从cpu重新获取其数据的存储器缩减和存储器恢复地程序产品和计算机系统。
[0059]
用于描述本发明的说明性实施例总体涉及并解决上述在深度学习系统中的数据处理系统内的gpu中的存储器管理的问题。说明性实施例提供一种用于深度学习系统中的gpu中的存储器管理的方法、计算机程序产品和计算机系统。
[0060]
在实施例中,定时分析计算在数据流图的执行期间发生在数据流图中的事件的时刻。时间是为存储器缩减而选择张量(数据)的标准。定时分析还假定在给定节点的所有输出处的数据的计算是同时完成的。
[0061]
定时分析中使用的定时量包括张量到达时间(tat)、张量需求时间(trt)和张量定时松弛(松弛时间)。tat是完成数据的计算、且该数据可用于运算符/节点的时间。trt是当需要节点的输入处的数据以用于节点的执行时的时间。tts是trt与tat之间的差异。
[0062]
定时分析算法通过将数据流图中的tat、trt和tts初始化为未知数而开始。对于数据流图的每个源节点,tat和trt和tts=0。可以从数据流图中选择任意节点来执行涉及
tat、trt和tts的定时分析。
[0063]
用于选择候选张量以用于存储器保存的一些基本标准可包括张量的大小、张量定时松弛及张量的总数。小的张量可能不是用于数据交换的最佳候选。相反,较大的张量定时松弛可以在cpu存储器中或在压缩状态中保持更长时间。进一步,存储器保存所涉及的较大数量的张量可以释放更多gpu存储器用于其他计算。
[0064]
在说明性实施例中,可以将定时分析用于识别数据流组中的一个或多个节点。可以识别在数据流图中的节点中产生具有最大存储器需求的输出数据的一个或多个节点。可以将结构修改符(如“串行化”和“预取”)插入到数据流图中的一个或多个节点中。数据流图节点的串行化是通过定义一个节点对另一节点的控制依赖关系来执行的。在节点a的执行完全完成之前不开始节点b的执行。这意味着在节点a的执行完成之前不分配节点b的输出张量。通过将控制依赖关系边从一个节点调用到另一个节点上来执行预取,以延迟张量重建(reconstruction)或存储器恢复。应用控制依赖关系边的节点在发生张量重建或存储器恢复之前完成其执行。
[0065]
实施例提供一种用于gpu内的存储器管理的方法,通过gpu向cpu传送数据以释放额外存储器空间来执行一个或多个功能或计算。该方法还包括存储器恢复,其中cpu可以将恢复数据返回到gpu。另一实施例提供具有用于gpu将数据发送到cpu以释放额外存储器空间的程序指令的计算机程序产品。计算机程序产品也包含包含存储器恢复以允许gpu从cpu接收回数据的程序指令。另一实施例提供了一种具有用于gpu向cpu传送数据的程序指令的计算机系统。计算机系统也包含使用存储器恢复来将数据转移回到gpu的程序指令。
[0066]
完成时间是指张量或数据的计算在节点处完成且可用于其他节点的时间。根据一个定义,松弛时间是指在不导致整体操作延迟的情况下某个输入的到达可以被延迟的时间量,或者张量被用于计算之前该张量在节点的输入处一直等待多久的时间量。
[0067]
在实施例中,在节点正在其中传输和接收数据的数据处理系统中引入存储器设备(诸如gpu)的添加。gpu尝试执行将导致获取额外存储器空间的的功能或计算。为了执行功能或计算,gpu决定将数据移动到数据处理系统内的cpu,以释放额外存储器空间。在存储器缩减期间,子图节点将控制依赖关系边应用于节点,以允许gpu将数据发送到cpu并释放额外存储器空间。该节点为从属(dependent)节点,该子图节点为串行化路由期间的控制节点。将该子图节点与节点串行化,其中,在节点进行其执行之前,子图节点进行其执行。当节点将其数据发送到其他节点时,可将另一结构修改添加至数据流图,以串行化节点的执行。说明性实施例可以具有添加到数据流图的多个结构修改,并且其中,gpu在节点将其输出数据发送到另一节点之前,进行其将数据发送到cpu的执行。
[0068]
当gpu已经完成了为其预期功能而对额外存储器空间的使用时,gpu可以重新获取其最初传送到cpu的数据,因此可进行存储器恢复。另一节点可以将控制依赖关系边应用于另一子图节点上。应用控制依赖关系边的结果是,恢复的数据被延迟发送,直到获得恢复的数据的目的地节点需要恢复的数据,并且直到应用了控制依赖关系边的控制节点已经完成了其执行。当应用了控制依赖关系边的节点已完成其执行时,cpu可将要恢复至gpu的数据发送至目的地节点。
[0069]
在实施例中,gpu还可以将其数据按比例(fraction)进行压缩,以提供用于执行期望的功能或计算的额外存储器空间,而不将任何数据发送到cpu。gpu可将数据从32位压缩
到16位以产生额外存储器空间。在其他说明性实施例中,gpu可以将其数据压缩不同的比例(即,从32位到24位,或从32位到8位)。子图节点将控制依赖关系边应用于从源节点接收数据的节点上。gpu可以完成其压缩数据的执行。该节点被串行化并在gpu已经完成压缩其数据之后发送其接收到的数据。控制依赖关系边可延迟其他子图节点对数据进行解压缩,直到所述节点已完成其执行为止。gpu不能接收解压的数据,直到应用了控制依赖关系边的节点已经完成其执行为止。
[0070]
如本文中所使用,术语数据流图可根据以下示范性和非限制性定义中的一者来定义。
[0071]
定义1:数据流图是一对(n,e),其中n是一组节点,e是一组超边。节点在张量上实现运算符。每个节点是三元组(f,i,o),其中f是由节点实现的运算符的函数,i是一组节点输入,对应于运算符自变量(argument),o是一组节点输出,对应于由运算符计算的张量。超边定义如何将张量从计算张量的运算符传递到用张量作为自变量的运算符。每个超边是一对(s,h),其中s是节点输出,h是一组节点输入。s和h={h1,h2,...}分别是超边的源和槽集合。超图(hypergraph)不同于常规图。常规图的边总是有一个槽(sink)。超边则可以具有若干个槽:相同的张量被若干运算符用作自变量。超图节点具有比常规图的节点更复杂的结构。不同的运算符自变量和结果可以具有不同的含义、大小和维度。因此,可以识别并唯一地标记超图节点的输入和输出。常规图的节点仅可以描述具有单个自变量和单个结果的运算符。除了将超边的源和槽定义为节点输入和输出之外,讨论超边的源和槽节点是方便的。它们对定义如下。
[0072]
定义2:对应于超边的源和槽的节点分别被称为超边的源和槽节点。
[0073]
定义3:连接到节点的输入的超边被称为该节点的输入超边,连接到该节点的输出的超边被称为该节点的输出超边。
[0074]
定义4:节点的后继输入是该节点的输出超边的槽。
[0075]
定义5:节点的后继节点是该节点的输出超边的槽节点。注意,我们区分后继输入和后继节点。前者是节点输入,后者是节点本身。
[0076]
相应地,一个或多个实施例提供实现存储器管理的方法。各种实施例提供一种实现在深度学习系统中进行存储器管理的方法。
[0077]
为了描述的清楚,并且不暗示对其的任何限制,使用一些示例性配置来描述说明性实施例。根据本公开,本领域普通技术人员将能够设想为实现所描述的目的而对所描述的配置的许多改变、适配和修改,在说明性实施例的范围内设想相同的改变、适配和修改。
[0078]
此外,在附图和说明性实施例中使用数据处理环境的简化图。在实际计算环境中,在不脱离说明性实施例的范围的情况下,可能存在本文未示出或描述的其它结构或组件,或不同于所示但与本文所述类似功能的结构或组件。
[0079]
此外,仅作为实例,针对特定的实际或假设的部件描述说明性实施例。不同说明性实施例描述的步骤可以使用可以被目的化或改变用途以在数据处理环境内提供所描述的功能的各种组件来适配,并且此类适配预期在说明性实施例的范围内。
[0080]
仅作为实例,关于某些类型的步骤、应用和数据处理环境描述说明性实施例。这些和其他类似产物的任何特定表现不旨在限制本发明。在说明性实施例的范围内,可以选择这些和其他类似产物的任何合适的表现。
[0081]
本公开中的示例仅用于描述的清晰,并且不限于说明性实施例。在此列出的任何优点仅是实例,而不旨在限制这些说明性实施例。通过具体的说明性实施例可以实现另外的或不同的优点。此外,特定说明性实施例可能具有、也可能不具有上文所列的一些或全部优点。
[0082]
参考附图,具体参考图1和图2,这些图是可以实现说明性实施例的数据处理环境的示例图。图1和2仅是示例,并且不旨在断言或暗示关于其中可以实现不同实施例的环境的任何限制。特定实现方式可以基于以下描述对所描绘的环境做出许多修改。
[0083]
图1示出了其中可以实现说明性实施例的数据处理系统网络的框图。数据处理环境100是其中可以实施说明性实施例的计算机网络。数据处理环境100包括网络102。网络102是用于提供在数据处理环境100内连接在一起的不同设备和计算机之间的通信链路的介质。网络102可以包括诸如有线、无线通信链路或光纤电缆之类的连接。
[0084]
客户端或服务器仅是连接到网络102的某些数据处理系统的示例角色,并且不旨在排除这些数据处理系统的其他配置或角色。服务器104耦合到网络102。软件应用程序可以在数据处理环境100中的任何量子数据处理系统上执行。所示出的在图1的服务器104中执行的任何软件应用可被配置成以类似方式在另一数据处理系统中执行。在图1中的服务器104中存储或产生的任何数据或信息可以以类似的方式在另数据处理系统中存储或产生。诸如服务器104的经典数据处理系统可以包含数据并且可以具有在其上执行经典计算过程的软件应用或软件工具。
[0085]
服务器106与存储单元108一起耦合到网络102。存储单元108包括被配置成存储如在此相对于不同实施例所描述的神经网络训练数据。服务器106是常规的数据处理系统。软件应用程序可以在数据处理环境100中的任何量子数据处理系统上执行。所描述的任何软件应用可被配置成以类似方式在另一数据处理系统中执行。
[0086]
客户端110、112和114也耦合到网络102。诸如服务器106或客户端110、112或114的常规数据处理系统可以包含数据并且可以具有在其上执行常规计算过程的软件应用或软件工具。
[0087]
仅作为示例,并且不暗示对这样的架构的任何限制,图1描绘了在实施例的示例实现中可用的某些组件。例如,服务器106和客户端110、112、114仅作为示例被描绘为服务器和客户端,而不是暗示对客户端-服务器架构的限制。作为另实例,实施例可以分布在所示的几个常规数据处理系统、量子数据处理系统和数据网络上,而在说明性实施例的范围内,可以在单个常规数据处理系统或单个量子数据处理系统上实现另一实施例。常规数据处理系统106、110、112和114还表示集群、分区和适于实现实施例的其他配置中的示例节点。
[0088]
设备132是本文描述的常规计算设备的示例。例如,设备132可以采取智能电话、平板电脑、膝上型电脑、固定式或便携式客户端110、可穿戴计算设备或任何其他合适的设备的形式。被描述为在图1中的另一常规数据处理系统中执行的任何软件应用可被配置成以类似方式在设备132中执行。在图1中的另一常规数据处理系统中存储或产生的任何数据或信息可以被配置成以类似方式在设备132中存储或产生。
[0089]
服务器106、存储单元108、经典处理系统104、量子处理系统140、以及客户端110、112和114、以及设备132可以使用有线连接、无线通信协议、或其他适当的数据连接而连接到网络102。客户端110、112和114可以是例如个人计算机或网络计算机。
[0090]
在所描绘的示例中,服务器106可以向客户端110、112和114提供诸如引导文件、操作系统映像和应用之类的数据。在该示例中,客户端110、112和114可以是服务器106的客户端。客户端110、112、114或其某种组合可以包括它们自己的数据、引导文件、操作系统映像和应用。数据处理环境100可以包括额外的服务器、客户端和未示出的其他设备。
[0091]
数据处理环境100可以包括额外的存储器、量子处理器、以及未示出的其他装置。在所描绘的示例中,数据处理环境100可以是互联网。网络102可以表示使用传输控制协议/互联网协议(tcp/ip)和其他协议来彼此通信的网络和网关的集合。互联网的核心是主节点或主计算机(包括路由数据和消息的数千个商业、政府、教育和其他计算机系统)之间的数据通信链路的骨架。当然,数据处理环境100还可以被实现为多个不同类型的网络,诸如例如内联网、局域网(lan)或广域网(wan)。图1旨在作为实例,而不是作为对于不同说明性实施例的架构限制。
[0092]
除了其他用途之外,数据处理环境100可以用于实现其中可以实现说明性实施例的客户端-服务器环境。客户机-服务器环境使得软件应用和数据能够跨网络分布,以使得应用通过使用常规客户机数据处理系统与常规服务器数据处理系统之间的交互来发挥功能。数据处理环境100还可以采用面向服务的架构,其中,跨网络分布的可互操作的软件组件可以被一起封装为一致的业务应用。数据处理环境100还可以采取云的形式,并且采用服务递送的云计算模型,用于使得能够方便地、按需地网络访问可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、虚拟机和服务)的共享池,所述可配置计算资源可以以最小的管理努力或与所述服务的提供者的交互被快速供应和释放。
[0093]
参见图2,该图示出了其中可以实现说明性实施例的数据处理系统的框图。数据处理系统200是传统计算机的实例,诸如图1中的经典处理系统104、服务器106或客户端110、112和114,或者对于说明性实施例实施过程的计算机可用程序代码或指令可以位于其中的另一类型的设备。
[0094]
数据处理系统200还表示传统的数据处理系统或其中的配置,实现说明性实施例的处理的计算机可用程序代码或指令可以位于其中。数据处理系统200仅作为示例被描述为计算机,但不限于此。其他设备形式的实现可以诸如通过添加触摸界面而修改数据处理系统200,甚至从数据处理系统200消除某些所描绘的组件,而不偏离本文描述的数据处理系统200的操作和功能的一般描述。
[0095]
在所描绘的示例中,数据处理系统200采用包括北桥和存储器控制器中心(nb/mch)202和南桥和输入/输出(i/o)控制器中心(sb/ich)204的中心架构。处理单元206、主存储器208和图形处理器210耦合到北桥和存储器控制器中心(nb/mch)202。处理单元206可以包含一个或多个处理器并且可以使用一个或多个异构处理器系统来实现。处理单元206可以是多核处理器。在某些实现方式中,图形处理器210可以通过加速图形端口(agp)耦合到nb/mch 202。
[0096]
在所描绘的示例中,局域网(lan)适配器212耦合到南桥和i/o控制器中枢(sb/ich)204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(rom)224、通用串行总线(usb)和其他端口232、以及pci/pcie设备234通过总线238耦合到南桥和i/o控制器中枢204。硬盘驱动器(hdd)或固态驱动器(ssd)226和cd-rom 230通过总线240耦合到南桥和i/o控制器中心204。pci/pcie设备234可包括例如以太网适配器、插入卡和用于笔记
本计算机的pc卡。pci使用卡总线控制器,而pcie不使用。rom 224可以是例如闪存二进制输入/输出系统(bios)。硬盘驱动器226和cd-rom230可以使用例如集成驱动电子器件(ide)、串行高级技术附件(sata)接口或诸如外部sata(esata)和微sata(msata)的变体。超级i/o(sio)设备236可以通过总线238耦合到南桥和i/o控制器中枢(sb/ich)204。
[0097]
诸如主存储器208、rom 224或闪存(未示出)的存储器是计算机可用存储设备的一些示例。硬盘驱动器或固态驱动器226、cd-rom 230和其他类似可用的装置是包括计算机可用存储介质的计算机可用存储装置的一些实例。
[0098]
操作系统运行在处理单元206上。操作系统协调并提供图2中的数据处理系统200内的不同组件的控制。操作系统可以是用于任何类型的计算平台的市售操作系统,包括但不限于服务器系统、个人计算机和移动设备。面向对象的或其他类型的编程系统可以与操作系统结合操作,并且提供从在数据处理系统200上执行的程序或应用对操作系统的调用。
[0099]
操作系统、面向对象的编程系统和应用或程序的指令诸如以硬盘驱动器226上的代码226a的形式位于存储设备上,并且可被加载到一个或多个存储器(诸如主存储器208)中的至少一个中以供处理单元206执行。示例性实施方式的处理可以通过使用计算机实施的指令由处理单元206执行,这些指令可以位于存储器中,诸如,例如,主存储器208、只读存储器224、或者一个或多个外围设备中。
[0100]
此外,在一种情况下,代码226a可通过网络201a从远程系统201b下载,其中类似代码201c被存储在存储设备201d上。在另一情况下,代码226a可通过网络201a被下载到远程系统201b,其中所下载的代码201c被存储在存储设备201d上。
[0101]
图1-图2中的硬件可以因实现方式而变化。除了或代替图1-图2中所描绘的硬件,可以使用其他内部硬件或外围设备,例如快闪存储器、等效非易失性存储器或光盘驱动器等。此外,说明性实施例的过程可以应用于多处理器数据处理系统。
[0102]
在一些说明性示例中,数据处理系统200可以是个人数字助理(pda),其通常配置有闪速存储器以提供用于存储操作系统文件和/或用户生成的数据的非易失性存储器。总线系统可包括一条或多条总线,诸如系统总线、i/o总线和pci总线。当然,总线系统可以使用在附接到结构或架构的不同组件或设备之间提供数据传送的任何类型的通信结构或架构来实现。
[0103]
通信单元可包括用于发送和接收数据的一个或多个装置,诸如调制解调器或网络适配器。存储器可以是例如主存储器208或高速缓存,诸如在北桥和存储器控制器中心202中发现的高速缓存。处理单元可包含或以上处理器或cpu。
[0104]
图1-图2中描绘的示例和上述示例不意味着暗示架构限制。例如,数据处理系统200除了采取移动或可穿戴设备的形式之外还可以是平板电脑、膝上型电脑或电话设备。
[0105]
在计算机或数据处理系统被描述为虚拟机、虚拟设备或虚拟组件的情况下,虚拟机、虚拟设备或虚拟组件以数据处理系统200的方式使用数据处理系统200中描绘的一些或所有组件的虚拟化表现来操作。例如,在虚拟机、虚拟设备或虚拟组件中,处理单元206表现为主机数据处理系统中可用的所有或一些数量的硬件处理单元206的虚拟化实例。主存储器208表现为可在主机数据处理系统中获得的主存储器208的全部或一些部分的虚拟化实例。盘226表现为可在主机数据处理系统中获得的盘226的全部或部分的虚拟化实例。在这种情况下,主机数据处理系统由数据处理系统200表示。
[0106]
参见图3,该图示出了具有在数据处理系统200内的节点之间的数据传输的数据流图。图3被示为不存在如将在后面的附图中描述的本发明提出的对存储器节省的修改。图3中所示的节点是在神经网络的实践中可以遇到的一些节点。在其他实施例中,数据流图可能由超过1000个或更多个节点组成。图3中以及在将描述的其余附图中的节点,将数据项(张量)作为输入,对数据进行操作,以在其输出端产生新数据。每当节点的输入数据全部可用时,节点即可执行。产生输出数据的节点已经相应地执行。源节点300可以接收数据,并且可以将其输出数据发送到数据处理系统200内的多个节点。例如,源节点300可以将其输出数据发送至第二节点302。第二节点302还可以向第三节点304发送其输出数据。进一步,第三节点304将其输出数据发送到第四节点306。第四节点306可以将其从第三节点304接收的输出数据发送至第五节点308。源节点300还将其输出数据发送到第五节点308和目的地节点310。第五节点308还将从第四节点306和源节点300接收的其输出数据发送到目的地节点310。数据流图中的节点之间的数据传输的过程,可按需要重复。发送数据的节点具有完成时间。完成时间是指数据的计算在节点处完成并可用于其他节点时的时间。松弛时间是指在不导致整体操作延迟的情况下某个输入的到达可以被延迟的时间量,或者数据被用于计算之前要一直在节点的输入处等待多久的时间量。
[0107]
参见图4,该图示出了具有与图3类似的配置的数据流图。另外,图4引入存储器缩减及存储器恢复子图插入。数据处理系统200内的gpu可能常常不具有所需的存储器来执行需要额外存储器空间的某些计算或功能。结果,gpu例如可以将占据所需存储器空间的数据移动到cpu。存储器缩减节点301示出了gpu向cpu传送数据以执行需要额外存储器空间的必要功能或计算。第二节点302可以在节点300之后立即执行,从而为它自己的输出数据分配存储空间,而与此同时,节点301可能忙于将数据复制到cpu存储器。在节点301完成其复制并释放由其输入张量持有的存储器之后,什么都不能阻止子图节点312立即开始其自己的存储器恢复动作,并因此将刚刚保存的数据从cpu带回到gpu。
[0108]
仍参见图4,在对图4右侧的存储器缩减/恢复子图的第二调用时,发生相同的事件系列,涉及第三节点304、子图节点311和322、第四节点306。第三节点304将其输出数据发送到子图节点311。子图节点311将数据转移到子图节点322。子图节点322将数据转移到第四节点306。第四节点306将其输出数据发送至第五节点308。第五节点308从子图节点312接收数据。第五节点308将其输出数据发送到目的地节点310。在并行执行中,当第五节点308正将其输出数据发送到目的地节点310时,子图节点312继续将数据转移到目的地节点310。
[0109]
参见图5,已经确定,节点416和418处的数据的使用不紧迫,因此可以被子图节点401所表示的存储器缩减动作延迟。此动作需要以由子图节点413表示的存储器恢复动作为形式的对应动作。包括子图节点401和413的插入子图的意图,是免除gpu存储器对长时间存储节点400的输出张量数据的需要。一旦节点402消耗该张量,就一直到节点416被执行时才需要它。还有三个构成插入子图的一部分的额外规定,即,在数据流图中以虚线箭头表示的标记以词语“串行化”和“预取”的额外控制依赖关系边。第一个是从子图节点401到节点402的边。
[0110]
仍参见图5,从节点a到节点b的控制依赖关系边的含义是使节点b的执行依赖于节点a。在实施例中,节点b必须一直等到节点a已经完成操作,才能开始其操作。因此,可以将控制依赖关系边视为节点a的到从属节点b的输入的数据输出,其中,没有实际数据被传送,
而是替代地发送完成消息的信号。插入从子图节点401到第二节点402的控制依赖关系边的原因,是确保节点402的执行被延迟,直到子图节点401的存储器缩减已经完成为止。否则,节点402将在源节点400已经执行之后立即执行,并将为其自身的输出张量分配额外的gpu存储器。这通过从子图节点401到节点402的“串行化”边而得到避免。子图节点401和节点402确保串行地执行。子图节点401将在节点402之前完成其执行。节点402可以将其输出数据发送到节点404。节点404可将其输出数据发送到节点406和节点414。子图节点411和节点408起着与子图节点401和节点402的相同的作用。
[0111]
仍参见图5,关于存储器恢复节点413,在没有任何其它相反的规定的情况下,其将在子图节点401完成执行之后立即执行。然而,这会使存储器缩减的目的失败。在实施例中,可以强制性地延迟子图节点413的执行,直到需要数据作为输入的节点(节点416和418)准备好执行为止。因此需要作为子图节点413的输入的控制依赖关系边,使子图节点413等待控制节点的完成。控制节点不能是节点416或418,因为额外的依赖关系边将在图中产生不允许的循环。控制节点应该是节点416上游的某个节点。节点410将其输出数据发送到节点412。节点412将其输出数据发送到节点414。相应地选择节点414以将“预取”边应用到子图节点413上。一旦节点414完成其操作,它将其张量输出至节点416,同时通过“预取”边向子图节点413发信号,通知子图节点413可以开始其恢复动作。恢复动作的启动,应当使得在它已经完成时,等待恢复的数据的节点准备好执行,这意味着到那些节点的其他输入的数据已经到达。
[0112]
关于图5,图5中示出了从节点412到子图节点413的第三控制依赖关系边(第二个被标记为“串行化”的控制依赖关系边)。它为子图节点413提供用于其恢复动作的开始的第二条件。目的是串行化后续恢复动作,其在本例中涉及子图节点423和413的恢复动作。子图节点423恢复由节点412消耗的张量。一且节点412完成其执行(因此用于其输入张量的存储器已被释放),它就允许子图节点413开始其执行,但仅当所有其他输入同样可用时才能开始其执行。节点413必须等待更长一段时间,待其“预取”信号从节点414到来。一旦接收到,子图节点413就恢复其张量并将其数据发送到节点416和418。节点416现在所有输入都可用,因此执行,产生节点418需要作为其输入的输出张量。节点418现在输入数据也都可用,因此执行。
[0113]
仍参见图5,针对节点413的两个控制依赖关系起着不同的作用。“预取”依赖关系确保子图节点413不立即恢复由节点401缩减的数据。将存在延迟,直到等待恢复的数据的节点在它们的其他输入处准备好为止。“串行化”依赖关系确保不会同时发生两个恢复,同时发生两个恢复会导致所有恢复的张量同时使用过多的存储器。在说明性实施例中,可以说“预取”信号主导串行化”信号,因为“预取”的启动比“串行化”晚。在其他说明性实施例中,“串行化”可以主导“预取”信号。
[0114]
参见图6,示出了其中gpu将数据移动到cpu以释放存储器空间来执行一个或多个功能或计算的实施例。如图5中所示的那样利用串行化和预取。
[0115]
仍参看图6,示出了负责存储器缩减和恢复动作的插入子图的特定调用。这里,存储器缩减操作由单个节点表示,其操作是将其传入张量从gpu存储器复制到cpu存储器。从gpu存储器换出到cpu存储器中的数据可以是换出动作。最初保持数据的gpu存储器,在复制的动作已经完成之后现在可能被释放。表示该动作的节点501用“向cpu复制”标记。该动作
的对应动作由用“从cpu复制”标记的恢复节点507确立。其目的是将张量从cpu存储器复制回gpu存储器。在复制开始之前,必须分配gpu存储器,用于保持恢复的张量。之后,保持那个张量的cpu存储器可以被释放。
[0116]
参见图6,源节点500接收数据并将数据发送到节点501和第二节点502。存储器缩减开始于节点501(控制节点)将控制依赖关系边(示为带虚线和箭头的“串行化”)插到第二节点502或从属节点上。第二节点502的执行必须等待,直到节点501完成其执行。节点501和第二节点502的执行相应地被串行化。第二节点502将其输出数据传送到另一节点。另一节点(未示出)可以将控制依赖关系边(由“串行化”示出)应用到节点507上,以确保节点507在另一节点执行传输其输出数据之后执行传输要恢复的数据。第三节点504可将其输出数据发送到第四节点506。第四节点506可以将控制依赖关系边(由“预取”表示)应用到节点507上。因而,节点507将被延迟将要恢复的数据传送到gpu,直到第四节点506已经将其输出数据发送到目的地节点508。在第四节点506的执行之后,节点507将数据发送到目的地节点508。
[0117]
参见图7,示出了例示数据传送和存储器管理的另一数据流图。gpu可以不仅仅决定将数据移动到cpu以释放执行一个或多个大功能或计算所需的存储器空间。gpu还可以决定按比例(即,从32位到16位、从32位到8位等)压缩数据,以在不将数据移动到cpu的情况下获得必要的存储器空间。在其他说明性实施例中,gpu可以各种方式压缩其数据。在这个说明性实施例中,gpu将诸如大张量的数据从32位浮点数压缩到16位浮点数(参见图11)。换句话说,gpu可将数据从32位压缩到16位,释放存储器空间以执行功能和/或计算。
[0118]
仍参见图7,源节点600接收输入数据,将该数据发送到节点601和第二节点602。节点601是应用控制依赖关系边(“串行化”)的控制节点,第二节点602是从属节点。第二节点602在节点601完成其执行之前一直等待。第二节点602在节点601已压缩的数据以释放存储器空间之后发送其输出数据。另一节点(未示出)可以在节点606上应用控制依赖关系边(“串行化”)。节点606等待对数据进行解压,直到其他节点已经完成其执行。第三节点609接收数据并将其输出数据发送到第四节点605。第四节点605可以在子图节点606上应用控制依赖关系边(“预取”)。节点606等待对数据进行解压和恢复,直到第四节点605已经完成它自己的执行并且将其输出数据发送到目的地节点607。在第四节点605的执行之后,节点606可以完成其执行。数据可被解压并发送到目的地节点607。
[0119]
关于图8,gpu可以压缩数据并将压缩的数据发送至cpu,以释放额外存储器空间。可以进行存储器缩减,其中在另一节点将其数据发送到下一节点之前gpu压缩数据将压缩的数据发送到cpu。可以进行存储器恢复,其中cpu被延迟对数据进行解压以及将数据发送回到gpu,直到目的地节点需要数据为止。
[0120]
仍然关于图8,源节点700接收数据,将该数据发送到节点701和第二节点702。节点701将控制依赖关系边应用到第二节点702上。第二节点702的执行必须等待,直到节点701已压缩的数据,发送了压缩的数据且向cpu复制了压缩的数据。节点707是恢复结构的一部分。子图节点701和第二节点702的执行相应地被串行化。gpu可以用额外存储器空间来执行一个或多个功能或计算。第二节点702可将其输出数据发送至下一节点(未示出)。节点(未示出)可以将控制依赖关系边应用到包含cpu上的压缩数据的节点707上。在实施例中,节点707必须等待将压缩的数据复制回gpu,直到控制依赖关系被其他节点激活。在另一节点的
执行完成之后,节点707完成其将压缩数据复制回gpu的执行。
[0121]
参见图8,第三节点704接收该数据,并将其输出数据传送给第四节点706。第四节点706对节点707执行控制依赖关系边。节点707等待将数据复制回并且将数据发送至标记为“解压至fp32”的节点。一旦其两个控制依赖关系输入都得到满足,节点707就将数据从cpu存储器复制回gpu存储器,并发送要解压的数据。在解压之后,使恢复的数据对节点708可用。
[0122]
关于图9,可能出现恢复动作应当被复制以满足不同目的地节点的情况。虽然由节点801表示的存储器缩减动作是单一的,但是在这种情况下,实验数据确定,有由节点813和807表示的两个单独的对数据的恢复动作是有益的。在说明性实施例中,gpu可以根据需要多次从cpu检索回相同数据,以腾出额外存储器空间来执行计算和/或其他功能。
[0123]
参见图9,源节点800向节点801和第二节点802发送数据。通过添加从节点801第二节点802的控制依赖关系边来实施串行化。节点801将数据复制到cpu存储器。节点801和第二节点802的执行被串行化,其中第二节点802在节点801执行之后将其输出数据发送到下一节点(未示出)。该图进一步示出了以节点807及813为形式的两个存储器恢复子图的实例。两个节点807、813各自具有两个传入控制依赖关系,这两个传入控制依赖关系确立如先前附图中所描述的串行化和预取规定。
[0124]
仍参见图9,第三节点804接收数据并将其输出数据发送到第四节点806。第四节点806可以将控制依赖关系边应用到节点807上。节点807等待从cpu检索数据并将其发送到目的地节点808,直到第四节点806已经完成其执行。节点807将恢复的数据发送到目的地节点808。
[0125]
关于图9,相同的恢复情形涉及节点813、814、812和810。在未示出的节点执行并发信号通知“串行化”边并且节点812也执行并发信号通知“预取”边之后,一旦其控制依赖关系得到满足,就将通过节点801的执行而存储在cpu存储器中的相同数据带回gpu。第五节点810也可以接收数据并且将其输出数据发送至第六节点812。第六节点812对于节点813是“预取”控制依赖关系的源。cpu数据到gpu的恢复被延迟,直到第六节点812的执行已经完成。相应地,节点813将数据发送到目的地节点814。
[0126]
关于图10a,示出了用于确定缩减和恢复操作的插入点的实例过程1100的流程图。方法1100可以通过使用处理器执行存储在(例如结合图1和2所述的那些)有形存储介质上的编程指令来实践。
[0127]
在本实施例中,可以假设一些用户可配置的信息。首先,可以为张量的定时松弛(tts)定义阈值thtts;只有松弛值大于阈值的张量将被认为是插入点的候选。其次,可为张量大小定义阈值ths;只有(例如以字节为单位的)大小超过阈值的张量将被认为是插入点的候选。第三,可以为要考虑插入的数量定义最大值n。
[0128]
基于这些假设,在框1102,通过定时分析为一组输入张量(例如所有数据流图节点的所有输入张量)计算张量定时松弛(tts)。
[0129]
在框1104,编辑数据流图节点的输入张量的候选列表si,其中,tts值大于thtts且张量的大小大于ths。
[0130]
在决策框1106,确定候选列表si的大小是否大于n。
[0131]
在框1108(决策框1106的“是”分支),根据张量大小,按降序对候选列表si进行排
序。在列表中仅保持列表中的前n个元素,并从候选列表si中去除其它张量。也可以使用其他排序或阈值机制。
[0132]
在框1110(决策框1106的“否”分支或框1108的完成),返回候选列表s1,作为根据结合其他附图所述的本发明的实施例的存储器缩减或存储器恢复操作的插入点的候选节点列表。
[0133]
关于图10b,示出了用于执行定时分析的示例过程1200的流程图。方法12000可以通过使用处理器执行存储在(例如结合图1和2所述的那些)有形存储介质上的编程指令来实践。
[0134]
现在参见图10b,过程1200按照所示实施例开始。在步骤1202,过程1200将所有数据流图节点的tat、trt和tts值初始化为未知值。在步骤1204,过程1200如下地定义数据集q:令q是所有数据流图源节点的集合。过程1200还将q的元素的tat、trt和tts值设置为零(0)。
[0135]
在步骤1206,过程1200检查q是否为空。如果是,则过程结束(步骤1218)。然而,如果否(即,当q不为空时),过程1200选择(步骤1208)q的任意元素q并从q中排除q。
[0136]
在步骤1210,过程1200确定是否处理了q的所有槽输入s。如果是,过程1200考虑下一个q(在步骤1206执行的检查)。然而,如果否,则过程1200如在步骤1212中所提供的那样处理s,由此过程1200将s的tat设置为等于节点q的tat。过程1200进一步(在步骤1212)定义n为节点输入s所属的节点。过程1200确定(步骤1214)是否节点n的所有输入i都具有已知的tat值。如果否,则过程1200考虑下一个s,并按while循环进行迭代,以处理如在步骤1210识别的q的剩余槽输入s。
[0137]
然而,如果是(在步骤1214的确定),过程1200继续到步骤1216,其中过程1200将节点n的trt设置为其输入的tat的最大值;将每个输入i的tts设置为n的trt与i的tat之差,将节点n的tat设置为其trt,递减相应的节点延迟;将n包括到q中。
[0138]
如果q为空(在步骤1206确定),过程1200结束(步骤1218),由此已经通过上述步骤确定了所有节点的tat、trt和tts值。
[0139]
在实施例中,如在过程1200中描述的定时分析从源到槽遍历数据流图,并且根据通过该过程实现的tat、trt和tss的定义来计算tat、trt和tss。该计算在数据流图的大小中以时间线性的方式执行。
[0140]
现在参见图11,示出了上述说明性实施例中描述的gpu的存储器概略图。说明性实施例中的gpu具有16千兆字节(gb)的存储器。在其他说明性实施例中,gpu可以具有更大的存储器空间。随着gpu执行功能和计算,越来越多的存储器被分配给预期的功能和计算,直到达到没有存储器空间剩余的峰值。一旦达到峰值,则释放存储器,其中最近分配的存储器首先被释放。
[0141]
参见图12,示出了上述说明性实施例中描述的gpu的存储器概略图。当gpu决定压缩其内的数据以如上文在图7和8中所示的那样产生额外存储器空间时,gpu内的大的数据张量被从32位浮点数压缩到16位浮点数,或从32位压缩到16位。因此,一半的存储器空间变得空闲,gpu中的存储器达到其峰值前存储器内的数据总规模(data batch size)可能加倍。
[0142]
参见图13,示出了根据实施例的用于执行不同功能的示例过程1000的流程图。在
框1002处,通过识别将由节点p产生的输出数据的存储器需求,对以子图节点a和节点p(例如,在图5的上下文中,节点a可以指的是子图401,而节点p可以指的是节点402)应用存储器缩减动作作出确定。在框1004,源节点将数据发送到子图节点a和节点p。在框1006,子图节点a将控制依赖关系边应用到节点p上。子图节点a和节点p的执行被串行化。子图节点a在节点p之前执行。这里,子图节点a的操作是将其传入张量从gpu存储器复制到cpu存储器。从gpu存储器换出到cpu存储器中的数据可以是换出动作。最初保持该数据的gpu存储器,在复制的动作已经完成之后,现在可以被释放。gpu可以使用额外存储器空间来执行一个或多个功能或计算。在框1008,节点p将其输出数据发送到节点q。在框1010,节点q将控制依赖关系边应用到子图节点b上。该控制依赖关系边确保子图节点b延迟其存储器恢复动作,直到节点q已完成其执行为止。将存在延迟,直到等待恢复的数据的节点在它们的其他输入处准备好为止。在框1012,节点q将其输出数据发送到目的地节点。进一步,在框1014,子图节点b将恢复的数据发送到目的地节点。
[0143]
现在将更一般地描述本发明的一些实施例。在以下描述中,可以根据需要直接参考一个或多个附图,但应理解实施例不限于任何特定附图。
[0144]
根据本发明的实施例,提供了一种用于处理包括(例如如以上在定义1-5中所定义的)一组节点和一组边的神经网络数据流图的方法。如例如在图10a和10b中所述的那样来执行该方法的步骤以生成数据流图,或如例如结合图3-9所述的那样修改数据流图。该方法的步骤被存储在计算机系统的诸如结合图1-2描述的那些有形存储设备上(例如作为计算机程序产品)。
[0145]
该方法计算一组输入张量的张量定时松弛(tts);用具有大于阈值(thtts)的相应tts值的输入张量,编辑该组输入张量中的输入张量的候选列表(si);过滤si以保留其大小满足阈值(ths)的输入张量;以及使用基于所述过滤的si来确定操作的插入点。
[0146]
根据该方法的实施例,该操作是缩减操作和恢复操作的组合。缩减操作包括向中央处理单元(cpu)存储器复制操作和压缩操作中的任一或两者。恢复操作包括从cpu存储器复制操作和解压操作中的任一或两者。
[0147]
根据该方法的实施例,计算tts包括用输入张量来执行时间分析。
[0148]
根据该方法的实施例,定时分析包括:初始化输入张量的张量到达时间(tat)、张量需求时间(trt)和张量定时松弛(tts)值;针对一组输入张量q,当q不为空时,执行以下步骤:在q中选择要排除的节点q;从q中排除q;以及针对q的每个后继输入张量s,将s的tat设置为等于q的tat。
[0149]
优选地,所述初始化包括:将tat、trt和tts值初始化为未知值或零。
[0150]
根据该方法的实施例,节点n的所有输入具有已知的tat值,其中n是s为其输入张量的节点,并且其中,该方法还包括针对一组输入张量q执行以下进一步的步骤:将n的trt设置为n的输入s的tat的最大值;将n的每个输入i的tts设置为n的trt与s的tat之差;以及将n包括回q。
[0151]
根据该方法的实施例,数据流图包括一对(n,e),其中n包括一组节点并且e包括一组超边,并且其中,n中的给定节点在一个或多个张量上实现一个或多个运算符。
[0152]
根据该方法的实施例,该给定节点包括三元组(f,i,o),其中f是由该给定节点实现的运算符的函数,i是该给定节点的一组输入张量,并且o是基于该运算符生成的该给定
节点的一组输出。
[0153]
根据该方法的实施例,超边定义如何将张量从生成该张量的运算符传递到将该张量用作自变量的运算符。
[0154]
根据该方法的实施例,超边包括一对(s,h),其中s是节点输出,并且h是一组节点输入。
[0155]
根据该方法的实施例,该方法进一步包括在该数据流图中插入对应于该操作的子图节点。
[0156]
根据该方法的实施例,所述插入生成新的数据流图或修改现有的数据流图。
[0157]
根据该方法的实施例,所述插入生成新的数据流图,其中该新的数据流图包括完整的数据流图或部分的数据流图。
[0158]
根据该方法的实施例,该方法还包括:使用基于所述插入的数据流图来处理该组输入张量;以及基于所述处理,生成输出。
[0159]
根据该方法的实施例,所述操作为存储器缩减操作,该方法进一步包括:插入对应于存储器缩减操作的存储器缩减子图节点。
[0160]
根据该方法的实施例,所述插入进一步包括:通过第一超边将第一节点连接到存储器缩减子图节点,第一节点对应于源节点;以及通过第二超边将存储器缩减子图节点连接到第二节点,其中第二超边包括串行化超边,且第二节点对应于中间节点或目的地节点。
[0161]
根据该方法的实施例,所述插入进一步包括:通过第三超边将第一节点连接至第二节点。
[0162]
根据该方法的实施例,所述操作为存储器恢复操作,该方法进一步包括:插入对应于存储器恢复操作的存储器恢复子图节点。
[0163]
根据该方法的实施例,所述插入进一步包括:通过第一超边将第一节点连接到存储器恢复子图节点,其中第二超边包括串行化超边或预取超边;通过第二超边将存储器恢复子图节点连接到第二节点,第二节点对应于目的地节点;以及通过第三超边将存储器缩减子图节点连接到存储器恢复子图节点。
[0164]
根据该方法的实施例,该方法进一步包括通过超边来连接数据流图的两个节点,其中该连接包括下列中的任一者:通过两个节点之间的超边的直接连接;以及通过一个或多个附加节点和这两个节点之间的超边的间接连接。
[0165]
根据该方法的实施例,迭代地执行该方法的步骤以将用于执行至少一个存储器缩减操作和至少一个存储器恢复操作的一组子图节点插入到流程图中。
[0166]
根据该方法的实施例,迭代地执行该方法的步骤包括在流程图中插入一组超边,该组超边包括至少一个串行化超边、或至少一个预取超边、或至少一个串行化超边和至少一个预取超边。
[0167]
根据本发明的另一实施例,提供了一种方法。该方法基于一组张量定时松弛(tts)和输入张量(si)的候选列表来在数据流图中选择操作的插入点。
[0168]
在实施例中,该方法还包括:计算一组输入张量的张量定时松弛(tts);使用具有大于阈值(thtts)的相应tts值的输入张量,编辑该组输入张量中的输入张量的候选列表(si);对si进行过滤,以保留其大小满足阈值(ths)的输入张量;以及使用基于所述过滤的si来确定用于缩减和恢复操作的插入点。
[0169]
在实施例中,计算tts包括用输入张量来执行时间分析。
[0170]
在实施例中,该方法进一步包括在数据流图中插入对应于该操作的子图节点。
[0171]
在实施例中,所述插入生成新的数据流图或修改现有的数据流图。
[0172]
在实施例中,所述插入生成新的数据流图,其中新的数据流图包括完整的数据流图或部分的数据流图。
[0173]
在实施例中,该方法还包括:使用基于所述插入的数据流图来处理该组输入张量;以及基于所述处理,生成输出。
[0174]
根据本发明的实施例,提供了一种方法。该方法包括:通过识别对将由节点p产生的输出数据的存储器需求来确定以子图节点a和节点p应用存储器缩减动作;从源节点向子图节点a和子图节点p发送数据;使子图节点a能在子图节点p的执行之前执行存储器缩减动作,所述存储器缩减动作使额外的存储器空间可用于图形处理器gpu执行一个或多个功能;使子图节点b延迟存储器恢复动作,直到节点q已完成其执行为止;以及将所述数据从子图节点b的中央处理器cpu发送到gpu,以将所述数据恢复到gpu。
[0175]
在实施例中,该方法进一步包括将控制依赖关系边应用到子图节点p上,以使子图节点a能在子图节点p之前执行。
[0176]
在实施例中,该方法进一步包括通过确定产生具有大于由节点q产生的输出数据的存储器需求的输出数据的节点p来确定控制依赖关系边的插入位置。
[0177]
在实施例中,该方法包括将控制依赖关系边应用到子图节点b上,以延迟所述存储器恢复动作,直到所述节点q已完成其执行为止。
[0178]
在实施例中,该方法包括延迟节点p的执行,直到存储器缩减动作完成。
[0179]
在实施例中,该方法包括由gpu使用额外存储器空间来执行一系列计算。
[0180]
在实施例中,该方法包括在节点q完成其执行之后将数据从子图节点b发送到目的地节点。
[0181]
在实施例中,该方法包括压缩数据以获得用于gpu执行一个或多个功能的额外存储器空间。
[0182]
在实施例中,该方法包括在完成存储器恢复动作之前对数据进行解压。
[0183]
在实施例中,该方法包括延迟所述存储器恢复动作,直到目的地节点需要所述数据为止。
[0184]
在实施例中,该方法包括在节点q已经完成其执行之后对数据进行解压。
[0185]
在实施例中,该方法包括在节点q已经完成的执行之后将数据恢复到gpu。
[0186]
在实施例中,该方法包括确定插入位置以应用控制依赖关系边以允许执行额外的存储器恢复动作。
[0187]
在实施例中,该方法包括以与节点q与子图节点b之间的存储器恢复动作不同的时间间隔执行额外的存储器恢复动作。
[0188]
在实施例中,该方法包括:压缩数据,以为gpu执行一个或多个功能创建额外存储器空间;在节点p的执行之前将压缩的数据复制到cpu;在cpu接收压缩的数据之后从子图节点p发送所述所接收数据;以及使用所述所创建的额外存储器空间在gpu中执行所述一个或多个功能。
[0189]
在实施例中,该方法包括确定为防止gpu过早地从cpu接收回数据而延迟存储器恢
复动作所需的时间间隔。
[0190]
根据本发明的另一实施例,可以提供计算机可用程序产品。计算机程序产品包括一个或多个计算机可读存储设备以及存储在一个或多个存储设备的至少一个上的程序指令,存储程序指令包括用于执行根据本公开所提供的实施例的方法的步骤的程序指令。
[0191]
根据本发明的另一实施例,可以提供一种计算机。该系统包括一个或多个处理器、一个或多个计算机可读存储器和一个或多个计算机可读存储设备,以及存储在所述一个或多个存储设备中的至少一个上的用于由所述一个或多个处理器中的至少一个通过所述一个或多个存储器中的至少一个执行的程序指令,所述存储程序指令包括执行根据本公开所提供的实施例的方法的步骤。
[0192]
在说明性实施例中,在数据流图中,较早计算的张量占用gpu存储器,直到节点执行所需的其他张量准备好为止。过早计算的张量可以被移动到大的cpu存储器,或压缩,或甚至从gpu存储器删除。当再次需要这些张量时,它们被返回gpu存储器、解压或重新计算。在存储器保存中涉及的张量越多,存储器节省程度就越大,并且能在同一gpu存储器中处理的数据流图就越大。
[0193]
在实施例中,一种方法通过识别将由节点p产生的输出数据的存储器需求来确定以子图节点a和节点p应用存储器缩减动作。该方法将数据从源节点发送到子图节点a和节点p。该方法使子图节点a能在节点p的执行之前执行存储器缩减动作,存储器缩减动作使额外的存储器空间可用于图形处理器gpu执行一个或多个功能。该方法使子图节点b延迟存储器恢复动作,直到节点q已完成其执行为止。该方法将数据从子图节点b的中央处理器(cpu)发送到gpu,以将数据恢复到gpu。
[0194]
在实施例中,方法将控制依赖关系边应用到节点p上,以使子图节点a能在节点p之前执行。
[0195]
在实施例中,该方法通过确定产生存储器要求大于由节点q产生的输出数据的输出数据的节点p来确定控制依赖关系边的插入位置。
[0196]
在实施例中,该方法将控制依赖关系边应用到子图节点b上,以延迟存储器恢复动作,直到节点q已完成其执行为止。
[0197]
在实施例中,该方法延迟节点p的执行,直到存储器缩减动作完成。
[0198]
在实施例中,由gpu使用额外存储器空间来执行一系列计算。
[0199]
在实施例中,该方法在节点q完成其执行之后将数据从子图节点b发送到目的地节点。
[0200]
在实施例中,该方法压缩数据,以获得供gpu执行一个或多个功能的额外存储器空间。
[0201]
在实施例中,该方法在完成存储器恢复动作之前对数据进行解压。
[0202]
在实施例中,该方法延迟存储器恢复动作,直到目的地节点需要数据。
[0203]
在实施例中,该方法在节点q已经完成其执行之后对数据进行解压。
[0204]
在实施例中,该方法在节点q已经完成其执行之后将数据恢复到gpu。
[0205]
在实施例中,该方法确定插入位置以应用控制依赖关系边以允许执行额外的存储器恢复动作。
[0206]
在实施例中,所述方法以与节点q与子图节点b之间的存储器恢复动作不同的时间
间隔执行额外存储器恢复动作。
[0207]
在实施例中,该方法压缩数据以创建用于gpu执行一个或多个功能的额外存储器空间。该方法在节点p的执行之前将压缩数据复制到cpu。该方法在cpu接收到压缩的数据之后,从节点p发送接收到的数据。所述方法使用所创建的额外存储器空间执行gpu中的所述一个或多个功能。
[0208]
在实施例中,该方法确定为防止gpu过早地从cpu接收回数据而延迟存储器恢复动作所需的时间间隔。
[0209]
在实施例中,提供了一种计算机可用程序产品,包括一个或多个计算机可读存储设备,以及存储在所述一个或多个存储设备中的至少一个存储设备上的程序指令。所述存储程序指令包括用于进行以下操作的指令:通过识别对将由节点p产生的输出数据的存储器需求来确定以子图节点a和节点p应用存储器缩减动作;从源节点向子图节点a和子图节点p发送数据;使子图节点a能在子图节点p的执行之前执行存储器缩减动作,所述存储器缩减动作使额外的存储器空间可用于图形处理器gpu执行一个或多个功能;使子图节点b延迟存储器恢复动作,直到节点q已完成其执行为止;将所述数据从子图节点b的中央处理器cpu发送到gpu,以将所述数据恢复到gpu。
[0210]
在实施例中,计算机系统包括一个或多个处理器、一个或多个计算机可读存储器和一个或多个计算机可读存储设备,以及存储在所述一个或多个存储设备中的至少一个上的用于由所述一个或多个处理器中的至少一个通过所述一个或多个存储器中的至少一个执行的程序指令。所述存储程序指令包括用于进行以下操作的指令:通过识别对将由节点p产生的输出数据的存储器需求来确定以子图节点a和节点p应用存储器缩减动作;从源节点向子图节点a和子图节点p发送数据;使子图节点a能在子图节点p的执行之前执行存储器缩减动作,所述存储器缩减动作使额外的存储器空间可用于图形处理器gpu执行一个或多个功能;使子图节点b延迟存储器恢复动作,直到节点q已完成其执行为止;将所述数据从子图节点b的中央处理器cpu发送到gpu,以将所述数据恢复到gpu
[0211]
以下定义和缩写将用于解释权利要求书和说明书。如在此使用的,术语“包括”、“包含”、“含有”、“具有”、“有”或“含”或其任何其他变体旨在涵盖非排他性的包括。例如,包含一系列要素的组合物、混合物、工艺、方法、物品或设备不必仅限于那些要素,而是可以包括未明确列出的或这种组合物、混合物、工艺、方法、物品或设备固有的其他要素。
[0212]
此外,术语“说明性的”在本文中用于表示“用作实例、例子或例证”。在此描述为“说明性的”任何实施例或设计不一定被解释为是比其他实施例或设计优选的或有利的。术语“至少一个”和“一个或多个”应理解为包括大于或等于一的任何整数,即。一个、两个、三个、四个等。术语“多个”应理解为包括大于或等于二的任何整数,即。两个、三个、四个、五个等。术语“连接”可包括间接“连接”和直接“连接”。
[0213]
说明书中对“一个实施例”、“实施例”、“示例性实施例”等的提及表示所描述的实施例可以包括特定特征、结构或特性,但是每个实施例可以包括或可以不包括特定特征、结构或特性。此外,这样的短语不一定指相同的实施方式。进一步,当结合实施例描述特定特征、结构或特性时,认为结合其他实施例(无论是否明确描述)影响这样的特征、结构或特性在本领域技术人员的知识范围内。
[0214]
术语“约”、“基本上”、“大致”及其变型旨在包括与基于提交申请时可用的设备的
特定量的测量相关联的误差程度。例如,“约”可以包括给定值的
±
8%或5%、或2%的范围。
[0215]
已经出于说明的目的呈现了本发明的各种实施方式的描述,但并不旨在是详尽的或者限于所公开的实施方式。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域普通技术人员将是显而易见的。本文使用的术语被选择来最好地解释实施例的原理、实际应用或优于市场中发现的技术的技术改进,或者使本领域普通技术人员能理解本文描述的实施例。
[0216]
已经出于说明的目的呈现了本发明的各种实施方式的描述,但并不旨在是详尽的或者限于所公开的实施方式。在不脱离所描述的实施例的范围和精神的情况下,许多修改和变化对本领域普通技术人员将是显而易见的。本文使用的术语被选择来最好地解释实施例的原理、实际应用或优于市场中发现的技术的技术改进,或者使本领域普通技术人员能理解本文描述的实施例。
[0217]
因此,在说明性实施例中提供了用于管理在线社区的参与和其他相关特征、功能或操作的计算机实现的方法。当关于某类设备描述实施例或其部分时,计算机实施的方法、系统或设备、计算机程序产品或其部分被适配或配置用于适合且与该类设备可比较的表示。
[0218]
用户可通过诸如web浏览器(例如,基于web的电子邮件)或其他轻量级客户机应用之类的瘦客户机接口使用各种客户机设备来访问应用。用户不管理或控制包括网络、服务器、操作系统或云基础设施的存储的底层云基础设施。
[0219]
本发明可以是在任何可能的技术细节集成度上的方法、装置和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质。
[0220]
计算机可读存储介质可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式紧凑盘只读存储器(cd-rom)、数字通用盘(dvd)、存储棒、软盘、诸如穿孔卡或具有记录在其上的指令的槽中的凸出结构之类的机械编码设备、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储介质不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发送的电信号。
[0221]
本文中所描述的计算机可读程序指令可以通过网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0222]
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数
据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如smalltalk、c 等)和过程程序设计语言(诸如“c”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(lan)或广域网(wan))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
[0223]
参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0224]
这些计算机可读程序指令可被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,使得通过计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
[0225]
也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
[0226]
附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,取决于所涉及的功能,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献