第1章 流水线概述
大家好,欢迎来到这门课。我是你们的老朋友,一个在MLOps和DevOps坑里摸爬滚打了好几年的工程师。今天咱们先不急着敲代码,坐下来聊聊一个根本问题——什么是ML流水线?为什么我们需要它?
1.1 什么是ML流水线?
说白了,ML流水线就是把机器学习从数据到模型再到部署的整个过程,拆成一个个标准化的步骤,然后用自动化的方式串起来。你想想看,以前我们训练一个模型,是不是经常这样:数据预处理写一个脚本,训练写另一个脚本,评估再写一个,部署全靠手动拷贝文件?
嗯,我刚开始带项目时也这么干。结果有一次,数据源换了格式,我忘了更新预处理脚本,模型直接跑飞了。从那以后,我意识到——没有流水线,就是在给自己埋雷。
一个典型的ML流水线包含这些环节:
- 数据注入 —— 从各种源头拉数据,可能是数据库、日志文件、实时流
- 数据验证 —— 检查数据质量,有没有空值、异常值、分布偏移
- 特征工程 —— 做特征提取、变换、编码,有时候还要做特征存储
- 模型训练 —— 调参、训练、保存checkpoint
- 模型评估 —— 跑验证集、计算指标、对比baseline
- 模型部署 —— 打包、上线、做A/B测试
- 监控与反馈 —— 看推理延迟、吞吐量、数据漂移,触发重训练
我个人的习惯是,把每个环节都做成Docker容器,用Kubernetes或Airflow来编排。这样任何一个环节出问题,都能快速定位、单独回滚。
1.2 为什么需要多模型流水线?
你可能会问:一个模型跑得好好的,为什么要搞多模型?
原因很简单——现实世界的问题,很少能用一个模型解决。举个例子,我在做电商推荐系统时,需要同时跑召回模型、排序模型、重排模型、还有价格预测模型。每个模型都有自己的数据依赖、训练周期和部署策略。
如果每个模型都单独搞一套流水线,那运维成本直接爆炸。你想想看,光维护10个模型的训练脚本、10个部署配置、10个监控面板……团队再大也扛不住。
多模型流水线的核心价值在于:
- 统一编排 —— 所有模型共享一套调度、日志、监控基础设施
- 资源复用 —— 特征工程、数据验证这些环节可以共用,不用重复开发
- 依赖管理 —— 模型A的输出可以作为模型B的输入,自动串联
- 灰度与回滚 —— 新模型上线可以只切5%流量,出问题秒级回退
下面这张图,是我自己画的一个多模型流水线架构,帮你直观理解:
1.3 流水线 vs 单体模型
聊完多模型,咱们再对比一下「流水线」和「单体模型」这两种模式。我见过不少团队,一开始图省事,把所有逻辑塞进一个巨大的脚本里——数据清洗、特征提取、模型训练、推理全在一个文件里。这就是典型的单体模型。
| 对比维度 | 单体模型 | ML流水线 |
|---|---|---|
| 可维护性 | 改一处可能崩全局 | 组件独立,改一个不影响其他 |
| 可重复性 | 依赖本地环境,换台机器就炸 | 容器化+版本控制,任意环境复现 |
| 扩展性 | 加新模型要改主脚本 | 加一个节点就行,编排自动处理 |
| 故障隔离 | 一个bug拖垮整个流程 | 单步失败可重试,不影响上下游 |
| 部署效率 | 手动拷贝,容易出错 | CI/CD自动构建,一键上线 |
| 监控能力 | 全靠print和日志文件 | 每个步骤有指标,统一告警 |
所以我的建议是:原型阶段可以用单体快速验证,但一旦确定要上线,立刻切换到流水线架构。别等到出事了再重构,那时候成本高得多。
嗯,这一章的内容就到这里。我们聊了什么是ML流水线、为什么需要多模型、以及流水线相比单体模型的优势。下一章咱们会动手搭建环境,把理论落地。到时候见。