CN114791856B - 基于K8s的分布式训练任务处理方法、相关设备及介质 - Google Patents
基于K8s的分布式训练任务处理方法、相关设备及介质 Download PDFInfo
- Publication number
- CN114791856B CN114791856B CN202210733504.9A CN202210733504A CN114791856B CN 114791856 B CN114791856 B CN 114791856B CN 202210733504 A CN202210733504 A CN 202210733504A CN 114791856 B CN114791856 B CN 114791856B
- Authority
- CN
- China
- Prior art keywords
- task
- training
- sub
- logic
- service node
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请实施例公开了一种基于K8s的分布式训练任务处理方法、相关设备及介质。该方法应用于K8s集群,K8s集群包括资源构建组件和任务管理组件,方法包括:资源构建组件获取用户提交的分布式训练任务,分布式训练任务包括训练逻辑以及节点部署信息;在训练逻辑添加启动代码;将分布式训练任务提交至任务管理组件;根据节点部署信息在K8s集群中创建映射关系和多个服务节点;各服务节点根据映射关系确定对应的目标启动逻辑,并触发目标启动逻辑,以启动对应的子训练任务。本方案创建服务节点与启动逻辑的映射关系,服务节点可以根据该映射关系确定对应的启动逻辑,通过触发该启动逻辑启动对应的子训练任务,可以实现分布式任务的自动启动。
Description
技术领域
本申请涉及人工智能技术领域,尤其涉及一种基于K8s的分布式训练任务处理方法、相关设备及介质。
背景技术
为了充分利用多台机器的计算资源,对于一些硬件资源的占用率高的分布式训练任务,例如强化学习任务,可以将分布式训练任务分配至不同的机器上分别进行处理。
现有技术中,对于以launchpad为例的分布式训练任务提交工具,所以如果用户希望自己的程序能够在多台机器上运行,首先需要编写多机之间网络数据共享的代码,还要在每一台选定的机器上手动进行任务的启动,同时用户还要注意每一台机器都要有相同的环境配置,才能保证任务能够正常启动。
所以在现有技术中,将分布式训练任务分配至不同的机器上分别进行处理的时候,不能自动启动分布式训练任务。
发明内容
本申请实施例提供了一种基于K8s的分布式训练任务处理方法、相关设备及介质,可以自动启动分布式训练任务。
第一方面,本申请实施例提供了一种基于K8s的分布式训练任务处理方法,所述方法应用于K8s集群,所述K8s集群包括资源构建组件和任务管理组件,所述方法包括:
所述资源构建组件获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;
所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;
所述资源构建组件将所述分布式训练任务提交至所述任务管理组件;
所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点,所述映射关系包括服务节点与启动代码中的启动逻辑的映射关系,所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
第二方面,本申请实施例还提供了一种基于K8s的分布式训练任务处理系统,所述基于K8s的分布式训练任务处理系统包括资源构建组件、任务管理组件以及多个服务节点,其中:
所述资源构建组件,用于获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;将所述分布式训练任务提交至所述任务管理组件;
所述任务管理组件,用于根据所述节点部署信息在K8s集群中创建映射关系和多个所述服务节点,所述映射关系包括服务节点与启动代码中的启动逻辑的映射关系,所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
各所述服务节点,用于根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
在一些实施例中,当所述分布式训练任务携带有任务同步启动信息时,各所述服务节点在执行所述根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤时,具体用于:
根据所述映射关系读取对应的目标启动逻辑;
当各服务节点均读取到对应的目标启动逻辑时,同时触发对应的目标启动逻辑,以同时启动对应的子训练任务。
在一些实施例中,所述训练逻辑包括各子训练任务分别对应的子训练逻辑,所述启动代码包括各子训练任务分别对应的启动逻辑,所述资源构建组件在实现所述根据预设的启动代码生成规则在所述训练逻辑中添加启动代码步骤时,具体用于:
对各子训练逻辑中的运行函数进行序列化处理;
将所述进行过序列化处理的运行函数作为启动逻辑添加至对应的子训练逻辑中。
在一些实施例中,在各服务节点执行所述根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,所述任务管理组件还用于:
监控各子训练任务的运行状态,并将所述运行状态写入运行日志中。
在一些实施例中,所述任务管理组件在执行所述监控各子训练任务的运行状态步骤之后,还用于:
当监控到处于异常运行状态的异常子训练任务时,确定所述异常子训练任务对应的目标任务类型;
根据预设的任务类型与重启机制的对应关系确定与所述目标任务类型对应的目标重启机制;
根据所述目标重启机制重启所述异常子训练任务对应的服务节点。
在一些实施例中,当所述异常子训练任务为强化学习中的learner任务时,所述任务管理组件在执行所述根据所述目标重启机制重启所述异常子训练任务对应的服务节点步骤时,具体用于:
从learner缓存中读取所述异常子训练任务对应的目标训练数据,所述learner缓存用于实时存储对应子训练任务的训练数据;
根据所述目标训练数据重启所述异常子训练任务对应的服务节点;
当所述异常子训练任务为强化学习中的actor任务时,所述任务管理组件在执行所述根据所述目标重启机制重启所述异常子训练任务对应的服务节点步骤时,具体用于:
在对应的服务节点中直接重启所述异常子训练任务对应的服务节点。
在一些实施例中,所述子训练任务包括强化学习任务的actor任务和learner任务,各所述服务节点在执行所述根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,还用于:
当所述actor任务对应的服务节点获取到训练样本之后,将所述训练样本存储至对应的actor缓存中;
所述learner任务对应的服务节点根据预设的学习速度从所述actor缓存中读取所述训练样本进行学习。
在一些实施例中,所述节点部署信息包括服务节点部署信息和代码拉取节点部署信息,所述任务管理组件在实现所述根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点步骤时,具体用于:
根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点;
此时,所述任务管理组件在执行所述根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点步骤之后,还用于:
所述任务管理组件根据所述代码拉取节点部署信息在对应服务节点中部署代码拉取容器,所述代码拉取容器用户供用户进行对应服务节点的代码拉取。
在一些实施例中,所述节点部署信息还包括第三方资源依赖需求信息,所述任务管理组件在执行根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点步骤之后,还用于:
在与所述第三方资源依赖需求信息对应的服务节点中安装所述第三方资源依赖需求信息所描述的第三方资源。
第三方面,本申请实施例还提供了一种计算机设备,其包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时可实现上述方法。
本申请实施例中,在K8s集群设置资源构建组件和任务管理组件,所述方法包括:在资源构建组件获取用户提交的分布式训练任务后,由于所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码,所以所述资源构建组件将所述分布式训练任务提交至所述任务管理组件后,能够使得所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点,而由于该映射关系包括服务节点与启动代码中的启动逻辑的映射关系,且所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑,所以,当基于K8S集群实施上述分布式任务(尤其是复杂训练任务,例如大型游戏类)时,K8s集群中的各服务节点可以直接根据所述映射关系确定对应的目标启动逻辑,再通过触发所述目标启动逻辑以启动对应的子训练任务,即实现在k8s集群上自动启动分布式训练任务,以完成对该分布式训练任务的训练。相较于现有技术中需要手动进行分布式训练任务的启动,一方面,本方案通过在K8s集群中进行服务节点的部署,能够解决多机运行分布式训练任务时的代码环境的依赖问题;另一方面,本方案通过任务管理组件在K8s集群中创建服务节点与启动逻辑的映射关系,K8s集群中的服务节点可以快速地根据该映射关系确定对应的目标启动逻辑,再通过触发该目标启动逻辑启动对应的子训练任务,故本方案不需要手动启动训练任务,实现了分布式训练任务的自动启动。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供K8s集群的一框架示意图;
图2为本申请实施例提供的基于K8s的分布式训练任务处理方法的流程示意图;
图3a为本申请实施例提供的子训练任务读取对应启动逻辑的一个场景示意图;
图3b为本申请实施例提供的基于K8s的分布式训练任务处理方法的一个框架示意图;
图4为本申请另一实施例提供的基于K8s的分布式训练任务处理方法的流程示意图;
图5为本申请实施例中多机分布式训练速度的一个曲线示意图;
图6为本申请实施例中单机分布式训练速度的一个曲线示意图;
图7为本申请另一实施例提供的基于K8s的分布式训练任务处理方法的一个总体流程示意图;
图8为本申请实施例提供的基于K8s的分布式训练任务处理系统的示意性框图;
图9为本申请实施例提供的计算机设备的示意性框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和 “包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/ 或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
需要说明的是,本申请包括术语:
Kubernetes(简称:K8s):是一个用于自动部署、扩展和管理容器化应用程序的开源系统;而且k8s可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。另外,k8s也可以将运行容器化应用程序的多组主机聚集在一起,以使k8s能够轻松高效地管理这些集群。其中,这些集群可以包括跨越公共云、私有云或混合云部署主机。
LpJob:为本申请中的K8s自定义资源,包括各节点的启动代码、各节点的运行程序以及节点部署信息。
K8sOperator:是一种封装、管理和部署K8s 应用的方法,用于监视自定义资源类型并采取特定于应用的操作,确保当前状态与该资源的理想状态相符;会持续监控正在运行的应用,可备份数据,从故障中恢复,以及随着时间的推移自动升级;K8sOperator 几乎可执行任何操作:扩展复杂的应用,应用版本升级,甚至使用专用硬件管理计算集群中节点的内核模块;可以获取人类运维知识并将其编码到软件中,用于管理和部署K8s 工作负载,同时消除手动任务。
任务管理组件(lp-Operator):为本申请中在K8s 集群上管理调度LpJob的K8sOperator,该组件是基于kubebuilder所编写的,其主要使用了 controller-runtime这个构建K8s Operator所需要使用的库,可以依据LpJob当中的内容,对机器资源作出相应的编排调度。
资源构建组件(python sdk):是用户与该基于K8s的分布式训练任务处理系统进行交互的部分,在一些实施例中,该部分的代码基于现有的launchpad 进行编写,该pythonsdk复用了launchpad所提供的PyNode、CourierNode以及ReverbNode等各种节点类,同时重写了launchpad中的launch接口的launch函数,对于相同的节点序列输入,通过这个launch函数可以实现基于K8s的远程多机器上任务的启动。
软件开发套件(software development kit,sdk):是指为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具开发包。
发射台(Launchpad):是一个用户友好、表达力很强的分布式框架,尤其适合算法工作人员,无需太多对于分布式应用程序的了解,即可写出健壮的分布式训练任务的程序。Launchpad 使用 python 实现,若要定义一个服务,只需编写一个简单的 python类,例如以下代码:
#create an empty program graph.
p=Program(`producer-consumer`):
#Add nodes producing a range of data.
with p.group(`producer`):
h1= p.add_node(RangeNode(0,9))
H2= p.add_node(RangeNode(10,19))
#Add a nodes to consume from producers.
with p.group(`consumer`):
p.add_node(ConsumerNode([h1,h2])。
豌豆荚(Pod):是K8s的最小部署单元;而且一个pod里面可以部署至少一个容器。
配置字典(Configmap):是一种K8s中api对象,而且configmap可以用来将非加密数据保存到键值对中,以使该configmap可以用作环境变量、命令行参数或者存储卷中的配置文件。
微服务(service):是一种k8s中的抽象资源,它定义了一组pod的逻辑集合和一个用于访问它们的策略,以使该service用于负责这一组pod之间的网络通信。
增强型调度器(volcano):是一种K8s批处理系统,而且volcano用于实现成组调度(Gang Scheduling),即一组容器要么都成功,要么都别调度。
本申请实施例提供了一种基于K8s的分布式训练任务处理方法、相关设备及介质。
该基于K8s的分布式训练任务处理方法的执行主体可以是本申请实施例提供的基于K8s的分布式训练任务处理系统,或者集成了该基于K8s的分布式训练任务处理系统的计算机设备,其中,该基于K8s的分布式训练任务处理系统可以采用硬件或者软件的方式实现,该计算机设备可以为终端或服务器。
请参阅图1,图1为本申请实施例提供的K8s集群的一个框架示意图。该基于K8s的分布式训练任务处理方法应用于图1中的基于K8s的分布式训练任务处理系统10中,基于K8s的分布式训练任务处理系统10包括资源构建组件11、任务管理组件12以及多个服务节点13,该方法包括:该资源构建组件11获取用户提交的分布式训练任务,其中该分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;根据预设的启动代码生成规则在该训练逻辑中添加启动代码;将该分布式训练任务提交至该任务管理组件12;然后任务管理组件12根据该节点部署信息在K8s集群中创建映射关系和多个服务节点13,其中,该映射关系包括服务节点13与启动代码中的启动逻辑的映射关系,该服务节点13中部署一个子训练任务,该子训练任务对应该启动代码中的一个启动逻辑;最后各服务节点13根据该映射关系确定对应的目标启动逻辑,并触发该目标启动逻辑,以启动对应的子训练任务。
其中,本申请提供的基于K8s的分布式训练任务处理方法为多种分布式训练任务提供处理,以下实施例以分布式训练任务为分布式强化学习任务为例对本申请提供的基于K8s的分布式训练任务处理方法进行详细说明。
其中,在强化学习任务中,通常至少要分成以下两个任务:行动者(actor)任务和学习者(learner)任务。其中,actor任务用于与环境不断交互获取数据样本;learner任务用于不断地从获取的数据样本中进行模型的训练,最后输出一个强化学习的模型。
图2是本申请实施例提供的基于K8s的分布式训练任务处理方法的流程示意图。如图2所示,该方法包括以下步骤S110-150。
其中,本申请提供的基于K8s的分布式训练任务处理方法由基于K8s的分布式训练任务处理系统实现,基于K8s的分布式训练任务处理系统主要包括两个组件,分别为资源构建组件以及任务管理组件。
S110、资源构建组件获取用户提交的分布式训练任务,该分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息。
在一些实施例中,用户可以基于 launchpad 编写分布式强化学习任务。
其中,分布式训练任务的训练逻辑包括各子训练任务分别对应的子训练逻辑。
在本实施例中,子训练任务包括强化学习任务中的actor任务以及learner任务。
在一些实施例中,各子训练任务的节点部署信息为节点的拓扑结构,包括各种类型的子训练任务对应的节点个数(即各子训练任务的数量,例如actor任务的数量以及learner任务的数量),以及每个节点对应的服务节点(pod)的数量,其中,一类的子训练任务对应至少一个节点,一个节点对应至少一个pod,一台机器中可部署一个或多个节点,以上信息均可通过节点的拓扑结构进行声明,可通过用户编写分布式强化学习任务时确定,也可以通过预设的节点拓扑结构模板确定,具体此处不做限定。
S120、资源构建组件根据预设的启动代码生成规则在该训练逻辑中添加启动代码。
本实施例中,为了后续可以实现多台机器中分布式训练任务的自动运行,需要为训练任务生成启动代码。
其中,在一些实施例中,分布式训练任务包括多个子训练任务,训练逻辑包括各子训练任务分别对应的子训练逻辑。例如,以分布式训练任务为分布式强化学习任务为例,子训练任务包括actor任务及learner任务,子训练逻辑包括actor任务对应的样本获取逻辑以及learner任务对应的模型训练逻辑。
在一些实施例中,actor任务包括actor-0任务、actor-1任务…,learner任务包括learner-0任务、learner-1任务…,此时,子训练逻辑包括actor-0任务对应的actor-0样本获取逻辑、actor-1任务对应的actor-1样本获取逻辑…以及learner-0任务对应的learner-0模型训练逻辑、learner-1任务对应的learner-1模型训练逻辑…。
相应的,该资源构建组件根据预设的启动代码生成规则在该训练逻辑中添加启动代码,包括:所述资源构建组件对各子训练逻辑中的运行函数进行序列化处理,以在所述各子训练逻辑中分别添加对应的启动逻辑。其中,子训练逻辑在启动逻辑中的添加位置在启动代码生成规则中声明,在一些实施例中,可以将启动逻辑添加到对应的子训练逻辑的头部或者尾部,方便后续任务管理组件对启动逻辑的提取。
在一些实施例中,该序列化处理为pickle序列化处理,具体为二进制处理。
本实施例将运行函数进行序列化处理,可以使得后续pod在运行时可以识别到对应的启动逻辑。
在一些实施例中,当资源构建组件的代码基于现有的launchpad 进行编写的时候,该启动代码生成规则为重写的launchpad中的launch接口的launch函数。
S130、资源构建组件将该分布式训练任务提交至任务管理组件。
本实施例中,资源构建组件将添加了启动代码的分布式训练任务提交至该任务管理组件。
具体地,在一些实施例中,将递交至任务管理组件的分布式训练任务写入预设的LpJob中,然后将该LpJob提交至任务管理组件中,使得后续任务管理组件将根据该LpJob在K8s集群的多台机器上分别进行对应服务节点的创建。
具体地,在一些实施例中,资源构建组件获取到分布式训练任务之后,将针对该分布式训练任务中的节点部署信息进行分析,得到该分布式训练任务中各子训练任务对应的节点个数以及各节点对应的pod的数量,例如各actor任务对应的节点数量以及各learner任务对应的节点数量,以及每个节点分别对应的pod的数量,然后将分析结果写入LpJob,并将添加了启动代码的训练逻辑写入LpJob中,使得后续任务管理组件将根据该LpJob在K8s集群的多台机器上分别进行对应任务的创建。
S140、任务管理组件根据该节点部署信息在K8s集群中创建映射关系和多个服务节点。
其中,该映射关系包括服务节点与启动代码中的启动逻辑的映射关系,一些实施方式中,该映射关系可如下表1所示:
表1
服务节点 | 启动逻辑 |
actor-0 | run(100000) |
actor-1 | run(101000) |
…… | … |
learner-0 | run(200000) |
learner-1 | run(201000) |
…… | …… |
该服务节点中部署一个子训练任务,该子训练任务对应该启动代码中的一个启动逻辑。例如图3a所示的子训练任务读取对应启动逻辑的示意图,本实施例中,将上述映射关系写入configmap字段中,每个pod中都将该configmap字段挂载到其自身的文件目录中,每个pod在启动时,都可从根据自身的节点名称从其自身的文件目录中读取到对应的启动逻辑。
需要说明的是,本实施例中的启动代码包括各pod分别对应的启动逻辑,分布式训练任务包括多个子训练任务(即多个类型的子训练任务),分布式训练任务的训练逻辑包括各子训练任务分别对应的子训练逻辑。
具体地,当任务管理组件获取到分布式训练任务之后,将会根据节点部署信息在K8s集群中进行pod的创建,并且,提取各子训练逻辑中的启动逻辑,然后根据pod与子训练逻辑的对应关系确定pod与启动逻辑的对应关系,根据各pod与启动逻辑的对应关系确定上述映射关系。
其中,任务管理组件在生成pod时,需要在pod中进行对应的子训练任务的部署时,具体地,确定子训练任务对应的子训练逻辑,然后将对应的子训练逻辑部署在对应的pod中,实现子训练任务在pod中的部署。
需要说明的是,任务管理组件生成各服务节点与启动逻辑的映射关系(configmap)之后,将会将该映射关系这一字段挂载到每个pod的文件目录中,方便后续pod启动时,在自身目录中查找对应的启动逻辑。
本实施例中,当资源构建组件将LpJob提交至任务管理组件之后,任务管理组件将对该 LpJob 进行管理,负责创建各种子资源,从而将任务真正运行起来。
其中,任务管理组件在创建子资源时,需要根据该LpJob创建出多个pod,一个service以及一个configmap。
在configmap的字段中填写了每一个pod的节点名称,以及节点名称对应的启动逻辑,每个pod中都将该configmap的这一字段挂载到了其文件目录中。
例如,每个pod可能有这样的名字:actor-0,actor-1,…,learner-0,learner-1,…),configmap存储有各pod的名字,以及各pod名字对应的启动逻辑。
其中,创建service负责pod 之间的网络通信,在强化学习任务的训练场景中,需要将service的Cluster IP设置为None,并将selector限定至该LpJob对应的pod上,即可为这些pod创建出对应的dns record,这样 pod之间就可以通过形同{podName}.{svcName}这样的域名进行网络通信。
S150、各服务节点根据该映射关系确定对应的目标启动逻辑,并触发该目标启动逻辑,以启动对应的子训练任务。
具体地,当pod要运行时,各pod将根据自己的名字在自身目录中挂载的configmap中确定对应的目标启动逻辑,然后触发该目标启动逻辑,以启动对应的子训练任务,即运行子训练任务对应的子训练逻辑。
具体地,每个pod 根据自己的名字在自己存储的configmap中找到对应的启动逻辑,然后pod就可以正常执行自己的程序,启动对应的子训练任务了。
在一些实施例中,存在一些分布式训练任务需要所有服务同时启动,此时,当该分布式训练任务携带有任务同步启动信息时,步骤S150包括:各服务节点根据该映射关系读取对应的目标启动逻辑;当各服务节点均读取到对应的目标启动逻辑时,各服务节点同时触发对应的目标启动逻辑,以同时启动对应的子训练任务。
例如,若用户启用了gangScheduling的特性(此时分布式训练任务将携带有任务同步启动信息),任务管理组件会保证在只有所有的pod都读取对应的启动逻辑时,才同时触发对应的多个启动逻辑,使得各子训练任务同时启动。
具体地,若用户启用了gangScheduling的特性,在这种情况下会创建podGroup资源,podGroup基于第三方项目volcano进行构建,volcano为任务管理组件的一项依赖库。
在一些实施例中,该节点部署信息包括服务节点部署信息和代码拉取节点部署信息。在拉取各子训练任务的代码后,任务管理组件根据该节点部署信息在该K8s集群中创建映射关系和多个服务节点,具体来说:
任务管理组件根据该服务节点部署信息在该K8s集群中创建多个该服务节点和该映射关系;此时,任务管理组件根据该服务节点部署信息在该K8s集群中创建多个该服务节点和该映射关系之后,该任务管理组件根据该代码拉取节点部署信息在对应服务节点中部署代码拉取容器,该代码拉取容器用户供用户进行对应服务节点的代码拉取。
上文“代码拉取容器”是指具有代码拉取处理功能的容器;而且本申请实施例不限定该代码拉取容器的实施方式,例如,可以采用git工具、minio工具等进行实施。
可见,通过该部署代码拉取容器,可以在分布式训练任务过程中,为用户提供拉取代码的服务,满足用户在分布式训练过程中的代码拉取需求。
在一些实施例中,该节点部署信息还包括第三方资源依赖需求信息(例如,在根目录下面的requirements.txt中声明对该第三方库的依赖等),此时,该任务管理组件根据该服务节点部署信息在该K8s集群中创建多个该服务节点和该映射关系之后,包括:该任务管理组件在与该第三方资源依赖需求信息对应的服务节点中安装该第三方资源依赖需求信息所描述的第三方资源,以避免因未安装该第三方库而导致的不良影响。如项目依赖pytorch,只需在项目根目录下面的requirements.txt声明对应的依赖,就会在pod启动时进行依赖安装。
在本实施例中,用户可以特意声明一些需要单独安装的第三方库,pod启动时即可自行进行依赖安装,解决了分布式训练任务中的依赖问题。
在一些实施例中,当本实施例中的子训练任务为强化学习任务的actor任务或learner任务时,为使得learner任务的学习速度可控以及为了方便重复利用训练样本,当该actor任务对应的服务节点获取到训练样本之后,将该训练样本存储至对应的actor缓存中;然后该learner任务对应的服务节点根据预设的学习速度从该actor缓存中读取该训练样本进行学习。
为了更好地理解本申请提供的基于K8s的分布式训练任务处理方法,请参阅图3b,图3b为本申请实施例提供的基于K8s的分布式训练任务处理方法的一个框架示意图,从该示意图可以看出,任务管理组件会从资源构建组件上获取到新创建的LpJob,并依据LpJob中的内容,作出相应的编排调度,为不同的子训练任务进行pod的创建,同时为pod 配置service,令pod能够通过域名来互相访问,并创建一个映射关系,其中该映射关系包括pod与启动逻辑的映射关系,并且将该映射关系挂在到所有pod的目录中,这样pod运行之后就可以读取对应的启动逻辑来启动对应的子训练任务,图3b中还有一个可选的特性,通过volcano scheduler(调度器)来进行gang调度,保证所有pod能够同时启动。
其中,本申请中创建的服务节点部署在K8s集群中的多台机器中,本申请在实现分布式训练任务的在多机上自动启动的时候,不需要手动进行任务的启动,并且不需要保证每一台机器上都有相同的配置环境,所以本申请简化了在多机上进行任务分布式处理的步骤,提高了分布式训练任务的提交效率。
此外,对于一些硬件资源的占用率高的任务,例如强化学习任务,使用本申请中的一种基于K8s的分布式训练任务处理方法,可以充分利用多台机器的计算资源,提高了资源利用率以及强化训练的速度。
图4是本申请另一实施例提供的一种基于K8s的分布式训练任务处理方法的流程示意图。如图4所示,本实施例的基于K8s的分布式训练任务处理方法包括步骤S210-S270。其中步骤S210-S250与上述实施例中的步骤S110-S150类似,在此不再赘述。下面详细说明本实施例中所增加的步骤S260-S270。
S260、任务管理组件监控各子训练任务的运行状态,并将该运行状态写入运行日志中。
任务管理组件在pod正常运行时,会对pod中的子训练任务的运行状态进行监控,并记录各子训练任务当前的运行状态(成功完成、异常、正在运行中以及重启),具体地,任务管理组件会将监控到的各子训练任务的运行状态写回至 LpJob 的运行日志中( Status栏目)中,用户在查询 LpJob 时可以看到该栏目,以此判断当前任务是否是正常运行的状态。
S270、当监控到处于异常运行状态的异常子训练任务时,任务管理组件重启该异常子训练任务对应的服务节点。
在某一个 pod 出现意外退出时,任务管理组件会捕获到这一现象,并尝试将 pod重启。
在一些实施例中,具体地,步骤S270包括:当监控到处于异常运行状态的异常子训练任务时,该任务管理组件确定该异常子训练任务对应的目标任务类型;该任务管理组件根据预设的任务类型与重启机制的对应关系确定与该目标任务类型对应的目标重启机制;该任务管理组件根据该目标重启机制重启该异常子训练任务对应的服务节点。
可见,本申请为不同的任务类型配置了不同的重启机制,针对不同任务类型的特性进行个性化重启,可提高任务的训练效率。
例如,当该处于异常运行状态的服务节点为强化学习中的learner任务时,为了使得learner任务在重启之后根据之前学习到的训练数据继续训练,此时,该任务管理组件根据该目标重启机制重启该异常子训练任务对应的服务节点,包括该任务管理组件从learner缓存中读取该异常子训练任务对应的目标训练数据,该learner缓存用于实时存储对应子训练任务的训练数据;该任务管理组件根据该目标训练数据重启该异常子训练任务对应的服务节点;
当该处于异常运行状态的服务节点为强化学习中的actor任务时,由于actor用于与环境不断交互获取训练样本,本实施例会实时将获取到的训练样本存至actor缓存或者实时发送给对应的learner任务对应的pod中,所以actor进行重启不需要考虑之前获取到的数据,所以当该异常子训练任务为强化学习中的actor任务时,该任务管理组件根据该目标重启机制重启该异常子训练任务对应的服务节点,包括:该任务管理组件在对应的服务节点中直接重启该异常子训练任务对应的服务节点。
在一些实施例中,当任务训练完成,或者不需要在进行任务的训练时,接收用户发出的删除 LpJob 的指令,然后任务管理组件根据该指令将 LpJob对应的pod 、service和configmap 清理。
目前实验结果表明,通过本实施例提供的基于K8s的分布式训练任务处理方法提供的分布式强化学习框架(python SDK+lp-Operator)可以成功完成 TiKick 的训练任务。Google Football 是一个 Google 推出的足球游戏,用于强化学习的研究工作,而TiKick则是最近推出的针对 Google Football 所训练的人工智能项目。在 TiKick 项目的一个场景测试中,其使用的是 mpe 算法,在 actor 数量为2时,使用该框架可以达成5600 FPS的训练速度,对比单机的分布式其最大的训练速度大概为 3400 FPS ,其中,多机分布式训练速度曲线图如图5所示(横坐标表示训练阶段(step),纵坐标表示fps),单机分布式训练速度如图6所示(横坐标表示step,纵坐标表示fps)。
为了更方便地理解本申请提供的一种基于K8s的分布式训练任务处理方法,请参阅图7,图7为本申请实施例提供的基于K8s的分布式训练任务处理方法的一个总体流程示意图,用户编写完需递交的分布式训练任务(如launchpad程序)之后,资源构建组件根据用户编写的launchpad程序生成LpJob,然后将该LpJob提交至任务管理组件,任务管理组件根据K8s集群中的LpJob,在K8s集群中的多台机器中为该LpJob生成相关资源,并开始运行资源对应的任务,并且任务管理组件需要对运行的资源进行维护,如果监测到有出错的任务则重启该出错的任务,任务完成后,用户可以获得生成的模型文件,亦可访问训练过程中的日记。
图8是本申请实施例提供的一种基于K8s的分布式训练任务处理系统的示意性框图。如图8所示,对应于以上基于K8s的分布式训练任务处理方法,本申请还提供一种基于K8s的分布式训练任务处理系统800。该基于K8s的分布式训练任务处理系统800包括资源构建组件801、任务管理组件802以及多个服务节点803,其中:
所述资源构建组件801,用于获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;将所述分布式训练任务提交至所述任务管理组件802;
所述任务管理组件802,用于根据所述节点部署信息在K8s集群中创建映射关系和多个所述服务节点803,所述映射关系包括服务节点803与启动代码中的启动逻辑的映射关系,所述服务节点803中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
各所述服务节点803,用于根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
在一些实施例中,当所述分布式训练任务携带有任务同步启动信息时,各所述服务节点803在执行所述根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤时,具体用于:
根据所述映射关系读取对应的目标启动逻辑;
当各服务节点803均读取到对应的目标启动逻辑时,同时触发对应的目标启动逻辑,以同时启动对应的子训练任务。
在一些实施例中,所述训练逻辑包括各子训练任务分别对应的子训练逻辑,所述启动代码包括各子训练任务分别对应的启动逻辑,所述资源构建组件801在实现所述根据预设的启动代码生成规则在所述训练逻辑中添加启动代码步骤时,具体用于:
对各子训练逻辑中的运行函数进行序列化处理;
将所述进行过序列化处理的运行函数作为启动逻辑添加至对应的子训练逻辑中。
在一些实施例中,在各服务节点803执行所述根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,所述任务管理组件802还用于:
监控各子训练任务的运行状态,并将所述运行状态写入运行日志中。
在一些实施例中,所述任务管理组件802在执行所述监控各子训练任务的运行状态步骤之后,还用于:
当监控到处于异常运行状态的异常子训练任务时,确定所述异常子训练任务对应的目标任务类型;
根据预设的任务类型与重启机制的对应关系确定与所述目标任务类型对应的目标重启机制;
根据所述目标重启机制重启所述异常子训练任务对应的服务节点803。
在一些实施例中,当所述异常子训练任务为强化学习中的learner任务时,所述任务管理组件802在执行所述根据所述目标重启机制重启所述异常子训练任务对应的服务节点803步骤时,具体用于:
从learner缓存中读取所述异常子训练任务对应的目标训练数据,所述learner缓存用于实时存储对应子训练任务的训练数据;
根据所述目标训练数据重启所述异常子训练任务对应的服务节点803;
当所述异常子训练任务为强化学习中的actor任务时,所述任务管理组件802在执行所述根据所述目标重启机制重启所述异常子训练任务对应的服务节点803步骤时,具体用于:
在对应的服务节点803中直接重启所述异常子训练任务对应的服务节点803。
在一些实施例中,所述子训练任务包括强化学习任务的actor任务和learner任务,各所述服务节点803在执行所述根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,还用于:
当所述actor任务对应的服务节点803获取到训练样本之后,将所述训练样本存储至对应的actor缓存中;
所述learner任务对应的服务节点803根据预设的学习速度从所述actor缓存中读取所述训练样本进行学习。
在一些实施例中,所述节点部署信息包括服务节点803部署信息和代码拉取节点部署信息,所述任务管理组件802在实现所述根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点803步骤时,具体用于:
根据所述服务节点803部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点803;
此时,所述任务管理组件802在执行所述根据所述服务节点803部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点803步骤之后,还用于:
所述任务管理组件802根据所述代码拉取节点部署信息在对应服务节点803中部署代码拉取容器,所述代码拉取容器用户供用户进行对应服务节点803的代码拉取。
在一些实施例中,所述节点部署信息还包括第三方资源依赖需求信息,所述任务管理组件802在执行根据所述服务节点803部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点803步骤之后,还用于:
在与所述第三方资源依赖需求信息对应的服务节点803中安装所述第三方资源依赖需求信息所描述的第三方资源。
需要说明的是,所属领域的技术人员可以清楚地了解到,上述基于K8s的分布式训练任务处理系统和各单元的具体实现过程,可以参考前述方法实施例中的相应描述,为了描述的方便和简洁,在此不再赘述。
上述基于K8s的分布式训练任务处理系统可以实现为一种计算机程序的形式,该计算机程序可以在如图9所示的计算机设备上运行。
请参阅图9,图9是本申请实施例提供的一种计算机设备的示意性框图。该计算机设备900可以是终端,也可以是服务器,该计算机设备900为K8s集群中的设备,该K8s集群包括资源构建组件和任务管理组件。
参阅图9,该计算机设备900包括通过系统总线901连接的处理器902、存储器和网络接口905,其中,存储器可以包括非易失性存储介质903和内存储器904。
该非易失性存储介质903可存储操作系统9031和计算机程序9032。该计算机程序9032包括程序指令,该程序指令被执行时,可使得处理器902执行一种基于K8s的分布式训练任务处理方法。
该处理器902用于提供计算和控制能力,以支撑整个计算机设备900的运行。
该内存储器904为非易失性存储介质903中的计算机程序9032的运行提供环境,该计算机程序9032被处理器902执行时,可使得处理器902执行一种基于K8s的分布式训练任务处理方法。
该网络接口905用于与其它设备进行网络通信。本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备900的限定,具体的计算机设备900可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
其中,所述处理器902用于运行存储在存储器中的计算机程序9032,以实现如下步骤:
通过所述资源构建组件获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;
通过所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;
通过所述资源构建组件将所述分布式训练任务提交至所述任务管理组件;
通过所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点,所述映射关系包括服务节点与启动代码中的启动逻辑的映射关系,所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
通过各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
在一些实施例中,当所述分布式训练任务携带有任务同步启动信息时,处理器902在实现所述通过各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤时,具体实现如下步骤:
各服务节点根据所述映射关系读取对应的目标启动逻辑;
当各服务节点均读取到对应的目标启动逻辑时,各服务节点同时触发对应的目标启动逻辑,以同时启动对应的子训练任务。
在一些实施例中,所述训练逻辑包括各子训练任务分别对应的子训练逻辑,所述启动代码包括各子训练任务分别对应的启动逻辑,处理器902在实现所述通过所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码步骤时,具体实现如下步骤:
通过所述资源构建组件对各子训练逻辑中的运行函数进行序列化处理;
通过将所述进行过序列化处理的运行函数作为启动逻辑添加至对应的子训练逻辑中。
在一些实施例中,处理器902在实现所述通过各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,还实现如下步骤:
通过所述任务管理组件监控各子训练任务的运行状态,并将所述运行状态写入运行日志中。
在一些实施例中,处理器902在实现所述通过所述任务管理组件监控各子训练任务的运行状态步骤之后,还实现如下步骤:
当监控到处于异常运行状态的异常子训练任务时,通过所述任务管理组件确定所述异常子训练任务对应的目标任务类型;
通过所述任务管理组件根据预设的任务类型与重启机制的对应关系确定与所述目标任务类型对应的目标重启机制;
通过所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点。
在一些实施例中,当所述异常子训练任务为强化学习中的learner任务时,处理器902在实现所述通过所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点步骤时,具体实现如下步骤:
通过所述任务管理组件从learner缓存中读取所述异常子训练任务对应的目标训练数据,所述learner缓存用于实时存储对应子训练任务的训练数据;
通过所述任务管理组件根据所述目标训练数据重启所述异常子训练任务对应的服务节点;
当所述异常子训练任务为强化学习中的actor任务时,处理器902在实现所述通过所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点步骤时,具体实现如下步骤:
通过所述任务管理组件在对应的服务节点中直接重启所述异常子训练任务对应的服务节点。
在一些实施例中,所述子训练任务包括强化学习任务的actor任务和learner任务,处理器902在实现所述通过所述各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,还实现如下步骤:
通过所述actor任务对应的服务节点获取到训练样本之后,将所述训练样本存储至对应的actor缓存中;
通过所述learner任务对应的服务节点根据预设的学习速度从所述actor缓存中读取所述训练样本进行学习。
在一些实施例中,所述节点部署信息包括服务节点部署信息和代码拉取节点部署信息,处理器902在实现所述通过所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点步骤时,具体实现如下步骤:
通过所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点;
在一些实施例中,处理器902在实现所述通过所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点步骤之后,还实现如下步骤:
通过所述任务管理组件根据所述代码拉取节点部署信息在对应服务节点中部署代码拉取容器,所述代码拉取容器用户供用户进行对应服务节点的代码拉取。
在一些实施例中,所述节点部署信息还包括第三方资源依赖需求信息,处理器902在实现所述通过所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点步骤之后,还实现如下步骤:
通过所述任务管理组件在与所述第三方资源依赖需求信息对应的服务节点中安装所述第三方资源依赖需求信息所描述的第三方资源。
应当理解,在本申请实施例中,处理器902可以是中央处理单元 (CentralProcessing Unit,CPU),该处理器902还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路 (Application Specific IntegratedCircuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本领域普通技术人员可以理解的是实现上述实施例的方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成。该计算机程序包括程序指令,计算机程序可存储于一存储介质中,该存储介质为计算机可读存储介质。该程序指令被该计算机系统中的至少一个处理器执行,以实现上述方法的实施例的流程步骤。
因此,本申请还提供一种存储介质。该存储介质可以为计算机可读存储介质。该存储介质存储有计算机程序,其中计算机程序包括程序指令。该程序指令被处理器执行时使处理器执行如下步骤:
通过所述资源构建组件获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;
通过所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;
通过所述资源构建组件将所述分布式训练任务提交至所述任务管理组件;
通过所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点,所述映射关系包括服务节点与启动代码中的启动逻辑的映射关系,所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
通过各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
在一些实施例中,当所述分布式训练任务携带有任务同步启动信息时,所述处理器在执行所述程序指令而实现所述通过各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤时,具体实现如下步骤:
通过各服务节点根据所述映射关系读取对应的目标启动逻辑;
通过当各服务节点均读取到对应的目标启动逻辑时,各服务节点同时触发对应的目标启动逻辑,以同时启动对应的子训练任务。
在一些实施例中,所述训练逻辑包括各子训练任务分别对应的子训练逻辑,所述启动代码包括各子训练任务分别对应的启动逻辑,所述处理器在执行所述程序指令而实现所述通过所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码步骤时,具体实现如下步骤:
所述资源构建组件对各子训练逻辑中的运行函数进行序列化处理;
将所述进行过序列化处理的运行函数作为启动逻辑添加至对应的子训练逻辑中。
在一些实施例中,所述处理器在执行所述程序指令而实现所述通过所述各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,还实现如下步骤:
通过所述任务管理组件监控各子训练任务的运行状态,并将所述运行状态写入运行日志中。
在一些实施例中,所述处理器在执行所述程序指令而实现所述通过所述任务管理组件监控各子训练任务的运行状态步骤之后,还实现如下步骤:
当监控到处于异常运行状态的异常子训练任务时,通过所述任务管理组件确定所述异常子训练任务对应的目标任务类型;
通过所述任务管理组件根据预设的任务类型与重启机制的对应关系确定与所述目标任务类型对应的目标重启机制;
通过所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点。
在一些实施例中,当所述异常子训练任务为强化学习中的learner任务时,所述处理器在执行所述程序指令而实现所述通过所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点步骤时,具体实现如下步骤:
通过所述任务管理组件从learner缓存中读取所述异常子训练任务对应的目标训练数据,所述learner缓存用于实时存储对应子训练任务的训练数据;
通过所述任务管理组件根据所述目标训练数据重启所述异常子训练任务对应的服务节点;
当所述异常子训练任务为强化学习中的actor任务时,通过所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点,包括:
通过所述任务管理组件在对应的服务节点中直接重启所述异常子训练任务对应的服务节点。
在一些实施例中,所述子训练任务包括强化学习任务的actor任务和learner任务,所述处理器在执行所述程序指令而实现所述通过所述各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务步骤之后,还实现如下步骤:
通过所述actor任务对应的服务节点获取到训练样本之后,将所述训练样本存储至对应的actor缓存中;
通过所述learner任务对应的服务节点根据预设的学习速度从所述actor缓存中读取所述训练样本进行学习。
在一些实施例中,所述节点部署信息包括服务节点部署信息和代码拉取节点部署信息,所述处理器在执行所述程序指令而实现所述通过所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点步骤时,具体实现如下步骤:
通过所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点;
在一些实施例中,所述处理器在执行所述程序指令而实现所述通过所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点步骤之后,还实现如下步骤:
通过所述任务管理组件根据所述代码拉取节点部署信息在对应服务节点中部署代码拉取容器,所述代码拉取容器用户供用户进行对应服务节点的代码拉取。
在一些实施例中,所述节点部署信息还包括第三方资源依赖需求信息,所述处理器在执行所述程序指令而实现所述通过所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点步骤之后,还实现如下步骤:
通过所述任务管理组件在与所述第三方资源依赖需求信息对应的服务节点中安装所述第三方资源依赖需求信息所描述的第三方资源。
所述存储介质可以是U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、磁碟或者光盘等各种可以存储程序代码的计算机可读存储介质。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的。例如,各个单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。本申请实施例系统中的单元可以根据实际需要进行合并、划分和删减。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。
该集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,终端,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。
Claims (12)
1.一种基于K8s的分布式训练任务处理方法,其特征在于,所述方法应用于K8s集群,所述K8s集群包括资源构建组件和任务管理组件,所述方法包括:
所述资源构建组件获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;
所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;
所述资源构建组件将所述分布式训练任务提交至所述任务管理组件;
所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点,所述映射关系包括服务节点与启动代码中的启动逻辑的映射关系,所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
2.根据权利要求1所述的方法,其特征在于,当所述分布式训练任务携带有任务同步启动信息时,所述各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务,包括:
各服务节点根据所述映射关系读取对应的目标启动逻辑;
当各服务节点均读取到对应的目标启动逻辑时,各服务节点同时触发对应的目标启动逻辑,以同时启动对应的子训练任务。
3.根据权利要求1所述的方法,其特征在于,所述训练逻辑包括各子训练任务分别对应的子训练逻辑,所述启动代码包括各子训练任务分别对应的启动逻辑,所述资源构建组件根据预设的启动代码生成规则在所述训练逻辑中添加启动代码,包括:
所述资源构建组件对各子训练逻辑中的运行函数进行序列化处理;
将所述进行过序列化处理的运行函数作为启动逻辑添加至对应的子训练逻辑中。
4.根据权利要求1所述的方法,其特征在于,所述各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务之后,所述方法还包括:
所述任务管理组件监控各子训练任务的运行状态,并将所述运行状态写入运行日志中。
5.根据权利要求4所述的方法,其特征在于,所述任务管理组件监控各子训练任务的运行状态之后,所述方法还包括:
当监控到处于异常运行状态的异常子训练任务时,所述任务管理组件确定所述异常子训练任务对应的目标任务类型;
所述任务管理组件根据预设的任务类型与重启机制的对应关系确定与所述目标任务类型对应的目标重启机制;
所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点。
6.根据权利要求5所述的方法,其特征在于,当所述异常子训练任务为强化学习中的learner任务时,所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点,包括:
所述任务管理组件从learner缓存中读取所述异常子训练任务对应的目标训练数据,所述learner缓存用于实时存储对应子训练任务的训练数据;
所述任务管理组件根据所述目标训练数据重启所述异常子训练任务对应的服务节点;
当所述异常子训练任务为强化学习中的actor任务时,所述任务管理组件根据所述目标重启机制重启所述异常子训练任务对应的服务节点,包括:
所述任务管理组件在对应的服务节点中直接重启所述异常子训练任务对应的服务节点。
7.根据权利要求1所述的方法,其特征在于,所述子训练任务包括强化学习任务的actor任务和learner任务,所述各服务节点根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务之后,所述方法还包括:
所述actor任务对应的服务节点获取到训练样本之后,将所述训练样本存储至对应的actor缓存中;
所述learner任务对应的服务节点根据预设的学习速度从所述actor缓存中读取所述训练样本进行学习。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述节点部署信息包括服务节点部署信息和代码拉取节点部署信息,所述任务管理组件根据所述节点部署信息在所述K8s集群中创建映射关系和多个服务节点,包括:
所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点;
所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点之后,所述方法还包括:
所述任务管理组件根据所述代码拉取节点部署信息在对应服务节点中部署代码拉取容器,所述代码拉取容器用户供用户进行对应服务节点的代码拉取。
9.根据权利要求8所述的方法,其特征在于,所述节点部署信息还包括第三方资源依赖需求信息,所述任务管理组件根据所述服务节点部署信息在所述K8s集群中创建所述映射关系和多个所述服务节点之后,所述方法还包括:
所述任务管理组件在与所述第三方资源依赖需求信息对应的服务节点中安装所述第三方资源依赖需求信息所描述的第三方资源。
10.一种基于K8s的分布式训练任务处理系统,其特征在于,所述基于K8s的分布式训练任务处理系统包括资源构建组件、任务管理组件以及多个服务节点,其中:
所述资源构建组件,用于获取用户提交的分布式训练任务,所述分布式训练任务包括分布式训练任务的训练逻辑以及各子训练任务的节点部署信息;根据预设的启动代码生成规则在所述训练逻辑中添加启动代码;将所述分布式训练任务提交至所述任务管理组件;
所述任务管理组件,用于根据所述节点部署信息在K8s集群中创建映射关系和多个所述服务节点,所述映射关系包括服务节点与启动代码中的启动逻辑的映射关系,所述服务节点中部署一个子训练任务,所述子训练任务对应所述启动代码中的一个启动逻辑;
各所述服务节点,用于根据所述映射关系确定对应的目标启动逻辑,并触发所述目标启动逻辑,以启动对应的子训练任务。
11.一种计算机设备,其特征在于,所述计算机设备包括存储器及处理器,所述存储器上存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1-9中任一项所述的方法。
12.一种计算机可读存储介质,其特征在于,所述存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时可实现如权利要求1-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210733504.9A CN114791856B (zh) | 2022-06-27 | 2022-06-27 | 基于K8s的分布式训练任务处理方法、相关设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210733504.9A CN114791856B (zh) | 2022-06-27 | 2022-06-27 | 基于K8s的分布式训练任务处理方法、相关设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114791856A CN114791856A (zh) | 2022-07-26 |
CN114791856B true CN114791856B (zh) | 2022-08-26 |
Family
ID=82463209
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210733504.9A Active CN114791856B (zh) | 2022-06-27 | 2022-06-27 | 基于K8s的分布式训练任务处理方法、相关设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114791856B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069464B (zh) * | 2022-12-19 | 2024-01-16 | 深圳计算科学研究院 | 一种基于分布式存储调用数据执行的优化方法及装置 |
CN116628508B (zh) * | 2023-07-20 | 2023-12-01 | 科大讯飞股份有限公司 | 模型训练过程异常检测方法、装置、设备及存储介质 |
CN117076937B (zh) * | 2023-10-16 | 2024-02-09 | 苏州元脑智能科技有限公司 | 分布式系统的节点训练方法、装置和分布式系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062246B (zh) * | 2018-01-25 | 2019-06-14 | 北京百度网讯科技有限公司 | 用于深度学习框架的资源调度方法和装置 |
CN109272116A (zh) * | 2018-09-05 | 2019-01-25 | 郑州云海信息技术有限公司 | 一种深度学习的方法及装置 |
CN113033814A (zh) * | 2019-12-09 | 2021-06-25 | 北京中关村科金技术有限公司 | 训练机器学习模型的方法、装置以及存储介质 |
CN112257736A (zh) * | 2020-06-17 | 2021-01-22 | 北京沃东天骏信息技术有限公司 | 基于多集群的模型训练系统、方法、设备及存储介质 |
CN113569987A (zh) * | 2021-08-19 | 2021-10-29 | 北京沃东天骏信息技术有限公司 | 模型训练方法和装置 |
CN114090242A (zh) * | 2021-11-08 | 2022-02-25 | 百果园技术(新加坡)有限公司 | 模型训练方法、装置、设备、存储介质及程序产品 |
-
2022
- 2022-06-27 CN CN202210733504.9A patent/CN114791856B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN114791856A (zh) | 2022-07-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114791856B (zh) | 基于K8s的分布式训练任务处理方法、相关设备及介质 | |
CN109582466B (zh) | 一种定时任务执行方法、分布式服务器集群及电子设备 | |
US9519884B2 (en) | Data driven dynamic workflow | |
Yang et al. | A profile-based approach to just-in-time scalability for cloud applications | |
US20080163171A1 (en) | Virtual resource templates | |
CN111367534B (zh) | 一种基于应用环境的服务编排方法及系统 | |
CN108572845B (zh) | 分布式微服务集群的升级方法及相关系统 | |
CN110990026B (zh) | 一种PaaS平台自动部署方法及系统 | |
CN110569113A (zh) | 分布式任务的调度方法及系统、计算机可读存储介质 | |
WO2019027597A1 (en) | WORKFLOW MANAGEMENT FRAMEWORK | |
CN112364897A (zh) | 分布式训练方法及装置、存储介质及电子设备 | |
US20190391981A1 (en) | Computer system and method for setting a stream data processing system | |
JP2021121921A (ja) | 人工知能開発プラットフォームの管理方法及び装置、媒体 | |
CN109491762B (zh) | 容器状态控制方法及装置、存储介质、电子设备 | |
WO2023160418A1 (zh) | 资源处理方法及资源调度方法 | |
CN112379934B (zh) | 一种云计算平台的部署方法及装置、存储介质 | |
CN115632944B (zh) | 一种节点配置方法、装置、设备、可读存储介质及服务器 | |
CN115480785A (zh) | 基于容器的服务部署方法、装置和服务器 | |
CN116107694A (zh) | k8s子集群的部署方法、装置及存储介质 | |
CN113419814B (zh) | 一种云平台中虚拟机创建方法、装置、设备及存储介质 | |
CN113708971A (zh) | 一种Openstack云平台的部署方法及相关装置 | |
CN114416311A (zh) | 一种基于Go语言管理消息队列的方法和装置 | |
US20050198469A1 (en) | Parallel execution optimization method and system | |
CN112148420B (zh) | 基于容器技术的异常任务处理方法、服务器及云平台 | |
CN108958823A (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 |