Microsoft LoRA est une bibliothèque Python open source de Microsoft qui implémente la technique "LoRA : Low-Rank Adaptation of Large Language Models" (Adaptation de faible rang des grands modèles de langage). Ce projet offre une solution révolutionnaire pour le fine-tuning efficace des grands modèles de langage.
Adresse du projet : https://github.com/microsoft/LoRA
Adresse de l'article : https://arxiv.org/abs/2106.09685
LoRA (Low-Rank Adaptation) est une méthode de fine-tuning efficace en termes de paramètres, dont l'idée centrale est la suivante :
Dans le benchmark GLUE, LoRA a démontré d'excellentes performances :
Modèle | Nombre de paramètres d'entraînement | Précision MNLI | Précision SST-2 | Précision MRPC |
---|---|---|---|---|
RoBERTa Base Fine-tuning complet | 125M | 87.6 | 94.8 | 90.2 |
RoBERTa Base LoRA | 0.8M | 87.6±.1 | 95.1±.2 | 89.7±.7 |
DeBERTa XXL Fine-tuning complet | 1.5B | 91.1 | 96.8 | 92.9 |
DeBERTa XXL LoRA | 4.7M | 91.9±.1 | 96.9±.2 | 92.6±.6 |
LoRA a également obtenu d'excellentes performances dans les tâches de génération de texte E2E, DART, WebNLG, etc. :
Méthode | Paramètres d'entraînement | E2E (BLEU) | DART (BLEU) | WebNLG (BLEU) |
---|---|---|---|---|
GPT-2 M Fine-tuning complet | 354.92M | 68.2 | 46.0 | 47.6 |
GPT-2 M LoRA | 0.35M | 70.4±.1 | 47.1±.2 | 55.3±.2 |
microsoft/LoRA/
├── loralib/ # Code source de la bibliothèque principale
├── examples/
│ ├── NLG/ # Exemple de génération de langage naturel GPT-2
│ └── NLU/ # Exemple de compréhension du langage naturel RoBERTa/DeBERTa
├── README.md
└── setup.py
pip install loralib
# Ou installer à partir du code source
pip install git+https://github.com/microsoft/LoRA
# ===== Avant modification =====
# layer = nn.Linear(in_features, out_features)
# ===== Après modification =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)
import loralib as lora
model = BigModel()
# Définir uniquement les paramètres contenant "lora_" comme entraînables
lora.mark_only_lora_as_trainable(model)
# Boucle d'entraînement
for batch in dataloader:
# Flux d'entraînement normal
pass
# Enregistrer les paramètres LoRA
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')
# Charger le modèle pré-entraîné
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# Charger les paramètres LoRA
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)
Actuellement, la bibliothèque LoRA prend en charge les types de couches suivants :
nn.Linear
→ lora.Linear
nn.Embedding
→ lora.Embedding
nn.Conv2d
→ lora.Conv2d
lora.MergedLinear
(pour les couches linéaires fusionnées telles que la projection QKV)# Pour les scénarios tels que la projection QKV
qkv_proj = lora.MergedLinear(
d_model, 3*d_model,
r=8,
enable_lora=[True, False, True] # Appliquer LoRA uniquement à Q et V
)
# Entraîner le biais associé à LoRA
lora.mark_only_lora_as_trainable(model, bias='lora_only')
# Entraîner tous les biais
lora.mark_only_lora_as_trainable(model, bias='all')
# Mode d'évaluation : fusionner les poids, éliminer la latence d'inférence
model.eval()
# Mode d'entraînement : restaurer l'état de séparation
model.train()
Le projet Microsoft LoRA offre une solution révolutionnaire pour le fine-tuning efficace des grands modèles de langage. Grâce à une technique astucieuse d'adaptation de faible rang, il maintient d'excellentes performances du modèle tout en réduisant considérablement les coûts de calcul et de stockage. Ce projet a non seulement une valeur académique importante, mais fournit également une voie technologique viable pour les applications industrielles pratiques, et constitue une étape importante dans le domaine du fine-tuning efficace en termes de paramètres.