ML系统设计Skill ml-system-design

此技能提供设计生产机器学习系统的框架,涵盖从数据摄入、特征存储、模型训练到模型服务的完整生命周期,包括MLOps、A/B测试和监控。关键词:ML系统、机器学习管道、特征存储、模型训练、模型服务、MLOps、A/B测试、特征工程、模型部署、生产ML。

机器学习 0 次安装 0 次浏览 更新于 3/11/2026

名称: ml-system-design 描述: 面向生产的端到端ML系统设计。使用于设计ML管道、特征存储、模型训练基础设施或服务系统。涵盖从数据摄入到模型部署和监控的完整生命周期。 允许工具: 读取、全局搜索、grep

ML系统设计

此技能提供设计生产机器学习系统的框架,从数据管道到模型服务。

何时使用此技能

关键词: ML管道、机器学习系统、特征存储、模型训练、模型服务、ML基础设施、MLOps、A/B测试ML、特征工程、模型部署

使用此技能当:

  • 设计面向生产的端到端ML系统
  • 规划特征存储架构
  • 设计模型训练管道
  • 规划模型服务基础设施
  • 准备ML系统设计面试
  • 评估ML平台工具和框架

ML系统架构概述

ML系统生命周期

┌─────────────────────────────────────────────────────────────────────────┐
│                        ML系统生命周期                                     │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                          │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌────────┐ │
│  │  数据    │──▶│  特征    │──▶│  模型    │──▶│  模型    │──▶│ 监控   │ │
│  │  摄入    │   │  管道    │   │  训练    │   │  服务    │   │  & 评估 │
│  └──────────┘   └──────────┘   └──────────┘   └──────────┘   └────────┘ │
│       │              │              │              │              │      │
│       ▼              ▼              ▼              ▼              ▼      │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌────────┐ │
│  │  数据    │   │  特征    │   │  模型    │   │  推理    │   │  指标  │ │
│  │  湖      │   │  存储    │   │  注册表  │   │  缓存    │   │  存储  │ │
│  └──────────┘   └──────────┘   └──────────┘   └──────────┘   └────────┘ │
│                                                                          │
└─────────────────────────────────────────────────────────────────────────┘

关键组件

组件 目的 示例
数据摄入 从源收集原始数据 Kafka, Kinesis, Pub/Sub
特征管道 将原始数据转换为特征 Spark, Flink, dbt
特征存储 存储和服务特征 Feast, Tecton, Vertex AI
模型训练 训练和验证模型 SageMaker, Vertex AI, Kubeflow
模型注册表 版本控制和跟踪模型 MLflow, Weights & Biases
模型服务 提供预测 TensorFlow Serving, Triton, vLLM
监控 跟踪模型性能 Evidently, WhyLabs, Arize

特征存储架构

为什么需要特征存储?

没有特征存储的问题:

  • 训练-服务偏斜(特征计算方式不同)
  • 跨团队重复特征计算
  • 无特征版本控制或血统
  • 特征实验缓慢

特征存储组件

┌─────────────────────────────────────────────────────────────────┐
│                      特征存储                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────────────┐       ┌─────────────────────┐          │
│  │   离线存储          │       │   在线存储          │          │
│  │                     │       │                     │          │
│  │  - 历史数据         │       │  - 低延迟           │          │
│  │  - 训练查询         │ ────▶ │  - 点查找           │          │
│  │  - 批量特征         │ 同步  │  - 实时服务         │          │
│  │                     │       │                     │          │
│  │  (数据仓库)         │       │  (Redis, DynamoDB)  │          │
│  └─────────────────────┘       └─────────────────────┘          │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────────┐│
│  │                   特征注册表                                ││
│  │  - 特征定义       - 版本控制                               ││
│  │  - 数据血统       - 访问控制                               ││
│  └─────────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────┘

特征类型

类型 计算方式 存储 示例
批量 计划(每小时/每天) 离线 → 在线 用户购买计数(30天)
流式 实时事件处理 直接到在线 购物车中的物品(当前)
按需 请求时计算 不存储 到最近商店的距离

训练-服务一致性

训练(历史):
┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ 历史事件     │───▶│ 时间点连接   │───▶│  训练数据集  │
└──────────────┘    └──────────────┘    └──────────────┘
                          │
                    使用特征
                    定义
                          │
服务(实时):      ▼
┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│ 在线存储     │───▶│ 相同特征定义 │───▶│  预测请求    │
└──────────────┘    └──────────────┘    └──────────────┘

模型训练基础设施

训练管道组件

