Elección de un enfoque para optimizar el almacenamiento y procesamiento de vectores
Las inserciones, o la representación numérica de contenido heterogéneo, son la base de las cargas de trabajo de vectores de búsqueda, pero los tamaños de las inserciones hacen que sean difíciles de escalar y caros de procesar. Una investigación y productización exhaustivas han generado varias soluciones para mejorar la escala y reducir los tiempos de procesamiento. Búsqueda de Azure AI aprovecha varias de estas funcionalidades para obtener cargas de trabajo vectoriales más rápidas y baratas.
En este artículo se enumeran todas las técnicas de optimización de Búsqueda de Azure AI que pueden ayudarle a reducir el tamaño de vectores y los tiempos de procesamiento de las consultas.
La configuración de optimización de vectores se especifica en las definiciones de campos vectoriales de un índice de búsqueda. La mayoría de las características descritas en este artículo están disponibles con carácter general en la API REST 2024-07-01 y en los paquetes de Azure SDK destinados a esa versión. La versión preliminar más reciente agrega compatibilidad con dimensiones truncadas si usa text-embeding-3-large o text-embedding-3-small para la vectorización.
Evaluación de las opciones
Revise los enfoques de Búsqueda de Azure AI para reducir la cantidad de almacenamiento que usan los campos vectoriales. Estos enfoques no son mutuamente excluyentes y se pueden combinar para reducir el tamaño máximo del vector.
Recomendamos la cuantización incorporada porque comprime el tamaño del vector en memoria y en disco con un esfuerzo mínimo, y eso tiende a proporcionar el mayor beneficio en la mayoría de los escenarios. Por el contrario, los tipos estrechos (excepto float16) requieren un esfuerzo especial para fabricarlos, y stored
ahorran almacenamiento en disco, que no es tan caro como la memoria.
Enfoque | Por qué usar esta opción |
---|---|
Adición de cuantificación escalar o binaria | Use la cuantificación para comprimir incrustaciones float32 o float16 nativas en int8 (escalar) o Byte (binario). Esta opción reduce el almacenamiento en memoria y en el disco sin degradar el rendimiento de las consultas. Los tipos de datos más pequeños, como int8 o Byte, producen índices vectoriales menos ricos en contenido que aquellos con incrustaciones más grandes. Para compensar la pérdida de información, la compresión integrada incluye opciones para el procesamiento posterior a consultas mediante incrustaciones sin comprimir y sobremuestreo para devolver resultados más relevantes. El reordenamiento y el sobremuestreo son características específicas de la cuantización incorporada de campos float32 o float16 y no pueden utilizarse en incrustaciones sometidas a una cuantización personalizada. |
Truncar dimensiones para modelos de inserción de texto compatibles con MRL-3 (versión preliminar) | Use la opción para usar menos dimensiones en modelos de inserción de texto-3. En Azure OpenAI, estos modelos se han vuelto a entrenar en la técnica Matryoshka Representation Learning (MRL) que genera varias representaciones vectoriales en distintos niveles de compresión. Este enfoque genera búsquedas más rápidas y costos de almacenamiento reducidos, con una pérdida mínima de información semántica. En Búsqueda de Azure AI, la compatibilidad con MRL complementa la cuantificación escalar y binaria. Al usar cualquiera de los métodos de cuantificación, también puede especificar una propiedad truncateDimension en los campos vectoriales para reducir la dimensionalidad de las incrustaciones de texto. |
Asignación de tipos de datos primitivos más pequeños a campos vectoriales | Los tipos de datos estrechos, como float16, int16, int8 y Byte (binario) consumen menos espacio en memoria y en disco, pero debe disponer de un modelo de incrustación que dé salida a los vectores en un formato de datos estrecho. O bien, si tiene lógica de cuantificación personalizada que genera datos pequeños. Un tercer caso de uso que requiere menos esfuerzo es la refundición de las incrustaciones nativas float32 producidas por la mayoría de los modelos a float16. Consulte Índice de vectores binarios para obtener más información sobre los vectores binarios. |
Eliminación del almacenamiento opcional de vectores recuperables | Los vectores devueltos en una respuesta de consulta se almacenan por separado de los vectores utilizados durante la ejecución de la consulta. Si no necesita devolver vectores, puede desactivar el almacenamiento recuperable, lo que reduce el almacenamiento total por campo hasta un 50 %. |
Todas estas opciones se definen en un índice vacío. Para implementar cualquiera de ellos, use Azure Portal, las API REST o un paquete de Azure SDK destinado a esa versión de API.
Una vez definido el índice, puede cargar e indexar documentos como paso independiente.
Ejemplo: tamaño de vector por técnica de compresión vectorial
Ejemplo de código: cuantificación de vectores y opciones de almacenamiento mediante Python es un ejemplo de código de Python que crea varios índices de búsqueda que varían según su uso de la cuantificación del almacenamiento de vectores, los tipos de datos estrechos y las propiedades de almacenamiento.
Este código crea y compara el tamaño del índice de almacenamiento y vector para cada opción de optimización del almacenamiento de vectores. A partir de estos resultados, puede ver que la cuantificación reduce el tamaño del vector al máximo, pero se consigue el mayor ahorro de almacenamiento si usa varias opciones.
Nombre del índice | Tamaño de almacenamiento | Tamaño de vector |
---|---|---|
compressiontest-baseline | 21.3613MB | 4,8277 MB |
compressiontest-scalar-compression | 17.7604MB | 1,2242 MB |
compressiontest-narrow | 16,5567 MB | 2.4254MB |
compressiontest-no-stored | 10,9224 MB | 4,8277 MB |
compressiontest-all-options | 4,9192 MB | 1,2242 MB |
Las API de búsqueda notifican el almacenamiento y el tamaño de vector en el nivel de índice, por lo que los índices y no los campos deben ser la base de la comparación. Use las estadísticas de índice GET o una API equivalente en los SDK de Azure para obtener el tamaño del vector.
Consulte también
- Introducción a REST
- Supported data types (Tipos de datos admitidos)
- Búsqueda de API REST