es una de las técnicas clave para reducir la huella de memoria de los modelos de lenguaje grande (LLM). Funciona convirtiendo el tipo de datos de parámetros del modelo a partir de formatos de mayor precisión, como el punto flotante de 32 bits (FP32) o el punto flotante de 16 bits (FP16/BF16) a formatos enteros de menor precisión, típicamente INT8 o INT4. Por ejemplo, cuantificar un modelo a 4 bits significa que cada parámetro usa solo 0.5 bytes, en comparación con 4 bytes en FP32.
Los métodos de cuantización posterior al entrenamiento como GPTQ y AWQ pueden reducir drásticamente el tamaño de los modelos grandes. Un modelo como Llama 3 con 70 mil millones de parámetros puede ocupar alrededor de 140 GB en FP16, pero esto puede reducirse a aproximadamente 40 GB utilizando cuantización de 4 bits, al tiempo que mantiene un fuerte rendimiento en las tareas aguas abajo.
Sin embargo, a pesar de esta reducción sustancial, tales modelos aún exceden la capacidad de memoria de la mayoría de las GPU de grado de consumo, que generalmente ofrecen 24 GB a 32 GB de VRAM. Para que estos modelos sean realmente accesibles, se requiere cuantificación aún más bajos de anchos de bit, como 2 bits. Si bien los avances recientes en la cuantización de baja bits son prometedores, lograr una cuantización estable y precisa de 2 bits sigue siendo un desafío significativo.
En este artículo, revisamos una técnica llamada Eora Eso ayuda a compensar los errores inducidos por cuantización. Eora es un sin entrenamiento Método, lo que significa que se puede aplicar de manera rápida y eficiente a cualquier modelo, incluso los más grandes. Comprobaremos cómo funciona Eora y demostraremos cómo puede mejorar significativamente el rendimiento de los modelos cuantificados de 2 bits, acercándolos a la precisión de sus contrapartes de precisión completa mientras es hasta 5.5x más pequeño.
Analizaremos los resultados experimentales obtenidos utilizando modelos grandes como QWEN3-32B y QWEN2.5-72B, ambos cuantificados a 2 bits utilizando técnicas de cuantización de última generación, para ilustrar la efectividad de Eora.
Bucear en el espacio propio en busca de un adaptador
Cuantización posterior al entrenamiento o, en general, la compresión tiene como objetivo reducir el tamaño del modelo o el costo de inferencia minimizando la diferencia de salida entre los pesos originales Wl y pesos comprimidos Ŵl usando solo un pequeño conjunto de datos de calibración.
La mayoría de los métodos de cuantización son enmarcados en cuanto a la capa, pero la elección de los formatos de compresión es rígido y limita la flexibilidad en diversas necesidades de implementación.
Para omitir las restricciones de formato y mejorar la precisión, trabajos anteriores, como Qlora [1] y HQQ+ [2]directamente ajustado a un Lora Adaptador en la parte superior de los modelos cuantificados congelados.
También es posible replantear la compresión como un compensación Problema: dado un modelo comprimido, introduzca rutas residuales de bajo rango que corrigan específicamente los errores de compresión.
Un método sencillo utiliza SVD para descomponer el error de compresión:
\[\Delta W_l = W_l – \hat{W}_l\]
en
\[U_l \Sigma_l V_l^T\]
Formando aproximaciones de bajo rango a través de dos matrices:
\[B_l = U_l \Sigma_l \]
\[A_l = V_l^T\]
dónde Al y Bl son los tensores estándar de un adaptador Lora.
Sin embargo, SVD simple tiene dos limitaciones: no minimiza la pérdida de compresión de capa original directamente, y asigna la capacidad de manera uniforme en todos los componentes de error, ignorando la importancia variable de diferentes partes del modelo.
Para abordar esto, nvidia propone Eora [3].
Eora proyecta primero el error de compresión en el espacio propio definido por la covarianza de activación de entrada:
\[\tilde{X} \tilde{X}^T\]
dónde INCÓGNITA es la activación promedio sobre el conjunto de calibración. Luego, al realizar la composición de EigenDe, obtenemos:
\[\tilde{X} \tilde{X}^T = Q \Lambda Q^T\]
El error de compresión ΔW se proyecta como:
\[\Delta W’ = \Delta W Q’\]
dónde Q ′ = Qλ. Entonces se aplica SVD en ΔW ′ Para producir una aproximación de bajo rango, y el resultado se proyecta nuevamente al espacio original, ajustando los factores de bajo rango en consecuencia.
Esta proyección del espacio propio cambia el objetivo de optimización: pesa la importancia de diferentes componentes de error de acuerdo con su contribución a la salida de capa (a través de valores propios), lo que hace que la aproximación sea más eficiente. Se puede calcular rápidamente sin ningún entrenamiento, requiere solo activaciones de calibración y no introduce una latencia de inferencia adicional. Además, la derivación muestra que este enfoque conduce a una minimización directa de la pérdida de compresión de capa, no solo el error de peso bruto.
Analíticamente, truncar un valor singular en el espacio proyectado corresponde a minimizar el error de compresión verdadero bajo supuestos razonables sobre las activaciones de calibración.
En su artículo, NVIDIA presenta una amplia gama de resultados fuertes que muestran que Eora puede aumentar significativamente la precisión de los modelos cuantificados. Sin embargo, sus experimentos se centran principalmente en Cuantificación Métodos como GPTQ y se limitan a LLM de tamaño mediano, parámetros de hasta 13B, a precisiones de 3 bits y 4 bits.
Esto deja una pregunta abierta: ¿Puede Eora seguir siendo efectivo para modelos mucho más grandes, utilizando técnicas de cuantización más modernas e incluso superando la precisión de 2 bits?
Averigüemos.
Calibrar un adaptador Eora
Supongamos que tenemos modelos cuantificados que muestran un rendimiento significativamente degradado en comparación con sus contrapartes de precisión completa en ciertas tareas. Nuestro objetivo es reducir esta brecha de rendimiento usando Eora.
Para los experimentos, utilicé el instructo QWEN2.5-72B y Qwen3-32b, ambos cuantificados a 2 bits usando Autoround (licencia Apache 2.0), un algoritmo de cuantificación de última generación desarrollado por Intel. Autound aprovecha la optimización de SignSGD para ajustar la cuantización, y es particularmente efectivo para configuraciones de bajo bits.
Todos los modelos que hice están disponibles aquí (licencia Apache 2.0):
Los modelos de 2 bits se cuantificaron con un tamaño de grupo de 32, excepto el cual utilizaron un tamaño de grupo de 128. Un tamaño de grupo más grande reduce el tamaño del modelo al almacenar menos metadatos de cuantización, pero introduce un mayor error de cuantización.
Evalué los modelos en Ifeval, un punto de referencia que mide las capacidades de seguimiento de instrucciones. Los resultados mostraron una caída notable en el rendimiento para las versiones cuantificadas.
Para compensar esta degradación, apliqué un adaptador EORA utilizando la implementación proporcionada en el Biblioteca gptqmodel (Licenciado bajo Apache 2.0). La integración es sencilla. Si tiene curiosidad sobre cómo se implementa en Pytorch, la base de código es compacta, limpia y fácil de seguir:
- Implementación de Eora de GPTQModel: eora.py
Eora requiere un conjunto de datos de calibración. Idealmente, este conjunto de datos debe reflejar el caso de uso previsto del modelo. Sin embargo, dado que no tenemos una tarea objetivo específica en este contexto y tenemos un objetivo de preservar las capacidades generales del modelo, utilicé 1,024 ejemplos de muestreo aleatoriamente del Conjunto de datos C4 (con licencia bajo ODC-by).
Otro parámetro clave es el rango Lora, que influye en gran medida en la efectividad del adaptador Eora. Su valor óptimo depende de la arquitectura del modelo, la tarea de destino y los datos de calibración. Un rango más alto puede producir un mejor rendimiento, pero corre el riesgo de sobreajustar al conjunto de calibración. También aumenta el tamaño del adaptador, contraproducente cuando el objetivo general de la cuantización es reducir el uso de la memoria. Por el contrario, un rango más bajo mantiene el adaptador liviano, pero es posible que no capturen suficiente información para compensar efectivamente los errores de cuantización.
En mis experimentos, probé las filas de Lora de 32, 64 y 256.
A continuación se muestra el código utilizado para crear el adaptador Eora con GPTQModel:
from gptqmodel import GPTQModel
from gptqmodel.adapter.adapter import Lora
from datasets import load_dataset
calibration_dataset = load_dataset(
"allenai/c4",
data_files="en/c4-train.00001-of-01024.json.gz",
split="train", download_mode="force_redownload"
).select(range(1024))["text"]
eora_adapter_path = "Qwen3-32B-autoround-2bit-gptq-r256"
model_path = "kaitchup/Qwen3-32B-autoround-2bit-gptq"
eora = Lora(
path=eora_adapter_path,
rank=256,
)
GPTQModel.adapter.generate(
adapter=eora,
model_id_or_path="Qwen/Qwen3-32B",
quantized_model_id_or_path=model_path,
calibration_dataset=calibration_dataset,
calibration_dataset_concat_size=0,
auto_gc=False)
Usando una GPU NVIDIA A100 en Runpod (enlace de referencia)tardó aproximadamente 4 horas en generar el adaptador EORA para el modelo QWEN3-32B-Autoround-2BIT-GPTQ.
Todos los adaptadores Eora creados para estos modelos están disponibles públicamente (licencia Apache 2.0):
Evaluación de adaptadores Eora para LLM de 2 bits
Evalicemos el efecto de los adaptadores Eora. ¿Mejoran la precisión de los modelos de 2 bits?
¡Funciona!
Las mejoras son particularmente notables para QWEN3-14B y QWEN3-32B. Por ejemplo, la aplicación de Eora a Qwen3-32b, cuantificada a 2 bits con un tamaño de grupo de 128, dio como resultado una ganancia de precisión de casi 7.5 puntos. Aumentar el rango Lora, de 32 a 64, también condujo a mejoras, destacando el impacto del rango en el rendimiento.
Eora también es efectivo en modelos más grandes como Qwen2.5-72b, aunque las ganancias son más modestas. Los adaptadores de menor rango mostraron poco o ningún beneficio en este modelo; No fue hasta que aumenté el rango a 256 que comenzaron a aparecer mejoras significativas.
Consumo de memoria de Eora
El uso del adaptador Eora durante la inferencia da como resultado el siguiente aumento en el consumo de memoria:
La sobrecarga es generalmente insignificante. Por ejemplo, para QWEN3-14B de 2 bits, los adaptadores solo agregan 257 MB y 514 MB al tamaño total del modelo, con rangos de 32 y 64. Con rangos más grandes, el uso de un adaptador Eora se vuelve cuestionable ya que el consumo de memoria total puede superar el consumo de memoria del mismo modelo cuantizado a una precisión más alta. Por ejemplo, QWEN2.5 72B de 2 bits con un adaptador EORA del rango 256 es mayor que QWEN2.5 72b.
Nota: Esta estimación incluye solo la memoria consumida por los parámetros del adaptador. Para completar, también podríamos tener en cuenta la memoria utilizada por las activaciones del adaptador durante la inferencia. Sin embargo, estos son extremadamente pequeños en relación con otros tensores (como la atención del modelo y las capas MLP) y pueden considerarse de manera segura insignificante.
Conclusión
Eora funciona. Hemos confirmado que es un método simple pero efectivo para compensar errores de cuantización, incluso con precisión de 2 bits. Es intuitivo, sin entrenamiento y ofrece ganancias de rendimiento significativas. Dicho esto, hay algunas compensaciones a considerar:
- Búsqueda de rango: Encontrar el rango de Lora óptimo requiere experimentación. Es difícil predecir de antemano si un rango de 32 será suficiente o si un rango más alto, como 256, causará un sobreajuste. El valor óptimo depende del modelo, los datos de calibración y la tarea de destino.
- Mayor consumo de memoria: El objetivo de la cuantización es reducir el uso de la memoria, a menudo para entornos altamente limitados. Si bien los adaptadores Eora son relativamente livianos a rangos más bajos, aumentan ligeramente el consumo de memoria, particularmente en rangos más altos, reduciendo la eficiencia general de la cuantización de 2 bits.
Mirando hacia el futuro, el artículo de Nvidia también demuestra que los adaptadores Eora son excelentes puntos de partida para el ajuste de Qlora. En otras palabras, si planea ajustar un modelo de 2 bits usando Qlora, inicializarse de un modelo adaptado a EORA puede conducir a mejores resultados con menos esfuerzo de entrenamiento. He escrito sobre adaptadores de ajuste fino para el modelo GPTQ el año pasado, en mi boletín:
Qlora con Autoraund: más barato y mejor LLM ajustado en su GPU
La principal diferencia es que en lugar de inicializar el adaptador desde cero, cargaríamos el adaptador Eora. Este adaptador estará ajustado.
Referencias
[1] Dettmers et al, Qlora: Fineting eficiente de LLM cuantificados (2023), Arxiv
[2] Badri y Shaji, Hacia modelos de aprendizaje automático de 1 bits (2024), Blog de Mobius Labs
[3] Liu et al., Eora: Compensación sin entrenamiento para LLM comprimido con aproximación de bajo rango de espacio electrónico (2024), Arxiv