库与框架对比
单文件实现(CleanRL)适合学习与研究,Stable-Baselines3 适合可靠基线,RLlib 适合大规模分布式,TorchRL 提供可组合原语;LLM 后训练有 TRL、OpenRLHF、veRL 等。本章给出选型建议与各自的坑。
RL 训练库的谱系
Section titled “RL 训练库的谱系”| 库 | 定位 | 适合 | 坑 |
|---|---|---|---|
| CleanRL | 单文件实现 | 学习原理、复现论文细节 | 无分布式、无维护的抽象 |
| Stable-Baselines3 | 可靠基线 | 快速实验、教学 | 抽象层厚,改动算法本体要入内 |
| Tianshou | 中间层 | 研究(中文社区活跃) | 模块化但文档较薄 |
| RLlib | 大规模分布式 | 多机、高吞吐 | 抽象极厚,调试困难 |
| TorchRL | 可组合原语 | 自定义算法研究 | 需要自己组装 |
| Acme (DeepMind) | 分布式研究 | 大规模、actor-learner | 依赖重 |
- 学习与复现:CleanRL——单文件、无抽象,最容易对照论文核对细节(PPO 的 37 个细节在这里是明文的)。研究新算法时,单文件实现的可读性胜过一切框架。
- 可靠基线与快速实验:Stable-Baselines3——久经考验的默认超参、向量环境、回调系统。缺点:默认超参是"它们的",换任务要重调(且不同库的默认超参差异导致结果不可比,→ 评估协议与可复现性)。
- 大规模分布式:RLlib(Ray)——IMPALA/Ape-X 架构的现成封装(→ 向量化环境与分布式采样)。代价是抽象层极厚:调试一个分布式 bug 要穿过多层框架。
- 自定义研究:TorchRL——可组合的 tensor 模块(环境、回放、loss 分离),适合组装自己的算法;组装成本自己承担。
LLM 后训练框架
Section titled “LLM 后训练框架”RLHF/RLVR 的基础设施核心是多模型的显存与调度(策略/参考/奖励/价值四模型并存,→ PPO for LLM):
- TRL(Hugging Face):生态最全(SFT、DPO、PPO、GRPO 一体),与 transformers 无缝;大规模训练的调度能力较弱;
- OpenRLHF:为大规模 RLHF 设计,vLLM 推理 + 训练分离的调度,多机支持好;
- veRL(字节跳动):HyFlow 引擎、3D 并行与推理训练混合调度,R1 式 RLVR 训练的主力框架之一;
- 共同的核心问题:生成(推理)与训练(反向传播)的显存竞争与流水线调度——生成用推理引擎(vLLM/SGLang)、训练用 FSDP/Megatron,权重在两者间同步。
- 默认超参不可比:不同库的 PPO 默认超参(clip、学习率、epoch 数、优势归一化)互不相同,同一算法跨库的结果差异可以超过算法差异(→ 评估协议与可复现性)。对比实验必须固定库与配置,只改算法本体。
- 抽象层的代价:框架的模块化让"改一行算法"变成"理解三层继承"——研究场景下,CleanRL 式的单文件常是更好的起点。
- 版本陷阱:Gymnasium/Gym 的 API 变迁、MuJoCo 版本、CUDA 依赖——环境与库的版本组合要锁死(→ 环境接口与模拟器)。
- 单文件实现最容易对照论文核对细节
- LLM 后训练框架的核心是多模型的显存与调度
- 不同库的默认超参差异导致结果不可比