LLM 学习日志 #5 后训练框架:veRL、OpenRLHF、TRL和NeMo

上一篇博客系统性的整理和介绍了“预训练框架”,那么接下来就是“后训练框架”了。如果读者了解过的话,可以知道这个领域一个很有意思的现象:在“后训练框架”中,中国的社区、开发者和公司所占据的影响力和份额比预训练框架要高得多的多。这很大程度上要归功于Deepseek这一家公司:DeepSeek-R1几乎以一己之力引爆了RLVR的热潮,而GRPO也是DeepSeek提出的,这两个贡献直接定义了当前后训练的主流方向。随着Qwen、Seed的快速追赶,中国的相关实体在这一领域的早期贡献产生了明显的奠基者效应。在接下来的介绍中,将会更深刻的体会到这一点。我们将从一些先前遗漏的(因为较为不重要,或者较为陈旧了)较为小的后训练专用技术开始,随后扩展到当前的主流框架都有哪些。

⚠️注意事项:这部分我也是初学,许多内容原本不甚了解,因此大量参考了网络资料和其他在线内容进行学习后整理,供读者参考。如有问题,欢迎指出。

一些后训练技术

PEFT(Parameter-Efficient Fine-Tuning)

Prefix/Prompt-Tuning:在模型的输入或隐层添加$k$个额外可训练的前缀tokens(这些前缀是连续的伪tokens,是在Embedding空间内可微梯度下降训练找到的,不对应真实的tokens),只训练这些前缀参数;

Adapter-Tuning:将较小的神经网络层或模块插入预训练模型的每一层,这些新插入的神经模块称为adapter(适配器),下游任务微调时也只训练这些适配器参数;

LoRA:通过学习小参数的低秩矩阵来近似模型权重矩阵$W$的参数更新,训练时只优化低秩矩阵参数。

历史上这三种方法几乎同期出现(2021-2022 年),但LoRA最终成为事实标准,原因是几个优势的叠加:推理零开销(合并后消失)、实现简单(包一层wrapper就行)、效果最好(直接改权重比改输入或加模块更有效)、和量化技术的配合更自然(QLoRA)。

OpenRLHF(开源,Jian Hu等)

以"简洁 + 高性能"的平衡为核心的开源 RLHF 框架,代码量最小但性能不输重量级方案。

定位:面向学术研究者和想深入理解 RLHF 工程的开发者。核心卖点是代码精简易读(约 8,500 行),同时通过 Ray + vLLM + DeepSpeed 的组合实现了工业级性能。已被多所大学课程采用为教学框架。适合的场景是从单机到多机的 RLHF/RLVR 训练,模型规模支持到 70B+。不适合的场景是需要 Megatron 后端做超大规模训练的场景(只支持 DeepSpeed)。

组成:Python + PyTorch,核心依赖三个组件——Ray(分布式编排和 GPU 资源调度)、vLLM(高效 rollout generation,支持 AutoTP 和 PP)、DeepSpeed ZeRO-3(训练端显存优化)。架构上为每个模型(Actor/Critic/Reward/Ref)分配独立的 worker group,通过 Ray 调度。

有什么

算法方面:PPO、REINFORCE++、REINFORCE++-baseline、GRPO、RLOO、DAPO、SFT、DPO、Reward Model 训练。

推理引擎:集成 vLLM,支持 AutoTP 和 PP,rollout 吞吐量很高。

分布式方面:基于 Ray 的灵活 GPU 分配,Hybrid Engine 支持所有模型和 vLLM 引擎共享 GPU 资源。支持 DeepSpeed ZeRO-3、deepcompile、AutoTP、RingAttention。

高级特性:异步 RL 训练(async_train)、异步 agent RL、统一的 token-in-token-out agent 执行范式(SingleTurn 和 MultiTurn 统一接口)、VLM RLHF(支持 Qwen3.5 等视觉语言模型)、多 agent RL(MARTI 基于 OpenRLHF 构建)。

没有什么/不足

训练后端只支持 DeepSpeed,不支持 FSDP 和 Megatron。多轮 agent RL 的支持相对较新,成熟度不如单轮场景。没有专门的环境接口(需要通过 agent_func_path 自定义)。

veRL(火山引擎,ByteDance)

为性能和灵活性而生的 RLHF 框架,支持最多的训练后端和最高的显存效率。

