VeRL Performance Optimization
导言
MFU / SMA 低不一定说明 kernel 慢,也可能是 rollout、reward、checkpoint、通信、异步队列或 token 分布造成的等待。性能优化的第一步不是开特性,而是建立 E2E 性能模型。
1. 性能模型¶
需要把每个阶段进一步拆成:
- compute time
- memory time
- communication time
- scheduling time
- queue wait time
- data preprocess time
2. 瓶颈分类¶
- compute-bound:算力成为主要限制。
- memory-bound:访存、激活、KV cache 或通信 buffer 成为主要限制。
- communication-bound:all-gather、reduce-scatter、ring attention 等通信占主导。
- scheduling-bound:动态 batch、队列、Ray 调度或 worker 切换开销明显。
- data-bound:数据加载、reward 函数、后处理成为瓶颈。
3. 特性到瓶颈的映射¶
| 特性 | 可能改善的瓶颈 | 对 MFU / SMA 的作用 | 主要风险 |
|---|---|---|---|
| dynamic batch | padding waste / token packing | 提高有效 token 计算密度 | 峰值显存不稳定 |
| SP / CP | activation / long context | 支持更大 seq 或 batch | 通信复杂度增加 |
| TQ | 待验证 | 可能改善调度或队列等待 | 含义和适用场景待确认 |
| FullAsync | stage idle / bubble | 提高 E2E 设备忙碌度 | staleness 和复现风险 |
| one-step offset | 同步边界等待 | 进一步减少等待 | policy lag 风险 |
| mooncake checkpoint | checkpoint blocked time | 提高长跑有效训练时间 | 环境依赖与恢复语义 |
| inference serving | 推理资源隔离 | 提高推理资源弹性 | 网络和权重同步风险 |
4. MFU / SMA 对外解释模板¶
解释模板
对领导或客户解释利用率时,不要只报一个数字。建议拆成:实际计算时间、通信等待、数据等待、队列等待、checkpoint 阻塞、异常重试。
可以按以下结构说明:
- 当前 E2E step time 是多少。
- actor update 计算占比是多少。
- rollout / reward / ref / checkpoint 等非训练阶段占比是多少。
- rank 间 token 和 active time 是否均衡。
- 开启某特性后,减少的是哪一类等待。
5. 实验设计¶
5.1 Baseline¶
- 关闭待验证特性。
- 固定模型、数据、长度分布、卡数和并行策略。
- 记录完整 DFX 指标。
5.2 单特性消融¶
- 只开 dynamic batch。
- 只开 TQ。
- 只开 FullAsync。
- 只开 one-step offset。
- 只开 mooncake checkpoint。
5.3 组合特性¶
- FullAsync + TQ。
- dynamic batch + SP / CP。
- inference serving + FullAsync。
- checkpoint 优化 + 长跑稳定性验证。
6. 交付图表¶
- E2E timeline。
- per-stage time breakdown。
- per-rank utilization heatmap。
- memory timeline。
- feature ablation table。
- MFU / SMA 与 stage idle time 的相关性图。
7. 待验证项¶
- Ascend 平台 MFU / SMA 的准确采集方式。
- GSPO 优化实践文档中的默认配置、适用硬件和实验口径。
- 内部 vLLM 特性的开关、依赖和真实收益。
- 不同长度分布下各特性收益是否稳定。