内存资源静态部署系统及方法与流程

文档序号:20263965发布日期:2020-04-03 18:08阅读:244来源:国知局
内存资源静态部署系统及方法与流程

本公开涉及一种数据处理装置的内存资源静态部署系统及其方法,更具体地说,本公开涉及一种用于静态分布流式数据处理装置的内存资源静态部署系统及其方法。



背景技术:

随着机器学习的发展以及人工神经网络的研究的逐步深入,深度学习的概念得到广泛的关注和应用。由于深度学习所进行的数据处理多为执行大量的重复类型的计算,因此,人们多采用协处理器,诸如gpu、tpu与cpu结合来进行这种深度学习的数据处理。

尽管现有的各种并行处理方式使得数据处理速度提升了,但数据在设备之间搬运的速度并没有相对于传统的cpu集群有质的提升,譬如机器内部通信通过pcie完成,机器之间即使采用最快的无限带宽互联,其带宽也要比gpu核(cores)访问片上内存(devicememory)慢上一到两个数量级。一个小批次的数据在gpu设备上处理的时间可能是数十毫秒,但这批数据从设备外部拷贝到设备上也要花上差不多量级的时间,这就意味着数据的搬运(datamovement)在分布式深度学习架构中在提高架构处理效率时必须得到足够的重视。因此,使得小批次的数据的移动尽可能保持在gpu上将会极大减少设备端与外部的数据通讯开销。

现有技术中无论是采用数据并行还是采用模型并行的深度学习架构都是采用中心调度,每个线程都采用调度器来进行内存的动态分配。但是,由于数据并行或模型并行过程中存在彼此之间的大量参数交互,因此,由于各个线程的调度器之间是独立运行,因此彼此之间无法获知对方的运行状态,这会导致某些线程在运行过程中会出现内存资源不够的情况。如果要是各个独立线程之间进行彼此状态的交互,这将增加各个线程控制的复杂性,由此会导致非常高数量级的交互开销,这会严重影响模型的学习效率。

为此,人们期望提供一种新的数据处理系统,该系统能够实现静态布置,使得各个操作单元预先布置完成而无需进行动态调度,减少在运行时的调度开销。而静态布置架构下,需要预先为所有静态布置的执行单元预先分配内存资源,因此,如何在静态分布式环境下合理地为各个执行单元预先分配内存资源,以便在内存资源量有限的情况下,保证数据处理时间效率的前提下提高内存使用效率成为一个所需面对的难题。



技术实现要素:

本公开的目的在于提供一种解决至少上述问题之一,具体而言,本公开提供一种解决方案,既能够使得作业数据批次按照最快的时间间隔输入,也确保内存资源不会崩溃的情况下被充分利用。根据本公开的一个方面,提供了一种内存资源静态部署系统,包括:内存资源获取组件,用于获取计算系统中的多个计算设备中每一个设备的内存资源量;生命周期采集组件,基于将要部署在多个计算设备上的任务关系拓扑图的每个任务节点所属的所有拓扑路径,采集每个任务节点的每个逻辑输出缓存的从被写入数据开始到该数据可以被覆写为止的生命周期d(r);最小数据流水间隔搜索组件,在预定搜索范围内搜索满足如下公式的最小数据流水间隔iimin:

其中,ii为流水间隔,r是部署在每个计算设备上的所有任务节点的所有逻辑输出缓存编号,d(r)是每个逻辑输出缓存的所采集的生命周期,m(z)是计算设备编号为z的计算设备内存总容量,m(r)是每份内存池的固定容量;以及

内存池数量分配组件,用于将每个逻辑输出缓存的所采集的生命周期除以最小数据流水间隔iimin的商向上取整获得一个整数,从而为对应的逻辑输出缓存分配所述整数份的内存池。

根据本公开的内存资源静态部署系统,其中所述预定搜索范围在0和最大浮点运算值之间。

根据本公开的内存资源静态部署系统,其中所述生命周期采集组件基于每个任务节点的操作任务获取每个任务节点的操作时间,并基于任务节点所处的下游最长消费路径所包含的所有任务节点的操作时间求和计算该任务节点的生命周期。

根据本公开的内存资源静态部署系统,其中所述生命周期采集组件获取所采集的所有任务节点的生命周期中的最大生命周期,并且所述预定搜索范围在0和最大生命周期之间。

