计算图的基于流的加速器处理的制作方法

文档序号:33620701发布日期:2023-03-25 11:35阅读:37来源:国知局
计算图的基于流的加速器处理的制作方法
计算图的基于流的加速器处理
1.分案说明
2.本技术属于申请日为2016年10月28日的中国发明专利申请no.201680063365.6的分案申请。
技术领域
3.本技术涉及计算图的基于流的加速器处理。


背景技术:

4.本说明书涉及通过将子图指派给具有多个流的加速器设备(例如,图形处理单元(gpu))来处理表示神经网络的计算图并且/或者涉及将这种经处理的计算图用于处理模型输入。
5.神经网络是采用模型的一个或多个层来针对接收到的输入生成输出(例如,一个或多个分类)的机器学习模型。一些神经网络除了包括输出层之外还包括一个或多个隐藏层。每个隐藏层的输出被用作网络中的下一个层(即,网络的下一个隐藏层或输出层)的输入。网络的每个层根据用于层的相应的参数集合的当前值来从接收到的输入生成输出。
6.在存在的系统中,计算图的操作可由个别设备处理。在一些实施方式中,设备是gpu。设备可具有执行操作(例如,在一层处从输入生成输出)并且将来自操作的输出存储在存储器中的处理器。由于在计算图中生成输出通常所需要的操作的大数目和大小,一个设备可花费大量时间来处理图的操作。


技术实现要素:

