用途
PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)用于对大语言模型进行微调,核心思路是冻结绝大部分原始权重,只训练少量新增参数。资料给出的适用场景包括:在消费级 GPU(RTX 4090、A100)上微调 7B-70B 模型;需要训练不到 1% 的参数(适配器约 6MB,而完整模型约 14GB);希望用多个任务专用适配器快速迭代;以及从同一个基础模型部署多个微调变体。
资料同时说明了何时应改用全量微调:训练小于 1B 参数的小模型;需要最高质量且具备算力预算;领域差异显著、需要更新全部权重。
主要能力
- 支持 LoRA、QLoRA 以及 25 种以上适配器方法,资料中列出的方法包括 LoRA、QLoRA、AdaLoRA、IA3、Prefix Tuning、Prompt Tuning、P-Tuning v2。
- 支持 4-bit 量化加载(QLoRA),资料称可使 70B 模型在单张 24GB GPU 上运行。
- 支持仅保存适配器、加载适配器、将适配器合并进基础模型,以及多适配器运行时切换。
- 可与 TRL(SFTTrainer)、Axolotl(YAML 配置)、vLLM(推理)集成。
使用方式
安装命令(资料原文):
# Basic installation
pip install peft
# With quantization support (recommended)
pip install peft bitsandbytes
# Full stack
pip install peft transformers accelerate bitsandbytes datasets
LoRA 微调的基本流程:加载基础模型与分词器,配置 LoraConfig(task_type、r、lora_alpha、lora_dropout、target_modules、bias),用 get_peft_model 应用 LoRA,准备并分词数据集,配置 TrainingArguments 后交给 Trainer 训练,最后用 save_pretrained 仅保存适配器。资料示例中 Llama-3.1-8B 在 r=16 时训练参数为 13,631,488,占全部 8,043,307,008 参数的 0.17%。
QLoRA 流程:用 BitsAndBytesConfig 配置 4-bit 量化(load_in_4bit、bnb_4bit_quant_type="nf4"、bnb_4bit_compute_dtype="bfloat16"、bnb_4bit_use_double_quant),加载量化模型,调用 prepare_model_for_kbit_training,再应用 LoraConfig(资料示例对 70B 使用 r=64、lora_alpha=128)。
关键参数选择:rank(r)方面,资料给出 4/8/16/32/64 对应约 3M/7M/14M/27M/54M 可训练参数及不同质量与用途,建议从 8 起步;alpha 的经验法则是 alpha = 2 * rank。target_modules 按架构不同:Llama/Mistral/Qwen 用 q_proj、v_proj、k_proj、o_proj、gate_proj、up_proj、down_proj;GPT-2/GPT-Neo 用 c_attn、c_proj、c_fc;Falcon 与 BLOOM 用 query_key_value、dense、dense_h_to_4h、dense_4h_to_h;也可用 "all-linear" 自动检测所有线性层(PEFT 0.6.0+)。
适配器加载与合并:可用 PeftModel.from_pretrained 或 AutoPeftModelForCausalLM.from_pretrained 加载;用 merge_and_unload 合并进基础模型后保存或推送到 Hub。多适配器服务时可用 load_adapter 加载多个适配器,用 set_adapter 运行时切换,用 disable_adapter 临时禁用适配器。
适用场景与限制
资料给出的性能参考(Llama 3.1 8B 显存):全量微调 60+ GB、LoRA r=16 为 18 GB、QLoRA r=16 为 6 GB、IA3 为 16 GB。训练速度(A100 80GB):全量微调 2,500 tokens/sec,LoRA 3,200(1.3x),QLoRA 2,100(0.84x)。质量(MMLU):Llama 2-7B 全量 45.3、LoRA 44.8、QLoRA 44.1;Llama 2-13B 全量 54.8、LoRA 54.2、QLoRA 53.5。
常见问题与处理:训练时 CUDA OOM 可启用 gradient checkpointing、减小 batch size 并增大梯度累积、或改用 QLoRA;适配器未生效可检查 active_adapters、print_trainable_parameters 与 model.train();质量下降可提高 rank、扩大 target_modules、增加数据与轮次或降低学习率。
最佳实践(资料原文要点):从 r=8-16 开始,质量不足再提高;以 alpha = 2 * rank 为起点;同时针对注意力层与 MLP 层;启用 gradient checkpointing 节省显存;频繁保存适配器;合并前在留出数据上评估;70B+ 模型在消费级硬件上使用 QLoRA。
资源
GitHub:https://github.com/huggingface/peft Docs:https://huggingface.co/docs/peft LoRA 论文:arXiv:2106.09685 QLoRA 论文:arXiv:2305.14314 模型:https://huggingface.co/models?library=peft
关于收费、价格、平台支持范围等,资料暂未提供。