让 Token 持续流动:来自 16 个开源 RL 库的经验教训

TL;DR – Hugging Face 调查了 16 个开源强化学习(RL)库,发现所有成功的异步 RL 系统都将推理和训练分离到不同的 GPU 池,使用 rollout 缓冲区,并以异步方式推送模型权重;Ray 是主导的编排框架,NCCL 广播是常用的权重同步方式,而对 LoRA 和 Mixture‑of‑Experts(MoE)训练的支持仍然稀缺。


1. 为什么异步 RL 很重要

异步 RL 消除了同步训练大语言模型(LLM)时产生的生成瓶颈,这种瓶颈会导致高达 60 % 的实际时间 GPU 处于空闲状态。 在同步流水线中,对 32‑B 参数模型进行一次 32 K‑token rollout 的批次可能需要数小时,而用于梯度更新的 GPU 则闲置。通过将推理和训练拆分到不同的 GPU 池,并用 rollout 缓冲区连接,两者可以并行进行:生成继续进行,而训练器消费之前生成的数据,从而显著提升 GPU 利用率。

2. 调查概览

Hugging Face 检视了 十六 个开源异步 RL 库(AReaL、ART、Atropos、MILES、NeMo‑RL、OAT、open‑instruct、PipelineRL、PRIME‑RL、ROLL、SkyRL、SLIME、TorchForge、Tunix、verl、verifiers‑rl)。每个库在 七个正交维度 上进行评估:

  1. 编排与并发原语 – 分布式组件如何协同。
  2. Rollout 缓冲区设计 – 将生成样本从推理传递到训练的数据结构。
  3. 权重同步协议 – 更新后的参数如何推送到推理池。
  4. 陈旧度管理 – 处理离策略 rollout 的策略。
  5. 部分 rollout 处理 – 当权重变化时,正在进行的生成会怎样。
  6. LoRA 训练支持 – 训练仅适配器参数并高效同步的能力。
  7. 分布式训练后端与并行方式 – 并行策略(FSDP、Megatron、DeepSpeed、JAX 等)以及对 Mixture‑of‑Experts 的支持。

完整的对比表见原博客;以下章节概述每个维度的关键发现。

3. 编排与并发原语

编排类型 含义 使用该方式的库
分布式 Actor 模型(Ray) 带异步 RPC、对象存储和内置容错的有状态 Actor。 AReaL、verl、SkyRL、NeMo‑RL、SLIME、MILES、ROLL、OAT、open‑instruct 等
原生 Python 并发 线程、asynciomultiprocessing;无外部运行时。 verifiers‑rl、PipelineRL(池内)、ART、AReaL(基于 asyncio)
Pub/Sub 消息总线 通过 Redis 流或追加文件实现的解耦生产者/消费者。 PipelineRL(池间)、SLIME(异步模式)
HTTP 微服务 通过 REST 进行通信的独立服务。 Atropos

发现:Ray 在生态中占据主导,出现在 8/16 库中。其 Actor 模型契合 RL 中推理服务器、训练器、奖励模型、环境池等异构组件,提供自动调度、容错以及通过 Ray 对象存储实现的零拷贝数据传输。但 Ray 引入了较重的运行时,这促使在小规模部署时考虑更轻量的方案(原生 Python、Pub/Sub)。

4. Rollout 缓冲区设计

缓冲区模式 深度(最大在飞批次数) 备注
无缓冲区(同步) 0 TRL(当前),ART(收集完再训练) 生成与训练交替进行;陈旧度最大但无重叠。
双缓冲区 1 verifiers‑rl、SLIME(异步模式)、MILES、OAT 正好一个生成批次与一个训练步骤重叠;陈旧度最小。
有界异步队列 2–K SkyRL、verl、NeMo‑RL、ROLL、PRIME‑RL、TorchForge、Tunix、open‑instruct、AReaL 多个批次在飞;陈旧度受队列容量限制。
无界 / 流式 无限 PipelineRL(Redis 流),SLIME(全异步),Atropos 持续生成;必须通过版本标签或重要性采样控制陈旧度。

更深的队列提升吞吐量,但需要显式的陈旧度管理(见第 4 维度)。

5. 权重同步协议(第 3 维度)

协议决定 延迟中断粒度,即从训练器向推理池推送新权重时的行为。

5.1 传输机制

