5分钟跑通 TRL 模型微调:SFT、GRPO、DPO 完整选型指南
【免费下载链接】trlTrain transformer language models with reinforcement learning.项目地址: https://gitcode.com/GitHub_Trending/tr/trl
TRL 是 Hugging Face 生态里做强化学习微调的库,SFT、GRPO、DPO 都是封装好的现成训练器。会装 Python 环境就能做 TRL 模型微调,本文面向想微调小模型、不想手写训练循环的新手。
🧭 先对号入座,再谈方法
动手前先判断自己属于哪种场景,场景定了,方法基本就定了。
想微调领域助手,选 SFT
手里有"问题—答案"形式的示范数据,想让模型学会你的领域、口吻和格式,用 SFT(监督微调)。它最稳、开销最小,也是绝大多数微调任务的第一步。
想训出会推理的模型,选 GRPO
任务能打分(比如数学题做对做错),就让它自己生成多份答案、用组内相对得分当学习信号,这就是 GRPO。它比 PPO 更省显存,DeepSeek-R1 就是用这套方法训出来的。
想让回答更合偏好,选 DPO
手里是"两个回答、一个更好"的成对数据,DPO 直接对偏好做优化,不需要单独训一个奖励模型,Llama 3 的后训练用的就是它。
⚡ 五分钟跑通:TRL 安装教程与第一条命令
环境要求 Python 3.10 及以上,先装包:
pip install trl再跑一次 SFT。TRL 自带命令行入口,不用写任何 Python:
trl sft --model_name_or_path Qwen/Qwen2.5-0.5B --dataset_name trl-lib/Capybara --output_dir Qwen2.5-0.5B-SFT三个参数各管一件事:--model_name_or_path定基座模型,--dataset_name自动下载训练数据,--output_dir是结果保存目录。0.5B 的模型跑完一轮,就是验证整条流程是否顺畅的最低成本方式。
📊 一张表讲清 SFT DPO GRPO 怎么选
| 维度 | SFT | GRPO | DPO |
|---|---|---|---|
| 用途 | 从示范数据学任务与风格 | 靠强化学习学推理与决策 | 用成对偏好数据调回答口味 |
| 数据形态 | 单条"问题—答案" | 提示 + 可打分的生成 | "好回答 vs 差回答"对 |
| 显存开销 | 低—中 | 高,需在线生成与奖励打分 | 中 |
| 代表案例 | Capybara SFT | DeepSeek-R1 训练 | Llama 3 后训练 |
| 上手难度 | 最低,一条命令 | 中等,要写奖励函数 | 低,一条命令 |
拿不准就按顺序来:先 SFT 打底,再用 DPO 调偏好,有可验证任务才上 GRPO。
📝 跟着一个例子走:Capybara 上的 SFT
目标:把 Qwen2-0.5B 在 Capybara 指令数据集上微调成通用问答助手。完整命令直接来自仓库脚本的内置文档:
python trl/scripts/sft.py \ --model_name_or_path Qwen/Qwen2-0.5B \ --dataset_name trl-lib/Capybara \ --learning_rate 2.0e-5 \ --num_train_epochs 1 \ --output_dir Qwen2-0.5B-SFT跑完后Qwen2-0.5B-SFT目录里就是微调好的权重,直接加载即可推理。显存吃紧时加上--use_peft --lora_r 32 --lora_alpha 16,只训练一小份适配器,主模型保持冻结。更多完整脚本和 notebook 都在 examples/ 下,按文件夹自包含、可直接运行。
⚠️ 新手最容易踩的 4 个坑
坑 1:显存不够,一启动就 OOM。原因:全参微调要同时装下全部参数、优化器状态和中间激活。解法:8—12GB 的卡就改走 LoRA,脚本支持--use_peft --lora_r 32 --lora_alpha 16;再加--load_in_4bit做 4bit 加载就是 QLoRA。另外 TRL 的各训练器默认开启梯度检查点,用重算换显存,不用你额外配置。
坑 2:学习率没按训练方式调,模型直接变傻。原因:全参微调和 LoRA 的安全量级差一个数量级。解法:全参用 2.0e-5,LoRA 提到 2.0e-4,脚本文档里的默认值就是这个组合。步长太大 loss 会震荡发散,太小则训完等于没训。
坑 3:单卡批大小开不大,loss 曲线抖动明显。原因:小 batch 下每个梯度估计的方差大。解法:用--gradient_accumulation_steps累积若干步再更新权重,脚本默认的 batch 2 + 累积 8 相当于有效 batch 16,显存却只按小 batch 算。
坑 4:多张卡却只用了一张。原因:直接python启动只初始化单进程。解法:改用 Accelerate 启动,仓库的 accelerate_configs 目录里备好了多卡、DeepSpeed ZeRO-1/2/3 等现成配置,按需取一份再启动即可,训练脚本本身不用改。
🔗 想继续深入去哪看
- 稳定版训练器源码:trl/trainer/
- 实验性算法(BCO、CPO、KTO、GKD 等,接口可能变动):trl/experimental/
- 可运行的完整示例:examples/
- 分布式训练配置:examples/accelerate_configs/
- 官方文档入口:docs/source/index.md
先用 Qwen2-0.5B 加 Capybara 把 SFT 完整跑一遍,跑通后再换成 LoRA 上更大的模型,就是最顺的路径。
【免费下载链接】trlTrain transformer language models with reinforcement learning.项目地址: https://gitcode.com/GitHub_Trending/tr/trl
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考