PEFT (Parameter-Efficient Fine-Tuning) 是由Hugging Face开发的一个先进的参数高效微调库。该项目旨在解决大型预训练模型微调过程中计算成本高昂和存储需求巨大的问题。
GitHub地址: https://github.com/huggingface/peft
模型 | 全参数微调 | PEFT-LoRA | PEFT-LoRA + DeepSpeed CPU卸载 |
---|---|---|---|
T0_3B (30亿参数) | 47.14GB GPU / 2.96GB CPU | 14.4GB GPU / 2.96GB CPU | 9.8GB GPU / 17.8GB CPU |
mt0-xxl (120亿参数) | 内存溢出 | 56GB GPU / 3GB CPU | 22GB GPU / 52GB CPU |
bloomz-7b1 (70亿参数) | 内存溢出 | 32GB GPU / 3.8GB CPU | 18.1GB GPU / 35GB CPU |
在Twitter投诉分类任务上的准确率对比:
pip install peft
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config, get_peft_model, LoraConfig, TaskType
# 配置PEFT
model_name_or_path = "bigscience/mt0-large"
peft_config = LoraConfig(
task_type=TaskType.SEQ_2_SEQ_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1
)
# 加载和包装模型
model = AutoModelForSeq2SeqLM.from_pretrained(model_name_or_path)
model = get_peft_model(model, peft_config)
# 查看可训练参数
model.print_trainable_parameters()
# 输出:trainable params: 2359296 || all params: 1231940608 || trainable%: 0.19
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
# 加载微调后的模型
model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora").to("cuda")
tokenizer = AutoTokenizer.from_pretrained("facebook/opt-350m")
# 进行推理
model.eval()
inputs = tokenizer("你的输入文本", return_tensors="pt")
outputs = model.generate(input_ids=inputs["input_ids"].to("cuda"), max_new_tokens=50)
🤗 PEFT是一个革命性的参数高效微调库,它不仅解决了大模型微调的成本问题,还保持了优秀的性能表现。无论是研究人员还是工业界开发者,PEFT都提供了一个经济高效的大模型定制化解决方案,推动了AI技术的民主化进程。