Skip to content

8. 企业生产实践

分布式系统理论最终要落地到 AI 生产集群。本章把前面章节的抽象概念,映射到训练、推理、存储、编排四个真实场景中。

8.1 分布式训练中的集合通信

8.1.1 数据并行 vs 模型并行 vs 流水线并行

并行方式切分对象通信模式适用场景
数据并行数据 batchall-reduce 梯度模型可放入单卡显存
模型并行 / 张量并行模型层内参数all-gather / reduce-scatter单卡放不下整个层
流水线并行模型层间point-to-point超大模型,层间流水线
专家并行(MoE)专家路由all-to-allMixture-of-Experts 模型

8.1.2 通信拓扑与算法

  • Ring all-reduce:把梯度拆成 N 份,沿环传递,通信量与节点数无关;
  • Tree all-reduce:层次化聚合,降低延迟;
  • Hierarchical all-reduce:跨机用 RDMA/NCCL,机内用 NVLink;
  • Reduce-scatter + all-gather:常用于张量并行。

8.1.3 容错与弹性

生产训练常遇到的故障:

  • GPU 掉卡、Xid 错误;
  • NCCL 超时;
  • 节点 OOM;
  • 网络抖动导致 straggler。

应对:

  • Checkpoint 频率:平衡 IO 开销与恢复时间;
  • 弹性训练:PyTorch Elastic、Kubernetes Volcano、Ray Train;
  • Health check:NCCL watchdog、GPU 温度/ECC 监控;
  • 重试与隔离:失败节点暂时隔离,任务迁移到其他节点。

8.2 推理服务的多副本一致性

8.2.1 状态共享问题

多副本 LLM 推理面临:

  • 是否共享 KV Cache?
  • 如何保持模型版本一致?
  • 长连接断开后如何恢复上下文?

常见方案:

方案一致性复杂度适用
每个副本独立 KV Cache最终一致(请求固定副本)无状态负载均衡
分布式 KV Cache(如 vLLM 的 TP/PP)强一致大模型单实例内并行
外部缓存(Redis)最终一致会话状态、前缀缓存

8.2.2 路由与故障转移

  • Round-robin:简单,但可能把长请求集中到同一副本;
  • Least loaded:根据当前请求数或 token 生成速度路由;
  • Session sticky:同一用户固定到同一副本,便于缓存命中;
  • Circuit breaker:副本异常时快速摘除,防止拖垮整体。

8.3 Kubernetes 控制面调优

etcd 是 K8s 的“单一事实来源”,它的健康决定整个集群健康。

8.3.1 etcd 部署建议

  • 节点数:3(容忍 1 故障)或 5(容忍 2 故障);
  • 跨可用区部署,避免 AZ 级故障;
  • 使用 SSD,WAL 与数据目录分离;
  • 限制单个 key/value 大小,避免大对象拖垮 Raft;
  • 定期 defrag 与 snapshot。

8.3.2 apiserver 与 controller

  • apiserver 是无状态的,可水平扩展;
  • controller 用 leader election,同一时间只有一个 active;
  • watch 机制让各组件实时感知状态变化;
  • 大规模集群要调大 --max-requests-inflight--max-mutating-requests-inflight

8.4 对象存储与多 AZ 复制

AI 训练数据、checkpoint、模型 artifact 通常存放在对象存储。

8.4.1 一致性级别选择

场景推荐一致性原因
checkpoint 元数据强一致恢复时必须读到最新索引
训练数据只读副本最终一致数据不变,复制延迟可接受
模型版本注册强一致避免读取到未完成的 artifact
推理日志/指标最终一致可容忍秒级延迟

8.4.2 跨区域复制

  • 主动-被动:主区域写,其他区域异步复制,故障时手动切换;
  • 主动-主动:多区域同时写,需要冲突解决;
  • 近线复制:热数据就近读取,冷数据归档到低成本存储。

8.5 故障域与爆炸半径

8.5.1 分层故障域

text
GPU → 节点 → 机柜 → 机架 → 可用区 → 区域

关键设计原则:

  • 控制面副本跨 AZ;
  • 训练 job 的 worker 尽量分散到不同机架;
  • 存储副本跨 AZ,重要数据跨区域;
  • 单点服务(如 scheduler)要有热备或 leader election。

8.5.2 爆炸半径控制

  • Namespace / 租户隔离:一个租户的异常不影响其他租户;
  • 资源配额与限流:防止单个 job 占满网络或存储带宽;
  • 熔断与降级:推理服务某副本卡顿时,快速熔断并返回降级结果;
  • 混沌工程:定期注入故障,验证系统韧性。

8.6 一句话总结

生产级 AI 基础设施的分布式系统实践,核心是把“共识、复制、分区、超时”落到实处:训练用 all-reduce 和 checkpoint 保证进度,推理用多副本和路由保证可用,K8s 用 etcd/Raft 保证状态一致,存储用多 AZ 复制保证耐久,最终目标是在任何故障域下控制爆炸半径。

Released under CC-BY-SA-4.0 License.