1. index_file_size
En Mejores prácticas para la configuración de Milvus, se introdujeron algunas de las mejores prácticas para la configuración de Milvus 0.6.0. En este artículo, también introduciremos algunas mejores prácticas para configurar parámetros clave en clientes Milvus para operaciones que incluyen la creación de una tabla, la creación de índices y la búsqueda. Estos parámetros pueden afectar al rendimiento de la 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 por defecto 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 nuevos datos en otro archivo. Todos estos son archivos de datos sin procesar. Cuando se crea un índice, Milvus genera un fichero índice para cada fichero de datos brutos. Para el tipo de índice IVFLAT, el tamaño del fichero índice es aproximadamente igual al tamaño del fichero de datos brutos correspondiente. Para el índice SQ8, el tamaño de un fichero índice es aproximadamente el 30 por ciento del fichero de datos brutos 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 la búsqueda mejora entre un 30 y un 50 por ciento. Sin embargo, si el valor es demasiado grande, es posible que los archivos de gran tamaño 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 y index_file_size es de 3 GB, el archivo de índice no podrá cargarse en la memoria de la GPU. Normalmente, fijamos index_file_size en 1024 MB o 2048 MB.
La siguiente tabla muestra una prueba utilizando sift50m para index_file_size. El tipo de índice es SQ8.
1-sift50m-resultados-prueba-milvus.png
Podemos ver que en modo CPU y modo GPU, cuando index_file_size es 2048 MB en lugar de 1024 MB, el rendimiento de la búsqueda mejora significativamente.
2. nlist
y nprobe
El parámetro nlist
se utiliza para crear índices y el parámetro nprobe
para realizar búsquedas. Tanto IVFLAT como SQ8 utilizan algoritmos de clustering para dividir un gran número de vectores en clusters, o buckets. nlist
es el número de buckets durante el clustering.
Cuando la búsqueda se realiza mediante índices, el primer paso consiste en encontrar un cierto número de buckets más cercanos al vector objetivo y el segundo paso consiste en encontrar los k vectores más similares a partir de los buckets por distancia vectorial. nprobe
es el número de buckets en el primer paso.
Generalmente, el aumento de nlist
conduce a más cubos y menos vectores en un cubo durante la agrupación. Como resultado, la carga computacional disminuye y el rendimiento de la búsqueda mejora. Sin embargo, con menos vectores para la comparación de similitudes, es posible que no se obtenga el resultado correcto.
Si se aumenta nprobe
, habrá que buscar en más cubos. Como resultado, la carga computacional aumenta y el rendimiento de la búsqueda se deteriora, pero la precisión de la búsqueda mejora. La situación puede variar en función de los conjuntos de datos con distribuciones diferentes. También debe tener en cuenta el tamaño del conjunto de datos al establecer nlist
y nprobe
. En general, 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 compromiso entre precisión y eficiencia y la mejor manera es determinar el valor mediante prueba y error.
La siguiente tabla muestra una prueba utilizando sift50m para nlist
y nprobe
. El tipo de índice es SQ8.
sq8-index-test-sift50m.png
La tabla compara el rendimiento y la precisión de la búsqueda utilizando distintos valores de nlist
/nprobe
. Sólo 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 la búsqueda también aumenta. Cuando nlist
= 4096 y nprobe
es 128, Milvus tiene el mejor rendimiento de búsqueda. En conclusión, a la hora de determinar los valores de nlist
y nprobe
, hay que buscar un equilibrio entre rendimiento y precisión teniendo en cuenta los distintos 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 la búsqueda.nlist
y nprobe
:Debe hacer un compromiso entre rendimiento y precisión.
- 2. nlist y nprobe
- Resumen
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word