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

milvus-logo
LFAI
  • Home
  • Blog
  • Aceleración de la búsqueda por similitud en Big Data con indexación vectorial

Aceleración de la búsqueda por similitud en Big Data con indexación vectorial

  • Engineering
December 05, 2019
milvus

Desde la visión por ordenador hasta el descubrimiento de nuevos fármacos, los motores de búsqueda de similitud vectorial impulsan muchas aplicaciones populares de inteligencia artificial (IA). La indexación, un proceso de organización de datos que acelera drásticamente la búsqueda de big data, es un componente fundamental que permite realizar consultas eficientes en los conjuntos de datos de millones, miles de millones o incluso billones de vectores en los que se basan los motores de búsqueda de similitudes. En este artículo se explica el papel que desempeña la indexación en la eficiencia de la búsqueda de similitudes vectoriales, los diferentes tipos de índices de archivos invertidos vectoriales (IVF) y consejos sobre qué índice utilizar en diferentes situaciones.

Ir a:

¿Cómo acelera la indexación vectorial la búsqueda de similitudes y el aprendizaje automático?

Los motores de búsqueda de similitudes comparan una entrada con una base de datos para encontrar los objetos más parecidos a la entrada. La indexación es el proceso de organización eficiente de los datos y desempeña un papel fundamental en la utilidad de la búsqueda de similitudes, ya que acelera drásticamente las consultas sobre grandes conjuntos de datos que requieren mucho tiempo. Una vez indexado un gran conjunto de datos vectoriales, las consultas pueden dirigirse a los clusters, 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 un cierto grado de precisión para acelerar las consultas sobre datos vectoriales realmente grandes.

Se puede establecer una analogía con un diccionario, en el que las palabras se ordenan alfabéticamente. Al buscar una palabra, es posible navegar rápidamente a una sección que sólo contenga palabras con la misma inicial, lo que acelera drásticamente la búsqueda de la definición de la palabra introducida.

¿Cuáles son los distintos tipos de índices FIV y para qué situaciones son los más adecuados?

Existen numerosos índices diseñados para la búsqueda de similitud vectorial de alta dimensión, y cada uno de ellos presenta ventajas y desventajas en cuanto a rendimiento, precisión y requisitos de almacenamiento. Este artículo cubre varios tipos de índices FIV comunes, sus puntos fuertes y débiles, así como los resultados de las pruebas de rendimiento para cada tipo de índice. Las pruebas de rendimiento cuantifican el tiempo de consulta y las tasas de recuperación para cada tipo de índice en Milvus, una plataforma de gestión de datos vectoriales de código abierto. Para más información sobre el entorno de pruebas, véase la sección de metodología al final de este artículo.

FLAT: Bueno para la búsqueda de conjuntos de datos relativamente pequeños (a escala de un millón) cuando se requiere una recuperación del 100%.

Para 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 elección. FLAT no comprime los 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 recuperación.

FLAT es preciso porque adopta un enfoque exhaustivo de la búsqueda, lo que significa que, para cada consulta, la entrada objetivo se compara con todos los vectores de un conjunto de datos. Esto hace que FLAT sea 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 su uso no requiere entrenamiento de datos ni almacenamiento adicional.

Resultados de las pruebas de rendimiento de FLAT:

La prueba de rendimiento del tiempo de consulta FLAT se realizó en Milvus utilizando un conjunto de datos compuesto por 2 millones de vectores de 128 dimensiones.

Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_2.png Blog_Aceleración de la búsqueda por similitud en datos realmente grandes con indexación vectorial_2.png

Principales conclusiones:

  • A medida que aumenta nq (el número de vectores objetivo de una consulta), aumenta el tiempo de consulta.
  • Utilizando el índice FLAT en Milvus, podemos ver que el tiempo de consulta aumenta bruscamente una vez que nq supera los 200.
  • En general, el índice FLAT es más rápido y coherente cuando Milvus se ejecuta en la GPU que en la CPU. Sin embargo, las consultas FLAT en CPU son más rápidas cuando nq es inferior a 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 similitudes a expensas de la precisión es realizar una búsqueda aproximada por vecino más cercano (RNA). Los algoritmos RNA reducen los requisitos de almacenamiento y la carga computacional agrupando vectores similares, lo que da como resultado una búsqueda de vectores 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 RNA.

IVF_FLAT divide los datos vectoriales en un número de unidades de clúster (nlist) y, a continuación, compara las distancias entre el vector de entrada objetivo y el centro de cada clúster. Dependiendo del número de conglomerados que el sistema consulte (nprobe), los resultados de la búsqueda de similitud se basan en comparaciones entre el vector de entrada y los vectores del conglomerado o conglomerados más similares, lo que reduce drásticamente el tiempo de consulta.

Ajustando 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 drásticamente a medida que aumentan tanto el número de vectores de entrada objetivo (nq) como el número de conglomerados en los que buscar (nprobe). IVF_FLAT no comprime los datos vectoriales; sin embargo, los archivos de índice incluyen metadatos que aumentan marginalmente los requisitos de almacenamiento en comparación con el conjunto de datos vectoriales 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 mil millones de vectores de 128 dimensiones.

Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_3.png Blog_Aceleración de la búsqueda por similitud en Big Data con indexación vectorial_3.png

