TurboVec comprime 10 millones de embeddings de 31 GB a unos 4 GB

Almacenar diez millones de embeddings de 768 dimensiones en formato float32 exige unos 30,72 GB de memoria antes de contar metadatos, identificadores o estructuras de búsqueda. TurboVec propone reducir esa misma colección a cerca de 4 GB mediante TurboQuant, un algoritmo de Google Research que comprime los vectores sin entrenar previamente un libro de códigos con el corpus completo.

Las claves de TurboVec y TurboQuant en 30 segundos

  • TurboQuant comprime vectores mediante normalización, rotación aleatoria y cuantización escalar.
  • Diez millones de embeddings de 768 dimensiones pueden pasar de unos 31 GB a cerca de 4 GB con 4 bits.
  • El método base no necesita entrenar un código específico para cada conjunto de datos.
  • TurboVec ofrece una implementación en Rust con interfaces para Python y búsquedas filtradas.
  • Sus primeras pruebas superan a FAISS entre un 10 % y un 19 % en ARM, aunque el resultado cambia según el procesador y la configuración.

La diferencia no procede de una nueva base de datos distribuida ni de añadir más memoria al servidor. TurboVec almacena cada coordenada utilizando dos o cuatro bits, frente a los 32 bits habituales de un número en coma flotante. La reducción permite mantener índices mucho mayores en RAM, mejorar el uso de las cachés del procesador y desplegar determinadas aplicaciones de generación aumentada mediante recuperación, conocidas como RAG, en máquinas más pequeñas.

Sin embargo, el titular necesita varios matices. Los 31 GB presuponen embeddings de 768 dimensiones y solo contabilizan los vectores. Tampoco todos los índices vectoriales almacenan sus datos en float32 sin compresión. FAISS, Qdrant, Elasticsearch, pgvector y otros motores ya ofrecen diferentes técnicas para reducir memoria, acelerar consultas o mover parte del índice a almacenamiento.

TurboVec no elimina la infraestructura. Lo que cambia es la cantidad necesaria para un caso concreto.

Cómo consigue TurboQuant reducir el tamaño de los vectores

TurboQuant nació como un trabajo de Google Research orientado a resolver un problema conocido de la cuantización vectorial: comprimir vectores de muchas dimensiones sin destruir las relaciones geométricas utilizadas durante la búsqueda.

Los sistemas tradicionales de cuantización de producto suelen dividir cada vector en grupos y entrenar un libro de códigos sobre una muestra representativa del conjunto. Ese entrenamiento identifica los centroides que se utilizarán después para representar los datos con menos bits.

El proceso funciona, pero introduce varias obligaciones. Hay que seleccionar una muestra, entrenar el cuantizador, conservar los libros de códigos y valorar si deben generarse de nuevo cuando cambia la distribución del corpus.

TurboQuant adopta otro camino. Su funcionamiento puede resumirse en cinco etapas:

EtapaQué hacePara qué sirve
NormalizaciónSepara la magnitud del vector y convierte el resto en una dirección unitariaPermite comparar direcciones de manera consistente
Rotación aleatoriaAplica la misma transformación ortogonal a todos los vectoresHace que las coordenadas sigan una distribución matemática predecible
Cuantización escalarAsigna cada coordenada a uno de varios intervalos precalculadosReduce cada valor a dos o cuatro bits
EmpaquetadoAgrupa los pequeños códigos dentro de bytesDisminuye el espacio ocupado en memoria
Corrección de puntuaciónGuarda un factor por vector para ajustar el producto internoReduce el sesgo introducido por la compresión

La idea central es que, después de la rotación, las coordenadas se aproximan a una distribución beta conocida que converge hacia una distribución normal cuando aumenta la dimensión. Esto permite calcular de antemano los intervalos y centroides del cuantizador mediante el algoritmo Lloyd-Max.

Los valores no se obtienen entrenando un libro de códigos sobre todos los documentos. Esa propiedad hace que el método sea independiente de la distribución concreta del corpus y permita incorporar nuevos vectores sin reconstruir el índice completo.

El artículo de investigación afirma que TurboQuant se aproxima al límite teórico de distorsión de Shannon con una diferencia limitada a un factor constante cercano a 2,7. En las pruebas publicadas, también superó a distintas técnicas de cuantización de producto en recuperación de vecinos cercanos y redujo el tiempo de preparación del índice hasta hacerlo prácticamente inexistente.

