保持 Token 流动:16 个开源 RL 库的经验教训

Hugging Face Blog 新闻

摘要

Hugging Face 发布了对 16 个开源强化学习库的全面分析,研究异步 RL 训练的架构模式,并为 TRL 的异步训练器设计经验教训,以解决生成瓶颈和权重同步挑战。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/04/20 17:27

保持令牌流动:来自16个开源强化学习库的经验教训

来源:https://huggingface.co/blog/async-rl-training-landscape 返回文章列表 (https://huggingface.co/blog)

  • 1. 动机:从同步强化学习训练到异步架构 (https://huggingface.co/blog/async-rl-training-landscape#1-motivation-from-synchronous-rl-training-to-async-architectures)- 1.1 TRL如何进行强化学习训练 (https://huggingface.co/blog/async-rl-training-landscape#11-how-trl-does-rl-training-today) - 1.2 并置训练 vs. 分离式训练 (https://huggingface.co/blog/async-rl-training-landscape#12-colocated-vs-disaggregated-training) - 1.3 生成瓶颈 (https://huggingface.co/blog/async-rl-training-landscape#13-the-generation-bottleneck) - 1.4 核心洞察 (https://huggingface.co/blog/async-rl-training-landscape#14-the-core-insight) - 2. 调查的库 (https://huggingface.co/blog/async-rl-training-landscape#2-libraries-surveyed) - 3. 比较框架:七个维度 (https://huggingface.co/blog/async-rl-training-landscape#3-the-comparison-framework-seven-axes)- 维度1:编排和并发原语 (https://huggingface.co/blog/async-rl-training-landscape#axis-1-orchestration–concurrency-primitive) - 维度2:回滚缓冲区设计 (https://huggingface.co/blog/async-rl-training-landscape#axis-2-rollout-buffer-design) - 维度3:权重同步协议 (https://huggingface.co/blog/async-rl-training-landscape#axis-3-weight-synchronisation-protocol) - 维度4:陈旧性管理 (https://huggingface.co/blog/async-rl-training-landscape#axis-4-staleness-management) - 维度5:部分回滚处理 (https://huggingface.co/blog/async-rl-training-landscape#axis-5-partial-rollout-handling) - 维度6:LoRA训练支持 (https://huggingface.co/blog/async-rl-training-landscape#axis-6-lora-training-support) - 维度7:分布式训练后端和并行化 (https://huggingface.co/blog/async-rl-training-landscape#axis-7-distributed-training-backend–parallelism) - 4. 全局概览:一览16个库 (https://huggingface.co/blog/async-rl-training-landscape#4-global-overview-sixteen-libraries-at-a-glance) - 5. 下一波:设计启示 (https://huggingface.co/blog/async-rl-training-landscape#5-the-next-wave-design-implications)- 5.1 无评论家算法:内存释放,但权重同步压力增加 (https://huggingface.co/blog/async-rl-training-landscape#51-critic-free-algorithms-memory-freed-but-weight-sync-pressure-increases) - 5.2 过程奖励:一个新的同步障碍 (https://huggingface.co/blog/async-rl-training-landscape#52-process-rewards-a-new-synchronisation-barrier) - 5.3 多智能体共同进化:掉队问题加剧 (https://huggingface.co/blog/async-rl-training-landscape#53-multi-agent-co-evolution-the-straggler-problem-compounds) - 5.4 训练推理不匹配:Deepseek v3.2 MoE案例研究 (https://huggingface.co/blog/async-rl-training-landscape#54-training-inference-mismatch-the-deepseek-v32-moe-case-study) - 5.5 蒸馏:不同名称下的同一异步问题 (https://huggingface.co/blog/async-rl-training-landscape#55-distillation-the-same-async-problem-under-a-different-name) - 6. TRL异步训练器的设计选择 (https://huggingface.co/blog/async-rl-training-landscape#6-design-choices-for-trls-async-trainer)- 设计原则:保持编排轻量级 (https://huggingface.co/blog/async-rl-training-landscape#design-principle-keep-orchestration-lightweight) - 1. 带有按令牌model_version的有界队列(无双缓冲) (https://huggingface.co/blog/async-rl-training-landscape#1-bounded-queue-with-per-token-model_version-no-double-buffering) - 2. 具有打包传输的NCCL权重同步 (https://huggingface.co/blog/async-rl-training-landscape#2-nccl-weight-sync-with-packed-transfers) - 3. 代理工作负载的部分回滚支持 (https://huggingface.co/blog/async-rl-training-landscape#3-partial-rollout-support-for-agentic-workloads) 简述-- 对于那些没有时间阅读5000字关于异步强化学习管道(我们理解,你有模型要训练)的人:- 问题: 在同步强化学习训练中,数据生成(创建数据样本的模型推理)主导了实际时间——在32B(320亿参数)模型上生成一批32K令牌回滚可能需要数小时,而用于训练的GPU保持空闲。- 每个人都达成共识的解决方案: 将推理和训练分离到不同的GPU池中,用回滚缓冲区(模型输出的临时存储)连接它们,并异步传输权重(无需等待),这样任何一方都不需要等待另一方。- 我们调查了16个开源库 实现此模式,并在7个维度上比较它们:编排原语、缓冲区设计、权重同步协议、陈旧性管理、部分回滚处理、LoRA支持和分布式训练后端。- 关键发现: Ray在编排方面处于主导地位(调查的分布式计算库中占8/16)。NCCL(NVIDIA集体通信库)广播是传输模型权重的默认方法。陈旧性管理是指如何处理过时数据样本,范围从简单地丢弃旧样本到使用高级重要性采样校正。LoRA(低秩适配)训练支持稀少。分布式MoE(专家混合)支持是新兴的差异化因素。如果你想直接跳到精彩部分,这里是完整比较表 (https://huggingface.co/blog/async-rl-training-landscape#4-global-overview-sixteen-libraries-at-a-glance)(无需阅读,我们不会评判)。但说真的,如果你坚持阅读,你可能会了解到为什么你的GPU有60%的时间处于空闲状态。

点击展开目录- 1. 动机:从同步强化学习训练到异步架构 (https://huggingface.co/blog/async-rl-training-landscape#1-motivation-from-synchronous-rl-training-to-async-architectures)- 1.1 TRL如何进行强化学习训练 (https://huggingface.co/blog/async-rl-training-landscape#11-how-trl-does-rl-training-today) - 1.2 并置训练 vs. 分离式训练 (https://huggingface.co/blog/async-rl-training-landscape#12-colocated-vs-disaggregated-training) - 1.3 生成瓶颈 (https://huggingface.co/blog/async-rl-training-landscape#13-the-generation-bottleneck) - 1.4 核心洞察 (https://huggingface.co/blog/async-rl-training-landscape#14-the-core-insight)

  • 2. 调查的库 (https://huggingface.co/blog/async-rl-training-landscape#2-libraries-surveyed)
  • 3. 比较框架:七个维度 (https://huggingface.co/blog/async-rl-training-landscape#3-the-comparison-framework-seven-axes)- 维度1:编排和并发原语 (https://huggingface.co/blog/async-rl-training-landscape#axis-1-orchestration–concurrency-primitive) - 维度2:回滚缓冲区设计 (https://huggingface.co/blog/async-rl-training-landscape#axis-2-rollout-buffer-design) - 维度3:权重同步协议 (https://huggingface.co/blog/async-rl-training-landscape#axis-3-weight-synchronisation-protocol) - 维度4:陈旧性管理 (https://huggingface.co/blog/async-rl-training-landscape#axis-4-staleness-management) - 维度5:部分回滚处理 (https://huggingface.co/blog/async-rl-training-landscape#axis-5-partial-rollout-handling) - 维度6:LoRA训练支持 (https://huggingface.co/blog/async-rl-training-landscape#axis-6-lora-training-support) - 维度7:分布式训练后端和并行化 (https://huggingface.co/blog/async-rl-training-landscape#axis-7-distributed-training-backend–parallelism)
  • 4. 全局概览:一览16个库 (https://huggingface.co/blog/async-rl-training-landscape#4-global-overview-sixteen-libraries-at-a-glance)
  • 5. 下一波:设计启示 (https://huggingface.co/blog/async-rl-training-landscape#5-the-next-wave-design-implications)- 5.1 无评论家算法:内存释放,但权重同步压力增加 (https://huggingface.co/blog/async-rl-training-landscape#51-critic-free-algorithms-memory-freed-but-weight-sync-pressure-increases) - 5.2 过程奖励:一个新的同步障碍 (https://huggingface.co/blog/async-rl-training-landscape#52-process-rewards-a-new-synchronisation-barrier) - 5.3 多智能体共同进化:掉队问题加剧 (https://huggingface.co/blog/async-rl-training-landscape#53-multi-agent-co-evolution-the-straggler-problem-compounds) - 5.4 训练推理不匹配:Deepseek v3.2 MoE案例研究 (https://huggingface.co/blog/async-rl-training-landscape#54-training-inference-mismatch-the-deepseek-v32-moe-case-study) - 5.5 蒸馏:不同名称下的同一异步问题 (https://huggingface.co/blog/async-rl-training-landscape#55-distillation-the-same-async-problem-under-a-different-name)
  • 6. TRL异步训练器的设计选择 (https://huggingface.co/blog/async-rl-training-landscape#6-design-choices-for-trls-async-trainer)- 设计原则:保持编排轻量级 (https://huggingface.co/blog/async-rl-training-landscape#design-principle-keep-orchestration-lightweight) - 1. 带有按令牌model_version的有界队列(无双缓冲) (https://huggingface.co/blog/async-rl-training-landscape#1-bounded-queue-with-per-token-model_version-no-double-buffering) - 2. 具有打包传输的NCCL权重同步 (https://huggingface.co/blog/async-rl-training-landscape#2-nccl-weight-sync-with-packed-transfers) - 3. 代理工作负载的部分回滚支持 (https://huggingface.co/blog/async-rl-training-landscape#3-partial-rollout-support-for-agentic-workloads)

1. 动机:从同步强化学习训练到异步架构

异步强化学习训练已成为大规模后训练的主流范式。现代后训练的几个趋势使得同步训练循环几乎不可能扩展:

  • 来自推理模型的长回滚。 思维链训练产生非常长的回滚,单个同步生成批次在单个GPU上可能需要数小时完成。在这段时间里,训练GPU完全空闲。
  • 无价值函数的训练器如GRPO 使用组相对优势。这意味着每个提示生成最多G倍的回滚,整个批次受限于组中最慢的完成。
  • 代理强化学习训练的兴起。 当模型与工具、沙箱和外部环境进行多轮交互时,回滚长度和延迟变得高度可变。一个简单的API调用可能在几秒内返回,而包含工具使用的复杂推理链可能运行数分钟或数小时。MiniMax的Forge (https://www.minimax.io/news/forge-scalable-agent-rl-framework-and-algorithm) 框架用于训练MiniMax-M2.5,说明了实践中达到的规模:上下文长度达200K令牌、超过十万个不同的智能体脚手架和环境,以及日吞吐量达百万级样本。在这种规模下,生成和训练之间的任何同步障碍都会成为严重瓶颈。掉队问题(少数缓慢的回滚阻止整个批次)单独就能使数百个GPU空闲。

开源生态已经汇聚到一个共同的架构响应:将推理与训练分离到不同的GPU池,用回滚缓冲区连接它们,并让两方并发运行。

我们正在为TRL (https://github.com/huggingface/trl)开发一个新的异步训练器,TRL是最广泛使用的模型后训练库之一。为了指导我们的设计,我们调查了16个开源库,它们从头开始围绕异步训练构建,并在7个维度上进行了比较:编排原语、缓冲区设计、权重同步协议、陈旧性管理、部分回滚处理、LoRA支持和分布式训练后端。本文提炼了我们从该调查中提取的设计原则。

超越强化学习,异步基础设施的必要性日益明显。例如,在线蒸馏,其中学生生成序列,教师对其评分,镜像GRPO但用教师前向传播交换奖励函数。认识到这种结构相似性,本调查中的一切同样适用于异步蒸馏。我们将在第5部分回到这个更广泛的观点。

1.1 TRL如何进行强化学习训练

TRL当前的GRPOTrainer在单个同步的training_step()调用中实现完整的GRPO循环(提示采样、生成、奖励评分、优势计算、梯度更新和权重同步)。这种设计简单正确,但它无法将生成与训练重叠,在GPU利用率上留下了显著的余地。

查看GRPOTrainer,我们在每个训练步骤内顺序地有以下阶段:

  1. 提示采样: 从数据集中抽取一批提示。没什么复杂的,继续。
  2. 生成,调用model.generate()(或向vLLM服务器转发请求)为每个提示生成G个完成。这是自回归的,主导实际时间。
  3. 奖励评分: 针对一个或多个奖励函数评估每个完成。
  4. 优势计算
  5. 前向和后向传播: 计算裁剪策略梯度损失并反向传播。
  6. 优化器步骤,更新模型权重。
  7. 权重同步,将更新的权重推送到推理引擎(vLLM),以便下一代使用新策略。

每个阶段阻塞直到完成后再开始下一个。时间轴看起来像这样:

同步TRL训练时间轴TRL提供steps_per_generation配置选项来在多个梯度步骤中重用单个回滚集合(时间重用),摊销生成成本。但生成调用本身仍然完全同步和阻塞;训练器在批次中的每个完成完成之前无法开始梯度计算。

该库还支持在server模式下以单独的进程运行vLLM。它在生成期间释放训练GPU,但两个硬同步障碍仍然存在:HTTP调用直到所有完成返回,以及权重同步在传输期间阻止训练器和vLLM。

1.2 并置训练 vs. 分离式训练

在讨论异步训练之前,必须理解使用单独推理引擎的强化学习训练的两种部署拓扑:

  • 并置模式相同的GPU集合上放置推理和训练。单个GPU(或TP组)同时持有训练模型(在FSDP或ZeRO下)和推理引擎(vLLM或SGLang)。一次只有一个角色活跃:在生成期间,训练模型的参数可能被卸载或重新分片成推理友好的布局(例如,从FSDP分片到vLLM的张量并行布局);在训练期间,推理引擎被暂停或休眠。权重“同步“基本上是免费的;它最多是同一GPU上的原地重新分片,而不是网络传输。并置模式的优势是简单和成本;你需要较少的总GPU数。根本限制是推理和训练无法重叠。例如,这里是TRL与vLLM在colocate_mode

TRL与vLLM在并置模式- 分离式模式不同的GPU池上放置推理和训练。推理池运行v

相似文章