CN114035810B - 用于多流并行的同步部署系统及其方法 - Google Patents

用于多流并行的同步部署系统及其方法 Download PDF

Info

Publication number
CN114035810B
CN114035810B CN202210022950.9A CN202210022950A CN114035810B CN 114035810 B CN114035810 B CN 114035810B CN 202210022950 A CN202210022950 A CN 202210022950A CN 114035810 B CN114035810 B CN 114035810B
Authority
CN
China
Prior art keywords
node
task flow
tensor
synchronous
task
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202210022950.9A
Other languages
English (en)
Other versions
CN114035810A (zh
Inventor
李新奇
张建浩
袁进辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Oneflow Technology Co Ltd
Original Assignee
Beijing Oneflow Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Oneflow Technology Co Ltd filed Critical Beijing Oneflow Technology Co Ltd
Priority to CN202210022950.9A priority Critical patent/CN114035810B/zh
Publication of CN114035810A publication Critical patent/CN114035810A/zh
Application granted granted Critical
Publication of CN114035810B publication Critical patent/CN114035810B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Abstract

本公开涉及一种用于多流并行的同步部署系统及其方法。所述系统包括:初始计算图获取组件,用于获取包括属于一个计算任务的多个任务流的初始计算图,每个任务流包含多个顺序执行的运算逻辑节点,每个运算逻辑节点含有所属任务流标记;节点关系分析组件,用于遍历所述计算图中将被针对的所有张量,判断首次针对第一张量的第一节点和针对第一张量的第二节点所属的任务流是否相同;以及同步节点部署组件,用于在节点关系分析组件确定第一节点属于第一任务流而第二节点属于不同于第一任务流的第二任务流时,在第二节点之前部署标记第一任务流的第一同步依赖节点,并将第二节点标记所述第一同步依赖节点,由此通过所述第一同步依赖节点确定第一节点的操作先于第二节点操作。

Description

用于多流并行的同步部署系统及其方法
技术领域
本公开涉及一种数据处理技术。更具体地说,本公开涉及一种用于多流并行的同步部署系统及其方法。
背景技术
在深度学习普及的现在,为了提高数据处理的速度,通常需要将一个任务分割成多个分片任务,形成多个任务流,从而使得任务流执行并行处理,从而节省数据处理的时间或加快任务处理的效率,这种数据处理方式为多流并行处理。
但是在进行多流并行的数据处理方法往往存在不同流之间的参数交换以及不同流之间的数据依赖。因此,如果在并行情况下如果不做到参数同步,将导致每个任务流各自的产生的结果在进行合并时出现错误。这种不同步往往是不同任务流各自在进行执行过程中不同任务量以及处理速度不同等原因导致的。
在深度学习中,通常使用 GPU 进行计算时,会启动 CUDA Kernel,CUDA Kernel在 GPU 上异步执行。CUDA Kernel 只能属于某一个 CUDA stream,不同的 CUDA stream之间的执行顺序大多是没有联系的;同一个 CUDA stream 中的 Kernel 有先进先出的执行顺序。Host 机器(即CPU)上某个函数启动 CUDA Kernel 后,Host 主机上的执行流程,并不会等待 GPU 上的 CUDA Kernel 执行结束后(再继续),而是直接执行 Host 上的下一条指令。而且启动 CUDA Kernel也并不意味着 GPU 上立即执行 CUDA Kernel 中的指令,而是将 CUDA Kernel 放置在 GPU 的某个队列(即 CUDA Stream)中,排队等待之前的Kernel 执行完成后,再执行当前 Kernel。此外,常见的计算框架,会自己实现显存池,即向GPU 申请大块内存,再自己对这块内存进行划分和管理,分配给计算时的张量,一般来说每一个 Stream 有一个显存池。
因为 Kernel 异步执行的原因,对于多流并行数据处理的情况,常常会导致一些冲突问题。一方面,对于并行的多个任务流上的彼此逻辑上有依赖的Kernel,可能会因为处在不同的 Stream 上执行而导致错误。比如,假设有两个Kernel,分别为S1-n1、S2-n2,假定逻辑上S2-n2的计算依赖S1-n1的结果,即需要S1-n1先向内存空间M写入张量T2,S2-n2再读取M中的张量T2。由于两个Kernel,S1-n1和S2-n2,在两个不同的任务流S1和S2中,S2-n2的执行可能早于S1-n1,在这种情况下,S2-n2读取到的数据就可能是错误的。另一方面,对于并行的多个任务流上的逻辑上没有依赖的 Kernel,有可能因为不同 Kernel 之间张量生命周期的不可控,导致内存数据的错误。比如,三个 Kernel ,例如S3-n3、S2-n2、S1-n2、分别在不同的任务流S3、S2和S1中,S3-n3以及S2-n2需要读取内存M中的张量T2,为了实现同步,常规方式都会无条件指令S3-n3以及S2-n2每个都进行等待S1-n2或与S1-n2进行同步处理,这些同步都采用人工方式来进行调整,很费人力。而且当存在多个并行任务流都需要读取内存M中的张量T2时,则会存在多个等待或同步过程,产生多余同步操作,导致数据处理过程繁复。
因此,人们需要一种能够在实现多流并行时自动消除由于各种原因导致的不同步的情形,从而消除数据处理中出现的错误。
发明内容
本发明的一个目的是解决至少上述问题,具体而言,本公开提供一种用于多流并行的同步部署系统,包括:初始计算图获取组件,获取将部署在CPU以及一个或多个协处理器上的初始计算图,所述初始计算图包括属于一个计算任务的多个任务流,每个任务流包含多个顺序执行的运算逻辑节点,每个运算逻辑节点含有所属任务流标记;节点关系分析组件,遍历所述计算图中将被针对的所有张量,判断首次针对第一张量的第一节点和针对第一张量的第二节点所属的任务流是否相同;同步节点部署组件,在节点关系分析组件确定第一节点属于第一任务流而第二节点属于不同于第一任务流的第二任务流时,在第二节点之前部署标记第一任务流的第一同步依赖节点,并将第二节点标记所述第一同步依赖节点,由此通过所述第一同步依赖节点确定第一节点的操作先于第二节点操作。
根据本公开的用于多流并行的同步部署系统,其中所述节点关系分析组件还分析确定第二节点是否为第二任务流中的第一个针对第一张量的节点,以及所述同步节点部署组件只在第二节点之前部署标记第一任务流的第一同步依赖节点,并只将第二节点标记所述第一同步依赖节点。
根据本公开的用于多流并行的同步部署系统,其中所述节点关系分析组件确定第二节点之后的第三节点是否属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点,以及所述同步节点部署组件在第三节点属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点时,将第三节点标记所述第一同步依赖节点。
根据本公开的用于多流并行的同步部署系统,其中所述节点关系分析组件还判断至少针对第四张量和第五张量的第六节点所属的任务流是否与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流是否都不相同,以及所述同步节点部署组件在至少针对第四张量和第五张量的第六节点所属的任务流为与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流都不相同的第六任务流时,在所述第六节点之前至少连续部署标记第四任务流的第四同步依赖节点和标记第五任务流的第五同步依赖节点,并将第六节点至少标记所述第四同步依赖节点和第五同步依赖节点,由此通过所述第四同步依赖节点和第五同步依赖节点确定第四节点和第五节点的操作先于第六节点的操作。
根据本公开的用于多流并行的同步部署系统,还包括:节点部署统计组件,统计同步节点部署组件在同一轮次所部署的同步依赖节点的数量;以及循环判断组件,在节点部署统计组件统计结果为零时,判断同步依赖节点部署完成,以及在节点部署统计组件统计结果不为零时,将当前的结果计算图作为初始计算图发反馈到初始计算图获取组件。
根据本公开的另一个方面,提供了一种用于多流并行的同步部署方法,包括:初始计算图获取步骤,获取将部署在CPU以及一个或多个协处理器上的初始计算图,所述初始计算图包括属于一个计算任务的多个任务流,每个任务流包含多个顺序执行的运算逻辑节点,每个运算逻辑节点含有所属任务流标记;节点关系分析步骤,遍历所述初始计算图中将被针对的所有张量,判断首次针对第一张量的第一节点和针对第一张量的第二节点所属的任务流是否相同;以及同步节点部署步骤,在节点关系分析步骤确定第一节点属于第一任务流而第二节点属于不同于第一任务流的第二任务流时,在第二节点之前部署标记第一任务流的第一同步依赖节点,并将第二节点标记所述第一同步依赖节点,由此通过所述第一同步依赖节点确定第一节点的操作先于第二节点操作。
根据本公开的用于多流并行的同步部署方法,其中所述节点关系分析步骤中还分析确定第二节点是否为第二任务流中的第一个针对第一张量的节点,以及在所述同步节点部署步骤中只在第二节点之前部署标记第一任务流的第一同步依赖节点,并只将第二节点标记所述第一同步依赖节点。
根据本公开的用于多流并行的同步部署方法,其中所述节点关系分析步骤中还确定第二节点之后的第三节点是否属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点,以及在所述同步节点部署步骤中在第三节点属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点时,将第三节点标记所述第一同步依赖节点。
根据本公开的用于多流并行的同步部署方法,其中所述节点关系分析步骤中还判断至少针对第四张量和第五张量的第六节点所属的任务流是否与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流是否都不相同,以及在所述同步节点部署步骤中在至少针对第四张量和第五张量的第六节点所属的任务流为与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流都不相同的第六任务流时,在所述第六节点之前至少连续部署标记第四任务流的第四同步依赖节点和标记第五任务流的第五同步依赖节点,并将第六节点至少标记所述第四同步依赖节点和第五同步依赖节点,由此通过所述第四同步依赖节点和第五同步依赖节点确定第四节点和第五节点的操作先于第六节点的操作。
根据本公开的用于多流并行的同步部署方法,还包括:节点部署统计步骤,统计同步节点部署组件在同一轮次所部署的同步依赖节点的数量;以及循环判断步骤,在节点部署统计步骤中统计结果为零时,判断同步依赖节点部署完成,以及在节点部署统计步骤统计结果不为零时,将当前的结果计算图作为初始计算图发反馈到初始计算图获取步骤
通过根据本公开的一种用于多流并行的同步部署系统及方法,以待处理的张量为依据,以是否属于同一任务流为判断依据,能够在动态图模式下,通过对任务的初始计算图中的所有节点进行分析,获取针对同一张量的不同任务流的节点之间的不同步的可能性,并通过在首次针对该张量的节点所属的任务流上对该张量进行同步约束,消除并行的不同任务流之间对张量使用的不同步的情形。首次针对该张量的节点通常是该张量的生产节点。通过采用本公开的用于多流并行的同步部署系统及方法,消除了需要人工对计算图或与计算图对应的程序进行手动同步调整的必要,极大地提高的程序纠错的人工成本,并减少了多流并行系统的维护的成本和出错的可能性。
本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
图1所示的是根据本公开的用于多流并行的同步部署系统的原理示意图。
图2所示的是根据本公开的用于多流并行的同步部署系统进行同步节点部署过程的一个实例示意图。
具体实施方式
下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,在下文中,两个可能对象之一可以被称为第一逻辑节点也可以被称为第二逻辑节点。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
为了使本领域技术人员更好地理解本公开,下面结合附图和具体实施方式对本公开作进一步详细说明。
图1所示的是根据本公开的用于多流并行的同步部署系统的原理示意图。如图1所示,用于多流并行的同步部署系统100至少包括:初始计算图获取组件110、节点关系分析组件120以及同步节点部署组件130。初始计算图获取组件110获取将部署在CPU以及一个或多个协处理器上的初始计算图,所述初始计算图包括属于一个计算任务的多个任务流,每个任务流包含多个顺序执行的运算逻辑节点,每个运算逻辑节点含有所属任务流标记。通常每个运算逻辑节点体现为一个kernel。在深度学习或大数据计算领域,采用GPU的情况下,任务流中的每运算逻辑节点按顺序执行,在CPU中也存在配合执行的一个多个逻辑节点。所述初始计算图可以是一个完整的初始计算图,也可以是局部初始计算图,例如为研发人员输入的整个初始计算图的开头部分或中间部分。这个初始计算图通常由有一段程序转化而成,在初始计算图获取组件110通过接受一段程序指令而转换成将被部署在CPU和GPU上的由一系列运算逻辑节点构成的初始计算图。随着输入的程序代码的改变,获取的初始计算图也在持续变化。在初始计算图获取组件110形成的初始计算图对应了程序指令的执行顺序,但是并不是程序代码实际执行的顺序。在实际执行过程中,由于分属于不同任务流,在初始计算图中,只有属于同一任务流的运算逻辑节点之间的执行顺序是固定的,因此尽管在初始计算图中显示不同任务流的运算逻辑节点存在指定的先后顺序,但是在实际运行时,由于不同任务流存在不同的偶发阻塞情况,本来想象的不同任务流中的运算逻辑节点的同步顺序就会被打破。
因此为了消除这种打破想象同步情形的出现,本公开的节点关系分析组件120遍历所述初始计算图中将被针对的所有张量,判断首次针对第一张量的第一节点和针对第一张量的第二节点所属的任务流是否相同。第一张量并不是初始计算图中的第一个张量,可以是任意一个张量。这里的“第一”仅仅是一个命名,不代表在初始计算图中张量出现的顺序。首次针对第一张量的第一节点通常是该张量的产生节点,其所属的任务流也是该张量的产生任务流。而针对第一张量的第二节点通常是对该张量的消费节点,其所属的任务流也就是消费该张量的任务流。在所有运算逻辑节点中,通常会包含有节点的任务流属性信息,即该逻辑节点被部署在那个任务流中。这样,节点关系分析组件120能够获知每个节点的任务流属性信息以及张量的生产和消费信息,具体而言,即可以获知产生的张量存储在哪个内存空间或内存地址段。通过获取针对张量的消费逻辑节点,能够获知该张量所需内存空间的生命周期,即该张量会涉及到哪些逻辑节点。通过获取每个逻辑节点的信息,从而可以确定针对同一个张量的两个节点是否属于同一个任务流。所述针对同一个张量包括产生这个张量或基于这个张量执行逻辑运算或其他操作。由于针对同一张量的属于不同任务流的逻辑节点之间由于彼此之间不具顺序约束,因此,可能会存在计算与内存管理方面的冲突,由此导致不同步的情形。例如计算时,所访问的内存空间内的张量已经发生改变,这会导致整个计算图所应用的任务在执行过程中出现错误,这样在进行参数交换时出现错误,也就导致错误的同步。
为此,同步节点部署组件130在节点关系分析组件确定第一节点属于第一任务流而第二节点属于不同于第一任务流的任务流时,在第二节点之前部署标记第一任务流的第一同步依赖节点,并将第二节点标记所述第一同步依赖节点,由此通过所述第一同步依赖节点确定第一节点的操作先于第二节点操作,从而获得结果计算图。同步依赖节点基于其标记的任务流指明了第二节点可能快于第一节点的情况下,可能导致同步错误,因此需要通过其前方插入的同步依赖节点进行一次软同步过程,即为了避免最后的参数交换过程存在错误,需要先在中间可能导致不同步的位置进行一次局部同步,消除可能导致最后同步出现错误的前提。这就是同步依赖节点的作用。通过同时将将第二节点标记所述第一同步依赖节点,使得第二节点的执行必须以获得被标记同步依赖节点的被激活为条件,或者必须获得被标记同步依赖节点发出的执行完成的消息为前提。
通过在第二节点之前部署标记第一任务流的同步依赖节点,使得整个计算图在实际部署并运行时,在第二节点被执行之前时,需要基于所生成的同步依赖节点完成执行之后才能被执行。具体而言,标记第一任务流的第一同步依赖节点明确其之前的第一任务流的逻辑节点都要完成执行。这样,在第二节点所使用的第一节点的所产生张量一定是正确的,而不会是前一轮次的张量。如果没有该第一同步依赖节点,存在第一节点在第一任务流中被各种原因阻塞的情况下,使得第二节点会在后一轮执行中使用第一任务流中的第一节点在前一轮产生的第一张量数据的可能或使用第一节点产生的第一张量所使用的内存空间中存储的另一个张量数据的可能(因为在第一轮过后,该存储第一张量的内存空间可能在其他生命周期期间存储其他张量数据),通过第一同步依赖节点,使得针对同一张量的不同任务流的逻辑节点实现中间同步,从而消除了最终参数的同步错误的情形。
可选择地,所述节点关系分析组件120还确定第二节点是否为第二任务流中第一个针对第一张量的节点。并且,所述同步节点部署组件130在第二节点为第二任务流中第一个针对第一张量的节点时,所述同步节点部署组件130只在第二节点之前部署标记第一任务流的第一同步依赖节点,并只将第二节点标记所述第一同步依赖节点。这意味着,如果在第二任务流中在第二节点之后存在使用第一张量的其他节点,一方面由于其他节点与第二节点同属一个任务流,因此彼此串行,另一方面,由于已经存在第一同步依赖节点,因此,在第一同步依赖节点执行完成时,在第二节点之后其他使用第一张量的节点会在同时获得对已经准备好的第一张量的读取,因此,不用对第二任务流中使用第一张量的其他节点进行同步依赖节点的重复部署,也无需对第二任务流中使用第一张量的其他节点标记同步依赖节点。这就消除了重复进行同步节点部署的情形。在同一个任务流中,由于逻辑节点串行,因此其先后顺序可以自然获得,因此节点关系分析组件120可以自然获得第二节点是否为第二任务流中第一个使用第一张量的节点。当第二任务流中存在与第二节点并联的运算逻辑节点并且使用第一张量时,只需要在第二节点与该并联运算逻辑节点的共同的前方部署同步依赖节点并进行选择其中一个进行同步依赖节点标记即可。
所述节点关系分析组件120确定第二节点之后是否存在第三节点,其使用第一张量,但是其属于第三任务流,不同于第一任务流和第二任务流的第三任务流。对于第三节点,同步节点部署组件130为了实现中间阶段的同步,在第二节点之前已经部署第一同步依赖节点并被标记第一同步依赖节点的情况下,只需要将第三节点标记所述第一同步依赖节点即可。此时,第三节点之前不用再重复部署一个标记第一任务流的同步以来节点。通过对针对同一第一张量的第二节点进行同步节点部署之后,可以直接通过修改属于其他任务流的针对第一张量的运算逻辑节点的同步依赖节点标记,就可以完成所有任务流中针对第一张量的运算逻辑节点的同步关系的建立。这样就无需对每个任务流中的每个针对第一张量的运算逻辑节点采取等待处理手段,一方面简化了计算图,另一方面在实际运行过程中,针对同一个张量,只需要轮询一个同步依赖节点,就可以实现所有任务流中针对该张量的同步处理。如果其他任务流中的运算逻辑节点除了针对第一张量之外,还针对其他张量,则需要针对该张量按照上述步骤部署针对该张量所属的首次使用或产生的节点所属任务流,进行另一个同步依赖节点的部署,并对该运算逻辑节点在已经标记第一同步依赖节点的基础上增加标记该另一个同步依赖节点。
节点关系分析组件120可能会分析出某一些节点会使用到两个或更多个属于不同任务流的运算逻辑节点产生的张量。举例而言例如属于第四任务流的第四节点产生了第四张量或首次针对第四张量,属于第五任务流的第五节点产生了第五张量首次针对第五张量,但是第六任务流的第六节点使用了第四张量和第五张量。当节点关系分析组件120分许获得这种情形时,同步节点部署组件130就会在第六节点之前连续部署标记第四任务流的第四同步依赖节点和标记第五任务流的第五同步依赖节点,并同时采用第四同步依赖节点和第五任务流的第五同步依赖节点标记该第六节点。由此通过所述第四同步依赖节点和第五同步依赖节点确定第四节点和第五节点的操作先于第六节点的操作。
如图1所示,多流并行的同步部署系统100还包括:节点部署统计组件140和循环判断组件150。节点部署统计组件140会在每轮部署过程中统计同步节点部署组件在同一轮次所部署的同步依赖节点的数量。由于在每轮部署过程中,初始计算图在不断变化,因此节点之间的关系也在不断变化,因此这种部署过程实际上是反复循环进行,直到整个计算图无需再部署同步节点为止。如果在任何一轮部署过程中未部署任意一个同步依赖节点或者未对任何运算逻辑节点进行同步依赖节点的标记,则意味着需要结束部署循环过程。因此,循环判断组件150在节点部署统计组件统计结果为零时,判断同步依赖节点部署完成,以及在节点部署统计组件统计结果不为零时,将当前的结果计算图作为初始计算图发反馈到初始计算图获取组件。在有些情况下,在进行同步部署的过程中,可能出现人员临时通过增加输入一行代码或多行代码从而使得初始计算图的运算逻辑节点增加的情况。因此,循环判断组件150还会判断初始计算图是否出现增加运算逻辑节点(增加指令)、减少运算逻辑节点(删除指令)、改变运算逻辑节点(改变指令的属性、参数等)的情形,如果出现,也会返回到初始计算图获取组件,重新开始一轮同步部署过程。
图2所示的是根据本公开的用于多流并行的同步部署系统进行同步节点部署过程的一个实例示意图。如图2所示,同步部署系统100上方的计算图为初始计算图其下方为结果计算图。图2中所示的初始计算图包括任务流S1、S2、S3、S4、S5以及S6。为描述简便起见,仅仅举了包含六个并行任务流的例子。在实际情况中,并行任务流可以更多,例如10个,可以更多,例如,成百上千个。每个任务流中都仅仅显示了需要引用的逻辑任务节点,每个任务流中的逻辑任务节点通常为成百上千甚至更多。在任务流S1中仅仅显示了两个运算逻辑节点,例如S1-n1和S1-n2节点,这里称S1-n1为第一节点。同样,在任务流S2也仅仅显示了一个需要提到的运算逻辑节点,例如S2-n2节点,这里称S2-n2为第二节点。在任务流S3也仅仅显示了一个需要提到的运算逻辑节点,例如S3-n3节点,这里称S3-n3为第三节点。在任务流S4也仅仅显示了一个需要提到的运算逻辑节点,例如S4-n4节点,这里称S4-n4为第四节点。在任务流S5也仅仅显示了一个需要提到的运算逻辑节点,例如S5-n5节点,这里称S5-n5为第五节点。在任务流S6也仅仅显示了一个需要提到的运算逻辑节点,例如S6-n6节点,这里称S6-n6为第六节点。每个运算节点都具有其所属任务流的标记S。节点分析组件获取初始计算图时或获得初始计算图中每个运算逻辑的任务流属性标记S,从而获知每个运算逻辑节点所属的任务流。
左边的时间(t)轴仅仅显示了工作人员在输入初始计算图时编排的运算节点的想象的运行时顺序,但是该初始计算图被部署到实际运行时,由于运算逻辑节点分属不同的任务流,而这些任务流之间属于并行关系,各个任务流会彼此之间独立运行。因此分属不同任务流的运算逻辑节点之间尽管在形式上存在时间上的理想的预定先后顺序,但是在实际运行时由于各个任务流的任务数量之间的巨大差异能导致任何其中一个任务流的运行落后于其他任务流的运行进度,因此其他任务流的运算逻辑节点在使用该落后运行的任务流中的张量时就会出现不同步的情形,导致错误。为此,为了将彼此依赖的不同任务流的运算节点关联起来,本公开对初始计算图进行分析获取彼此之间依赖关系并通过在适当的位置部署中间同步节点,和标记需要依赖的运算逻辑节点来形成彼此依赖的运算节点之间的固定关系,从而消除任何一个任务流发生阻塞时导致的不同步情形。
如图2所示,第一任务流S1中的第一节点S1-n1基于张量T0生成了张量T1并存储在所申请的内存空间中,以便其他任务流中的逻辑运算节点使用,例如第二任务流S2中的第二节点S2-n2和第三任务流中的第三节点S3-n3会使用第一张量T1。根据本公开的多流并行的同步部署系统100,其基于的第二节点S2-n2与第一节点S1-n1属于不同任务流并都针对第一张量T1,因此,同步节点部署组件130在第二节点S2-n2之前部署第一同步依赖节点Syn(S1)-D1,并采用第一同步依赖节点的名称D1标记第二节点S2-n2,将第二节点S2-n2修改成带有标记D1的第二节点S2-n2(T1,D1)。这种附图编号仅仅表示其标记了S2和D1。第一同步依赖节点Syn(S1)-D1需要采用第一张量T1的产生所在任务流S1进行标记。具体标记方式都采用节点的属性标记形式。在实际应用中可以采用代码“dep1 = soft_sync(stream1)”的形式来表示第一同步依赖节点D1,采用代码“Tensor2 = op(stream2, Tensor1, dep1)”来表示第二节点被标记有D1,该代码也采用stream2标记了其属于第二任务流S2。对于第二节点之后的第三节点S3-n3,其属于第三任务流S3。由于第三节点S3-n3也使用第一张量T1,但是由于已经针对第一张量部署了第一同步依赖节点Syn(S1)-D1,因此,同步节点部署组件130只需要采用第一同步依赖节点D1的名称来标记第三节点S3-n3即可。因此,一旦在第一次部署了针对第一张量T1的第一同步依赖节点D1之后,此后的其他任务流的这对第一张量T1的运算逻辑节点只需要采用D1进行标记即可,无需在其前面重复部署同步依赖节点。尽管图2中显示的第一同步依赖节点D1显示的第一任务流S1中,但是在实际情况下,第一同步依赖节点D1只要部署在第一节点S1-n1之后第二节点S2-n2之前即可,其物理位置可以在CPU中,也可以在任何GPU中,不一定属于第一任务流,仅仅通过具有第一任务流S1的标记使其针对第一任务流的执行进行同步处理,等待第一张量T1被准备好。CPU通过轮询第一同步依赖节点D1的结果决定发出T1是否准备好的消息。由于第二节点S2-n2被标记D1,因此第二节点S2-n2在获得标记D1的表示准备好的变换才满足执行的条件。因此,通过第一同步依赖节点D1以及第二节点包含的标记D1而将第一节点和第二节点之间的同步关系确定下来,消除了彼此依赖的不同任务流出现不同步的情形。对于第三节点S3-n3和第一节点S1-n1之间关系也是一样的。图2中同步部署系统100的下方的结果计算图的左边部分已经显示了上述第一节点S1-n1、第二节点S2-n2以及第三节点S3-n3的变化。
可选择地,如图2所示,第四节点S4-n4是针对第四张量T4的属于第四任务流S4的运算逻辑节点,第五节点S5-n5是针对第五张量T5的属于第五任务流S5的运算逻辑节点,而第六节点S6-n6是针对第四张量T4和第五张量T5的属于第六任务流S6的运算逻辑节点。因此需要同时使得第六节点与第四节点和第五节点同步。根据本公开的同步节点部署组件130基于节点关系分析组件120分析获得上述节点依赖关系,就在第六节点之前部署了第四同步依赖节点Syn(S4)-D4和第五同步以来节点Syn(S5)-D5。同样,第四同步依赖节点Syn(S4)-D4和第五同步以来节点Syn(S5)-D5各自也需要采用产生第四张量T4和第五张量T5的任务流S4和S5分别进行标记。此外,对于第六节点S6-n6,则同步部署组件130需要增加其标记属性,即采用D4和D5对第六节点S6-n6进行标记,从而通过第四同步依赖节点Syn(S4)-D4和第五同步以来节点Syn(S5)-D5以及第六节点S6-n6中增加的节点标记D4和D5,使得第六节点S6-n6与第四节点S4-n4和第五节点S5-n5的同步关系固定下来,消除三者之间任意一个阻塞时产生的不同步情形。
图2中的同步部署系统100下方就是通过上述部署方式形成的与初始计算图对应的结果计算图。基于结果计算图部署的数据处理系统将不会存在并行任务流之间不同步的情形。
采用根据本公开的系统,以待处理的张量为依据,以是否属于同一任务流为判断依据,能够在动态图模式下,通过对任务的初始动态计算图中的所有节点进行分析,获取针对同一张量的不同任务流的节点之间潜在的同步冲突,并通过在首次针对该张量的节点所属的任务流上对该张量进行同步处理,消除并行的不同任务流之间对张量使用的同步冲突,从而消除这种冲突导致的不同步错误。首次针对该张量的节点通常是该张量的生产节点。通过采用本公开的用于多流并行的同步部署系统及方法,消除了需要人工对计算图或与计算图对应的程序进行同步设定必要,更确切而言,使得程序中的不同步消除过程无需人工干预而自动进行,极大地提高的程序纠错的人工成本,并减少了多流并行系统的维护的成本和出错的可能性。通过本公开的系统,使得计算和显存管理统一当作指令管理,且是显存安全的。而且相对于其他处理方式,本公开 同样的同步逻辑,只需在诸如虚拟机层面的冲突消除系统中实现一次,不需要开发者手工重复实现。减少了维护的成本和出错的可能性。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本公开的方法和装置的全部或者任何步骤或者部件,可以在任何计算装置(包括处理器、存储介质等)或者计算装置的网络中,以硬件、固件、软件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本公开的说明的情况下运用他们的基本编程技能就能实现的。
因此,本公开的目的还可以通过在任何计算装置上运行一个程序或者一组程序来实现。所述计算装置可以是公知的通用装置。因此,本公开的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本公开,并且存储有这样的程序产品的存储介质也构成本公开。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。
还需要指出的是,在本公开的装置和方法中,显然,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。并且,执行上述系列处理的步骤可以自然地按照说明的顺序按时间顺序执行,但是并不需要一定按照时间顺序执行。某些步骤可以并行或彼此独立地执行。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (8)

1.一种用于多流并行的同步部署系统,包括:
初始计算图获取组件,获取将部署在CPU以及一个或多个协处理器上的初始计算图,所述初始计算图包括属于一个计算任务的多个任务流,每个任务流包含多个顺序执行的运算逻辑节点,每个运算逻辑节点含有所属任务流标记;
节点关系分析组件,遍历所述初始计算图中将被针对的所有张量,判断首次针对第一张量的第一节点和针对第一张量的第二节点所属的任务流是否相同以及分析确定第二节点是否为第二任务流中的第一个针对第一张量的节点;
同步节点部署组件,在节点关系分析组件确定第一节点属于第一任务流而第二节点属于不同于第一任务流的第二任务流时,在第二节点之前部署标记第一任务流的第一同步依赖节点,并将第二节点标记所述第一同步依赖节点,由此通过所述第一同步依赖节点确定第一节点的操作先于第二节点操作,并且在第二节点为第二任务流中的第一个针对第一张量的节点时只在第二节点之前部署标记第一任务流的第一同步依赖节点,并只将第二节点标记所述第一同步依赖节点。
2.根据权利要求1所述的用于多流并行的同步部署系统,其中所述节点关系分析组件确定第二节点之后的第三节点是否属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点,以及所述同步节点部署组件在第三节点属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点时,将第三节点标记所述第一同步依赖节点。
3.根据权利要求1所述的用于多流并行的同步部署系统,其中所述节点关系分析组件还判断至少针对第四张量和第五张量的第六节点所属的任务流是否与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流是否都不相同,以及所述同步节点部署组件在至少针对第四张量和第五张量的第六节点所属的任务流为与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流都不相同的第六任务流时,在所述第六节点之前至少连续部署标记第四任务流的第四同步依赖节点和标记第五任务流的第五同步依赖节点,并将第六节点至少标记所述第四同步依赖节点和第五同步依赖节点,由此通过所述第四同步依赖节点和第五同步依赖节点确定第四节点和第五节点的操作先于第六节点的操作。
4. 根据权利要求1-3之一所述的用于多流并行的同步部署系统,还包括:
节点部署统计组件,统计同步节点部署组件在同一轮次所部署的同步依赖节点的数量;以及
循环判断组件,在节点部署统计组件统计结果为零时,判断同步依赖节点部署完成,以及在节点部署统计组件统计结果不为零时,将当前的结果计算图作为初始计算图发反馈到初始计算图获取组件。
5.一种用于多流并行的同步部署方法,包括:
初始计算图获取步骤,获取将部署在CPU以及一个或多个协处理器上的初始计算图,所述初始计算图包括属于一个计算任务的多个任务流,每个任务流包含多个顺序执行的运算逻辑节点,每个运算逻辑节点含有所属任务流标记;
节点关系分析步骤,遍历所述初始计算图中将被针对的所有张量,判断首次针对第一张量的第一节点和针对第一张量的第二节点所属的任务流是否相同以及分析确定第二节点是否为第二任务流中的第一个针对第一张量的节点;
同步节点部署步骤,在节点关系分析步骤确定第一节点属于第一任务流而第二节点属于不同于第一任务流的第二任务流时,在第二节点之前部署标记第一任务流的第一同步依赖节点,并将第二节点标记所述第一同步依赖节点,由此通过所述第一同步依赖节点确定第一节点的操作先于第二节点操作,并且在第二节点为第二任务流中的第一个针对第一张量的节点时只在第二节点之前部署标记第一任务流的第一同步依赖节点,并只将第二节点标记所述第一同步依赖节点。
6.根据权利要求5所述的用于多流并行的同步部署方法,其中所述节点关系分析步骤中还确定第二节点之后的第三节点是否属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点,以及在所述同步节点部署步骤中在第三节点属于不同于第一任务流和第二任务流的第三任务流中的针对第一张量的节点时,将第三节点标记所述第一同步依赖节点。
7.根据权利要求5所述的用于多流并行的同步部署方法,其中所述节点关系分析步骤中还判断至少针对第四张量和第五张量的第六节点所属的任务流是否与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流是否都不相同,以及在所述同步节点部署步骤中在至少针对第四张量和第五张量的第六节点所属的任务流为与首次针对第四张量的第四节点所属的第四任务流和首次针对第五张量的第五节点所属的第五任务流都不相同的第六任务流时,在所述第六节点之前至少连续部署标记第四任务流的第四同步依赖节点和标记第五任务流的第五同步依赖节点,并将第六节点至少标记所述第四同步依赖节点和第五同步依赖节点,由此通过所述第四同步依赖节点和第五同步依赖节点确定第四节点和第五节点的操作先于第六节点的操作。
8.根据权利要求5-7之一所述的用于多流并行的同步部署方法,还包括:
节点部署统计步骤,统计同步节点部署组件在同一轮次所部署的同步依赖节点的数量;以及
循环判断步骤,在节点部署统计步骤中统计结果为零时,判断同步依赖节点部署完成,以及在节点部署统计步骤统计结果不为零时,将当前的结果计算图作为初始计算图发反馈到初始计算图获取步骤。
CN202210022950.9A 2022-01-10 2022-01-10 用于多流并行的同步部署系统及其方法 Active CN114035810B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210022950.9A CN114035810B (zh) 2022-01-10 2022-01-10 用于多流并行的同步部署系统及其方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210022950.9A CN114035810B (zh) 2022-01-10 2022-01-10 用于多流并行的同步部署系统及其方法

Publications (2)

Publication Number Publication Date
CN114035810A CN114035810A (zh) 2022-02-11
CN114035810B true CN114035810B (zh) 2022-04-15

Family

ID=80141506

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210022950.9A Active CN114035810B (zh) 2022-01-10 2022-01-10 用于多流并行的同步部署系统及其方法

Country Status (1)

Country Link
CN (1) CN114035810B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928696A (zh) * 2020-02-13 2020-03-27 北京一流科技有限公司 用户级线程控制系统及其方法
CN113391918A (zh) * 2020-03-13 2021-09-14 伊姆西Ip控股有限责任公司 用于处理计算作业的方法、设备和计算机程序产品

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11360808B2 (en) * 2017-04-09 2022-06-14 Intel Corporation Efficient thread group scheduling
US11182207B2 (en) * 2019-06-24 2021-11-23 Nvidia Corporation Pre-fetching task descriptors of dependent tasks
CN112463709A (zh) * 2019-09-09 2021-03-09 上海登临科技有限公司 可配置的异构人工智能处理器
EP3822770A1 (en) * 2019-11-15 2021-05-19 Nvidia Corporation Techniques for modifying an executable graph to perform a workload associated with a new task graph
US20210149734A1 (en) * 2019-11-15 2021-05-20 Nvidia Corporation Techniques for modifying an executable graph to perform a workload associated with a new task graph
CN112799852B (zh) * 2021-04-12 2021-07-30 北京一流科技有限公司 逻辑节点的多维sbp分布式签名决策系统及其方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110928696A (zh) * 2020-02-13 2020-03-27 北京一流科技有限公司 用户级线程控制系统及其方法
CN113391918A (zh) * 2020-03-13 2021-09-14 伊姆西Ip控股有限责任公司 用于处理计算作业的方法、设备和计算机程序产品

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
A Novel Approach to Large-Scale Dynamically Weighted Directed Network Representation;Xin Luo等;《 IEEE Transactions on Pattern Analysis and Machine Intelligence ( Early Access )》;20211213;全文 *

Also Published As

Publication number Publication date
CN114035810A (zh) 2022-02-11

Similar Documents

Publication Publication Date Title
CN104881494B (zh) 与Redis服务器进行数据同步的方法、装置和系统
US7583268B2 (en) Graphics pipeline precise interrupt method and apparatus
CN105956021B (zh) 一种适用于分布式机器学习的自动化任务并行的方法及其系统
US7526634B1 (en) Counter-based delay of dependent thread group execution
US8413122B2 (en) System and method for demonstrating the correctness of an execution trace in concurrent processing environments
US20070103475A1 (en) Interruptible GPU and method for processing multiple contexts and runlists
US20170097917A1 (en) Handling CPU Hotplug Events In RCU Without Sleeplocks
EP0523337A2 (en) Self-scheduling parallel computer system and method
CN108830777A (zh) 用于全面同步执行线程的技术
JP2009020823A (ja) 順序関係解析装置、方法及びプログラム
EP3244314B1 (en) Temporal relationship extension of state machine observer
US20090327669A1 (en) Information processing apparatus, program execution method, and storage medium
JPH07152614A (ja) 並列処理システムの動作解析装置
US9645802B2 (en) Technique for grouping instructions into independent strands
US20230342198A1 (en) Method for reproducible parallel simulation at electronic system level implemented by means of a multi-core discrete-event simulation computer system
CN111158890A (zh) 控制任务集中的任务并行的系统及其方法
Lai et al. Merak: An efficient distributed dnn training framework with automated 3d parallelism for giant foundation models
CN110347450B (zh) 多流并行控制系统及其方法
US20220164507A1 (en) Electronic system-level reproducible parallel simulation method implemented by way of a discrete event simulation multicore computing system
CN114035810B (zh) 用于多流并行的同步部署系统及其方法
CN109634569A (zh) 基于注解的流程实现方法、装置、设备及可读存储介质
Bhattacharjee et al. Deep-edge: An efficient framework for deep learning model update on heterogeneous edge
Raun et al. I Will Survive: An Event-driven Conformance Checking Approach Over Process Streams
US20220300322A1 (en) Cascading of Graph Streaming Processors
CN114035968B (zh) 用于多流并行的冲突处理系统及其方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant