📚 Módulo 4: QLoRA — Ajuste Fino Cuantizado de Alto Rendimiento

4.1 Introducción a QLoRA

QLoRA (Quantized Low-Rank Adaptation) es una extensión natural y revolucionaria de LoRA, presentada en el artículo “QLoRA: Efficient Finetuning of Quantized LLMs” (Dettmers et al., Universidad de Washington & MBZUAI, 2023). Mientras que LoRA reduce el número de parámetros entrenables, QLoRA va un paso más allá: reduce la precisión numérica de los pesos del modelo base para adaptarse a GPUs con poca memoria manteniendo un rendimiento casi al nivel del ajuste fino completo.

QLoRA permite entrenar modelos de hasta 70 mil millones de parámetros en una sola GPU de 48GB, y modelos de 30-40B en GPUs de 24GB. Además, modelos de 7B-13B pueden entrenarse en GPUs de 16GB — como las ofrecidas gratuitamente por Google Colab.

4.2 ¿Qué Es la Cuantización?

La cuantización es una técnica de compresión que reduce la precisión de los números que representan los pesos de las redes neuronales. En lugar de almacenar cada peso como un número de punto flotante de 32 bits (FP32) o 16 bits (FP16/BF16), se almacenan como enteros de 8 bits (INT8) o incluso enteros de 4 bits (INT4).

Por ejemplo:

  • FP32: 32 bits por peso → 4 bytes
  • INT4: 4 bits por peso → 0.5 bytes

Esto significa que un modelo de 7 mil millones de parámetros se reduce de ~28 GB en FP32 a solo ~3.5 GB en INT4 — una reducción de 8 veces.

4.3 Tipos de Cuantización en QLoRA

QLoRA no utiliza una cuantización arbitraria. Emplea técnicas avanzadas para minimizar la pérdida de precisión:

a) NormalFloat (NF4)

QLoRA introduce un nuevo tipo de datos: 4-bit NormalFloat (NF4). A diferencia del INT4 estándar, que usa una distribución uniforme, NF4 está optimizado para datos que siguen una distribución normal (como los pesos de las redes neuronales). Esto permite una representación más fiel de los valores cercanos a cero, donde reside la mayor parte de la información útil.

b) Cuantización Doble

QLoRA aplica cuantización a dos niveles:

  1. Cuantiza los pesos del modelo a 4 bits.
  2. También cuantiza las constantes de escala (usadas para revertir la cuantización durante el cálculo) a 8 bits.

Esto ahorra aproximadamente 0.375 bits por parámetro, equivalente a un ahorro adicional de 315 MB en un modelo de 7B.

c) Optimizadores Paginados

QLoRA utiliza optimizadores "paginados" que gestionan la memoria de manera más eficiente, evitando errores de Memoria Insuficiente (OOM) al procesar secuencias largas o lotes grandes. Esto es especialmente útil en entornos con restricciones de memoria.

4.4 ¿Cómo Funciona QLoRA en la Práctica?

QLoRA combina tres componentes clave:

  1. Cuantización del modelo base a 4 bits (NF4) — solo para almacenamiento e inferencia.
  2. LoRA aplicado sobre pesos cuantizados — los pesos LoRA (A y B) permanecen en precisión completa (BF16/FP16) durante el entrenamiento.
  3. Cálculo de precisión mixta — durante los pasos de avance y retroceso, los pesos cuantizados se descuantizan temporalmente a BF16 para cálculos de alta precisión, luego se recuantizan.

Este enfoque garantiza:

  • Uso mínimo de memoria GPU.
  • Precisión computacional suficiente para evitar degradación del rendimiento.
  • Solo se entrenan los parámetros LoRA, preservando la eficiencia paramétrica.

4.5 Requisitos Técnicos y Limitaciones

Requisitos:

  • GPU NVIDIA con soporte CUDA.
  • bitsandbytes ≥ 0.41.0 (biblioteca que implementa la cuantización de 4 bits).
  • transformers ≥ 4.30.0.
  • accelerate y peft.

Limitaciones:

  • Solo compatible con arquitecturas de solo decodificador como GPT, Llama, Mistral, Qwen. No compatible con modelos codificador-decodificador como T5 o BART en configuraciones estándar.
  • No todos los modelos son compatibles. El modelo debe tener una implementación compatible con bitsandbytes y AutoModelForCausalLM.
  • Sobrecarga computacional menor. La descuantización temporal añade una ligera latencia, pero aceptable dado el ahorro de memoria.
  • No apto para entrenamiento desde cero. QLoRA está diseñado exclusivamente para ajuste fino.

Course Info

Course: AI-course3

Language: ES

Lesson: Module4