在 Kubeflow Pipelines 上运行 Kedro 管道:kedro-kubeflow 插件与部署实践解析
2026/9/15 10:14:43 网站建设 项目流程

在 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

官方文档给出了三个核心理由:

  1. 云无关(cloud-agnostic):它可以在任何 Kubernetes 集群上运行,不绑定特定云厂商,便于在不同基础设施之间迁移;
  2. 面向机器学习工作流定制:Kubeflow 针对模型部署(model deployment)、实验跟踪(experiment tracking)和超参数调优(hyperparameter tuning)做了专门适配,比通用工作流引擎更贴合 ML 场景;
  3. 组件与管道可复用:你可以复用现成的组件(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.txt

Kubeflow 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()方法接收pipelinecataloghook_managerrun_id,负责按依赖关系执行节点并写回结果。SequentialRunnerParallelRunnerThreadRunner都是它的实现;类似地,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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询