【Hugging Face】PEFT 库:大语言模型参数高效微调

Hugging Face 的 PEFT 库介绍

PEFT(Parameter-Efficient Fine-Tuning)是 Hugging Face 推出的一个专门用于 大语言模型参数高效微调 的库,目标是在 只训练少量参数的同时保持模型性能,显著减少显存消耗和训练成本。


1. PEFT 是什么?

PEFT 的全称是:

Parameter-Efficient Fine-Tuning

它支持以下主流的参数高效微调技术:

技术名称 简介说明
LoRA Low-Rank Adaptation,冻结原始模型,仅训练额外的低秩矩阵
Prefix Tuning 在每层 Transformer 前添加 prefix vectors,仅训练这些向量
Prompt Tuning 学习虚拟 token 的嵌入作为软提示词,适用于生成类任务
P-Tuning v2 类似 Prompt Tuning,但更强大,支持更深层的 prompt 注入
AdaLoRA 动态调整 LoRA 的秩(rank)来进一步压缩参数

2. 安装 PEFT

pip install peft

3. PEFT 的核心流程

PEFT 的使用流程可总结为以下 4 步:

第一步:加载基础模型(如 LLaMA、GPT、BERT)

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")

第二步:配置 LoRA 或其他方法

from peft import LoraConfig, TaskType

peft_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,  # 任务类型
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
    bias="none"
)

第三步:使用 PEFT 包装原模型

from peft import get_peft_model

peft_model = get_peft_model(model, peft_config)

第四步:训练、保存与加载

peft_model.save_pretrained("./lora_model")

加载:

from peft import PeftModel

base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-2-7b-hf")
peft_model = PeftModel.from_pretrained(base_model, "./lora_model")

4. 支持任务类型(TaskType)

PEFT 的配置中需要指定 task_type

任务类型 (TaskType) 描述
CAUSAL_LM 自回归生成任务(如 GPT、LLaMA)
SEQ_2_SEQ_LM 序列到序列生成任务(如 T5)
TOKEN_CLS Token 分类任务(如 NER)
SEQ_CLS 序列分类任务(如情感分析)
QUESTION_ANSWERING 问答任务

5. 为什么选择 PEFT?

优势 描述
显存更省 只训练部分参数,冻结原模型
效果接近全量微调 在许多任务上性能非常接近 full fine-tuning
更易部署 模型更小、加载更快
训练更快 特别适合资源有限的开发者和小团队
Hugging Face 生态兼容 可与 transformers, accelerate, Trainer 等配合使用

6. 与 transformers 的集成方式

PEFT 与 transformers 深度集成,适用于:

  • Traineraccelerate 的训练流程
  • 任何支持 AutoModel 的架构
  • datasets 库的无缝对接

7. 示例:LoRA 微调 LLaMA 模型

from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType

model_name = "meta-llama/Llama-2-7b-hf"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 配置 LoRA
lora_config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=8,
    lora_alpha=32,
    lora_dropout=0.05,
    bias="none"
)

# 构造 PEFT 模型
model = get_peft_model(model, lora_config)

# 打印可训练参数数量
model.print_trainable_parameters()

# 保存微调权重
model.save_pretrained("./lora_llama")

8. 总结

模块 功能说明
LoraConfig 配置 LoRA 微调参数
get_peft_model 创建可微调模型
PeftModel.from_pretrained 加载已微调的模型
TaskType 指定任务类型(如文本生成、分类)
PromptTuningConfig, PrefixTuningConfig 配置其他类型的微调方法

9. 适用人群

  • 想用消费级显卡微调大模型的开发者
  • 在企业/研究中进行低成本模型定制
  • 快速原型验证和实验调优
  • 部署轻量级的个性化模型(如私有 ChatGPT)

猜你喜欢

转载自blog.csdn.net/u013172930/article/details/147014042
今日推荐