Dense-Vector-Mapping und Indexierung optimieren: Dimension, Quantisierung, Speicher
AI generated
_doc
_index
Elasticsearch · Dense Vector · Quantisierung
Dense-Vector-Mapping und Indexierung optimieren
Dimension, Quantisierung und ihre Auswirkung auf Speicher und Geschwindigkeit

Wer zum ersten Mal ein dense_vector-Feld anlegt, wählt die Vektor-Dimension meist danach, was das gewählte Embedding-Modell nun einmal liefert, ohne die tatsächlichen Speicher- und Performance-Kosten zu hinterfragen. Bei einem kleinen Testkatalog fällt das kaum auf, bei mehreren Millionen Produkten in mehreren Sprachen summieren sich die Kosten pro Vektor jedoch schnell zu einem spürbaren Infrastrukturproblem. Zwischen der Wahl der Dimension, der Quantisierungsstrategie und den HNSW-Graphparametern bestehen enge Wechselwirkungen, die über Speicherbedarf, Indexierungsgeschwindigkeit und Suchqualität gemeinsam entscheiden. Dieser Artikel zeigt, welche Trade-offs bei der Dimensionswahl tatsächlich relevant sind, wie int8- und int4-Quantisierung Speicher spart, ohne die Suchqualität unbrauchbar zu machen, und wie sich die Indexierungsgeschwindigkeit bei großen Produktkatalogen praktisch verbessern lässt.

11 Min. Lesezeit Quantisierung int8/int4 Mapping-Optimierung

1. Was ein einzelner Vektor tatsächlich an Speicher kostet

Ein Standard-Embedding-Modell mit 768 Dimensionen speichert jeden Wert typischerweise als 32-Bit-Gleitkommazahl, was pro Vektor rund drei Kilobyte reinen Rohdatenspeicher bedeutet, ohne den zusätzlichen HNSW-Graphen mitzurechnen. Bei einem Katalog mit fünf Millionen Produkten und nur einem Embedding-Feld pro Produkt summiert sich das bereits auf über vierzehn Gigabyte allein für die Rohvektoren, und mehrsprachige Kataloge mit einem separaten Embedding pro Sprache vervielfachen diesen Bedarf entsprechend.

Dieser Speicherbedarf betrifft nicht nur die Festplatte, sondern vor allem den Arbeitsspeicher, denn für performante kNN-Suche müssen sowohl die Vektoren als auch der HNSW-Graph möglichst vollständig im Speicher der Data Nodes gehalten werden. Wer die Dimension oder die Speicherstrategie nicht bewusst wählt, riskiert damit nicht nur unnötige Kosten, sondern auch spürbare Performance-Einbußen, sobald der verfügbare Speicher knapp wird und Teile der Daten auf langsamere Speichermedien ausweichen müssen.

2. Die Dimension: nicht jedes Modell mit mehr Dimensionen ist besser

Eine höhere Vektor-Dimension erfasst grundsätzlich mehr Nuancen der ursprünglichen Bedeutung, verlangt aber proportional mehr Speicher und mehr Rechenzeit für jede Distanzberechnung während der Suche. Ab einem gewissen Punkt liefert eine weitere Erhöhung der Dimension nur noch marginale Qualitätsgewinne, während Speicher- und Rechenkosten weiter linear steigen, ein klassisches Phänomen abnehmenden Grenznutzens.

Viele moderne Embedding-Modelle bieten deshalb explizit reduzierte Dimensionsvarianten an, etwa 384 statt 768 oder 1024 Dimensionen, die durch ein Trainingsverfahren namens Matryoshka Representation Learning erzeugt werden, bei dem die wichtigsten Informationen bewusst in den ersten Dimensionen konzentriert werden. Für viele Produktsuche-Anwendungsfälle liefert eine solche reduzierte Variante nahezu dieselbe Suchqualität bei deutlich geringerem Speicherbedarf, was vor der endgültigen Modellwahl unbedingt getestet werden sollte.

3. Quantisierung: von 32-Bit-Gleitkommazahlen zu kompakteren Formaten

Quantisierung reduziert die Präzision, mit der jeder einzelne Vektorwert gespeichert wird, ohne die Anzahl der Dimensionen selbst zu verändern. Statt einer 32-Bit-Gleitkommazahl pro Wert speichert int8-Quantisierung jeden Wert als 8-Bit-Ganzzahl, was den Speicherbedarf pro Vektor auf ein Viertel reduziert, während int4-Quantisierung mit 4 Bit pro Wert sogar auf ein Achtel des ursprünglichen Speicherbedarfs kommt.

