ScaNN-Indexreferenz

Diese Seite enthält Referenzmaterial für den ScaNN-Index.

Parameter für die Abstimmung

Die folgenden Indexparameter und Datenbankflaggen werden zusammen verwendet, um das richtige Gleichgewicht zwischen Rückruf und QPS zu finden.

Parameter für die Abstimmung Beschreibung Optionstyp
max_num_levels Die maximale Anzahl von Centroidebenen des K-Means-Clustering-Baums.
  • Zweistufiger Baumindex: Standardmäßig auf 1 für einen zweistufigen Baum (1 Centroidebene + unterste Blattebene) festgelegt.
  • Dreistufiger Baumindex: Standardmäßig auf 2 für einen dreistufigen Baum (2 Centroidebenen + unterste Blattebene) festgelegt
  • Legen Sie den Wert auf 2 fest, wenn die Anzahl der Vektorzeilen 100 Millionen überschreitet.
  • Legen Sie den Wert auf 1 fest, wenn die Anzahl der Vektorzeilen weniger als 10 Millionen beträgt.
  • Legen Sie entweder 1 oder 2 fest, wenn die Anzahl der Vektorzeilen zwischen 10 Millionen und 100 Millionen liegt. So können Sie die Indexerstellungszeit (Wert 2) oder die Trefferquote bei der Suche (Wert 1) optimieren.
Indexerstellung
(optional)
num_leaves Die Anzahl der Partitionen, die auf diesen Index angewendet werden sollen. Die Anzahl der Partitionen, auf die Sie beim Erstellen eines Index anwenden, wirkt sich auf die Indexleistung aus. Wenn Sie die Partitionen für eine festgelegte Anzahl von Vektoren erhöhen, erstellen Sie einen detaillierteren Index, was die Abruf- und Abfrageleistung verbessert. Dies geht jedoch zu Lasten der Indexerstellungszeit.

Da Drei-Ebenen-Bäume schneller erstellt werden als Zwei-Ebenen-Bäume, können Sie den Wert für num_leaves_value beim Erstellen eines Drei-Ebenen-Baumindexes erhöhen, um eine bessere Leistung zu erzielen.
  • Index auf zwei Ebenen: Legen Sie für diesen Wert einen Wert zwischen 1 und 1048576 fest.

    Verwenden Sie sqrt(ROWS) als Ausgangspunkt für einen Index, der eine schnelle Indexerstellung und eine gute Suchleistung vereint. Dabei ist ROWS die Anzahl der Vektorzeilen. Die Anzahl der Vektoren in jeder Partition wird mit
    ROWS/sqrt(ROWS) = sqrt(ROWS) berechnet.

    Da ein zweistufiger Baumindex in einem Dataset mit weniger als 10 Millionen Vektorzeilen erstellt werden kann, enthält jede Partition weniger als (sqrt(10M)) Vektoren, also 3200 Vektoren. Für eine optimale Qualität der Vektorsuche wird empfohlen, die Anzahl der Vektoren in jeder Partition zu minimieren. Die empfohlene Partitionsgröße beträgt etwa 100 Vektoren pro Partition. Legen Sie daher num_leaves auf ROWS/100 fest. Wenn Sie 10 Millionen Vektoren haben,legen Sie num_leaves auf 100.000 fest.
  • Drei-Ebenen-Index: Legen Sie für diesen Wert einen beliebigen Wert zwischen 1 und 1048576 fest.

    Wenn Sie sich nicht sicher sind, welchen genauen Wert Sie auswählen sollen, verwenden Sie power(ROWS, 2/3) als Ausgangspunkt. Dabei ist ROWS die Anzahl der Vektorzeilen. Die Anzahl der Vektoren in jeder Partition wird mit
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3) berechnet.

    Da ein dreistufiger Baumindex in einem Datensatz mit mehr als 100 Millionen Vektorzeilen erstellt werden kann, enthält jede Partition mehr als
    (power(100M, 1/3)) Vektoren, also 465 Vektoren. Für eine optimale Qualität der Vektorsuche wird empfohlen, die Anzahl der Vektoren in jeder Partition zu minimieren. Die empfohlene Partitionsgröße beträgt etwa 100 Vektoren pro Partition. Legen Sie daher num_leaves auf ROWS/100 fest. Wenn Sie 100 Millionen Vektoren haben, legen Sie num_leaves auf 1 Million fest.
Indexerstellung 
(erforderlich)
quantizer Die Art des Quantisierers, die Sie für den K-Means-Baum verwenden möchten. Der Standardwert ist SQ8. Dies bietet eine bessere Abfrageleistung bei minimalen Recall-Verlusten (in der Regel weniger als 1–2%).

Legen Sie den Wert auf FLAT fest, wenn ein Recall von mindestens 99% erforderlich ist.
Indexerstellung
(optional)
scann.enable_pca Hiermit wird die Hauptkomponentenanalyse (Principal Component Analysis, PCA) aktiviert. Dabei handelt es sich um eine Dimensionsreduktionstechnik, mit der die Größe der Einbettung nach Möglichkeit automatisch verringert wird. Diese Option ist standardmäßig aktiviert.

Legen Sie false fest, wenn sich die Erinnerungsfähigkeit verschlechtert.
Indexerstellung
(optional)
scann.num_leaves_to_search Mit diesem Datenbankflag wird die absolute Anzahl der Blätter oder Partitionen gesteuert, in denen gesucht werden soll. So können Sie einen Kompromiss zwischen Rückruf und Abfragerate eingehen. Der Standardwert ist 1% des in num_leaves festgelegten Werts.

Ein höherer Wert führt zu einer besseren Trefferquote, aber zu einer niedrigeren QPS. Ein niedrigerer Wert führt dagegen zu einem geringeren Recall, aber zu einer höheren QPS.
Abfragelaufzeit
(optional)
scann.pre_reordering_num_neighbors Wenn das Datenbankflag festgelegt ist, gibt es an, wie viele Kandidaten in den Neusortierungsphasen berücksichtigt werden sollen, nachdem bei der ersten Suche eine Reihe von Kandidaten ermittelt wurde. Legen Sie für diesen Parameter einen Wert fest, der höher ist als die Anzahl der Nachbarn, die in der Abfrage zurückgegeben werden sollen.

Ein höherer Wert führt zu einer besseren Trefferquote, aber zu einer geringeren Abfragerate pro Sekunde. Setzen Sie diesen Wert auf 0, um die Neuanordnung zu deaktivieren. Der Standardwert ist 0, wenn die PCA während der Indexerstellung nicht aktiviert ist. Andernfalls ist der Standardwert 50 x K, wobei K das in der Abfrage angegebene LIMIT ist.
Abfragelaufzeit
(optional)
scann.num_search_threads Die Anzahl der Sucher-Threads für die parallele Suche. So lässt sich die Latenz einzelner Abfragen reduzieren, indem in latenzempfindlichen Anwendungen mehr als ein Thread für die ScaNN-ANN-Suche verwendet wird. Diese Einstellung verbessert die Latenz einzelner Abfragen nicht, wenn die Datenbank bereits CPU-gebunden ist. Der Standardwert ist 2. Abfragelaufzeit
(optional)

Nächste Schritte