根据本公开的内存资源静态部署系统,其中所述生命周期采集组件基于每个任务节点的操作任务获取每个任务节点的操作时间,并将所有任务节点的操作时间中的最大操作时间作为所述计算系统的系统瓶颈,并且所述预定搜索范围在所述系统瓶颈和最大生命周期之间。

根据本公开的另一个方面,提供了一种内存资源静态部署方法,包括:内存资源获取步骤,用于获取计算系统中的多个计算设备中每一个设备的内存资源量;生命周期采集步骤,基于将要部署在多个计算设备上的任务关系拓扑图的每个任务节点所属的所有拓扑路径,采集每个任务节点的每个逻辑输出缓存的从被写入数据开始到该数据可以被覆写为止的生命周期d(r);最小数据流水间隔搜索步骤,在预定搜索范围内搜索满足如下公式的最小数据流水间隔iimin:

其中,ii为流水间隔,r是部署在每个计算设备上的所有任务节点的所有逻辑输出缓存编号,d(r)是每个逻辑输出缓存的所采集的生命周期,m(z)是计算设备编号为z的计算设备内存总容量,m(r)是每份内存池的固定容量;以及

内存池数量分配步骤,用于将每个逻辑输出缓存的所采集的生命周期除以最小数据流水间隔iimin的商向上取整获得一个整数,从而为对应的逻辑输出缓存分配所述整数份的内存池。

根据本公开的内存资源静态部署方法,其中所述预定搜索范围在0和最大浮点运算值之间。

根据本公开的内存资源静态部署方法,其中所述生命周期采集步骤基于每个任务节点的操作任务获取每个任务节点的操作时间,并基于任务节点所处的下游最长消费路径所包含的所有任务节点的操作时间求和计算该任务节点的生命周期。

根据本公开的内存资源静态部署方法,其中所述生命周期采集步骤获取所采集的所有任务节点的生命周期中的最大生命周期,并且所述预定搜索范围在0和最大生命周期之间。

根据本公开的内存资源静态部署方法,其中所述生命周期采集步骤基于每个任务节点的操作任务获取每个任务节点的操作时间,并将所有任务节点的操作时间中的最大操作时间作为所述计算系统的系统瓶颈,并且所述预定搜索范围在所述系统瓶颈和最大生命周期之间。

由于采用了根据本公开的内存资源静态部署系统,基于该分布系统形成的任务拓扑图形成的执行体的内存是基于计算设备的全局内存资源以及部署在该计算设备上的计算任务进行对应分布,从而完全消除了内存崩溃(outofmemory)的风险。而且这种分布系统考虑到整个计算任务的流水间隔,实现了数据流水间隔的最小化,因此,在保证整个计算系统的内存资源安全的情况下,实现了计算效率的最大化。

本公开的其它优点、目标和特征的一部分将通过下面的说明得以体现,另一部分将通过对本公开的研究和实践而为本领域的技术人员所理解。

附图说明

图1所示的是现有静态分布式数据处理系统的执行体网络组件的原理示意图。

图2所示的是根据本公开的用于静态分布式计算环境的内存分配系统200的原理示意图。

图3所示的是一个局部有向无环图示意图。

具体实施方式

下面结合实施例和附图对本公开做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,在下文中,两个可能设备之一可以被称为第一执行体也可以被称为第二执行体,类似地,两个可能设备的另一个可以被称为第二执行体也可以被称为第一执行体。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。

图1所示的是现有静态分布式数据处理系统的执行体网络组件的原理示意图。如图1所示,大虚线框代表一个执行体。在图1所示的执行体网络组件中,为了图示方便,仅仅显示了五个执行体。实际上,对应于静态分布式数据处理系统的任务拓扑图,神经网络有多少任务节点,在执行体网络组件中就存在多少执行体,因此在图1的左下侧采用连续的小实心方块来代表未示出的其他执行体。图1原理性地显示了构成本公开的每个执行体的构成,其包含有消息仓、有限状态机、处理组件以及输出数据缓存(即本地内存)。

