Skip to content

9. 最佳实践

本章把 Google TPU 基础设施的设计经验提炼成可复用的原则与检查清单。这些原则既适用于在 Cloud TPU 上落地工作的工程师,也适用于设计自研 AI 集群、或在 GPU 集群上借鉴 Google 思路的架构师。


9.1 七条核心原则

原则 1:为计算形态造专用通路,而非用通用计算硬扛

Google 最根本的经验是领域专用:稠密矩阵乘走权重驻留脉动阵列(MXU,乘法期间不访存),稀疏嵌入走 SparseCore(5% 面积换 5×–7×)。通用 CPU/GPU 的微架构(乱序、缓存层次、取指译码、线程隐藏延迟)对规则的大规模 GEMM 没有杠杆。

实践:审视你的主导 workload 的计算形态,问"哪些环节在热路径上做了与核心计算无关的事"。如果是访存、控制流、稀疏查表——考虑专用数据通路或专用核,而非堆更多通用核。

原则 2:把拓扑做成可调度、可容错的资源

OCS 让 3D-torus 的逻辑拓扑与物理放置解耦,使"任意一组空闲 cube 都能交叉连接给作业",并让 cube(64 芯片)成为故障域 blast radius。这是 99.98% 可用率的基础——"无重配性时 1024 主机作业要求每主机 99.9% 可用;引入 OCS 降到 99%"。

实践:集群设计时,把"拓扑是否可重配""故障域粒度多大"作为一等设计变量,而非事后补丁。可重配性是用 <5% 成本换可用率数量级提升的最高 ROI 投资。

原则 3:可靠性按故障类型分工,而非单点最优

NSDI'24 的双路径是教科书般的"分工":reconfigure(迁移停机、零持续税)处理机器/ICI 故障;reroute(不停机、持续步时税)处理 OCS 故障;并对症优先修复。没有"万能恢复"。

实践:梳理故障分类(按 blast radius、按可否原地绕过),为每类设计专门恢复路径,并明确"何时切换"。别指望单一策略覆盖所有故障。

原则 4:把并行从"手写通信"降级为"编译器推导"

XLA/GSPMD 让用户写单设备 JAX + 少量分片标注,编译器自动插集合通信。这把"换并行策略"从"重写通信代码"变成"改几行 YAML 逻辑轴规则",是大规模训练可维护性的关键。

实践:优先选能"标注即并行"的栈(JAX/XLA/GSPMD 路线),把并行策略表达为数据(标注/规则)而非代码(手写 AllReduce)。函数式、可追踪的前端是前提。

原则 5:检测要先于调度,而非先于故障

Borg 在选 cube 后、用户二进制前跑 preflight(end-to-end check + intent-driven checker),把"看似可调度但 golden 阈值不达标"的芯片最后一刻挡掉。healthd 持续监控 + 坏机标记不可用,让坏芯片不进可行集。

实践:健康检查不是"故障后才发现",而是"调度前就排除"。建立 golden 阈值(不只是"能跑",而是"在 spec 内"),让亚健康硬件在造成中断前被隔离。

原则 6:用"分片标注 + 单控制器"让程序跨数千设备可扩展

Pathways 用单控制器 + 异步分片数据流 + 成组派发,让一个程序 gang-schedule 到数千 TPU 且追平多控制器性能。Multislice 把集合通信分"ICI 内 + DCN"两层,让 MFU 跨 slice 不掉。

实践:跨大规模设备时,控制面可扩展性(异步派发、紧凑分片图、gang 调度)和数据面分层(快/慢互联分层归约)同等重要。别只优化数据面而让控制面成为瓶颈。

原则 7:开放软件栈,把护城河留在合适的层

Google 把编译/训练/服务软件栈全开(JAX/XLA/MaxText/JetStream),把硬件护城河留在 TPU 硅。这让它的 ML 系统研究成为社区公共知识,加速生态采纳,同时保留商业差异化。

实践:开放与闭源的分层要清醒——开放"可学习、可复现、能建立生态"的层(软件、协议、权重),闭源"差异化、资本密集"的层(硅、前沿权重)。Meta 开放权重 + OCP 硬件是另一种切法;关键是别把"应该开放以建生态的层"也闭源了。


