在 Kubeflow Pipelines 上运行 Kedro 管道:kedro-kubeflow 插件与部署实践解析
【免费下载链接】kedroKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.项目地址: https://gitcode.com/GitHub_Trending/ke/kedro
Kubeflow Pipelines 是面向机器学习工作流的端到端(E2E)编排工具,能够将 Kedro 管道以容器化的方式部署、扩缩容并管理在任意 Kubernetes 集群上。本篇指南以 Kedro 官方文档 kubeflow.md 为主体,结合仓库内分布式部署与节点分组方法论,讲解 Kubeflow Pipelines 的适用场景、kedro-kubeflow插件的接入方式,以及将 Kedro 管道迁移到该平台前需要掌握的技术准备。读完本文,你将理解为什么要在 Kubernetes 上选择 Kubeflow Pipelines,并掌握“容器化 → 转换平台原语 → 参数化运行 → 节点分组”这一完整的部署思路。
Kubeflow Pipelines 是什么
Kubeflow Pipelines 是一个端到端(E2E)的编排工具,用于在Docker 容器内部署、扩展和管理机器学习系统。它允许你:
- 调度(schedule)与对比(compare)运行:可以对管道进行定时调度,并对多次运行的结果进行横向对比;
- 生成详细的运行报告:每次运行都会产出可供检查的详细报告,便于排查问题与审计。
在 Kedro 的部署体系里,Kubeflow Pipelines 属于分布式部署的一种目标平台。Kedro 官方文档在 部署总览 中给出的决策流程是:如果管道无法在单机运行,就进入分布式部署指南(distributed.md),而 Kubeflow Pipelines 正是其中列出的可选平台之一(与 Airflow、Amazon SageMaker、Dask、Databricks、Prefect、Vertex AI 并列)。
为什么要使用 Kubeflow Pipelines
官方文档给出了三个核心理由:
- 云无关(cloud-agnostic):它可以在任何 Kubernetes 集群上运行,不绑定特定云厂商,便于在不同基础设施之间迁移;
- 面向机器学习工作流定制:Kubeflow 针对模型部署(model deployment)、实验跟踪(experiment tracking)和超参数调优(hyperparameter tuning)做了专门适配,比通用工作流引擎更贴合 ML 场景;
- 组件与管道可复用:你可以复用现成的组件(components)和管道(pipelines)来快速拼装端到端解决方案,避免重复建设。
值得注意的是,Google Cloud 的 Vertex AI Pipelines 正是“以全托管方式提供 Kubeflow Pipelines 功能”的服务,对应文档见 vertexai.md。如果你的团队更倾向托管的无运维方案,可以沿同一思路迁移。
kedro-kubeflow插件:把 Kedro 管道搬到 Kubeflow
在 Kedro 生态中,将 Kedro 管道运行到 Kubeflow Pipelines 上的官方推荐方式,是使用由GetInData | Part of Xebia开发的kedro-kubeflow插件。该插件的详细用法、命令清单与配置项以插件自身的 GitHub 仓库和 ReadTheDocs 文档为准(官方文档 kubeflow.md 中给出了这两个外部入口)。
从 Kedro 的插件体系看,kedro-kubeflow属于社区维护插件。在 plugins.md 的社区插件列表中,它的定位被描述为:
由 GetInData 开发,允许你使用 Kubeflow Pipelines 在 Kubernetes 集群上运行和调度管道。
这与 Kedro 的插件扩展机制一脉相承:Kedro 的扩展机制构建在pluggy之上,通过pyproject.toml中的entry_points向 CLI 注入命令(例如[project.entry-points."kedro.project_commands"]),插件安装后即可通过kedro <plugin-name> <command>的形式调用。kedro-kubeflow同样遵循这一约定,为 Kedro 项目注入面向 Kubeflow 的编译与提交命令,安装后即可在项目目录中使用。
部署方法论:迁移到 Kubeflow 前的四条准备路径
虽然kedro-kubeflow封装了大量细节,但理解 Kedro 官方推荐的分布式部署方法论(distributed.md)仍然必要,它决定了插件生成的管道是否符合平台预期:
1. 容器化整个管道
分布式部署的第一步是把整个项目或管道容器化。官方推荐使用 Docker,并建议先用pip-compile将项目依赖锁定到requirements.txt(参见 dependencies.md):
pip-compile --output-file=<project_root>/requirements.txt --input-file=<project_root>/requirements.txtKubeflow Pipelines 以容器为执行单元,因此一个依赖完整、可复现的镜像(通常借助kedro-docker插件构建)是所有后续步骤的前提。
2. 把 Kedro 管道转换为平台原语
Kedro 管道是由nodes构成的 DAG,其结构非常适合语义化地翻译成各平台的任务模型:每个 node 映射为平台上的一个任务(task),在 Kubeflow 语境下即一个 operator,依赖关系与Pipeline.node_dependencies保持一致。为此需要编写一个转换脚本,并注意两点:
- 将所有 catalog 条目保存到远程位置,保证各容器能共享数据;
- 为每个 node 起一个程序员友好的名字,并在管道中使用
tags简化后续筛选。
3. 参数化运行
一个 node 通常对应一个计算单元,可用最基本的kedro run加参数来驱动:
kedro run --nodes=<node_name>官方建议优先用 names、tags 和自定义 flags 来切换不同行为,而不是为每种行为改代码;同时,所有 job/task/operator 应使用同一版本的代码,即同一个 Docker 镜像。
4. (可选)创建 starter
如果经常向类似环境或平台部署,可以构建自己的 Kedro starter,把第 2 步写好的部署脚本固化下来复用。
节点分组:让 Kubeflow 任务结构更高效
部署到 Kubeflow 这类分布式平台时,任务粒度直接影响资源利用与调度开销。Kedro 提供了三种分组手段(详见 nodes_grouping.md):
| 分组方式 | 命令示例 | 适用场景 |
|---|---|---|
| 按管道(pipelines) | kedro run --pipelines=<pipeline_name> | 项目已按逻辑拆分成多个管道,可独立或顺序执行 |
| 按标签(tags) | kedro run --tags=<your_tag_name> | 需要运行不隶属于同一管道的特定节点 |
| 按命名空间(namespaces) | kedro run --namespaces=<namespace1,namespace2> | 在管道内做逻辑分组,同时保持清晰的依赖关系 |
其中命名空间在部署场景中尤其有价值:kedro-airflow等插件支持--group-by namespace把同一命名空间下的节点合并为单个任务,从而减少任务数量、保持逻辑相关节点同批执行。Kedro 管道中基于命名空间的节点分组,天然可以作为 Kubeflow 任务划分的依据——同一命名空间的节点往往共享中间数据、适合放进同一个 Kubeflow 步骤。
源码佐证:Kedro 运行器与插件如何支撑平台部署
从源码层面看,Kedro 的管道执行与部署能力由运行器体系支撑。AbstractRunner是 Kedro 所有Pipeline运行器的基类(见 runner.py),其run()方法接收pipeline、catalog、hook_manager与run_id,负责按依赖关系执行节点并写回结果。SequentialRunner、ParallelRunner、ThreadRunner都是它的实现;类似地,kedro-kubeflow这类插件在把节点映射为 Kubeflow 步骤时,每个步骤内部仍会通过 Kedro 的KedroSession加载项目上下文并执行kedro run语义的运行,AbstractRunner定义的执行契约因此成为插件与内核之间稳定的衔接层。
另外一个与分布式部署强相关的技术约束是:当每个 node 被放到独立的容器/步骤中执行时,MemoryDataset无法作为节点间中间结果的存储,因为每一步都运行在独立进程中。这与 Airflow 部署文档(airflow.md)中反复强调的注意事项完全一致——所有节点间传递的数据集都必须注册在DataCatalog中并落到持久化存储(如对象存储、共享文件系统),节点才能访问前序节点的产出。因此,在把 Kedro 管道交给kedro-kubeflow之前,请务必检查 catalog 中是否存在仅存在于内存的中间数据集,并将其改写为带远程路径的持久化数据集。
小结
将 Kedro 管道部署到 Kubeflow Pipelines 的完整路径可归纳为:先用kedro-kubeflow插件(GetInData | Part of Xebia)完成管道到 Kubeflow 步骤的转换,再遵循官方分布式部署方法论——容器化项目、持久化 catalog 数据、参数化kedro run,并借助命名空间合理划分任务粒度。Kubeflow Pipelines 的云无关特性、对 ML 工作流(模型部署、实验跟踪、超参调优)的专门支持,以及组件/管道复用能力,使它成为在 Kubernetes 集群上规模化运行 Kedro 管道的可靠选择。插件的最新用法与命令细节,请以kedro-kubeflow插件自身的仓库与文档为准。
【免费下载链接】kedroKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.项目地址: https://gitcode.com/GitHub_Trending/ke/kedro
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考