从图1中可以看出,每个执行体似乎都包含有一个输入数据缓存,但是采用了虚线标识。实际上输入数据缓存是一个想象的构成部件,这将在后面详细解释。处于数据处理路径中的每个执行体,例如图1中的第一执行体,基于任务拓扑图的神经网络中的一个节点建立,并且基于完全节点属性,形成该第一执行体与其上下游执行体的拓扑关系、消息仓、有限状态机以及处理方式(处理组件)以及生成数据的缓存位置(输出数据缓存)。具体而言,第一执行体在执行数据处理时,例如其任务需要两个输入数据,即其上游的第二执行体和第四执行体的输出数据。当第二执行体生成将要输出到第一执行体的数据,例如生成第二数据时,第二执行体将向第一执行体发出数据准备好的消息到第一执行体的消息仓,告知第一执行体第二数据已经处于第二执行体的输出数据缓存中并且处于可获取的状态,从而第一执行体可以随时执行该第二数据的读取,此时第二数据将一直处于等待第一执行体读取状态。第一执行体的有限状态机在消息仓获得第二执行体的消息后修改其状态。同样,当第四执行体生成将要输出到第一执行体的数据,例如生成第四数据时,第四执行体将向第一执行体发出数据准备好的消息到第一执行体的消息仓,告知第一执行体第四数据已经处于第四执行体的输出数据缓存中并且处于可获取的状态,从而第一执行体可以随时执行该第四数据的读取,此时第四数据将一直处于等待第一执行体读取状态。第一执行体的有限状态机在消息仓获得第四执行体的消息后修改其状态。同样,如果第一执行体的处理组件在上一次执行完运算任务之后产生了数据,例如第一数据,并缓存在其输出数据缓存中,并向第一执行体的下游执行体,例如第三执行体以及第五执行体发出可以读取第一数据的消息。

当第三执行体和第五执行体在读取第一数据并使用完成之后,会分别向第一执行体反馈消息,告知第一执行体使用完该第一数据,因此,第一执行体的输出数据缓存处于空置状态。此时第一执行体的有限状态机也会修改其状态。

这样,当有限状态机的状态变化达到预定的状态时,例如第一执行体的执行运算所需的输入数据(例如第二数据和第四数据)都处于可获取状态以及其输出数据缓存处于空置状态时,则告知处理组件读取第二执行体的输出数据缓存中的第二数据以及第四执行体的输出数据缓存中的第四数据,并执行指定的运算任务,从而生成该执行体的输出数据,例如新的第一数据,并存储在第一执行体的输出数据缓存中。

同样,当第一执行体完成指定的运算任务之后,有限状态机回归到其初始状态,等待下一次状态改变循环,同时第一执行体向第二执行体反馈对第二数据使用完成的消息到第二执行体的消息仓以及向第四执行体反馈对第四数据使用完成的消息到第四执行体的消息仓,以及向其下游执行体,例如第三执行体以及第五执行体,发送已经生成第一数据的消息,告知第三执行体以及第五执行体,第一数据已经处于可以被读取的状态。

当第二执行体获得第一执行体使用完第二数据的消息后,使得第二执行体的输出数据缓存处于空置状态。同样,第四执行体获得第一执行体使用完第四数据的消息后,使得第四执行体的输出数据缓存处于空置状态。

第一执行体的上述执行任务的过程在其他执行体中同样发生。因此,在每个执行体中的有限状态机的控制下,基于上游执行体的输出结果,循环处理同类任务。从而每个执行体犹如一条数据处理路径上的固定任务的岗位人员,从而形成数据的流水线处理,不需要任何其他的外在指令。

