ES EN
Parte II · Capítulo 04b

LoRA vs. QLoRA — fine-tuning eficiente en parámetros

8 min de lectura · revisado en agosto 2026

Aclarando la jerarquía, antes de seguir

Vale la pena ser precisos aquí, porque es un punto donde es fácil confundirse: LoRA y QLoRA son fine-tuning — no una alternativa separada a él, sino una familia de estrategias dentro de él.

Fine-tuning (ajustar un modelo preentrenado con gradient descent y tus propios datos)
│
├── Fine-tuning completo
│   → actualiza TODOS los pesos del modelo (Capítulo 4)
│
└── PEFT — Parameter-Efficient Fine-Tuning
    → actualiza solo una fracción pequeña de parámetros nuevos
    │
    ├── LoRA (matrices de bajo rango)
    └── QLoRA (LoRA + cuantización de 4 bits)

“Fine-tuning” es el nombre del proceso general. “Completo” y “PEFT” son dos estrategias para lograrlo, con trade-offs muy distintos de costo, memoria, y riesgo de sobreajuste — no dos categorías separadas donde una “sí es” fine-tuning y la otra no.

El problema que resuelve, en números concretos

Ya calculamos el costo del fine-tuning completo en el capítulo anterior: memoria simultánea para pesos + gradientes + estado del optimizador de cada parámetro — 692MB para entrenar un modelo cuyos pesos solos pesan 231MB, y cientos de gigabytes o más para modelos de escala real. LoRA ataca exactamente esta raíz del problema: si solo entrenas una fracción diminuta de parámetros, solo necesitas gradientes y estado de optimizador para esa fracción — el resto del modelo se queda congelado, sin gradiente que calcular ni estado que mantener.

Una analogía útil para el riesgo de sobreajuste que evita, además del ahorro de memoria: imagina una clase que estudió matemáticas todo el año. Justo antes del examen, el profesor enfatiza mucho la división larga. En el examen, muchos estudiantes se obsesionan tanto con eso que descuidan otras ecuaciones igual de importantes. Esto es lo que el sobreajuste puede provocarle a un LLM en fine-tuning completo — enfatizar tanto lo nuevo que se descuida el resto de lo que el modelo ya sabía hacer bien.

Cómo funciona LoRA, con un ejemplo numérico

En lugar de entrenar todos los parámetros, LoRA los bloquea y entrena, en su lugar, una matriz de adaptación de bajo rango — llamada así porque contiene muchos menos parámetros que la matriz original que está adaptando.

El ahorro con números reales: imagina una matriz de proyección típica dentro de un bloque de atención (recordando el Capítulo 4 de Parte I), de tamaño 4096×4096 — es decir, 16,777,216 parámetros en esa sola matriz. Fine-tunearla completa significa calcular y guardar gradiente y estado de optimizador para esos ~16.7 millones de números.

LoRA, en cambio, la reemplaza por dos matrices mucho más pequeñas: una de 4096×8 y otra de 8×4096 (donde 8 es el “rango” elegido — un hiperparámetro que tú controlas). Esas dos matrices juntas tienen 4096×8 + 8×4096 = 65,536 parámetros. Eso es 256 veces menos parámetros que entrenar, solo en esa matriz — y el mismo ahorro se replica en cada matriz del modelo donde apliques LoRA.

Una vez entrenadas, esas dos matrices pequeñas se multiplican entre sí (recuperando una matriz de 4096×4096, del mismo tamaño que la original) y se suman a los pesos originales congelados — el modelo aplica el aprendizaje nuevo sin que la matriz original haya sido tocada directamente en ningún momento del entrenamiento.

Ventajas de LoRA:

  • Muchos menos parámetros para entrenar (256x menos en nuestro ejemplo, solo en una matriz)
  • Menor riesgo de sobreajuste, porque casi todo el conocimiento original permanece congelado e intacto
  • Entrenamiento más ágil y con mucha menor huella de memoria
  • Ajustes flexibles — se puede aplicar LoRA solo a ciertas matrices del modelo (por ejemplo, solo a las proyecciones de atención) y dejar el resto sin ningún adaptador

Cómo funciona QLoRA

QLoRA es una extensión de LoRA con una ventaja adicional: usa todavía menos memoria, gracias a la cuantización (la “Q” del nombre).

¿Qué es la cuantización? (una técnica de compresión)

La cuantización es, en esencia, una técnica de compresión de modelos. Reduce la cantidad de memoria que ocupan los números que representan los pesos del modelo.

Analogía simple: imagina que estás midiendo distancias con una regla.

  • Usar float32 (32 bits por número) es como tener una regla con marcas de 1 milímetro. Es muy precisa, pero necesitas mucho espacio para almacenar todas las medidas.
  • Usar int4 (4 bits por número) es como tener una regla con marcas de 1 centímetro. Pierdes precisión (no puedes medir diferencias de milímetros), pero la regla es mucho más pequeña y fácil de transportar.

En términos de memoria real, por cada parámetro del modelo:

FormatoBitsBytes por parámetro
float3232 bits4 bytes
float1616 bits2 bytes
int88 bits1 byte
NF44 bits0.5 bytes

