Articles · arXiv 2106.09685
LoRA: Low-Rank Adaptation of Large Language Models
Publié le cs.CLcs.AIcs.LG arXivPDF
Résumé en trois lignes
- 🎯 Le fine-tuning complet de modèles de langue massifs comme GPT-3 175B exige de réentraîner et de stocker des milliards de paramètres par tâche aval, créant des goulots d'étranglement majeurs de stockage, de VRAM et de déploiement.
- 🔧 Gèle les matrices de poids pré-entraînées et injecte des matrices entraînables de décomposition de bas rang () dans les couches denses du Transformer, mettant le produit à l'échelle par et permettant la fusion au déploiement sans latence ajoutée.
- 📈 Pour GPT-3 175B, LoRA divise par 10 000 les paramètres entraînables et par 3 la VRAM (de 1,2 To à 350 Go) tout en égalant ou surpassant le fine-tuning complet sur GLUE, WikiSQL et SAMSum.
Résumé
Un paradigme majeur du traitement automatique du langage naturel repose sur un pré-entraînement à grande échelle sur des données généralistes, suivi d'une adaptation à des tâches ou domaines spécifiques. À mesure que les modèles pré-entraînés grandissent, le fine-tuning complet, qui réentraîne l'ensemble des paramètres du modèle, devient difficilement envisageable. Si l'on prend l'exemple de GPT-3 175B, déployer des instances indépendantes de modèles affinés, chacune dotée de 175 milliards de paramètres, engendre un coût prohibitif. Nous proposons la méthode Low-Rank Adaptation, ou LoRA, qui gèle les poids du modèle pré-entraîné et injecte des matrices entraînables de décomposition de rang au sein de chaque couche de l'architecture Transformer, réduisant considérablement le nombre de paramètres à entraîner pour les tâches en aval. Comparé à GPT-3 175B affiné avec Adam, LoRA permet de diviser le nombre de paramètres entraînables par 10 000 et les besoins en mémoire GPU par 3. Les performances de LoRA égalent ou surpassent celles du fine-tuning en matière de qualité de modèle sur RoBERTa, DeBERTa, GPT-2 et GPT-3, tout en ayant moins de paramètres entraînables, un débit d'entraînement supérieur et, contrairement aux adaptateurs, aucune latence d'inférence additionnelle. Nous présentons également une étude empirique sur le déficit de rang lors de l'adaptation des modèles de langue, mettant en lumière l'efficacité de LoRA. Nous publions une bibliothèque facilitant l'intégration de LoRA aux modèles PyTorch et mettons à disposition nos implémentations ainsi que les points de contrôle (checkpoints) pour RoBERTa, DeBERTa et GPT-2 à l'adresse https://github.com/microsoft/LoRA.
Résumé original (anglais)
An important paradigm of natural language processing consists of large-scale pre-training on general domain data and adaptation to particular tasks or domains. As we pre-train larger models, full fine-tuning, which retrains all model parameters, becomes less feasible. Using GPT-3 175B as an example -- deploying independent instances of fine-tuned models, each with 175B parameters, is prohibitively expensive. We propose Low-Rank Adaptation, or LoRA, which freezes the pre-trained model weights and injects trainable rank decomposition matrices into each layer of the Transformer architecture, greatly reducing the number of trainable parameters for downstream tasks. Compared to GPT-3 175B fine-tuned with Adam, LoRA can reduce the number of trainable parameters by 10,000 times and the GPU memory requirement by 3 times. LoRA performs on-par or better than fine-tuning in model quality on RoBERTa, DeBERTa, GPT-2, and GPT-3, despite having fewer trainable parameters, a higher training throughput, and, unlike adapters, no additional inference latency. We also provide an empirical investigation into rank-deficiency in language model adaptation, which sheds light on the efficacy of LoRA. We release a package that facilitates the integration of LoRA with PyTorch models and provide our implementations and model checkpoints for RoBERTa, DeBERTa, and GPT-2 at https://github.com/microsoft/LoRA.
Guide de lecture
Problème et motivation
Adapter des modèles de langue pré-entraînés de grande taille à diverses applications en aval repose traditionnellement sur le fine-tuning complet (mise à jour de tous les paramètres vers ). Pour des architectures massives telles que GPT-3 175B, stocker et servir des copies indépendantes de modèles de 175 milliards de paramètres s'avère prohibitif en termes de stockage, de mémoire GPU et de surcoût d'E/S. Les techniques antérieures d'adaptation efficace des paramètres présentent des limites notables :
- Couches d'adaptation en série (Series Adapter Layers) : Elles insèrent des modules de goulot d'étranglement de manière séquentielle dans les blocs Transformer. Ces opérations séquentielles ne pouvant pas être parallélisées, elles introduisent une latence d'inférence significative — ralentissant les passes avant jusqu'à dans des régimes de service en ligne sur un seul GPU avec de petits lots (batches).
- Prefix / Prompt Tuning : Optimise des vecteurs de prompt continus préfixés aux activations des couches. Ces méthodes sont difficiles à optimiser, évoluent de manière non monotone avec la longueur du prompt et consomment une partie de la longueur de séquence allouée au contexte.
LoRA répond à ce compromis entre efficacité et qualité en partant de l'hypothèse que les mises à jour d'adaptation des poids possèdent un rang intrinsèque faible lors du transfert vers des tâches aval.
Idées clés
- Reparamétrisation de bas rang : Pour une matrice dense gelée , la mise à jour d'adaptation est paramétrée sous la forme , où , , et le rang .
- Aucune latence d'inférence supplémentaire : La reparamétrisation étant linéaire, les matrices de bas rang entraînées peuvent être directement intégrées aux poids pré-entraînés () au moment du déploiement, conservant ainsi l'architecture d'inférence initiale et évitant toute pénalité de latence par rapport à un fine-tuning complet.
- Modèle de base partagé avec permutation à chaud (Hot-Swapping) : Le grand modèle gelé reste statique en mémoire GPU ; changer de tâche nécessite uniquement d'échanger les matrices de bas rang et , réduisant drastiquement l'espace de stockage de plusieurs centaines de gigaoctets à quelques dizaines de mégaoctets.
- Adaptation sélective de l'attention : L'application de la décomposition de rang exclusivement aux projections de l'auto-attention (notamment la requête et la valeur ) permet d'obtenir des performances compétitives tout en maintenant les couches MLP feed-forward gelées.
Méthode
Pour une couche de projection dense produisant , LoRA modifie le calcul selon la formule suivante :
Détails clés de l'implémentation :
- Initialisation : est initialisée selon une distribution gaussienne aléatoire et est initialisée à zéro, garantissant que au début de l'entraînement.
- Facteur d'échelle : La mise à jour est mise à l'échelle par , où est un hyperparamètre constant. Lors de l'optimisation avec Adam, fixer à la valeur du rang initial évite d'avoir à réajuster le taux d'apprentissage lors de l'expérimentation de différentes valeurs de .
- Fusion au déploiement : En production, la matrice de poids adaptée est explicitement matérialisée par . Lors d'un changement de tâche, est restaurée par soustraction () puis fusionnée avec les nouveaux poids d'adaptateur ().
- Couches ciblées : Bien qu'elle soit applicable à n'importe quelle couche dense, les expériences se concentrent principalement sur les projections d'attention du Transformer (). Appliquer LoRA avec sur et offre une efficacité optimale en aval.
Résultats
- GPT-3 175B : LoRA réduit les paramètres entraînables de 175 255,8 M à 4,7 M ( ou ) ou 37,7 M (), faisant passer la taille des checkpoints de 350 Go à 35 Mo (soit une réduction d'un facteur 10 000) et la VRAM nécessaire à l'entraînement de 1,2 To à 350 Go. Le débit d'entraînement augmente de (passant de 32,5 à 43,1 tokens/s par GPU V100).
- Précision sur les tâches aval (GPT-3) :
- Précision de validation sur la forme logique de WikiSQL : le fine-tuning complet atteint ; LoRA (37,7 M) atteint .
- Précision de validation matched sur MultiNLI : le fine-tuning complet atteint ; LoRA (4,7 M) atteint .
- Résumé de dialogues sur SAMSum : le fine-tuning complet obtient 52,0 / 28,0 / 44,5 en ROUGE-1/2/L ; LoRA (4,7 M) atteint 53,8 / 29,8 / 45,9.
- RoBERTa et DeBERTa (Benchmark GLUE) : Sur RoBERTa Large, LoRA égale le fine-tuning (score moyen de contre ) avec seulement 0,8 M de paramètres contre 355,0 M. Sur DeBERTa XXL (1,5B), LoRA obtient un score moyen de sur GLUE avec 4,7 M de paramètres, contre pour le fine-tuning complet (1 500,0 M de paramètres).
- Analyse du rang intrinsèque : L'analyse de similarité de sous-espaces révèle que les directions singulières principales de pour et se chevauchent fortement (similarité normalisée pour la première dimension). De plus, amplifie les directions présentes mais peu accentuées dans , avec un facteur d'amplification pour .
Limites et questions ouvertes
- Traitement par lots multi-tâches (Multi-Task Batching) : Lorsque les poids de bas rang sont fusionnés dans pour éliminer la latence d'inférence, regrouper simultanément des entrées destinées à plusieurs tâches différentes au sein d'une même passe avant n'est pas immédiat.
- Sélection heuristique des couches : La pratique actuelle repose sur des heuristiques empiriques (adaptation de et ) plutôt que sur un cadre théorique rigoureux pour déterminer quelles matrices adapter entre les couches d'attention et de MLP.
- Décalages de domaine extrêmes : Pour les tâches aval qui s'écartent considérablement de la distribution de pré-entraînement (comme l'adaptation d'un LLM anglophone vers une langue cible totalement distincte), l'adaptation de bas rang pourrait se révéler insuffisante par rapport à une adaptation de rang supérieur ou complète.
Termes clés
- Low-Rank Adaptation (LoRA)
- Une méthode de fine-tuning efficace en paramètres qui gèle les poids du modèle de base et entraîne des matrices de décomposition de bas rang en parallèle des couches denses.
- Intrinsic Rank
- La faible dimensionnalité effective, ou le nombre réduit de vecteurs singuliers, nécessaire pour capturer une adaptation pertinente des paramètres lors du transfert vers une tâche spécifique.
- Adapter Layers
- Des modules de goulot d'étranglement externes insérés séquentiellement dans les blocs Transformer, qui introduisent des calculs séquentiels non parallélisables et de la latence à l'inférence.
- Prefix Tuning
- Une stratégie d'adaptation qui préfixe des vecteurs continus entraînables aux tokens d'entrée ou aux états cachés des couches, réduisant la longueur de contexte disponible pour la séquence.
- Weight Folding / Weight Merging
- L'addition arithmétique directe des matrices de bas rang dans la matrice de poids pré-entraînée afin d'éliminer tout surcoût d'exécution pendant l'inférence.
- Grassmann Distance Subspace Similarity
- Une métrique mesurant le chevauchement des espaces colonnes entre les matrices de vecteurs singuliers orthonormés issues des mises à jour d'adaptation.
- Feature Amplification Factor
- Le rapport entre la norme de Frobenius de et la projection de sur le sous-espace singulier de , mesurant l'intensité avec laquelle les directions spécifiques à la tâche sont accentuées.
Questions
Pourquoi LoRA n'introduit-elle aucune latence d'inférence supplémentaire par rapport aux adaptateurs ?
LoRA étant linéaire (), le produit de bas rang peut être explicitement calculé et additionné à avant le déploiement (). L'inférence exécute ensuite une multiplication matricielle standard sans les couches séquentielles de goulot d'étranglement qui ralentissent les architectures à base d'adaptateurs.
À quelles matrices de poids du Transformer LoRA doit-elle être appliquée ?
Les expériences sur GPT-3 montrent que l'adaptation conjointe des poids de projection de requête () et de valeur () offre les meilleures performances pour un budget de paramètres donné. Adapter plusieurs matrices d'attention avec un rang plus faible (par exemple ) est plus efficace que d'allouer l'ensemble des paramètres à un seul type de matrice avec un rang plus élevé.
Quel rang $r$ est suffisant pour adapter les grands modèles de langue ?
Un très faible rang tel que , ou suffit souvent pour les tâches en aval. L'analyse de similarité de sous-espaces montre que les premiers vecteurs singuliers appris avec de petits rangs recoupent largement ceux appris avec des rangs plus élevés (comme ), ces derniers capturant principalement du bruit d'optimisation aléatoire.
Comment LoRA initialise-t-elle ses matrices de bas rang ?
La matrice est initialisée selon une distribution gaussienne aléatoire, tandis que la matrice est initialisée à zéro. Cela garantit que au début de l'entraînement, laissant la passe avant pré-entraînée du modèle parfaitement inchangée.
La présentation de cette page a été rédigée par une IA à partir de l'article et peut contenir des erreurs. Consultez l'article pour les détails.