Wie funktioniert ein LLM wirklich?

Zusammenfassung des Gesprächs — von der Grundfunktion über Training und Tokenisierung bis zum praktischen Fine-Tuning-Beispiel und Deployment.

SCC Informationssysteme GmbH · 8. August 2026
Grundlagen

Das Grundprinzip: Text vorhersagen

Ein LLM sagt immer nur eine Sache voraus: welches Token (Wort oder Wortteil) als nächstes am wahrscheinlichsten kommt. Diese Vorhersage wird Token für Token wiederholt, bis eine vollständige Antwort entsteht.

Frage + bisherige Tokens Modell (Gewichte) Wahrscheinlichkeiten Paris Berlin und … ca. 50.000 weitere Token wählen: "Paris" wird angehängt → nächster Schritt

Jeder Schritt erzeugt eine Wahrscheinlichkeit über alle ca. 50.000 möglichen Tokens; das wahrscheinlichste wird angehängt, dann beginnt der Zyklus erneut.

Wichtig: Es wird kein Text „nachgeschlagen“. Jedes einzelne Token wird bei jeder Anfrage neu berechnet — auf Basis der trainierten Gewichte, nicht aus einem gespeicherten Archiv.
Training

Wie Training abläuft: der Lernzyklus

Damit die Gewichte diese Wahrscheinlichkeiten sinnvoll berechnen können, müssen sie zuvor trainiert werden. Das passiert in einem sich ständig wiederholenden, vierstufigen Zyklus:

1. Vorhersage Forward Pass 2. Fehler messen Loss 3. Rückverfolgung Backpropagation 4. Anpassung Gradient Descent Milliarden Wiederholungen

Der Trainingsablauf in Grundzügen

Training bedeutet: Die Gewichte selbst werden Schritt für Schritt verändert, basierend auf einem wiederkehrenden vierstufigen Zyklus.

Erster Schritt, die Vorhersage (Forward Pass): Man gibt dem Modell einen Textausschnitt, zum Beispiel „Der Himmel ist“, und lässt es vorhersagen, welches Wort als nächstes kommt. Mit den aktuellen (anfangs zufälligen) Gewichten kommt dabei irgendeine Wahrscheinlichkeitsverteilung heraus, am Anfang meist kompletter Unsinn.

Zweiter Schritt, der Fehler (Loss): Man kennt aus dem echten Trainingstext das tatsächliche nächste Wort (hier zum Beispiel „blau“). Man vergleicht die Vorhersage des Modells mit diesem echten Wort und berechnet einen Zahlenwert dafür, wie falsch die Vorhersage war — das nennt man den Loss (Verlust).

Dritter Schritt, die Rückverfolgung (Backpropagation): Jetzt kommt die eigentliche mathematische Arbeit. Das Verfahren berechnet für jedes einzelne der Milliarden Gewichte im Netzwerk, wie stark und in welche Richtung dieses eine Gewicht zu dem gemessenen Fehler beigetragen hat — durch systematisches Rückwärts-Durchrechnen des Netzwerks, daher der Name.

Vierter Schritt, die Anpassung (Gradient Descent): Basierend auf dieser Information wird jedes Gewicht ein kleines bisschen in die Richtung verschoben, die den Fehler beim nächsten Mal etwas kleiner machen würde — nur ein kleiner Schritt, nicht die ganze Korrektur auf einmal.

Kein Mensch schreibt dabei „richtige Antworten“ vor: In der ersten Trainingsphase liefert der Trainingstext selbst die Lösung — man verdeckt das nächste Wort und lässt es vom Modell vorhersagen. Das nennt man selbstüberwachtes Lernen, weil die Daten sich quasi selbst korrigieren, ohne dass ein Mensch jede einzelne Antwort im Voraus bewerten muss.

Training

Die drei Trainingsphasen

Ein fertiges Chat-Modell wie dieses hier entsteht nicht in einem Schritt, sondern in drei aufeinanderfolgenden Phasen:

Pretraining Milliarden Texte Nächstes-Wort-Vorhersage → Sprachverständnis Supervised Fine-Tuning Von Menschen geprüfte Frage/Antwort-Beispiele → Dialogfähigkeit RLHF Menschen bewerten mehrere Antworten → hilfreich & sicher
Modellqualität

Parameter (Gewichte) vs. Datenqualität

Die Anzahl der Gewichte (Parameter) bestimmt die Kapazität eines Modells — wie viele Muster es theoretisch abbilden könnte. Ob diese Kapazität gut genutzt wird, hängt von der Qualität der Trainingsdaten ab.

Kleines Modell, gute Daten wenig Platz, aber alles hochwertig gefüllt Großes Modell, schlechte Daten viel Platz, aber mit Fehlern/Unsinn gefüllt

Mehr Gewichte = mehr Kapazität (das Regal ist größer). Ob das Ergebnis gut ist, entscheidet aber, was hineingestellt wird — nicht wie viel Platz vorhanden ist.

Weitere Faktoren neben der Datenqualität: Trainingsmethode, Verhältnis Modellgröße/Datenmenge (Chinchilla-Skalierungsgesetze), die Fine-Tuning-Phase und die Netzwerkarchitektur selbst.
Hardware

Warum Grafikkarten (GPUs)?

Die Mathematik neuronaler Netze besteht fast nur aus Matrizenmultiplikationen — vielen kleinen, voneinander unabhängigen Rechnungen, die gleichzeitig statt nacheinander ausgeführt werden können. Genau dafür wurden GPUs gebaut.

CPU: wenige, starke Kerne z.B. 8–64 Kerne, sequenziell stark GPU: tausende einfache Kerne z.B. 10.000+ Kerne, massiv parallel

Weil dieselbe Rechnung (Multiplizieren + Addieren) millionenfach parallel für jedes Gewicht gleichzeitig anfällt, ist eine GPU hier oft um das Hundertfache schneller als eine CPU — der ursprüngliche Zweck (Bilddarstellung, viele Pixel gleichzeitig) passt zufällig ideal zum Training neuronaler Netze.

Tokenisierung

Tokenisierung (BPE) im Detail

Bevor ein Satz verarbeitet wird, wird er in Tokens zerlegt — Bausteine aus einer festen, vorab erstellten Liste (dem Vokabular, meist 30.000–100.000 Einträge). Das Verfahren dahinter heißt Byte-Pair-Encoding (BPE).

Live-Beispiel aus unserem Gespräch

Mit einem kleinen, selbst trainierten BPE-Tokenizer (Trainingstext: ein paar Sätze über Hauptstädte) wurde der Satz „Wie heisst die Hauptstadt von Frankreich“ so zerlegt:

Hauptstadt hauptstad t</w> → nur 2 Tokens (im Training häufig → stark verschmolzen) Frankreich f r an k r ei ch </w> → 8 Tokens (im Training seltener → kaum verschmolzen) Bei einem echten, auf Milliarden Wörtern trainierten Tokenizer wären beide Wörter vermutlich fast vollständige, einzelne Tokens — das Prinzip bleibt aber identisch.
Häufigkeit im Trainingstext bestimmt die Feinheit der Zerlegung — nicht Bedeutung oder Grammatik. Als Rückfalloption existieren immer auch einzelne Buchstaben/Bytes, daher kann jede Zeichenfolge tokenisiert werden, auch kryptische oder neue Wörter.

Neologismen werden nicht automatisch neue Tokens

Die Tokenliste wird einmalig festgelegt und wächst danach nicht mehr automatisch. Neue Wörter werden aus vorhandenen kleineren Bausteinen zusammengesetzt; das "Wissen" darüber entsteht in den Gewichten, nicht als neuer Vokabeleintrag.

Tokenisierung

Token, Embeddings und Gewichte