┌───────────────────────────────────────────────────────────────────────┐
│                    训练管道                                            │
├───────────────────────────────────────────────────────────────────────┤
│                                                                        │
│  ┌────────────┐   ┌────────────┐   ┌────────────┐   ┌────────────┐   │
│  │  数据加载器│──▶│  特征转换  │──▶│  模型训练  │──▶│ 模型验证   │   │
│  └────────────┘   └────────────┘   └────────────┘   └────────────┘   │
│        │               │                │                 │           │
│        ▼               ▼                ▼                 ▼           │
│  ┌────────────┐   ┌────────────┐   ┌────────────┐   ┌────────────┐   │
│  │ 实验跟踪   │   │ 超参数调优 │ │  检查点存储  │   │  模型注册表 │   │
│  └────────────┘   └────────────┘   └────────────┘   └────────────┘   │
│                                                                        │
└───────────────────────────────────────────────────────────────────────┘

训练基础设施模式

模式 使用案例 工具
单节点 小数据集,快速实验 Jupyter, 本地GPU
分布式数据并行 大数据集,相同模型 Horovod, PyTorch DDP
模型并行 大模型(内存不足) DeepSpeed, FSDP, Megatron
超参数调优 自动化模型优化 Optuna, Ray Tune

实验跟踪

跟踪以保持可重现性:

跟踪内容 原因
超参数 重现训练运行
指标 比较模型性能
工件 模型文件、数据集
代码版本 Git提交哈希
环境 Docker镜像、依赖项
数据版本 数据集哈希或快照

模型服务架构

服务模式

模式 延迟 吞吐量 使用案例
在线(REST/gRPC) 低(<100ms) 中等 实时预测
批量 高(小时) 非常高 批量评分
流式 中等 事件驱动预测
嵌入式 非常低 可变 边缘/移动推理

在线服务架构

┌─────────────────────────────────────────────────────────────────────┐
│                    模型服务系统                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   ┌──────────────┐                                                  │
│   │   客户端      │                                                  │
│   └──────┬───────┘                                                  │
│          │                                                          │
│          ▼                                                          │
│   ┌──────────────┐                                                  │
│   │ 负载均衡器   │                                                  │
│   └──────┬───────┘                                                  │
│          │                                                          │
│          ▼                                                          │
│   ┌──────────────────────────────────────────────────────────────┐  │
│   │                    API网关                                   │  │
│   │  - 认证       - 速率限制   - 请求验证                       │  │
│   └──────────────────────────────┬───────────────────────────────┘  │
│                                  │                                  │
│          ┌───────────────────────┼───────────────────────┐         │
│          ▼                       ▼                       ▼         │
│   ┌────────────┐          ┌────────────┐          ┌────────────┐  │
│   │  模型A     │          │  模型B     │          │  模型C     │  │
│   │  (v1.2)    │          │  (v2.0)    │          │  (v1.0)    │  │
│   └────────────┘          └────────────┘          └────────────┘  │
│          │                       │                       │         │
│          └───────────────────────┼───────────────────────┘         │
│                                  ▼                                  │
│                         ┌────────────────┐                         │
│                         │ 特征存储(在线)│                         │
│                         └────────────────┘                         │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

延迟优化

技术 延迟影响 权衡
批处理 减少每个请求延迟 增加第一个请求的延迟
缓存 10-100倍更快 可能提供过时预测
量化 2-4倍更快 轻微精度损失
蒸馏 可变 训练开销
GPU推理 10-100倍更快 成本增加

A/B测试ML模型

实验设计

┌─────────────────────────────────────────────────────────────────────┐
│                      A/B测试架构                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│   ┌──────────────┐                                                  │
│   │   流量       │                                                  │
│   └──────┬───────┘                                                  │
│          │                                                          │
│          ▼                                                          │
│   ┌──────────────────────┐                                          │
│   │ 实验分配             │ ◀─────── 实验配置                       │
│   │ - 用户分桶           │          - 分配百分比                   │
│   │ - 功能标志           │          - 目标细分                     │
│   └──────────┬───────────┘          - 护栏                         │
│              │                                                       │
│     ┌────────┴────────┐                                             │
│     ▼                 ▼                                             │
│ ┌────────┐       ┌────────┐                                         │
│ │控制组  │       │实验组   │                                        │
│ │模型A   │       │模型B    │                                        │
│ └────┬───┘       └────┬───┘                                         │
│      │                │                                              │
│      └────────┬───────┘                                             │
│               ▼                                                      │
│      ┌────────────────┐                                             │
│      │ 指标记录器     │                                             │
│      └────────┬───────┘                                             │
│               ▼                                                      │
│      ┌────────────────┐                                             │
│      │ 统计分析       │ ─────▶ 决策: 发布 / 迭代 / 终止           │
│      └────────────────┘                                             │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

