跳转至

第18章 · 机器学习系统设计 · 阶段测试题答案


一 · 单选 (8 题)

1.1 B - CAP 必 P, 选 C 或 A。

1.2 A - Kubernetes 容器编排。

1.3 C - Ray 是分布式 Python 框架。

1.4 B - Feast 是开源特征库。

1.5 A - Feature Store 解决离线-在线不一致。

1.6 C - H100 是当前最强训练 GPU。

1.7 B - 双塔模型用于召回。

1.8 A - DLRM 是 Meta 推荐模型。


二 · 多选 (4 题)

2.1 ABD - 都是云厂商。

2.2 ABC - ML 设计阶段。

2.3 ABD - 都是数据漂移监控方法。

2.4 ABD - C 错: Kafka 不是 ML 框架。


三 · 简答 (5 题)

3.1 CAP 定理

Consistency / Availability / Partition tolerance, 三选二。 - 实际: 网络总会断 (P 必须), 选 C (CP, 如 ZooKeeper) 或 A (AP, 如 Cassandra) - ML 系统多选 AP (可用性优先)

3.2 8 步系统设计框架

1. 需求澄清 (业务 + 约束)
2. 指标定义 (离线 + 在线)
3. 离线-在线 (一致性策略)
4. 数据流 (Kafka / Flink / Spark)
5. 特征工程 (特征库 Feast)
6. 模型选择 (baseline → SOTA)
7. 部署 (K8s + GPU)
8. 监控迭代 (PSI / AUC / QPS)

3.3 离线-在线不一致 3 大原因

  1. 特征不一致: 离线用历史快照, 在线用实时 → 用 Feast 统一
  2. 分布漂移: PSI 监控 + 周期性重训
  3. 反馈延迟: 用户行为延迟 → 实时反馈

3.4 Feature Store 价值

  • 一致性: 同一特征定义, 离线在线一致
  • 复用: 跨团队
  • 版本管理: 特征变化可追溯
  • 监控: 漂移检测

3.5 监控 4 类

  1. 数据漂移: PSI / KL 散度
  2. 模型性能: AUC / CTR
  3. 系统: 延迟 / QPS / 错误率 / GPU 利用率
  4. 业务: 转化 / 留存 / 投诉

四 · 编程 (2 题)

4.1 PSI 计算

import numpy as np

def psi(expected, actual, bins=10):
    expected_pct = np.histogram(expected, bins=bins)[0] / len(expected) + 1e-10
    actual_pct = np.histogram(actual, bins=bins)[0] / len(actual) + 1e-10
    return np.sum((actual_pct - expected_pct) * np.log(actual_pct / expected_pct))

# PSI > 0.2: 严重漂移

4.2 Ray 训练

import ray

@ray.remote(num_gpus=1)
def train_step(model_state, batch):
    return loss

futures = [train_step.remote(model, b) for b in batches]
losses = ray.get(futures)