Quantisierung¶
Quantisierung reduziert die Präzision der Parameter eines Modells, um Speicher zu sparen und Inferenz zu beschleunigen – oft mit überraschend geringem Qualitätsverlust.
Das Problem¶
Ein LLM mit 70 Milliarden Parametern braucht in voller Präzision (FP32):
Das passt auf keine Consumer-GPU. Quantisierung löst dieses Problem.
Präzisionsstufen¶
| Format | Bits | Bytes pro Parameter | 7B Modell | 70B Modell |
|---|---|---|---|---|
| FP32 | 32 | 4 | 28 GB | 280 GB |
| FP16 / BF16 | 16 | 2 | 14 GB | 140 GB |
| INT8 | 8 | 1 | 7 GB | 70 GB |
| INT4 | 4 | 0.5 | 3.5 GB | 35 GB |
| INT2 | 2 | 0.25 | 1.75 GB | 17.5 GB |
Sweet Spot
4-Bit Quantisierung ist der aktuelle Sweet Spot: ~4x Speicherersparnis bei minimalem Qualitätsverlust.
Wie funktioniert Quantisierung?¶
Die Grundidee: Mappe den Wertebereich der Parameter auf weniger Bits.
Beispiel – 8-Bit:
Original (FP32): -0.0234, 0.1567, -0.0891, 0.2345, ...
↓
Skalieren: min=-0.5, max=0.5, scale=0.00392
↓
Quantisiert: -6, 40, -23, 60, ... (INT8: -128 bis 127)
Bei der Inferenz wird zurückgerechnet:
Quantisierungsmethoden¶
Post-Training Quantization (PTQ)¶
Quantisierung eines fertigen Modells ohne Neutraining:
graph LR
A[Trainiertes Modell<br>FP16] --> B[Kalibrierung<br>auf Sample-Daten]
B --> C[Quantisiertes Modell<br>INT4/INT8]
Vorteile: Schnell, einfach
Nachteile: Kann Qualität einbüßen
Quantization-Aware Training (QAT)¶
Das Modell wird mit simulierter Quantisierung trainiert:
Vorteile: Bessere Qualität
Nachteile: Aufwändig, braucht Trainingsdaten
Moderne Quantisierungsformate¶
GGUF (llama.cpp)¶
Der Standard für lokale Inferenz mit llama.cpp:
| Variante | Bits | Qualität | Speed |
|---|---|---|---|
| Q2_K | 2-3 | ★★☆☆☆ | ★★★★★ |
| Q3_K_M | 3-4 | ★★★☆☆ | ★★★★☆ |
| Q4_K_M | 4-5 | ★★★★☆ | ★★★★☆ |
| Q5_K_M | 5-6 | ★★★★★ | ★★★☆☆ |
| Q6_K | 6 | ★★★★★ | ★★☆☆☆ |
| Q8_0 | 8 | ★★★★★ | ★★☆☆☆ |
Empfehlung
Q4_K_M ist für die meisten Anwendungsfälle ideal – gute Balance aus Qualität und VRAM.
GPTQ¶
GPU-optimierte Quantisierung, beliebt für Hugging Face Modelle:
- Schnelle Inferenz auf GPU
- Gute Qualität bei 4-Bit
- Braucht Kalibrierungsdaten
AWQ (Activation-aware Weight Quantization)¶
Neuere Methode, die wichtige Gewichte weniger stark quantisiert:
- Oft besser als GPTQ bei gleicher Bitrate
- Besonders gut für kleine Modelle
bitsandbytes (BNB)¶
Integration in Hugging Face Transformers:
from transformers import AutoModelForCausalLM
import torch
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3-8B",
load_in_4bit=True, # 4-Bit Quantisierung
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_quant_type="nf4" # NormalFloat4
)
Qualitätsverlust messen¶
Quantisierung ist ein Trade-off. So misst man den Verlust:
Perplexity: Niedrigere ist besser
| Modell | FP16 | Q8 | Q4_K_M | Q2_K |
|---|---|---|---|---|
| Llama 3 8B | 6.14 | 6.15 | 6.21 | 6.89 |
Faustregeln
- Q8 → praktisch kein Verlust
- Q4 → minimal merkbar
- Q3 → spürbar, aber oft okay
- Q2 → deutlicher Qualitätsverlust
Praktische Anwendung¶
Modell für deine GPU wählen¶
| Deine GPU | VRAM | Empfehlung |
|---|---|---|
| RTX 3060 | 12 GB | 7B Q4, 13B Q3 |
| RTX 4070 Ti | 12 GB | 7B Q4, 13B Q3 |
| RTX 4080 | 16 GB | 13B Q4, 7B Q8 |
| RTX 4090 | 24 GB | 13B Q6, 30B Q4, 70B Q2 |
llama.cpp Beispiel¶
# Modell laden und quantisieren
./quantize model-f16.gguf model-q4_k_m.gguf Q4_K_M
# Inference
./main -m model-q4_k_m.gguf -p "Erkläre Quantisierung:"
Mixed Precision & Selective Quantization¶
Nicht alle Layer sind gleich wichtig. Moderne Methoden quantisieren selektiv:
- Embedding & Output Layer: Oft in höherer Präzision
- Attention: Empfindlicher, profitiert von mehr Bits
- FFN: Robuster, verträgt aggressive Quantisierung
QLoRA – Training mit Quantisierung¶
QLoRA kombiniert Quantisierung mit LoRA für effizientes Fine-Tuning:
- Basismodell in 4-Bit laden
- Kleine LoRA-Adapter in FP16 trainieren
- → Fine-Tuning eines 65B Modells auf einer 24GB GPU möglich
Siehe auch¶
- VRAM – Warum Speicher der limitierende Faktor ist
- GPU – Hardware für Inferenz
- Parameter – Was wird eigentlich quantisiert?
- Inferenz – Quantisierte Modelle nutzen
- LoRA – Effizientes Fine-Tuning