Wählen Sie einen Ansatz zur Optimierung der Vektorspeicherung und -verarbeitung aus.

Einbettungen oder die numerische Darstellung heterogener Inhalte sind die Grundlage von Vektorsuchworkloads. Die Größen von Einbettungen machen sie jedoch schwer zu skalieren und teuer zu verarbeiten. Bedeutende Forschung und Produktisierung haben mehrere Lösungen zur Verbesserung der Skalierung und Reduzierung der Verarbeitungszeiten produziert. Azure KI-Suche nutzt eine Reihe dieser Funktionen, um schnellere und günstigere Vektor-Workloads zu ermöglichen.

In diesem Artikel werden alle Optimierungstechniken in Azure KI-Suche behandelt, mit denen Sie Vektorgröße und Abfrageverarbeitungszeiten reduzieren können.

Sie geben Vektoroptimierungseinstellungen in Vektorfelddefinitionen in einem Suchindex an. Die meisten in diesem Artikel beschriebenen Features sind in der latest stable REST API Version und Azure SDK Pakete für diese Version allgemein verfügbar.

Auswerten der Optionen

Überprüfen Sie die Ansätze in Azure KI-Suche, um die Menge der von Vektorfeldern verwendeten Speicher zu verringern. Diese Ansätze schließen sich nicht gegenseitig aus, sodass Sie sie für eine maximale Reduzierung der Vektorgröße kombinieren können.

Wir empfehlen die integrierte Quantisierung, da sie die Vektorgröße im Arbeitsspeicher und auf dem Datenträger mit minimalem Aufwand komprimiert. Dieser Ansatz bietet in den meisten Szenarien tendenziell den größten Nutzen. Im Gegensatz dazu erfordern schmale Typen (mit Ausnahme von float16) besondere Anstrengungen, um sie zu erstellen, und stored spart Speicherplatz auf der Festplatte, der nicht so teuer ist wie Arbeitsspeicher.

Ansatz Gründe für die Verwendung dieses Ansatzes
Hinzufügen einer skalaren oder binären Quantisierung Komprimieren Sie systemeigene float32- oder float16-Einbettungen in int8 (skalar) oder byte (binär). Mit dieser Option wird der Speicher im Arbeitsspeicher und auf dem Datenträger reduziert, ohne dass die Abfrageleistung beeinträchtigt wird. Kleinere Datentypen, z. B. int8 oder Byte, erzeugen Vektorindizes, die weniger inhaltsreich sind als solche mit größeren Einbettungen. Zum Ausgleich des Informationsverlusts enthält die integrierte Komprimierung Optionen für die Nachabfrageverarbeitung, indem unkomprimierte Einbettungen und Übersampling verwendet werden, um relevantere Ergebnisse zurückzugeben. Reranking und Oversampling sind spezifische Features der integrierten Quantisierung von float32- oder float16-Feldern und können nicht für Einbettungen verwendet werden, die einer benutzerdefinierten Quantisierung unterzogen werden.
Kürzen der Dimensionen für Modelle mit MRL-fähigen Texteinbettungen-3 Verwenden Sie weniger Dimensionen für Texteinbettung-3-Modelle. Auf Azure OpenAI werden diese Modelle auf der Matryoshka Representation Learning (MRL)-Technik neu trainiert, die mehrere Vektordarstellungen auf verschiedenen Komprimierungsebenen erzeugt. Dieser Ansatz erzeugt schnellere Suchvorgänge und reduzierte Speicherkosten mit minimalem Verlust von semantischen Informationen. In Azure KI-Suche ergänzt die Unterstützung von MRL die skalare und binäre Quantisierung. Wenn Sie eine der beiden Quantisierungsmethoden verwenden, können Sie auch eine truncateDimension Eigenschaft für Ihre Vektorfelder angeben, um die Dimensionalität von Texteinbettungen zu verringern.
Zuweisen kleinerer primitiver Datentypen zu Vektorfeldern Schmale Datentypen, z. B. float16, int16, int8 und Byte (binär), verbrauchen weniger Speicherplatz im Arbeitsspeicher und auf dem Datenträger. Sie müssen jedoch über ein Einbettungsmodell verfügen, das Vektoren in einem schmalen Datenformat ausgibt. Alternativ müssen Sie über eine benutzerdefinierte Quantisierungslogik verfügen, die kleine Daten ausgibt. Ein dritter Anwendungsfall, der weniger Aufwand erfordert, besteht darin, native float32-Einbettungen, die von den meisten Modellen erzeugt werden, in das float16-Format umzugiessen. Informationen zu binären Vektoren finden Sie unter Index-Binärvektoren.
Entfernen optionaler Speicher von abrufbaren Vektoren In einer Abfrageantwort zurückgegebene Vektoren werden getrennt von Vektoren gespeichert, die während der Abfrageausführung verwendet werden. Wenn Sie keine Vektoren zurückgeben müssen, können Sie den abrufbaren Speicher deaktivieren, um den gesamten Speicher pro Feld um bis zu 50 Prozent zu reduzieren.

Definieren Sie alle diese Optionen für einen leeren Index. Verwenden Sie zum Implementieren eines dieser ApIs das Azure Portal, REST-APIs oder ein Azure SDK Paket für diese API-Version.

Nachdem Sie den Index definiert haben, können Sie Dokumente als separaten Schritt laden und indizieren.

Beispiel: Vektorgröße nach Vektorkomprimierungstechnik

Vektorisierungs- und Speicheroptionen mit Python ist ein Python-Beispielcode, das mehrere Suchindizes erstellt, die sich durch die Verwendung von Vektorspeicherquantisierung, schmalen Datentypen und Speichereigenschaften unterscheiden.

Dieser Code erstellt und vergleicht die Speicher- und Vektorindexgröße für jede Vektorspeicheroptimierungsoption. Anhand dieser Ergebnisse können Sie sehen, dass die Quantisierung die Vektorgröße am meisten reduziert, aber die größten Speichereinsparungen erzielt werden, wenn Sie mehrere Optionen verwenden.

Index-Name Speichergröße Vektorgröße
Kompressionstest-Baseline 21.3613 MB 4.8277 MB
Kompressionstest-Skalare Komprimierung 17.7604 MB 1.2242 MB
compressiontest-narrow 16.5567 MB 2.4254 MB
Kompressionstest-nicht-gespeichert 10.9224 MB 4.8277 MB
Kompressionstest-alle-Optionen 4.9192 MB 1.2242 MB

Die REST-APIs des Suchdienstes geben die Speicher- und Vektorgrößen auf Indexebene an, daher müssen Sie Indizes und nicht Felder vergleichen. Verwenden Sie Indexes – Statistiken abrufen (REST-API) oder eine entsprechende API im Azure SDKs, um die Vektorgröße abzurufen.