Kubeflow Pipeline - 构建一个机器学习 Workflow

本文介绍如何使用Kubeflow构建一个简单的机器学习工作流,包括训练代码的组件化、Pipeline的构建及运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 Overview

前面文章介绍过如何通过 Pipeline 来构建工作流,因为 Kubeflow 主要是在机器学习的场景下使用的,那么本文就简单介绍一下怎么构建一个简单 ML 的工作流。

官网的给出的例子不是太直观,而且和 GCP 有比较强的耦合,不过仔细看看文档,还是可以总结出一套简单的方案的。提前说明一下,需要的工作并不会很多。

image_1dhvqcovi1gig1h5b1fqs1ngghfj9.png-133.4kB

2 ML Workflow

首先准备一段 Traning 的代码,这是一段很经典的 mnist 数据集训练的代码。

from __future__ import absolute_import, division, print_function, \
  unicode_literals

import tensorflow as tf


def train_model():
  mnist = tf.keras.datasets.mnist
  # 下载 mnist 数据集,可以离线提前下载后填写路径
  # 不填就要走公网下载数据了,数据量不大,十多兆
  (x_train, y_train), (x_test, y_test) = mnist.load_data()
  x_train, x_test = x_train / 255.0, x_test / 255.0

  model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(128, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])

  model.compile(optimizer='adam',
                loss='sparse_categorical_crossentropy',
                metrics=['accuracy'])
  model.fit(x_train, y_train, epochs=5)
  model.evaluate(x_test, y_test)


if __name__ == '__main__':
  train_model()

明确一下目标,我们需要把这个训练过程,放在 Pipeline 上运行,所以我们会将?的代码封装成一个 component,然后再构架 pipeline,这里会了方便,依然是构建一个包含一个 component 的 pipeline。

按照官方文档,可以通过其提供的 Python SDK,将这个 component 转化为可以通过 UI 上传的 zip 文件。

https://www.kubeflow.org/docs/pipelines/sdk/sdk-overview/

这里还是提供了两种方法,将代码封装成 component 的,一种是将你的代码用 Docker 镜像封装,另一种就是通过 Python SDK 来侵入代码,通过 Python 直接完成 build 和 push,反正不管怎样,本质上都会被封装成一个镜像,毕竟跑在 Pipeline 上的都是容器。

可以参考我编的 Dockerfile。

FROM tensorflow/tensorflow:1.14.0-py3
ADD mnist.py .
ENTRYPOINT ["python", "mnist.py"]

还有转成 zip 文件的 pipeline 构建代码。

#!/usr/bin/env python3
# mnist_op.py

import kfp
from kfp import dsl

def train_mnist_op():
  return dsl.ContainerOp(name='mnist', image='mnist:v0.0.1')

@dsl.pipeline(
    name='mnist train',
    description='test'
)
def pipeline():
  op = train_mnist_op()

if __name__ == '__main__':
  kfp.compiler.Compiler().compile(pipeline, __file__ + '.zip')

然后在目录下,运行 docker build -t mnist:v0.0.1 .,就完成镜像的构建了。然后就是运行代码构建 zip 文件。

dsl-compile --py mnist_op.py --output mnist_op.py.zip

结果如下。

image_1dhvr1av8l4tqu4gvc6rs1ifnm.png-169.5kB

通过 Pipeline UI 上传。

image_1dhvr34jr9lo1tto4h41psu1af13.png-180.8kB

创建 Run,并查看结果。

image_1dhvr4emg1ihv128a1lfg1cmi1gs51g.png-186.2kB

3 Summary

按照?的流程,应该就可以创建一个非常简答的 ML Pipeline 了,当然一个完整的流程,会切分成读取数据,清洗数据(Transform),训练,然后输出模型,大家可以按照上述的访问,分别构建 component,然后最终构建起自己的 pipeline。