Con un modelo de 7 mil millones de parámetros, esa tabla no es abstracta: sus pesos solos, sin contar metadatos ni memoria de ejecución, ocupan 28GB en float32; la representación ideal de 4 bits ocupa apenas 3.5GB. En una implementación real, NF4 requiere además constantes y metadatos de cuantización, pero la diferencia de escala sigue siendo la que puede permitir cargar el modelo donde antes no cabía.

Por qué QLoRA cuantiza para entrenar, no solo para servir

Ya vimos cuantización aplicada a inferencia en el capítulo de Optimización de inferencia de Parte III — ahí el objetivo era abaratar el costo de servir un modelo ya entrenado. Aquí el problema es distinto: QLoRA cuantiza el modelo base congelado específicamente para que quepa en memoria durante el entrenamiento — no para servirlo después. Son dos problemas relacionados matemáticamente, pero con objetivos diferentes.

Durante el forward y el backward pass, QLoRA descomprime los bloques necesarios a un formato de cómputo de mayor precisión y propaga los gradientes a los adaptadores LoRA. Los pesos cuantizados del modelo base permanecen congelados: no reciben actualizaciones.

Por qué NF4 no es “solo int4 con otro nombre”

Usando la misma analogía de la regla: int4 es como una regla con marcas espaciadas uniformemente cada centímetro, sin importar dónde midas. Los pesos de una red neuronal entrenada, sin embargo, no se distribuyen uniformemente — suelen concentrarse cerca de cero, siguiendo aproximadamente una distribución normal (de campana).

NF4 es como una regla más inteligente: coloca sus marcas donde realmente vas a medir — más juntas en las regiones con mayor concentración de pesos y más separadas donde hay pocos valores. El propio paper de QLoRA lo describe como “información-teóricamente óptimo para pesos distribuidos normalmente”. No es simplemente int4 con otro nombre: es un tipo de dato de 4 bits diseñado para aprovechar la distribución estadística específica de los pesos normalizados.

Cuantizar sigue introduciendo error de redondeo; NF4 no conserva mágicamente cada valor original. Su ventaja es asignar los 16 valores representables de una forma que reduce ese daño bajo la distribución para la que fue diseñado.

Las herramientas reales detrás de esto

  • bitsandbytes: la librería que implementa NF4 y que QLoRA usa directamente — maneja la cuantización de los pesos congelados y la aritmética necesaria para que el entrenamiento funcione sobre ellos.
  • GPTQ: una técnica de cuantización post-entrenamiento (para inferencia, no para este caso de entrenamiento) que usa una aproximación de información de segundo orden de la función de pérdida para decidir cómo cuantizar los pesos con el menor daño posible a la precisión.
  • AWQ (Activation-aware Weight Quantization): identifica los pesos más relevantes a partir de las activaciones reales del modelo con datos de calibración y ajusta la cuantización para protegerlos mejor.

GPTQ y AWQ son técnicas que vas a encontrar mucho más en el contexto de inferencia (por eso también se mencionan en Parte III) — para el entrenamiento eficiente que es el tema de este capítulo, NF4 vía bitsandbytes es específicamente lo que hace posible QLoRA.

El resultado real: qué demostró el paper original

El paper original de QLoRA, publicado por Dettmers et al. en 2023, demostró que era posible afinar un modelo de 65 mil millones de parámetros en una sola GPU de 48GB, preservando el desempeño del fine-tuning de 16 bits en las tareas evaluadas. Su familia de modelos resultante se llamó Guanaco.

Ese resultado no provino solo de cambiar float16 por NF4. QLoRA combinó tres innovaciones:

  1. NF4: el formato de 4 bits diseñado para pesos con distribución aproximadamente normal.
  2. Double Quantization: cuantiza también las constantes usadas para cuantizar los pesos, reduciendo la memoria adicional que requieren esos metadatos.
  3. Paged Optimizers: usa memoria paginada para manejar picos de consumo durante el entrenamiento y evitar errores por falta de memoria.

La cifra de 48GB corresponde al experimento concreto del paper, no significa que cualquier modelo de 65B, dataset o configuración moderna vaya a caber automáticamente en esa memoria. El tamaño de secuencia, el batch, los adaptadores y la implementación también influyen.

Ventajas de QLoRA:

  • Requiere menos memoria que LoRA sin cuantizar
  • Conserva el bajo riesgo de sobreajuste de LoRA
  • En los experimentos originales preservó el desempeño del fine-tuning de 16 bits en las tareas evaluadas
  • Permite afinar modelos que, sin cuantización, no cabrían en una sola GPU

¿Cuál elegir?

LoRA es eficaz y puede usarse de forma independiente. QLoRA añade eficiencia adicional de memoria e introduce error de cuantización en los pesos congelados. La consideración práctica principal es tu memoria de GPU disponible: si el modelo base no cabe con la precisión de LoRA convencional, QLoRA puede volver viable el entrenamiento. Si ambas opciones caben, la decisión debe tomarse con evals sobre la tarea real — no asumir de antemano que una siempre será más precisa que la otra.


¿Encontraste un error? Sugerir una corrección