Fine-Tuning mit LoRA & QLoRA
Fine-Tuning stimmt Verhalten, nicht Wissen. Es ist das richtige Werkzeug, wenn das Model den Stoff kennt, aber den falschen Tanz aufführt: falsches Ausgabeformat, falscher Ton, falscher Domänendialekt, falsche Verweigerungs-Kalibrierung. Es ist das falsche Werkzeug für „kennt meine Dokumente“ — das ist Retrieval: RAG.
Fine-Tunen oder nicht
| Ziel | Greifen Sie zu |
|---|---|
| Fragen aus meinen Dokumenten beantworten | RAG |
| Immer mein exaktes JSON/XML-Format ausgeben | LoRA — oder grammatik-beschränkte Dekodierung |
| In konsistentem Hausstil schreiben | LoRA |
| Legitime Domänenanfragen nicht mehr verweigern | LoRA, mit sorgfältigen Daten |
| Den Dialekt meiner Domäne flüssig sprechen | LoRA, dann RAG obendrauf |
| Besser denken | Größeres oder besseres Base-Modell — Tuning fügt keinen IQ hinzu |
Kann es ein Prompt oder ein Schema, bevorzugen Sie den Prompt oder das Schema. Tunen Sie, wenn Sie sich dabei ertappen, dieselben 300 Token Anweisungen in jeden Aufruf zu kleben.
LoRA in einem Absatz
Frieren Sie jedes Basisgewicht ein. Fügen Sie für jede Ziel-Gewichtsmatrix zwei kleine trainierbare Matrizen hinzu — A (r×d) und B (d×r) — und trainieren Sie nur diese. Das Update ist niederrangig:
W' = W + (alpha / r) · B·A # A ist r×d, B ist d×r, Rang r << d
Konkret: Eine Matrix mit d = 4096 bei Rang r = 16 braucht 2 × 4096 × 16 = 131k Adapter-Parameter statt 4096² ≈ 16,8M dichte — 0,8% dieser Matrix. Über ein 7–8B-Modell hinweg summieren sich Adapter auf ~40–80M Parameter: 0,5–1% der Basis, ein paar hundert MB. Das ist genug Kapazität, um Stil und Format hart zu bewegen, weil diese Verhaltensweisen in stark niederrangigen Richtungen leben.
QLoRA: eine Consumer-Karte
QLoRA hält die eingefrorene Basis während des Trainings auf 4-Bit (NF4) quantisiert und fährt die Adapter in 16-Bit. Funktionierende Zahlen auf aktuellen Stacks: Ein 7–8B-Modell QLoRA-trainiert auf einer einzigen 24-GB-GPU; ein 3B trainiert bequem in 8 GB. Gradient-Checkpointing und gepagte Optimizer erledigt das Werkzeug — was Sie beisteuern, ist die Budgetrechnung: VRAM-Mathematik.
Daten schlagen alles
500–5.000 hochwertige Paare schlagen 100k geschabte Paare, jedes Mal. Die Regeln, die zählen:
- Ein konsistentes Format. Nutzen Sie exakt das Chat-Template, mit dem Sie serven werden — ein Train/Serve-Template-Missverhältnis macht den ganzen Lauf zunichte.
- Qualität vor Masse. Jedes Paar sollte eine Ausgabe sein, die Sie vom Model akzeptieren würden. Deduplizieren; faule Beispiele wegwerfen.
- Abdeckung. Schließen Sie die Fälle ein, in denen das Model ablehnen oder besonders behandeln soll — sonst verallgemeinert es sein neues Verhalten auf alles.
- Kontaminations-Checks. Stellen Sie sicher, dass Eval-Fragen nicht in den Trainingsdaten erscheinen — sonst benoten Sie Auswendiglernen.
- Zurückgehaltenes Eval-Set. 50–100 Beispiele, auf denen Sie nie trainieren, vor und nachher benotet.
Wie ein Paar aussieht (das Messages-Format, das die meisten Werkzeuge konsumieren):
{"messages": [{"role": "system", "content": "You are a 1998-era equipment manual assistant."},
{"role": "user", "content": "How do I reset the service counter?"},
{"role": "assistant", "content": "Press MENU and hold for 3 seconds..."}]}
Werkzeuge
| Werkzeug | Warum wählen |
|---|---|
| Unsloth | schnellste Einzel-GPU-Trainer, kostenlose Community-Notebooks — der leichte Start |
| Axolotl | konfigurationsgetrieben, breite Datensatzformat-Unterstützung, reproduzierbare Rezepte |
| LLaMA-Factory | GUI plus CLI, starkes multilinguales Datensatz-Ökosystem |
Zum Zeitpunkt dieses Textes werden alle drei aktiv gepflegt: unsloth, axolotl, llama-factory.
Hyperparameter, die wirklich zählen
Nach Wirkung geordnet:
- Lernrate — 1e-4 bis 2e-4 ist für QLoRA das vernünftige Band; zu hoch ist die übliche Ursache für Brei.
- Epochen — 1–3. Mehr ist dort, wo der Jasager herkommt.
- Rang / Alpha — r 8–32 mit Alpha 16–32 deckt die meisten Verhaltungs-Justagen ab; größerer Rang für domänenlastige Verschiebungen.
- Kontextlänge — auf Ihr längstes echtes Beispiel setzen, nicht auf den Trainer-Default.
- Batchgröße — 1–8 ist für QLoRA auf einer Karte normal; sie ist ein Durchsatzregler, keiner für Qualität.
Enttäuscht ein Lauf, reparieren Sie zuerst die Daten, zweitens die Lernrate, zuletzt den Rang.
Zeit und Kosten
QLoRA auf 2.000 Paaren, 3 Epochen, 7–8B-Modell: Erwarten Sie 1–3 Stunden auf einer Karte der RTX-3090/4090-Klasse. Das ist Strom, keine API-Rechnungen, und Iteration ist über Nacht im Schlechtfall. Deshalb ist lokales Fine-Tuning ein Hobby, kein Beschaffungsprozess.
Planen Sie Iteration ein: Der erste Lauf lehrt Sie die Datenprobleme, der zweite ist der, den Sie behalten.
Evaluieren, bevor Sie ausliefern
Fahren Sie eine feste Suite aus 30–50 Prompts — inklusive des zurückgehaltenen Sets — vorher und nachher; diffen Sie die Ausgaben Seite an Seite. Dann Regressions-Check beim allgemeinen Chat: Der klassische Fehlschlag ist ein domänen-getuntes Model, das alles im Bug-Bericht-Format beantwortet. Fiel die allgemeine Qualität, nutzen Sie weniger Epochen, eine niedrigere Lernrate oder mischen 10–30% allgemeine Instruktionsdaten in den Lauf.
Loss-Kurven dienen dem Erkennen von Divergenz, nicht der Benotung: Der Trainings-Loss sollte fallen und abflachen. Die Eval-Suite ist der Schiedsrichter.
Exportieren und serven
Zwei Wege von einem trainierten Adapter:
- LoRA in die Basis mergen bei fp16, dann für llama.cpp nach GGUF konvertieren — das forenfreundliche Artefakt: eine Datei, jede Engine: Modellformate, Quantisierung.
- Den Adapter getrennt halten für transformers/vLLM, die Basis + Adapter zur Laufzeit laden — billiger zu iterieren, engine-spezifisch.
Fehlermodi
- Overfit / „Jasager“ — wiederholt Ihren Prompt nach, stimmt allem zu; Trainings-Loss niedrig, Eval schlechter. Fix: weniger Epochen, niedrigere LR, diversere Daten.
- Katastrophales Vergessen — Domänenkönnen rauf, allgemeine Fähigkeit runter. Fix: allgemeine Daten beimischen; LR senken.
- Template-Drift — mit einem Chat-Template trainiert, mit einem anderen servt; die Symptome sind die Klassiker in Fehlerbehebung.
DPO nach SFT
Stimmt das Format, aber die Präferenzen liegen daneben — zu weitschweifig, falscher Ton, übermäßiges Verweigern —, justiert ein kleiner DPO-Lauf auf Präferenzpaaren (gewählte gegen abgelehnte Antworten) das Verhalten ohne einen weiteren SFT-Durchgang. Billig, stabil und die Standard-Zweitstufe des SFT-dann-DPO-Rezepts.
Verwandt: RAG · Modellformate · Quantisierung · VRAM-Mathematik