此外,图1中每个执行体显示都包含有一个输入数据缓存,实际上是不包含的,因为,每个执行体并不需要任何缓存来存储将被使用的数据,而是仅仅获取所需使用的数据处于能够被读取的状态即可。因此,每个执行体所要使用的数据在执行体未处于具体执行的状态时,数据依然保存在其上游执行体的输出数据缓存中。因此,为了形象显示,每个执行体中的输入数据缓存采用虚线表示,其实际上并不真的存在于执行体中。或者说,上游执行体的输出数据缓存就是下游执行体的虚拟输入数据缓存。因此,在图1中,对输入数据缓存采用了虚线标识。尽管上面参照图1仅仅描述了执行体具有一个输出数据缓存,但是为了提高整个数据处理系统的处理效率,如图1所示,每个执行体都可以如第二执行体一样具有两个输出数据缓存。每个节点的节点全部属性包含的指明节点所对应的任务所需的资源属性可以包含两个或多个输出数据缓存资源,这样所创建的每个执行体针对每个下游执行体将包含两个输出数据缓存。在每个执行体所针对的每个下游节点具有两个输出数据缓存的情况下,如图1所示,第二执行体具有两个输出数据缓存,可以分别命名为第一输出数据缓存和第二输出数据缓存。第一执行体只能交替地利用第一输出数据缓存和第二输出数据缓存中存储的输出数据。当第二执行体还没有获得第一执行体使用完第一输出数据缓存中的第二数据的消息时,第二执行体的有限状态机的状态标识显示其第二输出数据缓存依然处于空置状态,则第二执行体会继续执行对应的任务处理并将生成的另一个第二数据缓存到第二输出数据缓存中。这样在第一执行体在执行对第二输出数据缓存中的第二数据时,第一执行体也能够同时执行对应的任务操作。这样,由于配置的了两个输出数据缓存,第二执行体能够在第一执行体执行操作的同时也执行操作,消除了第一执行体的等待时间,提高了整个数据处理路径中执行体的利用率,也提高的整个数据处理路径的数据处理效率。通常,所有执行体都会分配两个输出数据缓存,或者都只分配一个输出数据缓存。在有些情况下,系统中也会根据具体情况区别对待,例如,有的执行体会有两个输出数据缓存,有的执行体只需要一个输出数据缓存,这可以最大限度地节省资源。但是,如何确定哪些执行体的针对某个下游执行体需要两个输出数据缓存或只需要一个输出数据缓存(或内存池或内存单元),这需要在整个静态分布式网络系统以及每个计算设备中进行全局考虑。

为此,本公开提供了一种针对整个静态分布式网络系统以及每个计算设备进行内存分配的系统和方法。图2所示的是根据本公开的用于静态分布式计算环境的内存分配系统200的原理示意图。如图2所示,内存分配系统200包括:内存资源获取组件210、生命周期采集组件220、最小数据流水间隔iimin搜索组件230以及内存池数量分配组件240。如图2所示,所述内存分配系统200用于静态分布式计算环境,在该静态分布式计算环境下,通常包含多台计算机,例如cpu00和cpu01的计算设备,还包括分别与cpu00相连的gpu00、gpu01以及gpu2和与cpu01相连的gpu10、gpu11以及gpu12。尽管此处仅仅显示了两个cpu和六个gpu,但是静态分布式计算环境可以包括更多的cpu,并且与每个cpu相连的gpu也可以更多或更少,这可基于实际需要来定。尽管这里仅仅采用gpu对本公开进行了描述,但是本公开也可以适于采用其他协处理器,例如加速器apu、bpu、dpu等。因此,在静态分布式计算环境,可以包括各种彼此通过网络连接设备相连的计算设备cpu以及由cpu管理的诸如gpu的协处理器的计算设备。内存分配系统200可以布置在静态分布式计算环境中的一个cpu中,例如cpu00或cpu01,或者布置在一个专用的cpu中。

如图2所示,任务拓扑图生成组件300用于将所需完成的作业分解为一系列由静态分布式计算环境中执行体来执行的任务,并在进行作业分解的同时,基于所分解的任务之间的固有关系,生成任务关系拓扑图。具体而言,就是任务拓扑图生成组件300基于作业描述组件100对作业的描述,将作业分解成为适合cpu或gpu的运算单元执行运算或其他操作的彼此之间存在相关联或不相关联的时序关系的简单任务。更具体而言,按照对作业任务要求的描述,对作业按照将要处理的过程,进行分层分解成多层神经网络结构。一个作业(job)被分解成一系列互相依赖的任务(task),这种依赖关系通常用有向无环图(directedacyclicgraph,dag)来描述,每个节点表示要执行的一个具体操作任务,节点之间的连接线表示一个数据依赖关系(生产者和消费者关系)。因此,在逐步分解作业的同时,任务拓扑图生成组件300也逐层形成任务关系拓扑图。

由于静态分布式计算环境不需要动态调度,因此,任务拓扑图生成组件300所形成任务关系拓扑图的每个任务节点都含有节点全部属性。所述节点全部属性包含了诸如指明节点所对应的任务所需的资源的“资源属性”、触发任务执行的触发条件的“条件属性”、“位置属性”(静态任务节点被布置在哪一个cpu计算设备上)、内存池位置属性(具体运算以及输出数据缓存布置在哪一个计算设备)、上下游节点关系属性(确定任务节点之间的数据生产和消费关系)等等。正是由于本公开的任务拓扑图中的每个节点包含了节点全部属性,因此其在随后创建执行体时立即自动具备了执行任务所有的资源和所有属性,处于完全配置状态,不需要再在对具体数据执行具体任务时进行诸如对环境资源进行动态分配以及动态配置触发条件等等。在任务拓扑图生成组件300所形成的初始任务关系拓扑图的每个任务节点的“资源属性”中包含初始内存池属性,其指明了分配给该任务节点的针对每个下游任务节点的输出数据缓存的内存池大小或数量。但是,由于如图1所示的数据流动的背压机制的存在,在由任务节点构成的数据处理路径中,数据的处理在一些耗时较多的节点处(瓶颈)会产生流动堵塞而导致数据处理停顿,从而使得数据处理路径的整体效率降低。

