跳转至

Ch18 ML 系统设计 · 讲解稿

章节定位: Ch18 工程层。教"如何把 ML 模型组合成生产系统": CAP / 云 / 大规模基础设施 / ML 平台 / 设计案例。 承接: Ch15 DevOps + Ch17 推理 → Ch18 系统组合 走向: Ch19 应用 AI / Ch20 前沿 篇幅: ~4500 字 / 阅读 13 分钟 / 讲解 30-35 分钟


一 · 一句话总览

ML 系统设计 = 模型 + 数据 + 算力 + 服务组合成生产系统: CAP (分布式基础) + 云 (IaaS/PaaS) + 大规模基础设施 (Kafka/Spark/数据湖) + ML 平台 (Feature Store/Registry) + 真实案例 (Netflix/Uber)。核心心智模型: ML 系统 = 数据流 + 计算流 + 模型流 + 监控。


二 · 心智模型

把 ML 系统想成"现代物流" : - 数据: 货流 - 特征: 货品清单 - 模型: 分拣机器人 - 推理: 派送 - 监控: 物流追踪


三 · 章节主线 (5 段)

第 1 段 · 系统设计基础 (10 分钟)

3.1.1 CAP 定理

分布式系统三选二:

维度 含义
Consistency 一致性, 所有节点同时看到相同数据
Availability 可用性, 每个请求都响应
Partition tolerance 分区容忍, 网络分区仍能工作

实际 P 必须, 选择 C+A。

代表: - CP: ZooKeeper, HBase, etcd - AP: Cassandra, DynamoDB, S3

3.1.2 扩展性

  • 垂直: 加 CPU/内存, 单机有限
  • 水平: 加机器, 主流

3.1.3 一致性模型

类型 含义 例子
强一致 立即看到写入 ZooKeeper
最终一致 异步传播 DynamoDB
因果一致 因果关系可见 部分分布式 DB

3.1.4 一致性哈希

# 简版
def get_node(key, nodes, ring_size=2**32):
    h = hash(key) % ring_size
    for node in sorted(nodes, key=lambda n: hash(n) % ring_size):
        if hash(node) % ring_size >= h:
            return node
    return nodes[0]

增删节点只影响 1/节点数 比例的数据。


第 2 段 · 云计算 (8 分钟)

3.2.1 三层模式

模式 控制 例子
IaaS 高 EC2, GCE
PaaS 中 App Engine, K8s
SaaS 低 Office 365, Slack

3.2.2 主流云厂商

厂商 优势
AWS 最全, 主导
GCP AI / TPU / 数据分析
Azure 企业 / Microsoft 集成
阿里云 中国, 电商

3.2.3 关键服务

  • 计算: EC2 / GCE / ECS / EKS
  • 存储: S3 / GCS / Blob
  • 数据库: RDS / DynamoDB / Spanner
  • ML: SageMaker / Vertex AI / 阿里 PAI

第 3 段 · 大规模基础设施 (10 分钟)

3.3.1 流处理: Kafka

Producer → Kafka Broker (Topic) → Consumer
  • 高吞吐: ~1M msg/s
  • 持久化: 日志存储
  • 顺序: 分区内有序

适用: 日志收集, 事件流, 实时计算。

3.3.2 批处理: Spark

df = spark.read.parquet("s3://bucket/data")
result = df.filter(df.age > 18).groupBy("city").count()

RDD/Dataset API, 内存计算, 比 MapReduce 快 100×。

3.3.3 数据湖: Iceberg / Delta / Hudi

特性 Iceberg Delta Hudi
Schema 演进 ✓ ✓ ✓
时间旅行 ✓ ✓ ✓
增量 ETL ✓ ✓ ✓
社区 Apache Databricks Uber

适用: 海量数据 + ML 训练 + 增量更新。

3.3.4 Lambda vs Kappa

Lambda: 批 + 流双链路, 复杂但稳健。 Kappa: 纯流, Kafka + Flink, 历史靠重放。


第 4 段 · ML 系统设计 (12 分钟)

3.4.1 核心组件

Data Lake → Feature Store → Train → Model Registry → Serve
                                    ↓
                                  Monitoring → Drift Detection → Retrain

3.4.2 Feature Store

