跳转至

VeRL Async

导言

这篇文章解释为什么 RL 训练需要异步:同步流程中 rollout、reward、logprob、ref 和 actor update 互相等待,容易导致设备空闲;异步机制的目标是减少 stage bubble,提高 E2E throughput 和硬件利用率。

1. 主问题

  • 同步 baseline 的等待时间来自哪里。
  • FullAsync 如何拆开 rollout、reward、logprob 和 update。
  • full async one-step offset 与 FullAsync 的差异是什么。
  • 异步引入的 policy lag、staleness 和复现风险如何度量。

2. Sync Baseline

step N:
  generate -> reward -> old/ref logprob -> advantage -> update actor -> next step

同步模式的优点是语义清楚、debug 简单;缺点是各阶段串行,训练卡、推理卡和 reward 资源容易互相等待。

3. FullAsync

3.1 要回答的实现问题

  • 如何开关:配置项、环境变量还是启动脚本参数。
  • 代码位置:trainer、worker group、async manager、queue 还是 rollout engine。
  • 队列语义:每个阶段是否有独立输入队列和输出队列。
  • backpressure:下游慢时,上游是否限流。
  • 异常处理:某批 rollout 失败时,是否丢弃、重试或阻塞。

3.2 要回答的数据一致性问题

  • rollout 使用的是哪个 policy version。
  • old logprob 是否与采样策略严格一致。
  • ref logprob 是否与 actor update 同步。
  • reward 与 advantage 是否可能跨 step 使用。

4. Full Async One-Step Offset

待验证

one-step offset 的准确语义需要以代码为准。写作时不能只凭名字推断,必须确认它是“数据错开一拍”、还是“权重同步错开一拍”、还是“stage 执行错开一拍”。

4.1 建议对比维度

维度 FullAsync one-step offset 待确认问题
数据来源 当前或异步队列数据 可能使用上一 step 数据 是否引入 policy lag
权重版本 异步同步 可能错位一拍 actor / rollout 版本如何记录
性能收益 减少等待 进一步减少同步边界 是否稳定提高吞吐
精度风险 staleness staleness 更明显 KL 是否更容易抖动

5. 为什么默认不开

  • 复现困难:异步调度改变执行顺序,结果更难完全复现。
  • 稳定性风险:policy lag 可能放大 KL 和 grad norm 波动。
  • 环境相关:不同网络、卡数、reward 延迟和序列长度分布下收益不同。
  • debug 成本高:shape、mask、policy version 和 queue state 都需要额外记录。

6. 对 MFU / SMA 的作用

  • 异步本身不一定提高单个 kernel 的效率。
  • 它主要通过减少设备 idle time、stage bubble 和跨阶段等待来提高 E2E 利用率。
  • 如果瓶颈在 reward 或数据处理,异步可能提升训练卡利用率,但不一定提升推理侧利用率。

7. 必须补充的 DFX 指标

  • queue depth
  • stage idle time
  • policy version gap
  • stale sample ratio
  • per-stage throughput
  • rollback / drop sample count
  • KL / grad norm 与 policy lag 的相关性

8. 实验设计

  1. 同步 baseline。
  2. 只开 FullAsync。
  3. 只开 one-step offset。
  4. FullAsync + one-step offset。
  5. 对比不同 prompt / response 长度分布下的收益。

评论