Nur der allererste Schritt ist konkret zeigbar: Jeder Token hat eine feste ID, die einer Zeile in der sogenannten Embedding-Tabelle entspricht (Teil der Gewichte). Alles danach verteilt sich über Milliarden gemeinsam genutzter Gewichte und ist nicht mehr einem einzelnen Token oder Konzept zuordenbar.

"Paris" ID 14582 Embedding-Zeile [0.42, -0.11, …] konkret zeigbar ✓ Transformer-Schichten Attention + Feed-Forward Milliarden gemeinsam genutzter Gewichte nicht einem Konzept zuordenbar ✗ → Forschungsfeld „Interpretability“
Nachtraining

Catastrophic Forgetting

Bei fester Modellgröße ist irgendwann alle Kapazität „verplant“. Trainiert man ein fertiges Modell stark auf neue Inhalte nach, kann es alte Fähigkeiten verlieren.

Genauigkeit Trainingsschritte → alte Fähigkeit neue Fähigkeit optimaler Stopppunkt

Gemessen wird das über feste Benchmark-Testsets, verglichen vor und nach dem Nachtraining — nicht durch wiederholtes Stellen derselben Frage.

Gegenmaßnahmen in der Praxis

TechnikWirkung
Replay / Rehearsalalte Trainingsdaten weiterhin mit einmischen
Niedrige Lernratenur sanfte, kleine Gewichtsanpassungen
LoRA / AdapterBasisgewichte bleiben komplett eingefroren
Elastic Weight Consolidationwichtige alte Gewichte werden gezielt geschützt
Fine-Tuning

LoRA: effizientes Fine-Tuning

Statt aller Milliarden Gewichte werden bei LoRA nur kleine, zusätzliche Gewichtsmatrizen trainiert. Das Basismodell bleibt komplett eingefroren.

Basismodell Milliarden Gewichte 🔒 eingefroren ~99,7 % aller Gewichte LoRA-Adapter klein, trainierbar (~0,3 %) nur diese Gewichte ändern sich beim Training

Vorteil: geringer Rechenaufwand (oft eine einzelne GPU statt eines Rechenzentrums) und geringes Risiko für Catastrophic Forgetting, weil das Original unangetastet bleibt. Mit QLoRA wird das Basismodell zusätzlich 4-bit-quantisiert, um Speicher zu sparen.

Praxisbeispiel

Von Kundengesprächen zur Trainingsdatei

Der komplette praktische Weg, den wir durchgegangen sind:

Rohe Chats / E-Mails Kuratieren & Filtern JSONL-Datei (instruction/output) finetune.py (LoRA-Training) Eigenes Modell

Trainingsbeispiel (Format wie in training_data_beispiel.jsonl):

{"instruction": "Ein Kunde fragt: 'Unterstützt eure Software auch die DATEV-Schnittstelle?'", "input": "", "output": "Ja, unsere Software verfügt über eine zertifizierte DATEV-Schnittstelle …"}

Das Trainingsskript nutzt transformers, peft (LoRA) und trl und durchläuft für jedes Beispiel genau den Lernzyklus von oben. Faustregel: einige hundert bis wenige tausend sorgfältig geprüfte Beispiele reichen meist für spürbare Verbesserungen.

Praxisbeispiel

Der komplette Trainingscode

Das vollständige, kommentierte finetune.py-Skript aus unserem Gespräch — nutzt transformers, peft (LoRA/QLoRA) und trl, lädt das Basismodell in 4-bit, konfiguriert LoRA, trainiert mit training_data_beispiel.jsonl und testet das Ergebnis am Ende direkt.

