huggingface/trl
GitHub: huggingface/trl
一个基于 Hugging Face 生态的 Transformer 模型后训练库,提供 SFT、DPO、KTO、GRPO 等多种微调与强化学习算法。
Stars: 18908 | Forks: 2856
# TRL - Transformers 强化学习
一个用于后训练基础模型的全能库
## 🎉 最新动态 **🌍 多环境智能体 RL:** [`GRPOTrainer`](https://huggingface.co/docs/trl/grpo_trainer) 现已支持逐示例(per-example)环境选择和环境自有的奖励机制——通过 [Harbor](https://huggingface.co/docs/trl/harbor) 和 [OpenEnv](https://huggingface.co/docs/trl/openenv),您可以在单次运行中混合多个沙盒化任务套件,并让每个环境定义其自己的评分标准。 **🎯 KTO 现已稳定:** [`KTOTrainer`](https://huggingface.co/docs/trl/kto_trainer) 在与 [`DPOTrainer`](https://huggingface.co/docs/trl/dpo_trainer) 进行全面对齐后,已升级为稳定的 API。 ## 概述 TRL 是一个前沿的库,旨在使用监督微调(SFT)、组相对策略优化(GRPO)和直接偏好优化(DPO)等先进技术来后训练基础模型。TRL 建立在 [🤗 Transformers](https://github.com/huggingface/transformers) 生态系统之上,支持多种模型架构和模态,并且可以在各种硬件配置上进行扩展。 ## 核心亮点 - **训练器**:通过 [`SFTTrainer`](https://huggingface.co/docs/trl/sft_trainer)、[`GRPOTrainer`](https://huggingface.co/docs/trl/grpo_trainer)、[`DPOTrainer`](https://huggingface.co/docs/trl/dpo_trainer)、[`KTOTrainer`](https://huggingface.co/docs/trl/kto_trainer) 等训练器,可以轻松使用各种微调方法。 - **高效且可扩展**: - 借助 [🤗 Accelerate](https://github.com/huggingface/accelerate),使用 [DDP](https://pytorch.org/tutorials/intermediate/ddp_tutorial.html) 和 [DeepSpeed](https://github.com/deepspeedai/DeepSpeed) 等方法,实现从单 GPU 到多节点集群的扩展。 - 与 [🤗 PEFT](https://github.com/huggingface/peft) 深度集成,通过量化(quantization)和 LoRA/QLoRA,实现在普通硬件上训练大型模型。 - 集成 [🦥 Unsloth](https://github.com/unslothai/unsloth),利用优化后的 kernel 加速训练。 - **命令行界面 (CLI)**:提供简单的界面,无需编写代码即可微调模型。 ## 安装说明 ### Python 包 使用 `pip` 安装本库: ``` pip install trl ``` ### 从源码安装 如果您想在正式发布前使用最新功能,可以从源码安装 TRL: ``` pip install git+https://github.com/huggingface/trl.git ``` ### 代码仓库 如果您想使用示例,可以使用以下命令克隆代码仓库: ``` git clone https://github.com/huggingface/trl.git ``` ## 快速开始 为了在训练时获得更多的灵活性和控制权,TRL 提供了专门的 trainer 类,用于在自定义数据集上对语言模型或 PEFT adapter 进行后训练。TRL 中的每个 trainer 都是对 🤗 Transformers trainer 的轻量级封装,并且原生支持如 DDP、DeepSpeed ZeRO 和 FSDP 等分布式训练方法。 ### `SFTTrainer` 以下是使用 [`SFTTrainer`](https://huggingface.co/docs/trl/sft_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() ``` ### `GRPOTrainer` [`GRPOTrainer`](https://huggingface.co/docs/trl/grpo_trainer) 实现了 [组相对策略优化 (GRPO) 算法](https://huggingface.co/papers/2402.03300),该算法比 PPO 具有更高的内存效率,曾用于训练 [Deepseek AI 的 R1](https://huggingface.co/deepseek-ai/DeepSeek-R1)。 ``` 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() ``` ### `DPOTrainer` [`DPOTrainer`](https://huggingface.co/docs/trl/dpo_trainer) 实现了广受欢迎的 [直接偏好优化 (DPO) 算法](https://huggingface.co/papers/2305.18290),该算法曾用于对 [Llama 3](https://huggingface.co/papers/2407.21783) 及许多其他模型进行后训练。以下是使用 `DPOTrainer` 的一个基本示例: ``` 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() ``` ### `KTOTrainer` [`KTOTrainer`](https://huggingface.co/docs/trl/kto_trainer) 实现了 [Kahneman-Tversky 优化 (KTO) 算法](https://huggingface.co/papers/2402.01306),该算法基于简单的二元(理想 / 不理想)反馈而非成对偏好来对齐模型。以下是使用 `KTOTrainer` 的一个基本示例: ``` 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() ``` ### `RewardTrainer` 以下是使用 [`RewardTrainer`](https://huggingface.co/docs/trl/reward_trainer) 的一个基本示例: ``` 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() ``` ## 命令行界面 (CLI) 您可以使用 TRL 的命令行界面 (CLI) 快速开始使用监督微调(SFT)或直接偏好优化(DPO)等后训练方法: **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 ``` 在[相关文档章节](https://huggingface.co/docs/trl/clis)中阅读有关 CLI 的更多信息,或使用 `--help` 获取更多细节。 ## 开发指南 ``` git clone https://github.com/huggingface/trl.git cd trl/ pip install -e .[dev] ``` ## 实验性功能 在 `trl.experimental` 下提供了一个极简的孵化区域,用于存放不稳定或快速迭代的功能。其中的任何内容都可能会在任何版本中更改或移除,恕不另行通知。 示例: ``` from trl.experimental.new_trainer import NewTrainer ``` 在[实验性功能文档](https://huggingface.co/docs/trl/experimental_overview)中阅读更多内容。 ## 引用 ``` @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} } ``` ## 许可证 本仓库的源代码基于 [Apache-2.0 License](LICENSE) 提供。标签:凭据扫描, 逆向工具