? PEFT
Modernste Parameter-Efficient Fine-Tuning (PEFT)-Methoden
Die Feinabstimmung großer vorab trainierter Modelle ist aufgrund ihrer Größe oft unerschwinglich. Parametereffiziente Feinabstimmungsmethoden (PEFT) ermöglichen eine effiziente Anpassung großer vorab trainierter Modelle an verschiedene nachgelagerte Anwendungen, indem nur eine kleine Anzahl (zusätzlicher) Modellparameter und nicht alle Parameter des Modells feinabgestimmt werden. Dadurch werden die Rechen- und Speicherkosten deutlich gesenkt. Aktuelle hochmoderne PEFT-Techniken erreichen eine Leistung, die mit vollständig fein abgestimmten Modellen vergleichbar ist.
PEFT ist in Transformers für einfaches Modelltraining und Inferenz, Diffusers für die bequeme Verwaltung verschiedener Adapter und Accelerate für verteiltes Training und Inferenz für wirklich große Modelle integriert.
Tipp
Besuchen Sie die PEFT-Organisation, um mehr über die in der Bibliothek implementierten PEFT-Methoden zu erfahren und Notizbücher zu sehen, die zeigen, wie diese Methoden auf eine Vielzahl nachgelagerter Aufgaben angewendet werden können. Klicken Sie auf der Organisationsseite auf die Schaltfläche „Repos ansehen“, um über neu implementierte Methoden und Notebooks benachrichtigt zu werden!
Eine Liste der unterstützten PEFT-Methoden finden Sie im Abschnitt „PEFT-Adapter-API-Referenz“ und lesen Sie die Adapter, Soft-Prompts und IA3-Konzeptleitfäden, um mehr über die Funktionsweise dieser Methoden zu erfahren.
Installieren Sie PEFT von pip:
pip install peft
Bereiten Sie ein Modell für das Training mit einer PEFT-Methode wie LoRA vor, indem Sie das Basismodell und die PEFT-Konfiguration mit get_peft_model
umschließen. Für das bigscience/mt0-large-Modell trainieren Sie nur 0,19 % der Parameter!
from transformers import AutoModelForSeq2SeqLM
from peft import get_peft_config , get_peft_model , LoraConfig , TaskType
model_name_or_path = "bigscience/mt0-large"
tokenizer_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.19151053100118282"
So laden Sie ein PEFT-Modell zur Inferenz:
from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch
model = AutoPeftModelForCausalLM . from_pretrained ( "ybelkada/opt-350m-lora" ). to ( "cuda" )
tokenizer = AutoTokenizer . from_pretrained ( "facebook/opt-350m" )
model . eval ()
inputs = tokenizer ( "Preheat the oven to 350 degrees and place the cookie dough" , return_tensors = "pt" )
outputs = model . generate ( input_ids = inputs [ "input_ids" ]. to ( "cuda" ), max_new_tokens = 50 )
print ( tokenizer . batch_decode ( outputs , skip_special_tokens = True )[ 0 ])
"Preheat the oven to 350 degrees and place the cookie dough in the center of the oven. In a large bowl, combine the flour, baking powder, baking soda, salt, and cinnamon. In a separate bowl, combine the egg yolks, sugar, and vanilla."
Die Verwendung von PEFT bietet viele Vorteile, aber der wichtigste sind die enormen Einsparungen bei Rechenleistung und Speicher, wodurch PEFT für viele verschiedene Anwendungsfälle anwendbar ist.
Berücksichtigen Sie die Speicheranforderungen für das Training der folgenden Modelle auf dem Datensatzought/raft/twitter_complaints mit einer A100 80-GB-GPU mit mehr als 64 GB CPU-RAM.
Modell | Volle Feinabstimmung | PEFT-LoRA PyTorch | PEFT-LoRA DeepSpeed mit CPU-Offloading |
---|---|---|---|
bigscience/T0_3B (3B Parameter) | 47,14 GB GPU / 2,96 GB CPU | 14,4 GB GPU / 2,96 GB CPU | 9,8 GB GPU / 17,8 GB CPU |
bigscience/mt0-xxl (12B Parameter) | OOM-GPU | 56 GB GPU / 3 GB CPU | 22 GB GPU / 52 GB CPU |
bigscience/bloomz-7b1 (7B-Parameter) | OOM-GPU | 32 GB GPU / 3,8 GB CPU | 18,1 GB GPU / 35 GB CPU |
Mit LoRA können Sie ein 12B-Parametermodell vollständig verfeinern, das andernfalls auf der 80-GB-GPU nicht über genügend Speicher verfügen würde, und ein 3B-Parametermodell bequem anpassen und trainieren. Wenn Sie sich die Leistung des 3B-Parametermodells ansehen, ist sie mit einem vollständig feinabgestimmten Modell bei einem Bruchteil des GPU-Speichers vergleichbar.
Einreichungsname | Genauigkeit |
---|---|
Menschliche Grundlinie (Crowdsourcing) | 0,897 |
Flan-T5 | 0,892 |
lora-t0-3b | 0,863 |
Tipp
Die Leistung des bigscience/T0_3B-Modells ist in der obigen Tabelle nicht optimiert. Sie können noch mehr Leistung herausholen, indem Sie mit den Eingabeanweisungsvorlagen, LoRA-Hyperparametern und anderen trainingsbezogenen Hyperparametern herumspielen. Die endgültige Prüfpunktgröße dieses Modells beträgt nur 19 MB im Vergleich zu 11 GB beim vollständigen Bigscience/T0_3B-Modell. Erfahren Sie in diesem Blogbeitrag mehr über die Vorteile des Finetunings mit PEFT.
Quantisierung ist eine weitere Methode zur Reduzierung des Speicherbedarfs eines Modells, indem die Daten mit einer geringeren Genauigkeit dargestellt werden. Es kann mit PEFT-Methoden kombiniert werden, um das Trainieren und Laden von LLMs für die Inferenz noch einfacher zu machen.
PEFT kann Ihnen helfen, Speicherplatz zu sparen, indem es die vollständige Feinabstimmung der Modelle für jede nachgelagerte Aufgabe oder jeden nachgelagerten Datensatz vermeidet. In vielen Fällen optimieren Sie nur einen sehr kleinen Teil der Parameter eines Modells und jeder Prüfpunkt ist nur wenige MB (statt GB) groß. Diese kleineren PEFT-Adapter weisen eine Leistung auf, die mit einem vollständig fein abgestimmten Modell vergleichbar ist. Wenn Sie viele Datensätze haben, können Sie mit einem PEFT-Modell viel Speicherplatz sparen und müssen sich keine Sorgen über katastrophales Vergessen oder eine Überanpassung des Backbone- oder Basismodells machen.
PEFT wird im gesamten Hugging Face-Ökosystem aufgrund der enormen Effizienz, die es für Training und Schlussfolgerungen mit sich bringt, weithin unterstützt.
Der iterative Diffusionsprozess verbraucht viel Speicher, was das Training erschweren kann. PEFT kann dazu beitragen, den Speicherbedarf zu reduzieren und die Speichergröße des endgültigen Modellprüfpunkts zu reduzieren. Betrachten Sie beispielsweise den Speicherbedarf für das Training eines Stable Diffusion-Modells mit LoRA auf einer A100 80-GB-GPU mit mehr als 64 GB CPU-RAM. Die endgültige Modellprüfpunktgröße beträgt nur 8,8 MB!
Modell | Volle Feinabstimmung | PEFT-LoRA | PEFT-LoRA mit Gradient Checkpointing |
---|---|---|---|
CompVis/stable-diffusion-v1-4 | 27,5 GB GPU / 3,97 GB CPU | 15,5 GB GPU / 3,84 GB CPU | 8,12 GB GPU / 3,77 GB CPU |
Tipp
Werfen Sie einen Blick auf das Trainingsskript „examples/lora_dreambooth/train_dreambooth.py“, um zu versuchen, Ihr eigenes Stable-Diffusion-Modell mit LoRA zu trainieren, und experimentieren Sie mit dem smangrul/peft-lora-sd-dreambooth Space, der auf einer T4-Instanz läuft. Erfahren Sie in diesem Tutorial mehr über die PEFT-Integration in Diffusers.
Accelerate ist eine Bibliothek für verteiltes Training und Inferenz auf verschiedenen Trainings-Setups und Hardware (GPUs, TPUs, Apple Silicon usw.). PEFT-Modelle funktionieren sofort mit Accelerate, was es sehr praktisch macht, wirklich große Modelle zu trainieren oder sie für Inferenzen auf Consumer-Hardware mit begrenzten Ressourcen zu verwenden.
PEFT kann auch auf die Ausbildung von LLMs mit RLHF-Komponenten wie dem Ranking und der Richtlinie angewendet werden. Beginnen Sie mit dem Lesen:
Nutzen Sie diesen Bereich oder sehen Sie sich die Dokumente an, um herauszufinden, welche Modelle offiziell eine PEFT-Methode sofort unterstützen. Auch wenn unten kein Modell aufgeführt ist, können Sie die Modellkonfiguration manuell konfigurieren, um PEFT für ein Modell zu aktivieren. Lesen Sie den Architekturleitfaden für neue Transformatoren, um zu erfahren, wie das geht.
Wenn Sie einen Beitrag zu PEFT leisten möchten, schauen Sie sich bitte unseren Beitragsleitfaden an.
Zu verwenden? Wenn Sie PEFT in Ihrer Publikation verwenden, zitieren Sie es bitte mithilfe des folgenden BibTeX-Eintrags.
@Misc { peft ,
title = { PEFT: State-of-the-art Parameter-Efficient Fine-Tuning methods } ,
author = { Sourab Mangrulkar and Sylvain Gugger and Lysandre Debut and Younes Belkada and Sayak Paul and Benjamin Bossan } ,
howpublished = { url{https://github.com/huggingface/peft} } ,
year = { 2022 }
}