Riferimento all'indice ScaNN

Questa pagina fornisce materiale di riferimento per l'indice ScaNN.

Parametri di correzione

I seguenti parametri dell'indice e i flag del database vengono utilizzati insieme per trovare il giusto equilibrio tra il richiamo e la QPS.

Parametro di ottimizzazione Descrizione Tipo di opzione
max_num_levels Il numero massimo di livelli di centroide dell'albero di clustering K-means.
  • Indice ad albero a due livelli: impostato su 1 per impostazione predefinita per un albero a due livelli (1 livello del centroide + livello della foglia inferiore).
  • Indice ad albero a tre livelli: impostato su 2 per impostazione predefinita per un albero a tre livelli (2 livelli di centroide + livello di foglio inferiore)
  • Imposta il valore su 2 se il numero di righe del vettore supera i 100 milioni.
  • Imposta il valore su 1 se il numero di righe del vettore è inferiore a 10 milioni.
  • Imposta il valore su 1 o 2 se il numero di righe del vettore è compreso tra 10 e 100 milioni di righe per eseguire l'ottimizzazione in base al tempo di compilazione dell'indice (impostato su 2) o in base al recupero nella ricerca (impostato su 1).
(Facoltativo) Creazione dell'indice
num_leaves Il numero di partizioni da applicare a questo indice. Il numero di partizioni a cui applichi un indice durante la creazione influisce sulle prestazioni dell'indice. Aumentando le partizioni per un numero predefinito di vettori, crei un indice più granulare, che migliora il recupero e le prestazioni delle query. Tuttavia, questo comporta tempi di creazione dell'indice più lunghi.

Poiché gli alberi a tre livelli vengono creati più velocemente di quelli a due livelli, puoi aumentare il valore num_leaves_value quando crei un indice ad albero a tre livelli per ottenere prestazioni migliori.
  • Indice a due livelli: imposta questo valore su un valore compreso tra 1 e 1048576.

    Per un indice che bilanci la creazione rapida dell'indice e un buon rendimento della ricerca, utilizza sqrt(ROWS) come punto di partenza, dove ROWS è il numero di righe del vettore. Il numero di vettori contenuti in ogni partizione viene calcolato da
    ROWS/sqrt(ROWS) = sqrt(ROWS).

    Poiché è possibile creare un indice ad albero a due livelli in un set di dati con meno di 10 milioni di righe di vettori, ogni partizione conterrà meno di (sqrt(10M)) vettori, ovvero 3200 vettori. Per una qualità ottimale della ricerca vettoriale, ti consigliamo di ridurre al minimo il numero di vettori in ogni partizione. La dimensione consigliata della partizione è di circa 100 vettori per partizione, quindi imposta num_leaves su ROWS/100. Se hai 10 milioni di vettori,imposta num_leaves su 100.000.
  • Indice a tre livelli: imposta questo valore su un valore compreso tra 1 e 1048576.

    Se hai dubbi sulla selezione del valore esatto, utilizza power(ROWS, 2/3) come punto di partenza, dove ROWS è il numero di righe del vettore. Il numero di vettori contenuti in ogni partizione viene calcolato da
    ROWS/power(ROWS, 2/3) = power(ROWS, 1/3).

    Poiché è possibile creare un indice ad albero a tre livelli in un set di dati con più di 100 milioni di righe di vettori, ogni partizione conterrà più di
    (power(100M, 1/3)) vettori, ovvero 465 vettori. Per una qualità ottimale della ricerca vettoriale, ti consigliamo di ridurre al minimo il numero di vettori in ogni partizione. La dimensione consigliata della partizione è di circa 100 vettori per partizione, quindi imposta num_leaves su ROWS/100. Se hai 100 milioni di vettori, imposta num_leaves su 1 milione.
Creazione dell'indice
(obbligatoria)
quantizer Il tipo di quantizzatore da utilizzare per l'albero K-means. Il valore predefinito è impostato su SQ8, che offre prestazioni di query migliori con una perdita di recupero minima (in genere inferiore all'1-2%).

Impostalo su FLAT se è richiesto un recupero del 99% o superiore.
(Facoltativo) Creazione dell'indice
scann.enable_pca Attiva l'analisi delle componenti principali (PCA), una tecnica di riduzione delle dimensioni utilizzata per ridurre automaticamente le dimensioni dell'embedding, se possibile. Questa opzione è attiva per impostazione predefinita.

Imposta su false se noti un peggioramento del recupero.
(Facoltativo) Creazione dell'indice
scann.num_leaves_to_search Questo flag del database controlla il numero assoluto di foglie o partizioni da cercare, il che ti consente di trovare il giusto equilibrio tra il recupero e il QPS. Il valore predefinito è l'1% del valore impostato in num_leaves.

Un valore più alto comporterà un richiamo migliore, ma una QPS inferiore. Analogamente, un valore inferiore comporterà un richiamo inferiore, ma un QPS più elevato.
Tempo di esecuzione della query
(facoltativo)
scann.pre_reordering_num_neighbors Se impostato, il flag del database specifica il numero di vicini candidati da considerare durante le fasi di riordinamento dopo che la ricerca iniziale ha identificato un insieme di candidati. Imposta questo parametro su un valore superiore al numero di elementi vicini che vuoi che vengano restituiti dalla query.

Un valore più alto genera un richiamo migliore, ma un QPS inferiore. Imposta questo valore su 0 per disattivare il riordinamento. Il valore predefinito è 0 se il PCA non è abilitato durante la creazione dell'indice. In caso contrario, il valore predefinito è 50 x K, dove K è il LIMIT specificato nella query.
Tempo di esecuzione della query
(facoltativo)
scann.num_search_threads Il numero di thread di ricerca per la ricerca multithread. In questo modo puoi ridurre la latenza di una singola query utilizzando più di un thread per la ricerca ANN di ScaNN in applicazioni sensibili alla latenza. Questa impostazione non migliora la latenza di una singola query se il database è già vincolato alla CPU. Il valore predefinito è 2. Tempo di esecuzione della query
(facoltativo)

Passaggi successivi