Elasticsearch führt diese Quantisierung automatisch beim Indexieren durch, wenn der entsprechende index_options-Typ gesetzt ist, und behält intern zusätzlich eine kompaktere Repräsentation der Originalwerte für optionales Reranking vor, sodass ein Großteil der Suchgenauigkeit trotz der reduzierten Präzision erhalten bleibt.


PUT products
{
  "mappings": {
    "properties": {
      "description_embedding": {
        "type": "dense_vector",
        "dims": 768,
        "index": true,
        "similarity": "cosine",
        "index_options": {
          "type": "int8_hnsw",
          "m": 16,
          "ef_construction": 100
        }
      }
    }
  }
}

4. int8 gegen int4: Speichergewinn gegen Genauigkeitsverlust

int8-Quantisierung ist in der Praxis der solide Standardweg, weil der Genauigkeitsverlust gegenüber unquantisierten Vektoren für die allermeisten Produktsuche-Anwendungsfälle kaum messbar ist, während der Speicherbedarf bereits auf ein Viertel sinkt. int4-Quantisierung geht noch einen Schritt weiter und halbiert den Speicherbedarf gegenüber int8 erneut, verlangt dafür aber eine sorgfältigere Evaluierung, da der zusätzliche Präzisionsverlust je nach Embedding-Modell und Datensatz spürbarer ausfallen kann.

Eine praxistaugliche Vorgehensweise ist, mit int8 als Standard zu starten und int4 gezielt für besonders große Kataloge oder besonders speicherknappe Cluster in Betracht zu ziehen, wobei vor der Produktivnahme immer ein konkreter Recall-Vergleich zwischen unquantisierten, int8- und int4-Varianten auf einer repräsentativen Stichprobe der eigenen Produktdaten erfolgen sollte, statt sich auf allgemeine Herstellerangaben zu verlassen.

5. Auswirkung auf die Indexierungsgeschwindigkeit bei großen Katalogen

Der Aufbau des HNSW-Graphen ist der rechenintensivste Teil der Indexierung, da für jeden neuen Vektor die nächsten Nachbarn im bereits bestehenden Graphen gesucht und Verbindungen entsprechend dem ef_construction-Parameter angelegt werden müssen. Bei einem initialen Voll-Indexierungslauf über mehrere Millionen Produkte macht sich das deutlich in der Gesamtlaufzeit bemerkbar, während eine Quantisierung diesen Effekt teilweise abmildert, weil weniger Daten pro Vektor bewegt und verglichen werden müssen.

Bei inkrementellen Updates einzelner Produkte, wie sie im laufenden Magento-Betrieb bei jeder Preisänderung oder Beschreibungsanpassung anfallen, ist die Auswirkung auf einzelne Dokumente gering, kumuliert sich aber bei sehr häufigen Bulk-Updates über große Teile des Katalogs. Eine bewährte Praxis ist, Embedding-Updates nicht bei jeder kleinen Änderung, sondern gebündelt und mit einer sinnvollen Batch-Größe über die Bulk-API einzuspielen, statt einzelne Dokumente nacheinander zu aktualisieren.

6. Oversampling und Reranking zur Kompensation von Quantisierungsverlusten

Um den durch Quantisierung entstehenden Genauigkeitsverlust auszugleichen, unterstützt Elasticsearch ein zweistufiges Vorgehen: Die initiale kNN-Suche läuft auf den quantisierten Vektoren und liefert eine größere Kandidatenmenge als eigentlich benötigt, das sogenannte Oversampling, und ein anschließender Reranking-Schritt bewertet diese Kandidaten anhand der präziseren, nicht quantisierten Werte neu, bevor die endgültige Top-Auswahl zurückgegeben wird.

Dieses Vorgehen kombiniert die Geschwindigkeits- und Speichervorteile der Quantisierung für die breite erste Suche mit der Genauigkeit unquantisierter Werte für die finale Sortierung der wenigen tatsächlich zurückgegebenen Ergebnisse, und ist in der Praxis oft der beste Kompromiss zwischen Ressourceneffizienz und Suchqualität, besonders bei int4-Quantisierung, wo der reine Genauigkeitsverlust ohne Reranking spürbarer ausfällt.

