Optimizing Effective Training Time for Large-Scale Recommendation Systems
Mingming Ding, Ruilin Chen, Yuzhen Huang, Hang Qi, Menglu Yu, San Tan, Damian Reeves, Boris Sarana, Kevin Tang, Satendra Gera, Gagan Jain, Sahil Shah, Vishwa Karia, Fuzail Khan, Yashasvi Makin, Edward Z. Yang, Oguz Ulgen, Jia Chen Ren, Laith Sakka, Mayank Garg, Meet Vadakkanchery, Aici Lin, Wei Sun, Mengjiao Zhou, Shuai Yang, Junqing Zhou, Max Leung, Apoorv Purwar, Musharaf Sultan, John Bocharov, Zhenyu Tang, Vivek Trehan
cs.IR
2026-10-02
Meta 定义 ETT% 指标量化推荐训练的非训练开销并做全栈优化:六个成对基准平均 +15.5 个百分点,全机队从约 80% 升破 90%。
Meta 最大的广告推荐模型每天训练几百亿条样本、占用数千张 GPU,而且训练持续进行:新数据窗口、调参、故障、被抢占都会触发作业重启。作业从拿到分配到释放一直占着 GPU,优化前只有 50-60% 的 wall time 真正用于训练新数据,其余耗在初始化、编译、checkpoint、发布、恢复上。
现有指标看不见这笔账。MFU 只量训练循环内部,作业可以每步跑出 95% MFU、同时只有六成 wall time 在碰新数据;Google 的 Goodput 覆盖全生命周期,但分解不到组件,指标跌了查不出该找哪个团队。推荐训练还有几个放大器:作业短,51 分钟冷启动占 151.5 分钟作业的 34%,对三周 LLM 预训练只占 0.2%;结构杂,embedding 表加动态 shape 让 PT2 编译冷缓存要一个多小时;数据流式,首步前多付 3-5 分钟管道预热。
核心是一个可归属的指标;单项优化多是已有的系统方法,论文的贡献在于怎么选、怎么量收益、怎么守住。
ETT% 定义为 wall time 中消费新数据的占比,展开为 1 - (TTS + NoF × TTR) / 总时长:TTS 是每次启动的冷启动闲置,TTR 是每次故障后的恢复闲置,NoF 是故障次数。第二层拆成调度、初始化、编译、有效训练、浪费训练、关停六个组件,每个对应一套基础设施和一个负责团队,指标跌了能直接定位到人。
| 设置 | 指标 | 结果 |
| 6 组成对基准(8-256 GPU,固定注入 2 次故障) | ETT% | 基线 59-85% → 优化后 80-93%,平均 +15.5 个百分点 |
| 全机队(500+ 模型,6 个月) | ETT% | 约 80% 升到 90% 以上 |
| 冷缓存 PT2 编译(32 张 H100) | 编译时间 | 2050s → 254s,降 87.6% |
| 启用独立发布的模型 | 关停时间 | 25.6-54.6 分钟 → ≤3.3 分钟 |
| 最大作业 | ETT% | 85% |
省下的时间里恢复路径占 58%。恢复会重复走启动流程,所以 TTR 的降幅是 TTS 的 1.8-8.6 倍;直接归因只给启动优化记 8% 的功,按重启级联算上限是 24.8%,差三倍。只看顶层总账,会系统性低估启动类优化的价值。
可迁移的是运营模式:两层分解、每个组件挂一个 owning team 和服务水位告警,靠这个控制环,收益在模型与基础设施持续变化的六个月里守住了。单项技术多有先例,论文自己也不讳言;部分修复进了开源 TorchRec 和 PyTorch(DCP AsyncStager、Mega-Cache),外部可以直接用。对三周起步的 LLM 预训练,这套问题不紧迫,冷启动只占 0.2%;对推荐、持续学习、短作业共享集群,这是每 1000 张卡每天约 3400 GPU 小时的账。
作者自述:每个配置只跑一次,给不出置信区间,重复跑基线太贵;独立发布未覆盖全部基准模型;共享集群的调度波动没有隔离;没做留一消融,启动贡献只是上界。机队层面,窗口内有模型迁移平台,机队构成也在变,趋势测的是实际运营的机队而非固定队列。
读下来另有两处:正文说评估了 7 个模型,图 6 只列 A-F 六个,数量对不上;成对受控实验最大到 256 GPU,2000 GPU 规模与「最大作业 85%」靠线上仪表盘而非成对对照,固定杀两次作业的设定也和真实故障谱未必一致。