← All Tools
PEFT VS TRL

PEFT vs TRL:大模型微调参数高效与训练算法对比

PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)和 TRL(Transformer Reinforcement Learning)都是 HuggingFace 用来微调大模型的库,但关注点不同。PEFT 实现的是 LoRA、QLoRA、Adapters 这些省显存省算力的微调方法。TRL 实现的是从人类反馈强化学习(RLHF)、DPO 和 SFT 这些训练方法。两者是互补关系,经常一起用。

Curated by 评测编辑:玄尘子 🗓 Updated: ⭐ PEFT: 22k+ stars ⭐ TRL: 19k+ stars

⚡ TL;DR — 30-Second Verdict

怎么选:你要加 LoRA 适配器、或者用其他参数高效方法把微调时的显存需求降下来,用 PEFT。你要做有监督微调(SFT)、DPO 对齐或者 RLHF 训练循环,用 TRL。现代的微调流水线基本两个都用——PEFT 管效率,TRL 管训练算法。它们不是二选一,是配合关系。

快速对比:PEFT 与 TRL 核心差异

对比项 PEFT TRL
核心定位 参数高效的适配器方法 SFT、DPO、RLHF 训练
LoRA 与 QLoRA 核心功能 通过集成 PEFT 实现
DPO 训练 不支持 内置 DPOTrainer
SFT 训练 不支持,它不是训练器 内置 SFTTrainer
RLHF 与 PPO 不支持 内置 PPOTrainer
是否需要配合用 是,PEFT 加 TRL 是标准组合 是,PEFT 加 TRL 是标准组合
HuggingFace 集成 原生 原生
PEFT ★ 22k+ GitHub Stars View on GitHub ↗ TRL ★ 19k+ GitHub Stars View on GitHub ↗

PEFT 是什么

用 PEFT 的 LoRA,单张显卡微调 Llama-3-8B 就变得可行,可训练参数从 70 亿降到 400 万,对没有企业级基础设施的研究者来说这是刚需。和只用 HuggingFace transformers 相比,PEFT(21k+ star)提供了优化过的 LoRA 实现,显存能降 90%。但如果你需要模型的全量适配就别选它——LoRA 是用表达力换效率。

— 中国吧 AI Tools Hub Editorial Team on PEFT

→ Read the full PEFT review

TRL 是什么

如果你要大规模用人类反馈微调 Llama 2,TRL 原生的 PPO 和 DPO 实现在搭建时间上比手写快 10 倍。和 OpenAI 的强化学习框架相比,TRL 有开源透明的优势和 DPO 支持,19k+ GitHub star。但如果你需要实时推理优化就别选它——它是面向训练的,不是面向部署的。

— 中国吧 AI Tools Hub Editorial Team on TRL

→ Read the full TRL review

什么场景该选哪个

Choose PEFT if…

Choose TRL if…

性能与显存的取舍

PEFT 的强项是压低微调时的显存占用,LoRA 和 QLoRA 相比全量微调能把显存需求降 70% 到 90%。TRL 的训练器(SFTTrainer、PPOTrainer、DPOTrainer)优化的是吞吐和训练速度,本身不降显存。两者组合起来效果惊人:QLoRA 加 TRL 的 DPOTrainer,能在单张显卡上微调 70B 参数的模型。不过如果推理时不合并适配器,PEFT 会引入一点额外的计算延迟。TRL 优先保证梯度稳定和收敛速度,单个训练步更快。硬件受限就选 PEFT,更在意训练速度就选 TRL。

学习曲线与实现复杂度

PEFT 对熟悉 HuggingFace 生态的人学习曲线很平缓,指定 LoRA 配置、包装模型,就完事了,接口是声明式的也很宽容。TRL 需要更深入理解训练循环、奖励模型和对齐目标,SFTTrainer 把有监督微调抽象得还算合理,但 PPOTrainer 和 DPOTrainer 要求你熟悉强化学习理论或对齐技术。PEFT 的文档更密集但偏参考手册,TRL 的指南里有高级用法必需的理论背景。做快速原型 PEFT 胜出;做生产级对齐流水线时 TRL 的学习曲线是有回报的,因为你会理解模型到底在优化什么,而不只是怎么让它塞进显存。

生态集成与生产成熟度

PEFT 和 TRL 都是 HuggingFace 原生的,和 transformers、datasets、accelerate 完整集成。PEFT 轻量稳定,破坏性变更极少,已经在大量生产微调流水线里部署。TRL 开发更活跃,特性更新频繁,DPO 是 2023 年中加的,新的对齐方法也经常出现。PEFT 和量化库(QLoRA 用的 bitsandbytes)无缝集成,开箱就能做高级工作流。TRL 底层依赖 PEFT,在它之上加编排层。要长期稳定,PEFT 显得更久经生产考验;要追最新的对齐技术,TRL 演进更快。多数企业部署两个一起用:PEFT 管模型适配,TRL 管训练编排和对齐目标。

常见问题

PEFT 和 TRL 必须两个都用吗,能只用一个吗? ▼
现代微调基本两个都要。单独用 PEFT 只能拿到省显存的适配器,没有训练循环;单独用 TRL 除非你手动集成 PEFT,否则会做全参数更新。标准流程是:用 PEFT 包装模型(比如 LoRA),再把包装好的模型传给 TRL 的训练器(SFTTrainer 或 DPOTrainer)。它们互补,不重复。
能从 PEFT 切回全量微调而不重写代码吗? ▼
可以,PEFT 就是为这个设计的。去掉 PEFT 包装,或者在配置里设成不用 PEFT,模型就会正常做全参数训练,TRL 的训练器两种模式都支持。反方向(从全量切到 PEFT)同样只是改配置,同样简单。
PEFT 的 LoRA 推理时比全量微调慢吗? ▼
只有适配器不合并的时候才慢。把 LoRA 适配器合并进模型权重后,额外延迟可以忽略(不到 2%)。PEFT 提供 merge_and_unload() 方法,可以把适配器永久融合进权重用于生产部署。TRL 不管这件事,适配器的生命周期管理是 PEFT 的职责。
应该先学 PEFT 还是先学 TRL? ▼
显存紧张或者刚开始接触 HuggingFace 微调,先学 PEFT。需要做对齐(DPO、RLHF)或者算力充裕,先学 TRL。多数实践者先学 PEFT(接口更简单),再为对齐工作流补 TRL。两者都假设你已经了解 transformers 库的基础。