news 2026/9/14 2:04:30

MLOps Zoomcamp 2024 单元三:基于 Mage 构建端到端 ML 流水线的 MLOps 实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MLOps Zoomcamp 2024 单元三:基于 Mage 构建端到端 ML 流水线的 MLOps 实战指南

MLOps Zoomcamp 2024 单元三:基于 Mage 构建端到端 ML 流水线的 MLOps 实战指南

【免费下载链接】mlops-zoomcampFree MLOps course from DataTalks.Club. Register here 👇🏼 to get notified about the next cohort项目地址: https://gitcode.com/GitHub_Trending/ml/mlops-zoomcamp

本文基于 MLOps Zoomcamp(DataTalks.Club 免费 MLOps 课程)2024 届第 3 单元「Orchestration and ML Pipelines」的课程文档展开,完整覆盖该单元从 MLOps 概念、Mage 环境启动,到数据准备(ETL 与特征工程)、sklearn/XGBoost 双模型训练、可观测性(监控与告警)、推理与再训练触发,再到生产部署和课后作业的全流程。读完本文,你可以按 2024 届的课程脉络,用 Mage 搭建一条带数据校验、实验追踪(MLflow)、SHAP 解释性和 CI/CD 的端到端 ML 流水线,并知道每个环节对应的代码块与配置文件在哪里。

模块定位与整体结构

2024 届的单元 3 是课程中「工作流编排」主题的教学单元,模块编号与标题定义在 meta.json 中(module.number = 3module.title = "Orchestration and ML Pipelines")。单元索引页 cohorts/2024/03-orchestration/README.md 将课程拆成六个递进的小节:

小节主题文档位置
3.0引言:ML Pipelines 与 Mage3.0/README.md
3.1数据准备:ETL 与特征工程3.1/README.md
3.2训练:sklearn 模型与 XGBoost3.2/README.md
3.3可观测性:监控与告警3.3/README.md
3.4触发:推理与再训练3.4/README.md
3.5部署:在生产环境运行3.5/README.md
3.6作业homework.md

从文档结构可以看出 2024 届的技术选型:编排平台从 2022/2023 届的 Prefect(见 2022 版说明 与 2023 版说明)切换为 Mage。单元索引页的「Notes」部分也明确保留了历届学习资料的入口,并列出社区贡献的 Ch3 学习笔记,体现了课程文档「历届对比 + 社区共建」的组织方式。

所有小节配套的可运行代码存放在课程协作仓库mage-ai/mlops中(下文各节给出的data_loaders/transformers/等文件路径均指该协作仓库内的子项目unit_3_observability),本仓库中保留的是各小节的教学说明与配置清单。

3.0 引言:MLOps 概念与 Mage 环境启动

MLOps 的四步生命周期

3.0/README.md 先给出课程对 MLOps 的定义:

Operationalizing ML models involves moving them from development to production to drive business value. (将 ML 模型从开发推向生产以驱动业务价值,即为模型运维化。)

文档将这一过程拆为四步:

  1. Step 1 准备模型:优化性能、确保模型能处理真实世界数据、打包以便集成进现有系统;
  2. Step 2 部署模型:从开发环境迁移到生产环境,使其对用户和应用可访问;
  3. Step 3 持续监控:部署后必须持续监控准确性与可靠性,必要时用新数据再训练、更新模型;
  4. Step 4 融入业务流程:把运维化的模型接入现有工作流、应用与决策过程,产生业务影响。

文档同时给出组织层面做 MLOps 的四个理由,这也是后续各环节设计的依据:

  • Productivity(生产力):为数据科学家、ML 工程师和 DevOps 提供统一的实验追踪、特征工程、模型管理与部署环境,打破团队壁垒、加速 ML 全生命周期;
  • Reliability(可靠性):通过干净的数据集、充分的测试与验证、CI/CD 实践、监控和治理,保证生产模型质量;
  • Reproducibility(可复现性):对数据集、代码和模型做版本管理,提供透明度与可审计性,满足政策合规;
  • Time-to-value(价值交付速度):简化 ML 生命周期,让更多项目成功上生产,规模化获得 AI/ML 投资回报。