Principales conclusiones:

  • Cuando se ejecuta en la CPU, el tiempo de consulta para el índice IVF_FLAT en Milvus aumenta con nprobe y nq. Esto significa que cuantos más vectores de entrada contenga una consulta, o cuantos más clusters busque una consulta, mayor será el tiempo de consulta.
  • En la GPU, el índice muestra menos variación de tiempo frente a los cambios en nq y nprobe. Esto se debe a que los datos del índice son grandes y la copia de datos de la memoria de la CPU a la memoria de la 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 la CPU.

Las pruebas de rendimiento de recuperación 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 creación de índices (nlist = 16.384).

Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_4.png Blog_Aceleración de la búsqueda por similitud en Big Data con indexación vectorial_4.png

Principales conclusiones:

  • El índice IVF_FLAT puede optimizarse en cuanto a precisión, alcanzando una tasa de recuperación superior a 0,99 en el conjunto de datos SIFT 1M cuando nprobe = 256.

IVF_SQ8: Es más rápido y consume menos recursos que IVF_FLAT, pero también es 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 indexar. Por ejemplo, si el conjunto de datos SIFT 1B original tiene 476 GB, sus archivos de índice IVF_FLAT serán ligeramente mayores (~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 una cuantización escalar. Esto reduce el consumo de memoria de disco, CPU y GPU en un 70-75%. Para el conjunto de datos SIFT 1B, los archivos de índice IVF_SQ8 requieren sólo 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 utilizando el conjunto de datos público 1B SIFT, que contiene mil millones de vectores de 128 dimensiones, para la creación de índices.

Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_5.png Blog_Aceleración de la búsqueda por similitud en Big Data con indexación vectorial_5.png

Principales conclusiones:

  • Al reducir el tamaño del archivo de índice, IVF_SQ8 ofrece notables mejoras de rendimiento con respecto a IVF_FLAT. IVF_SQ8 sigue una curva de rendimiento similar a IVF_FLAT, en la que el tiempo de consulta aumenta con nq y nprobe.
  • Al igual que IVF_FLAT, el rendimiento de IVF_SQ8 es mayor cuando se ejecuta en la CPU y cuando nq y nprobe son menores.

Las pruebas de rendimiento de IVF_SQ8 se realizaron en Milvus utilizando el conjunto de datos público 1M SIFT, que contiene 1 millón de vectores de 128 dimensiones, y el conjunto de datos glove-200-angular, que contiene más de 1 millón de vectores de 200 dimensiones, para la creación de índices (nlist = 16.384).

Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_6.png Blog_Aceleración de la búsqueda por similitud en Big Data con indexación vectorial_6.png

Principales conclusiones:

  • A pesar de comprimir los datos originales, IVF_SQ8 no experimenta una disminución significativa en la precisión de la consulta. Con varios ajustes de nprobe, IVF_SQ8 tiene como mucho un 1% menos de tasa de recuperación 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 ejecutado en la CPU, la mayor parte del tiempo total de consulta se emplea en encontrar los clusters nprobe más cercanos al vector de entrada objetivo. Para reducir el tiempo de consulta, IVF_SQ8 copia los datos de las operaciones de cuantificación gruesa, que son más pequeños que los archivos de índice, en la memoria de la GPU, lo que acelera enormemente las operaciones de cuantificación gruesa. A continuación, gpu_search_threshold determina qué dispositivo ejecuta la consulta. Cuando nq >= gpu_search_threshold, la GPU ejecuta la consulta; en caso contrario, lo hace la CPU.

IVF_SQ8H es un tipo de índice híbrido que requiere que la CPU y la GPU trabajen conjuntamente. Sólo puede utilizarse 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 utilizando el conjunto de datos público 1B SIFT, que contiene mil millones de vectores de 128 dimensiones, para la construcción del índice.

Blog_Accelerating Similarity Search on Really Big Data with Vector Indexing_7.png Blog_Aceleración de la búsqueda por similitud en Big Data con indexación vectorial_7.png

Puntos clave:

  • Cuando nq es inferior o igual a 1.000, IVF_SQ8H obtiene tiempos de consulta casi el doble de rápidos que IVFSQ8.
  • Cuando nq = 2000, los tiempos de consulta de IVFSQ8H e IVF_SQ8 son iguales. Sin embargo, si el parámetro gpu_search_threshold es inferior a 2000, IVF_SQ8H superará a IVF_SQ8.
  • La tasa de recuperación de consultas de IVF_SQ8H es idéntica a la de IVF_SQ8, lo que significa que se consigue menos tiempo de consulta sin pérdida de precisión en la búsqueda.

Más información sobre Milvus, una plataforma de gestión de datos vectoriales a gran escala.

Milvus es una plataforma de gestión de datos vectoriales que puede potenciar aplicaciones de búsqueda de similitudes en campos que abarcan la inteligencia artificial, el aprendizaje profundo, los cálculos vectoriales tradicionales, etc. Para obtener información adicional sobre Milvus, consulte los siguientes recursos:

  • Milvus está disponible bajo una licencia de código abierto en GitHub.
  • Milvus admite otros tipos de índices, incluidos los índices basados en gráficos y árboles. Para obtener una lista completa de los tipos de índice admitidos, consulte la documentación de los índices vectoriales en Milvus.
  • Para obtener más información sobre la empresa que lanzó Milvus, visite Zilliz.com.
  • Chatee con la comunidad de Milvus u obtenga 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 ® Xeon ® 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, a continuación se indican algunos conceptos técnicos que resultan ú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 Blog_Aceleración de la búsqueda por similitud en Big Data con indexación vectorial_8.png

Recursos

Para este artículo se han utilizado las siguientes fuentes:

    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