<think>好的,用户想了解如何绘制机器学习工作流图。首先,我需要整理现有的引用资料,看看里面有没有相关的信息。根据引用[3],代理工作流机器学习中应用成熟,提到了Apache Airflow、Luigi、Kubeflow等工具,这些应该可以用来构建工作流。所以第一步应该是推荐这些工具。 然后,用户可能需要具体的步骤指导。应该分步骤说明,比如需求分析、选择工具、绘制流程图等。引用[2]提到数据流图是结构化分析方法的一部分,属于需求分析阶段的结果,所以在步骤中可能需要提到需求分析的重要性,并参考数据流图的绘制方法。 接下来,用户可能关心可视化工具。引用[4]提到了matplotlib可以美化图表,但工作流图可能需要更专业的工具,比如Draw.io、Lucidchart或者PlantUML。这些工具适合绘制流程图,可以生成美观的图表,符合专业需求。 还要考虑工作流的自动化部分。引用[3]中提到的工具如Kubeflow和MLflow不仅支持绘制,还能实际执行工作流,所以需要区分绘图工具和自动化平台的不同用途。 可能还需要注意事项,比如模块化设计、版本控制、文档化,这些在引用[3]和实际开发中都是重要的点。同时,用户可能希望工作流图能与实际代码结合,比如使用Python库生成,这样代码和图表可以同步更新。 最后,生成相关问题,要确保问题覆盖工具选择、优化方法、与数据流图区别,以及自动化工具的比较,帮助用户进一步学习。</think>### 如何绘制机器学习工作流图 #### 一、工具与方法选择 1. **专业流程图工具** - 使用**Draw.io**、**Lucidchart**或**Microsoft Visio**绘制静态流程图。这些工具支持拖拽式操作,可直观表示数据输入、预处理、模型训练、评估等环节[^2][^4]。 - 示例符号规范: - 椭圆:开始/结束节点 - 矩形:处理步骤(如特征工程、模型训练) - 菱形:条件判断(如超参数调优) - 箭头:数据流向 2. **代码驱动工具** - 通过**Python库(如Graphviz、PyFlow)**生成工作流图,实现代码与流程图同步更新: ```python from graphviz import Digraph dot = Digraph() dot.node('A', '数据采集') dot.node('B', '特征工程') dot.edges(['AB']) dot.render('workflow.gv', view=True) ``` 3. **自动化工作流平台** - 使用**Kubeflow Pipelines**或**Apache Airflow**定义可执行的工作流,支持任务依赖关系和并行化处理[^3]。例如Kubeflow的DSL语法: ```python @dsl.pipeline(name='ML Pipeline') def ml_pipeline(): preprocess_task = preprocess_op(data_path='input.csv') train_task = train_op(preprocess_task.output) ``` #### 二、核心绘制步骤 1. **需求分析** 明确工作流包含的阶段(如数据清洗→特征选择→模型训练→部署),参考数据流图的功能模型设计原则。 2. **模块化设计** - 将特征工程拆分为缺失值处理、标准化、特征编码等子模块 - 模型训练部分标注算法类型(如随机森林、神经网络) 3. **依赖关系标注** 使用带权箭头表示数据流向,例如: $$数据存储 \xrightarrow{CSV文件} 预处理模块 \xrightarrow{NDArray} 模型训练$$ 4. **可视化优化** - 应用**颜色编码**(红色表示数据输入,蓝色表示计算节点) - 添加注释框说明关键技术点,如引用[1]中提到的特征工程对模型效果的影响 #### 三、典型工作流结构示例 ``` [数据采集] → [数据清洗] → [特征工程] → [模型训练] ↓ ↑ [数据存储] ← [模型评估] ``` #### 四、注意事项 1. 保持**版本控制**,使用Git管理流程图文件与代码 2. 对关键节点添加性能指标(如特征工程耗时、模型准确率) 3. 复杂工作流建议分层展示,第一层为宏观流程,第二层展开具体模块
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值