Mage 在 MLOps 中的三个作用

文档随后说明 Mage 平台如何支撑上述目标:

  1. 数据准备:构建、运行和管理数据管道,包括流水线编排、notebook 环境、数据集成、面向实时数据的流式管道;
  2. 训练与部署:准备数据、训练 ML 模型,并以可访问的 API 端点部署;
  3. 标准化复杂流程:用统一平台覆盖数据管道、模型开发、部署、版本管理、CI/CD 与维护,让开发者专注模型本身。

快速启动 Mage

3.0 小节提供了完整的 Quick Start 命令。克隆包含本模块全部代码的协作仓库并进入目录:

git clone https://github.com/mage-ai/mlops.git cd mlops

启动 Mage 与 PostgreSQL 数据库服务:

./scripts/start.sh

如果环境没有 bash,文档给出等价的docker compose命令(注意PROJECT_NAMEMAGE_CODE_PATH和 SMTP 变量的写法):

PROJECT_NAME=mlops \ MAGE_CODE_PATH=/home/src \ SMTP_EMAIL=$SMTP_EMAIL \ SMTP_PASSWORD=$SMTP_PASSWORD \ docker compose up

文档特别提示:若出现The "PYTHONPATH" variable is not set. Defaulting to a blank string.警告,可以忽略。

启动成功后,示例项目位于子项目unit_3_observability(包含全部管道与代码)。运行示例管道的操作步骤为:

  1. 浏览器打开http://localhost:6789
  2. 在左上角 Mage logo 与mlops项目名旁的项目选择下拉框中,选择unit_0_setup选项;
  3. 点击名为example_pipeline的管道;
  4. 点击Run @once按钮执行一次。

这一「Docker 一键拉起 + 网页 IDE 运行」的模式贯穿整个单元:后续所有小节都在这个本地 Mage 实例中开发管道,避免了手工搭建编排引擎的运维负担。

3.1 数据准备:ETL 与特征工程

3.1/README.md 讲解如何用 Mage 的 block 体系搭建数据准备管道,对应协作仓库中的子项目unit_1_data_preparation

创建项目与摄取(Ingestion)

创建 Mage 项目的操作路径是:在 Text editor(命令中心输入 "text editor" 打开)中右键一个文件夹,选择New Mage project,再到Settings中点击Register project完成注册。

注册后项目内是一个空管道,课程要求用 block 逐步开发。第一个 block 是ingestion block,用 Python 代码下载 Green taxi 数据集 1~3 月的 parquet 文件并拼接,同时生成用于数据画像(data profiling)的图表。课程使用的代码文件为data_loaders/ingest.py,文档还给出一个常见坑的修复:如果时间轴图表不显示,在ingest.pydfs.append(df)一行上方插入:

df['lpep_pickup_datetime_cleaned'] = df['lpep_pickup_datetime'].astype(np.int64) // 10**9

这段代码把纳秒时间戳转回秒级,解决 pandas 时间列在可视化中的显示问题。

通用工具函数(Utility helpers)

utils目录下预置了三个工具模块,供后续 transformer block 导入使用:

  • utils/data_preparation/cleaning.py:数据清洗;
  • utils/data_preparation/feature_selector.py:特征选择;
  • utils/data_preparation/splitters.py:训练/验证集切分。

这种「工具函数与管道 block 分离」的组织方式让同一份逻辑可被多条管道复用,是 2024 届课程强调的工程习惯。

数据准备 block 与可视化

数据准备阶段的代码在transformers/prepare.py。文档给出一条实操提示:要让直方图正确显示,需把默认绘图代码的最后两行改为:

col = 'trip_distance' x = df_1[df_1[col] <= 20][col]