举例而言,如果图1中所示的其他执行体使用数据的时间为十毫秒,而第一执行体使用其上游数据的时间为1秒,则,在第一执行体没有执行处理的情况下,第一执行体所使用的上游执行体的输出数据缓存就不能被覆写,因此,就会在第一执行体出产生瓶颈,导致数据流动堵塞。由此导致背压向上传递,从而导致源输入执行体处无法输入下一批次的待处理数据。因此,在第一执行体所处的数据处理路径中,输入数据的数据批次的流水间隔ii不能小于第一执行体所产生的操作瓶颈。在输入的数据流水间隔ii小于某些路径的瓶颈时,会导致源节点处的内存崩溃。但是如果过于增大数据输入的流水间隔ii,将导致数据处理路径中的大多数任务节点处于空闲状态,也导致数据处理路径的整体效率降低,浪费了计算资源。另一方面,如果为了提高数据处理路径的整体效率而如图1所示那样的为每个执行体所对应的任务节点分配两个输出数据缓存,这将导致内存资源浪费,因为由于数据处理路径中的瓶颈的存在,会导致大多数输出数据缓存在至少一半时间内处于空闲状态,因此也导致了内存资源的浪费。

为此,本公开为了解决上述问题,提出了一种内存分配系统200。内存分配系统200中的内存资源获取组件210基于计算设备彼此的连接,获取被部署用来进行数据处理的静态分布式环境中的所有计算设备各自的内存资源量。具体而言,获取每个cpu的内存资源总量m(z)以及每个gpu的内存资源总量m(z),并依据用户对各个计算设备的编号,对各个计算设备的资源总量m(z)编号为m(0)、m(1)、m(2)、m(3)…m(n)。在静态分布式计算环境中,作业描述组件100会根据用户对作业的描述,给出所要处理数据片段或模型片段的最大尺寸,从而设定每个内存池或内存单元的固定大小,由此,可以在随后的内存分配过程中为每个任务节点分配一定数量份数的内存池或内存单元以满足预定的要求。在内存资源获取组件210获取所有计算设备各自的内存资源量的同时,生命周期采集组件220基于将要部署在多个计算设备上的任务关系拓扑图的每个任务节点所属的所有拓扑路径,采集每个任务节点的每个逻辑输出缓存的从被写入数据开始到该数据可以被覆写为止的生命周期。

通常每个任务节点会同时处于不同的数据处理路径中。图3所示的是一个局部有向无环图示意图。如图3所示,第一执行体a处于多个数据处理路径中,例如路径p1、p2、p3等。第一执行体a的在每条数据处理路径上都有很多下游执行体,在路径p1中,其直接下游执行体为a11。在路径p2中,执行体a直接下游执行体为a21以及a24。路径p3中,执行体a的直接下游执行体为a31。在没有其他因素影响的情况下,在路径p1中,第一执行体a的输出数据缓存从生成数据开始到其下游执行体a11使用完该数据并反馈消息到执行体a的时间基本上等于下游执行体a11执行操作的时间。类似地,在路径p2中,第一执行体a的输出数据缓存从生成数据开始到其下游执行体a24使用完该数据并反馈消息到执行体a的时间则基本上等于下游执行体a21以及、a22、a23以及a24执行操作的时间总和。同样,在路径p3中,第一执行体a的输出数据缓存从生成数据开始到其下游执行体a31使用完该数据并反馈消息到执行体a的时间基本上等于下游执行体a31执行操作的时间。通常,每个执行体的操作时间通常是基于其具体执行的任务是固定的,是一个经验值。一般下游数据处理路径中最后返回数据的执行体距离所要消费的数据的生产执行体越远,该数据所在的输出数据缓存的生命周期越长。因此,比较而言,对于第一执行体a而言,其生命周期的长度由路径p2的中的最远执行体以及其中间执行体的总的操作时间来决定。通过上述方式,生命周期采集组件220遍历每个任务节点,通过获取每个任务节点的操作时间,计算每个任务节点的输出数据缓存的生命周期,从而可以后的计算系统中所有任务节点的最大生命周期。

