Skip to content

参考

基于 Hugging Face PEFT 官方文档(huggingface.co/docs/peft,API Reference)与 TRL 官方文档(huggingface.co/docs/trl)整理

速查

  • PEFT 核心 APILoraConfig / get_peft_model / PeftModel / AutoPeftModel* / prepare_model_for_kbit_training
  • PEFT 方法:LoRA / QLoRA / AdaLoRA / Prefix Tuning / Prompt Tuning / P-Tuning / IA³ / VeRA / BOFT
  • TRL 训练器SFTTrainer / DPOTrainer / PPOTrainer / RewardTrainer / GRPOTrainer(另含 RLOO/Nash-MD/XPO/Online DPO 等实验性方法)
  • TRL ConfigSFTConfig / DPOConfig / GRPOConfig / PPOConfig / RewardConfig
  • 后训练阶段:SFT → Reward Modeling → RLHF(PPO) / DPO / GRPO
  • 量化配置BitsAndBytesConfig(load_in_4bit, bnb_4bit_quant_type, bnb_4bit_compute_dtype)
  • 安装pip install peft trl(配合 transformers/accelerate/bitsandbytes)
  • 当前版本:PEFT v0.x 主线 / TRL v0.x 主线(持续演进,API 变动较频繁)
  • 与 Trainer 关系:所有 TRL 训练器是 transformers.Trainer 的子类,继承其全部方法
  • import 名from peft import LoraConfig, get_peft_model, PeftModel / from trl import SFTTrainer, DPOTrainer, GRPOTrainer

PEFT 方法速查

Config 类与 Trainer

方法Config 类适用
LoRALoraConfig通用首选
AdaLoRAAdaLoraConfig自适应秩
Prefix TuningPrefixTuningConfig生成任务
Prompt TuningPromptTuningConfig超大模型
P-Tuning v2PromptEncoderConfig与 Prefix 类似
IA³IA3Config极省参数
VeRAVeraConfig共享随机矩阵
BOFTBOFTConfig正交 Butterfly

LoraConfig 全字段

字段类型默认说明
rint8LoRA 秩
lora_alphaint8缩放系数,有效 = alpha/r
lora_dropoutfloat0.0adapter dropout
target_modulesstr/list/NoneNone注入层;可 "all-linear"
biasstr"none"none/all/lora_only
task_typestrNoneCAUSAL_LM/SEQ_CLS/SEQ_2_SEQ_LM/TOKEN_CLS/QUESTION_ANS
modules_to_savelistNone除 adapter 外还要全训的模块(如分类头)
fan_in_fan_outboolFalse旧 GPT 风格
layers_to_transformlistNone只训指定层
layers_patternstrNone配合 layers_to_transform

QLoRA 的 BitsAndBytesConfig

字段默认说明
load_in_4bitFalse4-bit 加载
load_in_8bitFalse8-bit 加载(二选一)
bnb_4bit_quant_type"fp4""fp4" 或 "nf4"(QLoRA 用 nf4)
bnb_4bit_compute_dtypefloat32反量化计算 dtype(建议 bfloat16)
bnb_4bit_use_double_quantFalse二次量化省显存
llm_int8_enable_fp32_cpu_offloadFalse8-bit CPU 卸载

PEFT 核心 API

API作用
get_peft_model(model, peft_config)包装基模,注入 adapter 并冻结基模
PeftModel.from_pretrained(base, adapter_path)加载已保存的 adapter
AutoPeftModelForCausalLM.from_pretrained(path)自动推断任务类加载
prepare_model_for_kbit_training(model)量化模型训练前准备
model.merge_and_unload()把 adapter 合并进基模
model.print_trainable_parameters()打印可训练参数统计
model.add_adapter/load_adapter/set_adapter多 adapter 管理
PeftConfig.from_pretrained(path)仅读 adapter 配置

TRL 训练器速查

训练器Config方法类别数据格式关键参数
SFTTrainerSFTConfig监督微调(SFT)text / prompt-completion / conversationalpacking/assistant_only_loss/completion_only_loss
DPOTrainerDPOConfig直接偏好优化(离线)preference(prompt+chosen+rejected)beta/loss_type/ref_model
PPOTrainerPPOConfigRLHF(在线强化)prompt + reward model(经典 RLHF,四模型)
RewardTrainerRewardConfig奖励建模preference 对训练打分模型
GRPOTrainerGRPOConfig组相对策略(在线)prompt + 奖励函数reward_funcs/num_generations
RLOOTrainerRLOOConfigREINFORCE Leave-One-Outprompt + reward在线 RL 变体
OnlineDPOTrainerOnlineDPOConfig在线 DPOprompt + 奖励边生成边学
NashMDTrainer / XPOTrainerNash 均衡 / 极端策略prompt实验性

SFT loss_type

说明
"chunked_nll"(默认)与 nll 同数学,但按 chunk 算 cross-entropy 省显存
"nll"标准 negative log-likelihood
"dft"Dynamic Fine-Tuning(提升泛化)

DPO loss_type(部分)

来源
"sigmoid"(默认)原 DPO 论文(Bradley-Terry + logsigmoid)
"hinge"RSO/SLiC
"ipo"IPO(防过拟合)
"sigmoid_norm"SimPO(按长度归一化)
"robust"Robust DPO(抗标签噪声,配 label_smoothing)
"apo_zero" / "apo_down"APO(锚定目标)
"discopop"DiscoPOP
"sft"退化为 SFT 损失

数据格式对照

任务必需字段示例
SFT(language modeling)textmessages{"text": "..."} / {"messages":[{role,content}]}
SFT(prompt-completion)prompt, completion{"prompt":"Q","completion":"A"}
DPOprompt, chosen, rejected{"prompt":"Q","chosen":"好答","rejected":"坏答"}
GRPOprompt(+ 额外列传给奖励){"prompt":"Q","ground_truth":"4"}
Rewardchosen, rejectedpreference 对
KTOprompt, completion, label单样本带好坏标签

版本与兼容

近期要点

版本线状态关键点
PEFTv0.x(2026 主线)活跃LoRA/QLoRA/AdaLoRA/VeRA;与 transformers bitsandbytes 联动
TRLv0.x(2026 主线)活跃SFT/DPO/GRPO;config 字段与默认值随版本调整(loss_type、packing 策略)

兼容性

  • Python:≥ 3.9(推荐 3.10–3.12)
  • 依赖transformers / accelerate / datasets / peft(TRL)/ bitsandbytes(QLoRA)
  • 硬件:QLoRA + bf16 让 7B 单卡可训;更大模型需多卡或 FSDP + PEFT
  • import 名from peft import LoraConfig, get_peft_model, PeftModelfrom trl import SFTTrainer, DPOTrainer, GRPOTrainer

与同类库对比

维度PEFT + TRLAxolotlUnslothUnify(自研)
定位参数高效微调 + 对齐训练器训练封装(YAML 配置)加速微调(内核优化)自研训练框架
抽象层级库级 API配置驱动内核级优化
与前者关系基础库封装 PEFT+TRL+Transformers内核 + 兼容 PEFT/TRL 接口
优势方法全、与生态紧耦合一条命令跑通显存/速度更优(2x 速度、70% 省显存)
场景灵活开发快速实验资源受限

TRL 文档明确列出了 Unsloth / Liger Kernel 等集成:可 use_liger_kernel=True(提 20% 吞吐、省 60% 显存),或经 Unsloth 提速。

官方资源