即把trip_distance截断到 20 以内再画分布,避免极端值压扁直方图。

构建训练集与数据校验

构建训练集依赖两个文件:

  • utils/data_preparation/encoders.py:类别特征编码(PULocationID/DOLocationID 等);
  • data_exporters/build.py:导出训练/验证数据集。

该小节还引入 Mage 内置测试框架(built-in testing framework)做数据校验,data_exporters/build.py中即包含数据校验(data validation)的写法,保证导出数据集的行数、取值范围等约束在每次运行时被检查。整条数据准备管道的拓扑与调度配置记录在pipelines/data_preparation/metadata.yaml中——这也是 Mage「配置即代码」的体现:管道结构(block 依赖、触发器)保存在 YAML,可进版本库审查。

3.2 训练:sklearn 模型与 XGBoost

3.2/README.md 讲解如何把「训练」本身也编排成管道,课程并行搭建了两条训练管道:sklearn 与 XGBoost。

sklearn 训练管道

课程按如下顺序搭 block:

  1. GDP 训练集:使用 Global Data Product(GDP,Mage 跨管道共享数据集的机制)消费 3.1 产出的训练集,避免重复计算;
  2. 动态加载模型custom/load_models.pyblock 负责动态加载 sklearn 模型类,配合utils/models/sklearn.py中封装的模型工具;
  3. 超参数调优transformers/hyperparameter_tuning/sklearn.py执行调参(本单元依赖清单 requirements.txt 中包含hyperopt==0.2.7,即调参用的贝叶斯优化库);
  4. 训练模型transformers/下的训练 block 用最优超参训练;
  5. 导出模型data_exporters/sklearn.py保存模型产物。

两条训练管道共享的超参定义放在utils/hyperparameters/shared.py,保证 sklearn 与 XGBoost 管道对「什么是好的搜索空间」有一致的约定。

XGBoost 训练管道

XGBoost 管道结构与 sklearn 对称,关键文件为:

  • utils/models/xgboost.py:模型工具封装;
  • transformers/hyperparameter_tuning/xgboost.py:XGBoost 超参搜索;
  • data_exporters/xgboost.py:模型导出。

两条管道的编排配置分别保存在pipelines/sklearn_training/metadata.yamlpipelines/xgboost_training/metadata.yaml。从源码结构看,这种「每个模型族一条独立管道 + 共享 utils + 共享超参定义」的设计,使得后续 3.3/3.4 小节可以为两条管道分别挂监控、解释性和再训练触发器,互不干扰。

3.3 可观测性:监控与告警

3.3/README.md 覆盖四类可观测性能力。

1. 管道健康监控

课程先查看 sklearn 训练管道的运行健康状态:block 级成功率、运行时长、数据行数等运行记录在 Mage 的运行历史中可见。这是「管道级」监控,回答「训练是不是按时、按量跑完了」。

2. 模型可解释性(SHAP 仪表盘)

解释性部分是本小节的技术亮点,涉及协作仓库中的以下文件:

  • custom/dashboard_data_source.py:产生计算与绘制 SHAP 值所需的输出;
  • charts/shap_values.py:SHAP 值图表;
  • charts/shap_values_bar.py:SHAP 条形图(特征重要性排序);
  • charts/shap_values_force_chart.py:SHAP force plot(单样本预测解释)。

课程演示了自定义 dashboard 布局(Customize layout),把 SHAP 图表组合成 XGBoost 解释性仪表盘。布局文件位于presenters/pipelines/<pipeline_name>/dashboard/block_layout.yaml(文档中给出了xgboost_trainingsklearn_training两个 dashboard 的block_layout.yaml路径)。

3. 模型性能仪表盘

项目级总览仪表盘回答「哪次训练最好、指标如何漂移」,涉及图表 block:

  • charts/training_metrics__rmse_.py:RMSE 时序图;
  • charts/time_series__mse_.py:MSE 时序图;
  • charts/distribution_of_performance_metrics.py:性能指标分布直方图;
  • charts/total_runs_by_model.py:按模型统计训练次数(条形/饼图);
  • utils/analytics/data.py:供各仪表盘共用的分析数据工具。

