一种实现代码仓库与计算服务整合的方法及系统
技术领域
本发明涉及一种实现代码仓库与计算服务整合的方法及系统,通过计算平台,可将代码仓库与人工智能计算在同一个系统进行操作实施,属于人工智能技术领域。
背景技术
通常,人工智能算法研究实验主要包含如下过程:
(1)编写测试代码,准备实验数据;(2)准备实验环境,实际进行实验。
因此,研究人员的代码仓库与实验环境是分开准备的。
在代码托管部分,一般采用的方案有在线代码托管平台或者本地管理。主流的在线代码托管服务有github、gitlab等。用户在guthub等代码托管平台创建账号,并新建代码仓库后,即可远程编写代码,并通过https或者ssh将代码改动推送到github对应的分支和版本。实际进行实验时,每次调整代码后都需要迁移到计算平台,存在额外的平台切换流程和成本,这部分不应是实验人员所关注的内容。
计算平台方面,适用于大规模机器学习的软硬件环境搭建的门槛较高,通常需要高性能计算平台与特定软件环境搭配。
目前主流的解决方案为从云服务商租用虚拟主机,自行搭建实验环境,再进行训练。如采用这种方案,一方面,计算资源在租用之后即持续产生成本,另一方面,在开始实验之前,需要在云服务商提供的虚拟主机中安装软件环境,根据不同的网络环境和安装的软件内容,这一准备过程可能长达数个小时,消耗了实验人员较多的时间成本,导致每次实验成本较高,而其中真正产生价值的实验环节占比降低,较为低效。
另一种计算平台的方案是直接购买硬件,从硬件开始搭建计算环境。这种方案一次性投入的硬件成本较高,且需要自行负责运维工作,闲置成本也很突出。对于中小型研究机构和个人研究而言,性价比更低。
发明内容
发明目的:为克服现有技术中人工智能研究中代码与计算平台切换问题,本发明提出了一种新型的将代码托管与计算资源结合到同一个系统使用的方法和系统,减少了无意义的平台切换,以按量付费的形式降低了计算资源的闲置成本。
技术方案:一种实现代码仓库与计算服务整合的方法,内嵌gitea作为代码仓库模块,通过k8s集群的形式管理和提供可拓展的计算资源,使用ray框架支持分布式机器学习,通过ceph提供分布式存储,实现代码仓库、计算资源和结果存储,在统一平台管理;具体包括如下步骤:
用户发起计算任务时,获取用户新建任务信息,校验用户提交的新建任务信息是否有误;如果校验通过,任务创建成功,否则给用户提示错误信息;任务创建成功,查询现有集群资源列表,判断是否有满足所建任务指定的计算资源,如不满足,则将新建任务进入延迟排队状态,等待集群资源充足时将自动重试。如计算资源可满足,分配对应的计算节点;从代码仓库调用与任务相关的代码到计算节点,启动计算节点,并且绑定存储资源给对应计算节点;通过系统内置的分布式计算框架,开始计算任务,实时将任务执行日志和任务执行输出数据保存至存储地址;通过界面展示任务列表,进入任务详情界面,系统在计算管理界面中展示任务列表,展示当前任务的执行状态和统计数据,实现用户对计算任务的监控,同时支持用户对计算任务进行管理操作。
用户对计算任务进行监控和管理时,发送网络请求,反馈计算任务的执行状态和计算资源的占用情况,并通过绘制折线图的方式展示计算资源随时间的占用情况,通过监控界面展示计算任务的执行状态,实现用户的监控功能,用户点击任务的监控链接以后,反馈给用户监控页面,页面通过内嵌监控工具,实时刷新任务运行数据进行展示。
计算任务主要有如下几种执行状态:已创建、等待、构建、运行、暂停、停止,并通过任务详情页面展示给用户;(1)已创建:收到用户新建任务操作后,校验通过,任务创建成功,此时为已创建状态;(2)等待状态:k8s集群在收到分配资源通知后,还未完成资源分配工作时所处的状态;(3)构建状态:k8s集群中资源分配完毕,正在进行容器镜像的构建;(4)运行状态:做完前面所述资源分配和容器构建,实际运行用户任务代码的状态;(5)暂停状态:将计算任务暂停,资源保留不释放,随时可以继续执行的状态;(6)停止状态:提供了任务停止功能,用户触发后,系统对任务的当前结果进行保存,然后停止运行并释放对应的资源,不可恢复运行;(7)结束状态:任务被执行结束后的状态。
通过监控界面实现用户对任务状态的监控管理,提供停止任务、暂停任务、恢复任务的功能。对于运行中任务,接收到用户提交的停止操作后,根据任务目前处于的不同执行状态,进行如下操作:(1)任务处于已创建状态时,将任务状态更改为停止,并中止k8s集群的资源分配工作。(2)任务处于等待状态时,将任务状态更改为停止,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为停止,并通知docker镜像进程停止构建,同时在k8s集群中取消资源分配。(4)任务处于运行状态时,将任务状态更改为停止,同时通知k8s集群,保存用户任务的当前结果到存储地址,然后删除对应的任务节点容器,释放计算资源。
对于运行中任务,接收到用户提交的暂停操作后,根据任务目前处于的不同执行状态,进行如下操作:(1)任务处于已创建状态时,系统直接将任务状态更改为已暂停,并暂停k8s集群的资源分配工作。(2)任务处于等待状态时,将任务状态更改为暂停,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为已暂停,并通知docker镜像进程停止构建。(4)任务处于运行状态时,将任务状态更改为已暂停,同时通知k8s集群,暂停执行用户代码,同时不释放计算资源,准备随时继续执行。
对于已暂停任务,接收到用户恢复操作后,根据任务暂停时的不同执行状态,进行如下操作:(1)任务暂停时处于已创建状态,将任务状态更改为已创建,并继续k8s集群的资源分配工作。(2)任务暂停时处于等待状态,将任务状态更改为等待,并将任务恢复到资源等待队列。(3)任务暂停时处于构建状态,将任务状态更改为构建,并通知docker镜像进程重新构建镜像。(4)任务暂停时处于运行状态,系统将任务状态更改为运行,同时通知k8s集群,恢复执行用户代码。
一种用于实现上述代码仓库与计算服务整合方法的系统,包括代码仓库模块,计算节点构建模块,计算任务监控和管理模块,以及存储模块;
所述代码仓库模块用于存储计算任务执行的代码;
所述计算任务监控和管理模块通过新建任务界面实现用户新建计算任务的交互;用户通过新建任务界面输入新建任务信息,计算任务监控和管理模块获取用户新建任务信息,校验用户提交的新建任务信息是否有误;如果校验通过,计算任务监控和管理模块反馈用户任务创建成功,否则给用户提示错误信息;任务创建成功后,所述计算任务监控和管理模块查询现有集群资源列表,判断是否有满足所建任务指定的计算资源,如不满足,则将新建任务进入延迟排队状态,等待集群资源充足时将自动重试;如计算资源可满足,触发计算节点构建模块,计算节点构建模块通过k8s分配对应的计算节点,从代码仓库调用与任务相关的代码到计算节点,启动计算节点,并且绑定存储资源给对应计算节点作为存储模块,构建计算节点成功;所述计算节点通过系统内置的分布式计算框架,开始执行计算任务;计算节点实时将任务执行日志和任务执行输出数据保存至存储模块;计算任务监控和管理模块实时获取存储模块上的任务执行日志和任务执行输出数据,通过界面形式向用户展示任务列表,用户进入任务详情界面,计算任务监控和管理模块在计算管理界面中展示任务列表,展示当前任务的执行状态和统计数据,实现用户对计算任务的监控,同时支持用户对计算任务进行管理操作。
用户通过计算监控和管理模块对计算任务进行监控和管理时,利用操作界面发送关于任务监控和管理的网络请求,计算监控和管理模块收到用户的网络请求后,将存储在存储模块上的计算任务的执行状态反馈给用户,实现用户的监控功能,用户点击任务的监控链接以后,通过内嵌的监控工具,实时刷新任务运行数据展示给用户。
用户通过计算监控和管理模块对计算任务进行监控和管理时,计算监控和管理模块还通过绘制折线图的方式展示计算资源随时间的占用情况展示给用户。
所述计算监控和管理模块通过监控界面实现用户对任务状态的管理,提供停止任务、暂停任务、恢复任务的功能;对于运行中任务,接收到用户提交的停止操作后,通过获取任务执行状态,进行如下操作:(1)任务处于已创建状态时,将任务状态更改为停止,并通知计算节点构建模块中止k8s集群的资源分配工作;(2)任务处于等待状态时,将任务状态更改为停止,并将任务从资源等待队列移除;(3)任务处于构建状态时,将任务状态更改为停止,并通知计算节点构建模块的docker镜像进程停止构建,同时在k8s集群中取消资源分配。(4)任务处于运行状态时,将任务状态更改为停止,同时通知k8s集群,保存用户任务的当前结果到存储模块,然后销毁对应的任务节点容器,释放计算资源。
对于运行中任务,接收到用户提交的暂停操作后,计算监控和管理模块获取存储模块上任务执行状态信息,根据任务目前处于的不同执行状态,进行如下操作:(1)任务处于已创建状态时,计算监控和管理模块直接将任务状态更改为已暂停,并通知暂停k8s集群的资源分配工作。(2)任务处于等待状态时,将任务状态更改为暂停,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为已暂停,并通知计算节点构建模块docker镜像进程停止构建。(4)任务处于运行状态时,将任务状态更改为已暂停,同时通知k8s集群,暂停执行用户代码,同时不释放计算资源,准备随时继续执行。
对于已暂停任务,计算监控和管理模块接收到用户恢复操作后,计算监控和管理模块获取存储模块上任务执行状态信息,根据任务暂停时的不同执行状态,进行如下操作:(1)任务暂停时处于已创建状态,将任务状态更改为已创建,并通知计算节点构建模块继续k8s集群的资源分配工作;(2)任务暂停时处于等待状态,将任务状态更改为等待,并将任务恢复到资源等待队列;(3)任务暂停时处于构建状态,将任务状态更改为构建,并通知计算节点构建模块的docker镜像进程重新构建镜像;(4)任务暂停时处于运行状态,系统将任务状态更改为运行,同时通知k8s集群,恢复执行用户代码。
计算监控和管理模块将上述状态信息的更改存储到存储模块。
有益效果:与现有技术相比,本发明提供的一种实现代码仓库与计算服务整合的方法及系统,用户可直接在代码仓库或计算管理模块发起人工智能计算任务,计算任务使用的代码和计算资源均在发起页面直接配置 ,无需进行代码迁移。
附图说明
图1是本发明方法流程图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
实现代码仓库与计算服务整合的方法,内嵌gitea作为代码仓库模块,通过k8s集群的形式管理和提供可拓展的计算资源,使用ray框架支持分布式机器学习,通过ceph提供分布式存储,实现代码仓库、计算资源、结果存储在统一平台管理;如图1所示,具体包括如下步骤:
用户发起计算任务,用户提供新建任务信息,包括任务名称、任务描述、代码分支、代码版本(默认最新版本)、任务入口文件和使用的计算资源,通过版本控制系统或https协议获取用户新建任务信息,校验用户提交的新建任务信息是否有误;包括:任务名称是否重名、代码分支是否存在、代码版本是否存在。如果校验通过,任务创建成功,否则给用户提示错误信息;任务创建成功后,查询现有集群资源列表,判断是否有满足所建任务指定的计算资源,如不满足,则将新建任务进入延迟排队状态,等待集群资源充足时将自动重试。如计算资源可满足,通过k8s分配对应的计算节点;从代码仓库调用与任务相关的代码到计算节点,启动计算节点,并且绑定存储资源给对应计算节点;通过计算节点系统内置的分布式计算框架,开始计算任务,实时将任务执行日志和任务执行输出数据保存至存储地址;通过界面形式展示任务列表,进入任务详情界面,系统在计算管理界面中展示任务列表,展示当前任务的执行状态和统计数据,实现用户对计算任务的监控,同时支持用户对计算任务进行管理操作。
用户对计算任务进行监控和管理时,可实时发送网络请求,收到用户的网络请求后,计算节点反馈计算任务的执行状态和计算资源的占用情况,并通过绘制折线图的方式展示计算资源随时间的占用情况,通过监控界面展示计算任务的执行状态,实现用户的监控功能,用户点击任务的监控链接以后,反馈给用户监控页面,页面通过内嵌tensorboard等人工智能计算任务常用的监控工具,实时刷新任务运行数据进行展示。
计算任务主要有如下几种执行状态:已创建、等待、构建、运行、暂停、停止,并通过任务详情页面展示给用户;(1)已创建:收到用户新建任务操作后,校验通过,通知k8s集群开始分配资源,返回给用户任务已创建的消息;(2)等待状态:k8s集群在收到分配资源通知后,还未完成资源分配工作时所处的状态;(3)构建状态:k8s集群中资源分配完毕,正在进行容器镜像的构建;(4)运行状态:做完前面所述资源分配和容器构建,实际运行用户代码的状态;(5)暂停状态:将计算任务暂停,资源保留不释放,随时可以继续执行的状态;(6)停止状态:提供了任务停止功能,用户触发后,系统对任务的当前结果进行保存,然后停止运行并释放所有资源,不可恢复运行;(7)结束状态:任务被执行结束后的状态。
通过监控界面实现用户对任务状态的监控管理,提供停止任务、暂停任务、恢复任务的功能。对于运行中任务,接收到用户提交的停止操作后,根据任务目前处于的不同执行状态,进行如下操作:(1)任务处于已创建状态时,将任务状态更改为停止,并中止k8s集群的资源分配工作。(2)任务处于等待状态时,将任务状态更改为停止,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为停止,并通知docker镜像进程停止构建,同时在k8s集群中取消资源分配。(4)任务处于运行状态时,将任务状态更改为停止,同时通知k8s集群,保存用户任务的当前结果到存储地址,然后销毁对应的任务节点容器,释放计算资源。
对于运行中任务,接收到用户提交的暂停操作后,根据任务目前处于的不同执行状态,进行如下操作:(1)任务处于已创建状态时,系统直接将任务状态更改为已暂停,并暂停k8s集群的资源分配工作。(2)任务处于等待状态时,将任务状态更改为暂停,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为已暂停,并通过消息中间件,通知docker镜像进程停止构建。(4)任务处于运行状态时,将任务状态更改为已暂停,同时通知k8s集群,暂停执行用户代码,同时不释放计算资源,准备随时继续执行。
对于已暂停任务,接收到用户恢复操作后,根据任务暂停时的不同执行状态,进行如下操作:(1)任务暂停时处于已创建状态,将任务状态更改为已创建,并继续k8s集群的资源分配工作。(2)任务暂停时处于等待状态,将任务状态更改为等待,并将任务恢复到资源等待队列。(3)任务暂停时处于构建状态,将任务状态更改为构建,并通过消息中间件,通知docker镜像进程重新构建镜像。(4)任务暂停时处于运行状态,系统将任务状态更改为运行,同时通知k8s集群,恢复执行用户代码。
通过http请求,为用户提供保存在存储地址任务执行日志和任务执行输出数据,并展示在页面上,提供文件下载链接,便于用户进行下载和浏览。
通过运行多个容器作为执行任务的计算节点,并将用户代码从代码仓库导入到容器中,代码用于后期任务执行;为计算节点绑定通过生成虚拟路径得到的对象存储及文件存储资源,用作计算任务的数据输入、监控数据和结果存储的存储地址;在监控进程中注册任务,生成监控链接,开始执行任务;执行完成后将日志和结果保存至存储地址。
实现代码仓库与计算服务整合的系统,包括代码仓库模块,计算节点构建模块,计算任务监控和管理模块,以及存储模块;
计算任务监控和管理模块通过新建任务界面用于用户新建计算任务的交互;用户通过新建任务界面输入任务名称、任务描述、代码分支 、代码版本(默认最新版本)、任务入口文件和使用的计算资源等新建任务信息,计算任务监控和管理模块通过版本控制系统或https协议获取用户新建任务信息,校验用户提交的新建任务信息是否有误;包括:任务名称是否重名、代码分支是否存在、代码版本是否存在。如果校验通过,计算任务监控和管理模块反馈用户任务创建成功,否则给用户提示错误信息;任务创建成功后,计算任务监控和管理模块查询现有集群资源列表,判断是否有满足所建任务指定的计算资源,如不满足,则将新建任务进入延迟排队状态,等待集群资源充足时将自动重试。如计算资源可满足,触发计算节点构建模块,计算节点构建模块通过k8s分配对应的计算节点,从代码仓库调用与任务相关的代码到计算节点,启动计算节点,并且绑定存储资源给对应计算节点,构建计算节点成功;计算节点通过系统内置的分布式计算框架,开始执行计算任务。计算节点实时将任务执行日志和任务执行输出数据保存至存储模块;计算任务监控和管理模块实时获取存储模块上的任务执行日志和任务执行输出数据,通过界面形式向用户展示任务列表,用户进入任务详情界面,计算任务监控和管理模块在计算管理界面中展示任务列表,展示当前任务的执行状态和统计数据,实现用户对计算任务的监控,同时支持用户对计算任务进行管理操作。
用户通过计算监控和管理模块对计算任务进行监控和管理时,用户通过操作界面可实时发送网络请求,计算监控和管理模块收到用户的网络请求后,要求计算节点反馈计算任务的执行状态和计算资源的占用情况,并通过绘制折线图的方式展示计算资源随时间的占用情况,通过监控界面展示计算任务的执行状态,实现用户的监控功能,用户点击任务的监控链接以后,反馈给用户监控页面,页面通过内嵌tensorboard等人工智能计算任务常用的监控工具,实时刷新任务运行数据进行展示。
计算监控和管理模块通过监控界面实现用户对任务状态的管理,提供停止任务、暂停任务、恢复任务的功能。对于运行中任务,接收到用户提交的停止操作后,通过获取任务执行状态,进行如下操作:(1)任务处于已创建状态时,将任务状态更改为停止,并通知计算节点构建模块中止k8s集群的资源分配工作,并将状态信息的更改存储到存储模块。以下状态信息的更改,同样存储到存储模块。(2)任务处于等待状态时,将任务状态更改为停止,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为停止,并通过消息中间件,通知计算节点构建模块的docker镜像进程停止构建,同时在k8s集群中取消资源分配。(4)任务处于运行状态时,将任务状态更改为停止,同时通知k8s集群,保存用户任务的当前结果到存储模块,然后销毁对应的任务节点容器,释放计算资源。
对于运行中任务,接收到用户提交的暂停操作后,计算监控和管理模块根据任务目前处于的不同执行状态,进行如下操作:(1)任务处于已创建状态时,计算监控和管理模块直接将任务状态更改为已暂停,并通知暂停k8s集群的资源分配工作。(2)任务处于等待状态时,将任务状态更改为暂停,并将任务从资源等待队列移除。(3)任务处于构建状态时,将任务状态更改为已暂停,并通过消息中间件,通知计算节点构建模块docker镜像进程停止构建。(4)任务处于运行状态时,将任务状态更改为已暂停,同时通知k8s集群,暂停执行用户代码,同时不释放计算资源,准备随时继续执行。
对于已暂停任务,计算监控和管理模块接收到用户恢复操作后,根据任务暂停时的不同执行状态,进行如下操作:(1)任务暂停时处于已创建状态,将任务状态更改为已创建,并通知继续k8s集群的资源分配工作。(2)任务暂停时处于等待状态,将任务状态更改为等待,并将任务恢复到资源等待队列。(3)任务暂停时处于构建状态,将任务状态更改为构建,并通过消息中间件,通知计算节点构建模块的docker镜像进程重新构建镜像。(4)任务暂停时处于运行状态,系统将任务状态更改为运行,同时通知k8s集群,恢复执行用户代码。
存储模块通过http请求,为用户提供保存在存储地址任务执行日志和任务执行输出数据,并通过计算监控和管理模块展示在页面上,提供文件下载链接,便于用户进行下载和浏览。