- Un conjunto de algoritmos de cuantización que resuelve de raíz el problema del sobrecosto de memoria en vectores de alta dimensión, aplicable tanto a la compresión de caché clave-valor de los LLM como a la búsqueda vectorial
- Una estructura de compresión en 2 etapas que primero comprime los datos con alta calidad mediante PolarQuant y luego elimina el error residual con solo 1 bit usando el algoritmo QJL
- Puede cuantizar la caché clave-valor hasta 3 bits sin pérdida de precisión del modelo ni entrenamiento o ajuste fino, y logra hasta 8 veces más rendimiento en GPUs H100
- En búsqueda vectorial también registra tasas de recall óptimas sin codebooks masivos ni ajustes por dataset, superando métodos SOTA existentes
- Un aporte algorítmico fundamental con eficiencia demostrable cercana al límite inferior teórico, con potencial de jugar un papel clave en modelos como Gemini y en infraestructura de búsqueda semántica a gran escala
Contexto de vectores y cuantización
- Los vectores son la forma fundamental en que los modelos de IA entienden y procesan información; los vectores de alta dimensión representan información compleja como características de imágenes, significado de palabras o propiedades de datasets
- Los vectores de alta dimensión consumen enormes cantidades de memoria, lo que genera cuellos de botella en la caché clave-valor (una hoja de referencia digital rápida que guarda información usada con frecuencia con etiquetas simples para permitir búsqueda inmediata)
- La cuantización vectorial es una técnica clásica de compresión de datos que reduce el tamaño de los vectores de alta dimensión, ayudando a acelerar la búsqueda vectorial y a aliviar el cuello de botella de la caché clave-valor
- La cuantización vectorial tradicional tiene su propio sobrecosto de memoria, porque debe calcular y almacenar constantes de cuantización con precisión completa para cada pequeño bloque de datos, lo que añade un costo extra de 1 a 2 bits por número y compensa parcialmente el objetivo de la cuantización
Cómo funciona TurboQuant
- TurboQuant es un método de compresión que logra una alta reducción del tamaño del modelo sin pérdida de precisión, y soporta tanto compresión de caché clave-valor como búsqueda vectorial
- Está compuesto por dos etapas clave:
Etapa 1: compresión de alta calidad (método PolarQuant)
- Rota aleatoriamente los vectores de datos para simplificar la estructura geométrica de los datos, y luego aplica de forma individual un cuantizador estándar de alta calidad a cada parte del vector
- En esta etapa se usan la mayoría de los bits para capturar los conceptos principales y la intensidad del vector original
Etapa 2: eliminación del error oculto
- Al pequeño error restante de la etapa 1 se le aplica el algoritmo QJL con una capacidad de compresión residual de apenas 1 bit
- QJL actúa como un verificador matemático de errores y elimina el sesgo para producir puntuaciones de atención más precisas
QJL: técnica de 1 bit con cero sobrecosto
- Aprovecha la transformación de Johnson-Lindenstrauss para reducir datos de alta dimensión preservando las distancias y relaciones clave entre puntos de datos
- Reduce cada número del vector resultante a un único bit de signo (+1 o -1), eliminando por completo el sobrecosto de memoria
- Usa un estimador especial que equilibra estratégicamente consultas de alta precisión y datos simplificados de baja precisión para mantener la exactitud
- Esto permite calcular con precisión las puntuaciones de atención que determinan qué partes de la entrada son importantes y cuáles pueden ignorarse
PolarQuant: un nuevo “ángulo” para la compresión
- Es un enfoque que resuelve el problema del sobrecosto de memoria de una manera completamente distinta
- En lugar de coordenadas estándar (X, Y, Z), convierte los vectores a coordenadas polares; es parecido a reemplazar “3 cuadras al este y 4 al norte” por “5 cuadras en dirección de 37 grados”
- El resultado de la transformación se compone de dos tipos de información: un radio que representa la intensidad de los datos clave y un ángulo que representa la dirección y el significado de los datos
- Como el patrón de los ángulos es conocido y está altamente concentrado, mapea los datos en una cuadrícula “circular” fija con fronteras ya conocidas en vez de una cuadrícula “rectangular” con fronteras cambiantes, lo que omite la costosa etapa de normalización de datos
- En un vector de dimensión d, agrupa pares de coordenadas y los mapea al sistema polar, junta los radios por pares y repite una transformación polar recursiva hasta destilar finalmente un único radio y un conjunto de ángulos descriptivos
Experimentos y resultados
Rendimiento en benchmarks de contexto largo
- Fue evaluado con LLM open source (Gemma, Mistral) en benchmarks estándar de contexto largo como LongBench, Needle In A Haystack, ZeroSCROLLS, RULER y L-Eval
- TurboQuant logró resultados óptimos tanto en distorsión del producto punto (dot product distortion) como en recall, mientras minimizaba al mismo tiempo la huella de memoria clave-valor
- En el modelo Llama-3.1-8B-Instruct mostró un rendimiento sólido frente al baseline KIVI en tareas variadas como preguntas y respuestas, generación de código y resumen
Tarea Needle-in-Haystack
- En pruebas para encontrar información específica dentro de grandes volúmenes de texto, TurboQuant obtuvo resultados downstream perfectos en todos los benchmarks
- Redujo el tamaño de la memoria clave-valor en al menos 6 veces
- PolarQuant también mostró un desempeño prácticamente sin pérdida en esta tarea
Rendimiento en tiempo de ejecución
- Puede cuantizar la caché clave-valor a 3 bits sin entrenamiento ni ajuste fino y sin comprometer la precisión del modelo
- Logra tiempos de ejecución más rápidos que el LLM original; la implementación es extremadamente eficiente y el sobrecosto en runtime es despreciable
- TurboQuant de 4 bits alcanzó hasta 8 veces más rendimiento en el cálculo de logits de atención frente a claves no cuantizadas de 32 bits en una GPU H100, medido contra un baseline optimizado en JAX
Rendimiento en búsqueda vectorial
- Fue comparado con métodos SOTA como PQ y RabbiQ en búsqueda de vectores de alta dimensión
- Se utilizó la tasa de recall 1@k, que mide con qué frecuencia el algoritmo captura el mejor resultado real de producto punto dentro de los k mejores aproximados
- Frente a baselines que dependen de codebooks masivos e ineficientes y de ajustes por dataset, TurboQuant registró tasas de recall consistentemente superiores
- En el dataset GloVe (d=200), logró la mejor tasa 1@k recall frente a varios baselines modernos de cuantización
- Ofrece una tasa de distorsión casi óptima de forma data-oblivious, manteniendo con la eficiencia de un sistema de 3 bits la precisión de modelos mucho más pesados
Perspectivas a futuro
- TurboQuant, QJL y PolarQuant no son solo soluciones prácticas de ingeniería, sino aportes algorítmicos fundamentales respaldados por sólidas pruebas teóricas
- Tienen eficiencia demostrable y operan cerca del límite inferior teórico, por lo que pueden ser robustos y confiables en sistemas críticos de gran escala
- Más allá de resolver el cuello de botella de la caché clave-valor en modelos como Gemini, su impacto en la cuantización vectorial en línea eficiente puede extenderse mucho más
- A medida que la búsqueda moderna evoluciona de palabras clave hacia la comprensión de intención y significado, la búsqueda vectorial para encontrar los elementos semánticamente más similares en bases de datos con miles de millones de vectores se vuelve esencial
- TurboQuant permite construir y consultar índices vectoriales a gran escala con memoria mínima, tiempo de preprocesamiento casi nulo y precisión de última generación, haciendo que la búsqueda semántica a escala de Google sea más rápida y eficiente
4 comentarios
"La rotación es un poder infinito. Créelo."
Mis respetos.
Inicié sesión por este comentario.
Opiniones en Hacker News
La investigación sobre compresión de caché KV es de verdad un avance muy interesante.
Aun así, es una pena que en este trabajo falten citas sobre el mecanismo matemático central.
La técnica de aplicar una rotación geométrica para tratar geometría de alta dimensión y luego realizar una cuantización extrema fue propuesta primero en nuestro paper de NeurIPS 2021 “DRIVE”.
Con este enfoque basado en rotación y un mecanismo de corrección de sesgo, logramos una estimación óptima de la media de la dispersión.
Después también presentamos esto en un seminario por invitación de Google, y considerando la similitud teórica entre TurboQuant y PolarQuant, ojalá en futuras versiones se reflejen las citas al trabajo previo.
Es decir, me pregunto si se trata de almacenar una matriz diagonal y una nueva base para comprimir más.
Me gustaría que explicaran qué relación tiene con este trabajo.
Estas ideas suelen redescubrirse cada pocos años; por ejemplo, en este paper de 2017 ya había un enfoque similar.
Pero también puede pasar que los investigadores hayan llegado de forma independiente a una idea parecida cuando el trabajo ya estaba bastante avanzado.
Las buenas ideas son de esas a las que naturalmente llega quien entiende el problema a fondo.
No entiendo la explicación de que “TurboQuant rota aleatoriamente los datos para simplificar la geometría”.
¿No hay garantía de que una rotación siempre produzca una forma más simple?
Además, la parte que dice que “reduce datos de alta dimensión con una transformación Johnson–Lindenstrauss y representa cada vector con bits de signo” tampoco me convence: no me queda claro cómo un solo valor booleano puede mantener la información relacional.
En algunas dimensiones aparecen activaciones outlier, y por las características del optimizador Adam este fenómeno se refuerza.
Como referencias, vale la pena ver SmoothQuant y Privileged Basis.
Eso reduce el aprendizaje de reglas innecesarias y estabiliza la optimización.
O sea, evita que el modelo aprenda reglas triviales como “si cierto dígito en cierta posición de cierta dimensión es 5, entonces es un gato”.
Al multiplicar por una matriz de rotación, los datos quedan distribuidos más uniformemente y eso permite una cuantización más eficiente.
Después, con el algoritmo de Lloyd–Max se optimizan los límites y los valores de reconstrucción, y el sesgo restante se corrige con 1 bit.
Así se puede mantener alta precisión incluso con pocos bits.
Por ejemplo, si conviertes valores de punto flotante a otra unidad (bel → decibel), pueden expresarse como valores más parecidos entre sí y eso facilita la compresión.
O sea, es el proceso de volver a agrupar cerca del centro datos que estaban muy alejados.
Además, como cada dimensión se codifica por separado, el vector completo no se reduce a un solo booleano.
Esta entrada de blog es de baja calidad.
Los ejes de este gráfico están mal etiquetados, y esta visualización en video tampoco transmite en absoluto el concepto de Polar Quantization.
Otro gráfico empieza el eje en 48 y exagera la diferencia real.
En general, la confiabilidad del material visual y la calidad de la comunicación son pobres.
Alguien ya lo está implementando en llama.cpp.
Ver este commit relacionado.
Esperan que el teorema de Johnson–Lindenstrauss siga siendo válido y que la cuantización independiente de cada coordenada sea teóricamente justificable.
No tengo mucho conocimiento del dominio, pero la estructura se ve clara.
Hay bastante probabilidad de que se fusione a la rama principal en 4 a 6 semanas.
Hay una animación que explica TurboQuant de forma intuitiva.
Este es un resumen que armé a nivel de licenciatura.
La clave es cuantizar la caché KV minimizando la pérdida de información.
Como la mayoría de los vectores se concentran cerca del ecuador de una esfera de alta dimensión, una rotación uniformiza la distribución y aumenta la conservación de la entropía.
PolarQuant intentó esto con una transformación a coordenadas polares, pero TurboQuant lo simplifica y añade corrección de sesgo QJL.
En resumen, logra compresión de alta eficiencia con PolarQuant + QJL + correcciones prácticas.
La entrada de blog tiene muchos errores y resulta confusa.
El codebook de coordenadas hiperpolares de PolarQuant sigue presente en parte en TurboQuant.
Este texto está entre los peores que he visto para explicar componentes de IA.
Casi no ofrece contexto técnico.
Menciona el teorema de Johnson–Lindenstrauss pero no explica la conexión concreta.
Por ejemplo, es como explicar “3 cuadras al este, 4 cuadras al norte” diciendo “muévete 5 cuadras a un ángulo de 37 grados”; se siente como una analogía de nivel secundaria.
Ya se publicó una implementación independiente en PyTorch.
turboquant-pytorch
El blog se publicó hace poco, pero el paper fue subido a arXiv hace casi un año.
Me pregunto si ya se aplicó a modelos como Gemini y, de ser así, si también podría reducir el costo de RAM para uso personal.
Sorprende la velocidad con la que la investigación en compresión se está convirtiendo en aplicaciones reales.
Igual que en formatos de imagen AVIF y JPEG XL, que derivaron de investigación en códecs de video, también es muy posible que las técnicas de cuantización para IA pronto se apliquen en entornos reales de inferencia.
Algunos conceptos, como el espacio de color XYB, son compartidos, y en los LLM seguramente también hará falta una ingeniería a medida similar.