Qué es
QLoRA, abreviatura de LoRA cuantizado, combina dos ideas. La cuantización almacena cada número en menos bits. LoRA congela el modelo base y entrena un pequeño adaptador junto a él. Dado que la base está congelada, nunca necesita gradientes ni el estado del optimizador, por lo que puede almacenarse de forma compacta; solo el adaptador debe mantenerse en una precisión adecuada para el aprendizaje. QLoRA mantiene la base congelada en 4 bits, una cuarta parte de los 16 habituales, y entrena el mismo adaptador LoRA por encima en 16 bits.
Fue introducido por Dettmers et al. en 2023. Su artículo realizó el ajuste fino de un modelo de 65.000 millones de parámetros en una única GPU de 48 GB, donde el ajuste fino regular de 16 bits habría necesitado más de 780 GB, al tiempo que conservaba el rendimiento en las tareas del ajuste fino de 16 bits.
Cómo funciona
Un peso de 16 bits ocupa 2 bytes; uno de 4 bits ocupa medio byte. Comprimir un modelo entrenado de forma tan extrema sin arruinarlo se basa en tres ingredientes del artículo:
- NormalFloat de 4 bits (NF4). Los pesos entrenados siguen aproximadamente una curva de campana centrada en cero. NF4 coloca sus 16 valores posibles para que coincidan con esa forma, de modo que más de ellos caigan donde se encuentra la mayoría de los pesos. En el artículo, superó a los enteros de 4 bits y a los flotantes de 4 bits ordinarios.
- Doble cuantización. Los pesos se cuantizan en pequeños bloques, cada uno con su propia constante de escala, y esas constantes se suman. QLoRA también cuantiza las constantes, reduciendo su coste de aproximadamente 0,5 a unos 0,13 bits por peso: un ahorro de unos 3 GB en un modelo de 65B.
- Optimizadores paginados. Cuando un ejemplo largo provoca un pico repentino de memoria, el estado del optimizador se traslada a la memoria ordinaria de la CPU por un momento en lugar de que la ejecución se bloquee.
Durante las pasadas hacia adelante y hacia atrás, los pesos de 4 bits de cada capa se descomprimen (descuantizan) a 16 bits, se utilizan para la aritmética de esa capa y luego se descartan. Los gradientes fluyen a través de la base congelada hacia el adaptador, que es la única parte que cambia. En cualquier momento, la memoria contiene todo el modelo en 4 bits más el equivalente a una capa de pesos de 16 bits.
bytes per weight of the frozen base
16-bit (bf16) 2 bytes
4-bit NF4 + double-quantised constants ≈ 0.52 bytes (≈ 4.13 bits)
an 8B model, frozen base only
16-bit 8 × 10⁹ × 2 bytes ≈ 16 GB
4-bit 8 × 10⁹ × 0.52 bytes ≈ 4.1 GB- LoRA en una base de 16 bits: aproximadamente 16 GB solo de pesos congelados. Con el adaptador, el estado de su optimizador y las activaciones, una regla general común da como resultado unos 19 GB. No cabe.
- QLoRA: la base se reduce a unos 4–5 GB. Algunas partes, como las capas de normalización y, a menudo, las capas de incrustación y salida, suelen mantenerse en 16 bits. Con el adaptador y la memoria de trabajo, el total es de unos 9 GB, lo que cabe con margen de sobra.
- El adaptador es exactamente igual de grande que un adaptador LoRA del mismo rango: decenas de MB.
- La contrapartida: cada paso es algo más lento, ya que cada capa se descomprime sobre la marcha.
| Modelo | LoRA (base de 16 bits) | QLoRA (base de 4 bits) |
|---|---|---|
| 8B | ~19 GB | ~9 GB |
| 14B | ~33 GB | ~13 GB |
| 27–32B | ~60–70 GB | ~22–26 GB |
Estos son los totales para entrenar, incluida la memoria de trabajo, razón por la cual se sitúan por encima de los 4–5 GB que la página de ajuste fino completo indica para la base de 4 bits de un modelo de 7B antes de las activaciones. Un portátil de 36 GB con memoria compartida, con unos 27 GB libres una vez que el sistema operativo toma su parte, puede entrenar un modelo de 27–32B con QLoRA, frente a unos 10B con el LoRA estándar.
Cuál es su coste y cuándo utilizarlo
- Velocidad. Descomprimir cada capa en cada paso añade trabajo, por lo que el entrenamiento es algo más lento que con LoRA en el mismo modelo.
- Calidad. Los resultados son muy similares a los de LoRA. El artículo igualó el ajuste fino de 16 bits en todos sus puntos de referencia; aun así, pueden aparecer pequeñas diferencias en su propia evaluación, por lo que le recomendamos comparar con una ejecución de evaluación en lugar de darlo por sentado.
- El resultado. Sigue siendo un adaptador. Cárguelo en el modelo base normal de 16 bits o en su copia de 4 bits; el tamaño del adaptador en sí no cambia.
- Cuándo utilizarlo. Utilice QLoRA cuando el modelo que desea no encaje con LoRA. Si encaja, el LoRA estándar es más rápido para obtener el mismo resultado.
La configuración
Indica si la base congelada se carga en 4 bits. Desactivado, entrena un adaptador LoRA normal sobre una base de 16 bits: es más rápido por paso, pero requiere aproximadamente el triple de memoria. Activado, entrena QLoRA, la opción indicada cuando el modelo que desea no cabría de otra manera. Solo se aplica a los adaptadores: un ajuste fino completo modifica todos los pesos, por lo que cada peso debe mantenerse en una precisión entrenable.
El formato numérico en el que se descomprimen los pesos de 4 bits para la aritmética de cada capa, y el formato en el que se entrena el adaptador. bf16 (bfloat16) mantiene el rango de los números de coma flotante de 32 bits en 16 bits, por lo que los valores rara vez se desbordan; las GPU de NVIDIA lo admiten a partir de la generación Ampere. Las GPU más antiguas, como la T4, suelen realizar los cálculos en fp16, que tiene un rango menor.
Errores comunes
- Elegir QLoRA cuando el modelo ya cabe con LoRA. Solo añade tiempo de entrenamiento.
- Esperar un archivo de resultado más pequeño. El adaptador tiene el mismo tamaño que un adaptador LoRA; solo se reduce la memoria de entrenamiento.
- Intentar utilizar QLoRA para hacer que encaje un ajuste fino completo. Solo se aplica a los adaptadores.
- Partir de un modelo que se publicó ya comprimido (FP8, MXFP4). QLoRA cuantiza por sí mismo un modelo de precisión completa, por lo que parte de la versión BF16.
- Cargar el adaptador en un modelo diferente, o en una versión diferente del mismo, a aquel en el que fue entrenado.
Referencias y lecturas adicionales
Las fuentes externas se abren en una pestaña nueva.
- 01QLoRA: Efficient Finetuning of Quantized LLMsDettmers et al., 2023 · arXiv · arxiv.orgEl artículo original: NF4, doble cuantización, optimizadores paginados y el resultado de 65B en una sola GPU.
- 02Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRAHugging Face blog, 2023 · huggingface.coUna guía clara y práctica sobre la carga en 4 bits y el entrenamiento con QLoRA.
- 03BitsandbytesHugging Face Transformers docs · huggingface.coLas opciones de carga en 4 bits: NF4, cuantización doble y el tipo de datos de cálculo.
- 04QuantizationHugging Face PEFT docs · huggingface.co
- 05LLM.int8(): 8-bit Matrix Multiplication for Transformers at ScaleDettmers et al., 2022 · arXiv · arxiv.orgEl trabajo previo en 8 bits del cual surgió la biblioteca de cuantización de QLoRA.