定位:面向需要大规模 RLHF/RLVR 训练的工业团队和高级研究者。核心卖点是灵活的多后端架构和 resharding 机制。适合的场景是大规模训练(支持到数千 GPU)、需要 Megatron 后端的超大模型训练、需要精细控制训练-推理资源分配的场景。不适合的场景是快速原型验证(代码复杂度高、上手门槛大)。

组成:Python + PyTorch,核心依赖 Ray(编排)+ vLLM(推理)。训练后端灵活——同时支持 FSDP、DeepSpeed 和 Megatron Core 三种选择。核心创新是 WorkerDict(把多个模型放在同一组 worker 上共享资源)和 HybridEngine(同一组 GPU 上在训练和推理模式之间动态切换)。代码量约 32,000 行。

有什么

算法方面:PPO、GRPO、REINFORCE、SFT、DPO、Reward Model 训练。

训练后端:FSDP + DeepSpeed + Megatron Core 三选一(其他框架最多支持一到两个)。

推理引擎:集成 vLLM。

核心创新——Resharding:在训练和推理之间动态转换参数的并行分布方式(比如训练时用 FSDP 的 sharding,推理时转成 TP),实现最高的显存效率。In-place transformation 避免了多余的参数拷贝。

分布式方面:基于 Ray 的 WorkerDict 架构,多个模型共享同一组 GPU,资源利用率高于 OpenRLHF 的独立 worker group 方案。

高级特性:支持 agentic mode(多轮 RL)。

特别值得一提的贡献:HybridEngine + resharding 的设计思想影响了后续很多框架,veRL 的论文(HybridFlow)发表在 EuroSys'25。

没有什么/不足

代码复杂度最高(32,000 行),上手门槛大。resharding 引入了额外的延迟(虽然显存效率最高)。文档和教程不如 TRL 和 OpenRLHF 完善。异步 RL 的支持不如 OpenRLHF 成熟。VLM RLHF 支持相对较新。

TRL(Transformers Reinforcement Learning,HuggingFace)

HuggingFace 官方的后训练库,以易用性和生态集成为核心卖点。

定位:面向不想深入分布式细节、只想快速跑通后训练流程的研究者和应用开发者。最适合的场景是在 HuggingFace 生态内做 SFT/DPO/GRPO 实验,模型规模在 7B-70B,硬件在 1-8 卡。不适合的场景是需要大规模分布式 RLHF(多模型协调)、需要高吞吐 rollout generation、或者需要灵活的多轮 agent RL 的场景。

组成:Python + PyTorch,深度集成 HuggingFace Transformers + PEFT(LoRA/QLoRA)+ Accelerate(封装了 FSDP/DeepSpeed 做分布式)+ Datasets。不直接集成 vLLM 等高效推理引擎。代码量约 19,000 行。

有什么

算法方面:SFT、DPO、SimPO、KTO、PPO、GRPO、RLOO、Reward Model 训练、Online DPO。

PEFT 集成:原生支持 LoRA、QLoRA(通过 PEFT 库),可以一行代码启用。

分布式方面:通过 Accelerate 支持 FSDP 和 DeepSpeed 后端,但用户不需要直接接触底层。

易用性方面:和 HuggingFace Hub 无缝对接(数据集加载、模型推送),Trainer 风格的 API,配置简单。

没有什么/不足

没有集成 vLLM 等高效推理引擎,PPO rollout 阶段用的是 HuggingFace 的原生 generate,吞吐量远低于 vLLM。没有 Ray 等分布式编排,多模型(Actor/Critic/Reward/Ref)的 GPU 分配不灵活。不原生支持多轮 RL 和任意环境交互。不支持 Megatron 后端。不支持异步 RL。整体大规模训练效率不如 OpenRLHF 和 veRL。

其他值得注意的后训练框架

NeMo RL

NVIDIA 官方的后训练引擎,NeMo-Aligner 的下一代替代品,面向企业级部署。

定位:面向使用 NVIDIA 基础设施的企业团队,需要一站式、有官方支持的后训练方案。适合的场景是在 DGX 集群 / SLURM / Kubernetes 上做大规模后训练,需要和 NeMo 生态(Curator、Evaluator、Guardrails、NIM 部署)打通。不适合的场景是个人研究者或小团队快速实验(太重、依赖太多)。

组成:Python + PyTorch,底层训练用 Megatron Core,编排用 Ray,和 HuggingFace 有一定程度的集成。是 NeMo 全家桶的一部分。

