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:
- Per creare l'indice
ScaNN
ottimizzato per i seguenti casi, imposta il parametronum_leaves
sul seguente valore, dove righe è il numero di righe nella tabella indicizzata:- Tempo di compilazione e qualità dell'indice bilanciati imposta
num_leaves
susqrt(rows)
. - quality imposta num_leaves su righe/100.
- Tempo di compilazione e qualità dell'indice bilanciati imposta
- 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. - Prendi nota del rapporto tra
scann.num_leaves_to_search
enum_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 discann.pre_reordering_num_neighbors
. Il valore predefinito è impostato su500 * K
, doveK
è il limite impostato nella query. - 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
escann.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'indicenum_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 connum_leaves
, che hai annotato nel passaggio 3. - Imposta
num_leaves
su un valore minore o uguale al numero di righe diviso per 100.
- Imposta
- 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 perscann.num_leaves_to_search
senza ricostruire l'indice.
- Ricrea l'indice aumentando il valore di
- 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
:
Crea l'indice
ScaNN
con le seguenti combinazioni dinum_leaves
emax_num_levels
in base ai tuoi obiettivi di rendimento:- balance index build time & quality: imposta
max_num_levels
su2
enum_leaves
supower(rows, ⅔)
. - Ottimizza per la qualità: imposta
max_num_levels
su2
enum_leaves
surows/100
.
- balance index build time & quality: imposta
Esegui le query di test. Per ulteriori informazioni sull'analisi delle query, consulta Analizzare le query.
Prendi nota del rapporto tra
scann.num_leaves_to_search
enum_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.
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
escann.num_leaves_to_search
in base alle seguenti indicazioni: - Imposta
num_leaves
su un fattore maggiore dipower(rows, ⅔)
. Ad esempio, se l'indice hanum_leaves
impostato supower(rows, ⅔)
, prova a impostarlo sul doppio dipower(rows, ⅔)
. Se il valore è già doppio, prova a impostarlo sul triplo dipower(rows, ⅔)
. - Aumenta
scann.num_leaves_to_search
in base alle esigenze per mantenere il rapporto connum_leaves
, che hai annotato nel passaggio 3. - Imposta un valore di
num_leaves
minore o uguale arows/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 perscann.num_leaves_to_search
senza ricostruire l'indice.
- Ricrea l'indice aumentando il valore di
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.