Startseite / Artikel / Wie QLoRA große Modelle auf kleinen GPUs feintunt: 4-Bit-Grundlagen

Wie QLoRA große Modelle auf kleinen GPUs feintunt: 4-Bit-Grundlagen

QLoRA von Grund auf verstehen: warum volles Fine-Tuning teuer ist, wie LoRA-Adapter und 4-Bit-Quantisierung zusammenspielen und wann der Ansatz zu Ihrem Projekt passt.

1834 Wörter

Ein großes Sprachmodell feinzutunen klingt nach einem Projekt für ein gut finanziertes Labor: mehrere starke GPUs, Hunderte Gigabyte VRAM, teure Cloud-Infrastruktur und ein Berg an Trainingsdaten. QLoRA, kurz für Quantized Low-Rank Adaptation, geht einen anderen Weg. Man komprimiert das Modell, hängt ein winziges trainierbares Stück an und feintunt mit viel weniger Speicher. Das funktioniert, weil zwei Ideen zusammenkommen, Quantisierung und LoRA, die parameter-effizientes Fine-Tuning gemeinsam für sehr viel mehr Menschen erreichbar machen.

Was Fine-Tuning bedeutet

Ausgangspunkt ist ein vortrainiertes Modell. Es weiß bereits viel, von Sprache und Grammatik bis zu Programmierung und Allgemeinwissen.

Language
Grammar
Programming
General knowledge
Reasoning patterns

Oft soll es sich spezialisieren. Ein Weg macht aus dem Allzweckmodell nach dem Fine-Tuning eine bestimmte Art von Experte:

General LLM
     ↓
Fine-tuning
     ↓
Medical assistant

Ein anderer Weg macht daraus einen anderen Spezialisten:

General LLM
     ↓
Fine-tuning
     ↓
Legal document assistant

Und ein dritter Weg ergibt wieder einen anderen:

General LLM
     ↓
Fine-tuning
     ↓
Agricultural assistant

Der klassische Weg ist, viele oder alle Parameter des Modells zu aktualisieren, und genau da beginnt das Problem.

Warum volles Fine-Tuning teuer ist

Sprachmodelle können Milliarden Parameter haben.

7 Billion parameters
13 Billion parameters
70 Billion parameters

Standard-Fine-Tuning braucht Speicher für mehrere Dinge gleichzeitig, darunter die Gewichte, die Gradienten und noch mehr:

Model weights
+
Gradients
+
Optimizer states
+
Activations

In Summe wird das riesig. Deshalb fragten sich Forschende, ob wirklich jeder Parameter verändert werden muss, und die Antwort lautet oft: nein.

LoRA

LoRA steht für Low-Rank Adaptation. Die ursprünglichen Gewichte bleiben eingefroren, und daneben kommen kleine trainierbare Matrizen hinzu.

Original Model
      │
      │ frozen
      ▼
 ┌─────────────┐
 │ Base Weights│
 └─────────────┘
      +
 ┌─────────────┐
 │ LoRA Adapter │ ← Train this
 └─────────────┘

Mathematisch betrachtet wird eine Gewichtsmatrix W normalerweise direkt verändert. LoRA lässt sie in Ruhe und lernt eine zusätzliche Anpassung, sodass die wirksamen Gewichte W' = W + BA werden, wobei A und B viel kleinere Matrizen sind. Am Ende trainiert man einen kleinen Bruchteil der Parameter statt Milliarden.

Das verbleibende Problem

LoRA verkleinert die Menge der trainierbaren Parameter, aber das Basismodell muss trotzdem in den Speicher geladen werden. Nehmen wir ein Modell, dessen Gewichte als 16-Bit-Zahlen gespeichert sind. Jedes Gewicht belegt 2 Byte, ein 7B-Modell braucht also grob 7B x 2, etwa 14 GB, allein für die Gewichte. Das Training legt dann noch etwas obendrauf. Was, wenn man das Modell selbst verkleinern könnte? Genau das ist Aufgabe der Quantisierung.

Quantisierung

Quantisierung bedeutet, Zahlen mit weniger Bits zu speichern. Ein Parameter kann zunächst als 32-Bit-Gleitkommazahl vorliegen.

FP32
32 bits

Von dort lässt er sich in immer kleinere Formate überführen:

      ↓FP16
16 bits      ↓INT8
8 bits      ↓4-bit
4 bits

Eine kompaktere Darstellung statt einer hochpräzisen senkt den Speicherbedarf spürbar.

16-bit model
      ↓
4-bit quantized model
      ↓
Much lower memory requirement

Der Haken: Geringere Präzision kann die Modellqualität beeinträchtigen. Die Kunst besteht darin, Speicher zu sparen, ohne die Leistung zu ruinieren, auf die es ankommt.

Beides zusammen

