Home
Login

Microsofts Open-Source-LoRA-Bibliothek, die Low-Rank-Adaptionstechniken für große Sprachmodelle implementiert und die Trainingsparameter bei der Feinabstimmung von Modellen erheblich reduziert.

MITPython 12.1kmicrosoftLoRA Last Updated: 2024-12-17

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

  1. 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
  1. 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
  1. 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.Linearlora.Linear
  • nn.Embeddinglora.Embedding
  • nn.Conv2dlora.Conv2d
  • lora.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

  1. Feinabstimmung großer Modelle: Deutliche Reduzierung der Feinabstimmungskosten
  2. Multi-Task-Learning: Effizientes Aufgabenwechseln
  3. Ressourcenbeschränkte Umgebungen: Reduzierung des Speicher- und Speicherbedarfs
  4. 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.

Star History Chart