LoRA (Low-Rank Adaptation)
LoRA affine les grands modèles en gelant leurs poids et en entraînant de petites matrices de mise à jour de faible rang, ce qui réduit le nombre de paramètres entraînables, la mémoire et l’espace de stockage.
LoRA, abréviation de Low-Rank Adaptation, est une méthode d’ajustement fin efficace en paramètres (PEFT) qui adapte un grand modèle préentraîné à une nouvelle tâche en gelant ses poids d’origine et en entraînant une petite paire de matrices dans certaines couches. Leur produit constitue une mise à jour de faible rang ajoutée aux poids gelés ; seule une infime fraction des paramètres reçoit donc des gradients. Présentée par Hu et ses collègues chez Microsoft en 2021, LoRA a réduit de 10 000 fois le nombre de paramètres entraînables de GPT-3 175B et de 3 fois sa mémoire GPU d’entraînement, par rapport à l’ajustement fin complet avec Adam, tout en égalant ou en dépassant la qualité de l’ajustement fin complet sur RoBERTa, DeBERTa, GPT-2 et GPT-3. Aujourd’hui, LoRA sert largement à personnaliser les grands modèles de langage (LLM), les modèles de diffusion et les transformeurs de vision sur du matériel modeste. LoRa, protocole radio longue portée pour les appareils IoT, est un terme sans rapport.
Fonctionnement de LoRA#
L’ajustement fin modifie une matrice de poids préentraînée W de taille d × k par une mise à jour ΔW. LoRA suppose que cette mise à jour a un rang intrinsèque faible ; elle peut donc s’écrire comme le produit de deux matrices minces : ΔW = B × A, où A est de taille r × k, B de taille d × r et le rang r est bien inférieur à d ou k. La sortie de la couche devient h = Wx + (α / r) × BAx, où α est une constante d’échelle fixe. A est initialisée avec de petites valeurs aléatoires et B avec des zéros, de sorte que l’entraînement démarre exactement à partir du modèle préentraîné. Seules A et B sont mises à jour pendant la rétropropagation, ce qui supprime également l’état de l’optimiseur associé à tous les poids gelés.
Pour une projection de 4096 × 4096, l’ajustement fin complet entraîne environ 16,8 millions de poids, tandis qu’un adaptateur de rang 8 en entraîne 8 × (4096 + 4096) = 65 536. Le script PyTorch ci-dessous construit un tel adaptateur et le fusionne dans la couche gelée :
import torch
from torch import nn
# A frozen pretrained 4096 x 4096 projection, like one in a transformer attention block
base = nn.Linear(4096, 4096).requires_grad_(False)
# LoRA's trainable rank-8 update: B @ A, scaled by alpha / r
# B starts at zero, so the adapted layer initially matches the pretrained one
r, alpha = 8, 16
A = nn.Parameter(torch.randn(r, 4096) * 0.01)
B = nn.Parameter(torch.zeros(4096, r))
trainable = A.numel() + B.numel()
total = trainable + sum(p.numel() for p in base.parameters())
print(f"Trainable: {trainable:,} of {total:,} parameters ({trainable / total:.2%})")
# After training, merge the update into the base weight so inference costs nothing extra
nn.init.normal_(B, std=0.01) # stand-in for trained values
x = torch.randn(2, 4096)
adapted = base(x) + (alpha / r) * (x @ A.T @ B.T)
merged = nn.functional.linear(x, base.weight + (alpha / r) * B @ A, base.bias)
print(f"Merged layer matches adapter output: {torch.allclose(adapted, merged, atol=1e-5)}")L’adaptateur entraîne 65 536 des 16 846 848 paramètres de la couche, soit 0,39 %, et l’incorporation de B × A dans W produit les mêmes sorties que l’exécution séparée de l’adaptateur. Les modèles LoRA fusionnés s’exécutent donc exactement aussi rapidement que le modèle d’origine, un avantage par rapport aux premières couches d’adaptateur qui ajoutaient du calcul à chaque passe avant.
Utiliser LoRA en pratique#
L’article original n’adaptait que les projections de requête et de valeur de l’attention du transformeur, mais de nombreuses recettes ciblent désormais toutes les couches linéaires. Le rang et α sont les principaux hyperparamètres : la bibliothèque Hugging Face PEFT utilise par défaut r = 8 et α = 8. Comme le modèle de base reste intact, un déploiement peut en conserver une seule copie et permuter de petits adaptateurs propres aux tâches. Avec un rang de 4 sur les projections de requête et de valeur de GPT-3 175B, chaque point de contrôle adapté est passé de 350 Go à environ 35 Mo, soit une taille environ 10 000 fois inférieure.
- Modèles de langage : Les équipes adaptent des LLM ouverts à un domaine, à un style ou à un format d’instruction avec un seul GPU, souvent en combinant LoRA avec des données d’ajustement sur instructions.
- Génération d’images : Les fichiers LoRA apprennent à Stable Diffusion et à des modèles similaires un personnage, un produit ou un style artistique ; ils sont partagés et empilés séparément du point de contrôle de base.
- Modèles de vision et multimodaux : Les adaptateurs spécialisent les transformeurs de vision et les modèles vision-langage (VLM) pour les images médicales, industrielles ou documentaires sans réentraîner le modèle de base.
Variantes#
- QLoRA : Gèle le modèle de base en précision NormalFloat 4 bits et entraîne des adaptateurs LoRA par-dessus. Dettmers et ses collègues l’ont utilisé pour ajuster un modèle de 65 milliards de paramètres sur un seul GPU de 48 Go, tout en préservant les performances de l’ajustement fin complet en 16 bits.
- DoRA : Sépare chaque poids préentraîné en une magnitude et une direction, puis applique LoRA uniquement à la direction, ce qui réduit l’écart de précision avec l’ajustement fin complet au même coût d’inférence.
LoRA et termes apparentés#
- Ajustement fin efficace en paramètres : Terme générique désignant les méthodes qui n’entraînent qu’une petite partie d’un modèle. Le gel de couches en est la forme la plus simple ; Ultralytics YOLO le propose avec l’argument d’entraînement
freeze, qui conserve les N premières couches d’un modèle YOLO26 à leurs poids préentraînés pendant l’entraînement des autres couches. - Fine-tuning complet : met à jour tous les poids et stocke une copie complète du modèle pour chaque tâche. En programmation et en mathématiques, le fine-tuning complet a nettement surpassé LoRA standard, tandis que LoRA a moins souffert de l’oubli catastrophique des autres compétences du modèle de base.
- Réglage de prompt : Apprend des plongements de prompts souples ajoutés en préfixe à l’entrée, tandis que tous les poids du modèle restent gelés.
- Apprentissage par transfert : Principe général qui consiste à réutiliser les connaissances acquises pour une tâche dans une autre. LoRA est une méthode efficace pour le faire.
- Fusion de modèles : Combine les poids de modèles ajustés séparément ; fusionner plusieurs adaptateurs LoRA dans un même modèle de base en est un cas courant.