仪表盘配置保存在presenters/overview/dashboard/block_layout.yaml

4. 告警(Alerting)

告警配置写在项目级metadata.yaml(协作仓库路径unit_3_observability/metadata.yaml),并配合项目设置中的 SMTP(邮件)发送配置。文档列出了 Mage 支持的告警通道:Email、Opsgenie、Slack、Teams、Discord、Telegram,覆盖了「管道运行状态触发 → 推送到值班渠道」的完整链路。

3.4 触发:推理与再训练

3.4/README.md 讲解管道的「触发」能力,即让流程自动化闭环。

再训练管道(Retraining pipeline)

关键 block 有三个:

  • sensors/detect_new_data.py:传感器 block,检测是否有新数据到位;
  • custom/retrain/sklearn.py:触发 sklearn 训练管道;
  • custom/retrain/xgboost.py:触发 XGBoost 训练管道。

从源码结构看,这是一条典型的「数据驱动再训练」管道:sensor 检测到新数据 → 触发对应模型族的训练管道,实现 MLOps 四步中「持续监控并再训练」环节的自动化。再训练管道的编排配置在pipelines/automatic_retraining/metadata.yaml

推理管道(Inference pipeline)

  • custom/inference.py:推理 block,加载模型并对输入做预测;
  • 管道配置在pipelines/predict/metadata.yaml
  • 课程还演示了Playground交互式界面:无代码 UI 交互配置在interactions/playground.yaml,可以直接在界面上输入特征获得预测,也可以通过 Mage 的 API 端点拿到预测结果——这意味着推理能力既可以人工交互调试,也可以作为服务被程序调用。

文档同时整理了 Mage 触发机制的四种方式(在 Mage 官方文档中可查到对应章节):在代码中保存触发器、从 block 触发另一条管道、通过 API 端点触发、按周期调度运行。这四类触发器正是 3.4 两条管道的底层机制。

3.5 部署:在生产环境运行

3.5/README.md 把前面所有管道放进生产视角,分三步。

1. 权限(AWS IAM)

custom/permissions.pyblock 用于演示在 AWS 上配置 Mage 部署所需的 IAM 权限。课程强调生产部署前必须先解决「这个身份能做什么」的问题,对应的 IAM 策略分为 Terraform apply 与 Terraform destroy 两类权限。

2. 部署与销毁(Terraform)

部署流程本身也被编排成管道,由三个 block 组成:

  • custom/infrastructure_setup.py:执行 Terraform 初始化/初始化云环境;
  • custom/deploy.py:执行部署(terraform apply);
  • custom/teardown_deployed_resources.py:销毁已部署资源(terraform destroy),避免遗留资源产生费用。

整条部署管道的编排配置在pipelines/deploying_to_production/metadata.yaml

3. CI/CD

custom/ci_and_cd.pyblock 演示用 GitHub Actions 做持续集成与持续部署:代码变更 → 触发 CI 校验 → 通过 Mage 部署流程发布。文档给出的资源清单涵盖仓库配置、AWS IAM 策略(apply/destroy 两份)、Terraform 配置与 CI/CD 概览,构成了「部署流水线即代码」的完整闭环。

作业实战:用 Mage + MLflow 完成一次完整训练闭环

cohorts/2024/03-orchestration/homework.md 是本单元的能力验收:目标是用 Mage 搭建一条简单的训练管道,用 MLflow 追踪实验并注册最优模型。数据集沿用课程的 NYC taxi 数据,作业指定使用Yellowtaxi 2023 年 3 月数据。六个问题覆盖了单元核心技能:

  1. Q1 运行 Mage:按 Quick Start 用 Docker Compose 启动,回答 UI 中看到的 Mage 版本;
  2. Q2 创建项目:新建名为homework_03的项目,回答生成的metadata.yaml行数(35/45/55/65 四选一),考察是否真正创建并查看了项目配置;
  3. Q3 创建摄取 block:读取 2023 年 3 月 Yellow taxi 数据,回答加载的记录数;
  4. Q4 数据准备:写一个 transformer block,课程给出了调整自 Green 版逻辑的参考实现(见 homework.md):
