TRL documentation

示例

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

示例

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。Open In Colab
grpo_multi_env多环境 GRPO 训练:在同一次训练运行中同时使用 Wordle 和 Catch OpenEnv 环境。
grpo_qlora在免费的 Colab 上使用 QLoRA 进行 GRPO。Open In Colab
grpo_qwen3_vl在免费 Colab 上使用 QLoRA 对 Qwen3-VL 进行 GRPO 训练。Open In Colab
grpo_rnj_1_instruct在 Colab 上使用 QLoRA 对 rnj-1-instruct 进行 GRPO 训练,以添加推理能力。Open In Colab
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)。Open In Colab
grpo_visual_math使用 lmms-lab/multimodal-open-r1-8k-verified 数据集对多模态模型进行 GRPO 微调,以实现推理能力。
grpo_wordle使用 GRPO 在 OpenEnv 环境中玩 Wordle(TextArena)(脚本和笔记本)。Open In Colab
gspo_math通过 GRPOTrainer 在 AI-MO/NuminaMath-TIR 数据集上进行数学推理的 GSPO。
gspo_visual_math通过 GRPOTrainer 使用 GSPO 方法,并利用 lmms-lab/multimodal-open-r1-8k-verified 数据集对多模态模型进行推理微调。
lfm2_5_moe_research_agentLiquidAI/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 进行微调。Open In Colab
sft_mistral_large_4在单个 8xB300 节点上,基于 mistralai/Mistral-Large-4-1T-A52B 的 FP8 权重,使用 SFTTrainer 进行 LoRA SFT,并在加载时通过 transformers 的 DistributedConfig 进行分片(采用带 token 调度的专家并行)。
sft_nemotron_3NVIDIA Nemotron 3 模型的 SFT(脚本和 LoRA 笔记本)。Open In Colab
sft_qlora在免费的 Colab 上使用 QLoRA 进行 SFT。Open In Colab
sft_qwen3_8b_1m_context在单个 8xH100 节点上,使用上下文并行对 Qwen3-8B 进行 1,048,576 个 token 序列的 SFT。
sft_qwen3_vl在免费的 Colab 上使用 QLoRA 对 Qwen3-VL 进行 SFT。Open In Colab
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 为不支持原生工具调用的模型教授工具调用(脚本、聊天模板和笔记本)。Open In Colab
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。

Update on GitHub