ZenML 生产实战:用 e2e_batch 模板构建端到端 MLOps 项目

ZenML 生产实战:用 e2e_batch 模板构建端到端 MLOps 项目 ZenML 生产实战用 e2e_batch 模板构建端到端 MLOps 项目【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml本文基于 ZenML 生产指南的收官章节「An end-to-end project」带你把部署 ZenML Server、定义 Stack、接入远程存储、云编排、计算扩缩容与 Git 代码仓库六大生产概念合而为一完整走通一个可运行的端到端 MLOps 项目。读完后你将掌握如何用zenml init模板快速生成项目、理解训练/部署/批量推理三条流水线的组织方式与配置文件并通过项目自带的 CLI 控制整套流水线在本地或云端 Stack 上运行。回顾本指南覆盖的六个生产概念在动手之前先回顾生产指南production guide所铺垫的核心能力这些概念正是本端到端项目要综合运用的部署 ZenML Server 的价值——Deploying ZenML把基础设施配置抽象为 Stack——Understanding Stacks接入远程存储如 S3/GCS——Connecting Remote Storage在云上编排流水线——Orchestrating on the Cloud配置流水线以扩展计算资源——Configuring the Pipeline to Scale Compute关联 Git 代码仓库实现代码溯源——Connecting a Code Repository本节将把上述概念全部组合起来构建一个由 ZenML 驱动的端到端 MLOps 项目。生产指南整体定位见 Production Guide 入口它建立在 Starter Guide 之上帮助你从在本地跑通 PoC过渡到在云端跑生产。快速开始全新虚拟环境与依赖安装官方建议从一个不依赖任何现有包的全新 Python 虚拟环境开始然后安装两类依赖pip install zenml[templates,server] notebook zenml integration install sklearn -y其中zenml[templates,server]的两个 extras 各有用途templates提供后续zenml init --template所需的模板能力server则允许你在本地直接拉起 ZenML Server而不必依赖远程实例notebook支持在 Jupyter 中使用 ZenML。scikit-learn 集成则通过集成安装器以隔离方式引入。用 ZenML 模板生成项目接着用 ZenML 模板系统生成 e2e_batch 项目骨架mkdir zenml_batch_e2e cd zenml_batch_e2e zenml init --template e2e_batch --template-with-defaults # 保险起见再安装一次项目依赖 pip install -r requirements.txt--template e2e_batch指定使用端到端批处理supervised ML batch predictions模板--template-with-defaults以默认参数回答模板问题实现免交互生成。备选方案如果模板命令不可用e2e 模板同样以示例形式存在于本仓库的 examples/e2e 目录中。你可以直接克隆 ZenML 仓库并进入examples/e2e然后执行pip install -r requirements.txt和zenml init即可得到与模板生成的项目等价的结构项目 README 中对两条路径做了等价的说明。你将学到什么e2e 项目的整体面貌e2e 项目是一个覆盖 ZenML 主要使用场景的综合性项目模板一组步骤step与流水线pipeline外加一个简单但实用的 CLI。它展示的是监督学习 批量预测场景下的核心 ZenML 概念是在 starter 项目基础上叠加了更多进阶概念的版本。README 给出的默认项目属性为技术名称e2e_use_case版本0.0.1部署环境staging超参数与模型架构调优配置来自 pipeline 的model_search_space参数基于 accuracy 指标与当前已部署模型对比后将训练出的模型晋级promote到staging基于 Evidently 报告的数据漂移检查流水线失败通知notify_on_failure。实操建议原文档强调在推进过程中尝试把这些流水线跑在一个受追踪 Git 仓库上的远程云端 Stack上以巩固前文学到的云编排与代码仓库概念。项目目录结构一条可复用的生产级骨架从 examples/e2e 的目录组织看项目遵循 ZenML 推荐的工程结构. ├── configs # 流水线配置文件 │ ├── deployer_config.yaml # 部署流水线配置 │ ├── inference_config.yaml # 批量推理流水线配置 │ └── train_config.yaml # 训练流水线配置 ├── pipelines # zenml.pipeline 实现 │ ├── batch_inference.py # [CD] 批量推理流水线 │ ├── deployment.py # [CD] 部署流水线 │ └── training.py # [CT] 训练流水线 ├── steps # 按逻辑分组的 zenml.steps 实现 │ ├── alerts # 流水线状态告警 │ ├── deployment # 部署训练好的模型对象 │ ├── data_quality # 基于漂移报告的质量门 │ ├── etl # 数据集 ETL 逻辑 │ ├── hp_tuning # 超参数与模型架构调优 │ ├── inference # 基于注册表模型的推理 │ ├── promotion # 判断新模型是否成为新的推理模型 │ └── training # 训练与评估模型 ├── utils # 辅助函数 ├── Makefile # 集成安装与本地 Stack 快速配置脚本 ├── requirements.txt # 额外 Python 依赖 └── run.py # 在 ZenML Stack 上运行流水线的 CLI代码中所有需要你扩展的位置都用醒目的注释标出### ADD YOUR OWN CODE HERE - THIS IS JUST AN EXAMPLE ### ... ### YOUR CODE ENDS HERE ###三条流水线CT 训练、CD 部署与批量推理e2e 项目由三条流水线组成全部通过Model Control Plane模型注册表 模型版本控制串联训练流水线创建并晋级一个带有训练好的模型对象的新模型版本部署流水线基于推理用模型版本创建预测服务批量推理流水线则使用该推理版本的模型做预测并把新预测结果作为版本化数据产物存回、关联到该模型版本。这样三条流水线既紧密协作又保证只有经过质量保障的模型版本才能产出交付给下游的预测。训练流水线CTpipelines/training.py 中e2e_use_case_training流水线按以下阶段组织源码 L42-L138ETL 阶段data_loader加载 scikit-learn 的 Breast Cancer 数据集train_data_splitter按test_size切分训练/测试集train_data_preprocessor完成去 NA、MinMax 归一化、删列等预处理超参调优阶段对model_search_space参数中的每个模型配置动态生成一个hp_tuning_single_search步骤步骤 id 形如hp_tuning_search_random_forest再由hp_tuning_select_best_model汇聚所有搜索结果选出最优模型训练阶段model_trainer用最优配置训练模型model_evaluator在 holdout 集上评估 accuracy并支持质量门见下文 CLI 参数晋级阶段compute_performance_metrics_on_current_data计算新模型指标并与target_envstaging中当前模型的指标对比promote_with_metric_compare在新模型更优时执行晋级通知整个流水线以pipeline(on_failurenotify_on_failure)装饰失败时告警成功后notify_on_success收尾。部署流水线CDpipelines/deployment.py 最为精简源码 L23-L37单步deployment_deploy基于推理模型版本创建预测服务随后notify_on_success(after[deployment_deploy])通知成功。批量推理流水线CDpipelines/batch_inference.py源码 L35-L73展示了 Model Control Plane 的典型用法——通过get_pipeline_context().model拿到当前推理模型版本并从中取出训练期保存的产物保持 ETL 一致性data_loader(random_statemodel.get_artifact(random_state), is_inferenceTrue)——复用训练时的随机种子加载推理数据inference_data_preprocessor复用preprocess_pipeline产物对推理数据做同样的预处理数据质量门evidently_report_step以训练集dataset_trn为参考、以推理集为对比对象生成漂移报告指标为DataQualityPreset随后drift_quality_gate依据报告决定是否放行inference_predict在质量门通过after[drift_quality_gate]后执行预测结果作为版本化产物存回并与模型版本关联。流水线配置文件三个 YAML 的分工configs/下的三个文件分别对应三条流水线由run.py通过config_path选项注入。它们共同声明了 Docker 运行所需的集成依赖settings: docker: required_integrations: - aws - evidently - kubeflow - kubernetes - mlflow - sklearn - slack这意味着流水线打包镜像时会预装这些集成例如 MLflow 系列组件支撑实验追踪/模型注册/模型部署Evidently 支撑漂移分析Slack 支撑告警Kubernetes/Kubeflow 支撑云编排。configs/train_config.yaml 是三者中最信息量大的一个除 settings 外还包含步骤级参数model_trainer.parameters.name: e2e_use_case、promote_with_metric_compare.parameters.mlflow_model_name: e2e_use_case以及notify_on_success.parameters.notify_on_success: False默认不发成功通知Model Control Plane 配置model.name: e2e_use_case、license: apache、tags 等元信息流水线级参数target_env: staging决定模型晋级到哪个环境model_search_space——超参搜索空间的核心为每个候选模型声明model_package、model_class与search_grid例如随机森林sklearn.ensemble.RandomForestClassifier的搜索网格parameters: target_env: staging model_search_space: random_forest: model_package: sklearn.ensemble model_class: RandomForestClassifier search_grid: criterion: [gini, entropy] max_depth: [2, 4, 6, 8, 10, 12] min_samples_leaf: {range: {start: 1, end: 10}} n_estimators: {range: {start: 50, end: 500, step: 25}} decision_tree: model_package: sklearn.tree model_class: DecisionTreeClassifier search_grid: criterion: [gini, entropy] max_depth: [2, 4, 6, 8, 10, 12] min_samples_leaf: {range: {start: 1, end: 10}}想增删候选模型只需修改这份 YAML 即可被训练流水线的动态步骤生成逻辑感知。而 configs/deployer_config.yaml 与 configs/inference_config.yaml 结构相近关键在于model: {name: e2e_use_case, version: staging}——它们都锚定到 staging 这个模型版本从而与训练流水线的晋级结果对齐三者均带有extra.notify_on_failure: True。用 CLI 运行整套流水线run.py 参数详解项目自带的 run.py 是一个基于 Click 的 CLI入口源码 L34-L213。默认按训练 → 部署 → 批量推理的顺序依次执行三条流水线每条流水线的run_name带时间戳如e2e_use_case_training_run_2026_01_01_08_00_00并通过with_options(config_path..., run_name...)注入各自的 YAML 配置。完整命令行参数均可通过python run.py --help查看参数类型/默认值说明--no-cacheflag默认关闭禁用流水线缓存强制重跑所有步骤--no-drop-naflag默认关闭跳过删除缺失值行--no-normalizeflag默认关闭跳过 MinMax 归一化--drop-columns字符串逗号分隔从数据集中删除指定列如A,B,C--test-size0.0~1.0默认0.2测试集占训练数据切分的比例--min-train-accuracy0.0~1.0默认0.8传给模型评估步骤的训练集最低精度--min-test-accuracy0.0~1.0默认0.8传给模型评估步骤的测试集最低精度--fail-on-accuracy-quality-gatesflag默认关闭任一精度阈值不满足时使流水线直接失败--only-inferenceflag默认关闭只运行批量推理流水线跳过训练与部署几个有代表性的用法源自--help内嵌示例# 默认参数运行 python run.py # 关闭缓存 python run.py --no-cache # 不做超参调优、不做 NA 删除与归一化删除列 A,B,C测试集占 10% python run.py --no-drop-na --no-normalize --drop-columns A,B,C --test-size 0.1 # 精度质量门训练集 90% / 测试集 85%任一不达标则流水线失败 python run.py --min-train-accuracy 0.9 --min-test-accuracy 0.85 --fail-on-accuracy-quality-gates本地跑通的完整步骤Makefile 与本地 Stackexamples/e2e/README 给出的开箱即跑流程对应 Makefile 中的 target# 建立虚拟环境如尚未建立 python3 -m venv .venv source .venv/bin/activate # 安装依赖与 ZenML 集成对应 make setup make setup # 可选注册默认本地 Stack对应 make install-stack-local make install-stack-local # 本地启动 ZenML UI推荐但可选 zenml login --local # 运行项目包含的流水线 python run.py其中make setup实际执行为pip install -r requirements.txt zenml integration install aws sklearn mlflow slack evidently kubeflow kubernetes -ymake install-stack-local则演示了 Stack 组件注册的完整命令序列默认stack_namee2e_template_stack可通过环境变量覆盖依次注册 MLflow 实验追踪器、模型注册表、模型部署器注册 Evidently 数据校验器最后用一个组合命令注册 Stack 并设为活跃 Stackzenml experiment-tracker register -f mlflow mlflow_local_$stack_name zenml model-registry register -f mlflow mlflow_local_$stack_name zenml model-deployer register -f mlflow mlflow_local_$stack_name zenml contenteditable="false">【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考