Meta GEM 在 12 个月内把总训练 FLOPs 扩大 4 倍,同时将端到端训练效率翻倍至 20% 至 25% MFU。这个案例的核心价值是一套瓶颈诊断方法:先测量端到端效率,再把问题拆到单卡计算与分布式扩展,处理当前最紧的约束,完成质量验证,然后重新测量。推荐模型与 LLM 的算力规模可以接近,数据形态、参数结构和通信模式却需要一套专用优化栈。
先把 MFU 的分母说清楚
Meta 的工程报告把 GEM 的效率拆成两个部分:
端到端 MFU = 本地 MFU × 扩展比率
本地 MFU 回答单张 GPU 是否被充分利用,主要受 kernel、数值精度、张量形状和内存访问影响。扩展比率回答单卡性能分布到数千张 GPU 后保留了多少,主要受通信、拓扑、负载不均、重计算和慢节点影响。
这项拆分可以防止把局部加速误写成系统收益。一个 kernel 快了 2 倍,训练 step 可能仍在等待通信。一次 collective 传输的字节数下降,墙钟时间可能继续受固定延迟或同步影响。只有局部改进沿着整条指标链传递,才会提高端到端吞吐。
MFU 的分母也依赖硬件代际与数值格式。20% 至 25% MFU 表示相对于选定理论 FLOPs 口径的利用率,剩余部分包含 memory-bound 操作、通信和同步等工作,不能简单理解为还有 75% 至 80% 的算力可以回收。
推荐模型改变了四个基础假设
GEM 同时处理用户活动历史等序列特征,以及位置、广告创意表示等非序列特征。它拥有万亿级稀疏 embedding 参数和十亿级稠密参数。这个组合改变了常规 LLM 训练栈的适用前提。
| 常规 LLM 假设 | GEM 的真实负载 | 直接后果 |
|---|---|---|
| 序列长度相对规整 | 用户历史从数百到数万事件 | Padding 浪费与 rank 负载偏斜 |
| Attention 形状较统一 | 自注意力、交叉注意力与 pooled attention 高度不对称 | Tiling 效率和 occupancy 下降 |
| 稠密参数占主导 | 万亿级稀疏参数与十亿级稠密参数共存 | 两套分片与 collective 逻辑 |
| 低精度主要是数据类型切换 | CTR、CVR 对数值变化敏感 | 稳定性与量化开销成为门槛 |
| 增加 GPU 可近似线性加速 | 通信跨越多层带宽拓扑 | Collective 暴露与慢节点放大 |
成熟的 LLM 基础设施仍然可以作为起点。真正决定收益的是工作负载适配,所有关键优化都需要在生产张量形状和数据分布上重新测量。
第一轮瓶颈迁移:从 Padding 到 Jagged Kernel
Meta 表示,如果把 GEM 的变长用户序列补齐到最大长度,最多会浪费约 50% 计算。直接处理 jagged tensor 可以消除 Padding,却会引入新的不规则性:短序列提前结束,长序列继续占用计算,GPU 内部和不同 rank 之间都会出现负载偏斜。
Meta 为此构建了多种推荐专用 kernel:
- Jagged Flash Attention 直接处理变长张量,并支持定制 bias 与不对称的 query、key/value 长度。
- Generalized Dot-Product Attention 统一处理 GELU、SiLU 等非 softmax 的交互模块。
- BlockAttention 在模型允许时把长序列拆成独立固定 block,缩小无效计算范围。
PyTorch 的 GDPA 工程文解释了生产形状的重要性。在披露的生产配置中,优化后的 GDPA 相对 Triton 基线最高获得 2 倍前向和 1.6 倍反向加速,并使整模训练吞吐提升超过 30%。在部分短 key/value 场景中,前向相对 FlashAttention 4 最高达到 3.5 倍。
这些数字绑定特定张量形状与基线,无法直接外推。可迁移的结论是:用生产分布做基准。消除 Padding 后,瓶颈通常会迁移到 tile 调度、反向累加、内存重排和 rank 负载均衡。单独优化矩阵乘法无法完成整条链路。
第二轮瓶颈迁移:从低精度峰值到数值流水线
新一代 GPU 的 FP8、FP4 理论吞吐显著高于 FP16。GEM 的实践说明,低精度训练需要把数值稳定性与数据搬运一起设计。
量化如果单独执行,会增加 scale factor 计算、类型转换、kernel launch 和 HBM 流量。Meta 把 activation quantization 融入上游 normalization 与 projection,在 FSDP all-gather 前量化本地 weight shard,并传输低精度 payload。同时使用随机舍入、outlier 缓解、混合精度,以及对敏感 weight-gradient 路径和后段 layer 保留更高精度。
因此低精度需要同时通过两道验收门:
- 扣除量化、反量化和数据搬运后,module 与端到端时间确实下降。
- 训练稳定性和推荐质量维持在预先定义的接受范围内。
Kernel 更快但模型质量回退,属于失败。质量稳定但转换开销吃掉全部速度收益,同样属于失败。
第三轮瓶颈迁移:从 GPU 数量到通信拓扑
GEM 的稠密参数与稀疏参数需要不同的分布策略。Meta 在稠密模块上采用 2D FSDP 加 Expert Parallelism,在稀疏表上采用 fully sharded 2D model parallelism,最终形成拓扑感知的 5D 并行。
这里最值得复用的原则是把消息放到合适的链路。Meta 披露的集群包含主机内 NVLink、AI zone 内 RoCE,以及带宽更低且存在超卖的跨 zone 链路。引入新的并行维度,可以缩小受限链路上的消息体积或 collective group size。
PyTorch 对 2D sparse parallelism 的介绍展示了同一组权衡。缩小 model-parallel group 可以改善负载与通信,直接复制参数却会让超大 embedding table 产生难以承受的显存开销。进一步做 fully sharding,用快链路上的额外通信换取更低 HBM 占用。
通信与计算同时发生也不等于通信已经隐藏。Collective kernel 仍可能占用 streaming multiprocessor,与计算 kernel 竞争硬件资源。Meta 表示,NCCLX 把 all-gather 的 SM 使用量从约 24 个降至 1 个,并在完整训练规模上带来约 5% 端到端 QPS 增益。NCCLX 论文提供了更广的 collective communication 背景。
第四轮瓶颈迁移:从显存释放到负载均衡
稠密与稀疏参数完成分片后,activation 会成为单卡显存的主要约束。GEM 把编译器自动 activation checkpointing 改造成按区域分配内存预算,再叠加 activation quantization,目标是在控制重计算成本的同时保留较大的本地 batch。
更大的 batch 与 jagged 执行随后暴露 rank 负载偏斜。Meta 观测到最重 rank 每轮约比平均负载高 15%。全局最优重排需要每个 step 增加一次 all-to-all,协调成本可能抵消全部收益。Meta 最终采用 Base Batch Shuffling:先按总序列长度排序小 sub-batch,再把重组与轻组交错合并。公司报告 QPS 提升 4%,峰值内存下降 4%。
这里有一个普遍的系统结论:接近最优且协调成本很低的方案,可能比理论上完美的全局方案拥有更高吞吐。
建立指标阶梯,避免堆叠加速数字
不同层级的性能数字不能相加。训练效率报告需要保留完整证据层级。
| 证据层级 | 典型指标 | 回答的问题 |
|---|---|---|
| Micro-kernel | TFLOPS、kernel latency | 单个算子是否更快 |
| Module | Attention 或 MLP 时间 | 周边开销是否保留收益 |
| 单卡 | 本地 MFU、examples/s | 内存与 launch 是否保留收益 |
| 分布式 step | Scaling ratio、straggler gap | 通信与负载偏斜是否保留收益 |
| 训练作业 | 端到端 MFU、有效训练时间 | 启动、checkpoint 与失败恢复是否保留收益 |
| 模型结果 | Loss、NE、CTR/CVR 质量门槛 | 效率是否保持模型质量 |
| 业务结果 | 迭代周期、每个合格模型的成本 | 更快的系统是否改善交付经济性 |
Meta 的公开资料在 kernel 到稳态分布式 step 之间证据最强,对总训练成本、能耗、启动、checkpoint 恢复、失败率和每个合格模型成本披露较少。这些空白需要明确保留,不能从 MFU 静默推导。
团队可以直接复用的六步流程
GEM 的具体 kernel 与 5D 并行维度依赖 Meta 的模型和集群。诊断流程具有更强的可迁移性。
- 记录生产分布:序列长度直方图、attention shape、稀疏表规模、数值 outlier 与 rank 负载。
- 建立指标树:把 kernel time 连到 module time、本地 MFU、scaling ratio、端到端 step、有效训练时间和模型质量门槛。
- 分类当前约束:至少覆盖计算、内存、通信、同步、负载均衡和输入流水线。
- 只改变当前瓶颈的责任层:每个 kernel、精度配方、分片维度或 batching 策略都要绑定一个目标指标。
- 验证整条链路:重跑数值测试、质量指标、分布式 profile、checkpoint 恢复和墙钟时间。
- 重新 profile:成功优化会改变约束地图,上一轮优先级随之失效。
小团队可以从生产形状基准、profiler trace、按序列长度 batching、选择性 mixed precision 和指标树开始。只有标准实现持续占据端到端时间的大头,定制 kernel 与高维并行才具有足够回报。
同一套逻辑也适用于其他基础设施层。OpenAI MRC 网络设计把受限网络层作为优化单元,Token 预算工程则把资源上限连接到最终能力,避免只看孤立成本。
公开证据的边界
Meta 的一级资料提供了少见的生产机制细节,同时仍属于公司自述。完整 GPU 型号、绝对 GPU 数量、功耗范围、全部基线、总成本和质量置信区间没有完全披露。多数局部加速使用不同基线,无法相加得到 2 倍端到端提升。
20% 至 25% MFU 可以证明 Meta 按其内部负载与测量方法报告了这一结果。独立复现仍需要模型配置、序列长度分布、硬件拓扑、精度分母、质量门槛和完整 profiler trace。
常见问题
Meta GEM 是什么?
GEM 是 Meta 的生成式广告推荐基础模型。Meta 将其描述为万亿级稀疏 embedding 参数与十亿级稠密参数组成的混合架构,使用广告内容和用户互动数据训练。
MFU 是什么?
Model FLOPs Utilization 用实际完成的模型计算量对比硬件理论峰值。它适合跟踪同一负载与硬件配置。跨硬件、精度格式或模型定义比较时,需要先对齐分母。
标准 FlashAttention 为什么难以直接适配推荐模型?
生产推荐张量常见变长序列、大 batch、不对称 query 与 key/value、定制 bias 和非 softmax 激活。针对规整 LLM 序列设计的 kernel 可能产生 Padding 浪费、低 occupancy 或负载偏斜。
Jagged tensor 是什么?
Jagged tensor 用 values 加 offsets 或长度元数据紧凑保存变长样本。它减少 Padding,同时需要处理不规则调度与通信。
每个推荐团队都要开发定制 GPU kernel 吗?
Profiler 负责做出这个决定。当稳定的生产 shape 占据足够多端到端时间,并且通用实现明显偏离硬件 roofline 时,定制 kernel 才有合理回报。数据、batching、通信或恢复机制常常提供成本更低的优化空间。
文中的加速数字可以相加吗?
这些数字属于 kernel、layer、单卡和分布式作业等不同范围,基线也不同。组合收益需要端到端 ablation 或 waterfall 单独核验。
参考资料
- Meta Engineering:GEM Training 与 LLM 规模广告基础模型
- Meta Engineering:Meta 生成式广告模型 GEM
- RecSys 2025:HSTU 的 Jagged Tensor Context Parallelism
- PyTorch:Generalized Dot-Product Attention
- PyTorch:用 2D Sparse Parallelism 扩展推荐系统训练
- Meta 研究团队:Collective Communication for 100k+ GPUs
- Meta AI Research:DLRM 的量化 Collective Communication