Por Canuto  

Un nuevo proyecto de código abierto alojado en GitHub busca competir en un terreno crítico para la IA moderna: la búsqueda vectorial. turbovec, desarrollado sobre el algoritmo TurboQuant de Google Research, asegura comprimir corpus masivos con una fracción de la memoria habitual, operar sin fase de entrenamiento separada y, en varios escenarios, superar a FAISS en velocidad de búsqueda.
***

  • turbovec afirma reducir un corpus de 10 millones de documentos desde 31 GB de RAM en float32 a apenas 4 GB.
  • El proyecto, escrito en Rust con enlaces de Python, promete indexación online, filtrado nativo en búsqueda y funcionamiento totalmente local.
  • Según sus benchmarks, supera a FAISS FastScan en ARM por 12% a 20% y lo iguala o supera en varias configuraciones x86.

 


La búsqueda vectorial se ha convertido en una pieza central para sistemas de inteligencia artificial como los flujos de recuperación aumentada por generación, conocidos como RAG. En ese contexto, reducir memoria, mantener buen recall y acelerar consultas son tres objetivos que suelen chocar entre sí, especialmente cuando los corpus crecen a millones de documentos.

En ese escenario aparece TurboVec, un índice vectorial de código abierto desarrollado en Rust y expuesto también a Python. El repositorio, publicado por RyanCodrai en GitHub, sostiene que un corpus de 10 millones de documentos que ocuparía 31 GB de RAM en formato float32 puede reducirse a 4 GB, mientras ofrece búsquedas más rápidas que FAISS en varias configuraciones.

La propuesta se apoya en TurboQuant, un algoritmo presentado por Google Research como un cuantizador independiente de los datos. Su principal atractivo es que no necesita una etapa de entrenamiento de código ni una fase separada de ajuste previo, un punto importante para cargas de trabajo que deben crecer en línea sin reconstrucciones constantes del índice.

Para lectores nuevos en el tema, un índice vectorial es una estructura diseñada para almacenar y consultar embeddings, es decir, representaciones numéricas de textos, imágenes o cualquier otro dato. Estas estructuras son claves en motores de búsqueda semántica, asistentes de IA y sistemas que recuperan contexto antes de generar respuestas.

Qué ofrece turbovec y por qué busca diferenciarse

El proyecto destaca primero por su capacidad de ingesta online. En términos prácticos, esto significa que los vectores pueden añadirse al índice a medida que llegan, sin ejecutar una etapa de reentrenamiento ni reconstruir toda la base cuando el corpus crece. Para equipos que operan sistemas RAG con actualización frecuente, ese punto puede ser decisivo.

La herramienta está escrita en Rust e incluye bindings para Python. En Python puede instalarse con pip install turbovec, mientras que en Rust puede integrarse con cargo add turbovec. También incorpora una variante llamada IdMapIndex, orientada a trabajar con identificadores externos estables de tipo uint64 que sobreviven incluso después de eliminaciones.

Otra función que el proyecto remarca es el filtrado dentro del propio proceso de búsqueda. En vez de devolver resultados y luego recortarlos con reglas externas, turbovec permite pasar una lista de IDs permitidos o un mapa de bits directamente a la función de búsqueda. El kernel SIMD aplica ese filtro durante el scoring, lo que según la documentación evita sobrecostos y protege el recall cuando los filtros son muy selectivos.

Esa capacidad apunta a casos híbridos. Por ejemplo, un sistema SQL, BM25, ACL o una ventana temporal puede reducir primero un universo de candidatos, y luego turbovec reordenarlos mediante búsqueda densa. Según el repositorio, la longitud de salida es min(k, len(allowed)), por lo que si la lista permitida es menor que k, el sistema devuelve exactamente esos resultados en vez de rellenar artificialmente.

La propuesta se refuerza con una tesis cada vez más valorada en IA empresarial: mantener los datos en local. turbovec se presenta como una pieza apta para pilas RAG desconectadas, sin depender de servicios administrados y sin sacar datos de la máquina o de una VPC. Esto puede ser relevante para sectores donde la privacidad, la latencia o la memoria son restricciones duras.

Rendimiento, compresión y comparación con FAISS

La principal comparación del proyecto es contra FAISS, una de las bibliotecas más conocidas para búsqueda de vecinos aproximados. turbovec afirma superar a FAISS IndexPQFastScan entre 12% y 20% en ARM, gracias a kernels escritos a mano con NEON, y empatarlo o superarlo en varias configuraciones x86 mediante AVX-512BW, con retroceso AVX2 para compatibilidad más amplia.

En ARM, los benchmarks fueron realizados en un Apple M3 Max. En x86, el entorno reportado fue un Intel Xeon Platinum 8481C Sapphire Rapids con 8 vCPU. Según el repositorio, en x86 turbovec gana en cada configuración de 4 bits por entre 1% y 6%, mientras que en 2 bits de un solo hilo se mantiene a alrededor de 1% de FAISS.

Las únicas configuraciones donde queda ligeramente detrás son dos escenarios multihilo de 2 bits, en dimensiones 1.536 y 3.072, con una diferencia de 2% a 4%. El autor atribuye ese resultado a que el bucle de acumulación interno es demasiado corto para amortizar el desenrollado frente a la ruta AVX-512 VBMI usada por FAISS.

Los benchmarks de velocidad usan 100.000 vectores, 1.000 consultas y k=64, tomando la mediana de cinco ejecuciones. La comparación de recall se hizo frente a FAISS IndexPQ con LUT256 y nbits=8, descrito por el proyecto como un baseline fuerte y más exigente que el baseline PQ de LUT u8 personalizado del paper original de TurboQuant.

