深度学习框架设计方法与流程

文档序号:20917035发布日期:2020-05-29 13:40阅读:1114来源:国知局
深度学习框架设计方法与流程

本申请涉及容器调度管理技术领域,具体来说,涉及一种基于kubernetes弹性容器调度算法的深度学习框架设计方法。



背景技术:

随着科技地迅猛发展,传统开发环境中数据专家必须与软件开发人员合作开发ai(artificialintelligence,人工智能,它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学)解决方案的模型已被颠覆。ai算法和模型组成的生态演进,让应用软件开发变成一种预定义模型。未来将有越来越多的专业开发人员,会使用将ai功能和模型集成到解决方案中的定制化开发工具,自主进行ai软件开发。容器化正是整个解决方案的核心。

近些年容器崛起,作为容器管理的工具,kubernetes(kubernetes是google开源的容器集群管理系统,其提供应用部署、维护、扩展机制等功能,利用kubernetes能方便地管理跨机器运行容器化的应用,主要实现语言为go语言,kubernetes缩写为k8s)快速扩张到整个世界。k8s作为最主流容器管理平台已成业界共识。它满足了应用在生产环境中的一些通用需求,提供了平台即服务(paas)的应用交付运维简易性以及基础设施即服务(iaas)的灵活性,提升了跨基础设施移植的方便性。

一场以kubernetes为基础,ai驱动的开发变革拉开序幕,k8s作为ai训练的解决方案,主要有以下两个优势:

k8s支持gpu(graphicsprocessingunit,图形处理器,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器)调度,可以将整个实践过程当中取得的成果回馈到社区;

k8s支持多种调度方式,适应不同的业务场景,job(job在kubernetes中负责批量处理短暂的一次性任务,shortlivedone-offtasks,即仅执行一次的任务,它保证批处理任务的一个或多个pod成功结束,在kubernetes中,最小的管理元素不是一个个独立的容器,而是pod,pod是最小的,管理,创建,计划的最小单元)与训练任务两者切合度非常高。

现有技术存在的问题:

ai训练需要静态分配kubernetes资源的数量,资源的分配依赖个人经验,执行训练任务时存在资源浪费或者资源不足的情况,影响训练的执行效率;

基于kubernetes的容器调度策略是静态的,未通过资源使用情况动态调整调度策略;

训练任务的执行是单向的,没有通过训练任务的结果迭代优化训练任务。



技术实现要素:

针对相关技术中的上述问题,本申请提出一种基于kubernetes弹性容器调度算法的深度学习框架设计方法,至少能够支持容器资源弹性分配和训练结果优化的深度学习。

本申请的技术方案是这样实现的:

提供了一种基于kubernetes弹性容器调度算法的深度学习框架设计方法,包括:

用户通过展现层输入训练参数,ai业务层根据输入训练参数和第一推荐模型优化训练参数并且提交训练任务到k8s调度层;

k8s调度层基于优化后的训练参数和第二推荐模型生成和优化k8s资源文件,并且,根据优化后的k8s资源文件提交资源请求、启动容器、运行训练任务;

通过k8s调度层动态调整容器负载,收集容器运行日志来建立第二推荐模型用以优化后续的k8s资源文件;

通过k8s调度层收集训练任务的训练数据建立第一推荐模型用以优化后续的训练参数。

根据本申请的实施例,ai业务层至少包括:

ai训练框架caffe或tensorflow至少一种;

支持自定义的ai训练库;

第一推荐引擎,第一推荐引擎根据训练任务的训练数据建立第一推荐模型。

根据本申请的实施例,k8s调度层至少包括:

负载均衡,是指动态调整容器负载;

日志监控,是指收集容器运行日志;

第二推荐引擎,第二推荐引擎根据容器运行日志建立第二推荐模型。

根据本申请的实施例,动态调整容器负载包括:

如果容器负载过高则增加容器资源;

如果容器空闲则释放容器资源。

根据本申请的实施例,展现层至少包括:管理平台、移动客户和api接口。

根据本申请的实施例,深度学习训练任务的资源基础是资源层,资源层至少包括:cpu、内存、存储和gpu。

本申请的有益技术效果在于:

通过支持基于kubernetes系统的容器资源弹性分配和深度学习训练结果优化弹性调度算法,大大提高了基于kubernetes容器集群管理系统深度学习效率;

支持基于kubernetes系统的容器资源弹性分配;

支持基于深度学习训练结果优化弹性调度算法。

附图说明

为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是应用根据本申请实施例的深度学习框架设计方法和装置示意图;

图2是应用根据本申请实施例的基于kubernetes弹性容器调度算法的深度学习框架设计方法和装置框图;

图3是应用根据本申请实施例的基于kubernetes弹性容器调度算法的深度学习框架设计方法和装置流程图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本申请保护的范围。

根据本申请的实施例,提供了一种基于kubernetes弹性容器调度算法的深度学习框架设计方法和装置。图1示出了根据本申请实施例的基于kubernetes弹性容器调度算法的深度学习框架设计方法和装置示意图。参考图1所示,本发明的基于kubernetes弹性容器调度算法的深度学习框架设计方法包括以下步骤:

s1,用户通过展现层输入训练参数,ai业务层根据输入训练参数和第一推荐模型优化训练参数并且提交训练任务到k8s调度层;

s2,k8s调度层基于优化后的训练参数和第二推荐模型生成和优化k8s资源文件,并且,根据优化后的k8s资源文件提交资源请求、启动容器、运行训练任务;

s3,通过k8s调度层动态调整容器负载,收集容器运行日志来建立第二推荐模型用以优化后续的k8s资源文件;

s4,通过k8s调度层收集训练任务的训练数据建立第一推荐模型用以优化后续的训练参数。

本发明的上述技术方案,通过支持基于kubernetes系统的容器资源弹性分配和深度学习训练结果优化弹性调度算法,大大提高了基于kubernetes容器集群管理系统深度学习效率。

如图2所示,本发明的实现原理分为以下四个层次:

资源层24提供深度学习训练任务的资源基础。主要包含cpu(centralprocessingunit,中央处理器,是一块超大规模的集成电路,是一台计算机的运算核心(core)和控制核心(controlunit),它的功能主要是解释计算机指令以及处理计算机软件中的数据)241、内存242、存储243和gpu(graphicsprocessingunit,图形处理器,又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器)244;

k8s调度层23负责资源的调度,日志监控233与推荐引擎234负责不断优化调度策略,负载均衡231负责动态调整容器232负载。k8s调度层23中还可以包括sdn网络(软件定义网络)。

ai业务层22提供ai训练业务平台,caffe(全称convolutionalarchitectureforfastfeatureembedding,是一种常用的深度学习框架,主要应用在视频、图像处理方面的应用上)与tensorflow(tensorflow是一个基于数据流编程(dataflowprogramming)的符号数学系统,被广泛应用于各类机器学习(machinelearning)算法的编程实现,其前身是谷歌的神经网络算法库distbelief)221为主流的ai训练框架,同时支持自定义的ai训练库222,推荐引擎223优化训练参数与模型;

展现层21为用户接入提供入口,管理平台211为普通用户提供了规范化的界面,移动客户端212方便用户实时接入,api接口213为开发者提供定制化开发入口。

图3示出了本发明的基于kubernetes弹性容器调度算法的深度学习框架设计方法流程图。

如图3开始301和输入基本训练参数302处所示:用户登录系统后,输入基本的训练参数,例如使用tensorflow训练框架,用户提供训练的数据集路径、迭代次数、单次处理训练的数量、训练输出日志路径等信息。

如图3优化补充训练参数303处所示:基于用户的入参,通过推荐模型调整训练参数。例如基于数据集的类型,调整单次训练的数量,修改总迭代次数与网络模型。

如图3提交训练任务305处所示:训练参数优化后,ai训练平台提交训练任务,由下层的k8s调度系统创建资源执行训练任务。

如图3生成k8s资源文件306处所示:k8s调度层接收到训练任务请求后,基于训练任务的数据量与训练参数预测资源使用情况,生成k8s资源文件。同时通过推荐引擎优化资源文件的定义。

如图3提交k8s资源创建请求308处所示:k8s通过kubectl(kubectl用于运行kubernetes集群命令的管理工具)工具调用api接口,按照k8s资源文件的资源定义创建训练任务所需的资源。

深度学习训练程序通过job资源来实现,job为工作类容器,可以执行一次性任务,完成后容器就退出。

job资源定义可通过yaml文件来实现,以下为job资源定义示例:

该job申请了cpu、内存、gpu资源,同时制定了自定义的调度系统;

可通过运行kubectlcreate-f命令创建job,scheduler会将该资源调度到最优的节点。

如图3启动容器310处所示:k8s任务创建成功后,在系统底层通过pod启动容器,训练任务将在容器环境中运行。

如图3运行训练任务314处所示:容器启动后,训练任务被系统调起,任务开始执行。

如图3监控容器负载311、负载过高触发增加资源309、是否空闲释放资源315和提交资源释放请求317处所示:训练任务在容器中执行,通过监控容器负载(cpu、内存、gpu、网络、存储)可获取训练任务的执行情况:

当系统负载过高时,增加资源提高训练的执行效率;

训练任务可提供预期执行时间,监控系统评估训练时间低于预期时间,增加资源加快训练的执行速度;

当容器处于空闲状态时,提交资源释放请求。

如图3收集(监控系统)日志312和推荐模型307处所示:收集监控系统日志,将日志传入推荐引擎,推荐引擎基于这些数据建立推荐模型,优化后续的k8s资源申请模型。

如图3收集训练数据313和推荐模型304处所示:收集训练过程的数据,例如训练的精度、学习率、损失等指标,与当前的训练建立映射关系,传入推荐引擎,推荐引擎基于这些数据建立推荐模型,优化后续的训练参数。

如图3分布式训练是否结束316、提交k8s资源释放请求317和容器资源释放318处所示:当分布式训练结束后,提交k8s资源释放请求,将容器资源释放。

以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1