生命周期采集组件220在遍历每个任务节点的同时,也就获取的每个任务节点的操作时间。每个任务节点操作时间长短不同,在有些任务操作节点比较长的情况下,由于背压机制导致其不能及时执行并通知其上游任务节点或执行体已经使用完上游执行体所产生的数据,因此会增加上游执行体的输出数据缓存的生命周期,也就阻塞了该任务节点或执行体所在数据处理路径的数据处理速度。这些操作时间比较长的任务节点或执行体,在其所处的数据处理路径中成为该数据处理路径的瓶颈。在整个计算系统中,这种操作时间最长的执行体或任务节点的操作时间称为系统瓶颈,也称为系统最大瓶颈b。

由于每个任务节点对应一个执行体,因此,返回参见图1,如图1所示,第一执行体所产生的数据被存储在作为内存的输出数据缓存中。存储在第一执行体的输出数据缓存中的数据将被下游的第三执行体和第五执行体所读取使用。当输出数据缓存中的数据被第三执行体和第五执行体使用完之后,第一执行体才可以将新产生的数据再次写入其输出数据缓存中。因此,第一执行体的输出数据缓存从数据被写入到该数据可以被覆写为止的时间段就是该输出数据缓存的生命周期。在静态环境下反复执行的同样的数据处理过程中,每次该时间段都基本相同,因此该输出数据缓存的生命周期是基本固定的。需要指出的是,同一任务节点的某一个输出数据缓存会处于不同的静态数据处理路径中,因此其在不同的静态数据处理路径中被使用的时间点不同。一个输出数据缓存中的生命周期的结束点以被最后使用的静态数据处理路径的时间点作为该输出数据缓存的生命周期的结束点。由于静态分布式计算环境下,在给定的任作业描述后,分配到每个任务节点的计算任务都是已知,并且在获知计算设备的分配给该计算任务的操作速度也是已知的,因此能够通过先验知识获得每个任务节点的任何输出数据缓存中每次在输出数据被存入其中后知道被其下游节点最后消费的所需的时间间隔。也就是说,能够通过其所在的数据处理路径的整个关系,通过先验知识计算获知其生命周期。可选择地,也可以通过对所需要的处理的作业进行小批量的试处理,获得获取实际试处理情况下每个对应任务节点的每个输出数据缓存的试处理生命周期。在获取每个任务节点的生命周期的同时,获取任务拓扑图中的所有节点的输出数据缓存的生命周期中的最大生命周期。

需要指出的是,由于数据处理过程是将作业数据进行分批处理,因此,数据的输入时按照一定的时间间隔连续输入的。因此,考虑到整个静态分布式数据处理系统在处理一批数据需要一定的时间,因此,每批数据之间需要一定的流水间隔ii,该间隔就是整个数据处理系统的数据输出的流水间隔ii。通常一批数据和相邻一批数据的输入间隔是不小于整个数据处理系统中的最大瓶颈。如果小于整个数据处理系统中的最大瓶颈,则由于静态分布式环境下的流水背压机制的存在,可能会导致在拓扑任务图的源任务节点出现内存崩溃的情形,或者具有最大瓶颈的任务节点出现内存崩溃的情形。但是如果数据流水间隔ii过大,则会导致很多任务节点处于空闲状态,因此导致数据处理效率降低。为此,需要在实现充分利用内存资源量的同时,充分利用运算单元的算力。这就需要找到满足充分利用内存资源量的情形下的最小数据流水间隔iimin。为此,本公开的内存分配系统的最小数据流水间隔搜索组件230在0和最大浮点运算值之间采用二分搜索法,搜索满足不等式(1)的最小数据流水间隔ii:

其中,ii为流水间隔,r是部署在每个计算设备上的所有任务节点的所有与对应的执行体的输出数据缓存对应的逻辑输出缓存的编号,d(r)是每个逻辑输出缓存的所采集的生命周期,m(z)是计算设备编号为z的计算设备内存总容量,m(r)是每份内存池的固定容量。

