一种适用于分布式机器学习的自动化任务并行的方法及其系统的制作方法

文档序号:10594122阅读:165来源:国知局
一种适用于分布式机器学习的自动化任务并行的方法及其系统的制作方法
【专利摘要】本发明提供了一种适用于分布式机器学习的自动化任务并行方法及其系统,解决现有分布式机器学习编程接口的缺陷:仅提供键值对的读写接口导致系统数据访问行为和应用逻辑紧耦合。该缺陷加剧分布式集群中网络带宽资源竞争,造成编程人员不易对任务进行并行化。本发明系统包括工作节点模块、服务节点模块、主节点模块、张量模块、调度模块、消息跟踪模块、阶段模块、阶段组模块以及执行引擎模块。本发明通过提供较高层次的编程抽象将读写访问行为和应用程序的逻辑进行解耦,运行时系统首先根据服务节点的负载情况进行动态的任务划分,其次将机器学习任务自动化并行执行,大大减轻编程人员编写高并发机器学习应用的负担。
【专利说明】
一种适用于分布式机器学习的自动化任务并行的方法及其系统
技术领域
[0001]本发明属于分布式计算和机器学习交叉技术领域,具体涉及一种适用于分布式机器学习的自动化任务并行的方法及其系统。
【背景技术】
[0002]机器学习算法作为一种挖掘数据价值的传统方法,广泛应用于自然语言处理、文本分析、语音识别、机动车自动驾驶以及生物信息等领域。随着大数据时代的到来,数据的价值越来越凸现出来,尤其是其中蕴含的商业价值,机器学习因而受到重视。然而,随着数据规模以及相应需要学习的模型参数的规模越来越大,单个计算节点由于其内存资源、计算资源以及访存带宽资源等的有限性,已经不能满足大规模机器学习的需求。将传统单节点机器学习进行分布化成为新的和必需的一种趋势。将机器学习分布化之后,可以使用更多的计算节点去处理规模更大的数据,同时缩短训练所得模型所需的时间,以及提高学习的模型精确度。分布式机器学习在工业界和学术界都受到普遍的关注,如:Google利用分布式系统DistBelief训练出了猫脸识别模型,Apache Software Foundat1n开发了基于Hadoop的分布式机器学习框架Mahout以及UC Berkeley AMP实验室开源一个可适用于机器学习算法的分布式计算系统Spar k等。
[0003]分布式机器学习大多数算法具有迭代性质,运行指定次数的迭代过程或者模型参数收敛到某一稳态才结束训练过程。传统的分布式框架诸如MapReduce等由于其同步机制的缺陷,使其不擅长于迭代式计算特性,导致其性能不尽如人意。
[0004]新型的机器学习分布式系统为参数服务器架构,此处所述参数指的是机器学习中用于描述模型参数的键值对(key ,value),或者是二维矩阵,或者多维矩阵,同时多维矩阵也称为张量。参数服务器架构中,集群中的计算节点被分为两类,一类节点称为工作节点,另一类节点称为服务节点。其中,服务节点负责维护全局模型参数,包括响应工作节点针对模型参数的查询和更新等操作;工作节点加载全局训练数据集中的部分数据集到本地内存中,利用应用逻辑规定的算法计算出需要哪些模型参数进行计算,向服务节点发起查询操作,通过网络将所需模型参数传输至本地内存中,然后利用应用逻辑规定的算法和所需模型参数计算出新的模型参数w或者模型参数的更新值A W,在一轮迭代计算完毕后,工作节点向服务节点发起更新和同步全局模型参数等操作。分布式机器学习中工作节点在一次完整的迭代中的行为可以归纳描述为以下步骤:
[0005]1.工作节点加载部分数据集;
[0006]2.工作节点计算出需要的模型参数,通过底层提供的模型访问接口获取所需的模型参数;
[0007]3.根据应用逻辑计算出新的模型参数w或者模型参数的更新值Aw;
[0008]4.工作节点将新计算的模型参数w或者模型参数的更新值Aw推送给服务节点,进行参数更新和同步。
[0009]上述中的步骤2、3、4,是迭代计算中的关键步骤,并且通过全局模型参数读写访问接口获取计算所需的模型参数以及将新计算的模型参数或者模型参数的更新值推送给服务节点,是系统中网络传输的主要源头。
[0010]对于步骤2,由于模型参数的规模巨大,由此引发的网络传输量也是巨大的,在网络带宽资源一定的情况下,对于一个工作节点,迭代计算过程中的网络等待时间大于计算时间,使得整个模型训练的时间加长;当多个工作节点同时触发网络传输时,出现带宽资源竞争现象,网络等待时间会变得更长。工作节点触发传输模型参数的行为和上层应用逻辑密切相关。当前参数服务器架构中提供的底层接口只是全局参数访问的统一接口,这样使得系统的访问全局参数的行为和应用逻辑紧耦合,不利于从系统底层进行优化。
[0011]对于步骤3,工作节点计算模型参数,这一操作是计算密集型的操作,在当前众核、多核时代,如何最大化并行该计算任务,对于提高系统的并发度至关重要。当前的分布式机器学习系统并没有提供相应并行化的编程接口,仅提供全局模型读写访问接口,因此需要编程人员具有并行编程的经验,才能编写高并发的机器学习应用程序。
[0012]对于步骤4,针对参数同步中网络传输的瓶颈,现有2种解决方案:一种是改变同步模型,即允许不同工作节点的迭代进度有一定的差异,当迭代进度的差异达到一定阈值后,再进行批量同步(BSP,Bulk Synchronous Parallel),此种方案一定程度上缓解了网络带宽资源竞争的情况;另一种解决方案是控制参数服务器资源占用情况,为不同工作节点选取不同的同步时间间隔来避免请求突发情况,同时保证选取的时间间隔能够同时满足降低通信频率和确保训练准确率。

