外观
MLOps 与模型部署
概念定义:让模型活在生产环境
**MLOps(Machine Learning Operations)**是把机器学习系统从"实验室的 notebook"变成"生产环境稳定运行的服务"的全部工程实践——类比 DevOps 之于软件开发,但多了数据和模型两个版本化对象。
一个残酷的行业共识:大多数 ML 项目死于上线之后,而不是训练之前。模型上线只是开始:数据会漂移、特征会失效、依赖会升级、流量会变化——没有 MLOps 支撑的模型,三个月后基本沦为"僵尸服务"(还在响应,但效果早已不是当初验证的样子)。
开发期: 数据 → 特征 → 训练 → 评估 → 注册
生产期: 服务 → 监控 → 漂移检测 → 再训练 → 更新(闭环)一、MLOps 的四大支柱
1. 实验管理:每场实验都可复现
训练实验必须有完整记录,否则"上次那个最好的模型用了什么配置"无从回答。要记录:
- 代码版本(Git commit)、数据版本(见数据与数据工程);
- 超参数、随机种子、训练/验证指标曲线;
- 产物(权重文件、tokenizer、评估报告)。
工具:MLflow(开源事实标准)、Weights & Biases、Neptune。最小可用方案:一个命名规范的实验目录 + 记录文件(experiments/2024-01-01_lr1e-3_seed42/),也比什么都不记强。
2. 模型注册与版本管理
模型版本化:每个候选模型有唯一版本号、状态(staging/production)、元数据(训练数据、指标、审批人)。上线流程:候选模型 → 离线评估 → 人工审批 → 灰度 → 全量。
工具:MLflow Model Registry、SageMaker Model Registry。核心价值:可回滚——线上模型出问题时能秒级回退到上一版本。
3. 管道编排(Pipeline)
训练管道自动化:数据校验 → 特征计算 → 训练 → 评估 → 注册,每一步可重跑、可审计。工具:Airflow、Kubeflow Pipelines、Metaflow、Prefect。
关键实践:数据与模型双重校验——管道入口检查数据 schema(列是否齐、类型是否对、分布是否异常),不满足就报警而不是闷头训练。
4. 部署与推理服务
模型上线服务的方式(见下文"部署方式"),以及配套的容量规划(QPS、延迟、GPU 资源)、弹性伸缩、故障转移。
二、部署方式选型
| 方式 | 特点 | 适用 |
|---|---|---|
| 在线 API(在线推理) | 实时、毫秒级响应 | 推荐、风控、搜索、对话 |
| 批处理(离线推理) | 每天/每小时跑一遍,结果入库 | 日报、画像更新、离线打分 |
| 流式推理 | 事件驱动、秒级 | 实时风控、监控告警 |
| 嵌入式/边缘 | 模型进 App/设备 | 移动端、IoT、离线可用 |
在线推理的常见实现:FastAPI/Flask 包模型 → Docker → 部署到 K8s/Serverless(KServe、SageMaker、阿里云 PAI、火山方舟等)。模型服务化要点:
- 预处理与后处理要封装进服务(与训练时一致,否则特征不一致);
- 输入校验、超时、限流、重试;
- 模型加载管理(模型放内存/显存,避免每次请求重新加载)。
三、性能与成本优化
模型上线后,推理成本与延迟是持续账单:
| 技术 | 原理 | 收益 |
|---|---|---|
| 量化(Quantization) | FP32→FP16/INT8,权重用更低位表示 | 显存/内存减半+,速度提升 |
| 蒸馏(Distillation) | 大模型教小模型 | 小模型接近大模型效果 |
| 剪枝(Pruning) | 砍掉不重要的权重/层 | 模型变小变快 |
| 缓存 | 相同输入的输出缓存 | 高频重复查询直接命中 |
| 批推理(Batching) | 多请求合并一次前向 | GPU 利用率大幅提升 |
| ONNX/TensorRT | 推理引擎优化 | 速度提升数倍 |
工程顺序:先量化(最省事)→ 需要再蒸馏/剪枝 → 需要再上推理引擎。大模型时代还有 KV Cache、投机采样(speculative decoding)、vLLM 等推理优化,见大语言模型(LLM)。
四、监控:模型会"过期"
监控是 MLOps 与 DevOps 最大的不同——代码不会自己变,但数据和规律会。监控三件事:
1. 数据漂移(Data Drift)
输入特征分布变化:用户的年龄分布变了、新品类上线了。检测方法:
- PSI(群体稳定性指数):比较特征分布(训练 vs 近期线上)的偏移量,PSI>0.2 触发告警;
- KS 检验:两分布是否显著不同;
- 逐特征监控 + 整体监控(embedding 分布)。
2. 概念漂移(Concept Drift)
x→y 的关系变了:同样的特征组合,规律变了(疫情期间"特征→流失"关系失效、政策变化改变风控逻辑)。检测:真实标签延迟到达后,持续对比模型预测与真实结果(如点击率、转化率)。
3. 系统健康
推理延迟、错误率、QPS、GPU 利用率——常规服务监控即可。
告警后的动作:再训练
| 触发条件 | 动作 |
|---|---|
| 定时(每天/每周) | 定期重训(最省心,模型持续跟上数据) |
| 漂移检测超阈值 | 按需重训(省资源,响应快) |
| 线上指标退化 | 立即重训 + 回滚上一版本 |
再训练闭环的核心纪律:线上监控指标与训练评估指标打通——如果离线 AUC 没变但线上转化掉了,先查特征一致性(训练/线上口径差异),这是最常见的原因。
五、MLOps 成熟度阶梯
| 阶段 | 特征 | 工具 |
|---|---|---|
| L0(手工) | notebook 训练,手动部署,无监控 | 无 |
| L1(脚本化) | 训练脚本化 + 版本控制,定时批处理 | Git、cron |
| L2(自动化) | 管道编排 + 实验管理 + 模型注册 | MLflow、Airflow |
| L3(平台化) | 特征存储 + 自动再训练 + 全链路监控 | Feast、Kubeflow、SageMaker |
给团队的建议:不要一步到位上全套平台——先保证"实验可复现 + 模型可回滚 + 监控有告警"这三条底线,再逐步升级。工具是次要的,流程是主要的。
从第一天就养成三个习惯
- 实验必记录:每次训练存下代码/数据/超参/指标;
- 模型必留版本:上线前注册,出事能回滚;
- 上线必带监控:没有监控的模型部署 = 裸奔。 这三个习惯零成本,却决定了你的模型能不能活过三个月。
六、权衡与取舍
- 在线 vs 批处理:延迟敏感(推荐、风控)在线;对时效不敏感(画像、报表)批处理省 90% 成本;
- 模型精度 vs 推理成本:大模型精度高但贵——量化 + 蒸馏 + 缓存组合拳,按业务预算选档;
- 自动化 vs 可控性:自动再训练效率高但可能被"脏数据"带偏(再训练前先做数据校验);关键业务保留人工审批;
- 自建 vs 平台:云平台(SageMaker、Azure ML、火山方舟)上手快,自建(K8s + KServe)灵活但维护重——团队规模小优先平台。
延伸阅读
- 数据与数据工程——管道的上游
- 模型评估与验证——上线前与上线后的评估闭环
- 从零搭一套模型评估——评估体系落地
- 框架与工具怎么选——MLflow/K8s/云平台选型
- 常见陷阱与反模式——训练/推理不一致等翻车现场
- 大语言模型(LLM)——大模型部署与推理优化
参考资料
- MLflow 官方文档 —— 实验管理/模型注册开源标准
- Kreuzberger, Kühl, Hirschl. Machine Learning Operations (MLOps): Overview, Definition, and Architecture(2022) —— MLOps 综述
- Polyzotis et al. Data Lifecycle Challenges in Production Machine Learning(SIGMOD 2018) —— 生产 ML 数据生命周期
- Google: MLOps: Continuous delivery and automation pipelines in machine learning —— MLOps 成熟度权威文档
- Breck et al. What's your ML Test Score?(NeurIPS 2016) —— ML 测试清单经典