RollPacker: Mitigating Long-Tail Rollouts for Fast, Synchronous RL Post-Training


TL;DR

本文提出了一种名为 RollPacker 的同步强化学习(RL)训练系统,其核心是一种创新的 rollout 调度策略——尾部批处理(tail batching),该策略通过将导致长响应的 prompt 整合到少数专用的 rollout 步骤中,显著减少了因响应长度不均衡导致的 GPU 空闲时间,从而在不牺牲模型准确率的前提下,大幅加速了大型语言模型的同步 RL 训练。

关键定义

相关工作

当前,使用强化学习(RL)对大型语言模型(LLM)进行后训练(post-training)是提升其复杂推理能力的关键技术。为了保证最佳的模型性能,业界通常采用同步在策略(synchronous on-policy)的 RL 训练范式,即确保用于生成响应的 actor 模型始终是最新版本。

然而,这种同步机制导致了严重的性能瓶颈。由于输入 prompt 生成的响应长度呈现出明显的“长尾分布”,即少数响应极长,导致在 rollout 阶段,处理短响应的 GPU 必须长时间空闲等待,造成了巨大的资源浪费(即“气泡”)。据统计,rollout 阶段的耗时占整个训练时间的约 70%。

现有的解决方案主要有两类:

  1. 在同步约束下重叠阶段:如 RLHFuse 等系统尝试将 rollout 阶段与奖励计算、参考模型推理等阶段重叠。但这些辅助阶段的计算量(通常<15%)远不足以填补长 rollout 造成的巨大空闲时间。
  2. 放宽同步约束:如 StreamRL、AReaL 等系统采用异步或“一次性”流水线,允许使用过时(stale)的模型权重生成的响应进行训练。虽然这提高了 GPU 利用率,但破坏了在策略训练的原则,常常导致模型准确率下降和训练不稳定。

因此,本文旨在解决的核心问题是:如何在不牺牲同步在策略 RL 训练准确性和稳定性的前提下,有效缓解因响应长度不均衡导致的 GPU 严重利用不足问题,从而加速 LLM 的后训练过程。

本文方法

本文的核心方法是 尾部批处理 (Tail Batching),并在此基础上构建了一个名为 RollPacker 的高效同步 RL 训练系统,该系统通过对 rollout、奖励(reward)和训练(training)三个阶段的协同优化,最大化了尾部批处理带来的收益。

尾部批处理 (Tail Batching)

尾部批处理是一种创新的 prompt 调度策略,其本质是通过重新排序训练样本来解决响应长度不均衡的问题,同时保持在策略训练的语义。

Refer to caption

该策略的实现依赖于两个关键技术:

  1. 投机执行 (Speculative Execution):在大部分的 短轮次 (short rounds) 中,系统会超量启动 prompt 和响应的生成任务。例如,若一个批次需要 $P_0$ 个 prompt,每个 prompt 需 $R_0$ 个响应,系统会启动多于 $P_0$ 个 prompt,并为每个 prompt 生成多于 $R_0$ 个响应。然后,系统只保留最先完成的 $P_0$ 个 prompt 及其最先完成的 $R_0$ 个响应。这种“竞速完成”的机制自然地筛选出了响应较短、长度均衡的批次,从而大大减少了 GPU 的空闲等待时间。

  2. 延迟调度与长轮次 (Deferred Scheduling & Long Rounds):在投机执行中被“淘汰”的、响应时间过长的 prompt 并不会被丢弃,而是被添加到一个“长 prompt 队列”中。当这个队列累积到足够数量(例如 $P_0$ 个)时,系统会启动一个专用的 长轮次 (long round)。在长轮次中,投机执行被禁用,所有 prompt 都会被完整地执行,以生成它们的长响应。

由于产生长响应的 prompt 是少数,因此长轮次出现的频率远低于短轮次。这种设计确保了所有训练样本最终都会被使用,保持了原始数据分布的无偏性,因此不会损害模型准确率。尾部批处理仅仅改变了样本的训练顺序,这在近期的研究中已被证明对模型性能无负面影响。

Refer to caption Refer to caption

RollPacker 系统设计

RollPacker 系统围绕尾部批处理策略,设计了三个协同工作的组件,分别应对 RL 训练三个阶段的瓶颈。

Refer to caption

系统概览

RollPacker 的工作流程分为离线分析和在线执行两个阶段。离线阶段,系统会分析不同并行配置下的模型性能和内存占用。在线执行阶段,系统协调三大核心组件:

并行规划器 (Parallelism Planner)

短轮次由于投机执行会并发处理更多请求,导致 GPU 内存压力远高于长轮次。固定的 TP 配置无法同时适应这两种模式。

Refer to caption Refer to caption

奖励调度器 (Reward Scheduler)

当 rollout 耗时被显著缩短后,奖励计算可能成为新的瓶颈。奖励调度器通过异步化和智能资源管理来解决此问题。

\[T_{\text{timeout}} = \min(\max(T_{\text{min}}, \lambda T_{\text{anchor}}), T_{\text{max}})\]

其中 $T_{\text{anchor}}$ 是正确响应的最大执行时间记录。这能快速淘汰掉那些几乎不可能成功的慢速执行,节省了大量时间。

Refer to caption Refer to caption

流式训练器 (Stream Trainer)

即使经过优化,长轮次依然存在 GPU 空闲。流式训练器通过一种更细粒度的阶段重叠来解决这个问题。

实验结论

本文在多达 128 个 H800 GPU 的集群上,使用 Qwen2.5 系列模型(7B-32B)和真实世界数据集对 RollPacker 进行了评估。

端到端评估

Refer tocaption Refer to caption

性能分解

对各项优化技术的累积加速效果进行了分解:

模型/序列长度 仅尾部批处理 +奖励调度器 +并行规划器 +流式训练器 (完整RollPacker)
Qwen2.5-7B/8k 1.30x 2.01x 2.02x 2.03x
Qwen2.5-14B/16k 1.76x 1.95x 2.02x 2.22x
Qwen2.5-32B/32k 2.21x 2.48x 2.52x 2.56x

Refer to caption Refer to caption Refer to caption

微基准测试分析

可扩展性分析

在扩展至 128 个 GPU 时,RollPacker 表现出良好的可扩展性。与 veRL 相比,它在各种规模下始终保持约 2.2倍 的吞吐量优势。

Refer to caption

总结

本文提出的 RollPacker 系统及其核心的尾部批处理策略,成功解决了同步 RL 训练中因响应长度不均衡导致的效率低下问题。通过将长短响应分离调度,并结合并行规划、奖励调度和流式训练等一系列系统级优化,RollPacker 在完全保留在策略训练准确性的前提下,实现了对 LLM 后训练过程的显著端到端加速,为大规模、高性能的 RL 对齐训练提供了有效的解决方案。