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

milvus-logo
LFAI
  • Home
  • Blog
  • ¿Qué son las extensiones vectoriales avanzadas?

¿Qué son las extensiones vectoriales avanzadas?

  • Engineering
November 10, 2020
milvus

Las máquinas inteligentes conscientes que quieren apoderarse del mundo son un elemento fijo en la ciencia ficción, pero en realidad los ordenadores modernos son muy obedientes. Si no se les dice nada, rara vez saben qué hacer. Los ordenadores realizan tareas basándose en instrucciones, u órdenes, enviadas desde un programa a un procesador. En su nivel más bajo, cada instrucción es una secuencia de unos y ceros que describe una operación para que la ejecute un ordenador. Normalmente, en los lenguajes ensambladores de los ordenadores cada declaración en lenguaje máquina corresponde a una instrucción del procesador. La unidad central de procesamiento (CPU) se basa en instrucciones para realizar cálculos y controlar sistemas. Además, el rendimiento de la CPU suele medirse en función de la capacidad de ejecución de las instrucciones (por ejemplo, el tiempo de ejecución).

¿Qué son las extensiones vectoriales avanzadas?

Las extensiones vectoriales avanzadas (AVX) son un conjunto de instrucciones para microprocesadores que se basan en la familia x86 de arquitecturas de conjuntos de instrucciones. Propuesto por primera vez por Intel en marzo de 2008, AVX obtuvo un amplio apoyo tres años después con el lanzamiento de Sandy Bridge -una microarquitectura utilizada en la segunda generación de procesadores Intel Core (por ejemplo, Core i7, i5, i3)- y la microarquitectura competidora de AMD también lanzada en 2011, Bulldozer.

AVX introdujo un nuevo esquema de codificación, nuevas funciones y nuevas instrucciones. AVX2 amplía la mayoría de las operaciones con enteros a 256 bits e introduce operaciones de multiplicación-acumulación fusionadas (FMA). AVX-512 amplía AVX a operaciones de 512 bits utilizando una nueva codificación de prefijos de extensión vectorial mejorada (EVEX).

Milvus es una base de datos vectorial de código abierto diseñada para aplicaciones de búsqueda de similitudes e inteligencia artificial (IA). La plataforma es compatible con el conjunto de instrucciones AVX-512, lo que significa que puede utilizarse con todas las CPU que incluyan las instrucciones AVX-512. Milvus tiene amplias aplicaciones que abarcan, entre otros, los sistemas de recomendación, la visión por ordenador y el procesamiento del lenguaje natural (PLN). Este artículo presenta resultados de rendimiento y análisis de una base de datos vectorial Milvus en AVX-512 y AVX2.

Rendimiento de Milvus en AVX-512 frente a AVX2

Configuración del sistema

  • CPU: CPU Intel® Platinum 8163 a 2,50GHz24 núcleos 48 hilos
  • Número de CPU: 2
  • Tarjeta gráfica, GeForce RTX 2080Ti 11GB 4 tarjetas
  • Memoria: 768 GB
  • Disco: 2TB SSD

Parámetros de Milvus

  • cahce.cahe_size: 25, El tamaño de la memoria de la CPU utilizada para el almacenamiento en caché de datos para una consulta más rápida.
  • nlist: 4096
  • nprobe: 128

Nota: nlist es el parámetro de indexación a crear desde el cliente; nprobe el parámetro de búsqueda. Tanto IVF_FLAT como IVF_SQ8 utilizan un algoritmo de clustering para particionar un gran número de vectores en buckets, siendo nlist el número total de buckets a particionar durante el clustering. El primer paso de una consulta es encontrar el número de buckets más cercanos al vector objetivo, y el segundo paso es encontrar los vectores top-k en estos buckets comparando la distancia de los vectores. nprobe se refiere al número de buckets en el primer paso.

Conjunto de datos: Conjunto de datos SIFT10M

Estas pruebas utilizan el conjunto de datos SIFT10M, que contiene un millón de vectores de 128 dimensiones y se utiliza a menudo para analizar el rendimiento de los métodos de búsqueda del vecino más próximo correspondientes. Se comparará el tiempo de búsqueda top-1 para nq = [1, 10, 100, 500, 1000] entre los dos conjuntos de instrucciones.

Resultados por tipo de índice vectorial

