什么是MLOps?——DevOps的AI版本
MLOps = Machine Learning + Operations。把DevOps的最佳实践应用到机器学习系统。包括:模型开发、训练、部署、监控、更新的全生命周期管理。
为什么MLOps比DevOps更难?
- 模型是代码+数据:传统软件只需要版本控制代码,ML还需要版本控制数据、超参数、模型权重
- 模型会退化:数据分布变化(概念漂移)导致模型性能下降,需要持续监控
- 实验管理:ML需要大量实验(不同超参数、不同数据),需要追踪每次实验
- 可复现性:同样的代码+数据+超参数,必须得到同样的结果
MLOps生命周期:
1. 数据准备:收集、清洗、标注、版本化 2. 实验:训练多个模型,比较性能 3. 模型注册:把最佳模型注册到模型仓库 4. 部署:把模型部署到生产环境 5. 监控:监控模型性能、数据漂移、延迟 6. 再训练:性能下降时,用新数据重新训练 7. A/B测试:新模型 vs 旧模型,逐步切换
MLOps工具链:
| 功能 | 工具 |
|---|---|
| 实验追踪 | MLflow, Weights & Biases, TensorBoard |
| 模型注册 | MLflow Model Registry, DVC |
| 工作流编排 | Airflow, Kubeflow, Prefect |
| 特征存储 | Feast, Tecton |
| 监控 | Evidently, WhyLabs, Arize |
代码实战:MLflow实验追踪
模型监控与A/B测试
为什么需要监控模型?模型上线后,真实数据分布可能与训练数据不同。例如:训练时客户主要是年轻人,上线后老年人增多,模型可能不再准确。
监控维度:
| 监控项 | 指标 | 告警阈值 |
|---|---|---|
| 模型性能 | 准确率、F1、AUC | 下降>5% |
| 数据漂移 | 特征分布KL散度、PSI | PSI>0.2 |
| 概念漂移 | 标签分布变化 | 显著变化 |
| 延迟 | P50/P95/P99响应时间 | P99>500ms |
| 吞吐量 | QPS | 低于目标 |
| 错误率 | 5xx错误比例 | >1% |
A/B测试:新模型(B)和旧模型(A)同时运行,逐步把流量切给B。
阶段1: A=100%, B=0% (基线) 阶段2: A=90%, B=10% (小流量验证) 阶段3: A=70%, B=30% (逐步放大) 阶段4: A=50%, B=50% (对照实验) 阶段5: A=20%, B=80% (接近全量) 阶段6: A=0%, B=100% (完全切换) 每个阶段监控: - 业务指标(转化率、收入) - 模型指标(准确率、延迟) - 用户反馈(满意度、投诉率) 如果B的性能显著优于A(p<0.05),继续放量。 如果B的性能显著差于A,回滚到A。
参数表:
| 参数 | 含义 | 典型值 | 太大/太小 |
|---|---|---|---|
| A/B流量比例 | B模型接收的流量比例 | 10%~50% | 太高→风险大;太低→统计不显著 |
| 置信水平 | 统计显著性 | 95% (p<0.05) | 太高→难显著;太低→误判 |
| 监控窗口 | 评估周期 | 7天~30天 | 太短→随机波动;太长→风险暴露 |
练习:MLOps
Q1:MLOps和DevOps的核心区别是什么?为什么ML需要额外的实验管理?
Q2:什么是数据漂移(Data Drift)和概念漂移(Concept Drift)?举例说明。
Q3:A/B测试中,为什么流量不能一次性切到100%新模型?
Q4:MLflow的Run、Experiment、Artifact分别是什么?
Q5:模型监控中,如果准确率下降但数据漂移指标正常,可能是什么原因?
查看答案
A1:MLOps需要管理代码+数据+模型+超参数。DevOps只管理代码。ML需要实验管理是因为:1.超参数组合多,需要追踪每次实验;2.数据版本影响模型性能;3.需要比较不同实验选择最佳模型;4.可复现性要求。
A2:数据漂移:输入特征的分布变化。例:训练时用户年龄20-30岁,上线后40-50岁用户增多。概念漂移:输入和输出关系变化。例:疫情期间训练的销售预测模型,疫情后消费习惯改变,模型失效。
A3:一次性切换风险太大。如果新模型有bug或在某些场景表现差,100%流量会导致严重事故。逐步放量可以及时发现问题并回滚。通常从5%~10%开始。
A4:Run:一次具体的训练执行,包含参数、指标、时间戳。Experiment:一组相关的Run(如同一个任务的不同实验)。Artifact:训练产生的文件(模型、图表、数据集)。
A5:可能原因:1.标签质量问题(标注错误增多);2.模型bug(代码更新引入);3.特定子群体性能下降(整体指标掩盖了局部问题);4.对抗样本或异常输入;5.上游数据预处理变化。