先这样答
Rollout 成为瓶颈的核心在于自回归生成的串行特性与资源争抢,而异步收集的旧数据打破了 on-policy 的假设,必须经过修正才能使用。
Rollout 是用当前策略生成完整轨迹的采样阶段,需要自回归生成大量 token。生成过程受限于访存带宽,每步只出一个 token,比训练的反向传播慢一个量级。此时 GPU 的计算单元大部分时间在等数据,参与了生成但利用率低。同时,Rollout 与训练常共享 GPU,权重更新后需要来回切换,造成设备空转。在批处理时,长短尾请求混批会导致长尾序列拖慢整批完成时间,使得 Rollout 数量与卡数无法呈线性扩展关系。
在异步架构中,Rollout 用旧参数生成数据,而训练端参数已前进,数据变为 off-policy。On-policy 算法假设数据来自当前策略,直接使用旧数据会引入偏差,导致训练不稳或效果倒退。要复用旧数据,必须引入重要性采样进行修正,并设定陈旧度上限,丢弃落后过多步数的数据。工程上常采用半同步机制攒批切换,或引入推理引擎加速生成并配合权重热更新。
总结来说,Rollout 瓶颈源于生成慢、资源切换和长尾拖批;旧数据复用取决于重要性采样修正与陈旧度限制,对于纯 on-policy 任务,数据宁丢勿用。
面试官会怎么追问
- 「为什么 Rollout 阶段 GPU 参与生成了,利用率还是很低?」 这是因为自回归生成的 decode 阶段属于访存密集型任务,算术强度低。GPU 的流多处理器在等待显存传输数据,带宽成为核心限制。这也促使工程上引入类似 vLLM 的专门推理引擎来优化显存管理并加速采样。
- 「Rollout 数量、batch size 和卡数为什么不是线性关系?」 主要受生成任务的采样长度分布和长短尾请求混批影响。在给定的 batch size 下,只要有一个长尾序列没生成完,整批的计算资源就无法释放。增加卡数能扩大并发,但长尾序列拖住整批导致的设备空转依然存在,无法实现纯线性加速。
- 「如果 on-policy 中 rollout 模型参数落后训练参数,具体会发生什么?」 数据的动作分布与当前策略产生偏差,重要性权重偏离 1。如果不做修正直接当 on-policy 数据使用,会导致梯度方向错误。直观表现是训练曲线震荡,模型最终的生成效果退化。
回答的坑
- 误以为异步收集的数据只要格式对就能直接用于 PPO 训练,忽略了 on-policy 算法对数据同分布的严格要求,正确做法是必须说明重要性采样修正和陈旧度截断机制。
- 将 GPU 利用率低简单归结为模型参数太大,正确方向应指出自回归生成的 decode 阶段算术强度低,核心限制在于显存带宽而非计算力。
同系列的题
—— 本题完 ——