Best Practices für die Optimierung von ScaNN-Indexen

Die empfohlenen Parameter für den IndexScaNN unterscheiden sich je nachdem, ob Sie einen zweistufigen oder dreistufigen Baumindex erstellen. Auf dieser Seite finden Sie Empfehlungen zur Optimierung von Indexparametern für ein optimales Gleichgewicht zwischen Rückruf und QPS.

ScaNN-Indexerstellung

Weitere Informationen finden Sie in der Referenz zum ScaNN-Index.

Zweistufiger Baumindex

So können Sie Empfehlungen anwenden, um die optimalen Werte für num_leaves und num_leaves_to_search für Ihren Datensatz zu ermitteln:

  1. Wenn Sie den ScaNN-Index für die folgenden Fälle optimieren möchten, legen Sie den Parameter num_leaves auf den folgenden Wert fest. Dabei ist „Zeilen“ die Anzahl der Zeilen in der indexierten Tabelle:
    • Wenn Sie Indexerstellungszeit und Qualität ausbalancieren möchten, setzen Sie num_leaves auf sqrt(rows).
    • Für quality wird „num_leaves“ auf „Zeilen/100“ festgelegt.
  2. Führen Sie die Testabfragen aus und erhöhen Sie den Wert von scann.num_of_leaves_to_search, bis Sie den gewünschten Bereich für die Wiedererkennung erreichen, z. B. 95%. Weitere Informationen zur Analyse von Abfragen finden Sie unter Abfragen analysieren.
  3. Notieren Sie sich das Verhältnis zwischen scann.num_leaves_to_search und num_leaves, das in den nächsten Schritten verwendet wird. Dieses Verhältnis liefert eine Näherung an den Datensatz, mit der Sie die gewünschte Wiedererkennung erzielen.

    Wenn Sie mit Vektoren mit hoher Dimension (500 Dimensionen oder mehr) arbeiten und die Wiedererkennung verbessern möchten, können Sie den Wert von scann.pre_reordering_num_neighbors anpassen. Der Standardwert ist 500 * K, wobei K das Limit ist, das Sie in Ihrer Abfrage festgelegt haben.
  4. Wenn die QPS zu niedrig ist, nachdem Ihre Abfragen die gewünschte Trefferquote erreicht haben, gehen Sie so vor:
    1. Erstellen Sie den Index neu und erhöhen Sie die Werte von num_leaves und scann.num_leaves_to_search gemäß der folgenden Anleitung:
      • Legen Sie für num_leaves einen größeren Faktor der Quadratwurzel der Zeilenanzahl fest. Wenn num_leaves im Index beispielsweise auf die Quadratwurzel der Zeilenanzahl festgelegt ist, versuchen Sie, den Wert auf das Doppelte der Quadratwurzel zu setzen. Wenn der Wert bereits doppelt so hoch ist, versuchen Sie, ihn auf das Dreifache der Quadratwurzel festzulegen.
      • Erhöhen Sie scann.num_leaves_to_search nach Bedarf, um das Verhältnis zu num_leaves beizubehalten, das Sie in Schritt 3 notiert haben.
      • Legen Sie für num_leaves einen Wert fest, der kleiner oder gleich der Anzahl der Zeilen geteilt durch 100 ist.
    2. Führen Sie die Testabfragen noch einmal aus. Versuchen Sie während der Ausführung der Testabfragen, scann.num_leaves_to_search zu reduzieren, um einen Wert zu finden, mit dem die Anzahl der Abfragen pro Sekunde erhöht wird, während die Trefferquote hoch bleibt. Probieren Sie verschiedene Werte für scann.num_leaves_to_search aus, ohne den Index neu zu erstellen.
  5. Wiederholen Sie Schritt 4, bis sowohl die QPS als auch der Rückrufbereich akzeptable Werte erreicht haben.

Dreistufiger Baumindex

Beachten Sie zusätzlich zu den Empfehlungen für den zweistufigen BaumScaNN-Index die folgenden Hinweise.

So wenden Sie Empfehlungen an, um den optimalen Wert für die Indexparameter num_leaves und max_num_levels zu ermitteln:

  1. Erstellen Sie den ScaNN-Index mit den folgenden num_leaves- und max_num_levels-Kombinationen, die auf Ihren Leistungszielen basieren:

    • Indexerstellungszeit und Qualität ausbalancieren: Legen Sie max_num_levels als 2 und num_leaves als power(rows, ⅔) fest.
    • Qualität optimieren: Legen Sie max_num_levels als 2 und num_leaves als rows/100 fest.
  2. Führen Sie Ihre Testabfragen aus. Weitere Informationen zum Analysieren von Abfragen finden Sie unter Abfragen analysieren.

  3. Notieren Sie sich das Verhältnis zwischen scann.num_leaves_to_search und num_leaves, das in den nächsten Schritten verwendet wird. Dieses Verhältnis liefert eine Näherung für den Datensatz, mit der Sie die angestrebte Wiedererkennung erreichen können.

Wenn Sie mit Vektoren mit vielen Dimensionen (500 oder mehr) arbeiten und die Wiedererkennung verbessern möchten, können Sie den Wert von scann.pre_reordering_num_neighbors anpassen. Der Standardwert ist 500 * K, wobei K das Limit ist, das Sie in Ihrer Abfrage festgelegt haben.

  1. Wenn die QPS zu niedrig ist, nachdem Ihre Abfragen die angestrebte Trefferquote erreicht haben, gehen Sie so vor:

    • Erstellen Sie den Index neu und erhöhen Sie die Werte von num_leaves und scann.num_leaves_to_search gemäß der folgenden Anleitung:
    • Legen Sie für num_leaves einen größeren Faktor als power(rows, ⅔) fest. Wenn num_leaves im Index beispielsweise auf power(rows, ⅔) festgelegt ist, versuchen Sie, den Wert auf das Doppelte von power(rows, ⅔) zu setzen. Wenn der Wert bereits doppelt so hoch ist, versuchen Sie, ihn auf das Dreifache von power(rows, ⅔) festzulegen.
    • Erhöhen Sie scann.num_leaves_to_search nach Bedarf, um das Verhältnis zu num_leaves beizubehalten, das Sie in Schritt 3 notiert haben.
    • Legen Sie für num_leaves einen Wert fest, der kleiner oder gleich rows/100 ist.
    • Führen Sie die Testabfragen noch einmal aus. Versuchen Sie während der Ausführung der Testabfragen, scann.num_leaves_to_search zu reduzieren, um einen Wert zu finden, mit dem die Anzahl der Abfragen pro Sekunde erhöht wird, während die Trefferquote hoch bleibt. Sie können verschiedene Werte für scann.num_leaves_to_search ausprobieren, ohne den Index neu erstellen zu müssen.
  2. Wiederholen Sie Schritt 4, bis sowohl die QPS als auch der Rückrufbereich akzeptable Werte erreicht haben.

Indexwartung

Wenn Ihre Tabelle häufig aktualisiert oder Daten eingefügt werden, empfehlen wir, den vorhandenen ScaNN-Index regelmäßig neu zu indexieren, um die Abrufgenauigkeit zu verbessern. Sie können Indexmesswerte beobachten, um Änderungen an Vektorverteilungen oder Vektormutationen seit dem Erstellen des Index zu sehen und dann entsprechend neu indexieren. Weitere Informationen zu Messwerten finden Sie unter Messwerte für Vektorindexe ansehen.

Nächste Schritte