有什么

高性能 Megatron Core 后端,支持各种并行策略。支持端到端 FP8 训练。支持异步 RL。和 NeMo Gym(RL 训练环境库)配合。支持和 TRL、veRL 的互操作。被用于训练 Nemotron 3 模型家族。结构化数据流设计、清晰的接口定义。

没有什么/不足

生态相对封闭(深度绑定 NVIDIA 全家桶)。社区活跃度和开源影响力不如 OpenRLHF 和 veRL。安装和配置复杂(推荐用 NGC 容器)。文档在 NeMo 重组过程中仍在完善。

DeepSpeed-Chat

最早的完整 RLHF 开源方案之一,但维护停滞,逐渐被取代。

定位:历史上是第一个把 SFT → Reward Model → PPO 全链路打通的开源方案,对 RLHF 工程的普及有重要贡献。但现在已经不推荐新项目使用——社区维护活跃度低,bug 多,性能不如 OpenRLHF 和 veRL。

组成:Python + PyTorch + DeepSpeed ZeRO。不使用 Ray 做编排(用 DeepSpeed 自己的 engine),不集成 vLLM(rollout 用自己的推理实现)。

有什么

完整的 SFT → Reward Model → PPO 三阶段 pipeline。和 DeepSpeed ZeRO 深度集成。Hybrid Engine(在同一 GPU 上切换训练和推理模式)。

没有什么/不足

不支持 GRPO、DPO、RLVR 等较新的算法。不集成 vLLM,rollout 吞吐量低。不使用 Ray,GPU 资源调度不灵活。不支持异步 RL、多轮 agent RL。社区广泛反映的问题包括:配置复杂、调试困难、某些场景下训练不收敛。

ChatLearn

阿里内部的后训练框架,开源但社区影响力有限。

定位:面向阿里内部及其云服务用户。支持 RLHF 的多模型编排和训练。在阿里内部有一定使用,但在开源社区中的采用率和讨论度远低于 OpenRLHF 和 veRL。

后训练框架核心特性汇总表

特性                   TRL          OpenRLHF      veRL          NeMo RL       DS-Chat
─────────────────────────────────────────────────────────────────────────────────────
维护方                 HuggingFace  社区(中国)    ByteDance     NVIDIA        Microsoft
代码量                 ~19K         ~8.5K         ~32K          -             -
定位                   易用生态     简洁高性能    灵活极致性能   企业级         已过时

SFT                    ✓            ✓             ✓             ✓             ✓
DPO/SimPO/KTO          ✓            ✓             ✓             ✓             ✗
PPO                    ✓            ✓             ✓             ✓             ✓
GRPO                   ✓            ✓             ✓             ✓             ✗
REINFORCE++            ✗            ✓             ✗             ✗             ✗
RLOO                   ✓            ✓             ✗             ✗             ✗
DAPO                   ✗            ✓             ✓             ✗             ✗
Reward Model训练       ✓            ✓             ✓              ✓             ✓

推理引擎集成
  vLLM                 ✗            ✓             ✓             ✗             ✗
  自有推理             HF generate   -              -             Megatron推理   DS推理

分布式编排
  Ray                  ✗            ✓             ✓             ✓             ✗
  自有编排              Accelerate   -             -              -             DS Engine

训练后端
  FSDP                 ✓(Accelerate)✗             ✓             ✗             ✗
  DeepSpeed            ✓(Accelerate)✓(ZeRO-3)     ✓             ✗             ✓
  Megatron Core        ✗            ✗             ✓             ✓             ✗

LoRA/QLoRA             ✓(PEFT)      ✓             ✓             ✓(PEFT)       ✗
异步RL                 ✗            ✓             部分           ✓             ✗
多轮Agent RL           ✗            ✓             ✓(agentic)    ✓(NeMo Gym)   ✗
VLM RLHF               ✗            ✓             部分           ✓             ✗
FP8训练                ✗            ✗             ✗             ✓             ✗

GPU资源共享
  (Hybrid Engine)      ✗            ✓            ✓(WorkerDict) ✓             ✓
Weight Sync方式        -            NCCL/IPC      Resharding     Megatron内部  共享内存

易用性                 最高         高            中            低            低
学习/教学价值          中           最高          中            低            低(已过时)
社区活跃度             高           很高          很高          中            低
─────────────────────────────────────────────────────────────────────────────────────