要跟踪的指标

指标类型 示例 目的
模型指标 AUC、RMSE、精确率/召回率 模型质量
业务指标 CTR、转化率、收入 业务影响
护栏指标 延迟、错误率、参与度 防止退化
细分指标 按用户细分的指标 检测异质效应

统计考虑

  • 样本大小:实验前计算功效
  • 持续时间:考虑新奇效应和时间模式
  • 多重测试:调整多个指标(Bonferroni、FDR)
  • 早期停止:使用顺序测试方法

模型监控

要监控的内容

类别 指标 警报阈值
数据质量 缺失值、模式漂移 >1%变化
特征漂移 分布漂移(PSI、KL) PSI >0.2
预测漂移 输出分布漂移 取决于使用案例
模型性能 准确率、AUC(当标签可用时) >5%退化
运营 延迟、吞吐量、错误 SLO违规

漂移检测

┌─────────────────────────────────────────────────────────────────────┐
│                     漂移检测管道                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  训练数据                 生产数据                                    │
│  ┌──────────────┐              ┌──────────────┐                     │
│  │ 参考分布     │              │   当前分布   │                     │
│  └──────┬───────┘              └──────┬───────┘                     │
│         │                             │                              │
│         └──────────────┬──────────────┘                              │
│                        ▼                                             │
│              ┌──────────────────┐                                   │
│              │ 统计测试         │                                   │
│              │ - PSI(人口稳定性指数)                             │
│              │ - KS测试                                           │
│              │ - 卡方检验                                         │
│              └────────┬─────────┘                                   │
│                       ▼                                              │
│              ┌──────────────────┐                                   │
│              │  漂移得分        │                                   │
│              └────────┬─────────┘                                   │
│                       │                                              │
│           ┌───────────┼───────────┐                                 │
│           ▼           ▼           ▼                                 │
│      无漂移      警告       严重                                   │
│      (< 0.1)    (0.1-0.2)    (> 0.2)                               │
│         │           │           │                                   │
│         ▼           ▼           ▼                                   │
│      继续       调查       重新训练                                │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

常见ML系统设计模式

模式1:推荐系统

所需组件:
- 候选生成(检索100-1000个)
- 排序模型(评分和排序)
- 特征存储(用户特征、物品特征)
- 实时个性化(最近行为)
- A/B测试基础设施

模式2:欺诈检测

所需组件:
- 实时特征计算
- 低延迟模型服务(<50ms)
- 高召回率焦点(不能错过欺诈)
- 可解释性以符合合规
- 人工在环审查
- 反馈循环用于标签

模式3:搜索排序

所需组件:
- 两阶段排序(检索 + 排序)
- 特征存储用于查询/文档特征
- 低延迟(<200ms端到端)
- 学习排序模型
- 点击率预测
- A/B测试与交织

ML系统估计

训练基础设施

训练时间估计:
- 数据集大小: 100M样本
- 模型: Transformer(100M参数)
- GPU: A100(80GB, 312 TFLOPS)
- 批量大小: 32
- 训练步数: 数据集 / 批量 = 3.1M步
- 每步时间: ~100ms
- 总时间: ~86小时单GPU
- 使用8个GPU(数据并行): ~11小时

服务基础设施

推理估计:
- QPS: 10,000
- 模型延迟: 20ms
- 批量大小: 1(实时)
- GPU利用率: 50%(延迟约束)
- 每秒每个GPU请求: 25
- 所需GPU: 10,000 / 25 = 400个GPU
- 使用批处理(批量8): 100个GPU(4倍减少)

相关技能

  • llm-serving-patterns - LLM特定服务和优化
  • rag-architecture - 检索增强生成模式
  • vector-databases - 向量搜索和嵌入
  • ml-inference-optimization - 延迟和成本优化
  • estimation-techniques - 草稿估算计算
  • quality-attributes-taxonomy - NFR定义

相关命令

  • /sd:ml-pipeline <problem> - 交互式设计ML系统
  • /sd:estimate <scenario> - 容量计算

相关代理

  • ml-systems-designer - 设计ML架构
  • ml-interviewer - 模拟ML系统设计面试

版本历史

  • v1.0.0 (2025-12-26): 初始发布

最后更新

日期: 2025-12-26 模型: claude-opus-4-5-20251101