Kombiniert man die beiden Konzepte, erhält man QLoRA.

Large LLM
                 │
                 ▼
        ┌─────────────────┐
        │ 4-bit Quantize  │
        └────────┬────────┘
                 │
                 ▼
        Frozen Base Model
                 │
                 +
          ┌────────────┐
          │ LoRA       │
          │ Adapters   │
          └─────┬──────┘
                │
                ▼
        Train Only Adapters

Das Rezept ist kurz: das Basismodell quantisieren, eingefroren lassen und kleine LoRA-Adapter trainieren.

Warum das wichtig ist

Vergleichen wir beide Ansätze an einem 7B-Modell. Klassisches Fine-Tuning sieht so aus:

Traditional Fine-Tuning
7B Model
   ↓
Train everything
   ↓
Huge memory requirement

QLoRA geht einen anderen Weg:

7B Model
   ↓
4-bit quantization
   ↓
Freeze base model
   ↓
Add small LoRA adapters
   ↓
Train adapters

Der Speicherbedarf kann drastisch sinken. Deshalb bekam QLoRA so viel Aufmerksamkeit von Forschenden und Entwicklern ohne Zugang zu großen GPU-Clustern.

Was beim Training passiert

Angenommen, Ihre Trainingsdaten enthalten eine Nutzeranfrage, die um eine Erklärung der Photosynthese für ein zehnjähriges Kind bittet:

User:
Explain photosynthesis to a 10-year-old.

und eine passende Antwort des Assistenten:

Assistant:
Photosynthesis is the process...

Die Daten durchlaufen folgende Pipeline:

Training Dataset
       ↓
Tokenization
       ↓
4-bit Base Model
       ↓
LoRA Layers
       ↓
Forward Pass
       ↓
Loss
       ↓
Backpropagation
       ↓
Update LoRA Parameters

Entscheidend ist, dass das riesige Basismodell nicht vollständig aktualisiert wird. Nur die trainierbaren LoRA-Parameter werden es.

Ein genauerer Blick auf die Mathematik

Nehmen wir eine Schicht mit den ursprünglichen Gewichten W. LoRA fügt eine Anpassung delta W = BA hinzu, die angepasste Schicht ist also W' = W + delta W, was dasselbe ist wie W + BA. Der Rang von A und B wird bewusst klein gehalten. So sieht eine Schicht ursprünglich aus:

Original:

während die LoRA-Version nur aus diesen zwei schmalen Matrizen besteht:

4096 × 4096LoRA:4096 × 8
+
8 × 4096

Der Unterschied ist groß. Statt 4096 x 4096 Parameter lernt LoRA etwa 4096 x 8 + 8 x 4096, also weit weniger.

Mehr als 4-Bit-LoRA

Die ursprüngliche QLoRA-Arbeit brachte mehrere Techniken mit, die zusammenwirken. Die wichtigsten stehen unten.

4-bit NormalFloat

QLoRA nutzt NF4-Quantisierung (NormalFloat 4-bit), die für Gewichte neuronaler Netze entworfen wurde, die einer Normalverteilung folgen.

Doppelte Quantisierung

Quantisierung braucht Skalierungsinformationen. QLoRA quantisiert auch diese Quantisierungskonstanten, was zusätzlichen Speicher spart.

Paged Optimizers

Paged Optimizers helfen bei der Verwaltung des GPU-Speichers und glätten die Speicherspitzen, die während des Trainings auftreten.

Zusammengenommen sieht die vereinfachte Formel so aus:

QLoRA
=
4-bit Quantization
+
LoRA
+
Memory-efficient training techniques

Was am Ende herauskommt

Ein wichtiger Vorteil von Fine-Tuning im LoRA-Stil: Der Adapter lässt sich separat speichern.

Base Model
     +
LoRA Adapter
     =
Fine-Tuned Model

Statt einer weiteren vollständigen Kopie des riesigen Basismodells speichern Sie einen relativ kleinen Adapter. Das erleichtert Experimente. Ein Basismodell kann mehrere Aufgaben bedienen, jede mit eigenem Adapter:

Base Model
     │
     ├── Medical Adapter
     ├── Coding Adapter
     ├── Legal Adapter
     └── Agriculture Adapter

QLoRA, LoRA und volles Fine-Tuning im Vergleich

  • Basismodell: wird beim vollen Fine-Tuning aktualisiert, bei LoRA und QLoRA eingefroren.
  • Präzision der Basis: beim vollen Fine-Tuning und bei LoRA meist höher, bei QLoRA üblicherweise 4 Bit.
  • Trainierbare Parameter: riesig beim vollen Fine-Tuning, wenige bei LoRA und QLoRA.
  • GPU-Speicher: sehr hoch beim vollen Fine-Tuning, geringer bei LoRA, deutlich geringer bei QLoRA.
  • Adapter: keiner beim vollen Fine-Tuning, ja bei LoRA und QLoRA.
  • Komplexität: hoch beim vollen Fine-Tuning, geringer bei LoRA, mittel bei QLoRA.
  • Für begrenzte GPUs: schwierig mit vollem Fine-Tuning, besser mit LoRA und QLoRA.

