TRL documentation

示例

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
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 上使用 experimental.async_grpo.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