LLM 后训练实践
第4课:RLHF与GRPO

4.4 RLHF 工程工具

TRL、OpenRLHF、veRL 等 RLHF/GRPO 训练工具的功能、架构和使用场景对比

工具生态概览

RLHF 和 GRPO 的工程实现远比 SFT 复杂——需要管理多个模型、处理在线生成、协调训练和推理。幸运的是,开源社区已经构建了多个成熟的工具框架。

本节简要介绍四种主要工具,帮助你在不同场景下选择合适的方案。

TRL:Hugging Face 官方库

简介

TRL(Transformer Reinforcement Learning) 是 Hugging Face 官方维护的 RL 训练库,与 Transformers、PEFT、Accelerate 深度集成。它是本课程实验的主要工具。

核心组件

Trainer用途算法
SFTTrainer监督微调交叉熵损失
RewardTrainer奖励模型训练Bradley-Terry 损失
DPOTrainer偏好优化DPO / SimPO / IPO
KTOTrainer非配对偏好优化KTO
ORPOTrainer联合 SFT + 对齐ORPO
PPOTrainer经典 RLHFPPO
GRPOTrainer推理 RLGRPO
RLOOTrainer轻量 RLREINFORCE++

使用示例

from trl import GRPOConfig, GRPOTrainer

# GRPO 训练配置
config = GRPOConfig(
    output_dir="./grpo-output",
    num_generations=8,       # 每个提示采样 G 个回复
    learning_rate=5e-6,
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    max_completion_length=1024,
    num_train_epochs=1,
    bf16=True,
    logging_steps=1,
    # GRPO 特有参数
    kl_coef=0.001,          # KL 惩罚系数
)

# 定义奖励函数
def reward_fn(completions, **kwargs):
    """对每个回复计算奖励"""
    rewards = []
    for completion in completions:
        # 检查答案正确性
        reward = check_answer(completion)
        rewards.append(reward)
    return rewards

# 创建训练器
trainer = GRPOTrainer(
    model=model,
    args=config,
    train_dataset=dataset,
    processing_class=tokenizer,
    reward_funcs=reward_fn,
)

trainer.train()

TRL 的优势与局限

优势局限
与 HF 生态无缝集成大规模分布式支持有限
API 简单、文档完善大模型(>30B)训练效率不如专门框架
支持 PEFT/LoRA自定义程度有限
社区活跃、更新快
单 GPU 即可运行基本实验

本课程选择 TRL 的原因:对于教学实验(1.7B-8B 模型、单 GPU),TRL 提供了最好的易用性和文档支持。API 设计直观,从 SFT 到 DPO 到 GRPO 的切换只需更换 Trainer 类和配置。

OpenRLHF:分布式 RLHF

简介

OpenRLHF 是一个基于 Ray + vLLM 的分布式 RLHF 框架,专为大规模训练设计。

架构特点

OpenRLHF 架构:

┌─────────────────────────────────────────┐
│                Ray 集群                  │
│                                         │
│  ┌───────────┐  ┌───────────────────┐   │
│  │ vLLM      │  │ 训练节点          │   │
│  │ 推理引擎  │  │ (DeepSpeed ZeRO)  │   │
│  │           │  │                   │   │
│  │ 策略模型  │  │ 策略模型训练      │   │
│  │ 快速生成  │  │ 参考模型 KL       │   │
│  └───────────┘  │ 奖励计算          │   │
│                 └───────────────────┘   │
│                                         │
│  ┌───────────────────────────────────┐  │
│  │ 数据管理节点                      │  │
│  │ 数据预处理 + 奖励计算 + 日志      │  │
│  └───────────────────────────────────┘  │
└─────────────────────────────────────────┘

关键特性

  • vLLM 加速生成:GRPO 需要大量在线生成,vLLM 的 PagedAttention 显著加速推理
  • Ray 分布式调度:自动管理多 GPU/多节点的资源分配
  • DeepSpeed ZeRO:内存高效的模型并行训练
  • 支持 70B+ 模型:通过模型并行和流水线并行