7. Mehrere Vektorfelder pro Dokument: Kosten realistisch einplanen

In einem mehrsprachigen Magento-Shop ist es naheliegend, für jede unterstützte Sprache ein eigenes Embedding-Feld anzulegen, etwa description_embedding_de und description_embedding_en, was den Gesamtspeicherbedarf pro Dokument entsprechend der Anzahl der Sprachen vervielfacht. Vor einer solchen Entscheidung lohnt es sich zu prüfen, ob ein einzelnes, sprachübergreifend trainiertes Multilingual-Embedding-Modell nicht denselben fachlichen Nutzen mit nur einem Vektorfeld liefern kann.

Falls separate Sprachfelder tatsächlich nötig sind, etwa weil sprachspezifische Modelle nachweislich bessere Ergebnisse liefern, sollte die Kapazitätsplanung des Clusters diesen multiplizierten Speicherbedarf von Anfang an berücksichtigen, statt ihn erst bei einem produktiven Speicherengpass zu entdecken.

8. Messung: Speicher- und Latenzunterschiede konkret nachvollziehen

Vor jeder Entscheidung für eine bestimmte Dimension oder Quantisierungsstufe lohnt sich ein einfacher, aber aussagekräftiger Vergleichstest auf einem repräsentativen Ausschnitt des eigenen Produktkatalogs, bei dem derselbe Datensatz einmal unquantisiert, einmal mit int8 und gegebenenfalls einmal mit int4 indiziert wird, jeweils mit Messung von Indexgröße auf der Festplatte, Speicherverbrauch der Data Nodes und tatsächlicher Suchlatenz unter realistischer Anfragelast.

Diese konkreten Zahlen aus der eigenen Umgebung sind deutlich verlässlicher als generische Benchmark-Werte aus der Elastic-Dokumentation, da Indexgröße, Vektordimension, Katalogstruktur und Hardwareausstattung von Shop zu Shop erheblich variieren und der tatsächliche Effekt einer Optimierung sich nur am eigenen Datensatz zuverlässig zeigt.

9. Praktische Empfehlung: ein pragmatischer Startpunkt

Für die meisten Magento-Shops mit einem mittleren bis großen Produktkatalog ist ein pragmatischer Startpunkt eine reduzierte Embedding-Dimension zwischen 384 und 768, kombiniert mit int8-Quantisierung und Standard-HNSW-Parametern, was bereits einen Großteil der möglichen Speicherersparnis realisiert, ohne die Suchqualität spürbar zu beeinträchtigen.

Weitergehende Optimierungen wie int4-Quantisierung oder aggressivere Dimensionsreduktion lohnen sich erst, wenn konkrete Kapazitätsgrenzen des Clusters erreicht werden oder wenn die Kostenrechnung für den Betrieb der Infrastruktur eine weitere Reduktion ausdrücklich verlangt, und sollten dann immer anhand der eigenen, gemessenen Daten getroffen werden, nicht anhand allgemeiner Empfehlungen allein.

Konfiguration Speicher pro Vektor (768 Dim.) Genauigkeitsverlust Empfehlung
Unquantisiert (float32) ca. 3 KB Kein Verlust, Referenzwert Kleine Kataloge, hohe Präzisionsanforderung
int8-Quantisierung ca. 0,75 KB (Faktor 4) Kaum messbar in der Praxis Solider Standard für die meisten Shops
int4-Quantisierung ca. 0,375 KB (Faktor 8) Spürbar, modellabhängig Große Kataloge, speicherknappe Cluster
Reduzierte Dimension (384 statt 768) Halbiert zusätzlich zur Quantisierung Meist gering bei guten Modellen Vor Wahl unbedingt Recall testen
Oversampling + Reranking Kein zusätzlicher Speicher Kompensiert Quantisierungsverlust Empfohlen bei int4-Einsatz

Mironsoft

Suchindex-Setup, Relevanz-Tuning und Magento-Suche

Magento-Suche, die die falschen Produkte zuerst zeigt?

Wir richten Elasticsearch oder OpenSearch für Magento sauber ein, tunen Relevanz und Facetten auf das tatsächliche Sortiment und optimieren Indexierungsprozesse für große Kataloge.

Relevanz-Tuning

Suchergebnisse und Facetten auf die tatsächlichen Kundenbedürfnisse abstimmen.

Such-Migration

