Kubeflow Pipeline - 构建自定义的 Workflow

本文介绍如何使用Kubeflow Pipeline构建自定义工作流,涵盖组件和管道的概念,通过Python SDK构建组件和管道的过程,以及如何上传和运行管道。适合初学者了解Kubeflow Pipeline的基本操作。
部署运行你感兴趣的模型镜像

1 Overview

要把 Kubeflow 的 Pipeline 用溜了,肯定是需要有自定义 Pipeline 的能力了,所以需要熟悉一下 Pipeline 里的一些概念。

如果要搞清楚 Pipeline,?这些文档都必须要读一下,否则你是不清楚怎么利用 Kubeflow 团队提供的 SDK 来构建自己的容器工作流的。

image_1dhv3asi41gqm1qjf14esmrksj79.png-194.3kB

https://www.kubeflow.org/docs/pipelines/

本文的目标就是构建一个简单并且本地可用的 Pipeline。

P.S. 这里先不涉及做机器学习的流程

2 Steps

2.1 理解 component 和 pipeline

A -> B -> C

?这个流程可以理解成 pipeline,A, B, C 分别就是 component。

image_1dhvg6auf13g92e17g2ssb1bvr1g.png-97.1kB

pipeline 可以只有一个 component。

image_1dhvg18ku1d1mpnb1b4e5akkch13.png-52.3kB

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')

image_1dhvgu5l61rlt1hoh1dr9ig46m1t.png-266.6kB

2.3 上传 pipeline

至于为什么是一个 zip 文件,其实是因为通过前端上传 zip 文件,后端会解析成 Argo 需要的 YAML 文件。

image_1dhvh01m64if17l5152smcq2rb2a.png-287.1kB

上传完成,可以试跑一下,只要能访问镜像,就可以。这里就不赘述了。

image_1dhvh3acp1nno1t951ttas7b2ot2n.png-123.2kB

3 Summary

Pipeline 实际上提供了一个 Workflow 这样的一个开箱即用的工具,通过 Python SDK,用户可以自定义自己的工作流。

本文只介绍了一个简答的 pipeline,后面的文章还会介绍一下,如果运行一个真正的机器学习的任务。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### XGBoost 镜像库使用指令 XGBoost 并非直接依赖容器镜像进行部署,但在某些情况下(如 Kubeflow 管道中使用 XGBoost),可能需要将 XGBoost 包含在容器镜像中以实现模型训练和部署。以下是与 XGBoost 镜像库相关的指令及其使用方法。 #### 1. 构建包含 XGBoost 的自定义镜像 如果无法访问 `gcr.io` 或其他公共镜像仓库,可以通过以下方式构建包含 XGBoost 的自定义镜像: ```dockerfile # 使用官方 Python 基础镜像 FROM python:3.9-slim # 设置工作目录 WORKDIR /app # 安装依赖 RUN pip install --no-cache-dir xgboost==1.7.0 scikit-learn pandas # 复制代码到容器内 COPY . /app # 指定入口点 CMD ["python", "train.py"] ``` 构建镜像时,执行以下命令: ```bash docker build -t custom-xgboost:latest . ``` #### 2. 下载并推送镜像到私有仓库 在离线环境中部署 Kubeflow 时,可能需要下载所需镜像并推送到私有仓库。以下是具体步骤: - 获取 Kubeflow 安装包中的镜像列表[^2]。 - 下载镜像并重新标记: ```bash docker pull gcr.io/kubeflow-images-public/xgboost-trainer:v1.0 docker tag gcr.io/kubeflow-images-public/xgboost-trainer:v1.0 harbor.example.com/library/xgboost-trainer:v1.0 docker push harbor.example.com/library/xgboost-trainer:v1.0 ``` #### 3. 在 Kubeflow 中使用 XGBoost 镜像 当 Kubeflow 管道中需要使用 XGBoost 模型时,可以指定自定义镜像或从私有仓库拉取镜像。例如,在 Kubeflow Pipeline 的组件定义中: ```yaml apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: xgboost-train- spec: entrypoint: train-xgboost templates: - name: train-xgboost container: image: harbor.example.com/library/xgboost-trainer:v1.0 command: ["python", "train.py"] resources: limits: memory: "4Gi" cpu: "2" ``` #### 4. 解决镜像获取失败问题 如果遇到镜像获取失败的问题,可以参考以下解决方案: - 确保网络代理配置正确,能够访问 `gcr.io` 或其他公共镜像仓库。 - 使用国内镜像加速服务(如阿里云、腾讯云等)[^1]。 - 将所需镜像下载后推送到本地或私有仓库,并修改管道配置以引用新镜像地址。 --- ### 注意事项 1. **版本兼容性**:确保 XGBoost 的版本与 Kubeflow 和其他依赖库的版本兼容。 2. **资源限制**:根据模型复杂度和数据规模,合理设置容器的 CPU 和内存限制。 3. **镜像优化**:尽量减小镜像体积,避免不必要的依赖安装,以提高部署效率。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值