🚀 Prueba Zilliz Cloud, el Milvus completamente gestionado, gratis—¡experimenta un rendimiento 10 veces más rápido! Prueba Ahora>>

milvus-logo
LFAI

1. index_file_size

  • Engineering
February 26, 2020
milvus

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-test-results-milvus.png 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 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.

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started

Like the article? Spread the word

Sigue Leyendo