? PEFT
Méthodes de pointe de réglage efficace des paramètres (PEFT)
La mise au point de grands modèles pré-entraînés est souvent d'un coût prohibitif en raison de leur échelle. Les méthodes PEFT (Parameter-Efficient Fine-Tuning) permettent une adaptation efficace de grands modèles pré-entraînés à diverses applications en aval en ajustant uniquement un petit nombre de paramètres (supplémentaires) du modèle au lieu de tous les paramètres du modèle. Cela réduit considérablement les coûts de calcul et de stockage. Les techniques PEFT de pointe récentes atteignent des performances comparables à celles de modèles entièrement réglés.
PEFT est intégré à Transformers pour une formation et une inférence faciles de modèles, à Diffusers pour gérer facilement différents adaptateurs et à Accelerate pour une formation et une inférence distribuées pour de très gros modèles.
Conseil
Visitez l'organisation PEFT pour en savoir plus sur les méthodes PEFT implémentées dans la bibliothèque et pour consulter des cahiers montrant comment appliquer ces méthodes à diverses tâches en aval. Cliquez sur le bouton « Regarder les dépôts » sur la page de l'organisation pour être informé des méthodes et des notebooks nouvellement implémentés !
Consultez la section Référence de l'API des adaptateurs PEFT pour obtenir une liste des méthodes PEFT prises en charge, et lisez les guides conceptuels des adaptateurs, des invites logicielles et IA3 pour en savoir plus sur le fonctionnement de ces méthodes.
Installez PEFT à partir de pip :
pip install peft
Préparez un modèle pour la formation avec une méthode PEFT telle que LoRA en encapsulant le modèle de base et la configuration PEFT avec get_peft_model
. Pour le modèle bigscience/mt0-large, vous n'entraînez que 0,19 % des paramètres !
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"
Pour charger un modèle PEFT pour l'inférence :
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."
L'utilisation de PEFT présente de nombreux avantages, mais le principal réside dans les énormes économies de calcul et de stockage, ce qui rend PEFT applicable à de nombreux cas d'utilisation différents.
Tenez compte des besoins en mémoire pour entraîner les modèles suivants sur l'ensemble de données ought/raft/twitter_complaints avec un GPU A100 de 80 Go avec plus de 64 Go de RAM CPU.
Modèle | Mise au point complète | PEFT-LoRA PyTorch | PEFT-LoRA DeepSpeed avec déchargement du processeur |
---|---|---|---|
bigscience/T0_3B (paramètres 3B) | GPU de 47,14 Go / processeur de 2,96 Go | GPU de 14,4 Go / processeur de 2,96 Go | GPU de 9,8 Go / processeur de 17,8 Go |
bigscience/mt0-xxl (paramètres 12B) | GPU MOO | GPU 56 Go / processeur 3 Go | GPU 22 Go / processeur 52 Go |
bigscience/bloomz-7b1 (paramètres 7B) | GPU MOO | GPU 32 Go / processeur 3,8 Go | GPU de 18,1 Go / processeur de 35 Go |
Avec LoRA, vous pouvez affiner entièrement un modèle de paramètres 12B qui, autrement, manquerait de mémoire sur le GPU de 80 Go, et adapter et entraîner confortablement un modèle de paramètres 3B. Lorsque vous examinez les performances du modèle de paramètres 3B, elles sont comparables à un modèle entièrement affiné avec une fraction de la mémoire GPU.
Nom de la soumission | Précision |
---|---|
Base de référence humaine (crowdsourcing) | 0,897 |
Flan-T5 | 0,892 |
lora-t0-3b | 0,863 |
Conseil
Les performances du modèle bigscience/T0_3B ne sont pas optimisées dans le tableau ci-dessus. Vous pouvez en tirer encore plus de performances en jouant avec les modèles d'instructions d'entrée, les hyperparamètres LoRA et d'autres hyperparamètres liés à la formation. La taille finale du point de contrôle de ce modèle n'est que de 19 Mo, contre 11 Go pour le modèle complet bigscience/T0_3B. Apprenez-en davantage sur les avantages du réglage fin avec PEFT dans cet article de blog.
La quantification est une autre méthode permettant de réduire les besoins en mémoire d'un modèle en représentant les données avec une précision moindre. Il peut être combiné avec les méthodes PEFT pour rendre encore plus facile la formation et le chargement des LLM pour l'inférence.
PEFT peut vous aider à économiser de l'espace de stockage en évitant un réglage complet des modèles sur chaque tâche ou ensemble de données en aval. Dans de nombreux cas, vous ne peaufinez qu'une très petite fraction des paramètres d'un modèle et chaque point de contrôle ne fait que quelques Mo (au lieu de Go). Ces adaptateurs PEFT plus petits démontrent des performances comparables à celles d'un modèle entièrement réglé. Si vous disposez de nombreux ensembles de données, vous pouvez économiser beaucoup d'espace de stockage avec un modèle PEFT sans avoir à vous soucier d'un oubli catastrophique ou d'un surajustement du squelette ou du modèle de base.
PEFT est largement pris en charge dans l'écosystème Hugging Face en raison de l'efficacité considérable qu'il apporte à la formation et à l'inférence.
Le processus de diffusion itérative consomme beaucoup de mémoire, ce qui peut rendre l'entraînement difficile. PEFT peut aider à réduire les besoins en mémoire et à réduire la taille de stockage du point de contrôle final du modèle. Par exemple, considérons la mémoire requise pour entraîner un modèle de diffusion stable avec LoRA sur un GPU A100 de 80 Go avec plus de 64 Go de RAM CPU. La taille finale du point de contrôle du modèle n’est que de 8,8 Mo !
Modèle | Mise au point complète | PEFT-LoRA | PEFT-LoRA avec points de contrôle de dégradé |
---|---|---|---|
CompVis/stable-diffusion-v1-4 | GPU de 27,5 Go / processeur de 3,97 Go | GPU de 15,5 Go / processeur de 3,84 Go | GPU de 8,12 Go / processeur de 3,77 Go |
Conseil
Jetez un œil au script de formation examples/lora_dreambooth/train_dreambooth.py pour essayer de former votre propre modèle de diffusion stable avec LoRA et jouez avec l'espace smangrul/peft-lora-sd-dreambooth qui s'exécute sur une instance T4. Apprenez-en davantage sur l'intégration PEFT dans les diffuseurs dans ce didacticiel.
Accelerate est une bibliothèque de formation et d'inférence distribuées sur diverses configurations et matériels de formation (GPU, TPU, Apple Silicon, etc.). Les modèles PEFT fonctionnent avec Accelerate dès le départ, ce qui rend très pratique la formation de très grands modèles ou leur utilisation pour l'inférence sur du matériel grand public doté de ressources limitées.
PEFT peut également être appliqué à la formation des LLM avec des composants RLHF tels que le classement et la politique. Commencez par lire :
Utilisez cet espace ou consultez la documentation pour savoir quels modèles prennent officiellement en charge une méthode PEFT prête à l'emploi. Même si vous ne voyez pas de modèle répertorié ci-dessous, vous pouvez configurer manuellement la configuration du modèle pour activer PEFT pour un modèle. Lisez le guide de l'architecture des nouveaux transformateurs pour savoir comment procéder.
Si vous souhaitez contribuer à PEFT, veuillez consulter notre guide de contribution.
Utiliser ? PEFT dans votre publication, veuillez le citer en utilisant l'entrée BibTeX suivante.
@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 }
}