🤖 24 AI
🟡 🏥 实践应用 2026年4月18日星期六 · 3 分钟阅读

PyTorch与Meta:通过40多项优化实现超过90%的有效训练时间,MegaCache将PT2编译时间缩短40%

为什么重要

Meta发布了如何在2025年底为其推荐模型的离线训练实现超过90%的有效训练时间(ETT)。方法包括PyTorch生态系统中超过40项新优化、将PT2编译时间缩短40%的MegaCache、每个任务节省30分钟的独立模型发布,以及异步检查点。这些改进已通过PyTorch和TorchRec开源。

Meta的16名工程师团队与PyTorch项目贡献者于2026年4月17日发布了详细文章,介绍如何在2025年底实现推荐模型离线训练超过90%的有效训练时间(ETT)。这篇文章由Ruilin Chen、Yuzhen Huang、Hang Qi等作者共同撰写,包含40多项具体优化的列表。

ETT是什么以及为何重要

Meta引入了新指标——有效训练时间(ETT%)——衡量实际用于高效训练的总端到端wall time百分比

公式很简单:

ETT% = 100% - 空闲% - 失败%

Meta将ETT分为三个子指标:

  1. 启动时间 — 从硬件分配到首批数据消耗
  2. 恢复时间 — 故障后重启和恢复需要多久
  3. 失败次数 — 基础设施相关中断总数

这之所以重要:经典指标模型FLOPs利用率(MFU)只衡量训练内部的效率,但忽略了训练前、中、后的所有事情。在扩展时,“中间”阶段成为主要成本

MegaCache:编译时间减少40%

主要创新之一是MegaCache——PT2(PyTorch 2.0)组件的综合缓存系统:

  • Inductor缓存
  • Triton bundler
  • AOT Autograd
  • Dynamo PGO
  • 自动调优设置

Meta将它们合并到一个统一缓存中,执行一次后可在后续任务中重复使用。

结果:平均PT2编译时间减少约40%。额外优势包括减少对远程服务器的请求、更快的模型设置,以及为重试任务提供更可靠的启动。

检查点管理

检查点对恢复至关重要,但通常会阻塞训练。Meta在三个方向上开展工作:

异步检查点:

  • 创建检查点的CPU内存副本
  • 主训练器继续运行,后台进程上传
  • 减少GPU空闲时间

PyTorch原生暂存:

  • 替换自定义C++暂存实现
  • 使用新的PyTorch原生API
  • 权衡:训练器内存增加,换取阻塞时间减少

间隔优化:

  • 未保存训练时间 = (失败次数) × (检查点间隔) / 2
  • 检查点保存阻塞时间 = (训练循环时间) / (检查点间隔) × (每次检查点阻塞时间)
  • 最优间隔使总损失时间最小化

独立模型发布:减少30分钟

经典流程:训练结束,然后同一GPU继续进行模型发布(导出为生产格式、验证、上传)。

Meta将发布与训练分离

  • 训练创建锚点检查点
  • 单独的基于CPU的独立任务并行发布模型

结果:每个任务节省约30分钟。对于每天运行数百个训练任务的公司,这意味着每月节省数百小时。

训练器初始化

通信优化:

  • 消除不必要的进程组创建
  • 不必要的元数据all_gather调用
  • 取而代之,在分片计划广播后本地构建全局rank元数据

流水线优化:

  • 并行化独立初始化阶段
  • PT2编译与使用”快速批次”数据的DDP热身重叠
  • 对具有长数据加载的基础模型特别有用

故障减少

Meta确定了两个主要故障原因:

  1. 任务抢占(并发任务越多=冲突越多)
  2. 服务回归

响应是双管齐下:与基础设施团队合作开发新调度算法+组件级可观察性仪表板,实时显示TTS、TTR、未保存训练时间和检查点保存时间。

开源贡献

PyTorch 2.0改进:

  • 用于动态形状处理的TORCH_COMPILE_DYNAMIC_SOURCES
  • MegaCache端到端缓存系统
  • PyTorch原生暂存API

TorchRec改进:

  • 分片计划优化(消除all_gather开销)
  • 通信优化模式

所有内容均可在PyTorch文档中获取,供其他组织复制。

对行业的启示

Meta帖子中最深刻的教训是优化范式的转变:从”如何更快地训练每次迭代”转向”如何减少所有非真正训练的内容”。当社区专注于MFU和提高吞吐量时,Meta表明10%的ETT增益与10%的MFU增益同样有价值——而且通常通过工程手段更容易实现。

对于正在扩展AI训练的组织,ETT与MFU一样重要。

🤖

本文由人工智能基于一手来源生成。