【发明内容】

[0013]针对现有技术的上述缺陷或改进需求,本发明提供了适用于分布式机器学习的任务自动化并行的方法及其系统。首先,通过将模型参数的访问接口和应用程序逻辑解耦,这样使得系统对于模型参数的访问行为具有运行时可调节的特性,这样为网络传输的以及系统底层并行化等的优化提供了基础。其次,将应用逻辑分解成若干阶段,并由此构建有向无环图(directed acyclic graph,简称DAG)去描述各个计算阶段之间的依赖关系,运行时系统通过DAG自动化将任务进行划分和并行执行,提高系统并发度。以上方法和系统可以有效地解决现有分布式机器学习系统中网络传输瓶颈问题以及提高系统并发度,从而提高系统的整体性能。
[0014]为了实现上述目的,按照本发明的一个方面,提供了一种适用于分布式机器学习的任务自动化并行方法及其系统,具体包括工作节点模块、服务节点模块、主节点模块、张量模块、调度模块、消息跟踪模块、阶段模块、阶段组模块以及执行引擎模块。其中阶段模块、调度模块都和张量模块相连;阶段模块与阶段组模块相连;引擎执行模块和阶段模块相连;调度模块、张量模块、阶段组都和张量模块相连。
[0015]所述的工作节点模块和服务节点模块,分别是针对工作节点和参数服务节点的行为的抽象描述,且这两个模块对机器学习编程人员是透明的。
[0016]所述的主节点模块,是对于主节点的抽象描述。主节点的作用是协调整个系统的工作流程,如系统的初始化以及系统的结束。前面所述的系统模块,除了工作节点模块、月艮务节点模块、主节点模块外的其他模块都存在于所有节点中。
[0017]所述张量模块用于描述机器学习中模型参数的键值对(key,value)。应用程序需要多种张量对象来描述训练所需的模型参数,每个张量对象具有tensorjd属性作为其唯一标识。张量对象的类型有三种:全局可共享的(global shared)、全局唯一的(globalunique)和本地的(local)。全局可共享的表示该张量对象被分布式节点维护,不同的节点之间维护的数据可以具有交集;全局唯一的表示该张量对象被分布式节点维护,不同的节点之间维护的没有交集;本地的表示该张量对象只存在于一个节点中。张量对象具有加载(load)、拉取(pull)、推送(push)等操作接口供编程人员使用。
[0018]所述阶段模块,用于描述应用程序中某段程序逻辑。本发明把应用程序的整体逻辑分解成不同的阶段,且每个阶段对象含有stage_id属性作为其唯一标识。阶段对象之间,可通过设置依赖函数Set_dependenCy设置它们之间的依赖关系。阶段对象需要若干张量对象作为其输入以及一个可选的输出。对于阶段而言其输入具有2种类型,一种被称为主变量primary_variable,另一种被称为辅助性变量 secondary_variable。主变量的(key,value)对,其key之间没有依赖关系,而辅助性变量的(key,value)对,其key之间具有依赖关系。对于一个阶段,编程人员需要提供核心函数kernel_funct1n,作为此阶段的核心逻辑。同时编程人员还需要提供主变量的键和辅助性变量的键之间的映射函数(key_project 1n函数),运行时系统自动根据主变量的键以及key_project1n函数推导出辅助变量的键。针对阶段的每个主变量和辅助变量,都有一个对应的变量称为update_Variable(3update_variable用于更新对应的变量,而更新逻辑由用户提供的update_funct1n定义。
[0019]所述阶段组模块,用于描述一组阶段。阶段组所表示的这组阶段之间联系紧密。阶段组具有属性group_id作为其唯一标识。阶段组具有run和set_barrie;r这两个接口 ^un方法的可选参数是一个整型数num_run,用于指定此阶段组的执行次数。s e t_bar r i e r接口用于设置同步操作,表示当前此阶段组执行完之后,需要所有工作节点进入栅栏同步等待状态,当所有工作节点的该阶段组执行完之后,才能继续运行。
[0020]所述调度模块用于决策对于某个张量对象,工作节点下阶段需要处理的键的集合keyset。服务节点上的调度模块定时广播其节点上的带宽信息,工作节点上的调度模块根据其获取的服务节点的带宽信息,决策分配工作节点下次需要处理的模型参数的键的集入口 ο
[0021]所述引擎执行模块,用于将阶段组中的阶段及其相互依赖关系描述为有向无环图(directed acyclic graph,简称DAG),在该有向无环图中,图中的结点表示阶段,图中的有向边表示阶段之间的依赖关系,边的尾部的阶段要先于边的头部的阶段执行。
[0022]所述消息跟踪模块,用于记录程序运行中由张量模块、调度模块、阶段组模块、工作节点模块、服务节点模块、主节点模块提交的消息,当消息交付给消息跟踪模块,消息跟踪模块负责将消息传输给接收方,接收方返回消息回执之后,消息跟踪模块负责通知消息的初始发起方,并交付回执消息。
[0023]相应地,本发明还提供了一种适用于分布式机器学习的任务自动化并行方法,用于在分布式机器学习算法场景中进行任务的自动划分以及自动并行执行,包括系统初始化步骤、并行训练步骤和系统结束步骤,其中:
[0024](I)系统初始化步骤:初始化节点拓扑信息以及初始化应用程序逻辑,具体包括以下子步骤:
[0025](1.1)所有节点开始运行,分别读取配置文件,确定自己的角色转子步骤(1.2),所述角色为工作节点或者服务节点或者主节点;
[0026](1.2)工作节点、服务节点分别和主节点通信,告知主节点其节点信息,主节点将收集到的节点信息广播给其他所有节点,转步骤(1.3);
[0027](1.3)工作节点和服务节点收到主节点发送的节点信息之后,初始化节点拓扑信息,用于以后节点之间的通信;转步骤(1.4);
[0028](1.4)工作节点和服务节点初始化应用程序逻辑,运行时系统根据阶段组在程序代码中出现的先后顺序确定阶段组的先后执行顺序,同时构建每个阶段组对应的DAG;转步骤⑵;
[0029](2)并行训练步骤:主节点和服务节点均跳过具体的训练逻辑,进入步骤(3),各个工作节点进入模型训练状态,工作节点根据输入的训练数据子集进行迭代式并行训练,直到满足事先定义好的迭代结束条件,工作节点的行为具体包括下述子步骤:
[0030](2.1)工作节点的运行时系统对于已经确定先后顺序的每个阶段组,将其DAG上的结点进行拓扑排序以确定每个阶段组内所有阶段的执行顺序;转步骤(2.2);
[0031 ] (2.2)将当前未执行的阶段组称为11611:_81'0卯;置11611:_81'0卯为机器学习应用逻辑第一次出现的阶段组;转步骤(2.3),如果当前没有未执行的阶段组,则转步骤(2.6);
[0032](2.3)将11611:_81'0卯表示的阶段组的1'1111方法执行1111111_1'1111(1111111_1'1111是用户启动程序时提供的参数)次,对于单次的run方法,运行时创建一批线程,按照步骤(2.1)所确定的该阶段组内阶段的执行顺序,依次执行所有的阶段的run方法,编号小的阶段先执行,具有相同编号的阶段并行执行,该阶段组执行完num_run次之后转步骤(2.4);
[0033](2.4)工作节点的运行时系统判断当前已经执行num_run次的阶段组是否设置了set_barrier,如果设置了 set_barrier,进行栅栏同步操作;转步骤(2.5);
[0034](2.5)如果当前还有未执行的阶段组,将11以丨_8抓即置为当前未执行的阶段组,转步骤(2.3),否则转步骤(2.6);
[0035](2.6)工作节点运行时判断是否到达迭代结束条件,如果到达结束条件,转步骤
(3),否则转步骤(2.1);
[0036](3)系统结束步骤:工作节点告知主节点其工作完成,主节点检测到所有工作节点的工作完成之后,协调通知所有节点退出程序,具体包括以下子步骤:
[OO3 7 ] (3.1)所有工作节点向主节点发送j ο b _d ο n e消息,主节点收到所有工作节点的job_done消息之后,主节点向所有工作节点和服务节点发送sys_exit消息,转步骤(3.2);
[0038](3.2)工作节点和服务节点收到sys_exit消息之后,工作节点和服务节点向主节点发送sys_exit_ack消息,转步骤(3.3);
[0039](3.3)主节点收到所有工作节点和服务节点发来的sys_exit_ack消息,转步骤
(3.4);
[0040](3.4)所有节点结束程序。
[0041]上述步骤(2.1)中确定阶段组内阶段的执行顺序的流程具体地包括以下子步骤:
[0042](2.1.1)将当前未分配的号码order置为O,将当前入度为O的结点集合nodes置为空,转步骤(2.1.2);
[0043](2.1.2)将当前DAG中入度为O的结点添加到集合nodes中,对结点集合nodes中的所有结点都编号为order ,order自增I;将结点集合nodes中的结点及其所有出边从DAG图中去掉,将nodes集合置为空,转步骤(2.1.3);
[0044](2.1.3)判断当前DAG是否为空,如果为空则转步骤(2.2),否则转步骤(2.1.2)。
[0045]上述步骤(2.3)中所述的阶段的run方法,具体包括以下子步骤:
[0046](2.3.1)工作节点的运行时系统调用该阶段的prepare_variables方法,确定当前阶段的主变量primary_variable要处理的键集合primary_key_set,具体地,首先根据调度模块获取的服务节点的负载情况(LI,L2,…,Ln)以及主变量primary_variable的键在服务节点上的分布情况,将网路负载最低的服务节点上维护的还未被工作节点处理的部分键的集合分配给工作节点,作为下次要处理的键集合parimary_key_set,转子步骤(2.3.2);
[0047](2.3.2)运行时系统根据用户提供的1^7_口1'0」6(31:;[011函数,以及(2.3.1)中确定的主变量的键集合primary_key_Set推导出辅助变量的键集合SeCOndary_key_Set,调用该主变量和辅助变量等张量对象的pul I方法去拉取所需的模型参数;转步骤(2.3.3);
[0048](2.3.3)执行该阶段的核心函数kernel_funct1n,运行时系统自动将主变量的键的集合key_set自动划分为num_threads个部分,创建num_threads个线程并行化执行核心函数,其中num_threads是用户提供的参数,转步骤(2.3.4);
[0049](2.3.4)运行核心函数1^11161_;1^111(31:;[011产生更新变量¥_即(^七6,运行时系统根据用户提供的update_funct1n更新相应的变量V;如果该变量V的类型是全局共享的或者全局唯一的,运行时调用变量V的push函数进行更新,将该变量要更新的(key ,value)对序列化;并将序列化后的数据发送给所有维护此区间key的服务节点,服务节点收到更新数据后,更新其维护的数据。
[0050]上述(2.3.2)步骤中所描述的pull方法具有以下子步骤:
[0051](2.3.2.1)将该张量对象要拉取的键集合key_set序列化,并将序列化的数据发送给维护该段键集合的服务节点,转步骤(2.3.2.2);
[0052](2.3.2.2)服务节点收到pu 11消息之后,将key_set对应的(key,value) 二元组数据序列化,并将序列化后的数据返回给请求方。
[0053]通过上述方法,总体而言本发明所构思的以上技术方案与现有技术相比,具有以下的优点和技术效果:
[0054](I)本发明提供了相较于全局读写访问接口抽象层次更高的一些编程模块,这些模块将读写访问行为和应用程序的逻辑进行了解耦,一方面极大的方便了编程人员编写应用程序,另一方面为系统层面的优化提供了基础;
[0055](2)本发明实现了机器学习任务的自动化任务并行执行,这大大减轻了应用程序人员编写高并发机器学习应用的负担;
[0056](3)本发明开发的运行时系统自动根据各个服务节点的负载情况进行任务的动态划分,充分利用了网络带宽资源。
【附图说明】
[0057]图1是本发明自动化任务并行系统的模块框图;
[0058]图2是本发明自动化任务并行方法的整体工作流程图;
[0059]图3是本发明自动化任务并行方法的系统初始化子工作流程图;
[0060]图4是本发明自动化任务并行方法的并行训练子工作流程图;
[0061]图5是本发明自动化任务并行方法的系统结束子工作流程图;
【具体实施方式】
[0062]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0063]图1是本发明自动化任务并行执行系统的模块框图。如图1所示,本发明的自动化任务并行系统具体包括工作节点模块、服务节点模块、主节点模块、张量模块、调度模块、消息跟踪模块、阶段模块、阶段组模块以及执行引擎模块。其中阶段模块、调度模块都和张量模块相连;阶段模块与阶段组模块相连;引擎执行模块和阶段模块相连;调度模块、张量模块、阶段组都和消息跟踪模块相连。
[0064]工作节点模块和服务节点模块,分别是针对工作节点和参数服务节点的行为的抽象描述,且这两个模块对机器学习编程人员是透明的。
[0065]主节点模块,是对于主节点的抽象描述。主节点的作用是协调整个系统的工作流程,如系统的初始化以及系统的结束。前面所述的系统模块,除了工作节点模块、服务节点模块、主节点模块外的其他模块都存在于所有节点中。
[0066]张量模块用于描述机器学习中模型参数的键值对(key,value)。应用程序需要多种张量对象来描述训练所需的模型参数,每个张量对象具有tensorjd属性作为其唯一标识。张量对象的类型有三种:全局可共享的(global shared)、全局唯一的(global unique)和本地的(local)。全局可共享的表示该张量对象被分布式节点维护,不同的节点之间维护的数据可以具有交集;全局唯一的表示该张量对象被分布式节点维护,不同的节点之间维护的没有交集;本地的表示该张量对象只存在于一个节点中。张量对象具有加载(load)、拉取(pul I)、推送(push)等操作接口供编程人员使用。
[0067]阶段模块,用于描述应用程序中某段程序逻辑。本发明把应用程序的整体逻辑分解成不同的阶段,且每个阶段对象含有stage_id属性作为其唯一标识。阶段对象之间,可通过设置依赖函数set_dependency设置它们之间的依赖关系。阶段对象需要若干张量对象作为其输入以及一个可选的输出。对于阶段而言其输入具有2种类型,一种被称为主变量primary_variable,另一种被称为辅助性变量 secondary_var iabl e。主变量的(key ,value)对,其key之间没有依赖关系,而辅助性变量的(key,value)对,其key之间具有依赖关系。对于一个阶段,编程人员需要提供核心函数kernel_funct1n,作为此阶段的核心逻辑。同时编程人员还需要提供主变量的键和辅助性变量的键之间的映射函数key_project1n,运行时系统自动根据主变量的键以及key_pro ject1n函数推导出辅助变量的键。针对阶段的每个主变量和辅助变量,都有一个对应的变量称为updatejariabledpdatejariable用于更新对应的变量,而更新逻辑由用户提供的updat e_f unc t i on定义。
[0068]阶段组模块,用于描述一组阶段。阶段组所表示的这组阶段之间联系紧密。阶段组具有属性group_id作为其唯一标识。阶段组具有run和set_barrie;r这两个接口。!"皿方法的可选参数是一个整型数num_run,用于指定此阶段组的执行次数。set_barrie;r接口用于设置同步操作,表示当前此阶段组执行完之后,需要所有工作节点进入栅栏同步等待状态,当所有工作节点的该阶段组执行完之后,才能继续运行。
[0069]调度模块用于决策对于某个张量对象,工作节点下阶段需要处理的键的集合key_set。服务节点上的调度模块定时广播其节点上的带宽信息,工作节点上的调度模块根据其获取的服务节点的带宽信息,决策分配工作节点下次需要处理的模型参数的键的集合。
[0070]引擎执行模块,用于将阶段组中的阶段及其相互依赖关系描述为有向无环图(directed acyclic graph,简称DAG),在该有向无环图中,图中的结点表示阶段,图中的有向边表示阶段之间的依赖关系,边的尾部的阶段要先于边的头部的阶段执行。
[0071 ]消息跟踪模块,用于记录程序运行中由张量模块、调度模块、阶段组模块、工作节点模块、服务节点模块、主节点模块提交的消息,当消息交付给消息跟踪模块,消息跟踪模块负责将消息传输给接收方,接收方返回消息回执之后,消息跟踪模块负责通知消息的初始发起方,并交付回执消息。
[0072]图2是本发明自动化任务并行方法的整体工作流程图。如图2所示,本发明自动化任务并行方法的整体工作流程包括以下步骤:
[0073](I)系统初始化步骤:初始化节点拓扑信息以及初始化应用程序逻辑;
[0074](2)并行训练步骤:主节点和服务节点均跳过具体的训练逻辑,进入步骤(3),各个工作节点进入模型训练状态,工作节点根据输入的训练数据子集进行迭代式并行训练,直到满足事先定义好的迭代结束条件;
[0075](3)系统结束步骤:工作节点告知主节点其工作完成,主节点检测到所有工作节点的工作完成之后,协调通知所有节点退出程序。
[0076]图3是本发明自动化任务并行执行方法的系统初始化子工作流程图。如图3所示本发明自动化任务并行执行方法的系统初始化工作流程包括以下步骤:
[0077](1.1)所有节点开始运行,分别读取配置文件,确定自己的角色转子步骤(1.2),所述的角色为工作节点或者服务节点或者主节点;
[0078](1.2)工作节点、服务节点分别和主节点通信,告知主节点其节点信息,主节点将收集到的节点信息广播给其他所有节点,转步骤(1.3);
[0079](1.3)工作节点和服务节点收到主节点发送的节点信息之后,初始化节点拓扑信息,用于以后节点之间的通信;转步骤(1.4);
[0080](1.4)工作节点和服务节点初始化应用程序逻辑,运行时系统根据阶段组在程序代码中出现的先后顺序确定阶段组的先后执行顺序,同时构建每个阶段组对应的DAG;转步骤⑵。
[0081]图4是本发明自动化任务并行方法的并行训练子工作流程图。如图4所示,某工作节点的并行训练子工作流程,包括以下步骤:
[0082](2)并行训练步骤:主节点和服务节点均跳过具体的训练逻辑,进入步骤(3),各个工作节点进入模型训练状态,工作节点根据输入的训练数据子集进行迭代式并行训练,直到满足事先定义好的迭代结束条件,工作节点的行为具体包括下述子步骤:
[0083](2.1)工作节点的运行时系统对于已经确定先后顺序的每个阶段组,将其DAG上的结点进行拓扑排序以确定每个阶段组内所有阶段的执行顺序;转步骤(2.2);
[0084](2.2)将当前未执行的阶段组称为11611:_81'0卯;置11611:_81'0卯为机器学习应用逻辑第一次出现的阶段组;转步骤(2.3),如果当前没有未执行的阶段组,则转步骤(2.6);
[0085](2.3)将next_group表示的阶段组的run方法执行num_run(num_run是用户启动程序时提供的参数)次,对于单次的run方法,运行时创建一批线程,按照步骤(2.1)所确定的该阶段组内阶段的执行顺序,依次执行所有的阶段的run方法,编号小的阶段先执行,具有相同编号的阶段并行执行,该阶段组执行完num_run次之后转步骤(2.4);
[0086](2.4)工作节点的运行时系统判断当前已经执行num_run次的阶段组是否设置了set_barrier,如果设置了 set_barrier,进行栅栏同步操作;转步骤(2.5);
[0087](2.5)如果当前还有未执行的阶段组,将11以丨_8抓即置为当前未执行的阶段组,转步骤(2.3),否则转步骤(2.6);
[0088](2.6)工作节点运行时系统判断是否到达迭代结束条件,如果到达结束条件,转步骤(3),否则转步骤(2.1)。
[0089]图5是本发明自动化任务并行方法的系统结束子工作流程图。如图5所示,本发明自动化任务并行方法的系统结束子工作流程包括以下步骤:
[OO9O ] (3.1)所有工作节点向主节点发送j ο b _d ο n e消息,主节点收到所有工作节点的job_done消息之后,主节点向所有工作节点和服务节点发送sys_exit消息,转步骤(3.2);
[0091](3.2)工作节点和服务节点收到sys_exit消息之后,工作节点和服务节点向主节点发送sys_exit_ack消息,转步骤(3.3);
[0092](3.3)主节点收到所有工作节点和服务节点发来的sys_exit_ack消息,转步骤
(3.4);
[0093](3.4)所有节点结束程序。
[0094]进一步地,步骤(2.1)中确定阶段组内阶段的执行顺序的流程具体地包括以下子步骤:
[0095](2.1.1)将当前未分配的号码order置为O,将当前入度为O的结点集合nodes置为空,转步骤(2.1.2);
[0096](2.1.2)将当前DAG中入度为O的结点添加到集合nodes中,对结点集合nodes中的所有结点都编号为order ,order自增I;将结点集合nodes中的结点及其所有出边从DAG图中去掉,将nodes集合置为空,转步骤(2.1.3);
[0097](2.1.3)判断当前DAG是否为空,如果为空则转步骤(2.2),否则转步骤(2.1.2)。
[0098]进一步地,步骤(2.3)中所述的阶段的run方法,具体包括以下子步骤:
[0099](2.3.I)工作节点的运行时系统调用该阶段的prepare_variables方法,确定当前阶段的主变量primary_variable要处理的键集合primary_key_set,具体地,首先根据调度模块获取的服务节点的负载情况(LI,L2,…,Ln)以及主变量primary_variable的键在服务节点上的分布情况,将网路负载最低的服务节点上维护的还未被工作节点处理的部分键的集合分配给工作节点,作为下次要处理的键集合,转子步骤(2.3.2);
[0?00] (2.3.2)运行时系统根据用户提供的key_project1n函数,以及(2.3.1)中确定的主变量的键集合primary_key_Set推导出辅助变量的键集合SeCOndary_key_Set,调用该主变量和辅助变量等张量对象的pul I方法去拉取所需的模型参数;转步骤(2.3.3);
[0101](2.3.3)执行该阶段的核心函数1?51'1161_如11(31:;[011,运行时系统自动将主变量的键的集合key_set自动划分为num_threads个部分,创建num_threads个线程并行化执行核心函数,其中num_threads是用户提供的参数,转步骤(2.3.4);
[0102](2.3.4)运行核心函数kernel_funct1n产生更新变量v_update,运行时系统根据用户提供的update_funct1n更新相应的变量V;如果该变量V的类型是全局共享的或者全局唯一的,运行时调用变量V的push函数进行更新,将该变量要更新的(key ,value)对序列化;并将序列化后的数据发送给所有维护此区间key的服务节点,服务节点收到更新数据后,更新其维护的数据。
[0103]进一步地,步骤(2.3.2)中所描述的pull方法具有以下子步骤:
[0104](2.3.2.1)将该张量对象要拉取的键集合key_set序列化,并将序列化的数据发送给维护该段键集合的服务节点,转步骤(2.3.2.2);
[0?05] (2.3.2.2)服务节点收到pull的消息之后,将key_set对应的(key ,value)二元组数据序列化,并将序列化后的数据返回给请求方。
[0106]本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种适用于分布式机器学习的自动化任务并行系统,其特征在于,包括工作节点模块、服务节点模块、主节点模块、张量模块、调度模块、消息跟踪模块、阶段模块、阶段组模块以及执行引擎模块;其中阶段模块、调度模块都和张量模块相连;阶段模块与阶段组模块相连;引擎执行模块和阶段模块相连;调度模块、张量模块、阶段组都和消息跟踪模块相连; 所述的工作节点模块和服务节点模块,分别用于针对工作节点和参数服务节点的行为进行抽象描述; 所述的主节点模块,用于对主节点的抽象描述,主节点是用于协调整个系统的工作流程,包括系统的初始化以及系统的结束; 所述张量模块用于描述机器学习中模型参数的键值对(key ,value);应用程序需要多种张量对象来描述训练所需的模型参数,每个张量对象具有tensorjd属性作为其唯一标识;张量对象的类型有三种:全局可共享的(global shared)、全局唯一的(global unique)和本地的(local);全局可共享的表示该张量对象被分布式节点维护,不同的节点之间维护的数据可以具有交集;全局唯一的表示该张量对象被分布式节点维护,不同的节点之间维护的没有交集;本地的表示该张量对象只存在于一个节点中;张量对象具有加载(load)、拉取(pul I)、推送(push)等操作接口供编程人员使用; 所述阶段模块,用于描述应用程序中某段程序逻辑,应用程序的整体逻辑分解成不同的阶段,且每个阶段对象含有stage_id属性作为其唯一标识;阶段对象之间,可通过设置依赖函数set_dependency设置它们之间的依赖关系;阶段对象需要若干张量对象作为其输入以及一个可选的输出;对于阶段对象而言其输入具有2种类型,一种被称为主变量primary_variable,另一种被称为辅助性变量secondary_variable;主变量的(key,value)对,其key之间没有依赖关系,而辅助性变量的(key ,value)对,其key之间具有依赖关系;对于一个阶段,编程人员需要提供核心函数kernelfunct1n,作为此阶段的核心逻辑;同时编程人员还需要提供主变量的键和辅助性变量的键之间的映射函数key_project1n,运行时系统自动根据主变量的键以及key_project1n函数推导出辅助变量的键;针对阶段的每个主变量和辅助变量,都有一个对应的变量称为update_variable ;update_variable用于更新对应的变量,而更新逻辑由用户提供的updat e_func t i on定义; 所述阶段组模块,用于描述一组阶段;阶段组所表示的这组阶段之间联系紧密;阶段组具有属性group_id作为其唯一标识;阶段组具有run和set_barrie;r这两个接口 ;run方法的可选参数是一个整型数num_run,用于指定此阶段组的执行次数;set_barrie;r接口用于设置同步操作,表示当前此阶段组执行完之后,需要所有工作节点进入栅栏同步等待状态,当所有工作节点的该阶段组执行完之后,才能继续运行; 所述调度模块用于决策对于某个张量对象,工作节点下阶段需要处理的键的集合key_set;服务节点上的调度器定时广播其节点上的带宽信息,工作节点上的调度器根据其获取的服务节点的带宽信息,决策分配工作节点下次需要处理的模型参数的键的集合; 所述执行引擎模块,用于将阶段组中的阶段及其相互依赖关系描述为有向无环图(directed acyclic graph,简称DAG),在该有向无环图中,图中的结点表示阶段,图中的有向边表示阶段之间的依赖关系,边的尾部的阶段要先于边的头部的阶段执行; 所述消息跟踪模块,用于记录程序运行中由张量模块、调度模块、工作组模块、工作节点模块、服务节点模块、主节点模块提交的消息,当消息交付给消息跟踪模块,消息跟踪模块负责将消息传输给接收方,接收方返回消息回执之后,消息跟踪模块负责通知消息的初始发起方,并交付回执消息。2.一种适用于分布式机器学习的自动化任务并行方法,其特征在于,包括系统初始化步骤、并行训练步骤和系统结束步骤,其中: (1)系统初始化步骤:初始化节点拓扑信息以及初始化应用程序逻辑,具体包括以下子步骤: (1.1)所有节点开始运行,分别读取配置文件,确定自己的角色转子步骤(1.2),所述角色为工作节点或者服务节点或者主节点; (1.2)工作节点、服务节点分别和主节点通信,告知主节点其节点信息,主节点将收集到的节点信息广播给其他所有节点,转步骤(1.3); (1.3)工作节点和服务节点收到主节点发送的节点信息之后,初始化节点拓扑信息,用于以后节点之间的通信;转步骤(1.4); (1.4)工作节点和服务节点初始化应用程序逻辑,运行时系统根据阶段组在程序代码中出现的先后顺序确定阶段组的先后执行顺序,同时构建每个阶段组对应的DAG;转步骤(2); (2)并行训练步骤:主节点和服务节点均跳过具体的训练逻辑,进入步骤(3),各个工作节点进入模型训练状态,工作节点根据输入的训练数据子集进行迭代式并行训练,直到满足事先定义好的迭代结束条件,工作节点的行为具体包括下述子步骤: (2.1)工作节点的运行时系统对于已经确定先后顺序的每个阶段组,将其DAG上的结点进行拓扑排序以确定每个阶段组内所有阶段的执行顺序;转步骤(2.2); (2.2)将当前未执行的阶段组称为11611:_81'0卯;置11611:_81'0卯为机器学习应用逻辑第一次出现的阶段组;转步骤(2.3),如果当前没有未执行的阶段组,则转步骤(2.6); (2.3)将next_group表示的阶段组的run方法执行num_run(num_run是用户启动程序时提供的参数)次,对于单次的run方法,运行时创建一批线程,按照步骤(2.1)所确定的该阶段组内阶段的执行顺序,依次执行所有的阶段的run方法,编号小的阶段先执行,具有相同编号的阶段并行执行,该阶段组执行完num_run次之后转步骤(2.4); ^.^工作节点的运行时系统判断当前已经执行^^^^“欠的阶段组是否设置了叱忆barrier,如果设置了 set_barrier,进行栅栏同步操作;转步骤(2.5);(2.5)如果当前还有未执行的阶段组,将next_gr0up置为当前未执行的阶段组,转步骤(2.3),否则转步骤(2.6); (2.6)工作节点的运行时系统判断是否到达迭代结束条件,如果到达结束条件,转步骤(3),否则转步骤(2.1); (3)系统结束步骤:工作节点告知主节点其工作完成,主节点检测到所有工作节点的工作完成之后,协调通知所有节点退出程序,具体包括以下子步骤: (3.1)所有工作节点向主节点发送j ο b _ d ο n e消息,主节点收到所有工作节点的j ο b _done消息之后,主节点向所有工作节点和服务节点发送sys_exit消息,转步骤(3.2); (3.2)工作节点和服务节点收到sys_exit消息之后,工作节点和服务节点向主节点发送sys_exit_ack消息,转步骤(3.3); (3.3)主节点收到所有工作节点和服务节点发来的sys_exi t_ack消息,转步骤(3.4); (3.4)所有节点结束程序。3.如权利要求2所述的适用于分布式机器学习的自动化任务并行方法,其特征在于,所述步骤(2.1)中确定阶段组内阶段的执行顺序的流程具体包括以下子步骤: (2.1.1)将当前未分配的号码order置为O,将当前入度为O的结点集合nodes置为空,转步骤(2.1.2); (2.1.2)将当前DAG中入度为O的结点添加到集合nodes中,对结点集合nodes中的所有结点都编号为order ,order自增I;将结点集合nodes中的结点及其所有出边从DAG图中去掉,将nodes集合置为空,转步骤(2.1.3); (2.1.3)判断当前DAG是否为空,如果为空则转步骤(2.2),否则转步骤(2.1.2)。4.如权利要求2所述的适用于分布式机器学习的自动化任务并行方法,其特征在于,步骤(2.3)中所述的阶段的run方法,具体包括以下子步骤: (2.3.1)工作节点的运行时系统调用该阶段的prepare_variabIes方法,确定当前阶段的主变量primary_variable要处理的键集合primary_key_set,具体地,首先根据调度模块获取的服务节点的负载情况(LI,L2,…,Ln)以及主变量primary_variable的键在服务节点上的分布情况,将网路负载最低的服务节点上维护的还未被工作节点处理的部分键的集合分配给工作节点,作为下次要处理的键集合parimary_key_set,转子步骤(2.3.2); (2.3.2)运行时系统根据用户提供的1^7_口1'0」6(31:;[011函数,以及(2.3.1)中确定的主变量的键集合primary_key_set推导出辅助变量的键集合secondary_key_set,调用该主变量和辅助变量等张量对象的pull方法去拉取所需的模型参数;转步骤(2.3.3); (2.3.3)执行该阶段的核心函数kernel_f unc t i on,运行时系统自动将主变量的键的集合key_set自动划分为num_threads个部分,创建num_threads个线程并行化执行核心函数,其中num_threads是用户提供的参数,转步骤(2.3.4); (2.3.4)运行核心函数kernel_funct1n产生更新变量v_update,运行时系统根据用户提供的update_f unct1n更新相应的变量V;如果该变量V的类型是全局共享的或者全局唯一的,运行时调用变量V的push函数进行更新,将该变量要更新的(key,vaIue)对序列化;并将序列化后的数据发送给所有维护此区间key的服务节点,服务节点收到更新数据后,更新其维护的数据。5.如权利要求4所述的适用于分布式机器学习的自动化任务并行方法,其特征在于,步骤(2.3.2)步骤中所描述的pull方法具有以下子步骤: (2.3.2.1)将该张量对象要拉取的键集合key_set序列化,并将序列化的数据发送给维护该段键集合的服务节点,转步骤(2.3.2.2); (2.3.2.2)服务节点收到pul I的消息之后,将key_set对应的(key,value) 二元组数据序列化,并将序列化后的数据返回给请求方。
【文档编号】G06F17/30GK105956021SQ201610255970
【公开日】2016年9月21日
【申请日】2016年4月22日
【发明人】廖小飞, 曹镇山, 郭人通, 刘海坤, 金海 , 陆枫
【申请人】华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1