7.一般而言,本说明书描述一种用于使用基于流的加速器设备(例如,gpu)来处理计算图的子图的系统或方法。
8.一般而言,本说明书中描述的主题的一个创新方面可用包括以下各项的动作的方法加以具体实现:接收处理计算图的请求;获得表示所述计算图的子图的数据,所述计算图包括多个节点和有向边,其中每个节点表示相应的操作,其中每个有向边将相应的第一节点连接到相应的第二节点,所述相应的第二节点表示接收由所述相应的第一节点表示的操作的输出作为输入的操作,所述子图由所述计算图系统中的布放器指派给第一设备;确定所述第一设备包括具有多个流的硬件加速器;响应于确定所述第一设备包括具有多个流的图形处理单元而生成指令,所述指令当由所述第一设备执行时使所述第一设备:将由所述子图中的每个节点表示的所述操作指派给所述图形处理单元的多个流中的相应流;并且根据所述指派来执行由所述子图中的所述节点表示的所述操作;以及将所述指令和所述数据提供给所述第一设备。这个方面的方法可以是计算机实现的方法。这个方面的方法可以由一个或多个计算设备执行,例如由包括计算图系统的一个或多个计算设备执行。
9.实施方式可包括以下特征中的一个或多个。所述请求指定识别来自所述子图中的一个或多个相应节点的一个或多个特定输出,进一步包括:从所述第一设备接收所述一个
或多个特定输出;以及将所述一个或多个特定输出提供给所述客户端。所述指令进一步使所述第一设备将所述一个或多个特定输出存储在所述第一设备的存储器中。针对所述子图的所述操作包括针对神经网络的部分推理或训练计算。分析所述子图以在链结构中识别所述子图中的节点组;其中,所述指令使所述第一设备将该节点组指派给一个流。所述指派包括:分析所述子图以识别所述子图中的第一节点具有作为输出的多个有向边;其中所述指令使所述第一设备针对所述有向边中的每一个有向边来将该有向边指向的节点指派给所述图形处理单元的唯一流。所述指令使所述第一设备针对每个节点来基于到该节点的所述有向边确定通过由该节点表示的所述操作消耗的所述图形处理单元中的相应的存储器资源量,其中,所述指派至少基于所述相应的存储器资源量。所述指令使所述第一设备确定由节点表示的特定操作已在特定流处结束;响应于确定所述特定操作已结束:确定将被释放的通过所述特定操作消耗的第一5存储器量;针对未指派节点组中的每一个未指派节点来确定由该未指派节点消耗的相应的估计存储器量;从所述未指派节点组中确定具有使所述第一存储器量的使用最大化的所述估计存储器量的第一未指派节点;并且将由所述第一未指派节点表示的操作指派给所述特定流。0在一个实施方式中所述方法进一步包括:接收模型输入;以及由所述硬件加速器根据由所述子图中的所述节点表示的操作来处理所述模型输入。
10.在另一方面中,本说明书中描述的主题可以用可以包括以下各项5的动作的方法加以具体实现:提供与通过所述第一方面的方法获得的经处理的计算图相对应的机器学习模型;以及使用所述机器学习模型来处理模型输入。
11.在另一方面中,本说明书中描述的主题可以用可以包括以下各项0的动作的方法加以具体实现:由硬件加速器执行通过所述第一方面的方法获得的经处理的计算图的子图。
12.在这些方面中所述计算图可以是诸如例如神经网络的机器学习模型的表示。
[0013][0014]
另一创新方面包括以下各项的动作:由具有多个流的图形处理单元接收表示所述计算图的子图的数据,所述计算图包括多个节点和有向边,其中每个节点表示相应的操作,其中每个有向边将相应的第一节点连接到相应的第二节点,所述相应的第二节点表示接收由所述相0应的第一节点表示的操作的输出作为输入的操作,所述子图由计算图系统中的布放器指派给图形处理单元;将由所述子图中的每个节点表示的所述操作指派给图形处理单元的多个流中的相应流;以及根据所述指派来执行由所述子图中的所述节点表示的所述操作。
[0015]
实施方式可包括以下特征中的一个或多个。接收识别来自所述子图的一个或多个相应节点的一个或多个特定输出的请求;以及将所述一个或多个特定输出提供给所述客户端。接收在链结构中识别所述子图中的节点组的数据;以及将该节点组指派给一个流。所述指派包括:接收识别在所述子图中具有多个有向边作为输出的第一节点的数据;以及针对所述有向边中的每一个有向边来将该有向边指向的节点指派给所述图形处理单元的唯一流。针对每个节点来基于到该节点的所述有向边确定通过由该节点表示的所述操作消耗的所述图形处理单元中的相应的存储器资源量,其中,所述指派至少基于所述相应的存储器资源量。确定由节点表示的特定操作已在特定流处结束;响应于确定所述特定操作已结束,
确定将被释放的通过所述特定操作消耗的第一存储器量;针对未指派节点组中的每一个未指派节点来确定由该未指派节点消耗的相应的估计存储器量;从所述未指派节点组中确定具有使所述第一存储器量的使用最大化的所述估计存储器量的第一未指派节点;以及将由所述第一未指派节点表示的操作指派给所述特定流。
[0016]
这些和其它方面的其它实施方式包括被配置成执行被编码在计算机存储设备(其可以是或者可以不是非暂时性存储设备)上的方法的动作的对应系统、装置和计算机程序。
[0017]
本说明书中描述的主题的特定实施例可被实现以便实现以下优点中的一个或多个。神经网络的操作(例如,用于从输入生成推理的操作)可被表示为节点和有向边的计算图。系统处理这个计算图表示以高效地执行操作。系统实现这种效率,因为计算图具有多个流。使用多个流可允许逻辑上独立的操作被重新排序或者同时执行。当系统具有降低整个计算的端到端延迟的目标时,示例系统可以重新排序逻辑上独立的操作。当系统具有实现较高吞吐量的目标时,示例系统可以同时地执行操作。与常规表示相比,可为了并行操作更容易地分割计算图。作为说明,可将计算图的子图指派给唯一设备,其中的每一个在相应子图中执行操作,以减少执行神经网络的操作所需要的总时间。
[0018]
子图被指派给的设备可以是gpu。可以将子图分割成gpu的多个流以更高效地执行子图的操作。在下面的附图和描述中阐述了本说明书的主题的一个或多个实施例的细节。主题的其它特征、方面和优点将从说明书、附图和权利要求书变得显而易见。应了解的是,各方面和实施方式可被组合,并且可在其它方面或实施方式的场境中实现在一个方面或实施方式的场境中描述的特征。
附图说明
[0019]
图1图示用于为表示为计算图的神经网络分布操作的示例计算图系统。
[0020]
图2是用于使用gpu来处理计算图的子图的示例过程的流程图。
[0021]
图3图示由gpu处理的计算图的示例子图。
[0022]
图4是用于将节点指派给流的示例过程的流程图。
[0023]
在各个附图中相似的附图标记和名称指示相似的元件。
具体实施方式
[0024]
本说明书一般地描述以分布式方式执行通过计算图表示的操作的计算图系统。
[0025]
计算图包括通过有向边连接的节点。计算图中的每个节点表示一个操作。到节点的传入边表示到节点中的输入的流,即,由节点表示的操作的输入。从节点起的传出边表示由节点表示的操作的输出的流以被用作由另一节点表示的操作的输入。因此,将图中的第一节点连接到图中的第二节点的有向边指示通过由第一节点表示的操作生成的输出被用作由第二节点表示的操作的输入。
[0026]
一般地,在计算图中沿着有向边流动的输入和输出是张量。张量是数值或其它值(例如,字符串)的多维数组,所述数值或其它值具有与数组的维度相对应的特定次序。例如,标量值是0阶张量,数值的向量是1阶张量,并且矩阵是2阶张量。
[0027]
在一些实施方式中,计算图中表示的操作是神经网络操作或针对不同种类的机器学习模型的操作。神经网络是采用一个或多个非线性单元层来针对接收到的输入预测输出
的机器学习模型。一些神经网络是除了包括输出层之外还包括一个或多个隐藏层的深度神经网络。每个隐藏层的输出被用作网络中的另一层(即,另一隐藏层、输出层或两者)的输入。网络的一些层根据相应的参数集的当前值从接收到的输入生成输出,然而网络的其它层可以不具有参数。
[0028]
例如,通过计算图表示的操作可以是神经网络计算推理即通过神经网络的层来处理输入以为该输入生成神经网络输出所必需的操作。作为另一示例,通过计算图表示的操作可以是通过执行神经网络训练程序以调整神经网络的参数的值(例如,以根据参数的初始值确定参数的训练值)来训练神经网络所必需的操作。在一些情况下,例如,在神经网络的训练期间,通过计算图表示的操作可包括由神经网络的多个副本执行的操作。
[0029]
作为说明,从前一层接收输入的神经网络层可使用参数矩阵来执行参数矩阵与输入之间的矩阵乘法。在一些情况下,可以将这种矩阵乘法表示为计算图中的多个节点。例如,矩阵乘法可被划分成多个乘法和加法运算,并且每个运算可由计算图中的不同节点来表示。由每个节点表示的操作可生成相应的输出,所述输出在有向边上流向后续节点。在由最终节点表示的操作生成矩阵乘法的结果之后,该结果在有向边上流向另一节点。该结果相当于执行矩阵乘法的神经网络层的输出。
[0030]
在一些其它情况下,矩阵乘法被表示为图中的一个节点。由节点表示的操作可接收第一有向边上的输入张量和第二有向边上的权重张量(例如,参数矩阵)作为输入。在一些实施方式中,权重张量与模型的5共享持久状态相关联。节点可处理例如执行输入和权重张量的矩阵乘法,以在第三有向边上输出相当于神经网络层的输出的输出张量。
[0031]
可以由计算图中的节点表示的其它神经网络操作包括其它数学操作,例如,减法、除法和梯度计算;数组运算,例如,级联(concatenate)、0拼接(splice)、分割(split)或排序(rank);以及神经网络构造块操作,例如,softmax、sigmoid、整流线性单元(relu)或卷积。
[0032]
将神经网络表示为计算图提供一种灵活和粒状方式来高效地实现神经网络,特别是如果神经网络的操作跨越具有不同的硬件简档的多5个设备分布的话。
[0033]
图1图示用于为表示为计算图的神经网络分布操作的示例计算图系统100。系统100是作为计算机程序实现在一个或多个位置中的一个或多个计算机上的系统的示例,其中可实现在下面描述的系统、组件0和技术。
[0034]
客户端102的用户可请求对表示神经网络的计算图执行动作。例如,客户端可向会话管理器注册图,将数据输入馈送到图中,或者评估图的输出中的一个或多个。客户端102可以是在计算机上运行的应5用。
[0035]
作为请求的一部分,客户端102向系统100提供识别计算图的数据并且指定要对计算图执行的动作的类型。
[0036]
0例如,请求可识别表示针对特定神经网络的推理的计算图并且可识别应在其上执行推理的输入。
[0037]
作为另一示例,请求可识别表示针对特定神经网络的训练过程的计算图并且可识别应在其上执行训练的输入,诸如训练数据。在此示例中,当接收到要处理表示训练程序的计算图的请求时,系统100可例如使用常规反向传播或其它神经网络训练技术来确定用于计算图的一个或多个边的参数的修改值。系统100可将已修改的参数存储在设备的存储器
中,并且执行器106可在系统100处检索和存储已修改的权重的地址。基于来自客户端102的对于需要已修改的权重的推理、训练或其它操作的进一步请求,系统100可使用地址来访问已修改的权重。
[0038]
在一些情况下,请求可以指定应该响应于请求而传送的响应。例如,对于神经网络训练请求,客户端102可请求所请求的神经网络训练操作已完成的指示,以及可选地,请求神经网络的参数的训练值或训练值可由客户端102访问的存储器位置的指示。作为另一示例,对于神经网络推理请求,客户端102可请求表示来自计算图的一个或多个特定节点的推理操作的输出值。
[0039]
系统100执行操作以通过跨越多个设备116-122分割通过计算图表示的操作来生成特定输出。系统100通过数据通信网络114(例如,局域网(lan)或广域网(wan))分割对多个设备116-122的操作。设备116-122执行操作,并且如果适用,则将相应的输出或指示返回给系统100,所述系统100可将所请求的输出或指示返回给客户端102。
[0040]
执行神经网络操作的任何设备(例如,设备116-122)可包括用于存储指令和数据的存储器(例如,随机存取存储器(ram))以及用于执行存储的指令的处理器。一般地,每个设备是独立于其它设备执行操作的硬件资源。例如,每个设备可具有它自己的处理单元。设备可以是图形处理单元(gpu)、中央处理单元(cpu)或其它加速器。作为说明,一个机器可托管一个或多个设备,例如,多个cpu和gpu。
[0041]
每个设备也可具有相应的计算能力。也就是说,设备可具有不同的存储器量、处理速度或其它架构特性。因此,一些设备可执行其它设备不能执行的操作。例如,一些操作需要仅特定设备具有的一定的存储器量,或者一些设备被配置成仅执行特定类型的操作,例如,推理操作。
[0042]
系统100中的会话管理器104接收来自客户端102的启动执行计算图的操作的会话的请求。会话管理器104管理可执行计算图的操作的设备的集合,例如,设备116-122,并且可给布放器108提供可用于执行操作的设备的集合。
[0043]
对于要在计算图表中执行的每个操作,布放器108确定执行该操作的相应的目标设备,例如,设备116,并且在一些实施方式中,确定相应的目标设备执行操作的时间。布放器108通过在给定输入数据的大小的情况下知道操作在每个可用设备上将花费多长时间来执行最佳设备指派。布放器108使用测量或预测性能模型来获得处理时间的估计。可并行地执行一些操作,然而其它操作需要在计算图中完成在先操作,例如,其它操作处理在先操作的输出作为输入。
[0044]
在设备执行由布放器108分配的操作以生成输出之后,执行器106可检索输出。执行器106可生成对请求的适当响应,例如,处理已完成的输出或指示。然后,执行器106可将响应返回给客户端102。尽管图1图示一个执行器106,然而在一个实施方式中,每设备有一个执行器。当操作变得可运行(即其所有输入已被计算)时,这个执行器向设备发出操作。此实施方式也具有图管理器,所述图管理器通过调用布放器108来分割图以在多个设备上运行并且创建必要的执行器。
[0045]
会话管理器104也向执行器106提供要在计算图中执行的操作集合。执行器106从与操作的图执行有关的设备116-122中周期性地检索运行时间统计量。执行器106将运行时间统计量提供给布放器108,所述布放器108可重新优化进一步操作的布放和调度。
[0046]
图2是用于使用gpu来处理计算图的子图的示例过程200的流程图。为了方便,过程200将被描述为由位于一个或多个位置中的一个或多个计算机的系统执行。例如,适当地编程的计算图系统(例如,图1的计算图系统100)可执行过程200。
[0047]
系统接收来自客户端的处理计算图的请求(步骤202)。例如,请求可以是对指定的输入执行通过计算图表示的神经网络推理的请求、对指定的训练数据集合执行通过计算图表示的神经网络训练操作的请求或执行通过计算图表示的其它神经网络操作的请求,如上面参考图1所描述的。
[0048]
在一些情况下,计算图与来自客户端的请求一起被发送。在其它情况下,请求识别计算图并且系统从存储器中检索表示所识别的图的数据。
[0049]
系统可将计算图分割成多个子图。在一些实施方式中,子图由发送请求的客户端指定,并且系统根据规范分割计算图。在一些其它实施方式中,系统分割计算图,使得每个子图与其它子图相比需要类似的资源量用于执行操作。
[0050]
系统可例如使用图1的布放器108来将每个子图指派给可用设备。
[0051]
系统从已分割的计算图获得表示计算图的特定子图的数据(步骤204)。可从系统的数据库或存储器获得数据。作为说明,特定子图的操作表示部分推理或训练计算。
[0052]
系统确定子图被指派给的设备是具有多个流的图形处理单元或其它硬件加速器设备(步骤206)。作为说明,系统可通过从管理要指派给计算图的设备的资源管理器请求设备的类型来评估设备是否是具有多个流的gpu。每个流是按次序处理其操作的独立硬件队列。
[0053]
系统生成当由设备执行时使该设备执行特定操作的指令(步骤208)。特别地,指令使设备将由子图中的每个节点表示的操作指派给设备的相应流。
[0054]
示例系统可以以特定方式将一些硬件加速器的计算指派给流(例如如果一个操作在流a上执行,则稍后的相关操作也必须在流a上执行)。例如,第一操作可以是有状态的并在流a上执行。通过执行,第一操作可以以在第二操作执行之前必须发生的方式改变硬件的内部状态。在第一操作完成之后,第二操作然后可以在流a上执行。
[0055]
在一些实施方式中,两个内部硬件资源不能被同时地使用并且因此需要被串行化。
[0056]
一般地,设备将不依赖于彼此的操作指派给不同的流。通过将不依赖于彼此的操作指派给不同的流,硬件不需要知道操作将花费多长时间并且可从许多可用操作中选取以执行准备好在没有昂贵的主机干预的情况下执行的第一操作。
[0057]
指令也使设备根据指派执行由子图中的节点表示的操作。当操作被指派给特定流时,这些操作被排队。设备可以先进先出(fifo)方式执行操作。因此,如果设备仅具有一个流,则指派给设备的操作被串行地执行。如果设备具有多个流,则不同流中的操作可被并行地执行并且相对于彼此重新排序,同时给定流中的操作被串行地执行。使用多个流来执行操作减少执行子图的操作的总时间。在下面参考图3和图4进一步对此进行描述。
[0058]
系统将指令和数据提供给设备(步骤210)。在一些实施方式中,系统向设备发送启动操作的请求。设备接收请求并且作为响应,执行从系统接收到的指令。例如,设备可以接收模型输入,并且根据由子图中的节点表示的操作来处理该模型输入。
[0059]
图3图示由加速器302处理的计算图的示例子图316。子图316具有节点308-314,其
中的每一个表示要由加速器302执行的操作。计算图系统(例如,图1的系统100)将子图316指派给加速器302。
[0060]
加速器302具有两个流304和306。这些流共享加速器302的利用。在gpu中,流可以是对称的,意味着可对任何流执行所有操作。这种对称性可能不适用于所有加速器设备。例如,在特定加速器设备上必须使用某些流来执行在主机与设备存储器之间复制数据的操作。
[0061]
计算图系统可分析子图316以确定子图316如何被指派给多个流304和306。在一些实施方式中,系统生成使加速器302以使有向边连接到不同流的次数最小化的方式指派子图316的节点的指令。在流之间实施依赖性可以有性能成本。排序指令具有某种开销成本。每种排序依赖性减少可被设备利用的可能的执行排序的数目,从而降低调度灵活性。每当从第一流起的有向边连接到第二流时,第二流等待对从第一流到第二流的有向边的操作以完成处理。等待可使第二流保持空闲,这使gpu被无效率地利用。
[0062]
在一些实施方式中,系统生成使加速器302基于加速器302的特性指派子图316的节点的指令。例如,加速器302具有固定数目的流,即流304和306。系统可指派节点,所以每个流将被加速器302类似地使用。对于作为gpu的加速器,所有流共享单个大线程池。
[0063]
一些流也执行其它流不执行的特定操作。例如,流306可执行直接存储器访问(dma)操作,然而流304不执行dma操作。因此,系统可分析每个节点以确定由节点表示的操作的类型,并且系统可将该节点指派给能够执行该类型操作的流。在gpu中,主要拥塞资源是在主机与设备存储器之间复制数据的dma引擎。dma引擎可被任何流使用。如果一个流正在执行dma操作,则该流不能同时地执行计算。示例系统因此确保至少一个其它流有某个计算工作要同时执行。系统可分析子图来识别并因此生成使管理指派操作的软件模块或驱动器通过以下两条通用规则来指派节点的指令。首先,系统设法将排列在链结构中的节点指派给相同流。链结构中的节点是通过遵循从节点到节点的一个有向边而彼此连接的节点。因此,链中的节点在计算自己的操作之前必须等待链中的先前节点处的操作完成计算。指派节点的链不总是可能的,因为在图中发生分支和合并,例如来自共享输入变量或公共子表达式。
[0064]
其次,系统可选择生成使加速器302将各自从一个节点接收输入的多个节点指派给唯一流的指令。也就是说,如果第一节点具有到多个不同节点的多个输出,系统将不同节点中的每一个指派给唯一流。不同节点中的每一个均对其它不同节点中的任一个具有数据依赖性,并且因此,当对不相交流进行操作时改进效率。
[0065]
作为说明,加速器302接收子图316。由系统接收到的指令使加速器302将初始节点308指派给第一流306。初始节点308具有两个输出—到节点310的一个有向边和到节点314的一个有向边。因此,使用第二规则,指令使加速器302将节点310和314指派给不同流。节点312也仅接收节点310的输出作为输入。因此,使用第一规则,系统像节点310一样将节点312指派给相同流,即流304。
[0066]
如上所述,流是按次序执行操作的硬件队列。因此,加速器302将节点指派给流的次序是重要的。加速器302按照子图中的数据流的方向的次序将节点指派给流。也就是说,加速器302识别子图的一个或多个初始节点并且指派所述一个或多个初始节点。然后,加速器302遵循作为一个或多个初始节点的输出的有向边以识别后续节点,并且加速器302将这
些后续节点指派给相应流。加速器302继续节点的指派直到子图中的每个节点被指派为止。如上所述,作为按照此次序指派节点的结果,也将按照操作被指派的次序执行给定流内的操作。当在不同流上生成操作a的输入时,有必要确保在操作a被执行之前它们已全部被计算。在操作a被指派给的流上的执行应该被停止,直到操作a的所有输入已被计算为止。精确的停止机制是设备特定的。对于gpu设备,可为输入流中的每一个创建一个事件并且可将指令添加到每个流以发信号通知该事件。对于每个输入,也可将指令添加到指派了a的流以让操作等待相关事件以便执行。在在与操作a相同的流上计算用于操作a的输入中的一个或多个的情况下,可安全地删除数据流依赖性指令,从而导致更好的性能。在给定流内,由指派给给定流的节点表示的操作将已经被计算或者调度为在加速器302执行由一个或多个其它节点表示的操作时被计算,所述操作生成被由指派给给定流的一个或多个其它节点表示的操作用作输入的输出。
[0067]
继续上面的说明,因为数据从节点310流向节点312,所以流304被指派了节点310并且然后指派了节点312。当在流中执行操作时,加速器302首先执行由节点310表示的操作,然后执行由节点312表示的操作。
[0068]
在最终节点(即,节点312和314)执行操作之后,加速器302将节点的输出或操作已完成的指示返回给系统。在示例系统中,存在将计算结果从加速器302的存储器往回复制到主机存储器中的特殊“发送”节点,在所述主机存储器中它可被接收节点交给不同设备或者在远程过程调用(rpc)响应中返回给客户端。必要时,系统然后可将输出或指示返回给客户端。
[0069]
将在下面参考图4进一步描述将节点指派给流的另一实施方式。
[0070]
图4是用于将子图指派给设备的示例过程400的流程图。为了方便,过程400将被描述为由系统(例如,gpu)执行。例如,gpu可接收由计算图系统(例如,图1的计算图系统100)生成的指令,所述指令当被执行时,使gpu执行过程400。
[0071]
系统可基于由节点或由先前指派的节点消耗的存储器资源量将特定节点指派给流。例如,系统可计算到和来自子图的每个节点的每个有向边上的张量的尺寸。张量的尺寸指示将由设备执行操作所消耗的存储器的大小。系统可能需要计算张量的所有尺寸以确定该大小。系统然后可将具有消耗特定大小的存储器的张量的特定节点指派给具有该特定大小的存储器的设备。
[0072]
特别地,当设备执行操作时,软件驱动器或执行器分配存储器来存储任何输入以及作为操作的结果而计算的任何输出。因为设备上的存储器量是有限的,所以当不再使用存储器时,设备将释放存储器。
[0073]
作为说明,系统确定由节点表示的操作是否已在特定流处结束(步骤402)。例如,系统可周期性地轮询流以确定特定流中的操作是否已结束。流可以支持允许主机确定执行已通过流中的操作的列表进展多远的动作。在一些实施方式中,事件或标记可发信号通知执行已进展多远。当发生事件时,该事件可被添加到流中的特殊硬件操作队列。主机可轮询此队列以确定已经发生了哪些操作。其它流实施方式可以仅允许主机确定所有排队的操作何时完成。可替选地或附加地,硬件可在流到达某个点时提供中断或回调。
[0074]
当操作已结束后,系统可确定用于操作的输入的存储器可被释放以用在其它操作中。系统不释放用于操作的输出的存储器,因为输出可被用在后续节点中。
[0075]
因此,系统确定将被释放的消耗的存储器量(步骤404)。系统可向软件驱动器或执行器发送请求以识别将被释放的存储器的大小。
[0076]
在一些实施方式中,示例系统允许使用远程直接存储器访问(rdma)网络接口,远程机器可使用所述rdma网络接口来在任意时间点将数据直接转移到硬件加速器的存储器中。这个存储器不得被在任何流上运行的任何其它操作使用。示例系统可能不需要精确地知道每个流上的操作已进展多远。然而,系统应该跟踪已知不被任何流使用的存储器。这个空闲存储器然后可被用于rdma。
[0077]
系统针对未指派节点组中的每一个未指派节点来确定由未指派节点消耗的相应估计存储器量(步骤406)。未指派节点可包括从其操作已完成的节点接收输入的节点。未指派节点也可包括独立于其操作已完成但是仍然需要由加速器处理的节点的节点。如上所述,可通过评估相应张量到未指派节点的尺寸来确定估计存储器量。
[0078]
系统从未指派节点的组中确定表示操作的第一未指派节点,所述操作当由加速器在流上执行时,使将被释放的存储器量的使用最大化(步骤408)。如果由未指派节点表示的操作需要比将被释放的存储器量更多的存储器来执行,则未指派节点将不会被指派给流。如果第一操作和第二操作需要小于或者等于将被释放的存储器量的相应的估计存储器量,则系统选择使将被释放的存储器量的使用最大化的操作。换句话说,在这种情况下,系统将表示所选择的操作的节点确定为第一未指派节点。示例系统不在流上使操作入队,直到它可确定加速器存储器的哪些区域将用于保持操作的临时工作空间和输出为止。在存储器稀缺的情况下,示例系统可以选择使需要较少的存储器量的操作入队或者优先地使将消耗大输入张量的操作入队,从而允许它们被解除分配。
[0079]
系统将由第一未指派节点表示的操作指派给特定流(步骤410)。系统然后可使特定流执行操作,并且系统可继续像上面参考图2-3所描述的那样操作。
[0080]
本说明书中描述的主题和功能操作的实施例可用数字电子电路、用有形地具体实现的计算机软件或固件、用计算机硬件(包括本说明书中公开的结构及其结构等同物)或者用它们中的一个或多个的组合加以实现。本说明书中描述的主题的实施例可作为一个或多个计算机程序(即,在有形非暂时性程序载体上编码以用于由数据处理装置执行或者控制数据处理装置的操作的计算机程序指令的一个或多个模块)被实现。可替选地或此外,程序指令可被编码在人工生成的传播信号上,例如,机器生成的电、光学或电磁信号,所述信号被生成来对信息进行编码以便传输到适合的接收器装置以供由数据执行装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储设备,或它们中的一个或多个的组合。然而,计算机存储介质不是传播信号。
[0081]
术语“数据处理装置”包含用于处理数据的所有种类的装置、设备和机器,作为示例包括可编程处理器、计算机或多个处理器或计算机。该装置可包括专用逻辑电路,例如,fpga(现场可编程门阵列)或asic(专用集成电路)。该装置除了包括硬件之外还可包括为所述计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统或它们中的一个或多个的组合的代码。
[0082]
计算机程序(其也可以被称为或者描述为程序、软件、软件应用、模块、软件模块、脚本或代码)可用任何形式的编程语言编写,包括编译或解释语言或声明性或过程语言,并且它可被以任何形式部署,包括作为独立程序或者作为模块、组件、子例程或适合于在计算
环境中使用的其它单元。计算机程序可以但不必对应于文件系统中的文件。可在保持其它程序或数据(例如,存储在标记语言文档中的一个或多个脚本)的文件的一部分中、在专用于所述程序的单个文件中或者在多个协调文件(例如,存储一个或多个模块、子程序或代码的部分的文件)中存储程序。可将计算机程序部署成在一个计算机上或者在位于一个站点处或跨越多个站点分布并通过通信网络互连的多个计算机上执行。
[0083]
如本说明书中所使用的,“引擎”或“软件引擎”指代提供与输入不同的输出的软件实现的输入/输出系统。引擎可以是功能性的编码块,诸如库、平台、软件开发工具包(“sdk”)或对象。可将每个引擎实现在包括一个或多个处理器和计算机可读介质的任何适当类型的计算设备上,例如,服务器、移动电话、平板计算机、笔记本计算机、音乐播放器、电子书阅读器、膝上型或台式计算机、pda、智能电话或其它固定或便携式设备。附加地,可以将这些引擎中的两个或更多个实现在相同的计算设备上或者在不同的计算设备上。
[0084]
本说明书中描述的过程和逻辑流程可通过一个或多个可编程计算机执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来执行功能而被执行。过程和逻辑流程也可由专用逻辑电路执行,并且装置也可作为专用逻辑电路被实现,所述专用逻辑例如为fpga(现场可编程门阵列)或asic(专用集成电路)。
[0085]
作为示例,适合于执行计算机程序的计算机可基于通用微处理器或专用微处理器或两者,或任何其它种类的中央处理单元。一般地,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的必要元件是用于执行或实行指令的中央处理单元以及用于存储指令和数据的一个或多个存储设备。一般地,计算机也将包括或者在操作上耦合以从用于存储数据的一个或多个海量存储设备(例如,磁盘、磁光盘或光盘)接收数据,或者将数据转移到该海量存储设备,或者兼而有之。然而,计算机不必具有此类设备。此外,可将计算机嵌入在另一设备中,所述另一设备例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏机、全球定位系统(gps)接收器或便携式存储设备(例如,通用串行总线(usb)闪存驱动器)等等。
[0086]
适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,作为示例包括半导体存储器设备,例如,eprom、eeprom和闪速存储器设备;磁盘,例如,内部硬盘或可移动盘;磁光盘;以及cd-rom和dvd-rom盘。处理器和存储器可由专用逻辑电路补充,或者并入专用逻辑电路。
[0087]
为了提供与用户的交互,可在计算机上实现本说明书中描述的主题的实施例,所述计算机具有用于向用户显示信息的显示设备,例如crt(阴极射线管)监视器、lcd(液晶显示器)监视器或oled显示器,以及用于向该计算机提供输入的输入设备,例如键盘、鼠标或存在敏感显示器或其它表面。其它种类的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以任何形式接收来自用户的输入,包括声、语音或触觉输入。此外,计算机可通过向由用户使用的设备发送资源并且从由用户使用的设备接收资源来与用户交互;例如,通过响应于从web浏览器接收到的请求而向用户的客户端设备上的web浏览器发送web页面。
[0088]
可在计算系统中实现本说明书中描述的主题的实施例,所述计算系统包括后端组件(例如,作为数据服务器),或者包括中间件组件(例如,应用服务器),或者包括前端组件(例如,具有用户可用来与本说明书中描述的主题的实施方式交互的图形用户界面或web浏
览器的客户端计算机),或者包括一个或多个此类后端、中间件或前端组件的任何组合。系统的组件可通过任何形式或介质的数字数据通信(例如,通信网络)来互连。通信网络的示例包括局域网(“lan”)和广域网(“wan”),例如,互联网。
[0089]
计算系统可包括客户端和服务器。客户端和服务器一般地彼此远离并且通常通过通信网络交互。客户端和服务器之间的关系借助于在相应计算机上运行并且彼此具有客户端-服务器关系的计算机程序而发生。
[0090]
虽然本说明书包含许多具体实施方式细节,但是这些不应该被解释为对任何发明的或可以要求保护什么的范围构成限制,而是相反被解释为可能特定于特定发明的特定实施例的特征的描述。也可在单个实施例中相结合地实现在本说明书中在单独的实施例的场境中描述的某些特征。相反地,也可在多个实施例中单独地或者按照任何适合的子组合实现在单个实施例的场境中描述的各种特征。此外,尽管这些特征在上面可以被描述为按照某些组合起作用并且因此甚至最初要求保护,然而来自要求保护的组合的一个或多个特征可在一些情况下被从组合中删去,并且所要求保护的组合可以针对子组合或子组合的变化。
[0091]
类似地,虽然在附图中按照特定次序描绘操作,但是这不应该被理解为要求按照所示特定次序或按照顺序次序执行此类操作,或者要求执行所有图示的操作以实现所希望的结果。在某些情况下,多任务处理和并行处理可以是有利的。此外,上述的实施例中的各种系统模块和组件的分离不应该被理解为在所有实施例中要求这种分离,并且应该理解的是,所描述的程序组件和系统一般地可被一起集成在单个软件产品中或者封装到多个软件产品中。
[0092]
已经对主题的特定实施例进行了描述。其它实施例在以下权利要求的范围内。例如,权利要求中记载的动作可被以不同次序执行并仍然实现所希望的结果。作为一个示例,附图中描绘的过程不一定要求所示特定次序或顺序次序,以实现所希望的结果。在某些实施方式中,多任务处理和并行处理可以是有利的。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1