CN110018817A - 数据的分布式运行方法及装置、存储介质及处理器 - Google Patents
数据的分布式运行方法及装置、存储介质及处理器 Download PDFInfo
- Publication number
- CN110018817A CN110018817A CN201810011006.7A CN201810011006A CN110018817A CN 110018817 A CN110018817 A CN 110018817A CN 201810011006 A CN201810011006 A CN 201810011006A CN 110018817 A CN110018817 A CN 110018817A
- Authority
- CN
- China
- Prior art keywords
- sub
- computed losses
- layer
- different
- dag
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明提供了一种数据的分布式运行方法及装置、存储介质及处理器,其中,该方法包括:将用户提交的单机脚本生成有向无环图DAG,其中,DAG包括多个操作实例OP;根据生成的DAG,以及用户提交的图形处理器GPU资源请求和系统GPU资源对OP进行拆分得到多个子OP;根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在当前层的计算损耗小。通过本发明,解决了相关技术中用户在大规模云环境中编写分布式代码时,因设备动态分配而无法在代码中指定特定设备的问题,提高了系统算法效率。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种数据的分布式运行方法及装置、存储介质及处理器。
背景技术
人工智能是21世纪最前沿的技术之一,而深度学习是实现人工智能最有效、取得成效最大的实施方法,是机器学习当前最为火热的一个分支。
深度学习算法的模型训练,对计算能力提出了极高的要求,例如Google研发的人脸模型FaceNet,包含1.4亿个参数,一次推理将花费16亿次浮点运算。为了提升计算能力,一是增加单点计算能力,比如使用图形处理器(Graphic Processing Unit,简称为GPU)、现场可编程逻辑门阵列(Field Programmable Gate Array,简称为FPGA)这类硬件来加速计算;另一个是采用并行计算,使用多个计算节点完成同一个模型训练或者推理作业。
为了实现多节点并行计算的目的,我们把平台部署在云化环境中,使得节点可以动态伸缩,且能实现一键化的安装及部署,任务资源可以动态生成及销毁等目的。虽然主流深度学习框架如TensorFlow提供了对并行计算的支持能力,并且执行效率还不错,但是,在TensorFlow的编程模型中,需要由用户在代码中指定计算图中每个OP(operations的缩写,tensorflow计算图中的节点,有一个或者多个输入和零个或者多个输出,表示一种操作的实例化)在哪个设备商运行,这给直接使用TensorFlow开发并行计算程序带来很多困难:对于云环境来说,每次作业分配的资源是动态的,因此用户很难写出适应云环境的代码。
针对相关技术中的上述问题,目前尚未存在有效的解决方案。
发明内容
本发明实施例提供了一种数据的分布式运行方法及装置、存储介质及处理器,以至少解决相关技术中相关技术中用户在大规模云环境中编写分布式代码时,因设备动态分配而无法在代码中指定特定设备的问题。
根据本发明的一个方面,提供了一种数据的分布式运行方法,包括:将用户提交的单机脚本生成有向无环图DAG,其中,所述DAG包括多个操作实例OP;根据生成的DAG,以及用户提交的图形处理器GPU资源请求和系统GPU资源对所述OP进行拆分得到多个子OP;根据每个子OP的计算损耗将所述多个子OP放置在不同的计算节点上以将所述多个子OP分为多个层,并在所述多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在所述当前层的计算损耗小。
根据本发明的另一个方面,提供了一种数据的分布式运行装置,包括:生成模块,用于将用户提交的单机脚本生成有向无环图DAG,其中,所述DAG包括多个操作实例OP;拆分模块,用于根据所生成的DAP图,以及用户提交的用于指示需要的GPU图形处理器的资源请求和系统GPU资源,进行OP的子图拆分,得到子OP;第一运行模块,用于根据每个子OP的计算损耗将所述多个子OP放置在不同的计算节点上以将所述多个子OP分为多个层,并在所述多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在所述当前层的计算损耗小。
根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述数据的分布式运行方法。
根据本发明的又一个实施例,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述数据的分布式运行方法。
通过本发明,将用户提交的单机脚本,生成DAG,再根生成的DAG,以及图形处理器GPU的资源请求和系统GPU资源对OP进行拆分得到多个子OP,进而根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP,从而使得训练脚本能在系统平台上实现分布式并行运行,用户无需关心设备及资源的分布情况,解决了相关技术中用户在大规模云环境中编写分布式代码时,因设备动态分配而无法在代码中指定特定设备的问题,提高了系统算法效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的数据的分布式运行的方法流程图;
图2是根据本发明实施例的数据并行OP拆分示意图;
图3是根据本发明实施例的拓扑排序算法的示意图;
图4是根据本发明实施例的OP与PS中的参数交互示意图;
图5是根据本发明实施例的数据的分布式运行装置的结构框图;
图6是根据本发明实施例的深度学习自动分布式模型训练系统的内部模块结构图;
图7是根据本发明实施例的计算图的示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
在本实施例中提供了一种数据的分布式运行的方法,图1是根据本发明实施例的数据的分布式运行的方法流程图,如图1所示,该流程包括如下步骤:
步骤S102,将用户提交的单机脚本生成有向无环图DAG,其中,DAG包括多个操作实例OP;
步骤S104,根据生成的DAG,以及用户提交的图形处理器GPU资源请求和系统GPU资源对OP进行拆分得到多个子OP;
步骤S106,根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在当前层的计算损耗小。
通过上述步骤S102至步骤S106,将用户提交的单机脚本,生成DAG,再根生成的DAG,以及图形处理器GPU的资源请求和系统GPU资源对OP进行拆分得到多个子OP,进而根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP,从而使得训练脚本能在系统平台上实现分布式并行运行,用户无需关心设备及资源的分布情况,解决了相关技术中用户在大规模云环境中编写分布式代码时,因设备动态分配而无法在代码中指定特定设备的问题,提高了系统算法效率。
在本实施例的可选实施方式中,本实施例中涉及到的计算损耗可以包括:计算开销和网络开销;
其中,在本实施例中通过以下方式确定计算开销:根据与GPU对应的每秒浮点操作次数FLOPS确定每个子OP的计算开销;
在具体应用场景中对于计算开销的确定可以是:对于特定型号的GPU来说,其计算能力,以FLOPS(每秒浮点操作次数)计算是已知的。同样,对于每个OP来说,一旦参数确定(比如输入、输出大小),其消耗的浮点操作次数也是可以计算出来的。这样,就能够确定每个OP的计算开销。
在本实施例中通过以下方式确定网络开销:根据系统初始连接建立时间与数据传输时间确定网络开销。
在具体应用场景中对于网络开销的确定可以是:网络开销来自于两个部分,一部分是初始连接建立时间,一部分是数据传输时间;其中,可以用一个线性公式来表示:t=ax+b;其中,x是传输的数据量,a是系数,取决于特定GPU之间的传输带宽,b是时延。a和b的值即可以通过理论方式来计算;也可以根据实测数据,使用最小二乘法来拟合,在本实施例中优选使用后一种方式。
基于上述方式本实施例中涉及到的OP的计算损耗可以由上述计算开销和网络开销得到。
基于上述计算开销和网络开销得到方式,在本实施例的另一个可选实施方式中,对于本实施例中的步骤S106中涉及到的根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP的方式可以通过如下方式来实现:
步骤S106-1:基于每一个子OP的计算损耗,通过拓扑排序的方式将多个子OP排序为多个层,并确定多个层所放置的计算节点,其中,本层不同的子OP放置在不同的节点上,将产生不同的计算损耗。将计算损耗最小的一种放置方案,确定为本层子OP与节点之间对应关系的放置方案(即每一层的子OP的计算损耗比其他子OP在当前层的计算损耗均小),不同依赖关系的子OP放置在不同的层中;
步骤S106-2:在计算节点上并行运行子OP。
对于上述步骤S106-1至步骤S106-2的方式,在具体应用场景中可以是:
对于DAG来说,可以把OP拆分成子OP,并使用拓扑排序将其分成多个层,每个层只有在上一层全部计算完成之后,才能获取所需要的数据来进行计算。因此,算法可以基于拓扑排序,每次处理一层,使本层的计算损耗最小,其中,OP拆分的原理和示例如下:
1、将一个计算图G0,转换为另外一个与之等价的计算图G1。
2、等价的含义是:对于任意的输入X,G0(X)=G1(X)。
3、该模块的目标是,将G0中的每个节点(Node或OP),尽可能地转换为一个子图,该子图的主体OP(负责计算的)能够以并行度P执行。
4、该模块接收输入为:计算图G0,目标并行度P,输入X的batch_size(记为B)。
将该模块看成一个转换函数,记为F,则G1=F(P,B,G0)。
Conv2D
Conv2D这个OP,输入是Input和Filter。那么可以从两个角度考虑转换为可并行的子图。
第一种方式是拆分Input,等价于做一个小的数据并行,如图2所示,图2是根据本发明实施例的数据并行OP拆分示意图;
第二种方式是拆分Filter,等价于模型并行。
在本实施例中采用上述第一种拆分input的方式,把Conv2D这个大的OP拆分成小的Conv2D1等几个OP,放置到不同的worker上执行。不同依赖关系的OP放置到不同的层中。这样在分布式的环境中,所有的worker可以同时用于同一个OP的计算,所有worker计算任务比较均衡时,每一层都可以利用所有worker的计算能力,避免worker空闲或者互相等待的情况。
对于上述步骤S106-1中基于每一个子OP的计算损耗,通过拓扑排序的方式将多个子OP排序为多个层,并确定多个层所放置的计算节点的方式,可以通过如下方式来实现:
步骤S106-11:通过拓扑排序的方式对多个OP进行排序;
步骤S106-12:将排序后的每层的多个子OP分别放置在不同的计算节点上,并基于每一个子OP的计算损耗得到每一层不同的计算损耗;
步骤S106-13:本层不同的子OP放置在不同的节点上,将产生不同的计算损耗。将计算损耗最小的一种放置方案,确定为本层子OP与节点之间对应关系的放置方案。
对于上述步骤S106-11至步骤S106-13,在本实施例的具体实施方式中,可以是:
图3是根据本发明实施例的拓扑排序算法的示意图,如图3所示,使用这种算法,将这层的OP拆分成的子OP放置在不同的GPU上,也就是说,OP1,OP2,OP3为该层运行的某个OP拆分成的子图,不同层运行的是不同的OP。每一种放置方法,将产生一种特定的计算损耗。遍历所有的放置方法,选择计算损耗最小的那个,作为本层子OP的放置方案。如此循环直至整个DAG放置完毕。
需要说明的是,本实施例中的DAG还包括多个变量参数;方法还包括:
在根据每个子OP的计算损耗将多个子OP分别分发到确定出的计算节点上并行运行时,将多个变量参数分发到对应的参数节点上并行运行,其中,参数节点与计算节点是一一对应的。
也就是说,DAG中除了由OP,还有Variables(变量参数)。对于Variables,按照Round-Robin轮流放在各个Parameter Server上。图4是根据本发明实施例的子OP与PS中的参数交互示意图,如图4所示,OP1,OP2,OP3为该层运行的某个OP拆分成的子图,子OP运行过程中要使用PS中的参数,也会更新PS中的参数。为了减少网络传输,每一个物理机器都同时部署PS和worker。
人工智能AI平台通过把用户单机脚本的计算图分解成子图,发送给各个worker执行,既降低了用户编码的难度,解决了用户面对云环境来说无法指定设备地址来编写合适的分布式脚本的困难,大大降低算法模型开发难度,提升算法开发的效率,同时考虑Worker和Parameter Server的数量和部署关系,各个节点的资源能力(GPU计算能力、显存大小、网络带宽、工作负载等),以及计算图上每个OP的特征(输入输出数据尺寸、浮点运算次数、数据传输量、运算类型等),计算并指定经过优化的自动分布式方案,提高算法运行的性能,解决了用户在大规模云环境中编写分布式代码时,因设备动态分配而无法在代码中指定特定设备的困难,大大降低算法模型开发难度,提升编码效率,以及通过优化的OP调度提高算法训练的性能,从而提升算法开发的效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
实施例2
在本实施例中还提供了一种数据的分布式运行装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图5是根据本发明实施例的数据的分布式运行装置的结构框图,如图5所示,该装置包括:
生成模块52,用于将用户提交的单机脚本生成有向无环图DAG,其中,DAG包括多个操作实例OP;
拆分模块54,与生成模块52耦合链接,用于根据所生成的DAP图,以及用户提交的用于指示需要的GPU图形处理器的资源请求和系统GPU资源,进行OP的子图拆分,得到子OP;
第一运行模块56,与拆分模块54耦合链接,用于根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在当前层的计算损耗小。
可选地,本实施例中涉及到的计算损耗包括:计算开销和网络开销;进而,本实施例中的装置还包括:第一确定模块,用于根据与GPU对应的FLOPS每秒浮点操作次数确定每个子OP的计算开销;第二确定模块,用于根据系统初始连接建立时间与数据传输时间确定网络开销。
可选地,本实施例中的第一运行模块56包括:排序单元,与拆分单元耦合链接,用于基于每一个子OP的计算损耗,通过拓扑排序的方式将多个子OP排序为多个层,并确定多个层所放置的计算节点,其中,本层不同的子OP放置在不同的节点上,将产生不同的计算损耗,将计算损耗最小的一种放置方案,确定为本层子OP与节点之间对应关系的放置方案即该层中子OP在该层所有节点中的放置方式,比其他放置方式的计算损耗均小,不同依赖关系的OP所拆分成的子OP放置在不同的层中;运行单元,与排序单元耦合链接,用于在计算节点上并行运行子OP。
可选的,上述排序单元还可以包括:排序子单元,用于通过拓扑排序的方式对多个OP进行排序;放置子单元,与排序子单元耦合链接,用于将排序后的多个子OP分别放置在不同的计算节点上,并基于每一个子OP放置在不同节点的计算损耗相加,得到每一层不同的计算损耗;确定子单元,与放置子单元耦合链接,用于将与当前层中子OP的最小计算损耗对应的计算节点确定为当前层子OP的计算节点。
可选地,本实施例中的DAG还包括多个变量参数;本实施例中的装置还可以包括:第二运行模块,用于在根据每个子OP的计算损耗将多个子OP分别分发到确定出的计算节点上并行运行时,将多个变量参数分发到对应的参数节点上并行运行,其中,为了减少网络传输损耗,每个计算节点放置一个参数节点。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
下面结合本发明的具体实施例对本发明进行详细说明;
实施例3
在本实施例中,根据平台集群的GPU资源情况,对用户的训练脚本进行OP调度和OP图拆解,在云化环境中实现自动分布式并行运行训练任务,达到用户深度学习训练任务智能的进行高并发高性能的运行。
总的来说就是:将用户提交的单机脚本,生成DAG计算图,再根据用户提交的资源请求和系统GPU资源特征,生成并行方案,在本系统中实现自动分布式并行运行,降低算法开发难度。
其中,在生成自动化并行方案时,进行OP拆分并计算各个OP的运算损耗,并把各个OP放置到合适的GPU上执行,达到各个worker计算任务均衡,避免快的节点去等待慢的节点。另一方面是站在数据的角度,当一个操作的计算依赖上游多路输入数据时,这些数据能够同时到达,而不是等待某路数据。
下面对本发明的方案进行介绍:
本实施例适用于深度学习算法训练,作为一个资源统一调度和执行的平台,用户将单机深度学习训练脚本提交到本AI(人工智能)平台,降低开发难度,提高计算性能,并实现资源的共享。
图6是根据本发明实施例的深度学习自动分布式模型训练系统的内部模块结构图,如图6所示,深度学习自动分布式模型训练系统各模块包括:
算法建模AM模块,该AM模块的功能为:
AI作业队列管理;为AI Job(作业)分配资源,并启动对应容器;在AI Job完成后回收资源;提供AI Job的可视化监控;提供AI Job的可视化建模功能;提供AI Job的管理能力(作业提交、更新、删除、取消等);
作业调度Job Scheduler模块,Job Scheduler模块的功能为:
Job的资源调度(Resource Scheduler),形成调度策略:
a)选择并行模式:数据并行、模型并行、混合模型;
b)为每个并行实例分配资源;
c)为并行实例进行OP的设备分配;
d)确定PS(Parameter Server,Tensorflow参数服务器简称)数量以及设备分配。
其中,资源调度策略的执行:
a)通过agent(公司自研模块简称)在worker(Tensorflow工作节点)上启动TensorFlow服务;
b)和Worker创建Session(会话);
c)下发计算子图给Worker执行。
其中,处理AM的作业调度、管理请求:
a)作业管理(提交、取消)的响应和处理;
b)向AM动态申请PS资源;
c)作业监控,收集Job的监控信息并进行统计合并,并完成持久化;响应AM的监控请求,并返回监控信息。
Agent模块,该Agent模块功能为:
Agent在容器启动时由Kubernetes(开源系统)拉起,并响应Executor命令启动TensorFlow服务;
Kubernetes Scheduler(为开源系统Kubernetes开发的资源调度插件);
定制化的Kubernetes资源调度器(以Kubernetes插件方式实现),实现Kubernetes集群资源的统一管理,并且为AI Job分配和调度资源。
如图6所示,对该Job Scheduler模块如何实现用户单机脚本的自动分布式高性能执行进行详细阐述。
需要说明的是,在本实施例中通过把用户提交的单机脚本,生成有向无环图(Directed Acyclic Graph,简称为DAG)计算图,再根据用户提交的资源请求和系统GPU资源特征,生成并行方案,确定合适的计算节点(worker)个数和参数节点(ParameterServer,简称PS)个数,并把DAG中的各个OP拆分成子OP后分发到具体的worker上执行,把参数分发到各个PS上执行,实现用户的单机训练脚本在云环境中自动分布式并行执行。
其中,在高性能计算(HPC)集群上,GPU是稀缺资源,而CPU、Memory(内存)都是富余的。因此,在本实施例中自动分布式并行方案主要考虑GPU资源的限制。在并行计算中,GPU之间要交换大量的数据。同一个容器内的GPU之间的互相通讯,可以通过MemoryCopy(内存拷贝)来进行,效率最高。而容器之间的GPU之间的通信,则必须走网络协议,即使由RMDA网络,其时延也是要比内存拷贝大得多的。这说明,多个GPU资源尽可能放在同一个容器中,有利于提升系统效率。
所以如果用户提交的单机脚本和资源需求(如8块GPU卡),在资源调度中能分配到单个物理节点满足此资源请求,则用户的脚本则使用单机执行,无需分布式到多台物理节点上完成。如果用户所申请使用的资源,分布在多台物理节点上,则需要把用户的单机脚本,在后台做自动分布式处理。
TensorFlow的计算由一个有向图描述,该有向图由一个节点集合组成。该有向图表达了数据流计算,作出了一些类型的节点保持和更新持久状态和让分支及循环控制结构的扩展。客户一般都会使用TensorFlow支持的前端语言(C++或者Python)或者更高层的api如keras构建一个计算图。展示了一段样例使用Python构建并执行了一个TensorFlow的计算图,结构计算图在图7中展示,图7是根据本发明实施例的计算图的示意图。在一幅TensorFlow图中,每个节点(node)有一个或者多个输入和零个或者多个输出,表示一种操作(OP)的实例化。
并行方案算法用于确定一个计算图如何在一个分布式集群上执行,即算法的目的是确定每个OP拆分成的子OP放置于哪个Worker上,其中,并行算法关键可以从两个方面考虑,一个是站在Worker的角度,是各个Worker上的计算任务要均衡,能够同时完成计算,这样就能避免快节点去等待慢节点。另一个则是站在数据的角度,当一个操作的计算依赖上游多路输入数据时,这些数据能够同时到达,而不是等待某路数据。据此,AI平台采用了基于计算损耗的拓扑排序算法,来同时满足这两个要求。
其中,计算损耗由两部分组成:计算开销和网络开销,都以us为单位来计算。
对于特定型号的GPU来说,其计算能力,以FLOPS(每秒浮点操作次数)计算,是已知的。同样,对于每个子OP来说,一旦参数确定(比如输入、输出大小),其消耗的浮点操作次数也是可以计算出来的。这样,就能够从理论上确定每个子OP的计算开销。
对于网络开销的计算稍微复杂一些。网络开销来自于两个部分,一部分是初始连接建立时间,一部分是数据传输时间,我们可以用一个线性公式来表示:t=ax+b。其中,x是传输的数据量,a是系数,取决于特定GPU之间的传输带宽,b是时延。a和b的值即可以通过理论方式来计算,也可以根据实测数据,使用最小二乘法来拟合,在本实施例中优选使用后一种方式。
对于DAG来说,可以把OP拆分成子OP,并使用拓扑排序将其分成多个层,每个层只有在上一层全部计算完成之后,才能获取所需要的数据来进行计算。因此,算法可以基于拓扑排序,每次处理一层,使本层的计算损耗最小。OP拆分的原理和示例如下:
将一个计算图G0,转换为另外一个与之等价的计算图G1。
等价的含义是:对于任意的输入X,G0(X)=G1(X)。
该模块的目标是,将G0中的每个节点(Node或OP),尽可能地转换为一个子图,该子图的主体OP(负责计算的)能够以并行度P执行。
该模块接收输入为:计算图G0,目标并行度P,输入X的batch_size(记为B)。
将该模块看成一个转换函数,记为F,则G1=F(P,B,G0)。
Conv2D
Conv2D这个OP,输入是Input和Filter。那么可以从两个角度考虑转换为可并行的子图。
第一种方式是拆分Input,等价于做一个小的数据并行,如图2所示;
第二种方式是拆分Filter,等价于模型并行。
在本实施例中优先采用第一种方式,基于数据并行的拆分。把Conv2D这个大的OP拆分成小的Conv2D1等几个OP,放置到不同的worker上执行。不同依赖关系的OP放置到不同的层中。这样在分布式的环境中,所有的worker可以同时用于同一个OP的计算,所有worker计算任务比较均衡时,每一层都可以利用所有worker的计算能力,避免worker空闲或者互相等待的情况。
如图3所示,使用这种算法,将这层的OP放置在不同的GPU上。每一种放置方法,将产生一种特定的计算损耗。遍历所有的放置方法,选择计算损耗最小的那个,作为本层OP的放置方案。如此循环直至整个DAG放置完毕。
DAG中除了由OP,还有Variables。对于Variables,按照Round-Robin轮流放在各个Parameter Server上。OP运行过程中要使用PS中的参数,也会更新PS中的参数。为了减少网络传输,每一个物理机器都同时部署PS和worker。
如图4所示,AI平台通过这样把用户单机脚本的计算图分解成子图,发送给各个worker执行,既降低了用户编码的难度,解决了用户面对云环境来说无法指定设备地址来编写合适的分布式脚本的困难,大大降低算法模型开发难度,提升算法开发的效率,同时考虑Worker和Parameter Server的数量和部署关系,各个节点的资源能力(GPU计算能力、显存大小、网络带宽、工作负载等),以及计算图上每个OP的特征(输入输出数据尺寸、浮点运算次数、数据传输量、运算类型等),计算并指定经过优化的自动分布式方案,提高算法运行的性能。
通过本实施例在云环境上的高性能的深度学习自动分布式模型训练方案和系统,解决了用户在大规模云环境中编写分布式代码时,因设备动态分配而无法在代码中指定特定设备的困难,大大降低算法模型开发难度,提升编码效率,以及通过优化的OP调度提高算法训练的性能,从而提升算法开发的效率。
下面对本实施例的具体实施方式进行详细说明:
以下是如何对浏览器提交过来的一个用户深度学习训练作业,实现自动化分布式运行的具体步骤:
步骤1,AM收到用户的提交作业,包含keras脚本及运行任务所需要的GPU个。根据GPU尽量分配在同一台物理机上以及分布距离尽量近的原则,进行最佳的资源分配,并将资源分配打包为Pod list(Kubernates的一种资源管理单元),在Kubernates上申请相应的资源。
步骤2,AM收到Kubernates返回的Pods资源后,利用一个CPU Pod资源运行JobScheduler,传递用户的作业信息给Job Scheduler,并将其余的Pods资源交给JobScheduler去管理。
步骤3,AM通过心跳监控Job Scheduler,当发现Job Scheduler故障后,主动向Kubernates删除这个作业的Pod List,完成资源回收。
步骤4,Kubernates负责根据用户的请求在集群上创建对应的Pod,并实现对Pod的管理。
步骤5,Job Scheduler启动后,接受到AM传来的作业信息。
步骤6,如果所有GPU分布在一个pod上,则启动单机版的tensorflow进程,并直接提交用户单机版的脚本,Job Scheduler获取Job状态及进度,并向App Manager报告。
步骤7,对于需要把用户单机脚本做并行自动化处理的情况,Job Scheduler调用Keras的工具类utils生成计算图。
步骤8,Job Scheduler根据生成的计算图,以及GPU分布关系,对OP进行子OP拆分,计算最优的子OP放置方案,将计算图拆解到各个pod之上,并在pod上运行相应的PS进程和Worker进程。
步骤9,一旦PS进程和Worker进行启动成功,Job Scheduler通过Tensorflow内部协议与TF Server交互,完成图的计算。
步骤10,Job Scheduler通过心跳监控PS Node和Worker Node的状态,如果发现任何一个Node故障,则向App Manager报告“Job Complete”事件,并设置结果字段为“异常结束”。
步骤11,PS Node和Worker Node负责相应的Tensorflow子图计算,并在计算过程中,通过Kafka返回作业进度、以及资源占用、日志、性能打点等信息。
步骤12,所有的子图计算完毕后,Job Scheduler向App Manager报告“jobComplete”事件,并设置结果字段为“正常结束”。
步骤13,AM收到Job Scheduler发回的Job完成信息后,向Kerbernates删除这个作业的Pod List,完成资源回收。
使用户的单机深度学习脚本在云环境中进行自动分布式并行运行,属于本专利首创,相较于现有技术,本发明提供一种用户只需要写一个单机的深度学习训练脚本程序,系统将动态分析这个深度学习网络的计算图特征、以及系统资源情况,自动决策最佳的分布式执行策略,并对程序进行改写,再执行之。使得用户的训练脚本能在大规模的云化模型训练平台中实现自动分布式并发,而用户无需关心设备及资源的分布情况。从而提升深度学习训练性能,大大降低算法模型开发难度,提升系统算法效率。
实施例4
本发明的实施例还提供了一种存储介质,该存储介质包括存储的程序,其中,上述程序运行时执行上述任一项所述的方法。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,将用户提交的单机脚本生成有向无环图DAG,其中,DAG包括多个操作实例OP;
S2,根据生成的DAG,以及用户提交的图形处理器GPU资源请求和系统GPU资源对OP进行拆分得到多个子OP;
S3,根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在当前层的计算损耗均小。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本发明的实施例还提供了一种处理器,该处理器用于运行程序,其中,该程序运行时执行上述任一项方法中的步骤。
可选地,在本实施例中,上述程序用于执行以下步骤:
S1,将用户提交的单机脚本生成有向无环图DAG,其中,DAG包括多个操作实例OP;
S2,根据生成的DAG,以及用户提交的图形处理器GPU资源请求和系统GPU资源对OP进行拆分得到多个子OP;
S3,根据每个子OP的计算损耗将多个子OP放置在不同的计算节点上以将多个子OP分为多个层,并在多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在当前层的计算损耗均小。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种数据的分布式运行方法,其特征在于,包括:
将用户提交的单机脚本生成有向无环图DAG,其中,所述DAG包括多个操作实例OP;
根据生成的DAG,以及用户提交的图形处理器GPU资源请求和系统GPU资源对所述OP进行拆分得到多个子OP;
根据每个子OP的计算损耗将所述多个子OP放置在不同的计算节点上以将所述多个子OP分为多个层,并在所述多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在所述当前层的计算损耗小。
2.根据权利要求1所述的方法,其特征在于,其中,所述计算损耗包括:计算开销和网络开销;
通过以下方式确定所述计算开销:根据与GPU对应的每秒浮点操作次数FLOPS确定每个子OP的计算开销;
通过以下方式确定所述网络开销:根据系统初始连接建立时间与数据传输时间确定所述网络开销。
3.根据权利要求2所述的方法,其特征在于,根据每个子OP的计算损耗将所述多个子OP放置在不同的计算节点上以将所述多个子OP分为多个层,并在所述多个层的计算节点上并行运行子OP包括:
基于每一个子OP的计算损耗,通过拓扑排序的方式将所述多个子OP排序为多个层,其中,本层不同的子OP放置在不同的计算节点上,将产生不同的计算损耗,将计算损耗最小的一种放置方案,确定为本层子OP与计算节点之间对应关系的放置方案,不同依赖关系的OP所拆分的子OP放置在不同的层中;
在所述多个层的计算节点上并行运行子OP。
4.根据权利要求3所述的方法,其特征在于,基于每一个子OP的计算损耗,通过拓扑排序的方式将所述多个子OP排序为多个层包括:
通过所述拓扑排序的方式对所述多个子OP进行排序;
将排序后的多子OP分别放置在不同的计算节点上,并基于每一个子OP的计算损耗相加得到每一层的计算损耗;
将与当前层中子OP的最小计算损耗对应的计算节点确定为所述当前层子OP的计算节点。
5.根据权利要求1所述的方法,其特征在于,所述DAG还包括多个变量参数;所述方法还包括:
在根据每个子OP的计算损耗将所述多个子OP分别分发到确定出的所述计算节点上并行运行时,将所述多个变量参数分发到对应的参数节点上并行运行,其中,所述参数节点与所述计算节点是一一对应的。
6.一种数据的分布式运行装置,其特征在于,包括:
生成模块,用于将用户提交的单机脚本生成有向无环图DAG,其中,所述DAG包括多个操作实例OP;
拆分模块,用于根据所生成的DAP图,以及用户提交的用于指示需要的GPU图形处理器的资源请求和系统GPU资源,进行OP的子图拆分,得到子OP;
第一运行模块,用于根据每个子OP的计算损耗将所述多个子OP放置在不同的计算节点上以将所述多个子OP分为多个层,并在所述多个层的计算节点上并行运行子OP;其中,当前层的子OP的计算损耗比其他子OP在所述当前层的计算损耗小。
7.根据权利要求6所述的装置,其特征在于,其中,所述计算损耗包括:计算开销和网络开销;所述装置还包括:
第一确定模块,用于根据与GPU对应的每秒浮点操作次数FLOPS确定每个子OP的计算开销;
第二确定模块,用于根据系统初始连接建立时间与数据传输时间确定所述网络开销。
8.根据权利要求7所述的装置,其特征在于,所述第一运行模块包括:
排序单元,用于基于每一个子OP的计算损耗,通过拓扑排序的方式将所述多个子OP排序为多个层,其中,本层不同的子OP放置在不同的节点上,将产生不同的计算损耗,将计算损耗最小的一种放置方案,确定为本层子OP与节点之间对应关系的放置方案,不同依赖关系的OP所拆分成的子OP放置在不同的层中;
运行单元,用于在所述多个层的计算节点上并行运行子OP。
9.根据权利要求8所述的装置,其特征在于,所述排序单元包括:
排序子单元,用于通过所述拓扑排序的方式对所述多个OP进行排序;
放置子单元,用于将排序后的多个子OP分别放置在不同的计算节点上,并基于每一个子OP的计算损耗相加得到每一层的计算损耗;
确定子单元,用于将与当前层中子OP的最小计算损耗对应的计算节点确定为所述当前层子OP的计算节点。
10.根据权利要求6所述的装置,其特征在于,所述DAG还包括多个变量参数;所述装置还包括:
第二运行模块,用于在根据每个子OP的计算损耗将所述多个子OP分别分发到确定出的所述计算节点上并行运行时,将所述多个变量参数分发到对应的参数节点上并行运行,其中,所述参数节点与所述计算节点是一一对应的。
11.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,所述程序运行时执行权利要求1至5中任一项所述的方法。
12.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810011006.7A CN110018817A (zh) | 2018-01-05 | 2018-01-05 | 数据的分布式运行方法及装置、存储介质及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810011006.7A CN110018817A (zh) | 2018-01-05 | 2018-01-05 | 数据的分布式运行方法及装置、存储介质及处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110018817A true CN110018817A (zh) | 2019-07-16 |
Family
ID=67187276
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810011006.7A Pending CN110018817A (zh) | 2018-01-05 | 2018-01-05 | 数据的分布式运行方法及装置、存储介质及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110018817A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515722A (zh) * | 2019-07-26 | 2019-11-29 | 西安电子科技大学 | 一种在云端实现神经网络模型并行的方法 |
CN110619595A (zh) * | 2019-09-17 | 2019-12-27 | 华中科技大学 | 一种基于多fpga加速器互联的图计算优化方法 |
CN111191794A (zh) * | 2019-12-29 | 2020-05-22 | 广东浪潮大数据研究有限公司 | 一种训练任务处理方法、装置、设备及可读存储介质 |
CN111274034A (zh) * | 2020-01-19 | 2020-06-12 | 北京奇艺世纪科技有限公司 | 模型推理的资源分配方法、装置、计算机设备和存储介质 |
CN111309479A (zh) * | 2020-02-14 | 2020-06-19 | 北京百度网讯科技有限公司 | 一种任务并行处理的实现方法、装置、设备和介质 |
CN111666151A (zh) * | 2020-02-13 | 2020-09-15 | 北京一流科技有限公司 | 拓扑图转换系统及其方法 |
CN111882073A (zh) * | 2020-07-17 | 2020-11-03 | 苏州浪潮智能科技有限公司 | 一种分布式计算图修改的方法和设备 |
WO2021017646A1 (zh) * | 2019-07-29 | 2021-02-04 | 中兴通讯股份有限公司 | 一种业务请求消息发送方法、分布式数据库架构及计算机可读存储介质 |
WO2021155667A1 (zh) * | 2020-02-05 | 2021-08-12 | 北京百度网讯科技有限公司 | 模型训练方法、装置及集群系统 |
WO2022001134A1 (zh) * | 2020-06-28 | 2022-01-06 | 浪潮电子信息产业股份有限公司 | 模型并行训练任务负载均衡方法、装置、设备及存储介质 |
CN114091688A (zh) * | 2021-11-25 | 2022-02-25 | 北京九章云极科技有限公司 | 一种计算资源获取方法、装置、电子设备和存储介质 |
WO2022052973A1 (zh) * | 2020-09-10 | 2022-03-17 | 阿里巴巴集团控股有限公司 | 一种模型处理方法、装置、设备及计算机可读存储介质 |
CN117076095A (zh) * | 2023-10-16 | 2023-11-17 | 华芯巨数(杭州)微电子有限公司 | 一种基于dag的任务调度方法、系统、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819460A (zh) * | 2012-08-07 | 2012-12-12 | 清华大学 | 一种基于预算功率指导的高能效gpu集群系统调度算法 |
CN102902620A (zh) * | 2011-12-23 | 2013-01-30 | 同济大学 | 基于gdb的异构计算调试环境的实现系统 |
CN104021040A (zh) * | 2014-06-04 | 2014-09-03 | 河海大学 | 基于时间约束条件下的云计算关联任务调度方法和装置 |
CN107168782A (zh) * | 2017-04-24 | 2017-09-15 | 复旦大学 | 一种基于Spark与GPU的并行计算系统 |
US20180107513A1 (en) * | 2016-10-17 | 2018-04-19 | International Business Machines Corporation | Leveraging Shared Work to Enhance Job Performance Across Analytics Platforms |
-
2018
- 2018-01-05 CN CN201810011006.7A patent/CN110018817A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902620A (zh) * | 2011-12-23 | 2013-01-30 | 同济大学 | 基于gdb的异构计算调试环境的实现系统 |
CN102819460A (zh) * | 2012-08-07 | 2012-12-12 | 清华大学 | 一种基于预算功率指导的高能效gpu集群系统调度算法 |
CN104021040A (zh) * | 2014-06-04 | 2014-09-03 | 河海大学 | 基于时间约束条件下的云计算关联任务调度方法和装置 |
US20180107513A1 (en) * | 2016-10-17 | 2018-04-19 | International Business Machines Corporation | Leveraging Shared Work to Enhance Job Performance Across Analytics Platforms |
CN107168782A (zh) * | 2017-04-24 | 2017-09-15 | 复旦大学 | 一种基于Spark与GPU的并行计算系统 |
Non-Patent Citations (2)
Title |
---|
邓小鹏 等: "《国际工程政治风险评价与控制》", 31 December 2017, 东南大学出版社 * |
陈杰: "GPU/CPU异构系统任务节能调度方法仿真", 《计算机仿真》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515722A (zh) * | 2019-07-26 | 2019-11-29 | 西安电子科技大学 | 一种在云端实现神经网络模型并行的方法 |
US11824924B2 (en) | 2019-07-29 | 2023-11-21 | Xi'an Zhongxing New Software Co., Ltd. | Service request message sending method, distributed database architecture and computer readable storage medium |
WO2021017646A1 (zh) * | 2019-07-29 | 2021-02-04 | 中兴通讯股份有限公司 | 一种业务请求消息发送方法、分布式数据库架构及计算机可读存储介质 |
CN110619595A (zh) * | 2019-09-17 | 2019-12-27 | 华中科技大学 | 一种基于多fpga加速器互联的图计算优化方法 |
CN111191794A (zh) * | 2019-12-29 | 2020-05-22 | 广东浪潮大数据研究有限公司 | 一种训练任务处理方法、装置、设备及可读存储介质 |
CN111191794B (zh) * | 2019-12-29 | 2023-03-14 | 广东浪潮大数据研究有限公司 | 一种训练任务处理方法、装置、设备及可读存储介质 |
CN111274034A (zh) * | 2020-01-19 | 2020-06-12 | 北京奇艺世纪科技有限公司 | 模型推理的资源分配方法、装置、计算机设备和存储介质 |
CN111274034B (zh) * | 2020-01-19 | 2023-06-30 | 北京奇艺世纪科技有限公司 | 模型推理的资源分配方法、装置、计算机设备和存储介质 |
WO2021155667A1 (zh) * | 2020-02-05 | 2021-08-12 | 北京百度网讯科技有限公司 | 模型训练方法、装置及集群系统 |
CN111666151A (zh) * | 2020-02-13 | 2020-09-15 | 北京一流科技有限公司 | 拓扑图转换系统及其方法 |
CN111666151B (zh) * | 2020-02-13 | 2023-11-03 | 北京一流科技有限公司 | 拓扑图转换系统及其方法 |
US11954522B2 (en) | 2020-02-14 | 2024-04-09 | Beijing Baidu Netcom Science And Technology Co., Ltd. | Method for processing tasks in parallel, device and storage medium |
CN111309479A (zh) * | 2020-02-14 | 2020-06-19 | 北京百度网讯科技有限公司 | 一种任务并行处理的实现方法、装置、设备和介质 |
WO2022001134A1 (zh) * | 2020-06-28 | 2022-01-06 | 浪潮电子信息产业股份有限公司 | 模型并行训练任务负载均衡方法、装置、设备及存储介质 |
US11868817B2 (en) | 2020-06-28 | 2024-01-09 | Inspur Electronic Information Industry Co., Ltd. | Load balancing method, apparatus and device for parallel model training task, and storage medium |
CN111882073A (zh) * | 2020-07-17 | 2020-11-03 | 苏州浪潮智能科技有限公司 | 一种分布式计算图修改的方法和设备 |
WO2022052973A1 (zh) * | 2020-09-10 | 2022-03-17 | 阿里巴巴集团控股有限公司 | 一种模型处理方法、装置、设备及计算机可读存储介质 |
CN114091688A (zh) * | 2021-11-25 | 2022-02-25 | 北京九章云极科技有限公司 | 一种计算资源获取方法、装置、电子设备和存储介质 |
CN117076095B (zh) * | 2023-10-16 | 2024-02-09 | 华芯巨数(杭州)微电子有限公司 | 一种基于dag的任务调度方法、系统、电子设备及存储介质 |
CN117076095A (zh) * | 2023-10-16 | 2023-11-17 | 华芯巨数(杭州)微电子有限公司 | 一种基于dag的任务调度方法、系统、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110018817A (zh) | 数据的分布式运行方法及装置、存储介质及处理器 | |
Madni et al. | An appraisal of meta-heuristic resource allocation techniques for IaaS cloud | |
CN104866374B (zh) | 基于多任务的离散事件并行仿真及时间同步方法 | |
Nie et al. | A GEP-based reactive scheduling policies constructing approach for dynamic flexible job shop scheduling problem with job release dates | |
Djigal et al. | IPPTS: An efficient algorithm for scientific workflow scheduling in heterogeneous computing systems | |
McIntire et al. | Iterated multi-robot auctions for precedence-constrained task scheduling | |
CN103716381B (zh) | 一种分布式系统的控制方法,及管理节点 | |
WO2021008259A1 (zh) | 用于异构架构的数据处理系统及其方法 | |
CN108170530A (zh) | 一种基于混合元启发式算法的Hadoop负载均衡任务调度方法 | |
CN109101339A (zh) | 异构集群中视频任务并行化方法、装置及异构集群系统 | |
Mahato et al. | On scheduling transactions in a grid processing system considering load through ant colony optimization | |
CN111209077A (zh) | 深度学习框架设计方法 | |
CN109067834A (zh) | 基于振荡式惯性权重的离散粒子群调度算法 | |
CN114610474A (zh) | 一种异构超算环境下多策略的作业调度方法及系统 | |
CN110311965A (zh) | 一种云计算环境下的任务调度方法及系统 | |
Lin et al. | Degree-of-node task scheduling of fine-grained parallel programs on heterogeneous systems | |
Canon et al. | Online scheduling of task graphs on heterogeneous platforms | |
Krömer et al. | A comparison of many-threaded differential evolution and genetic algorithms on CUDA | |
Subbaraj et al. | Multi-objective league championship algorithm for real-time task scheduling | |
Yi et al. | Fast training of deep learning models over multiple gpus | |
CN109976873A (zh) | 容器化分布式计算框架的调度方案获取方法及调度方法 | |
Liu et al. | An independent task scheduling algorithm in heterogeneous multi-core processor environment | |
CN108134851B (zh) | 数据传输的服务质量控制方法及装置 | |
Muthu et al. | Optimized scheduling and resource allocation using evolutionary algorithms in cloud environment | |
CN103677996B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190716 |
|
RJ01 | Rejection of invention patent application after publication |