本申请涉及信息处理领域,尤指一种深度学习系统中任务训练的管理方法和计算机存储介质。
背景技术:
多线程是一种便捷的模型,其中每个线程都可以访问其它线程的存储空间。因此,这种模型只能在共享存储系统之间移植。一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信。要使得消息传递方式可移植,就需要采用标准的消息传递库。这就促成的消息传递接口(messagepassinginterface,mpi)的面世,mpi是一种被广泛采用的消息传递标准。
与openmp并行程序不同,mpi是一种基于消息传递的并行编程技术。消息传递接口是一种编程接口标准,而不是一种具体的编程语言。简而言之,mpi标准定义了一组具有可移植性的编程接口。各个厂商或组织遵循这些标准实现自己的mpi软件包。由于mpi提供了统一的编程接口,程序员只需要设计好并行算法,使用相应的mpi库就可以实现基于消息传递的并行计算。mpi支持多种操作系统,包括大多数的类unix和windows系统。
mpi可以为高性能计算的主要模型。因为其高性能的特性,在深度学习训练领域采用mpi进行分布式训练的也越来越多。mpi训练存在搭建训练环境复杂,节点配置麻烦等问题,且某一训练节点故障时会导致整个训练任务失败,严重影响训练效率。
技术实现要素:
为了解决上述技术问题,本申请提供了一种深度学习系统中任务训练的管理方法和计算机存储介质。
为了达到本申请目的,本申请提供了一种深度学习系统中任务训练的管理方法,包括:
获取执行消息传递接口mpi任务的训练操作的至少两个节点;
为所述至少两个节点分配对应的容器;
控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作。
在一个示例性实施例中,所述控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,包括:
从所述至少两个节点中选择一个节点作为主节点,其他节点作为从节点;
控制所述主节点向所述从节点发送执行mpi任务的训练命令,以及控制所述从节点根据接收训练命令执行所述mpi任务的训练。
在一个示例性实施例中,所述控制所述主节点向所述从节点发送执行mpi任务的训练命令之前,所述方法还包括:
在所述主节点发送所述训练命令前,获取所述从节点在对应的容器中是否成功启动的信息;在每个从节点均启动成功后,触发所述主节点发送训练命令。
在一个示例性实施例中,所述获取所述从节点是否成功启动的信息,包括:
向预先设置的初始化容器发送从节点的ip地址信息;
在初始化容器按照从节点的ip地址信息对从节点进行初始化操作后,接收初始化容器发送的操作结果;
根据所述操作结果,确定所述从节点的启动状态。
在一个示例性实施例中,所述控制所述从节点根据接收训练命令执行所述mpi任务的训练,包括:
在所述从节点执行所述mpi任务的训练过程中,检测所述从节点的运行状态,并在所述从节点停止运行时,判断所述从节点是否出现故障,如判断所述从节点出现故障,则重启所述从节点。
一种计算机存储介质,包括处理器和存储器,其中所述存储器存储有计算机程序,所述处理器用以调用所述处理器中的计算机程序以实现如下操作,包括:
获取执行消息传递接口mpi任务的训练操作的至少两个节点;
为所述至少两个节点分配对应的容器;
控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现所述控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,包括:
从所述至少两个节点中选择一个节点作为主节点,其他节点作为从节点;
控制所述主节点向所述从节点发送执行mpi任务的训练命令,以及控制所述从节点根据接收训练命令执行所述mpi任务的训练。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现所述控制所述主节点向所述从节点发送执行mpi任务的训练命令的操作之前,所述处理器用以调用所述处理器中的计算机程序还实现如下操作,包括:
在所述主节点发送所述训练命令前,获取所述从节点在对应的容器中是否成功启动的信息;在每个从节点均启动成功后,触发所述主节点发送训练命令。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现获取所述从节点是否成功启动的信息的操作,包括:
向预先设置的初始化容器发送从节点的ip地址信息;
在初始化容器按照从节点的ip地址信息对从节点进行初始化操作后,接收初始化容器发送的操作结果;
根据所述操作结果,确定所述从节点的启动状态。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现所述控制所述从节点根据接收训练命令执行所述mpi任务的训练的操作,包括:
在所述从节点执行所述mpi任务的训练过程中,检测所述从节点的运行状态,并在所述从节点停止运行时,判断所述从节点是否出现故障,如判断所述从节点出现故障,则重启所述从节点。
本申请提供的实施例,获取执行消息传递接口mpi任务的训练操作的至少两个节点,为所述至少两个节点分配对应的容器,控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,实现节点在容器中进行训练操作,减少使用容器技术,减少构建基础运行环境时间,降低维护成本。
本申请的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本申请而了解。本申请的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
附图说明
附图用来提供对本申请技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本申请的技术方案,并不构成对本申请技术方案的限制。
图1为本申请提供的深度学习系统中任务训练的管理方法的流程图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下文中将结合附图对本申请的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1为本申请提供的深度学习系统中任务训练的管理方法的流程图。如图1所示,图1所示方法包括:
步骤101、获取执行mpi任务的训练操作的至少两个节点;
在一个示例性实施例中,执行mpi任务的训练操作的节点的总数为至少两个节点,获取每个节点的运行所需的程序和配置,以便在完成节点部署后,节点能够正常运行。
步骤102、为所述至少两个节点分配对应的容器;
在一个示例性实施例中,本申请是将节点部署到容器中,减少构建基础运行环境时间,与相关技术中使用分布式服务器部署方式相比,实现基于容器环境的运行。
步骤103、控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作。
在一个示例性实施例中,在检测到节点在各自的容器部署完成后,启动节点,控制节点执行mpi任务的训练。
在一个示例性实施例中,所述控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,包括:
从所述至少两个节点中选择一个节点作为主节点,其他节点作为从节点;
控制所述主节点向所述从节点发送执行mpi任务的训练命令,以及控制所述从节点根据接收训练命令执行所述mpi任务的训练。
通过对节点的类型进行配置,控制主节点配置各从节点信息(ip地址等),并向各个从节点发送训练命令;从节点只需接收主节点信号、开始训练,实现mpi训练任务的统一化管理。
在一个示例性实施例中,所述控制所述主节点向所述从节点发送执行mpi任务的训练命令之前,所述方法还包括:
在所述主节点发送所述训练命令前,获取所述从节点在对应的容器中是否成功启动的信息;在每个从节点均启动成功后,触发所述主节点发送训练命令。
通过检测从节点是否均启动成功,可以保证主节点能够统一管理从节点,并下发训练命令,保证训练任务的顺利进行。
在一个示例性实施例中,所述获取所述从节点是否成功启动的信息,包括:
向预先设置的初始化容器发送从节点的ip地址信息;
在初始化容器按照从节点的ip地址信息对从节点进行初始化操作后,接收初始化容器发送的操作结果;
根据所述操作结果,确定所述从节点的启动状态。
利用初始化容器对从节点的启动状态进行检测,借助已有的初始化容器,完成状态的检测,实现简单。
在一个示例性实施例中,所述控制所述从节点根据接收训练命令执行所述mpi任务的训练,包括:
在所述从节点执行所述mpi任务的训练过程中,检测所述从节点的运行状态,并在所述从节点停止运行时,判断所述从节点是否出现故障,如判断所述从节点出现故障,则重启所述从节点。
通过对从节点的运行状态的检测,在从节点因故障而停止时,通过对该从节点进行重启,保证训练操作的顺利进行,实现训练容错。
本申请实施例提供的方法,获取执行消息传递接口mpi任务的训练操作的至少两个节点,为所述至少两个节点分配对应的容器,控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,实现节点在容器中进行训练操作,减少使用容器技术,减少构建基础运行环境时间,降低维护成本。
下面对本申请实施例提供的方法进行说明:
kubernetes是google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。容器化技术能够提高资源利用率,kubernetes自动化管理容器资源。
本申请实施例提供的在kubernetes系统中执行mpi任务的训练方法,包括如下流程:
步骤01、在kubernetes系统中增加mpi任务的训练的资源类型;
kubernetes系统中一切都可可以被视为资源,它提供了很多默认资源类型,能够满足大多数需求。但是在一些特殊的需求场景下,这些现有资源类型就满足不了。因此,kubernetes提供了crd(customresourcedefinition,用户资源定义)功能,提供了轻量级的机制,能够扩展资源类型,保证新的资源的快速注册和使用。
在一个示例性实施例中,定义资源名称为mpitrain,资源列表名称为mpitrainlist,复数的名称为mpitrains;定义接口版本为v1,定义节点的分类,其中,节点的分类包括主节点master和从节点worker,其中,定义节点属性,如最大个数、最小个数等。
步骤02、为mpi训练任务的资源配置对应的controller。
在一个示例性实施例中,按照kubernetes自定义controller的编写规范,编写add、update、delete、sync同步状态等方法,其中:
add方法的作用是添加mpitrain对象,并将该对象放置到kubernetesworkqueue中;
update方法作用是更新mpitrain对象,并将更新后的对象放置到workqueue中;
delete方法作用是删除mpitrain对象,并将删除操作放置到workqueue中;
sync方法作用是与底层pod资源同步,根据不同动作调用kubernetes客户端对象创建、更新、删除对应的pod。
步骤03、为mpi训练任务的资源构建基础镜像;
在一个示例性实施例中,使用golang基础镜像,添加openmpi库;将controller代码编译,并拷贝到镜像中,作为镜像的启动文件。
步骤04、执行对mpi任务的训练;
在一个示例性实施例中,mpi训练时需指定主节点、从节点。主节点配置各个从节点信息(ip地址等),并向各个从节点发送训练命令;从节点只需接收主节点信号、开始训练。
主节点触发任务执行,任务执行时所有节点必须已经创建完成,为保证统一调度,在主节点启动前,需等待从节点已完成启动。可以通过kubernetes提供的初始化容器initcontainer来完成。
initcontainer,可以在容器启动的时候,会先启动可一个或多个容器,如果有多个,那么这几个initcontainer按照定义的顺序依次执行,只有所有的initcontainer执行完后,主容器才会启动。
在相关技术中,分布式训练场景中如果某个节点挂掉时会导致整个任务失败,本申请实施例为kubernetes系统的pod提供了重启策略(restartpolicy)可以解决上述问题,本发明也采用此方案进行训练容错,通过将pod节点的restartpolicy设置为onfailure,节点失败时会自动重启,继续训练。
本申请实施例提供的方法,基于kubernetes的mpi任务训练方法,能够自动分配资源、区分主节点和从节点、执行训练任务、监控任务状态,且在节点故障时能够自动重启,提高训练效率。
主节点会通过自定义的controller获取从节点的ip信息,并写入hostfile配置文件。
任务执行时会通过kubernetes提供的podinforme监控每个节点的状态,并依据此更新整个训练任务的状态。
本申请实施例提供一种计算机存储介质,包括处理器和存储器,其中所述存储器存储有计算机程序,所述处理器用以调用所述处理器中的计算机程序以实现如下操作,包括:
获取执行消息传递接口mpi任务的训练操作的至少两个节点;
为所述至少两个节点分配对应的容器;
控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现所述控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,包括:
从所述至少两个节点中选择一个节点作为主节点,其他节点作为从节点;
控制所述主节点向所述从节点发送执行mpi任务的训练命令,以及控制所述从节点根据接收训练命令执行所述mpi任务的训练。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现所述控制所述主节点向所述从节点发送执行mpi任务的训练命令的操作之前,所述处理器用以调用所述处理器中的计算机程序还实现如下操作,包括:
在所述主节点发送所述训练命令前,获取所述从节点在对应的容器中是否成功启动的信息;在每个从节点均启动成功后,触发所述主节点发送训练命令。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现获取所述从节点是否成功启动的信息的操作,包括:
向预先设置的初始化容器发送从节点的ip地址信息;
在初始化容器按照从节点的ip地址信息对从节点进行初始化操作后,接收初始化容器发送的操作结果;
根据所述操作结果,确定所述从节点的启动状态。
在一个示例性实施例中,所述处理器用以调用所述处理器中的计算机程序以实现所述控制所述从节点根据接收训练命令执行所述mpi任务的训练的操作,包括:
在所述从节点执行所述mpi任务的训练过程中,检测所述从节点的运行状态,并在所述从节点停止运行时,判断所述从节点是否出现故障,如判断所述从节点出现故障,则重启所述从节点。
本申请实施例提供的计算机存储介质,获取执行消息传递接口mpi任务的训练操作的至少两个节点,为所述至少两个节点分配对应的容器,控制所述至少两个节点在各自对应的容器中进行mpi任务的训练操作,实现节点在容器中进行训练操作,减少使用容器技术,减少构建基础运行环境时间,降低维护成本。
本领域普通技术人员可以理解上述实施例的全部或部分步骤可以使用计算机程序流程来实现,所述计算机程序可以存储于一计算机可读存储介质中,所述计算机程序在相应的硬件平台上(如系统、设备、装置、器件等)执行,在执行时,包括方法实施例的步骤之一或其组合。
可选地,上述实施例的全部或部分步骤也可以使用集成电路来实现,这些步骤可以被分别制作成一个个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
上述实施例中的各装置/功能模块/功能单元可以采用通用的计算装置来实现,它们可以集中在单个的计算装置上,也可以分布在多个计算装置所组成的网络上。
上述实施例中的各装置/功能模块/功能单元以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。上述提到的计算机可读取存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以权利要求所述的保护范围为准。