Microsoft LoRA Projekt – Detaillierte Einführung
Projektübersicht
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
Kerntechnische Prinzipien
LoRA Technologie – Kurze Einführung
LoRA (Low-Rank Adaptation) ist eine parameter-effiziente Feinabstimmungsmethode, deren Kernidee wie folgt lautet:
- Einfrieren der ursprünglichen vortrainierten Gewichte: Keine Änderung der ursprünglichen Modellparameter
- Hinzufügen von niedrigrangigen Zerlegungsmatrizen: Modelladaptation durch das Erlernen eines Paares von niedrigrangigen Matrizen
- Deutliche Reduzierung der Trainingsparameter: Nur die neu hinzugefügten niedrigrangigen Matrixparameter werden trainiert
Technische Vorteile
- Extrem hohe Parametereffizienz
- Im Vergleich zur vollständigen Feinabstimmung von GPT-3 175B kann LoRA die Anzahl der Trainingsparameter um das 10.000-fache reduzieren
- 3-fache Reduzierung des GPU-Speicherbedarfs
- Hervorragende Leistungserhaltung
- Zeigt auf RoBERTa, DeBERTa, GPT-2, GPT-3 eine mit der vollständigen Feinabstimmung vergleichbare oder bessere Leistung
- Erzielt hervorragende Ergebnisse im GLUE-Benchmark-Test
- Bereitstellungsfreundlich
- Keine zusätzliche Inferenzlatenz
- Unterstützt effizientes Aufgabenwechseln
- Deutliche Reduzierung des Speicherbedarfs
Performance
GLUE-Benchmark-Testergebnisse
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 |
GPT-2 Textgenerierungsaufgaben
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 |
Projektstruktur
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
Installation und Verwendung
Installationsmethode
pip install loralib
# Oder aus dem Quellcode installieren
pip install git+https://github.com/microsoft/LoRA
Grundlegendes Verwendungsbeispiel
1. Ersetzen der linearen Schicht
# ===== 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)
2. Markieren trainierbarer Parameter
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
3. Speichern und Laden von Checkpoints
# 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)
Unterstützte Schichttypen
Derzeit unterstützt die LoRA-Bibliothek die folgenden Schichttypen:
nn.Linear→lora.Linearnn.Embedding→lora.Embeddingnn.Conv2d→lora.Conv2dlora.MergedLinear(für zusammengeführte lineare Schichten wie QKV-Projektion)
Erweiterte Funktionen
1. Unterstützung für zusammengeführte lineare Schichten
# 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
)
2. Training von Bias-Vektoren
# 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')
3. Zusammenführen von Gewichten zur Inferenzzeit
# Bewertungsmodus: Gewichte zusammenführen, um Inferenzlatenz zu eliminieren
model.eval()
# Trainingsmodus: Getrennten Zustand wiederherstellen
model.train()
Anwendungsbereiche
- Feinabstimmung großer Modelle: Deutliche Reduzierung der Feinabstimmungskosten
- Multi-Task-Learning: Effizientes Aufgabenwechseln
- Ressourcenbeschränkte Umgebungen: Reduzierung des Speicher- und Speicherbedarfs
- Schnelle Prototypenentwicklung: Beschleunigung des Modelladaptionsprozesses
Ökosystemintegration
- Hugging Face PEFT: Jetzt in die PEFT-Bibliothek von HF integriert
- PyTorch-Ökosystem: Vollständig kompatibel mit dem PyTorch-Framework
- Vortrainierte Modelle: Unterstützt verschiedene gängige vortrainierte Modelle
Zusammenfassung
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.