Microsoft LoRA ist eine von Microsoft Open Source bereitgestellte Python-Bibliothek, die "LoRA: Low-Rank Adaptation of Large Language Models" (Niedrigrangige Anpassung großer Sprachmodelle) implementiert. Dieses Projekt bietet eine revolutionäre Lösung für das effiziente Feinabstimmen großer Sprachmodelle.
Projektadresse: https://github.com/microsoft/LoRA
Paper-Adresse: https://arxiv.org/abs/2106.09685
LoRA (Low-Rank Adaptation) ist eine parameter-effiziente Feinabstimmungsmethode, deren Kernidee wie folgt lautet:
Im GLUE-Benchmark-Test zeigte LoRA eine hervorragende Leistung:
Modell | Anzahl der Trainingsparameter | MNLI-Genauigkeit | SST-2-Genauigkeit | MRPC-Genauigkeit |
---|---|---|---|---|
RoBERTa Base Vollständige Feinabstimmung | 125M | 87.6 | 94.8 | 90.2 |
RoBERTa Base LoRA | 0.8M | 87.6±.1 | 95.1±.2 | 89.7±.7 |
DeBERTa XXL Vollständige Feinabstimmung | 1.5B | 91.1 | 96.8 | 92.9 |
DeBERTa XXL LoRA | 4.7M | 91.9±.1 | 96.9±.2 | 92.6±.6 |
Bei Textgenerierungsaufgaben wie E2E, DART, WebNLG usw. zeigt LoRA ebenfalls eine hervorragende Leistung:
Methode | Trainingsparameter | E2E (BLEU) | DART (BLEU) | WebNLG (BLEU) |
---|---|---|---|---|
GPT-2 M Vollständige Feinabstimmung | 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/ # Quellcode der Kernbibliothek
├── examples/
│ ├── NLG/ # GPT-2 Beispiel für natürliche Sprachgenerierung
│ └── NLU/ # RoBERTa/DeBERTa Beispiel für natürliches Sprachverständnis
├── README.md
└── setup.py
pip install loralib
# Oder aus dem Quellcode installieren
pip install git+https://github.com/microsoft/LoRA
# ===== Vor der Änderung =====
# layer = nn.Linear(in_features, out_features)
# ===== Nach der Änderung =====
import loralib as lora
layer = lora.Linear(in_features, out_features, r=16)
import loralib as lora
model = BigModel()
# Nur Parameter, die "lora_" enthalten, als trainierbar markieren
lora.mark_only_lora_as_trainable(model)
# Trainingsschleife
for batch in dataloader:
# Normaler Trainingsablauf
pass
# Speichern der LoRA-Parameter
torch.save(lora.lora_state_dict(model), 'lora_checkpoint.pt')
# Laden des vortrainierten Modells
model.load_state_dict(torch.load('pretrained.pt'), strict=False)
# Laden der LoRA-Parameter
model.load_state_dict(torch.load('lora_checkpoint.pt'), strict=False)
Derzeit unterstützt die LoRA-Bibliothek die folgenden Schichttypen:
nn.Linear
→ lora.Linear
nn.Embedding
→ lora.Embedding
nn.Conv2d
→ lora.Conv2d
lora.MergedLinear
(für zusammengeführte lineare Schichten wie QKV-Projektion)# Für Szenarien wie QKV-Projektion
qkv_proj = lora.MergedLinear(
d_model, 3*d_model,
r=8,
enable_lora=[True, False, True] # LoRA nur auf Q und V anwenden
)
# Training von LoRA-bezogenen Bias
lora.mark_only_lora_as_trainable(model, bias='lora_only')
# Training aller Bias
lora.mark_only_lora_as_trainable(model, bias='all')
# Bewertungsmodus: Gewichte zusammenführen, um Inferenzlatenz zu eliminieren
model.eval()
# Trainingsmodus: Getrennten Zustand wiederherstellen
model.train()
Das Microsoft LoRA-Projekt bietet eine bahnbrechende Lösung für die effiziente Feinabstimmung großer Sprachmodelle. Durch die geschickte niedrigrangige Anpassungstechnik werden die Rechen- und Speicherkosten deutlich gesenkt, während gleichzeitig eine hervorragende Modellleistung erhalten bleibt. Das Projekt hat nicht nur einen wichtigen akademischen Wert, sondern bietet auch einen praktikablen technischen Weg für reale industrielle Anwendungen und ist ein Meilenstein im Bereich der parameter-effizienten Feinabstimmung.