def read_dataframe(filename): df = pd.read_parquet(filename) df.tpep_dropoff_datetime = pd.to_datetime(df.tpep_dropoff_datetime) df.tpep_pickup_datetime = pd.to_datetime(df.tpep_pickup_datetime) df['duration'] = df.tpep_dropoff_datetime - df.tpep_pickup_datetime df.duration = df.duration.dt.total_seconds() / 60 df = df[(df.duration >= 1) & (df.duration <= 60)] categorical = ['PULocationID', 'DOLocationID'] df[categorical] = df[categorical].astype(str) return df

逻辑要点:把上下车时间转 datetime、计算以分钟为单位的duration、过滤 1~60 分钟的行程、把上下车地点 ID 转字符串以便后续字典编码; 5.Q5 训练模型:与单元 2 作业一致——fit 一个 dict vectorizer,训练默认参数的线性回归,pickup/dropoff 地点分开使用(不做组合特征),返回 vectorizer 与 model,回答模型截距(intercept); 6.Q6 注册模型:停止 Mage(Ctrl+Cdocker-compose down),为 MLflow 单独建一个容器并与 Mage 同网络。文档给出了完整的mlflow.dockerfile

FROM python:3.10-slim RUN pip install mlflow==2.12.1 EXPOSE 5000 CMD [ \ "mlflow", "server", \ "--backend-store-uri", "sqlite:///home/mlflow_data/mlflow.db", \ "--host", "0.0.0.0", \ "--port", "5000" \ ]

以及 docker-compose.yaml 中要追加的服务(注意app-network必须与 mage、postgres 容器同网络):

mlflow: build: context: . dockerfile: mlflow.dockerfile ports: - "5000:5000" volumes: - "${PWD}/mlflow_data:/home/mlflow_data/" networks: - app-network

重启 compose 后,MLflow 服务在http://mlflow:5000可达(容器网络内的主机名即服务名mlflow)。作业要求在 Mage 项目中安装mlflow==2.12.1,然后创建一个data exporter block:记录线性回归模型(log model),并保存与上传 dict vectorizer 作为 artifact(log artifact)。最后查看 MLflow 中的 MLModel 文件,回答model_size_bytes的值。文档还提示:最后两步(log model 与 log artifact)通常放在同一个代码 block 内完成。

这份作业把「摄取 → 准备 → 训练 → 注册」四个环节压进一条 Mage 管道,且 MLflow 以独立容器接入,正是 3.2 训练管道与单元 2 实验追踪知识的综合应用。

环境依赖与历届资料对照

2024 届依赖清单

cohorts/2024/03-orchestration/requirements.txt 锁定了本单元使用的关键依赖:

依赖版本用途
mlflow2.3.1实验追踪与模型注册(作业中单独起服务时用 2.12.1,注意以作业说明为准)
hyperopt0.2.73.2 小节的超参数调优
xgboost1.7.5XGBoost 训练管道
scikit_learn1.2.2sklearn 训练管道
pandas/fastparquet2.0.1 / 2023.4.0数据读取与处理
seaborn0.12.2数据画像与指标可视化
prefect/prefect-aws2.10.8 / 0.3.1从 2023 届沿用下来的历史依赖,2024 届正文已不再使用 Prefect
black/orjson23.3.0 / 3.8.1代码格式化 / 高速 JSON 序列化

从依赖清单结构可以推断:requirements.txt是从 2023 届(Prefect 单元)延续维护的,2024 届实际教学改用了 Mage,其中prefect相关条目属于历史遗留;动手时建议按各小节实际用到的包安装。