En OpenAI con dimensión 1.536 y 3.072, turbovec supera a FAISS entre 0,4 y 3,4 puntos en R@1 para configuraciones de 2 y 4 bits, según la documentación. Ambos sistemas convergen a 1,0 para k=4. En GloVe con dimensión 200, considerado el régimen más difícil, turbovec supera a FAISS por 0,3 puntos en 4 bits, pero queda 1,2 puntos por debajo en R@1 con 2 bits antes de acercarse hacia k≈16.

En compresión, el ejemplo más citado es un vector de 1.536 dimensiones. En float32 ocupa 6.144 bytes, pero con cuantización de 2 bits puede reducirse a 384 bytes, una compresión de 16x. Esa reducción es la base de la afirmación inicial sobre bajar un corpus de 10 millones de documentos de 31 GB a 4 GB.

Cómo funciona TurboQuant dentro del índice

El mecanismo central parte de una idea geométrica. Cada vector se interpreta como una dirección en una hiperesfera de alta dimensión. Primero se elimina la longitud o norma del vector y se guarda aparte como un único float. Así, el sistema trabaja sobre una dirección unitaria y conserva por separado la magnitud original.

Luego se aplica una rotación aleatoria compartida mediante una matriz ortogonal. Tras esa transformación, cada coordenada sigue una distribución Beta que, en alta dimensión, converge hacia una gaussiana N(0, 1/d). El argumento técnico del algoritmo es que esta propiedad vuelve predecible la distribución de coordenadas con independencia de los datos de entrada.

Sobre esa base entra una etapa de calibración por coordenada, llamada TQ+. En dimensiones finitas, sobre todo en embeddings de pocos bits o estilos tipo word vectors, las coordenadas pueden desviarse de la forma Beta canónica. turbovec ajusta dos escalares por coordenada, desplazamiento y escala, durante la primera adición, usando los cuantiles empíricos de 5% y 95%.

Esa calibración queda congelada tras la primera ingesta y se reutiliza en adiciones posteriores. El proyecto sostiene que esto mejora el recall hasta en 1,4 puntos porcentuales en @1 en las celdas más desviadas, como GloVe a 2 bits. A partir de allí, la cuantización escalar usa Lloyd-Max para encontrar límites y centroides óptimos sin entrenamiento basado en datos, ya que se calcula una sola vez desde las matemáticas del modelo.

Después, los códigos se empaquetan de forma compacta en bytes. Cada coordenada se vuelve un entero pequeño, de 0 a 3 para 2 bits o de 0 a 15 para 4 bits. Finalmente, el índice aplica una corrección de renormalización por longitud, adaptada de RaBitQ, para compensar la subestimación sistemática de productos internos que introduce la cuantización escalar.

Según el proyecto, esa corrección no añade costo en la búsqueda. El escalar correctivo se calcula en la codificación como ||v|| dividido entre el producto interno del vector unitario rotado con su propia reconstrucción de centróide. El kernel multiplica la puntuación por candidato por ese valor antes de insertarlo en el heap, con el objetivo de transformar un estimador sesgado en uno imparcial.

Integraciones, compatibilidad y casos de uso

Más allá del núcleo técnico, turbovec intenta reducir el costo de adopción para desarrolladores. El repositorio ofrece integraciones como reemplazo directo para almacenes de vectores o documentos de referencia en varios marcos populares, incluidos LangChain, LlamaIndex, Haystack y Agno. La promesa es conservar la misma semántica pública y de persistencia con mínimos cambios en la tubería.

Ese enfoque puede resultar atractivo para equipos que ya operan aplicaciones RAG y no quieren rediseñar toda su arquitectura para probar una nueva base vectorial. En una etapa donde muchas compañías buscan optimizar costos de inferencia y recuperación, una reducción de memoria combinada con desempeño competitivo puede traducirse en menor infraestructura o mayor densidad por nodo.

El proyecto también detalla que las compilaciones para x86_64 apuntan a x86-64-v3, con AVX2 como línea base, lo que abarca hardware desde Haswell en adelante. El kernel AVX-512 se activa dinámicamente solo si el hardware lo soporta. Ese dato es importante porque el mejor rendimiento no depende de una única clase de CPU, aunque sí aprovecha extensiones modernas cuando están disponibles.

Para reproducibilidad, el repositorio incluye scripts para descargar datasets y ejecutar benchmarks de velocidad, recall y compresión, con resultados guardados en JSON y herramientas para regenerar gráficos. Ese nivel de detalle no garantiza por sí solo que todos los usuarios vean el mismo desempeño en producción, pero sí facilita la validación externa de las afirmaciones.

En conjunto, turbovec entra a un segmento muy competitivo del software para IA con una propuesta clara: menos memoria, ingestión online, filtrado nativo y operación local. Quedará por ver cuánta tracción consigue frente a alternativas consolidadas, pero su combinación de TurboQuant, Rust y bindings de Python lo convierte en un lanzamiento técnico que probablemente atraerá la atención de desarrolladores enfocados en RAG, búsqueda semántica y privacidad.


ADVERTENCIA: DiarioBitcoin ofrece contenido informativo y educativo sobre diversos temas, incluyendo criptomonedas, IA, tecnología y regulaciones. No brindamos asesoramiento financiero. Las inversiones en criptoactivos son de alto riesgo y pueden no ser adecuadas para todos. Investigue, consulte a un experto y verifique la legislación aplicable antes de invertir. Podría perder todo su capital.

Suscríbete a nuestro boletín