SuperAPI AI 工具集

fine-tuning-with-trl

智能体与模型

查看项目

更新于 10-15 13:02

技能介绍

TRL(Transformer Reinforcement Learning)是一个为大语言模型提供后训练(post-training)与人类偏好对齐方法的库。

【用途】 TRL 面向需要将模型与人类偏好对齐的场景,提供监督微调、偏好优化和基于强化学习的优化方法。资料中列出的典型能力包括:SFT 用于指令微调、DPO 用于偏好对齐、PPO/GRPO 用于奖励优化,以及奖励模型训练。

【安装】 安装命令为:pip install trl transformers datasets peft accelerate

【主要能力与快速开始】 TRL 提供多种训练器。监督微调(指令微调)使用 SFTTrainer,示例中传入模型名与 prompt-completion 数据集后调用 trainer.train()。 DPO 用于偏好对齐,使用 DPOTrainer 与 DPOConfig,示例配置 output_dir 并设置 beta=0.1,训练数据为 chosen/rejected 成对数据,处理类为 tokenizer,随后调用 trainer.train()。

【常见工作流一:完整 RLHF 流水线(SFT → Reward Model → PPO)】 资料给出的检查清单为四步:1. 监督微调(SFT);2. 训练奖励模型;3. PPO 强化学习;4. 评估对齐后的模型。 第 1 步使用 AutoModelForCausalLM、AutoTokenizer、SFTTrainer 与 SFTConfig,加载 Qwen/Qwen2.5-0.5B,加载指令数据集 trl-lib/Capybara,配置 output_dir、per_device_train_batch_size=4、num_train_epochs=1、learning_rate=2e-5、logging_steps=10、save_strategy="epoch",训练后保存模型。 第 2 步使用 AutoModelForSequenceClassification、RewardTrainer 与 RewardConfig,把 SFT 模型作为基座(num_labels=1 表示单一奖励分数),加载偏好数据集 trl-lib/ultrafeedback_binarized,配置 batch size 为 2、epoch 为 1、learning_rate=1e-5,训练后保存。 第 3 步用 PPO 命令行脚本 python -m trl.scripts.ppo,传入 model_name_or_path、reward_model_path、dataset_name、output_dir、learning_rate 3e-6、per_device_train_batch_size 64、total_episodes 10000。 第 4 步用 transformers 的 pipeline 加载对齐后的模型并测试提示词。

【常见工作流二:用 DPO 做简单偏好对齐】 检查清单为:准备偏好数据集、配置 DPO、用 DPOTrainer 训练、评估对齐效果。 偏好数据集格式为包含 prompt、chosen、rejected 的样本;可加载 trl-lib/ultrafeedback_binarized,或通过 load_dataset("json", data_files="preferences.json") 加载自有数据。 DPOConfig 示例参数包括 output_dir、per_device_train_batch_size=4、num_train_epochs=1、learning_rate=5e-7、beta=0.1(KL 惩罚强度)、max_prompt_length=512、max_length=1024、logging_steps=10。 训练时加载模型与 tokenizer,构造 DPOTrainer 并训练、保存。 也可用 CLI:trl dpo --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct --dataset_name argilla/Capybara-Preferences --output_dir Qwen2.5-0.5B-DPO --per_device_train_batch_size 4 --learning_rate 5e-7 --beta 0.1

【常见工作流三:用 GRPO 做内存高效的在线强化学习】 检查清单为:定义奖励函数、配置 GRPO、用 GRPOTrainer 训练。 奖励函数接收 completions 列表,返回奖励分数列表;示例按长度与唯一词数打分,也可用 transformers 的 pipeline 构建奖励模型,将 prompt 与 completion 拼接后取分数。 GRPOConfig 示例参数包括 output_dir、per_device_train_batch_size=4、num_train_epochs=1、learning_rate=1e-5、num_generations=4(每个 prompt 生成 4 个 completion)、max_new_tokens=128。 训练时加载 prompt-only 数据集 trl-lib/tldr,构造 GRPOTrainer 传入 reward_funcs 并训练。 CLI:trl grpo --model_name_or_path Qwen/Qwen2-0.5B-Instruct --dataset_name trl-lib/tldr --output_dir Qwen2-GRPO --num_generations 4

【方法选择建议】 资料给出:SFT 适合有 prompt-completion 成对数据、想要基本指令遵循;DPO 适合有偏好数据、想要简单对齐且不需要奖励模型;PPO 适合已有奖励模型、需要最大程度控制强化学习过程;GRPO 适合内存受限且想做在线强化学习;Reward Model 适合构建 RLHF 流水线并需要为生成结果打分。 若只是基础微调而不使用强化学习,可考虑 HuggingFace Trainer;其他替代包括 Axolotl(基于 YAML 的配置)、LitGPT(教育性、最小化微调)、Unsloth(快速 LoRA 训练)。

【常见问题处理】 DPO 训练 OOM:减小 batch size 与序列长度(如 per_device_train_batch_size=1、max_length=512),配合 gradient_accumulation_steps=8 保持有效 batch,或启用 model.gradient_checkpointing_enable()。 对齐质量不佳:调整 beta(更高更保守,如 0.5;更低更激进,如 0.01)。 奖励模型不学习:调整学习率与训练轮数(如 learning_rate=1e-5、num_train_epochs=3),并确认偏好数据 chosen 明显优于 rejected。 PPO 训练不稳定:调整 KL 系数(如 kl_coef=0.1)与 cliprange(如 0.1)。

【进阶主题】 资料提到 SFT 训练指南、DPO 变体(IPO、cDPO、RPO 等)、奖励建模(结果奖励与过程奖励、Bradley-Terry 损失、奖励模型评估)、在线 RL 方法(PPO、GRPO、RLOO、OnlineDPO)等参考文档,路径为 references/sft-training.md、references/dpo-variants.md、references/reward-modeling.md、references/online-rl.md。

【硬件要求】 GPU 为 NVIDIA(需要 CUDA)。显存需求随模型与方法而定:SFT 7B 约 16GB(含 LoRA),DPO 7B 约 24GB(需保存参考模型),PPO 7B 约 40GB(策略与奖励模型),GRPO 7B 约 24GB(更省内存)。多 GPU 通过 accelerate 支持;混合精度推荐 BF16(A100/H100)。内存优化方式包括使用 LoRA/QLoRA、开启梯度检查点、使用更小 batch 配合梯度累积。

【资源】 文档:https://huggingface.co/docs/trl/ GitHub:https://github.com/huggingface/trl 相关论文:InstructGPT(2022)、DPO(2023)、GRPO(2024)。 示例:https://github.com/huggingface/trl/tree/main/examples/scripts