不等式(1)表示,采用二分搜索法,从0到最大浮点运算值之间选择一个中间值a0作为流水间隔ii,针对计算设备m(0)、m(1)、m(2)、m(3)…m(n)中的每一个,检验其是否满足不等式(1)。如果所选择的中间值a0的流水间隔ii满足用于每个计算设备的不等式,则在0到该中间值a0之间的范围内选择另一个中间值a1来检验其是否满足不等式(1),如此反复,直到在最大生命周期到某一中间值an之间的范围内选择的中间值an-1对其中一个计算设备的不等式(1)不成立为止。然后再在中间值an-1和an之的范围内选择的中间值,依据上述二分法搜索满足针对计算设备m(0)、m(1)、m(2)、m(3)…m(n)中的每一个不等式(1)的中间值。如此反复,直到获得最小中间值amin为止,并将该最小中间值amin作为静态分布式环境下的最小数据流水间隔iimin。

或者,不等式(1)表示,采用二分搜索法,从0到最大生命周期d(r)max之间选择一个中间值a0作为流水间隔ii,针对计算设备m(0)、m(1)、m(2)、m(3)…m(n)中的每一个,检验其是否满足不等式(1)。如果所选择的中间值a0的流水间隔ii满足用于每个计算设备的不等式,则在最大生命周期到该中间值a0之间的范围内选择另一个中间值a1来检验其是否满足不等式(1),如此反复,直到在最大生命周期到某一中间值an之间的范围内选择的中间值an-1对其中每一个计算设备的不等式(1)不成立为止。然后再在中间值an-1和an之的范围内选择的中间值,依据上述二分法搜索满足针对计算设备m(0)、m(1)、m(2)、m(3)…m(n)中的每一个不等式(1)的中间值。如此反复,直到获得一个不大于d(r)max的最小中间值amin为止,并将该最小中间值amin作为静态分布式环境下的最小数据流水间隔iimin。

可选择地,不等式(1)表示,采用二分搜索法,从系统最大瓶颈b到最大生命周期d(r)max之间选择一个中间值a0作为流水间隔ii,针对计算设备m(0)、m(1)、m(2)、m(3)…m(n)中的每一个,检验其是否满足不等式(1)。如果所选择的中间值a0的流水间隔ii满足用于每个计算设备的不等式,则在最大生命周期到该中间值a0之间的范围内选择另一个中间值a1来检验其是否满足不等式(1),如此反复,直到在最大生命周期到某一中间值an之间的范围内选择的中间值an-1对其中每一个计算设备的不等式(1)不成立为止。然后再在中间值an-1和an之的范围内选择的中间值,依据上述二分法搜索满足针对计算设备m(0)、m(1)、m(2)、m(3)…m(n)中的每一个不等式(1)的中间值。如此反复,直到获得一个不大于d(r)max的最小中间值amin为止,并将该最小中间值amin作为静态分布式环境下的最小流水间隔ii。因此,在极限情况下,可能存在系统的最大瓶颈就是该最小中间值amin,也就是最小数据流水间隔iimin。就是在极限情况下,计算系统的最大瓶颈就是计算系统的最小数据流水间隔iimin。

随后,内存池数量分配组件240将每个逻辑输出缓存的所采集的生命周期d(r)除以最小数据流水间隔iimin的商向上取整获得一个整数,从而为对应的逻辑输出缓存分配所述整数份的内存池,即通过公式(2)计算编号为r的逻辑输出缓存所具有的固定容量大小的内存池的份数n(r),

内存池数量分配组件240基于最小数据流水间隔iimin和每个逻辑输出缓存的生命周期计算出每个逻辑输出缓存所需的内存池的份数后,将该份数值发送给任务拓扑图生成组件300,以便任务拓扑图生成组件300利用该份数值修改该逻辑输出缓存所对应任务节点的节点属性中的“资源属性”中包含的内存池属性,以便静态计算环境在基于该任务节点创建对应的执行体时,对应该逻辑输出缓存分配对应份数的实际内存池。

由于采用了根据本公开的内存资源静态部署系统,基于该分布系统形成的任务拓扑图形成的执行体的内存是基于计算设备的全局内存资源以及部署在该计算设备上的计算任务进行对应分布,从而完全消除了内存崩溃(outofmemory)的风险。而且这种分布系统考虑到整个计算任务的流水间隔ii,实现了数据流水间隔的最小化,因此,在保证整个计算系统的内存资源安全的情况下,实现了计算效率的最大化。

以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。

因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。

还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。

上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

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