"""
Beispiel-Skript: Fine-Tuning eines offenen LLM (z. B. Mistral-7B oder Llama-3-8B)
mit LoRA (parameter-effizientes Fine-Tuning) für einen firmenspezifischen
Anwendungsfall (hier: IT-Support / Kundenkommunikation für eine Softwarefirma).

Benötigte Bibliotheken (Installation siehe README.md):
    pip install transformers peft trl datasets accelerate bitsandbytes torch

Voraussetzung: Eine GPU mit ausreichend VRAM (siehe README.md für Richtwerte).
Für ein 7B-Modell mit 4-bit-Quantisierung (QLoRA) reichen oft schon
16-24 GB VRAM (z. B. eine RTX 4090 oder eine Cloud-GPU wie A10/A100).

Dieses Skript ist bewusst einfach gehalten, um den grundsätzlichen Ablauf zu
zeigen. Für produktive Projekte sollte man zusätzlich Validierungs-Splits,
Logging (z. B. Weights & Biases) und Hyperparameter-Suche ergänzen.
"""

import torch
from datasets import load_dataset
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    BitsAndBytesConfig,
    TrainingArguments,
)
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
from trl import SFTTrainer, SFTConfig

# ---------------------------------------------------------------------------
# 1. Basis-Modell festlegen
# ---------------------------------------------------------------------------
# Ein frei verfügbares, offenes Modell von Hugging Face. Für den echten
# Gebrauch muss man ggf. den Zugriff beim Anbieter (z. B. Meta für Llama)
# einmalig beantragen; Mistral-Modelle sind meist ohne Freigabe nutzbar.
BASE_MODEL = "mistralai/Mistral-7B-Instruct-v0.3"

# ---------------------------------------------------------------------------
# 2. Modell in 4-bit laden (QLoRA) -> spart massiv Grafikspeicher
# ---------------------------------------------------------------------------
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
tokenizer.pad_token = tokenizer.eos_token

model = AutoModelForCausalLM.from_pretrained(
    BASE_MODEL,
    quantization_config=bnb_config,
    device_map="auto",
)
model = prepare_model_for_kbit_training(model)

