PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)是使用 Hugging Face PEFT 库对大语言模型做微调的方法集合,核心思路是冻结基座模型的大部分权重,只训练少量新增参数,从而显著降低显存占用和存储成本。资料称其支持 LoRA、QLoRA 及 25 种以上适配器方法。
适用场景
资料列出的适用情形包括:在消费级 GPU(RTX 4090、A100)上微调 7B-70B 模型;需要训练不到 1% 的参数(适配器约 6MB,而全量模型约 14GB);希望用多个任务专用适配器快速迭代;从同一个基座模型部署多个微调变体。若需在单张 24GB GPU 上微调 70B 模型或显存是主要约束,可选用 QLoRA(PEFT 加量化),但资料说明相对全量微调可能存在约 5% 的质量折衷。训练小于 1B 参数的小模型、需要最高质量且有算力预算、或领域偏移显著需更新全部权重时,资料建议改用全量微调。
安装方式
资料给出三条安装命令:基础安装 pip install peft;带量化支持(推荐)pip install peft bitsandbytes;完整栈 pip install peft transformers accelerate bitsandbytes datasets。
主要能力与使用方式
LoRA 标准微调:加载基座模型与分词器后,通过 LoraConfig 设置 task_type、r(秩)、lora_alpha、lora_dropout、target_modules 和 bias,再用 get_peft_model 应用并打印可训练参数比例。资料示例显示 Llama-3.1-8B 在 r=16 时约 1363 万可训练参数,占比 0.17%。训练使用 transformers 的 TrainingArguments 与 Trainer,示例以 databricks/databricks-dolly-15k 数据集构造指令格式文本,训练后仅保存适配器。
QLoRA 内存高效微调:用 BitsAndBytesConfig 配置 4 位量化(load_in_4bit、bnb_4bit_quant_type="nf4"、bnb_4bit_compute_dtype="bfloat16"、bnb_4bit_use_double_quant),经 prepare_model_for_kbit_training 处理后应用 LoRA 配置。资料示例以 Llama-3.1-70B、r=64、alpha=128、覆盖注意力与 MLP 层,称可使 70B 模型装入单张 24GB GPU。
超参数选择:资料给出秩 r 从 4 到 64 的可训练参数量、显存与质量对照表(如 r=8 约 7M、推荐作为起点;r=16 约 14M、适合通用微调;r=64 适合领域适配与 70B 模型),并建议 lora_alpha 取 2 倍秩作为常用起点。目标模块按架构区分: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;PEFT 0.6.0 及以上可用 "all-linear" 自动匹配全部线性层。
适配器加载、合并与服务:可用 PeftModel.from_pretrained 或 AutoPeftModelForCausalLM 加载训练好的适配器;用 merge_and_unload 将适配器合并进基座模型以便无适配器开销地部署,并可保存或推送至 Hub;也可加载多个适配器,通过 set_adapter 在运行时切换,或用 disable_adapter 回到基座模型输出。
其他方法与集成:资料还给出 IA3(仅训练约 0.01% 参数)、Prefix Tuning 的配置示例,并以表格对比 LoRA、QLoRA、AdaLoRA、IA3、Prefix Tuning、Prompt Tuning、P-Tuning v2 的可训练比例、显存、速度与适用方向。集成方面提供 TRL 的 SFTTrainer(直接传入 peft_config)、Axolotl 的 YAML 配置(adapter: lora、lora_r、lora_alpha、lora_target_modules 等)以及 vLLM 推理时通过 LoRARequest 加载适配器的示例。
性能与问题处理
资料给出 Llama 3.1 8B 的显存对比:全量微调需 60GB 以上、LoRA r=16 为 18GB、QLoRA r=16 为 6GB、IA3 为 16GB;A100 80GB 上的训练速度对比称 LoRA 约为全量微调的 1.3 倍、QLoRA 约为 0.84 倍;MMLU 质量对比显示 LoRA 与 QLoRA 略低于全量微调。常见问题处理包括:训练显存不足时启用梯度检查点、减小批大小并提高梯度累积,或改用 QLoRA;适配器未生效时检查 active_adapters、可训练参数与训练模式;质量下降时可提高秩、扩大目标模块、增加数据与轮次或降低学习率。
最佳实践与限制
资料建议从 r=8-16 起步、按需提高,alpha 取 2 倍秩为起点,同时覆盖注意力与 MLP 层,开启梯度检查点节省显存,频繁保存小体积适配器,合并前在留出数据上评估,并在消费级硬件上用 QLoRA 处理 70B 以上模型。需注意资料中关于质量折衷、显存与速度的数字均为其给出的参考值,实际效果取决于模型、数据与配置;具体收费与商业使用条款暂未提供。
相关资源:GitHub 为 https://github.com/huggingface/peft,文档为 https://huggingface.co/docs/peft,LoRA 论文为 arXiv:2106.09685,QLoRA 论文为 arXiv:2305.14314。