Vergleich der Vektorquantisierung: Int8 gegen Binär – Genauigkeit und Speicherbedarf
Ermitteln Sie, wie Int8- und Binärquantisierung die Genauigkeit sowie den Speicherbedarf für Embeddings verändern, warum Binärquantisierung zu Verlusten führen kann und wie man ein sicheres Kompressionsniveau wählt.
Die Verkleinerung von Embeddings klingt nach kostenlosem Geld, und viele Anleitungen bleiben dabei stehen. Ein schneller Test zeigt, dass „sichere“ und „rücksichtslose“ Kompressionsmethoden viel weiter voneinander entfernt sind, als diese Anleitungen zugeben.
Hier ist der Kernpunkt: Int8-Quantisierung bewahrt in der Regel 95 % oder mehr der Suchgenauigkeit, während die Speicherkapazität um das Vierfache reduziert wird. Binäre Quantisierung ermöglicht eine beeindruckende 32-fache Reduzierung, doch sofern das Embedding-Modell nicht dafür trainiert wurde, kann ein Drittel oder mehr der Suchgenauigkeit verloren gehen. Diese beiden Methoden gehören nicht zu derselben Skala – ihr Verhalten unterscheidet sich so stark, dass die falsche Wahl für das eigene Modell leise die Suchqualität ruinieren kann.
Die Quantisierung funktioniert dadurch, dass jede Dimension mit geringerer Präzision gespeichert wird. Es geht von 32-Bit-Fließkommazahlen zu 8-Bit-Ganzzahlen (skalare Quantisierung) oder sogar bis auf einen Bit pro Dimension (binäre Quantisierung). Die Einsparungen sind real: Der RAM-Verbrauch sinkt bei binärer Quantisierung um bis zu 24-fach und bei skalarer Quantisierung um 3,75-fach. Der Effekt wird noch größer, wenn ein Korpus Millionen von Vektoren umfasst – was für die Speicherung in Agenten und unternehmensweite RAG-Systeme im Jahr 2026 immer häufiger der Fall ist.
Wie die Zahlen aussehen
Das Testkorpus war synthetisch: 2.000 Vektoren mit 768 Dimensionen, die in 20 lose Gruppen eingeteilt wurden, um eine echte semantische Struktur nachzuahmen. Die Suchgenauigkeit wurde als Recall@10 im Vergleich zur unkomprimierten float32-Referenz gemessen, nachdem jeweils einer der beiden Quantisierer angewendet wurde. Zunächst int8, bei dem nach dem größten absoluten Wert gerundet wird, sodass der Wert im int8-Bereich liegt:
def quantize_int8(vecs):
scale = np.max(np.abs(vecs))
q = np.round(vecs / scale * 127).astype(np.int8)
return q.astype(np.float32) / 127 * scale
Und dann binär, bei dem nur noch das Vorzeichen jedes Wertes beibehalten wird:
def quantize_binary(vecs):
return (vecs > 0).astype(np.float32) * 2 - 1
Die Ergebnisse sahen wie folgt aus:
Format | Recall@10 vs float32 | Storage (MB) | Reduction
----------------------------------------------------------------------
float32 | 1.000 (baseline) | 6.144 | 1x
int8 | 0.961 | 1.536 | 4.0x
binary | 0.326 | 0.192 | 32.0x
Int8 behielt bei einer Verringerung der Speicherkapazität um das Vierfache 96 % der Suchgenauigkeit bei, was für die meisten Produktionsysteme eine sehr gute Leistung darstellt. Bei dieser allgemeinen Embedding-Simulation, die nicht mit Quantisierung konzipiert wurde, fiel die Trefferquote auf 32,6 % trotz einer beeindruckenden Komprimierung um das 32-Fache. Das ist kein Rundungsfehler – etwa zwei von drei relevanten Ergebnissen, die ein Float-Index zurückgegeben hätte, fehlen.
Warum binär viel schwieriger zu handhaben ist
Das hängt davon ab, wie viel Information erhalten bleibt. Int8 bewahrt für jede Dimension eine fein abgestimmte Zahl bei, was ausreicht, um die relative Geometrie zwischen Vektoren weitgehend beizubehalten. Binär hingegen behält nur das Vorzeichen bei und vernachlässigt die Größe völlig – eine weitaus strengere Vereinfachung des Embedding-Raums.
Dies ist jedoch kein Naturgesetz – es hängt vom Modell ab. Unabhängige Vergleiche haben gezeigt, dass einige Embedding-Architekturen die binäre Quantisierung kaum wahrnehmen und etwa 98 % der Qualität auf Float-Ebene beibehalten, während andere Familien stärker betroffen sind und je nach Modellgröße Werte von etwa 87–92 % erreichen. Was sie voneinander unterscheidet, ist, ob das Modell so trainiert wurde, dass es der Quantisierung standhält.
Welches Modell wählen?
- Machen Sie int8 zu Ihrer Standardoption. Sie geben etwas Genauigkeit auf – in einer leicht vorhersehbaren Weise – und der eingesparte Speicherplatz ist dennoch groß genug, um bei einem großen Index eine Bedeutung zu haben.
- Verwenden Sie nur Binärformate mit Modellen, die dafür konzipiert sind. Anbieter liefern mittlerweile quantisierungssensible Embedding-Varianten, da generische Embeddings unter binärer Kompression stark an Qualität verlieren. Stellen Sie vor der Implementierung sicher, dass Ihr spezifisches Modell dafür validiert wurde, und gehen Sie nicht davon aus, dass diese Technik überall sicher ist.
Häufige Fragen
Welchen Einfluss hat int8 auf die Genauigkeit? In der Regel nur einen sehr geringen, meist unter 5 % an Rückrufverlust im Vergleich zu vollständigem float32, im Austausch für etwa viermal weniger Speicherbedarf.
Ist binäre Quantisierung sicher? Nur bei Embedding-Modellen, die darauf trainiert sind. Allgemeine Modelle können ein Drittel oder mehr an Suchgenauigkeit verlieren, während quantisierungsbewusste Modelle zu 98 % oder mehr der Qualität auf Float-Ebene beibehalten können.
Wie viel Speicherplatz sparen Sie? Mit int8 etwa das Vierfache. Bei binärer Quantisierung sind es 24–32 Mal, wobei die Genauigkeitskosten deutlich höher und schwerer vorhersehbar sind.
Müssen Sie alles neu einbetten? Nicht unbedingt. Bestehende float32-Embeddings können wie im obigen Code nachträglich quantisiert werden. Modelle, die mit Kompression im Hinterkopf trainiert wurden, übertrifft man in der Regel jedoch immer noch bei einer nachträglich quantisierten, fertig erhältlichen Embedding-Lösung.
Noch eine wichtige Hinweis: Das hier verwendete Korpus ist synthetisch und klastergestützt, dient lediglich zur Veranschaulichung. Die tatsächliche Wiedererkennungsrate hängt von Ihrem Embedding-Modell, der Struktur Ihrer Daten sowie Ihren Abfragemustern ab. Prüfen Sie daher zunächst mit Ihren eigenen Daten, bevor Sie ein Kompressionsniveau festlegen.