De 31 GB a 4 GB: qué representa realmente la comparación

La operación que sustenta el ejemplo es sencilla:

RepresentaciónCálculo por vector de 768 dimensionesMemoria para 10 millones
float32768 × 4 bytes30,72 GB
Cuantización de 4 bits768 × 0,5 bytes3,84 GB
Cuantización de 2 bits768 × 0,25 bytes1,92 GB

La cifra final será algo mayor porque el índice necesita almacenar normas, factores de corrección, identificadores, estructuras auxiliares y alineamiento de memoria. Aun así, la reducción frente a float32 sigue siendo considerable.

Un embedding de 1.536 dimensiones ocuparía el doble: aproximadamente 61,44 GB para diez millones de vectores sin comprimir. TurboVec indica que uno de estos vectores pasa de 6.144 bytes en float32 a 384 bytes cuando se representa con dos bits por coordenada, una reducción teórica de 16 veces para la parte estrictamente vectorial.

Este ahorro no implica que toda una plataforma RAG pase a ocupar 4 GB. Todavía deben almacenarse los documentos originales, sus fragmentos, los metadatos, los permisos, los índices textuales y las estructuras utilizadas para relacionar cada vector con su contenido.

La memoria vectorial puede ser una parte importante del sistema, pero no es la única.

TurboVec lleva el algoritmo a Rust y Python

TurboVec es una implementación independiente y de código abierto escrita en Rust. El proyecto incorpora interfaces para Python y utiliza instrucciones SIMD para calcular muchas puntuaciones en paralelo.

En ARM emplea kernels NEON. En procesadores x86 modernos puede utilizar AVX-512BW, con alternativas AVX2 y una ruta escalar para equipos más antiguos.

Sus desarrolladores aseguran que, en pruebas con 100.000 vectores, 1.000 consultas y un valor de k=64, TurboVec superó a FAISS IndexPQFastScan entre un 10 % y un 19 % en un Apple M3 Max. En un Intel Xeon Platinum 8481C venció por hasta aproximadamente un 5 % en las configuraciones de cuatro bits, mientras que quedó ligeramente por detrás de FAISS al utilizar dos bits.

Por tanto, no existe una superioridad absoluta frente a FAISS. El resultado depende de la arquitectura del procesador, las dimensiones del embedding, el número de bits, el paralelismo y el tipo de consulta.

AlternativaCompresiónEntrenamiento previoFortalezasLímites
TurboVecTurboQuant de 2 o 4 bitsNo en el método baseIngesta continua, bajo consumo de RAM y ejecución localProyecto joven y con menos recorrido en producción
FAISS IndexPQCuantización de productoBiblioteca madura, flexible y ampliamente probadaEl entrenamiento y los libros de códigos complican las actualizaciones
FAISS HNSWHabitualmente vectores completosNo para la compresiónRecall alto y búsqueda aproximada rápidaConsume bastante más memoria
pgvectorExacta, HNSW o IVFFlatDepende del índiceMantiene datos y vectores en PostgreSQLNo está centrado en compresión extrema
QdrantCuantización escalar, binaria y otras opcionesSegún configuraciónFiltros, persistencia y operación como base vectorialIncorpora más componentes que una biblioteca local
ElasticsearchVectores, búsqueda textual e índices híbridosSegún técnicaCombina BM25, filtros y búsqueda semánticaMayor consumo operativo para casos pequeños

TurboVec también ofrece integraciones que buscan sustituir los almacenes vectoriales en memoria de LangChain, LlamaIndex, Haystack y Agno sin reconstruir toda la aplicación. El repositorio las presenta como reemplazos compatibles con las interfaces públicas y los mecanismos de persistencia de esos componentes de referencia.

Esto no significa que pueda sustituir sin cambios a cualquier base vectorial administrada. Una plataforma distribuida puede aportar replicación, copias de seguridad, alta disponibilidad, gestión multiusuario, controles operativos y escalado horizontal que no forman parte necesariamente de una biblioteca embebida.

Búsquedas filtradas sin recuperar resultados incorrectos

Una de las funciones más interesantes de TurboVec es el filtrado por identificadores dentro del propio kernel de búsqueda.

En numerosos sistemas RAG, el índice recupera primero los vectores más próximos y aplica después los filtros. El problema aparece cuando solo una fracción pequeña de los resultados pertenece al cliente, departamento, fecha o nivel de acceso solicitado. El sistema puede descartar casi todos los candidatos y devolver menos documentos de los esperados.

