Leistung von ScaNN-Vektorabfragen

Auf dieser Seite erhalten Sie einen konzeptionellen Überblick darüber, wie Sie die Leistung von Vektorabfragen mit dem ScaNN-Index verbessern können.

Der ScaNN-Index verwendet eine Indexierung, die auf der Quantisierung von Bäumen basiert. Bei der Baumquantisierung lernen Indexe einen Suchbaum zusammen mit einer Quantisierungs- (oder Hash-) Funktion. Wenn Sie eine Abfrage ausführen, wird der Suchbaum verwendet, um den Suchraum zu beschneiden, während die Quantisierung verwendet wird, um die Indexgröße zu komprimieren. Durch diese Beschneidung wird die Bewertung der Ähnlichkeit (d.h. der Distanz) zwischen dem Abfragevektor und den Datenbankvektoren beschleunigt.

Wenn Sie sowohl eine hohe Abfragerate pro Sekunde (QPS) als auch eine hohe Trefferquote bei Abfragen nach dem nächsten Nachbarn erzielen möchten, müssen Sie den Baum Ihres ScaNN-Index so partitionieren, dass er am besten zu Ihren Daten und Abfragen passt.

Ein gemeinsames Merkmal der aktuellen Generation hochdimensionaler Einbettungsmodelle ist, dass sie bei viel niedrigerer Dimensionalität immer noch viele Informationen beibehalten können. So können beispielsweise 90% der Informationen mit nur 20% der Dimensionen des Embeddings beibehalten werden. Um solche Datensätze zu beschleunigen, führt AlloyDB ScaNN automatisch eine Dimensionsreduktion mithilfe der Hauptkomponentenanalyse (siehe scann.enable_pca unten) an den indexierten Vektoren durch, wodurch die CPU- und Speichernutzung für die Vektorsuche weiter reduziert wird. Da die Dimensionsreduzierung immer noch zu einem geringen Rückrufverlust im Index führt, kompensiert AlloyDB ScaNN dies durch einen anfänglichen Ranking-Schritt mit einer größeren Anzahl von PCA-vektorbasierten Kandidaten aus dem Index, die dann anhand der ursprünglichen Vektoren neu sortiert werden (siehe scann.pre_reordering_num_neighbors).

Nächste Schritte