Los índices vectoriales son estructuras de datos eficientes en términos de tiempo y espacio que se construyen sobre el campo vectorial de una colección utilizando diversos modelos matemáticos. La indexación de vectores permite realizar búsquedas eficientes en grandes conjuntos de datos cuando se intenta identificar vectores similares a un vector de entrada. Debido a que la recuperación precisa requiere mucho tiempo, la mayoría de los tipos de índices compatibles con Milvus utilizan la búsqueda aproximada del vecino más próximo (RNA).

Para estas pruebas, se utilizaron tres índices con AVX-512 y AVX2: IVF_FLAT, IVF_SQ8 y HNSW.

IVF_FLAT

El archivo invertido (IVF_FLAT) es un tipo de índice basado en la cuantización. Es el índice IVF más básico, y los datos codificados almacenados en cada unidad son coherentes con los datos originales. El índice divide los datos vectoriales en un número 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 clusters que el sistema esté configurado para consultar (nprobe), los resultados de la búsqueda de similitud se devuelven basándose en comparaciones entre la entrada objetivo y los vectores en el cluster(s) más similar(es) solamente - reduciendo drásticamente el tiempo de consulta. Ajustando nprobe, se puede encontrar un equilibrio ideal entre precisión y velocidad para un escenario determinado.

Resultados de rendimiento IVF_FLAT.pngIVF_FLAT.png

IVF_SQ8

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. Cuando los recursos de memoria del disco, la CPU o la GPU son limitados, IVF_SQ8 es una mejor opción que IVF_FLAT. Este tipo de índice puede convertir cada dimensión del vector original de un número en coma flotante de cuatro bytes a un entero sin signo de un byte realizando una cuantización escalar. Esto reduce el consumo de memoria del disco, la CPU y la GPU en un 70-75%.

Resultados de rendimiento IVF_SQ8.pngIVF_SQ8.png

HNSW

Hierarchical Small World Graph (HNSW) es un algoritmo de indexación basado en grafos. Las consultas comienzan en la capa superior buscando el nodo más cercano al objetivo, y luego desciende a la siguiente capa para realizar otra ronda de búsqueda. Tras varias iteraciones, puede acercarse rápidamente a la posición del objetivo.

Resultados de rendimiento HNSW.pngHNSW.png

Comparación de índices vectoriales

La recuperación de vectores es sistemáticamente más rápida en el juego de instrucciones AVX-512 que en AVX2. Esto se debe a que AVX-512 admite cálculos de 512 bits, frente a los 256 bits de AVX2. En teoría, AVX-512 debería ser el doble de rápido que AVX2, pero Milvus realiza otras tareas que consumen mucho tiempo, además de los cálculos de similitud vectorial. Es poco probable que el tiempo total de recuperación de AVX-512 sea el doble que el de AVX2 en situaciones reales. comparison.pngcomparison.png

La recuperación es significativamente más rápida en el índice HNSW que en los otros dos índices, mientras que la recuperación IVF_SQ8 es ligeramente más rápida que IVF_FLAT en ambos conjuntos de instrucciones. Esto se debe probablemente a que IVF_SQ8 requiere sólo el 25% de la memoria que necesita IVF_FLAT. IVF_SQ8 carga 1 byte por cada dimensión vectorial, mientras que IVF_FLAT carga 4 bytes por dimensión vectorial. Lo más probable es que el tiempo necesario para el cálculo esté limitado por el ancho de banda de la memoria. Como resultado, IVF_SQ8 no sólo ocupa menos espacio, sino que también requiere menos tiempo para recuperar los vectores.

Milvus es una base de datos vectorial versátil y de alto rendimiento

Las pruebas presentadas en este artículo demuestran que Milvus ofrece un rendimiento excelente tanto en los conjuntos de instrucciones AVX-512 como AVX2 utilizando diferentes índices. Independientemente del tipo de índice, Milvus rinde mejor en AVX-512.

Milvus es compatible con diversas plataformas de aprendizaje profundo y se utiliza en diversas aplicaciones de IA. Milvus 2.0, una versión reimaginada de la base de datos vectorial más popular del mundo, se publicó bajo una licencia de código abierto en julio de 2021. Para más información sobre el proyecto, consulte los siguientes recursos:

  • Encuentre o contribuya a Milvus en GitHub.
  • Interactúe con la comunidad a través de Slack.
  • Conéctese con nosotros en Twitter.

Like the article? Spread the word

Sigue Leyendo