机制 典型延迟
NCCL 广播 100–500 ms 大多数库(PipelineRL、SkyRL、SLIME、MILES、ROLL、OAT、NeMo‑RL、PRIME‑RL、open‑instruct、AReaL)
NCCL + 分桶 ~20 ms verl
共享内存 / CUDA IPC 极低 NeMo‑RL、MILES
文件系统 + HTTP 中等(秒级) PRIME‑RL、AReaL、ART
HTTP PUT 高(秒级) verifiers‑rl
JAX cross‑mesh Tunix

5.2 中断粒度

粒度 行为
永不停止(逐 token 替换) 在前向传播之间交换权重,生成过程永不中止。 PipelineRL、open‑instruct(可选)
按 HTTP 请求中止 正在进行的 HTTP 调用被取消并使用前缀重试。 SkyRL、SLIME
软暂停(排空在飞) 新请求被阻塞,已有生成完成后才同步。 PRIME‑RL、AReaL、open‑instruct(默认)、verl(异步)
按批次/阻塞 生成与训练交替进行;同步会阻塞双方。 NeMo‑RL、ROLL、OAT、TorchForge、Tunix、verifiers‑rl、Atropos

发现:只有 PipelineRL 实现了真正的 永不停止 权重更新,在 token 级前向之间切换参数。其他库均在更粗的边界暂停,导致短暂的推理使用陈旧权重。

6. 陈旧度管理(第 4 维度)

当生成与训练重叠时,rollout 会变为离策略。库采用三种正交策略:

  1. 按样本版本拒绝 – 丢弃 model_version 超过可配置滞后阈值的样本。
  2. 深度限制 – 限制在飞批次数,从结构上保证最大版本差。
  3. 重要性采样(IS)校正 – 用比例 (\frac{\pi_{\theta}(a|s)}{\pi_{\text{old}}(a|s)}) 对陈旧样本重新加权,通常会裁剪。
版本拒绝 深度限制 IS 校正
AReaL ⚠️(可选)
ART —(同步)
Atropos
MILES
NeMo‑RL
OAT
open‑instruct ⚠️(可选)
PipelineRL
PRIME‑RL
ROLL
SkyRL
SLIME
TorchForge
Tunix
verl
verifiers‑rl

混合方案(如 PRIME‑RL、open‑instruct)将深度限制与可选 IS 加权结合,保持流水线简洁的同时提升鲁棒性。

7. 部分 Rollout 处理(第 5 维度)

长上下文 rollout(数万 token)在权重更新到来时可能仍在生成中。常见策略包括:

策略 描述
隐式继续 PipelineRL 不中断;权重在 token 前向之间交换。
中止并使用前缀重试 SkyRL、SLIME 在飞生成被取消,保留的前缀在新策略下重新提交。
显式保存/恢复 verl(全异步) 保存部分 token ID 与 KV 缓存,同步后从保存状态继续生成。
批次取消 PRIME‑RL 丢弃陈旧 rollout 组;新权重同步在 HTTP 请求之间进行。
软暂停(排空) AReaL 新任务停止,已有任务完成后才同步。
不支持 verifiers‑rl、OAT、Atropos、Tunix 仅在所有在飞生成结束后才同步。

只有 PipelineRL 与 verl 提供了真正的 永不停止 行为;其余库依赖中止或排空机制。

8. LoRA 训练支持(第 6 维度)

LoRA 大幅减少可训练参数,使得 仅适配器权重同步 成为可能,只广播小的适配器增量即可,将 7 B+ 模型的 NCCL 传输时间从数百毫秒降至亚毫秒。

支持 LoRA? 后端 仅适配器同步
AReaL HF peft(FSDP2/Megatron)
ART Unsloth / Megatron
Atropos HF peft
MILES Megatron‑Bridge
NeMo‑RL ✅(自定义) DTensor / Megatron ❌(暂无证据)
OAT HF peft
open‑instruct ❌(代码存在但未接通)
PipelineRL HF peft ❌(全量广播)
PRIME‑RL Custom MultiLoRA
ROLL ✅(仅 DeepSpeed) DeepSpeed
SkyRL HF peft / Megatron‑Bridge
SLIME
TorchForge
Tunix qwix(JAX)
verl HF peft / Megatron‑Bridge
verifiers‑rl HF peft + FSDP2

LoRA‑仅同步显著放宽了中断模型:即使库在请求层面中止,也能因数据传输极小而实现频繁权重更新。

9. 分布式训练后端与并行方式(第 7 维度)

训练后端决定模型规模上限、集合通信模式以及对 MoE 的兼容性。

