TRL documentation
示例
入门指南
概念指南
Trainers
操作指南
命令行界面(CLI)使用 Jobs 进行训练自定义训练减少内存使用加速训练分布式训练在 AWS Trainium 上进行训练在 AMD GPU 上进行训练训练超过 100 万个 Token使用训练好的模型
集成
示例
API
实验性
示例
examples/ 目录包含一系列自包含的示例,展示了如何使用 TRL 库完成各种应用。每个示例都位于一个独立的文件夹中,文件夹名称以其演示的方法和任务命名(例如 grpo_wordle、sft_gpt_oss_chess),并包含该示例所需的全部内容:脚本、笔记本、提示词、聊天模板以及评估代码。
基础单训练器训练脚本并非示例:它们位于 trl/scripts 中,并通过 命令行界面(trl sft、trl dpo、trl grpo 等)暴露。每个训练器的文档页面也包含一个完整的可运行代码片段。
共享资源位于examples/的根目录下:
examples/deepspeed_configs:DeepSpeed ZeRO 配置文件,通过--deepspeed传入,被许多示例使用。examples/fsdp_configs:FSDP 配置文件,通过--fsdp --fsdp_config传入(在命令行中仅使用--fsdp需要 transformers 5.10 或更高版本;在旧版本中,请在训练配置中设置fsdp=True)。examples/datasets:用于生成示例中使用的trl-lib数据集的脚本。
入门指南
按如下方式安装 TRL 及额外依赖项:
pip install --upgrade trl[quantization]
有关其他可选依赖项,请参见此处。基于 Notebook 的示例是独立的,可以在免费 Colab上运行;基于脚本的示例则适用于单 GPU、多 GPU 或 DeepSpeed 环境(参见下文分布式训练)。
索引
| 示例 | 描述 | 在 Colab 中打开 |
|---|---|---|
async_distillation_math | 在 GSM8K 上使用 experimental.async_distillation.AsyncDistillationTrainer 进行异步在线策略蒸馏:教师模型通过 vLLM 以 HTTP 方式提供服务。 | |
async_distillation_mopd | 使用 experimental.async_distillation.AsyncDistillationTrainer 进行多教师在线策略蒸馏(MOPD):将 Open-MOPD 的数学、代码和指令遵循专家融合到其 SFT 检查点中:在 60 步内,AIME24 得分从 17.5 提升至 24.2,IFEval 得分从 67.5 提升至 73.0(脚本、Hugging Face Jobs 启动器以及包含结果的 README)。 | |
async_grpo_harbor | 通过任意已安装的编码智能体(mini-swe-agent、opencode、claude-code、……)在 OpenEnv 上提供服务的 Harbor 任务套件上进行 AsyncGRPO 训练:智能体在沙箱中拥有自己的循环,而 TRL 则基于捕获代理记录的 token ids 和 logprobs 进行训练。 | |
async_grpo_math | 在 GSM8K 上使用 AsyncGRPOTrainer 进行异步 GRPO,将生成(vLLM 服务器)与训练解耦,并包含一个仅将适配器同步到 vLLM 服务器的 LoRA 变体。 | |
dpo_reduce_hallucinations | 使用 openbmb/RLAIF-V-Dataset 数据集对视觉语言模型进行 DPO 微调,以减少幻觉。 | |
gold_chatbot_arena | 使用 experimental.gold.GOLDTrainer 在 chatbot_arena_completions 数据集上,将 Qwen2 教师模型通过通用在线 Logit 蒸馏(GOLD)蒸馏到 Llama 3.2 学生模型(跨分词器),包含全量训练和 LoRA 变体。 | |
gold_qwen3_vl | 使用 experimental.gold.GOLDTrainer 将 Qwen3-VL-8B 通过通用在线 Logit 蒸馏(GOLD)蒸馏到更小的 VLM 学生模型中,涵盖同族(JSD 损失)和跨族(ULD 损失)蒸馏。 | |
grpo_2048 | 使用 GRPO 结合工具调用,训练模型玩 2048 游戏。 | |
grpo_browsergym | 在 BrowserGym OpenEnv 环境中使用 GRPO,包含 LLM 和 VLM 变体。 | |
grpo_carla | 在 CARLA 自动驾驶 OpenEnv 环境中使用 GRPO,包含 LLM 和 VLM 变体(多模态相机图像工具响应)。 | |
grpo_catch | 带有陷阱的 GRPO(OpenSpiel)OpenEnv 环境。 | |
grpo_continuous_batching | 使用 Transformers 的连续批处理引擎进行 GRPO,以在具有可变完成长度的大批量上实现更快的生成。 | |
grpo_echo | 在 Echo OpenEnv 环境中进行最小化的 GRPO 训练。 | |
grpo_harbor | 针对 Harbor 任务套件进行 GRPO 训练,支持可插拔的基础智能体(bash / jupyter / terminal_notes 测试框架)。请参阅 Harbor 集成 指南。 | |
grpo_ministral3_vl | 在免费 Colab 上使用 QLoRA 运行 GRPO Ministral 3。 | |
grpo_multi_env | 多环境 GRPO 训练:在同一次训练运行中同时使用 Wordle 和 Catch OpenEnv 环境。 | |
grpo_qlora | 在免费的 Colab 上使用 QLoRA 进行 GRPO。 | |
grpo_qwen3_vl | 在免费 Colab 上使用 QLoRA 对 Qwen3-VL 进行 GRPO 训练。 | |
grpo_rnj_1_instruct | 在 Colab 上使用 QLoRA 对 rnj-1-instruct 进行 GRPO 训练,以添加推理能力。 | |
grpo_seta | 在 openreward.ai 目录的 SETA ORS 环境中进行 GRPO 训练。请参阅 OpenReward 集成 指南。 | |
grpo_sql_agent | 使用 GRPO 训练一个通过查询 SQL 数据库来回答问题的智能体(包含脚本和 notebook;由于内存不足,无法在免费 Colab 上运行)。 | |
grpo_sudoku | 在 OpenEnv 环境中,使用 GRPO 玩数独(TextArena),从 SFT 模型开始:对于基础模型、SFT 模型和 SFT + GRPO 模型,在 26 个空格的情况下,分别解决了 30 个谜题中的 0 个、10 个和 22 个(包含脚本、notebook 以及带有结果的 README)。 | |
grpo_visual_math | 使用 lmms-lab/multimodal-open-r1-8k-verified 数据集对多模态模型进行 GRPO 微调,以实现推理能力。 | |
grpo_wordle | 使用 GRPO 在 OpenEnv 环境中玩 Wordle(TextArena)(脚本和笔记本)。 | |
gspo_math | 通过 GRPOTrainer 在 AI-MO/NuminaMath-TIR 数据集上进行数学推理的 GSPO。 | |
gspo_visual_math | 通过 GRPOTrainer 使用 GSPO 方法,并利用 lmms-lab/multimodal-open-r1-8k-verified 数据集对多模态模型进行推理微调。 | |
lfm2_5_moe_research_agent | LiquidAI/LFM2.5-8B-A1B 两步走:首先,在单个 8xH100 节点上,使用 SFTTrainer 对 xLAM 函数调用进行全量 SFT,加载时由 transformers 的 DistributedConfig 进行分片(采用带 token 调度的专家并行,外加 FSDP);然后,使用 GRPOTrainer 和 environment_factory(search / read 工具,精确匹配奖励)在 HotpotQA 上对多轮研究智能体进行 GRPO。 | |
mpo_visual_preferences | 通过 DPOTrainer 使用 MPO 方法,基于 HuggingFaceH4/rlaif-v_formatted 数据集和一组损失权重,根据偏好对齐多模态模型。 | |
online_dpo_visual_math | 使用 experimental.online_dpo.OnlineDPOTrainer 对视觉语言模型进行在线 DPO 微调。 | |
rloo_math | 使用 RLOOTrainer 在 AI-MO/NuminaMath-TIR 数据集上结合 vLLM 进行数学推理的 RLOO。 | |
rloo_visual_math | 使用 lmms-lab/multimodal-open-r1-8k-verified 数据集对多模态模型进行 RLOO 微调,以增强其推理能力。 | |
sdft_privileged_context | 使用 experimental.sdft.SDFTTrainer 进行自蒸馏微调,将特权(仅教师可见)上下文蒸馏到模型中。 | |
sdpo_math | 使用可验证的数学奖励以及针对 openai/gsm8k 的可选环境反馈,通过 experimental.sdpo.SDPOTrainer 进行 SDPO。 | |
sft_agent_traces | 在智能体轨迹上对 Qwen3.5-2B 进行 SFT:Qwen3.5-397B-A17B 作为 OpenCode 智能体,在 Hugging Face Sandboxes 中处理数据分析 Harbor 任务,并由 OpenEnv 记录。学生模型在已解决的对话上进行训练,且仅对助手部分计算损失。在数据未被任何轨迹触及的任务上,约 500 条轨迹将其性能从 7.6% 提升至 33.3%(包含 rollout、数据集和训练脚本,以及带有结果的 README)。 | |
sft_beam | 在单个 8xB300 节点上,使用 SFTTrainer 对 reflection/Beam-1.0-501B-A23B 进行 LoRA SFT,并在加载时通过 transformers 的 DistributedConfig 进行分片(采用带 token 调度的专家并行)。 | |
sft_diffusion_gemma | 通过扩展 SFTTrainer 以支持块扩散目标,对 DiffusionGemma 块扩散语言模型在 GSM8K 上进行 SFT。 | |
sft_gemma3 | 在 Codeforces COTS 数据集上对 Gemma 3 进行 SFT。 | |
sft_gemma3_vision | 在视觉到文本任务上对 Gemma 3 进行 SFT。 | |
sft_gpt_oss_chess | 使用 SFTTrainer 对 openai/gpt-oss-20b 进行国际象棋谜题的全量微调:TRL 会加载其反量化后的 MXFP4 专家,微调后的专家再重新量化为 MXFP4,以便像原始模型一样提供服务。 | |
sft_ministral3_vl | 在免费的 Colab 上使用 QLoRA 对 SFT Ministral 3 进行微调。 | |
sft_mistral_large_4 | 在单个 8xB300 节点上,基于 mistralai/Mistral-Large-4-1T-A52B 的 FP8 权重,使用 SFTTrainer 进行 LoRA SFT,并在加载时通过 transformers 的 DistributedConfig 进行分片(采用带 token 调度的专家并行)。 | |
sft_nemotron_3 | NVIDIA Nemotron 3 模型的 SFT(脚本和 LoRA 笔记本)。 | |
sft_qlora | 在免费的 Colab 上使用 QLoRA 进行 SFT。 | |
sft_qwen3_8b_1m_context | 在单个 8xH100 节点上,使用上下文并行对 Qwen3-8B 进行 1,048,576 个 token 序列的 SFT。 | |
sft_qwen3_vl | 在免费的 Colab 上使用 QLoRA 对 Qwen3-VL 进行 SFT。 | |
tail_sft_gsm8k | 通过为 SFTTrainer 添加初始策略损失过滤,在 GSM8K 上实现 TailSFT。 | |
sft_muse_spark_open | 在 8 个节点上使用 SFTTrainer 对 meta-models/Muse-Spark-Open-816B-A42B 进行 LoRA SFT,加载时通过 transformers 的 DistributedConfig 进行分片(采用带 token 调度的专家并行)。 | |
sft_tool_calling | 使用 SFT 和 QLoRA 为不支持原生工具调用的模型教授工具调用(脚本、聊天模板和笔记本)。 | |
sft_visual_chat | 在聊天场景下对视觉语言模型进行 SFT。仅在 LLaVA 1.5、LLaVA 1.6 和 Llama-3.2-11B-Vision-Instruct 上进行了测试;在其他模型架构中,用户可能会遇到意外行为。 | |
xtoken | 使用 experimental.gold.GOLDTrainer 进行 X-Token off-policy 跨分词器知识蒸馏,包括投影矩阵的准备工作。 |
分布式训练
您可以使用 torchrun 在多个 GPU 上运行示例脚本:
torchrun --nproc_per_node {NUM_GPUS} path_to_script.py --all_arguments_of_the_script对于 DeepSpeed ZeRO-{1,2,3}:
torchrun --nproc_per_node {NUM_GPUS} path_to_script.py --deepspeed examples/deepspeed_configs/zero{1,2,3}.json --all_arguments_of_the_script根据需要调整 NUM_GPUS 和 --all_arguments_of_the_script。