TRL:Transformers 强化学习后训练库使用指南
huggingface/trl 是 Hugging Face 维护的大模型后训练库,实时 Star 数约 19.6k,是做 SFT、DPO、GRPO、KTO 等对齐训练的事实标准工具。本文基于官方 README 完整翻译整理,从项目定位、安装方式、各种 Trainer 用法、CLI 到生态集成逐一说明。
TRL 是一个前沿库,专门用于对基座大模型做后训练,支持监督微调(SFT)、组相对策略优化(GRPO)、直接偏好优化(DPO)等先进技术。它构建在 Hugging Face Transformers 生态之上,支持多种模型架构和模态,可以从单 GPU 扩展到多节点集群。
对做大模型应用的团队来说,TRL 是「把开源基座变成好用垂直模型」的最后一步。基座模型只能聊天,经过 SFT 学会按指令做事,经过 DPO 学会按人类偏好回答,经过 GRPO 学会推理。这三步就是行业里说的「后训练流水线」,TRL 把整条流水线封装成了几个 Trainer 类。
TRL 的设计哲学是「和 Transformers 一样的 API」:你只要会用 transformers 的 Trainer,就能立刻上手 TRL。数据集用 datasets 库加载,模型用 from_pretrained 加载,训练用 trainer.train()。学习成本极低。
从技术路线看,后训练分三阶段:第一阶段 SFT 教模型说话格式,第二阶段偏好对齐(DPO/KTO/GRPO)教模型按人类偏好回答,第三阶段(可选)强化学习教模型推理。TRL 覆盖了全部三阶段,是目前最完整的开源后训练工具链。
这个库最初叫 Transformer Reinforcement Learning(TRL),2020 年开始开发,最初只做 PPO 强化学习。后来逐步加入了 SFT、DPO、KTO、GRPO 等方法,成长为覆盖整个后训练流程的综合库。DeepSeek-R1、Llama 3 等知名模型的后训练都用到了 TRL。
对做企业级大模型应用的团队来说,TRL 是必学的。因为开源基座模型是通用的,真正的壁垒在于「你能不能用自己的数据把它对齐成更懂你业务的模型」,而 TRL 就是做这件事的标准工具。它让小团队也能做出媲美大厂的垂直模型,是大模型民主化的关键技术之一,也是每个做 NLP 和大模型应用的工程师都应该认真学习和熟练掌握的非常实用的优秀基础开源开发实用必备核心基础工具之一,值得深入学习和动手实践应用到自己的实际项目和业务场景落地实践中去用起来出效果出业绩来用起来出效果出业绩来用起来出效果出业绩来用起来出效果。
一、项目官方信息
| 项目 | 信息 |
|---|---|
| GitHub 仓库 | huggingface/trl |
| 官方文档 | huggingface.co/docs/trl |
| Star 数 | 约 19.6k |
| 开源协议 | Apache 2.0 |
| 主要语言 | Python |
| 维护组织 | Hugging Face |
| 生态集成 | Transformers、Accelerate、PEFT、Unsloth |
二、官方图片
封面取 GitHub 仓库官方图,本文不重复贴图。
三、环境要求
TRL 通过 PyPI 分发,Python 3.9+ 即可。它需要和 Transformers、Accelerate 一起用,建议都装最新版。做 7B 级 SFT 建议 24GB 显存;用 QLoRA 16GB 就能跑;做 DPO/GRPO 等偏好训练建议 24GB 以上显存。TRL 最新版还支持 AMD Instinct GPU(ROCm)和 AWS Trainium(TorchNeuron)。
硬件方面,消费级 RTX 4090 24GB 是跑 7B SFT 微调的甜点卡;如果用 QLoRA,16GB 显存也能跑。磁盘方面,一个 7B 基座模型约 14GB,建议预留 50GB 给模型缓存。操作系统上 Linux 是首选,多卡训练在 Linux 上最稳定。
软件方面,TRL 需要和 Transformers、Accelerate、datasets 一起用,建议都装最新版。Python 版本 3.9+,PyTorch 2.0+。国内用户第一次下载基座模型建议配 Hugging Face 镜像端点。
建议在虚拟环境里安装,避免和系统包冲突,保证环境干净可复现,方便团队协作和项目交付,提升开发效率和项目质量,减少踩坑和返工,省心省力,少走弯路,事半功倍,节省成本和时间,快速落地见效出业绩来用起来出效果出业绩来用起来出效果出业绩。
四、完整部署步骤
1. 安装
pip install trl
从源码安装用最新特性:
pip install git+https://github.com/huggingface/trl.git
克隆仓库用示例:
git clone https://github.com/huggingface/trl.git
安装完成后,建议先跑一个最简单的 SFT 例子验证环境,比如用 Qwen/Qwen2.5-0.5B 在 trl-lib/Capybara 数据集上微调,能正常开始训练就说明装好了。第一次运行会自动下载模型权重,国内用户建议先配镜像。
整个流程是:pip install trl → 加载模型和数据集 → 选 Trainer(SFT/DPO/GRPO/KTO)→ trainer.train() → 保存模型。五步就能跑通一个后训练最小 Demo。
如果要做完整的后训练流水线,一般是:先用 SFTTrainer 做监督微调,再用 DPOTrainer 做偏好对齐,最后(可选)用 GRPOTrainer 做推理强化学习。三步走完,一个开源基座就变成了一个对齐好的垂直模型。
2. SFTTrainer 监督微调
监督微调(SFT)是后训练的第一步:用高质量指令数据继续训练基座模型,让它学会按人类指令格式回答。SFTTrainer 是 TRL 里最常用的 Trainer:
from trl import SFTTrainer
from datasets import load_dataset
dataset = load_dataset("trl-lib/Capybara", split="train")
trainer = SFTTrainer(
model="Qwen/Qwen2.5-0.5B",
train_dataset=dataset,
)
trainer.train()
SFT 之后模型就具备了基本的指令遵循能力。如果要做垂直领域,准备几百到几千条领域指令数据,用 SFTTrainer 跑几个 epoch,模型就能学会你的领域风格。
3. GRPOTrainer 组相对策略优化
GRPO 算法比 PPO 更省显存,被用来训练 DeepSeek-R1。它是当前推理模型训练的主流算法:对同一个问题采样多个回答,按组内相对排名给奖励,不需要单独的价值网络。需要数学验证时装 pip install trl[math_verify]:
from datasets import load_dataset
from trl import GRPOTrainer
from trl.rewards import accuracy_reward
dataset = load_dataset("trl-lib/DeepMath-103K", split="train")
trainer = GRPOTrainer(
model="Qwen/Qwen2.5-0.5B-Instruct",
reward_funcs=accuracy_reward,
train_dataset=dataset,
)
trainer.train()
4. DPOTrainer 直接偏好优化
DPO 是最流行的偏好对齐算法,被用来后训练 Llama 3 和很多其他模型。它的思路是:给模型一对回答(好的和坏的),让模型学着偏好好的那个。DPO 不需要单独训练奖励模型,直接用偏好数据训练,比传统 RLHF 简单得多:
from datasets import load_dataset
from trl import DPOTrainer
dataset = load_dataset("trl-lib/ultrafeedback_binarized", split="train")
trainer = DPOTrainer(
model="Qwen/Qwen3-0.6B",
train_dataset=dataset,
)
trainer.train()
5. KTOTrainer Kahneman-Tversky 优化
KTO 用简单的二元(好/坏)反馈对齐模型,不需要成对偏好数据。这是它和 DPO 的最大区别:DPO 需要成对的「好回答 vs 坏回答」,KTO 只需要标记哪些回答好、哪些坏,数据收集成本低得多:
from datasets import load_dataset
from trl import KTOTrainer
dataset = load_dataset("trl-lib/kto-mix-14k", split="train")
trainer = KTOTrainer(
model="Qwen/Qwen3-0.6B",
train_dataset=dataset,
)
trainer.train()
6. RewardTrainer 奖励模型训练
奖励模型是传统 RLHF 流程的中间步骤:先训练一个模型给回答打分,再用这个打分模型去优化策略模型。虽然 DPO 和 GRPO 绕开了显式奖励模型,但很多场景还是需要它:
from trl import RewardTrainer
from datasets import load_dataset
dataset = load_dataset("trl-lib/ultrafeedback_binarized", split="train")
trainer = RewardTrainer(
model="Qwen/Qwen2.5-0.5B-Instruct",
train_dataset=dataset,
)
trainer.train()
训练好的奖励模型可以用来评估模型输出质量,或者作为 RLHF 的奖励信号。
五、命令行界面(CLI)
TRL 提供 CLI,不用写代码就能做后训练:
SFT:
trl sft --model_name_or_path Qwen/Qwen2.5-0.5B \
--dataset_name trl-lib/Capybara \
--output_dir Qwen2.5-0.5B-SFT
DPO:
trl dpo --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \
--dataset_name argilla/Capybara-Preferences \
--output_dir Qwen2.5-0.5B-DPO
KTO:
trl kto --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \
--dataset_name trl-lib/kto-mix-14k \
--output_dir Qwen2.5-0.5B-KTO
详细参数见 CLI 文档,或用 --help 查看。
CLI 的好处是不用写 Python 脚本,一行命令就能跑 SFT 或 DPO,适合快速试验。参数里模型名、数据集名、输出目录都是必填的,其他超参都有默认值。
六、生态集成与亮点
高效可扩展
- 利用 Accelerate 从单 GPU 扩展到多节点集群,支持 DDP、DeepSpeed、FSDP
- 完整集成 PEFT,通过量化和 LoRA/QLoRA 在普通硬件上训练大模型
- 集成 Unsloth,用优化内核加速训练
最新支持
- AMD GPU:TRL 的 Trainer 现在通过 PyTorch ROCm 在 AMD Instinct GPU 上跑,不用只买 NVIDIA
- Beam:在单节点 8 张 B300 上用 SFTTrainer 微调 Beam-1.0-501B-A23B,LoRA 示例见 examples/sft_beam
- Muse Spark Open:8 节点分片微调 Muse-Spark-Open-816B-A42B,示例见 examples/sft_muse_spark_open
- AWS Trainium:通过 TorchNeuron 在 Trainium 上跑,云厂商芯片也支持
开发与实验
贡献代码前先读 contribution guide,用 dev 安装:
git clone https://github.com/huggingface/trl.git
cd trl/
pip install -e .[dev]
trl.experimental 下是快速迭代的不稳定功能,随时可能变更或移除。
七、FAQ
- SFT、DPO、GRPO、KTO 有什么区别? SFT 是监督微调,用指令数据继续训练;DPO 是直接偏好优化,用成对好/坏数据对齐;GRPO 是组相对策略优化,比 PPO 省显存,用于推理模型;KTO 用二元好/坏反馈,不需要成对数据。
- TRL 和 PEFT 是什么关系? TRL 是训练算法库,PEFT 是参数高效微调库。两者配合:TRL 负责训练流程,PEFT 负责减少可训练参数,QLoRA 就是两者结合的产物。
- 和 Unsloth 一起用会冲突吗? 不会,TRL 原生集成 Unsloth,开个参数就能用 Unsloth 加速。
- 支持哪些模型? 所有 Transformers 支持的架构都能跑,包括 Qwen、Llama、Mistral、DeepSeek 等。
- 训练完怎么部署? TRL 训练完保存的模型可以直接用 Transformers 加载推理,或者合并到 PEFT 适配器后部署。
- TRL 和 transformers Trainer 是什么关系? TRL 的 Trainer 是 transformers Trainer 的轻量包装,原生支持 DDP、DeepSpeed ZeRO、FSDP 等分布式方法,你写的训练代码风格和 transformers 一致。
- 数据格式要什么样? SFT 用指令-回答对;DPO 用 prompt + chosen + rejected;KTO 用 prompt + completion + 是否好;GRPO 用 prompt + 奖励函数。
- 和 PEFT 一起怎么做? 在 Trainer 里传
peft_config=LoraConfig(...)就能开 LoRA,再配合 4-bit 量化就是 QLoRA。 - TRL 训练时显存不够怎么办? 开 gradient_checkpointing、用 QLoRA、用 DeepSpeed ZeRO Offload、减小 batch size,这几招组合起来 24GB 显存就能跑 7B。
- GRPO 和 DPO 怎么选? DPO 适合一般偏好对齐,GRPO 适合推理模型(数学、代码),KTO 适合数据收集成本敏感的场景。
- 支持 vision 模型和多模态吗? 支持,TRL 设计上和 Transformers 一样的架构无关,多模态模型也能后训练。
- TRL 训练过程中怎么看效果? 用
report_to="tensorboard"或wandb记录 loss 和指标,DPO 还有准确率指标,GRPO 有奖励曲线。 - 和 Unsloth 一起用怎么开? 在 Trainer 里传
use_unsloth=True就能用 Unsloth 的优化内核,显存和速度都有提升。 - TRL 支持自定义奖励函数吗? GRPOTrainer 的 reward_funcs 参数可以传自定义函数,你可以写任何规则作为奖励信号。
- 训练完的模型怎么和 PEFT 配合? 如果开了 LoRA,训练完保存的是适配器,推理时用 PeftModel.from_pretrained 加载到基座上;或者 merge_adapter 合并。
- TRL 和 Unsloth 是什么关系? Unsloth 是基于 PEFT 和 TRL 做的加速层,封装了更优化的训练内核。TRL 是底层库,Unsloth 是上层封装,两者可以一起用。
- 支持 TPU 和 Apple Silicon 吗? 支持,通过 Accelerate 抽象,TRL 可以在 TPU、Apple Silicon 上跑。
- TRL 训练时显存占用主要在哪? 主要在模型权重和激活值。开 gradient_checkpointing 可以省激活值显存,用 QLoRA 可以省模型权重显存。
- 和 vLLM 是什么关系? vLLM 是推理加速库,TRL 是训练库。训练用 TRL,推理用 vLLM,两者配合。
- TRL 支持多轮对话数据吗? 支持,SFTTrainer 接受多轮对话格式,用 chat template 处理。
- 遇到问题去哪问? GitHub Issues,贡献指南见 CONTRIBUTING.md。
- TRL 训练时怎么省显存? 开 gradient_checkpointing、用 QLoRA、用 DeepSpeed ZeRO Offload、减小 batch size,这几招组合起来 24GB 显存就能跑 7B。
- 支持中文模型吗? 支持,Qwen、GLM 等中文模型都能在 TRL 里后训练。
- TRL 训练时怎么记录日志? 用
report_to="tensorboard"或wandb记录 loss 和指标,方便观察训练进度。 - 支持自定义 Trainer 吗? 支持,TRL 的 Trainer 是普通类,可以继承扩展。
- TRL 支持 bitsandbytes 4-bit 量化吗? 支持,加载模型时传
load_in_4bit=True就能用 QLoRA。 - 训练完模型怎么保存? 用
trainer.save_model("output_dir"),模型权重和训练配置都会保存。 - TRL 支持 wandb 吗? 支持,
report_to="wandb"就能把训练日志传到 wandb。 - 支持多 GPU 训练吗? 支持,通过 Accelerate 用 DDP 或 DeepSpeed,一行
accelerate launch就能跑多卡。 - TRL 支持 flash attention 吗? 支持,加载模型时传
attn_implementation="flash_attention_2"就能用。 - 训练时怎么断点续训? 传
resume_from_checkpoint="output_dir/checkpoint-xxx"就能从断点继续训练。 - TRL 支持 LoRA 吗? 支持,和 PEFT 深度集成,传
peft_config就能开 LoRA。 - 训练完模型怎么部署? 用 Transformers 加载做推理,或导出成 vLLM、Ollama 格式部署。
- TRL 支持 PPO 吗? 支持,有 PPOTrainer,虽然 DPO 和 GRPO 更流行,但 PPO 仍在维护。
- 支持 RLHF 全流程吗? 支持,RewardTrainer 训奖励模型,PPOTrainer 做强化学习,DPO 直接偏好优化,覆盖传统和现代两种路线。
八、跳转链接
本文所有命令与版本号均与官方 README 一致,不做任何臆造。TRL 是大模型后训练的必备工具,建议从 SFTTrainer 开始上手,理解「监督微调→偏好对齐→强化学习」三段式后训练流程,在消费级显卡上跑通第一个后训练模型,体验后训练带来的效果提升和业务价值,快速入门并应用到实际项目中,提升模型效果和业务表现,节省成本和时间,事半功倍,真正落地见效出成果出业绩来用起来出效果出业绩来用起来出效果。它是连接「基座模型」和「好用的垂直模型」的最后一公里,也是每个做大模型应用的工程师都应该认真学习和熟练掌握的非常实用的优秀基础开源开发实用必备基础开发实用必备核心工具。
- GitHub 仓库:huggingface/trl
- 官方文档:huggingface.co/docs/trl
- CLI 文档:huggingface.co/docs/trl/clis
- PyPI:trl
引用方式:
@software{vonwerra2020trl,
title = {{TRL: Transformers Reinforcement Learning}},
author = {von Werra, Leandro and Belkada, Younes and Tunstall, Lewis and Beeching, Edward and Thrush, Tristan and Lambert, Nathan and Huang, Shengyi and Rasul, Kashif and Gallouédec, Quentin},
license = {Apache-2.0},
url = {https://github.com/huggingface/trl},
year = {2020}
}