# ---------------------------------------------------------------------------
# 3. LoRA konfigurieren
# ---------------------------------------------------------------------------
# Statt aller Milliarden Gewichte werden nur kleine, zusätzliche
# Gewichtsmatrizen trainiert ("r" bestimmt deren Größe/Kapazität).
# Die ursprünglichen Gewichte bleiben eingefroren -> geringes Risiko
# für catastrophic forgetting, geringer Rechenaufwand.
lora_config = LoraConfig(
    r=16,
    lora_alpha=32,
    lora_dropout=0.05,
    bias="none",
    task_type="CAUSAL_LM",
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# Beispielausgabe: "trainable params: 20,971,520 || all params: 7,262,703,616
#                   || trainable%: 0.29 %"
# -> Es werden nur ca. 0,3 % aller Gewichte tatsächlich verändert.

# ---------------------------------------------------------------------------
# 4. Trainingsdaten laden
# ---------------------------------------------------------------------------
# Erwartetes Format: JSON-Lines-Datei, eine Zeile = ein Trainingsbeispiel
# mit den Feldern "instruction", "input" (optional) und "output".
# Siehe training_data_beispiel.jsonl für ein konkretes Beispiel.
dataset = load_dataset("json", data_files="training_data_beispiel.jsonl", split="train")


def formatiere_prompt(beispiel):
    """Bringt ein Trainingsbeispiel in das Chat-/Prompt-Format des Modells."""
    if beispiel.get("input"):
        prompt = f"{beispiel['instruction']}\n\n{beispiel['input']}"
    else:
        prompt = beispiel["instruction"]

    text = (
        f"<s>[INST] {prompt} [/INST] {beispiel['output']}</s>"
    )
    return {"text": text}


dataset = dataset.map(formatiere_prompt)

# ---------------------------------------------------------------------------
# 5. Trainings-Konfiguration
# ---------------------------------------------------------------------------
sft_config = SFTConfig(
    output_dir="./ergebnis-finetuned-modell",
    num_train_epochs=3,
    per_device_train_batch_size=2,
    gradient_accumulation_steps=4,
    learning_rate=2e-4,          # bewusst niedrig, siehe Kapitel zu
                                  # catastrophic forgetting im Gespräch
    logging_steps=5,
    save_strategy="epoch",
    bf16=True,
    max_seq_length=1024,
    dataset_text_field="text",
    report_to="none",            # alternativ z. B. "wandb" für Logging-Dashboard
)

# ---------------------------------------------------------------------------
# 6. Training starten
# ---------------------------------------------------------------------------
trainer = SFTTrainer(
    model=model,
    args=sft_config,
    train_dataset=dataset,
)

trainer.train()

# ---------------------------------------------------------------------------
# 7. Ergebnis speichern (nur die kleinen LoRA-Gewichte, wenige MB)
# ---------------------------------------------------------------------------
trainer.save_model("./ergebnis-finetuned-modell")
tokenizer.save_pretrained("./ergebnis-finetuned-modell")

print("Fertig. Das feinabgestimmte Modell (LoRA-Adapter) liegt unter "
      "./ergebnis-finetuned-modell")

# ---------------------------------------------------------------------------
# 8. Kurzer Test nach dem Training
# ---------------------------------------------------------------------------
frage = "Ein Kunde fragt: 'Was kostet eine zusätzliche Nutzerlizenz?'"
eingabe = tokenizer(f"<s>[INST] {frage} [/INST]", return_tensors="pt").to(model.device)
ausgabe = model.generate(**eingabe, max_new_tokens=150)
print(tokenizer.decode(ausgabe[0], skip_special_tokens=True))
Praxisbeispiel

Templating statt manueller Dateneingabe

Wiederkehrende Satzstrukturen ("Unterstützt ihr X?") müssen nicht von Hand dupliziert werden. Ein Template + eine Liste von Themen/Fakten erzeugt die JSONL-Zeilen automatisch.

Themenliste • DATEV → Fakt A • Datenschutzbeauftr. → Fakt B • Schülerpraktikum → Fakt C + 3-5 Frageformulierungen pro Thema generate_ training_data.py training_data_generiert.jsonl 10 fertige Zeilen aus 3 Themen × Formulierungen Antworten (Fakten) müssen weiterhin von Menschen geprüft/eingetragen werden

Sonderfall: geschäftskritische Mehrdeutigkeit

Allgemeine Tippfehler muss man nicht künstlich einbauen — das übernimmt bereits das Grundtraining des Basismodells. Gezielt lohnt es sich aber bei Tippfehlern, die zufällig ein anderes echtes Wort ergeben (z. B. „DATE-Schnittstelle“ statt „DATEV-Schnittstelle“) — hier hilft ein gezielt ergänztes Trainingsbeispiel, echte Missverständnisse zu vermeiden.

Hardware

Speicherbedarf & Quantisierung

Ein Modell muss nicht zwingend komplett in den Grafikspeicher passen. device_map="auto" verteilt es intelligent:

GPU-Speicher schnell meiste Schichten RAM (CPU) mittel schnell restliche Schichten Festplatte langsam letzte Reserve Erst wenn alle drei zusammen nicht reichen: expliziter „Out of Memory“-Fehler

Weitere Stellschrauben: stärkere Quantisierung (4-bit, 3-bit), kleineres Modell, Gradient Checkpointing, kleinere Batch-Größe/Sequenzlänge. Für schwächere Laptops eignen sich zusätzlich Werkzeuge wie Unsloth (deutlich geringerer Speicherbedarf) oder bei Apple-Silicon-Rechnern MLX/llama.cpp mit Metal-Unterstützung.

Architekturentscheidung

RAG vs. Fine-Tuning

RAGFine-Tuning
Verändert die Gewichte?NeinJa
Gut füraktuelle, häufig wechselnde FaktenTonfall, Format, Verhalten
Aufwandgering (Vektordatenbank + Kontext)höher (Trainingsdaten + GPU)
Risiko Forgettingkeins (Modell bleibt unverändert)vorhanden, aber durch LoRA reduzierbar

In der Praxis oft kombiniert: ein leicht feingetuntes Modell für Stil und Verhalten, plus RAG für aktuelle, firmenspezifische Fakten.

Der zentrale Unterschied zu RAG, nochmal zusammengefasst

Bei echtem Training verändern sich die Gewichte selbst dauerhaft, durch den Zyklus aus Vorhersagen, Fehler messen und anpassen, wiederholt über enorme Datenmengen und enorme Rechenzeit (das dauert bei großen Modellen Wochen bis Monate auf tausenden spezialisierten Chips). Bei RAG bleibt das Modell exakt so, wie es ist — es bekommt lediglich zur Laufzeit einer einzelnen Anfrage zusätzlichen Text mitgeliefert, der nach Beantwortung der Frage sofort wieder „vergessen“ wird, weil eben nichts an den Gewichten verändert wurde. Deshalb eignet sich RAG so gut für aktuelle, sich ständig ändernde Informationen, während echtes Training eher für grundlegendes, stabiles Sprach- und Faktenverständnis zuständig ist.

Architekturentscheidung

Lokal laden vs. API-Verbindung

Anders als bei einer Datenbank gibt es beim lokalen Laden eines Modells keinen Connection String — die Gewichte werden einmalig komplett in den eigenen Arbeitsspeicher geladen. Bei einer API-Anbindung (z. B. Nutzung über einen Cloud-Anbieter) ist der Vergleich zur Datenbank dagegen zutreffend.

Lokal laden (from_pretrained)API-Nutzung
Wo laufen die Berechnungen?auf der eigenen Hardwarebeim Anbieter
Netzwerkverbindung während Nutzung?keineja, pro Anfrage
Zugriff auf Gewichte?ja → Fine-Tuning möglichnein (außer über spezielle Fine-Tuning-APIs)
Vergleichbar mitgroße Datei in den Speicher ladenDatenbankverbindung (Connection String / API-Key)
Deployment

Ollama & die Source/Build/Deploy-Analogie

Ollama dient zum effizienten Ausführen fertiger Modelle (Format: GGUF), nicht zum Trainieren. Der Workflow entspricht dabei fast eins zu eins dem Bauen und Deployen einer Java-Anwendung:

Source HF-Basismodell + LoRA-Adapter (gepflegt) Build Merge + Konvertierung nach GGUF (llama.cpp) Deploy Import in Ollama bequemes Ausführen
Wichtig: kein Rückweg. GGUF ist quantisiert und praktisch nicht verlustfrei zurückkonvertierbar (vergleichbar mit wiederholtem Neuspeichern eines JPEGs). Deshalb: Immer die Source-Kopie (HF-Format) weiterpflegen und bei jedem Fortschritt neu nach GGUF bauen und neu deployen — nie aus Ollama zurücklesen.
Robustheit

Warum die Ausgabe trotzdem korrekt ist

Trainingsdaten enthalten viele Tippfehler und Umgangssprache — trotzdem antwortet das Modell meist korrekt. Drei Gründe:

1Statistische Mehrheit: korrekte Schreibweise ist immer gleich, Fehler verteilen sich auf viele verschiedene, seltene Varianten.
2Gewichtung guter Quellen: lektorierte Texte (Bücher, Fachartikel) fließen stärker gewichtet ins Training ein.
3Fine-Tuning-Phase: Zielantworten in den Trainingsbeispielen sind immer sauber formuliert — unabhängig von der Qualität der Frage.
Modellentwicklung

Wie Nutzergespräche in neue Modelle einfließen

Ein verbreiteter, aber ungenauer Gedanke: „Der Hersteller analysiert, wie sich das Modell durch die Nutzung verändert hat.“ Das trifft technisch nicht zu — ein bereits deployter LLM verändert sich durch Gebrauch nicht von selbst, die Gewichte bleiben eingefroren, wie im Abschnitt zu lokalem Laden bereits erklärt.

Was tatsächlich gesammelt wird: reine Rohdaten, kein „verändertes Modell“

Was gesammelt wird (abhängig von Datenschutzeinstellungen und Nutzungsbedingungen), sind die Gesprächstexte selbst — Eingabe und Ausgabe als reiner Text, komplett getrennt vom Modell und dessen Gewichten. Das Modell selbst wird dabei nicht untersucht oder „seziert“, es wird schlicht aufgezeichnet, was gefragt und geantwortet wurde — genau dieselbe Art von Rohmaterial wie beim ursprünglichen Training, nur eben echte Gesprächsverläufe statt allgemeiner Internettexte.

Der Auswahlprozess passiert bei den Daten, nicht am Modell

Die Kuratierung (welche Gespräche sind qualitativ gut genug, wo zeigt das Modell erkennbare Schwächen, welche Themen sind unterrepräsentiert, gibt es Duplikate) findet auf der Textebene statt, bevor überhaupt ein neues Training beginnt. Erst danach fließt diese kuratierte Auswahl in einen neuen, bewussten Trainingsdurchlauf ein (Pretraining-Zusatzmaterial, Supervised Fine-Tuning oder RLHF) — mit demselben Vorhersage/Fehler/Anpassung-Zyklus wie ganz am Anfang. Das Ergebnis ist eine komplett neue, eigenständige Modellversion mit neu berechneten Gewichten, nicht eine im Hintergrund „mitgewachsene“ Version des Modells, mit dem gerade gesprochen wurde.

Wirtschaftlich ist das trotzdem ein berechtigtes Interesse der Hersteller: echte Nutzeranfragen zeigen präzise, wo Menschen Hilfe brauchen und wo ein Modell noch schwächelt — oft wertvoller als zufällig gesammelter Internettext. Ob und wie das im Einzelfall erlaubt ist, regeln die jeweiligen Nutzungsbedingungen und Datenschutzeinstellungen des Anbieters.
Fazit

Die wichtigsten Erkenntnisse im Überblick

GrundprinzipToken-für-Token-Wahrscheinlichkeitsvorhersage, kein Textarchiv
TrainingVorhersage → Fehler → Backpropagation → Gewichte anpassen, milliardenfach
QualitätParameterzahl = Kapazität; Datenqualität entscheidet, was daraus wird
TokenisierungFeste Bausteinliste (BPE), Häufigkeit bestimmt Zerlegungsgrad
Wissen im Modellverteilt über Milliarden Gewichte, nicht lokalisierbar
Eigenes Fine-TuningLoRA/QLoRA auf offenen Modellen, mit kuratierten JSONL-Daten
Aktuelle Fakteneher RAG statt ständigem Nachtrainieren
DeploymentSource (HF/LoRA) pflegen, für Ollama jeweils neu nach GGUF bauen
Glossar

Alle Abkürzungen im Überblick

Zum Nachschlagen: sämtliche Fachbegriffe und Abkürzungen, die in diesem Dokument vorkommen, alphabetisch sortiert.

AbkürzungBedeutung
APIApplication Programming Interface — Programmierschnittstelle, über die man ein System (z. B. ein LLM) nutzt, ohne die Software lokal auszuführen; Anfrage per Internet, Antwort kommt vom Server des Anbieters.
BPEByte-Pair-Encoding — Tokenisierungsverfahren, das Text anhand von Häufigkeiten schrittweise zu einer festen Liste von Wortbausteinen (Tokens) verschmilzt; Grundlage moderner Tokenizer.
CPUCentral Processing Unit — Hauptprozessor eines Rechners; wenige, aber sehr vielseitige Rechenkerne, gut für sequenzielle Aufgaben, aber ungünstig für die massenhaft parallelen Matrizenberechnungen beim LLM-Training.
EWCElastic Weight Consolidation — Verfahren gegen Catastrophic Forgetting: wichtige Gewichte für bereits gelerntes Wissen werden beim weiteren Training gezielt "geschützt" und weniger stark verändert.
GGUFGPT-Generated Unified Format — komprimiertes, quantisiertes Dateiformat für Modellgewichte, das von llama.cpp und darauf aufbauend Ollama zum effizienten Ausführen (nicht Trainieren) genutzt wird.
GPUGraphics Processing Unit — Grafikkarte; besitzt tausende kleinere Rechenkerne, die gleichzeitig arbeiten können — ideal für die massiv parallelen Matrizenmultiplikationen beim Training und bei der Ausführung von LLMs.
HFHugging Face — Plattform und Bibliotheken-Ökosystem (u. a. transformers, peft, trl, datasets) zum Herunterladen, Trainieren und Teilen von Modellen; De-facto-Standardformat "safetensors" für Trainingszwecke.
JSONLJSON Lines — Textformat, bei dem jede Zeile der Datei ein eigenständiges, vollständiges JSON-Objekt ist (statt einem großen JSON-Array); gängiges Format für Trainingsdatensätze beim Fine-Tuning.
LLMLarge Language Model — großes Sprachmodell; sagt Text token­weise anhand gelernter Wahrscheinlichkeiten vorher, ohne dabei Text als solchen zu speichern.
LoRALow-Rank Adaptation — Fine-Tuning-Methode: die ursprünglichen Modellgewichte bleiben eingefroren, stattdessen werden kleine zusätzliche Matrizen ("Adapter") mit niedrigem Rang trainiert — nur ein Bruchteil der Originalparameter.
NF44-bit NormalFloat — Quantisierungsformat, das Gewichte auf 4 Bit komprimiert, speziell auf die typische Verteilung von Modellgewichten zugeschnitten; Kernbestandteil von QLoRA.
PEFTParameter-Efficient Fine-Tuning — Oberbegriff für Fine-Tuning-Verfahren (u. a. LoRA), bei denen nur ein kleiner Teil der Modellparameter trainiert wird, statt aller Gewichte; auch Name der gleichnamigen Hugging-Face-Bibliothek.
QLoRAQuantized LoRA — Kombination aus 4-Bit-Quantisierung des eingefrorenen Basismodells (siehe NF4) und LoRA-Adaptern; ermöglicht Fine-Tuning großer Modelle auf Hardware mit deutlich weniger Grafikspeicher.
RAGRetrieval-Augmented Generation — Technik, bei der zur Laufzeit passende Textabschnitte (z. B. aus einer Vektordatenbank) gesucht und dem Modell als Kontext mitgegeben werden; verändert die Gewichte nicht.
RLHFReinforcement Learning from Human Feedback — Trainingsphase, in der ein Modell anhand von menschlichen Bewertungen (welche Antwort ist besser?) weiter verfeinert wird, meist nach dem SFT.
SFTSupervised Fine-Tuning — Trainingsphase nach dem Pretraining, in der das Modell anhand konkreter Beispiel-Frage-Antwort-Paare lernt, in einem gewünschten Format (z. B. als hilfreicher Assistent) zu antworten.
VRAMVideo RAM — Arbeitsspeicher einer Grafikkarte; begrenzt, wie groß ein Modell (bzw. wie groß quantisiert) auf dieser GPU geladen und trainiert werden kann.

Hinweis zu Marken- und Produktnamen: In diesem Dokument genannte Produkt-, Firmen- und Markennamen — u. a. DATEV, Ollama, Meta Llama, Mistral AI, Hugging Face, OpenAI/GPT, Python, Java, Microsoft PowerPoint, Google Colab, RunPod, Apple/MLX — sind Marken bzw. eingetragene Marken der jeweiligen Rechteinhaber. Sie werden hier ausschließlich zu illustrativen und erklärenden Zwecken verwendet; eine Zugehörigkeit, Empfehlung oder Zusammenarbeit mit den jeweiligen Unternehmen ist damit nicht verbunden.