QLoRA bringt nicht wie von Zauberhand jedes große Modell auf jede GPU. Der tatsächliche Speicherbedarf hängt von Modellgröße, Sequenzlänge, Batchgröße, Quantisierungsmethode, Optimizer, LoRA-Konfiguration, Framework und GPU-Architektur ab. Die Einsparungen können trotzdem erheblich sein.

Eine typische QLoRA-Toolchain

Ein verbreiteter Stack baut auf PyTorch auf:

PyTorch
                │
        ┌───────┴────────┐
        │                │
 Transformers          PEFT
        │                │
        └───────┬────────┘
                │
          bitsandbytes
                │
                ▼
              QLoRA

Die üblichen Bausteine sind:

  • PyTorch, das Deep-Learning-Framework.
  • Transformers, das vortrainierte Sprachmodelle liefert.
  • PEFT für parameter-effizientes Fine-Tuning.
  • bitsandbytes für Quantisierung und speichersparende Operationen.

Ein Beispiel

Angenommen, Sie wollen AgriGPT, ein Frage-Antwort-Modell für die Landwirtschaft. Sie starten mit einem vortrainierten LLM und bauen darauf so auf:

Pretrained LLM
      ↓
4-bit quantization
      ↓
Add LoRA adapters
      ↓
Agriculture dataset
      ↓
QLoRA training
      ↓
Agriculture adapter

Das Modell lässt sich nun auf landwirtschaftliche Gespräche spezialisieren, ohne es komplett feinzutunen. Ein Nutzer könnte fragen:

User:
My tomato leaves have yellow spots. What could be the reason?

und das Modell würde etwa so antworten:

Model:
Possible causes include...

Der springende Punkt: Die Spezialisierung stammt größtenteils aus den gelernten Adapter-Parametern.

Wann QLoRA passt

QLoRA passt gut in diesen Situationen:

  • Das Modell ist ein Open-Source-LLM, das Sie feintunen möchten.
  • Ihr GPU-Speicher ist knapp.
  • Sie suchen gezielt parameter-effizientes Training.
  • Es werden mehrere aufgabenspezifische Adapter gebraucht.
  • Sie experimentieren mit domänenspezifischen Modellen.
  • Die Trainingskosten sollen niedrig bleiben.

Schlecht passt es, wenn Ihr Ziel verlangt, das zugrunde liegende Modell von Grund auf neu zu trainieren oder wesentlich zu verändern.

Kein Training von Grund auf

Diese Unterscheidung ist sehr wichtig. Training von Grund auf beginnt so:

Training from scratch
Random initialization
        ↓
Huge dataset
        ↓
Train entire model

QLoRA beginnt mit etwas, das bereits existiert:

Pretrained model
        ↓
Quantize
        ↓
Freeze
        ↓
Add LoRA
        ↓
Fine-tune adapter

QLoRA setzt voraus, dass Sie bereits ein vortrainiertes Modell haben.

Die größere Idee

QLoRA verändert, wie man über AI-Entwicklung denkt. Die Frage lautet nicht mehr, wie man ein gigantisches Modell trainiert, sondern wie man ein vorhandenes Modell effizient an das eigene Problem anpasst. Für Studierende, Forschende, Startups und Solo-Entwickler ist das eine weitaus praktischere Frage.

Kleinere Hardware, größere Experimente

Techniken wie QLoRA machen ernsthafte Modellexperimente zugänglicher. Die Zukunft ist vielleicht nicht einfach nur das hier:

Bigger Model
+
More GPUs

sondern sieht zunehmend so aus:

Efficient Models
+
Efficient Fine-Tuning
+
Better Data
+
Better Evaluation
+
Specialized Adapters

Spannend ist nicht nur, Modelle größer zu machen, sondern zu lernen, sie mit weniger Ressourcen nützlicher zu machen.

Wenig ändern, viel gewinnen

QLoRA ist Quantisierung plus LoRA plus Speichereffizienz. Das Basismodell wird auf geringere Präzision komprimiert, bleibt eingefroren und wird über kleine trainierbare LoRA-Matrizen angepasst. Diese Kombination macht das Fine-Tuning großer Sprachmodelle deutlich zugänglicher. Und die wichtigste Lehre ist vielleicht, dass man nicht immer das ganze Modell ändern muss, um zu ändern, was es kann. Manchmal genügt eine kleine, sorgfältig trainierte Ergänzung.