Best practice per l'ottimizzazione degli indici ScaNN

I parametri consigliati per l'indiceScaNN variano a seconda che tu scelga di creare un indice ad albero a due livelli o a tre livelli. Questa pagina fornisce consigli su come ottimizzare i parametri dell'indice per un equilibrio ottimale tra il recupero e le QPS.

Creazione dell'indice ScaNN

Per ulteriori informazioni, consulta il riferimento all'indice ScaNN.

Indice ad albero a due livelli

Per applicare i consigli che ti aiutano a trovare i valori ottimali di num_leaves e num_leaves_to_search per il tuo set di dati, segui questi passaggi consigliati:

  1. Per creare l'indice ScaNN ottimizzato per i seguenti casi, imposta il parametro num_leaves sul seguente valore, dove righe è il numero di righe nella tabella indicizzata:
    • Tempo di compilazione e qualità dell'indice bilanciati imposta num_leaves su sqrt(rows).
    • quality imposta num_leaves su righe/100.
  2. Esegui le query di test, aumentando il valore di scann.num_of_leaves_to_search, fino a raggiungere l'intervallo di recupero target, ad esempio il 95%. Per ulteriori informazioni sull'analisi delle query, consulta Analizzare le query.
  3. Prendi nota del rapporto tra scann.num_leaves_to_search e num_leaves che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il tuo valore di richiamo target.

    Se utilizzi vettori di dimensioni elevate (500 dimensioni o più) e vuoi migliorare il richiamo, prova a ottimizzare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato su 500 * K, dove K è il limite impostato nella query.
  4. Se il QPS è troppo basso dopo che le query hanno raggiunto un recupero target, segui questi passaggi:
    1. Ricrea l'indice aumentando il valore di num_leaves e scann.num_leaves_to_search in base alle seguenti indicazioni:
      • Imposta num_leaves su un fattore maggiore della radice quadrata del numero di righe. Ad esempio, se nell'indice num_leaves è impostato sulla radice quadrata del numero di righe, prova a impostarlo sul doppio della radice quadrata. Se il valore è già raddoppiato, prova a impostarlo sul triplo della radice quadrata.
      • Aumenta scann.num_leaves_to_search in base alle esigenze per mantenere il rapporto con num_leaves, che hai annotato nel passaggio 3.
      • Imposta num_leaves su un valore minore o uguale al numero di righe diviso per 100.
    2. Esegui di nuovo le query di test. Mentre esegui le query di test, prova a ridurre scann.num_leaves_to_search, trovando un valore che aumenti il QPS mantenendo alto il recupero. Prova valori diversi per scann.num_leaves_to_search senza ricostruire l'indice.
  5. Ripeti il passaggio 4 finché sia la QPS sia l'intervallo di recupero non hanno raggiunto valori accettabili.

Indice ad albero a tre livelli

Oltre ai consigli per l'indice ScaNN ad albero a due livelli, segui le indicazioni riportate di seguito.

Per applicare i consigli per trovare il valore ottimale dei parametri di indice num_leaves e max_num_levels:

  1. Crea l'indice ScaNN con le seguenti combinazioni di num_leaves e max_num_levels in base ai tuoi obiettivi di rendimento:

    • balance index build time & quality: imposta max_num_levels su 2 e num_leaves su power(rows, ⅔).
    • Ottimizza per la qualità: imposta max_num_levels su 2 e num_leaves su rows/100.
  2. Esegui le query di test. Per ulteriori informazioni sull'analisi delle query, consulta Analizzare le query.

  3. Prendi nota del rapporto tra scann.num_leaves_to_search e num_leaves che verrà utilizzato nei passaggi successivi. Questo rapporto fornisce un'approssimazione del set di dati che ti aiuterà a raggiungere il tuo ricordo target.

Se utilizzi vettori di dimensioni elevate (500 dimensioni o più) e vuoi migliorare il richiamo, prova a ottimizzare il valore di scann.pre_reordering_num_neighbors. Il valore predefinito è impostato su 500 * K, dove K è il limite impostato nella query.

  1. Se il QPS è troppo basso dopo che le query hanno raggiunto un recupero target, segui questi passaggi:

    • Ricrea l'indice aumentando il valore di num_leaves e scann.num_leaves_to_search in base alle seguenti indicazioni:
    • Imposta num_leaves su un fattore maggiore di power(rows, ⅔). Ad esempio, se l'indice ha num_leaves impostato su power(rows, ⅔), prova a impostarlo sul doppio di power(rows, ⅔). Se il valore è già doppio, prova a impostarlo sul triplo di power(rows, ⅔).
    • Aumenta scann.num_leaves_to_search in base alle esigenze per mantenere il rapporto con num_leaves, che hai annotato nel passaggio 3.
    • Imposta un valore di num_leaves minore o uguale a rows/100.
    • Esegui di nuovo le query di test. Mentre esegui le query di test, prova a ridurre scann.num_leaves_to_search, trovando un valore che aumenti il QPS mantenendo alto il recupero. Prova valori diversi per scann.num_leaves_to_search senza ricostruire l'indice.
  2. Ripeti il passaggio 4 finché sia la QPS sia l'intervallo di recupero non hanno raggiunto valori accettabili.

Manutenzione dell'indice

Se la tua tabella è soggetta a frequenti aggiornamenti o inserzioni, ti consigliamo di indicizzare periodicamente l'indice ScaNN esistente per migliorare l'accuratezza del recupero. Puoi monitorare le metriche dell'indice per visualizzare le modifiche alle distribuzioni o alle mutazioni dei vettori dall'inizializzazione dell'indice e poi eseguire nuovamente l'indicizzazione di conseguenza. Per ulteriori informazioni sulle metriche, consulta Visualizzare le metriche dell'indice vettoriale.

Passaggi successivi