9.2 反模式(要避免的)

反模式为什么错正确做法
用通用 GPU fat-tree + 单一大 ring AllReduce 跑 4096 芯片延迟项 2·(N−1) 按总数指数,瓶颈在延迟torus 分维,延迟项 2·Σ(dᵢ−1) 按边长线性
故障后"等修好再继续"大规模同步训练 MTBF 是小时级,停机不可接受reconfigure(迁移)或 reroute(绕行)
手写每种并行组合的集合通信万亿参数下不可维护GSPMD 编译器推导
只在故障后做健康检查坏芯片已造成中断preflight 调度前排除 + healthd 持续监控
把 OCS 故障也用 reconfigure 处理OCS blast radius 大,要换很多 cubereroute 保留分配、付小步时税
checkpoint 间隔过大reconfigure 回滚损失大权衡间隔(见 Mini Demo
推理时不利用"权重加载主导验证成本"浪费了 TPU 上宽验证免费的结构优势用投机解码(DFlash,~3×)

9.3 决策检查清单

选型:何时考虑 TPU / Google 栈

  • [ ] 主导计算是稠密矩阵乘 + 稀疏嵌入的混合(MXU + SparseCore 协同设计契合)。
  • [ ] 需要超大规模同步训练,且重视 AllReduce 延迟(torus 优势)。
  • [ ] 想要"标注即并行"的编译器自动分片(JAX/XLA/GSPMD)。
  • [ ] 接受硬件闭源、重视软件栈可学习可复现(MaxText/JetStream 开源)。
  • [ ] 需要 24/7 无碳电网与低 PUE 的可持续性承诺。

训练落地

  • [ ] 用 MaxText 逻辑轴规则表达混合并行,不手写集合通信。
  • [ ] 单 slice 不够时启用 Multislice;验证跨 slice MFU。
  • [ ] Orbax checkpoint(OCDBT + Zarr3,异步),间隔权衡回滚损失。
  • [ ] 依赖 Borg/GKE 优先级 + 反碎片化 + preflight 排除坏芯片。
  • [ ] 核心指标:MFU、步时、恢复停机、checkpoint 开销。

推理落地

  • [ ] JetStream/tpu-inference 权重分片三轴 + 连续批处理。
  • [ ] HBM KV cache(必要时 int8 量化)。
  • [ ] 评估投机解码(DFlash)拿 ~3×,利用宽验证免费。
  • [ ] 副本冗余 + 负载均衡 + 单副本故障转移。

可靠性落地

  • [ ] 启用 NSDI'24 双路径(生产默认)。
  • [ ] 对 OCS 类故障接受 reroute 步时税;对机器/ICI 故障走 reconfigure + checkpoint 重启。
  • [ ] 监控 reroute 活跃率(应 <2%),超则优先修复相应组件。
  • [ ] 把"可用率靠重配性而非单机可靠性"写进容量规划。

可持续性落地

  • [ ] 选高 CFE / 低 PUE region;优先液冷 region。
  • [ ] 预估训练总能耗与碳;用 6× 能效提升趋势做容量规划。
  • [ ] 关注 SMR/地热等新型清洁能源合同的可用性。

9.4 与其它案例的最佳实践对照

主题GoogleMeta(对照)
拓扑3D-torus + OCS(可重配)fat-tree + 双织物(RoCE/IB 并行验证)
可靠性核心约束任一芯片宕机停顿同步作业SDC(静默错)污染梯度
检测healthd + preflight(golden 阈值)Fleetscanner/Ripple/Hardware Sentinel
恢复reconfigure / reroute 双路径auto-restart + SDC 隔离
并行GSPMD 编译器自动分片PyTorch FSDP + torch.compile
开放层系统软件栈(JAX/XLA/MaxText/JetStream)权重 + OCP 硬件
闭源层TPU 硅训练数据/配方

两者都是"超大规模同步训练可靠性"的顶级工程实践,但切入点互补:Google 攻"拓扑可重配 + 双路径恢复",Meta 攻"SDC 治理 + 双织物冗余"。把它们放一起读,能得到一张相当完整的"AI 数据中心可靠性"设计图。

下一章 面试题 用问答形式检验对这些原则的理解。

Released under CC-BY-SA-4.0 License.