Come selezionare i parametri dell’indice per l’indice IVF
In Best Practices for Milvus Configuration, sono state introdotte alcune best practice per la configurazione di Milvus 0.6.0. In questo articolo, introdurremo anche alcune best practice per impostare i parametri chiave nei client Milvus per operazioni che includono la creazione di una tabella, la creazione di indici e la ricerca. Questi parametri possono influire sulle prestazioni di ricerca.
1. index_file_size
Quando si crea una tabella, il parametro index_file_size viene utilizzato per specificare la dimensione, in MB, di un singolo file per l'archiviazione dei dati. Il valore predefinito è 1024. Quando i dati vettoriali vengono importati, Milvus combina progressivamente i dati in file. Quando la dimensione del file raggiunge index_file_size, questo file non accetta nuovi dati e Milvus salva i nuovi dati in un altro file. Questi sono tutti file di dati grezzi. Quando viene creato un indice, Milvus genera un file di indice per ciascun file di dati grezzi. Per il tipo di indice IVFLAT, la dimensione del file di indice è approssimativamente uguale alla dimensione del corrispondente file di dati grezzi. Per l'indice SQ8, la dimensione di un file di indice è circa il 30 percento del corrispondente file di dati grezzi.
Durante una ricerca, Milvus cerca in ciascun file di indice uno per uno. In base alla nostra esperienza, quando index_file_size passa da 1024 a 2048, le prestazioni di ricerca migliorano dal 30 percento al 50 percento. Tuttavia, se il valore è troppo grande, i file di grandi dimensioni potrebbero non riuscire a essere caricati nella memoria GPU (o persino nella memoria CPU). Ad esempio, se la memoria GPU è di 2 GB e index_file_size è di 3 GB, il file di indice non può essere caricato nella memoria GPU. Di solito, impostiamo index_file_size su 1024 MB o 2048 MB.
La seguente tabella mostra un test che utilizza sift50m per index_file_size. Il tipo di indice è SQ8.
1-sift50m-test-results-milvus.
Possiamo vedere che in modalità CPU e in modalità GPU, quando index_file_size è 2048 MB invece di 1024 MB, le prestazioni di ricerca migliorano significativamente.
2. nlist e nprobe
Il parametro nlist viene utilizzato per la creazione dell'indice e il parametro nprobe viene utilizzato per la ricerca. IVFLAT e SQ8 utilizzano entrambi algoritmi di clustering per suddividere un gran numero di vettori in cluster, o bucket. nlist è il numero di bucket durante il clustering.
Quando si effettua una ricerca utilizzando gli indici, il primo passo consiste nel trovare un certo numero di bucket più vicini al vettore target e il secondo passo consiste nel trovare i k vettori più simili dai bucket in base alla distanza vettoriale. nprobe è il numero di bucket nel primo passo.
In generale, aumentare nlist porta a più bucket e a meno vettori in un bucket durante il clustering. Di conseguenza, il carico computazionale diminuisce e le prestazioni di ricerca migliorano. Tuttavia, con meno vettori per il confronto di similarità, il risultato corretto potrebbe non essere trovato.
Aumentare nprobe porta a più bucket da cercare. Di conseguenza, il carico computazionale aumenta e le prestazioni di ricerca peggiorano, ma la precisione della ricerca migliora. La situazione può variare a seconda dei dataset con distribuzioni diverse. Dovresti anche considerare la dimensione del dataset quando imposti nlist e nprobe. In generale, si raccomanda che nlist possa essere 4 * sqrt(n), dove n è il numero totale di vettori. Per quanto riguarda nprobe, devi trovare un compromesso tra precisione ed efficienza e il modo migliore è determinare il valore per tentativi ed errori.
La seguente tabella mostra un test che utilizza sift50m per nlist e nprobe. Il tipo di indice è SQ8.
sq8-index-test-sift50m.
La tabella confronta le prestazioni e la precisione della ricerca utilizzando valori diversi di nlist/nprobe. Vengono visualizzati solo i risultati GPU perché i test CPU e GPU hanno risultati simili. In questo test, man mano che i valori di nlist/nprobe aumentano della stessa percentuale, aumenta anche la precisione della ricerca. Quando nlist = 4096 e nprobe è 128, Milvus offre le migliori prestazioni di ricerca. In conclusione, quando determini i valori per nlist e nprobe, devi trovare un compromesso tra prestazioni e precisione tenendo conto di dataset e requisiti diversi.
Riepilogo
index_file_size: Quando la dimensione dei dati è maggiore di index_file_size, maggiore è il valore di index_file_size, migliori sono le prestazioni di ricerca.
nlist e nprobe:Devi trovare un compromesso tra prestazioni e precisione.
Continua a leggere

How to Build an Enterprise-Ready RAG Pipeline on AWS with Bedrock, Zilliz Cloud, and LangChain
Build production-ready enterprise RAG with AWS Bedrock, Nova models, Zilliz Cloud, and LangChain. Complete tutorial with deployable code.

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.
Milvus/Zilliz + Surveillance: How Vector Databases Transform Multi-Camera Tracking
See how Milvus vector database enhances multi-camera tracking with similarity-based matching for better surveillance in retail, warehouses and transport hubs.