适用场景

OpenRLHF 适合:

  • 模型规模 > 13B 的 RLHF/GRPO 训练
  • 多 GPU / 多节点环境
  • 需要高效在线生成的场景

veRL:字节跳动大规模 GRPO

简介

veRL(Volcano Engine RL)是字节跳动开源的 RLHF 框架,特别优化了 GRPO 的大规模训练

核心设计

veRL 的核心设计理念是训练和推理的解耦(Decoupling)

  • 推理集群:使用 vLLM 或其他推理引擎,专门负责策略模型的在线生成
  • 训练集群:使用 FSDP/Megatron-LM,专门负责模型参数更新
  • 两个集群之间通过 NCCL 高效通信

这种解耦设计使得可以为推理和训练分别配置最优的并行策略。

关键特性

特性详情
推理框架vLLM, SGLang
训练框架FSDP, Megatron-LM
模型支持高达 671B (MoE)
GRPO 优化DAPO 改进、动态采样
数据管理大规模数据流水线

适用场景

veRL 适合:

  • 工业级 GRPO 训练(30B+ 模型)
  • 需要极致训练效率的场景
  • 字节跳动技术栈的团队

REINFORCE++ via TRL RLOOTrainer

简介

对于资源有限但想尝试 RL 训练的场景,TRL 的 RLOOTrainer 提供了一个轻量级替代方案

from trl import RLOOConfig, RLOOTrainer

config = RLOOConfig(
    output_dir="./rloo-output",
    per_device_train_batch_size=1,
    gradient_accumulation_steps=8,
    num_ppo_epochs=2,
    num_mini_batches=2,
    learning_rate=1e-6,
    kl_coef=0.05,
    rloo_k=4,           # 每个提示采样 K 个回复
)

trainer = RLOOTrainer(
    config=config,
    model=model,
    ref_model=ref_model,
    reward_model=reward_model,
    processing_class=tokenizer,
    train_dataset=dataset,
)

trainer.train()

特点

  • 单 GPU 可运行:内存需求低于 PPO 和 GRPO
  • 实现简单:基于 REINFORCE 算法,无需价值网络
  • 效果适中:略低于 GRPO,但远好于无 RL

工具对比

综合对比表

工具维护方核心算法规模支持易用性适用场景
TRLHugging FacePPO, GRPO, DPO, RLOO单 GPU ~ 8 GPU教学、原型、中小规模
OpenRLHF开源社区PPO, GRPO, DPO多 GPU ~ 多节点中大规模 RLHF
veRL字节跳动GRPO, PPO多节点,支持 MoE中低工业级大规模
TRL RLOOHugging FaceREINFORCE++单 GPU ~ 4 GPU资源有限的 RL 实验

选择指南

评估你的规模

  • 模型 < 8B,单 GPU → TRL
  • 模型 8B-70B,多 GPU → OpenRLHF
  • 模型 70B+,多节点 → veRL

评估你的目标

  • 教学/学习 → TRL(文档最好,上手最快)
  • 研究原型 → TRL 或 OpenRLHF
  • 生产部署 → OpenRLHF 或 veRL

评估你的算法需求

  • DPO/SimPO → TRL(最简单)
  • GRPO → TRL(小规模)/ OpenRLHF / veRL(大规模)
  • PPO → TRL / OpenRLHF
  • REINFORCE++ → TRL RLOOTrainer

本课实验的工具选择

工具使用原因
TRL GRPOTrainerGRPO 训练的最简实现
PEFT (LoRA)参数高效训练
vLLM(可选)加速 GRPO 的在线生成
Transformers模型加载和推理

实验提示:在本课实验中,我们使用 TRL 的 GRPOTrainer 对 Qwen3-1.7B-Base 进行 GRPO 训练。如果你有 vLLM 环境,可以在 GRPOConfig 中启用 use_vllm=True 来加速生成步骤,这通常能将训练速度提升 2-4 倍。