Zurück zur Startseite

LLM-Quantisierung: 160-GB-Modell auf einem Laptop

Der Artikel zerlegt die LLM-Quantisierung für das Ausführen von 160-GB-Modellen auf Laptops. Symmetrische und asymmetrische Methoden, Implementierungscode, Qualitätsbewertung durch Perplexität. Benchmarks zeigen 4-fache Kompression mit 5-10 % Verlust.

Ausführen eines 160-GB-LLMs auf einem Laptop: Quantisierung von Grund auf
Advertisement 728x90

LLM-Quantisierung: 160-GB-Modelle auf dem Laptop mit minimalem Qualitätsverlust laufen lassen

Modelle wie Qwen-3-Coder-Next mit 80 Milliarden Parametern belegen 159,4 GB Speicherplatz. Quantisierung verringert die Modellgröße um das Vierfache und beschleunigt die Inferenz um das Zweifache – mit nur einem Verlust von 5–10 % an Qualität. Dadurch wird es für Endnutzer möglich, große LLMs auf herkömmlicher Hardware zu nutzen, ohne dabei die Leistung einzubüßen.

Parameter und ihr Einfluss auf die Modellgröße

Parameter – also Gewichte in einem neuronalen Netzwerk – bestimmen den Speicherbedarf eines LLMs. Jeder Parameter wird als Gleitkommazahl gespeichert. Die einfachste Einheit: Eingabe mal Gewicht ergibt Ausgabe. Reale Modelle verfügen über Hunderte von Schichten mit Tausenden von Knoten, was zu Milliarden von Parametern führt.

Ein Beispiel: Ein Netzwerk mit 2 Eingaben, 3 Schichten à 4 Knoten und 2 Ausgaben hat 64 Parameter. Vergrößert man dies auf Hunderttausende von Knoten, entstehen Billionen von Gewichten. Histogramme beliebter Modelle zeigen, dass 99 % der Werte nahe bei null liegen, im Bereich [-0,5; 0,5].

Google AdInline article slot

Zahlenrepräsentation im Speicher

Computer speichern float32: 1 Vorzeichenbit, 8 Exponentenbits, 23 Mantissabits. Bereich ±3,4×10³⁸ mit 7 signifikanten Stellen. Die Verteilung ist ungleichmäßig – dichter um null, spärlicher an den Rändern. Das passt perfekt zu LLMs, bei denen die Gewichte klein sind.

Float16: 1+5+10 Bits, Präzision 3–4 Dezimalstellen, Bereich ±65.504. Bfloat16 (1+8+7): großer Bereich, 2–3 Dezimalstellen. Float8/Float4 sind experimentell, mit 3–4 Mantissabits.

Sinuskurve-Näherung: float32 ist glatt; float4 wirkt stufenartig mit deutlichen Fehlern.

Google AdInline article slot

Prinzipien der Quantisierung

Quantisierung ist eine verlustbehaftete Kompression: Fließkommazahlen werden auf einen kleineren Wertebereich abgebildet. Einfaches Runden (auf die nächste ganze Zahl) von bfloat16 auf float4 zerstört das Modell: Die Gewichte werden null, die Ausgabe ist null. Warum? Der Bereich von float4 [-3;3] passt nicht zu typischen Gewichten [-0,89;0,16].

Symmetrische Quantisierung

Skaliert Daten in ganzzahlige Bereiche. Formel: Skalierung = max_abs / (2^(bits-1) - 1). Quantisieren: round(value / scale), Dequantisieren: quantized * scale.

Beispielcode in JavaScript:

Google AdInline article slot
function quantize({ values, bits }) {
  const vmax = Math.max(...values.map(Math.abs));
  const qmax = 2 ** (bits - 1) - 1;
  const scale = vmax / qmax;
  return {
    values: values.map((v) => Math.round(v / scale)),
    scale,
  };
}

function dequantize({ values, scale }) {
  return values.map((v) => v * scale);
}

Für values = [-0,89, 0,16, 0,08, -0,13, 0,16, -0,54], bits=4:

  • quantisiert: [-7,1,1,-1,1,-4], Skalierung≈0,127
  • dequantisiert: [-0,89,0,127,0,127,-0,127,0,127,-0,509]
  • Durchschnittlicher Fehler: 18%

Ausgabe des Modells nach 4-Bit-Quantisierung: 30 % Abweichung vom Original, aber 4-fach geringerer Speicherbedarf.

Asymmetrische Quantisierung

Verbessert die symmetrische Quantisierung durch getrennte Behandlung von Min und Max. Bereich [min, max] wird auf [qmin, qmax] abgebildet. Formel:

  • offset = min
  • scale = (max - min) / (qmax - qmin)
  • quantized = round((value - offset) / scale)

Dies nutzt den Speicher effizient: Bei schiefen Daten (mehr negative Werte) wird die positive Seite nicht verschwendet. Der durchschnittliche Fehler sinkt auf 5–10 %.

Anwendung auf Tensoren: pro Kanal oder Gruppe quantisieren (Gruppen-Quantisierung), um Aktivierungsfehler zu minimieren.

Bewertung der Qualität nach Quantisierung

Messung der Perplexität auf einer Validierungsdatenmenge oder task-spezifischer Metriken (BLEU, ROUGE). Benchmarks:

  • Qwen-3-Coder-Next 4-Bit: +7 % Perplexität gegenüber FP16
  • Geschwindigkeit: x2 auf GPU ohne Tensor-Kerne

| Format | Größe (GB) | Perplexität | Geschwindigkeit (Tokens/Sek.) |

|--------|-----------|------------|-----------------------------|

| FP16 | 159,4 | 1,00 | 1,0 |

| INT8 | 39,8 | 1,05 | 1,8 |

| INT4 | 19,9 | 1,09 | 2,1 |

Wichtige Erkenntnisse

  • Quantisierung reduziert die Modellgröße um das 4- bis 8-fache, ohne Neutrainieren.
  • Verwende symmetrische Quantisierung für symmetrische Daten; asymmetrische für schief verteilte Verteilungen.
  • Gruppen-Quantisierung (Gruppen zu je 128 Elementen) bietet ein Gleichgewicht zwischen Genauigkeit und Geschwindigkeit.
  • Standardmäßig unterstützt in llama.cpp, bitsandbytes: INT4/INT8.
  • Teste auf Nachfolgetasks: Programmierung, Fragen & Antworten.

— Editorial Team

Advertisement 728x90

Weiterlesen