文章目录
1 Overview
要把 Kubeflow 的 Pipeline 用溜了,肯定是需要有自定义 Pipeline 的能力了,所以需要熟悉一下 Pipeline 里的一些概念。
如果要搞清楚 Pipeline,?这些文档都必须要读一下,否则你是不清楚怎么利用 Kubeflow 团队提供的 SDK 来构建自己的容器工作流的。
本文的目标就是构建一个简单并且本地可用的 Pipeline。
P.S. 这里先不涉及做机器学习的流程
2 Steps
2.1 理解 component 和 pipeline
A -> B -> C
?这个流程可以理解成 pipeline,A, B, C 分别就是 component。
pipeline 可以只有一个 component。
2.2 Python SDK 构建 component 和 pipeline
假设现在你想写一个机器学习的 pipeline,大概抽象成?几个步骤。
读取数据 -> 进行训练 -> 保存模型
要构建完整的 pipeline,需要先考虑构建每个步骤 component 的问题。
构建 pipeline 可以有几种方式,区别在于是否将 Python SDK 的代码嵌入到业务代码里。因为如果你本来就写好了一个 training 的程序,那么这时候就可以直接利用 Docker 镜像,将业务代码封装成一个镜像,无需侵入。另一种方法就是边写 training 程序的时候边把 SDK 中构建 component 的方法带上。
两种方法都是 workd 的,可以参考 https://www.kubeflow.org/docs/pipelines/sdk/sdk-overview/
?是一个简单的例子。
import kfp
from kfp import dsl
def test_for_test():
# 假设 python:alpine3.6 就是我们要工作的镜像和执行的具体代码的地方
# 通过 dsl.ContainerOp() 就把上述工作内容作为一个 component
return dsl.ContainerOp(
name='testfortest',
image='python:alpine3.6',
command=['sh', '-c'],
arguments=["echo 'testfortest'"]
)
# 然后就是设计 pipeline
# 本例很简单,只有一个 component
@dsl.pipeline(
name='test for test',
description='test for test'
)
def try_test_for_test():
test_for_test()
if __name__ == '__main__':
# 通过这个方法,生成一个 zip 文件,用来在 Pipeline UI 上上传的
kfp.compiler.Compiler().compile(try_test_for_test, __file__ + '.zip')
2.3 上传 pipeline
至于为什么是一个 zip 文件,其实是因为通过前端上传 zip 文件,后端会解析成 Argo 需要的 YAML 文件。
上传完成,可以试跑一下,只要能访问镜像,就可以。这里就不赘述了。
3 Summary
Pipeline 实际上提供了一个 Workflow 这样的一个开箱即用的工具,通过 Python SDK,用户可以自定义自己的工作流。
本文只介绍了一个简答的 pipeline,后面的文章还会介绍一下,如果运行一个真正的机器学习的任务。