基于Kubernetes 的机器学习工作流

极客远征者
• 阅读 4441

介绍

Pipeline是Kubeflow社区最近开源的一个端到端工作流项目,帮助我们来管理,部署端到端的机器学习工作流。Kubeflow 是一个谷歌的开源项目,它将机器学习的代码像构建应用一样打包,使其他人也能够重复使用。 
kubeflow/pipeline 提供了一个工作流方案,将这些机器学习中的应用代码按照流水线的方式编排,形成可重复的工作流。并提供平台,帮助编排,部署,管理,这些端到端机器学习工作流。

概念

pipeline 是一个面向机器学习的工作流解决方案,通过定义一个有向无环图描述流水线系统(pipeline),流水线中每一步流程是由容器定义组成的组件(component)。 
当我们想要发起一次机器学习的试验时,需要创建一个experiment,在experiment中发起运行任务(run)。Experiment 是一个抽象概念,用于分组管理运行任务。

  • Pipeline:定义一组操作的流水线,其中每一步都由component组成。 背后是一个Argo的模板配置。
  • Component: 一个容器操作,可以通过pipeline的sdk 定义。每一个component 可以定义定义输出(output)和产物(artifact), 输出可以通过设置下一步的环境变量,作为下一步的输入, artifact 是组件运行完成后写入一个约定格式文件,在界面上可以被渲染展示。
  • Experiment: 可以看做一个工作空间,管理一组运行任务。
  • Run: pipeline 的运行任务实例,这些任务会对应一个工作流实例。由Argo统一管理运行顺序和前后依赖关系。
  • Recurring run: 定时任务,定义运行周期,Pipeline 组件会定期拉起对应的Pipeline Run。

Pipeline 里的流程图

基于Kubernetes 的机器学习工作流

组件的Artifact

基于Kubernetes 的机器学习工作流

基于Kubernetes 的机器学习工作流

模块

Pipeline 的组件比较简单,大致分为5个部分。

  • MySQL: 用于存储Pipeline/Run 等元数据。
  • Backend: 一个由go编写的后端,提供kubernetes ApiServer 风格的Restful API。处理前端以及SDK发起的操作请求。 Pipeline/Experiment 之类的请求会直接存入MySQL元数据。和Run 相关的请求除了写入MySQL以外还会通过APIServer 同步操作Argo实例。
  • CRD Controller: Pipeline 基于Argo扩展了自己的CRD ScheduledWorkflow, CRD Controller 中会主要监听ScheduledWorkflow和Argo 的Workflow 这两个CRD变化。处理定期运行的逻辑。
  • Persistence Agent: 和CRD Controller 一样监听Argo Workflow变化,将Workflow状态同步到MySQL 元数据中。它的主要职责是实时获取工作流的运行结果。
  • Web UI:提供界面操作。 从Backend 中读取元数据,将流水线过程和结果可视化,获取日志,发起新的任务等。

基于Kubernetes 的机器学习工作流

其他工具

除了以上核心模块以外, Pipeline提供了一系列工具,帮助更好构建流水线。

  • SDK, 用于定义pipeline和component,编译为一个argo yaml模板,可以在界面上导入成pipeline。
  • CLI 工具,替代Web UI,调用Backend Api 管理流水线
  • Jupyter notebook。 可以在notebook中编写训练代码,也可以在notebook中通过sdk管理Pipeline。



本文作者:萧元

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java中比较两个时间的差值
项目背景1.某篇文稿的发布时间是publishDate,例如:2020072118:00:41。2.现要求判断该篇文稿的发布时间是否在近30天之内。publicstaticlongdayDiff(DatecurrentDate,DatepublishDate){LongcurrentTimecurrentDat
Stella981 Stella981
3年前
KubeFlow
Argo是一个开源原生容器工作流引擎用于在Kubernetes上开发和运行应用程序。ArgoWorkflow流程引擎,可以编排容器流程来执行业务逻辑,在20年4月8日进入CNCF孵化器组。而KubeFlow的Pipeline子项目,由Google开源,其全面依赖Argo作为底层实现,并增强持久层来补充流程管理能力,同时通过PythonSDK来简化流程
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(