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技術的民主化進程。