Cómo seleccionar parámetros de índice para el índice IVF
En Mejores prácticas para la configuración de Milvus, se presentaron algunas mejores prácticas para la configuración de Milvus 0.6.0. En este artículo, también presentaremos algunas mejores prácticas para configurar parámetros clave en los clientes de Milvus para operaciones que incluyen crear una tabla, crear índices y realizar búsquedas. Estos parámetros pueden afectar el rendimiento de búsqueda.
1. index_file_size
Al crear una tabla, el parámetro index_file_size se utiliza para especificar el tamaño, en MB, de un único archivo para el almacenamiento de datos. El valor predeterminado es 1024. Cuando se importan datos vectoriales, Milvus combina incrementalmente los datos en archivos. Cuando el tamaño del archivo alcanza index_file_size, este archivo no acepta nuevos datos y Milvus guarda los datos nuevos en otro archivo. Todos estos son archivos de datos sin procesar. Cuando se crea un índice, Milvus genera un archivo de índice para cada archivo de datos sin procesar. Para el tipo de índice IVFLAT, el tamaño del archivo de índice es aproximadamente igual al tamaño del archivo de datos sin procesar correspondiente. Para el índice SQ8, el tamaño de un archivo de índice es aproximadamente el 30 por ciento del archivo de datos sin procesar correspondiente.
Durante una búsqueda, Milvus busca en cada archivo de índice uno por uno. Según nuestra experiencia, cuando index_file_size cambia de 1024 a 2048, el rendimiento de búsqueda mejora entre un 30 por ciento y un 50 por ciento. Sin embargo, si el valor es demasiado grande, es posible que los archivos grandes no se carguen en la memoria de la GPU (o incluso en la memoria de la CPU). Por ejemplo, si la memoria de la GPU es de 2 GB e index_file_size es de 3 GB, el archivo de índice no puede cargarse en la memoria de la GPU. Normalmente, configuramos index_file_size en 1024 MB o 2048 MB.
La siguiente tabla muestra una prueba usando sift50m para index_file_size. El tipo de índice es SQ8.
1-sift50m-test-results-milvus.
Podemos ver que en modo CPU y en modo GPU, cuando index_file_size es 2048 MB en lugar de 1024 MB, el rendimiento de búsqueda mejora significativamente.
2. nlist y nprobe
El parámetro nlist se utiliza para crear índices y el parámetro nprobe se utiliza para buscar. IVFLAT y SQ8 usan algoritmos de agrupamiento para dividir una gran cantidad de vectores en grupos, o buckets. nlist es el número de buckets durante el agrupamiento.
Al buscar usando índices, el primer paso es encontrar un cierto número de buckets más cercanos al vector objetivo y el segundo paso es encontrar los k vectores más similares de los buckets por distancia vectorial. nprobe es el número de buckets en el paso uno.
Generalmente, aumentar nlist conduce a más buckets y menos vectores en un bucket durante el agrupamiento. Como resultado, la carga de cálculo disminuye y el rendimiento de búsqueda mejora. Sin embargo, con menos vectores para la comparación de similitud, podría perderse el resultado correcto.
Aumentar nprobe conduce a más buckets para buscar. Como resultado, la carga de cálculo aumenta y el rendimiento de búsqueda se deteriora, pero la precisión de búsqueda mejora. La situación puede diferir según conjuntos de datos con diferentes distribuciones. También debe considerar el tamaño del conjunto de datos al configurar nlist y nprobe. Generalmente, se recomienda que nlist pueda ser 4 * sqrt(n), donde n es el número total de vectores. En cuanto a nprobe, debe hacer un equilibrio entre precisión y eficiencia, y la mejor manera es determinar el valor mediante prueba y error.
La siguiente tabla muestra una prueba usando sift50m para nlist y nprobe. El tipo de índice es SQ8.
sq8-index-test-sift50m.
La tabla compara el rendimiento y la precisión de búsqueda utilizando diferentes valores de nlist/nprobe. Solo se muestran los resultados de GPU porque las pruebas de CPU y GPU tienen resultados similares. En esta prueba, a medida que los valores de nlist/nprobe aumentan en el mismo porcentaje, la precisión de búsqueda también aumenta. Cuando nlist = 4096 y nprobe es 128, Milvus tiene el mejor rendimiento de búsqueda. En conclusión, al determinar los valores para nlist y nprobe, debe hacer una compensación entre rendimiento y precisión teniendo en cuenta diferentes conjuntos de datos y requisitos.
Resumen
index_file_size: Cuando el tamaño de los datos es mayor que index_file_size, cuanto mayor sea el valor de index_file_size, mejor será el rendimiento de búsqueda.
nlist y nprobe:Debe hacer una compensación entre rendimiento y precisión.
Sigue leyendo

DeepSeek-OCR Explained: Optical Compression for Scalable Long-Context and RAG Systems
Discover how DeepSeek-OCR uses visual tokens and Contexts Optical Compression to boost long-context LLM efficiency and reshape RAG performance.

Expanding Our Global Reach: Zilliz Cloud Launches in Azure Central India
Zilliz Cloud expands to Azure Central India. This new region helps customers meet compliance, reduce latency, and optimize cloud costs when building AI applications.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.



