ScaNN-Indexreferenz

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite finden Sie Referenzmaterial für den ScaNN-Index.

Parameter für die Abstimmung

Die folgenden Indexparameter und Datenbank-Flags werden zusammen verwendet, um das richtige Gleichgewicht zwischen Recall und QPS zu finden.

Parameter für die Abstimmung Beschreibung Optionstyp
max_num_levels Die maximale Anzahl der Zentroid-Ebenen des K-Means-Clustering-Baums.
  • Zweistufiger Baumindex: Standardmäßig auf 1 für einen zweistufigen Baum festgelegt (1 Zentroid-Ebene + untere Blattebene).
  • Baumindex mit drei Ebenen: Standardmäßig auf 2 für einen dreistufigen Baum festgelegt (2 Zentroid-Ebenen + untere Blattebene).
  • Legen Sie den Wert auf 2 fest, wenn die Anzahl der Vektorzeilen 100 Millionen übersteigt.
  • Legen Sie den Wert auf 1 fest, wenn die Anzahl der Vektorzeilen weniger als 10 Millionen beträgt.
  • Legen Sie den Wert auf 1 oder 2 fest, wenn die Anzahl der Vektorzeilen zwischen 10 Millionen und 100 Millionen liegt. So können Sie die Index-Build-Dauer optimieren (auf 2 festgelegt) oder den Such-Recall optimieren (auf 1 festgelegt).
Indexerstellung
(optional)
num_leaves Die Anzahl der Partitionen, die auf diesen Index angewendet werden sollen. Die Anzahl der Partitionen, die Sie beim Erstellen eines Index anwenden, wirkt sich auf die Indexleistung aus. Wenn Sie die Anzahl der Partitionen für eine bestimmte Anzahl von Vektoren erhöhen, erstellen Sie einen feineren Index, der den Recall und die Abfrageleistung verbessert. Dies führt jedoch zu längeren Indexerstellungszeiten.

Da dreistufige Bäume schneller erstellt werden als zweistufige Bäume, können Sie den Wert von num_leaves_value erhöhen, wenn Sie einen dreistufigen Baumindex erstellen, um eine bessere Leistung zu erzielen.
  • Zweistufiger Index: Legen Sie für diesen Wert einen beliebigen Wert zwischen 1 und 1048576 fest.

    Für einen Index, der eine schnelle Indexerstellung und eine gute Suchleistung bietet, verwenden Sie sqrt(ROWS) als Ausgangspunkt. ROWS ist die Anzahl der Vektorzeilen. Die Anzahl der Vektoren in jeder Partition wird mit der folgenden Formel berechnet:
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Da ein zweistufiger Baumindex für ein 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 Vektorsuchqualität empfiehlt es sich, die Anzahl der Vektoren in jeder Partition zu minimieren. Die empfohlene Partitionsgröße beträgt etwa 100 Vektoren pro Partition. Legen Sie also num_leaves auf ROWS/100 fest. Wenn Sie 10 Millionen Vektoren haben,legen Sie num_leaves auf 100.000 fest.
  • Dreistufiger Index: Legen Sie für diesen Wert einen beliebigen Wert zwischen 1 und 1048576 fest.

    Wenn Sie sich bei der Auswahl des genauen Werts nicht sicher sind, verwenden Sie power(ROWS, 2/3) als Ausgangspunkt. ROWS ist die Anzahl der Vektorzeilen. Die Anzahl der Vektoren in jeder Partition wird mit der folgenden Formel berechnet:
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    Da ein dreistufiger Baumindex für ein Dataset 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 Vektorsuchqualität empfiehlt es sich, die Anzahl der Vektoren in jeder Partition zu minimieren. Die empfohlene Partitionsgröße beträgt etwa 100 Vektoren pro Partition. Legen Sie also num_leaves auf ROWS/100 fest. Wenn Sie 100 Millionen Vektoren haben, legen Sie num_leaves auf 1 Million fest.
Indexerstellung
(erforderlich)
quantizer Der Typ des Quantisierers, den Sie für den K-Means-Baum verwenden möchten. Der Standardwert ist auf SQ8 festgelegt, was eine bessere Abfrageleistung bei minimalem Recall-Verlust (in der Regel weniger als 1–2%) bietet.

Legen Sie ihn auf FLAT fest, wenn ein Recall von 99% oder höher erforderlich ist.
Indexerstellung
(optional)
scann.enable_inline_filtering Aktiviert die Unterstützung für Inline-Filterung, mit der Sie Ihre Daten abfragen und Filter direkt in einem Vorgang zur Suche nach Vektorähnlichkeiten anwenden können. Diese Abfragen zur Vektorähnlichkeit verwenden Filter für dieselben Datenbanktabellen und führen die Filterauswertung durch, während die Entfernung für die Identifizierung des nächsten Nachbarn berechnet wird. Diese Option ist standardmäßig deaktiviert.

Wenn Sie die Inline-Filterung aktivieren möchten, legen Sie diesen Parameter auf true fest. Wenn Sie eine Verschlechterung der Leistung feststellen, legen Sie den Wert auf false fest.

Diese Option ist in der Vorschau verfügbar.
Abfragelaufzeit
(optional)
scann.enable_pca Aktiviert die Hauptkomponentenanalyse (Principal Component Analysis, PCA), eine Technik zur Dimensionsreduzierung, mit der die Größe der Einbettung nach Möglichkeit automatisch reduziert wird. Diese Option ist standardmäßig aktiviert.

Legen Sie den Wert auf false fest, wenn Sie eine Verschlechterung des Recalls feststellen.
Indexerstellung
(optional)
scann.num_leaves_to_search Dieses Datenbank-Flag steuert die absolute Anzahl der zu durchsuchenden Blätter oder Partitionen. So können Sie ein Gleichgewicht zwischen Recall und QPS finden. Der Standardwert beträgt 1% des in num_leaves festgelegten Werts.

Ein höherer Wert führt zu einem besseren Recall, aber zu einer niedrigeren QPS. Entsprechend führt ein niedrigerer Wert zu einem niedrigeren Recall, aber zu einer höheren QPS.
Abfragelaufzeit
(optional)
scann.pre_reordering_num_neighbors Wenn dieses Datenbank-Flag festgelegt ist, gibt es die Anzahl der Kandidatennachbarn an, die in den Phasen der Neuordnung berücksichtigt werden sollen, nachdem bei der ersten Suche eine Reihe von Kandidaten identifiziert wurde. Legen Sie für diesen Parameter einen Wert fest, der höher ist als die Anzahl der Nachbarn, die von der Abfrage zurückgegeben werden sollen.

Ein höherer Wert führt zu einem besseren Recall, aber zu einer niedrigeren QPS. Legen Sie diesen Wert auf 0 fest, um die Neuordnung zu deaktivieren. Der Standardwert ist 0, wenn die PCA bei 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 Suche mit mehreren Threads. Dies kann die Latenz einzelner Abfragen verringern, indem mehr als ein Thread für die ScaNN-ANN-Suche in latenzempfindlichen Anwendungen 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