Aceleración de la búsqueda de similitud en datos realmente grandes con indexación vectorial
Desde la visión por computadora hasta el descubrimiento de nuevos fármacos, los motores de búsqueda de similitud vectorial impulsan muchas aplicaciones populares de inteligencia artificial (IA). Un componente enorme de lo que hace posible consultar de manera eficiente los conjuntos de datos de millones, miles de millones o incluso billones de vectores en los que se basan los motores de búsqueda por similitud es la indexación, un proceso de organización de datos que acelera drásticamente la búsqueda en big data. Este artículo aborda el papel que desempeña la indexación para hacer eficiente la búsqueda de similitud vectorial, los diferentes tipos de índices de archivo invertido vectorial (IVF) y consejos sobre qué índice utilizar en distintos escenarios.
Ir a:
- ¿Cómo acelera la indexación vectorial la búsqueda de similitud y el aprendizaje automático?
- ¿Cuáles son los distintos tipos de índices IVF y para qué escenarios son más adecuados?
- FLAT: Bueno para buscar en conjuntos de datos relativamente pequeños (a escala de millones) cuando se requiere un recall del 100 %.
- IVF_FLAT: Mejora la velocidad a expensas de la precisión (y viceversa).
- IVF_SQ8: Más rápido y consume menos recursos que IVF_FLAT, pero también es menos preciso.
- IVF_SQ8H: Nuevo enfoque híbrido GPU/CPU que es incluso más rápido que IVF_SQ8.
- Obtén más información sobre Milvus, una plataforma de gestión de datos vectoriales a escala masiva.
¿Cómo acelera la indexación vectorial la búsqueda de similitud y el aprendizaje automático?
Los motores de búsqueda de similitud funcionan comparando una entrada con una base de datos para encontrar los objetos más similares a la entrada. La indexación es el proceso de organizar datos de manera eficiente y desempeña un papel importante a la hora de hacer útil la búsqueda de similitud al acelerar drásticamente consultas que consumen mucho tiempo en grandes conjuntos de datos. Después de indexar un conjunto masivo de datos vectoriales, las consultas pueden dirigirse a clústeres, o subconjuntos de datos, que tienen más probabilidades de contener vectores similares a una consulta de entrada. En la práctica, esto significa que se sacrifica cierto grado de precisión para acelerar las consultas sobre datos vectoriales realmente grandes.
Se puede establecer una analogía con un diccionario, donde las palabras están ordenadas alfabéticamente. Al buscar una palabra, es posible navegar rápidamente a una sección que solo contiene palabras con la misma inicial, lo que acelera drásticamente la búsqueda de la definición de la palabra de entrada.
¿Cuáles son los distintos tipos de índices IVF y para qué escenarios son más adecuados?
Existen numerosos índices diseñados para la búsqueda de similitud vectorial de alta dimensionalidad, y cada uno conlleva concesiones en cuanto a rendimiento, precisión y requisitos de almacenamiento. Este artículo cubre varios tipos comunes de índices IVF, sus fortalezas y debilidades, así como los resultados de pruebas de rendimiento para cada tipo de índice. Las pruebas de rendimiento cuantifican el tiempo de consulta y las tasas de recall para cada tipo de índice en Milvus, una plataforma de gestión de datos vectoriales de código abierto. Para obtener información adicional sobre el entorno de prueba, consulta la sección de metodología al final de este artículo.
FLAT: Bueno para buscar en conjuntos de datos relativamente pequeños (a escala de millones) cuando se requiere un recall del 100 %.
Para las aplicaciones de búsqueda de similitud vectorial que requieren una precisión perfecta y dependen de conjuntos de datos relativamente pequeños (a escala de millones), el índice FLAT es una buena opción. FLAT no comprime vectores y es el único índice que puede garantizar resultados de búsqueda exactos. Los resultados de FLAT también pueden utilizarse como punto de comparación para los resultados producidos por otros índices que tienen menos del 100 % de recall.
FLAT es preciso porque adopta un enfoque exhaustivo para la búsqueda, lo que significa que, para cada consulta, la entrada objetivo se compara con cada vector en un conjunto de datos. Esto convierte a FLAT en el índice más lento de nuestra lista, y poco adecuado para consultar datos vectoriales masivos. No hay parámetros para el índice FLAT en Milvus, y usarlo no requiere entrenamiento de datos ni almacenamiento adicional.
Resultados de las pruebas de rendimiento de FLAT:
Las pruebas de rendimiento del tiempo de consulta de FLAT se realizaron en Milvus utilizando un conjunto de datos compuesto por 2 millones de vectores de 128 dimensiones.
Resultados de las pruebas de tiempo de consulta para el índice FLAT en Milvus.
Puntos clave:
- A medida que nq (el número de vectores objetivo para una consulta) aumenta, el tiempo de consulta aumenta.
- Al usar el índice FLAT en Milvus, podemos ver que el tiempo de consulta aumenta bruscamente una vez que nq supera 200.
- En general, el índice FLAT es más rápido y más consistente cuando se ejecuta Milvus en GPU frente a CPU. Sin embargo, las consultas FLAT en CPU son más rápidas cuando nq está por debajo de 20.
IVF_FLAT: Mejora la velocidad a expensas de la precisión (y viceversa).
Una forma habitual de acelerar el proceso de búsqueda de similitud a expensas de la precisión es realizar una búsqueda aproximada de vecinos más cercanos (ANN). Los algoritmos ANN reducen los requisitos de almacenamiento y la carga de cálculo agrupando vectores similares, lo que da como resultado una búsqueda vectorial más rápida. IVF_FLAT es el tipo de índice de archivo invertido más básico y se basa en una forma de búsqueda ANN.
IVF_FLAT divide los datos vectoriales en una serie de unidades de clúster (nlist) y luego compara las distancias entre el vector de entrada objetivo y el centro de cada clúster. Dependiendo del número de clústeres que el sistema esté configurado para consultar (nprobe), los resultados de búsqueda de similitud se devuelven basándose únicamente en comparaciones entre la entrada objetivo y los vectores en el/los clúster(es) más similar(es), lo que reduce drásticamente el tiempo de consulta.
Al ajustar nprobe, se puede encontrar un equilibrio ideal entre precisión y velocidad para un escenario determinado. Los resultados de nuestra prueba de rendimiento de IVF_FLAT demuestran que el tiempo de consulta aumenta bruscamente a medida que aumentan tanto el número de vectores de entrada objetivo (nq) como el número de clústeres a buscar (nprobe). Sin embargo, IVF_FLAT no comprime los datos vectoriales; los archivos de índice incluyen metadatos que aumentan marginalmente los requisitos de almacenamiento en comparación con el conjunto de datos vectoriales bruto sin indexar.
Resultados de las pruebas de rendimiento de IVF_FLAT:
Las pruebas de rendimiento del tiempo de consulta de IVF_FLAT se realizaron en Milvus utilizando el conjunto de datos público 1B SIFT, que contiene 1.000 millones de vectores de 128 dimensiones.
Resultados de las pruebas de tiempo de consulta para el índice IVF_FLAT en Milvus.
Puntos clave:
- Al ejecutarse en CPU, el tiempo de consulta para el índice IVF_FLAT en Milvus aumenta tanto con nprobe como con nq. Esto significa que cuanto más vectores de entrada contiene una consulta, o cuantos más clústeres busca una consulta, mayor será el tiempo de consulta.
- En GPU, el índice muestra menos variación de tiempo ante cambios en nq y nprobe. Esto se debe a que los datos del índice son grandes, y copiar datos de la memoria de CPU a la memoria de GPU representa la mayor parte del tiempo total de consulta.
- En todos los escenarios, excepto cuando nq = 1.000 y nprobe = 32, el índice IVF_FLAT es más eficiente cuando se ejecuta en CPU.
Las pruebas de rendimiento de recall de IVF_FLAT se realizaron en Milvus utilizando tanto el conjunto de datos público 1M SIFT, que contiene 1 millón de vectores de 128 dimensiones, como el conjunto de datos glove-200-angular, que contiene más de 1 millón de vectores de 200 dimensiones, para la construcción del índice (nlist = 16.384).
Resultados de las pruebas de tasa de recall para el índice IVF_FLAT en Milvus.
Puntos clave:
- El índice IVF_FLAT puede optimizarse para la precisión, logrando una tasa de recall superior a 0,99 en el conjunto de datos 1M SIFT cuando nprobe = 256.
IVF_SQ8: Más rápido y menos demandante de recursos que IVF_FLAT, pero también menos preciso.
IVF_FLAT no realiza ninguna compresión, por lo que los archivos de índice que produce tienen aproximadamente el mismo tamaño que los datos vectoriales originales, sin procesar y no indexados. Por ejemplo, si el conjunto de datos SIFT 1B original es de 476 GB, sus archivos de índice IVF_FLAT serán ligeramente más grandes (~470 GB). Cargar todos los archivos de índice en memoria consumirá 470 GB de almacenamiento.
Cuando los recursos de disco, CPU o memoria GPU son limitados, IVF_SQ8 es una mejor opción que IVF_FLAT. Este tipo de índice puede convertir cada FLOAT (4 bytes) a UINT8 (1 byte) realizando cuantización escalar. Esto reduce el consumo de disco, CPU y memoria GPU en un 70–75%. Para el conjunto de datos SIFT 1B, los archivos de índice IVF_SQ8 requieren solo 140 GB de almacenamiento.
Resultados de las pruebas de rendimiento de IVF_SQ8:
Las pruebas de tiempo de consulta de IVF_SQ8 se realizaron en Milvus usando el conjunto de datos público SIFT 1B, que contiene 1.000 millones de vectores de 128 dimensiones, para la creación del índice.
Resultados de las pruebas de tiempo de consulta para el índice IVF_SQ8 en Milvus.
Puntos clave:
- Al reducir el tamaño del archivo de índice, IVF_SQ8 ofrece mejoras de rendimiento notables frente a IVF_FLAT. IVF_SQ8 sigue una curva de rendimiento similar a IVF_FLAT, con un tiempo de consulta que aumenta con nq y nprobe.
- Al igual que IVF_FLAT, IVF_SQ8 muestra un rendimiento más rápido cuando se ejecuta en CPU y cuando nq y nprobe son más pequeños.
Las pruebas de rendimiento de recall de IVF_SQ8 se realizaron en Milvus usando tanto el conjunto de datos público SIFT 1M, que contiene 1 millón de vectores de 128 dimensiones, como el conjunto de datos glove-200-angular, que contiene más de 1 millón de vectores de 200 dimensiones, para la creación del índice (nlist = 16,384).
Resultados de las pruebas de tasa de recall para el índice IVF_SQ8 en Milvus.
Puntos clave:
- A pesar de comprimir los datos originales, IVF_SQ8 no presenta una disminución significativa en la precisión de las consultas. En diversas configuraciones de nprobe, IVF_SQ8 tiene como máximo una tasa de recall un 1% menor que IVF_FLAT.
IVF_SQ8H: Nuevo enfoque híbrido GPU/CPU que es incluso más rápido que IVF_SQ8.
IVF_SQ8H es un nuevo tipo de índice que mejora el rendimiento de las consultas en comparación con IVF_SQ8. Cuando se consulta un índice IVF_SQ8 que se ejecuta en CPU, la mayor parte del tiempo total de consulta se dedica a encontrar los clústeres nprobe más cercanos al vector de entrada objetivo. Para reducir el tiempo de consulta, IVF_SQ8 copia los datos para las operaciones del cuantizador grueso, que son más pequeños que los archivos de índice, a la memoria GPU, lo que acelera enormemente las operaciones del cuantizador grueso. Luego, gpu_search_threshold determina qué dispositivo ejecuta la consulta. Cuando nq >= gpu_search_threshold, la GPU ejecuta la consulta; de lo contrario, la CPU ejecuta la consulta.
IVF_SQ8H es un tipo de índice híbrido que requiere que la CPU y la GPU trabajen juntas. Solo se puede usar con Milvus habilitado para GPU.
Resultados de las pruebas de rendimiento de IVF_SQ8H:
Las pruebas de rendimiento del tiempo de consulta de IVF_SQ8H se realizaron en Milvus usando el conjunto de datos público SIFT 1B, que contiene 1.000 millones de vectores de 128 dimensiones, para la creación del índice.
Resultados de las pruebas de tiempo de consulta para el índice IVF_SQ8H en Milvus.
Puntos clave:
- Cuando nq es menor o igual a 1,000, IVF_SQ8H muestra tiempos de consulta casi el doble de rápidos que IVFSQ8.
- Cuando nq = 2000, los tiempos de consulta para IVFSQ8H e IVF_SQ8 son los mismos. Sin embargo, si el parámetro gpu_search_threshold es menor que 2000, IVF_SQ8H superará a IVF_SQ8.
- La tasa de recall de consulta de IVF_SQ8H es idéntica a la de IVF_SQ8, lo que significa que se logra un menor tiempo de consulta sin pérdida de precisión de búsqueda.
Obtenga más información sobre Milvus, una plataforma de gestión de datos vectoriales a escala masiva.
Milvus es una plataforma de gestión de datos vectoriales que puede impulsar aplicaciones de búsqueda por similitud en campos que abarcan la inteligencia artificial, el aprendizaje profundo, los cálculos vectoriales tradicionales y más. Para obtener información adicional sobre Milvus, consulta los siguientes recursos:
- Milvus está disponible bajo una licencia de código abierto en GitHub.
- Milvus admite tipos de índice adicionales, incluidos índices basados en grafos y en árboles. Para obtener una lista completa de los tipos de índice admitidos, consulta la documentación sobre índices vectoriales en Milvus.
- Para obtener más información sobre la empresa que lanzó Milvus, visita Zilliz.com.
- Chatea con la comunidad de Milvus o recibe ayuda con un problema en Slack.
Metodología
Entorno de pruebas de rendimiento
La configuración del servidor utilizada en las pruebas de rendimiento a las que se hace referencia en este artículo es la siguiente:
- Intel (R) Xeon (R) Platinum 8163 @ 2.50GHz, 24 núcleos
- GeForce GTX 2080Ti x 4
- 768 GB de memoria
Conceptos técnicos relevantes
Aunque no son necesarios para comprender este artículo, aquí hay algunos conceptos técnicos que son útiles para interpretar los resultados de nuestras pruebas de rendimiento de índices:
Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_8.png
Recursos
Las siguientes fuentes se utilizaron para este artículo:
- “Encyclopedia of database systems,” Ling Liu y M. Tamer Özsu.
Qué sigue
Continúa leyendo Acelerar la búsqueda por similitud en datos realmente grandes con indexación vectorial: Parte II.
Sigue leyendo

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.

The Real Bottlenecks in Autonomous Driving — And How AI Infrastructure Can Solve Them
Autonomous driving faces a data bottleneck. Learn how AI-native vector databases like Zilliz solve scale, cost, and insight challenges across AV pipelines.

Why Deepseek is Waking up AI Giants Like OpenAI And Why You Should Care
Discover how DeepSeek R1's open-source AI model with superior reasoning capabilities and lower costs is disrupting the AI landscape and challenging tech giants like OpenAI.