Umstieg von Solr oder MySQL-Suche auf Elasticsearch/OpenSearch sauber begleiten.

Index-Performance

Indexierungsprozesse für große Kataloge zuverlässig und performant gestalten.

10. Zusammenfassung

Dense-Vector-Mapping optimieren: Das Wichtigste auf einen Blick

Speicherkosten

Ein unquantisierter 768-Dimensionen-Vektor kostet rund drei Kilobyte, was sich bei Millionen Produkten und mehreren Sprachen schnell zu erheblichem Speicherbedarf summiert.

Quantisierung

int8-Quantisierung viertelt den Speicherbedarf bei kaum messbarem Genauigkeitsverlust, int4 halbiert ihn erneut, verlangt aber sorgfältigere Evaluierung.

Kompensation

Oversampling mit anschließendem Reranking auf unquantisierten Werten gleicht Genauigkeitsverluste der Quantisierung für die finale Ergebnissortierung aus.

Praktischer Startpunkt

Reduzierte Dimension zwischen 384 und 768 kombiniert mit int8-Quantisierung ist für die meisten Shops der pragmatischste Einstieg.

11. FAQ: Dense-Vector-Mapping optimieren: Das Wichtigste auf einen Blick

1Wie viel Speicher kostet ein einzelner unquantisierter Vektor?
Ein 768-Dimensionen-Vektor mit 32-Bit-Gleitkommazahlen kostet rund drei Kilobyte reinen Rohdatenspeicher pro Vektor, ohne den zusätzlichen HNSW-Graphen mitzurechnen.
2Ist eine höhere Vektor-Dimension immer besser?
Nein, ab einem gewissen Punkt liefert eine weitere Erhöhung der Dimension nur noch marginale Qualitätsgewinne, während Speicher- und Rechenkosten weiter linear ansteigen.
3Was ist Matryoshka Representation Learning?
Ein Trainingsverfahren, bei dem die wichtigsten Informationen eines Embeddings bewusst in den ersten Dimensionen konzentriert werden, sodass reduzierte Dimensionsvarianten nahezu dieselbe Qualität bei geringerem Speicherbedarf liefern.
4Wie viel Speicher spart int8-Quantisierung?
int8-Quantisierung reduziert den Speicherbedarf pro Vektor auf ein Viertel gegenüber unquantisierten 32-Bit-Gleitkommazahlen, bei für die meisten Anwendungsfälle kaum messbarem Genauigkeitsverlust.
5Wann lohnt sich int4-Quantisierung gegenüber int8?
Vor allem bei sehr großen Katalogen oder speicherknappen Clustern, da int4 den Speicherbedarf gegenüber int8 erneut halbiert, aber sorgfältigere Evaluierung des zusätzlichen Präzisionsverlusts verlangt.
6Was ist Oversampling und Reranking bei quantisierten Vektoren?
Ein zweistufiges Verfahren, bei dem die erste kNN-Suche auf quantisierten Vektoren mehr Kandidaten liefert als benötigt, und ein anschließender Schritt diese anhand der präziseren, nicht quantisierten Werte neu bewertet.
7Wie wirkt sich Quantisierung auf die Indexierungsgeschwindigkeit aus?
Sie mildert den Effekt teilweise ab, weil weniger Daten pro Vektor bewegt und verglichen werden müssen, wobei der Aufbau des HNSW-Graphen selbst der rechenintensivste Teil der Indexierung bleibt.
8Wie sollte man Embedding-Updates bei häufigen Produktänderungen handhaben?
Gebündelt und mit sinnvoller Batch-Größe über die Bulk-API einspielen, statt einzelne Dokumente nacheinander zu aktualisieren, besonders bei sehr häufigen Bulk-Updates über große Teile des Katalogs.
9Lohnen sich separate Embedding-Felder pro Sprache?
Nur wenn sprachspezifische Modelle nachweislich bessere Ergebnisse liefern als ein einzelnes multilinguales Modell, da separate Felder den Speicherbedarf entsprechend der Sprachanzahl vervielfachen.
10Wie sollte man die richtige Konfiguration für den eigenen Katalog bestimmen?
Durch einen konkreten Vergleichstest auf einem repräsentativen Ausschnitt des eigenen Katalogs mit Messung von Indexgröße, Speicherverbrauch und Suchlatenz, statt sich auf generische Benchmark-Werte zu verlassen.