与其他届的对照

  • 2022 届与 2023 届的同主题单元使用 Prefect,可参考 cohorts/2022/03-orchestration/README.md 和 cohorts/2023/03-orchestration/prefect/README.md(含 Prefect 本地服务器启动、Prefect Cloud 登录等操作步骤);
  • 当前主线(2025 届)的编排单元改为了「自主选择编排工具」的开放式练习,工具清单包含 Airflow、Prefect、Dagster、Kestra、Mage 等,并给出了参数化调度(月度运行、训练/验证数据取前两个月)、backfill 等要求,见 03-orchestration/README.md;其中也保留了与本作业一致的 MLflow Docker 部署方案。

小结

2024 届第 3 单元用 Mage 串起了 MLOps 的完整闭环:3.0建立 MLOps 四步生命周期认知并用 Docker 一键启动编排环境;3.1用 ingestion/transformer/exporter 三类 block 完成 ETL、特征工程与数据校验;3.2把 sklearn 与 XGBoost 的训练、调参、导出本身编排成管道,并用metadata.yaml固化管道拓扑;3.3从管道健康、SHAP 可解释性、性能仪表盘到多渠道告警,补齐可观测性;3.4用 sensor 与 trigger 实现「新数据到位 → 自动再训练」与可交互/可 API 化的推理;3.5用 IAM 权限、Terraform 部署/销毁和 GitHub Actions CI/CD 收口到生产。配合 homework.md 的 Mage + MLflow 六问练习,该单元提供了从本地实验到生产运维、且每个环节都可代码化、可复现的完整 MLOps 教学路径。

【免费下载链接】mlops-zoomcampFree MLOps course from DataTalks.Club. Register here 👇🏼 to get notified about the next cohort项目地址: https://gitcode.com/GitHub_Trending/ml/mlops-zoomcamp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 2:03:47

垃圾目标检测数据集构建实战:从类别体系到YOLOv8训练

简介&#xff1a;这是一套面向计算机视觉与人工智能领域的目标检测数据集&#xff0c;聚焦电池、纸团、一次性杯子、塑料瓶和积木五类常见垃圾目标&#xff0c;采用COCO格式进行标注&#xff0c;每张图像均包含边界框信息&#xff0c;可直接服务于YOLO、SSD、Faster R-CNN等主流…

作者头像 李华
网站建设 2026/9/14 2:03:03

VxWorks逆向实战:工控安全中的固件分析四层穿透法

1. 这不是教你怎么“黑”设备&#xff0c;而是带你真正看懂工控系统的心跳 VxWorks——这三个字母在工控安全圈里&#xff0c;几乎等同于“高危但沉默的动脉”。它不像Windows那样天天弹窗、打补丁、被勒索软件盯上&#xff1b;它常年运行在电厂DCS控制柜里、地铁信号继电器背后…

作者头像 李华
网站建设 2026/9/14 2:00:00

超外差接收机本振泄露原理与SDR探测定位实战指南

做无线电监测和软件定义无线电&#xff08;SDR&#xff09;这么多年&#xff0c;我一直觉得有一个现象特别有意思&#xff1a;一台明明只负责“收”信号的设备&#xff0c;居然也能被外面的人发现&#xff0c;甚至被定位。很多人天然的认知是&#xff0c;只要我不发射、不主动“…

作者头像 李华
网站建设 2026/9/14 1:58:10

滑动窗口算法解析与字符串最小子串实战

1. 题目背景与核心需求解析2026年携程暑期实习开发岗笔试第三题"字符串min-27"是一道典型的字符串处理算法题&#xff0c;这类题目在技术面试中出现的频率高达78%&#xff08;根据2025年LeetCode企业题库统计&#xff09;。题目要求开发者在一个字符串中找出满足特定…

作者头像 李华
网站建设 2026/9/14 1:57:49

Codex 配 TaoToken:自然语言生成自动化脚本的接入路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华