La búsqueda de vectores sustenta la mayoría de los canales de generación aumentada de recuperación (RAG). A escala, resulta caro. Almacenar 10 millones de documentos incrustados en float32 consume 31 GB de RAM. Para los equipos de desarrollo que ejecutan inferencia local o local, ese número crea limitaciones reales.
Una nueva biblioteca de código abierto llamada turbovec aborda esto directamente. Es un índice vectorial escrito en Rust con enlaces de Python. Está construido sobre TurboQuant, un algoritmo de cuantificación de Google Research. El mismo corpus de 10 millones de documentos cabe en 4 GB con turbovec. En hardware ARM, la velocidad de búsqueda supera a FAISS IndexPQFastScan entre un 12% y un 20%.
El papel TurboQuant
TurboQuant fue presentado por el equipo de investigación de Google. El equipo de Google propone TurboQuant como un cuantificador ajeno a los datos. Logra tasas de distorsión casi óptimas en todos los anchos y dimensiones de bits. No requiere entrenamiento ni pases sobre los datos.
La mayoría de los cuantificadores vectoriales de producción, incluida la cuantificación de productos de FAISS, requieren un paso de capacitación en el libro de códigos. Debe ejecutar k-means sobre una muestra representativa de sus vectores antes de que comience la indexación. Si su corpus crece o cambia, es posible que necesite volver a entrenar y reconstruir el índice por completo. TurboQuant se salta todo eso. Utiliza una propiedad analítica de vectores rotados en lugar de una calibración dependiente de los datos.
Cómo turbovec cuantifica los vectores
El proceso de cuantificación tiene cuatro pasos:
(1) Cada vector está normalizado. La longitud (norma) se elimina y se almacena como un solo flotador. Cada vector se convierte en una dirección unitaria en una hiperesfera de alta dimensión.
(2) Se aplica una rotación aleatoria. Todos los vectores se multiplican por la misma matriz ortogonal aleatoria. Después de la rotación, cada coordenada sigue independientemente una distribución Beta. En dimensiones altas, esto converge a Gaussiano N(0, 1/d). Esto es válido para cualquier dato de entrada: la rotación hace que la distribución de coordenadas sea predecible.
(3) Se aplica la cuantificación escalar Lloyd-Max. Debido a que la distribución se conoce analíticamente, los límites y centroides óptimos del segmento se pueden calcular previamente únicamente a partir de matemáticas. Para una cuantificación de 2 bits, eso significa 4 depósitos por coordenada. Para 4 bits, significa 16 depósitos. No se necesitan pases de datos.
(4) Las coordenadas cuantificadas se empaquetan en bytes. Un vector de 1536 dimensiones se reduce de 6144 bytes en FP32 a 384 bytes en 2 bits. Esa es una relación de compresión de 16x.
En el momento de la búsqueda, la consulta se rota una vez al mismo dominio. La puntuación se realiza directamente en función de los valores del libro de códigos. El kernel de puntuación utiliza elementos intrínsecos SIMD (NEON en ARM y AVX-512BW en x86 moderno, con un respaldo AVX2) con tablas de búsqueda divididas por nibble para el rendimiento.
TurboQuant logra una distorsión dentro de aproximadamente 2,7 veces el límite inferior de Shannon teórico de la información.
Recordación y velocidad: los números
Todos los puntos de referencia utilizan 100.000 vectores, 1000 consultas, k = 64 e informan la mediana de 5 ejecuciones.
Para recordar, turbovec se compara con FAISS IndexPQ (LUT256, nbits=8, float32 LUT). Esta es una base sólida: FAISS utiliza un LUT de mayor precisión en el momento de la puntuación y k-means++ para el entrenamiento del libro de códigos. A pesar de esto, TurboQuant y FAISS están entre 0 y 1 punto en R@1 para incrustaciones de OpenAI en d=1536 y d=3072. Ambos convergen a una recuperación de 1,0 en k = 4–8. Guante en d=200 es más difícil. En esa dimensión, TurboQuant sigue a FAISS entre 3 y 6 puntos en R @ 1, cerrando en k≈16–32.
En cuanto a la velocidad, los resultados de ARM (Apple M3 Max) muestran que turbovec supera al FAISS IndexPQFastScan entre un 12% y un 20% en todas las configuraciones. En x86 (Intel Xeon Platinum 8481C / Sapphire Rapids, 8 vCPU), turbovec gana cada configuración de 4 bits entre un 1% y un 6%. Se ejecuta dentro de ~1% de FAISS en un solo subproceso de 2 bits. Dos configuraciones se sitúan ligeramente por detrás de FAISS: multiproceso de 2 bits en d=1536 y d=3072. Allí, el circuito de acumulación interno es demasiado corto para desenrollar la amortización. La ruta VBMI AVX-512 de FAISS mantiene la ventaja en esos dos casos (2–4%).
API de Python
La instalación es un solo comando: pip install turbovec. La clase principal es TurboQuantIndex, inicializada con una dimensión y un ancho de bits.
Una segunda clase, IdMapIndex, admite ID uint64 externos estables que sobreviven a las eliminaciones. La eliminación es O(1) por ID. Esto es útil para almacenes de documentos donde los vectores se actualizan o eliminan con frecuencia.
turbovec se integra con LangChain (pip install turbovec[langchain]), LlamaIndex (pip instalar turbovec[llama-index]) y Haystack (pip install turbovec[haystack]). La caja Rust está disponible a través de cargo add turbovec.
Explicador visual de Marktechpost
Conclusiones clave
Sin formación en libros de códigos. turbovec indexa vectores instantáneamente: sin k-medias, sin reconstrucciones a medida que crece el corpus. Compresión 16x. Un vector float32 de 1536 dimensiones se reduce de 6144 bytes a 384 bytes con una cuantificación de 2 bits. Más rápido que FAISS en ARM. turbovec supera a FAISS IndexPQFastScan entre un 12% y un 20% en ARM en todas las configuraciones. Distorsión casi óptima. TurboQuant logra una distorsión dentro de ~2,7x del límite inferior de Shannon, probablemente cerca del límite teórico. Totalmente local. Sin servicio administrado, sin salida de datos: se combina con cualquier modelo de integración de código abierto para una pila RAG aislada.
Consulte el repositorio aquí. Además, no dude en seguirnos en Twitter y no olvide unirse a nuestro SubReddit de más de 150.000 ML y suscribirse a nuestro boletín. ¡Esperar! estas en telegrama? Ahora también puedes unirte a nosotros en Telegram.
¿Necesita asociarse con nosotros para promocionar su repositorio de GitHub O su página principal de Hugging O su lanzamiento de producto O seminario web, etc.? Conéctate con nosotros