# Feast 风格
features = store.get_online_features(
    features=["user:age", "user:city", "item:category"],
    entity_rows=[{"user_id": 1, "item_id": 100}]
).to_dict()

在线 + 离线一致性, 跨团队共享。

代表: - Feast: 开源主流 - Tecton: 商业 - Hopsworks: 学术

3.4.3 数据漂移

类型 检测
Covariate shift (\(P(X)\)) PSI, KS
Prior shift (\(P(Y)\)) 类别分布
Concept shift ($P(Y X)$)

PSI 公式: $\(PSI = \sum (P_{\text{new}} - P_{\text{ref}}) \ln \frac{P_{\text{new}}}{P_{\text{ref}}}\)$

阈值: < 0.1 轻微, > 0.2 严重。

3.4.4 模型 Registry

import mlflow

mlflow.register_model(
    model_uri="runs:/abc/model",
    name="recommendation_v1"
)

工具: MLflow, DVC, W&B。

3.4.5 A/B Test

# 用户分流
user_hash = hash(user_id) % 100
if user_hash < 50:
    return model_v1.predict(x)  # 对照
else:
    return model_v2.predict(x)  # 实验

关键: 随机分流, 统计显著性 (p < 0.05), 长期指标。

3.4.6 回流闭环

用户行为 → Kafka → 数据湖 → 训练 → 模型更新

自动化 retrain 是 ML 平台的核心。


第 5 段 · 设计案例 (10 分钟)

3.5.1 Netflix

  • Zuul: API 网关, 流量路由
  • Eureka: 服务发现
  • 推荐: 协同过滤 + 深度学习
  • A/B test: 长期 + 短期

3.5.2 DoorDash

  • 派单: 实时 ML 决策
  • ETA: 路况 + 餐厅 + 骑手
  • 物流: 多目标优化

3.5.3 Uber Michelangelo

  • 端到端 ML 平台
  • 训练 + 部署 + 监控
  • 大规模 (TB 级数据, 千级模型)

3.5.4 Airbnb

  • ML 平台统一特征工程
  • 价格推荐 + 搜索排序
  • A/B test 框架

3.5.5 Pinterest

  • PinSage: GraphSAGE 工业版
  • 亿级用户 / 商品
  • 视觉 + 文本多模态

3.5.6 TikTok

  • 实时反馈 (点赞 / 完播率)
  • 多模态 (视觉 + 音频)
  • 兴趣演化建模

四 · 易错点 (5 条)

  1. CAP: 三选二, P 必须, 实际 C+A。
  2. Feature Store schema: 必须严格一致。
  3. A/B test: 流量分流要随机, 样本足够。
  4. 数据漂移: 不止 covariate, 还有 prior / concept。
  5. 回流闭环: 自动化是关键, 不是手动。

五 · 跨章连接

章节 关联
Ch13 §03 OS 分布式原理
Ch15 §05 K8s 部署基础设施
Ch17 §03 vLLM 在线推理
Ch12 §03 GNN 推荐系统

六 · 自测 5 题

  1. CAP 三选二?
  2. Kafka 三个角色?
  3. Feature Store 解决什么问题?
  4. 数据漂移三种?
  5. 主流云厂商?

七 · 一句话总结

ML 系统设计 = 把模型组合成生产系统。CAP + 云 + 大规模基础设施 + ML 平台 (Feature Store/Registry) + 设计案例。Ch18 是 AI 工程师"系统设计"面试必学。


八 · 板书建议

[板书 1: CAP]
   C 一致 / A 可用 / P 分区
   CP: ZooKeeper; AP: Cassandra

[板书 2: 云]
   IaaS / PaaS / SaaS
   AWS / GCP / Azure

[板书 3: 流批]
   Kafka + Flink (实时)
   Spark + Iceberg (离线)

[板书 4: ML 平台]
   Feature Store / Registry
   漂移检测 / A/B

[板书 5: 案例]
   Netflix / DoorDash / Uber
   Michelangelo / PinSage

九 · 参考资料

  1. Brewer, "CAP theorem", 2000
  2. Designing Data-Intensive Applications (Kleppmann)
  3. MLflow 文档
  4. Feast 文档
  5. Uber Michelangelo 论文
  6. Ch15 §05 K8s (本套书)
  7. Ch17 §03 vLLM (本套书)