后端 并行方式(DP/TP/PP/EP) MoE 支持
AReaL FSDP2、Megatron、Archon DP、SP、TP、PP、CP、EP
ART Unsloth、Megatron DP、TP、EP
Atropos PyTorch native、TRL DP
MILES Megatron、FSDP2 DP、TP、PP
NeMo‑RL DTensor、Megatron DP、SP、TP、PP、CP、EP
OAT DeepSpeed DP、TP
open‑instruct DeepSpeed DP、SP
PipelineRL DeepSpeed DP、SP
PRIME‑RL FSDP2 DP、TP、CP、EP
ROLL DeepSpeed、Megatron、FSDP2 DP、SP、TP、PP、CP、EP
SkyRL FSDP、Megatron‑Bridge DP、SP、TP、PP、EP
SLIME Megatron DP、TP、PP、SP
TorchForge FSDP2(Monarch) DP、TP、CP
Tunix JAX/XLA DP、TP
verl FSDP、Megatron DP、SP、TP、PP、CP、EP
verifiers‑rl DeepSpeed DP

关键含义:MoE 训练(专家并行)仅在基于 Megatron 或 FSDP2 并显式处理 EP 的库中得到支持(AReaL、verl、PRIME‑RL、SkyRL、ROLL、NeMo‑RL)。仅使用 ZeRO(DeepSpeed、纯 FSDP) 的库虽能加载 MoE 检查点,但因所有专家都被切分到每个 rank,失去了稀疏优势。

10. 新兴设计压力

10.1 无评估器算法

去除价值网络(如 GRPO、REINFORCE++)可释放显存,允许更大的 rollout 批次,但也会提升权重更新频率。陈旧度管理变得更关键,因为在更大的组规模(G = 8‑32)下策略漂移加速。因而需要每样本版本标记和 IS 校正来保证训练稳定。

10.2 过程奖励

对中间推理步骤进行打分(过程奖励模型)在生成与训练之间加入了非平凡的计算阶段。异步流水线必须加入 reward‑actor 与训练器并行运行,正如 PRIME‑RL 与 NeMo‑RL 所做的那样。否则奖励计算会成为新的瓶颈。

10.3 多智能体协同进化

多智能体自我对弈会放大拖尾问题:有效 rollout 长度等于每个智能体长度的乘积,导致方差急剧上升。缓冲区设计必须把整个多智能体回合视为单一原子单元,陈旧度策略也需基于每回合版本追踪,而非单样本。

10.4 MoE 的训练‑推理不匹配

在 DeepSeek‑v3.2 中发现两类结构性不匹配:

  1. 专家路由不一致 – 推理与训练可能因浮点差异为同一 token 选取不同专家。解决方案(“Keep Routing”)要求推理服务器返回路由决策,训练端强制使用相同路由。
  2. 采样掩码不匹配 – 生成时的 top‑p/top‑k 截断导致动作空间与完整词表的训练前向不同。 “Keep Sampling Mask” 记录截断掩码并在训练时重新应用。 目前调研的库均未实现上述功能,凸显了未来异步 RL 系统的潜在空白。

10.5 蒸馏作为异步 RL

On‑policy 蒸馏(学生生成,教师打分)遵循与 RL 完全相同的异步模式:生成 → 打分 → 梯度更新 → 权重同步。因此所有设计维度保持不变。一个通用的异步训练器应将打分步骤抽象为可插拔组件,而非硬编码的 verifier,从而同时支持 RL 与蒸馏工作负载。

11. TRL 异步训练器的设计选择

基于本次调研,TRL 团队计划在即将推出的异步训练器中作出以下具体决策:

  1. 轻量编排 – 在可能的情况下避免使用重量级运行时;采用原生 Python asyncio 配合最小化的 Actor 抽象。
  2. 有界队列 + 每 token model_version – 每个 token 附带生成时的策略版本,实现细粒度 IS 校正,免去后期补丁。
  3. 带分桶的 NCCL 权重同步 – 利用 vLLM 的 NCCLWeightTransferEngine 进行打包广播,约 20 ms 即可完成一次同步,大幅降低延迟。
  4. 部分 rollout 支持 – 实现前缀恢复机制,针对具备代理特性的工作负载,在权重更新后让在飞生成在新策略下继续。

这些选择旨在融合生态最佳实践,同时保持实现对更广泛的 TRL 社区友好。


结论:异步 RL 训练已成为大规模 LLM 后训练的事实标准。调研显示,业界已在推理‑训练分离、使用 rollout 缓冲区以及异步权重推送上形成共识,Ray 是最常见的编排层,NCCL 广播是默认的同步方式。未来工作需进一步解决 LoRA‑仅同步、MoE 路由一致性以及多智能体回合处理,以跟上下一代前沿模型的步伐。

Sources