La alternativa habitual consiste en recuperar muchos más resultados de los necesarios y filtrarlos después. Esto aumenta el trabajo y tampoco garantiza que los mejores elementos autorizados aparezcan dentro de la primera selección.

TurboVec permite entregar una lista de identificadores admitidos o una máscara de posiciones. El kernel ignora los bloques que no contienen candidatos autorizados y selecciona los mejores resultados dentro del conjunto permitido.

Esta capacidad encaja especialmente bien en sistemas con varios clientes, controles de acceso por documento, filtros temporales o una primera fase de recuperación mediante SQL o BM25. No elimina la necesidad de aplicar permisos en la aplicación, pero evita que el filtro semántico se convierta en una operación posterior que degrade los resultados.

No necesita entrenamiento, pero TurboVec sí incorpora una calibración opcional

La afirmación de que TurboQuant no depende del conjunto de datos es correcta para el algoritmo base. Los intervalos de cuantización se derivan de una distribución matemática conocida y no de centroides aprendidos a partir del corpus.

La implementación actual de TurboVec añade, sin embargo, una variante denominada TQ+. Durante la primera incorporación de vectores calcula dos valores por coordenada, un desplazamiento y una escala, a partir de los percentiles 5 y 95 observados.

Esta calibración busca corregir desviaciones que aparecen en dimensiones finitas, sobre todo con embeddings de pocas dimensiones o configuraciones de dos bits. El ajuste queda congelado después de la primera carga y se reutiliza en las siguientes, por lo que no exige reconstruir el índice cuando crece el corpus.

No es equivalente al entrenamiento completo de un libro de códigos, pero sí introduce una pequeña dependencia respecto a los primeros datos incorporados. Esta diferencia importa cuando se presenta TurboVec como una solución totalmente ajena al dataset.

Privacidad local, siempre que todo el flujo permanezca local

TurboVec puede ejecutarse dentro de un servidor, una nube privada o una red aislada. No obliga a enviar el índice a un servicio administrado y puede combinarse con modelos de embeddings abiertos para mantener el flujo completo dentro de la infraestructura de la organización.

La privacidad no procede automáticamente del algoritmo. Si los documentos se envían a una API externa para generar los embeddings, parte de la información habrá salido de la red antes de llegar a TurboVec. También será necesario proteger los ficheros del índice, los documentos originales, las claves, las copias de seguridad y los registros de consultas.

Para un RAG privado, la cadena completa debería contemplar:

  • generación local o controlada de embeddings;
  • cifrado de datos almacenados y comunicaciones;
  • aislamiento por usuario o cliente;
  • filtros de autorización antes y durante la búsqueda;
  • trazabilidad de las consultas;
  • políticas de eliminación y retención.

TurboVec puede reducir el coste de una de esas capas. No sustituye el diseño de seguridad del sistema.

Su aportación más interesante es demostrar que una colección grande de embeddings no obliga necesariamente a desplegar una base vectorial distribuida ni un clúster con cientos de gigabytes de memoria. Para determinados proyectos, una biblioteca local, un servidor razonable y una cuantización bien escogida pueden ser suficientes.

Preguntas frecuentes

¿Cuánta memoria ocupan diez millones de embeddings?

Diez millones de vectores de 768 dimensiones en float32 ocupan aproximadamente 30,72 GB, sin incluir identificadores, metadatos ni estructuras del índice. Con cuatro bits por coordenada, la parte vectorial baja a unos 3,84 GB.

¿TurboVec necesita entrenar el índice?

El método base de TurboQuant no necesita entrenar un libro de códigos sobre el corpus. TurboVec incorpora una calibración TQ+ opcional durante la primera carga, pero no requiere reconstrucciones posteriores al añadir más vectores.

¿TurboVec es más rápido que FAISS?

En los benchmarks del proyecto supera a FAISS FastScan entre un 10 % y un 19 % en ARM. En x86 gana algunas pruebas de cuatro bits y queda ligeramente por detrás en varias configuraciones de dos bits.

¿Puede TurboVec sustituir una base de datos vectorial?

Puede hacerlo en aplicaciones locales o embebidas que no necesiten una plataforma distribuida. No ofrece automáticamente todas las funciones operativas de una base administrada, como replicación, alta disponibilidad, gobierno multiusuario o escalado entre nodos.

Scroll al inicio