English · Español
02 — Conteo de parámetros: LoRA vs fine-tuning completo¶
La aritmética es simple pero el resultado importa: un Linear
(768, 768)tiene 590K parámetros entrenables en full FT. Con LoRA r=8: 12K. Cuando lo escalas a un transformer entero (cientos de Linears), la ratio se mantiene. Esta sección formaliza esa cuenta.
El planteamiento¶
Una capa Linear(in, out) estándar tiene:
- Matriz de pesos
W ∈ ℝ^{out × in}:out × inparámetros. - Sesgo
b ∈ ℝ^{out}:outparámetros. (A menudo omitido en transformers modernos; lo mantenemos por generalidad.)
Total: out × in + out parámetros.
Con LoRA de rango (rank) r:
- Los
W, bbase están congelados (freeze) — existen pero no se actualizan. - Dos matrices nuevas:
A ∈ ℝ^{r × in}yB ∈ ℝ^{out × r}.
Parámetros LoRA entrenables: r × in + out × r = r × (in + out).
La ratio¶
La ratio de parámetros entrenables (LoRA sobre full):
Para una capa cuadrada in = out = h:
Para h = 768, r = 8: ratio = 16/768 ≈ 2.1%.
Para h = 4096, r = 8: ratio = 16/4096 ≈ 0.4%.
Para h = 4096, r = 16: ratio = 0.8%.
Los modelos más grandes se benefician más. A medida que h crece, la ratio de LoRA se encoge proporcionalmente — el rango r no crece con el modelo.
A escala de modelo completo¶
Calculemos para un transformer genérico:
Lcapas.- Por capa: 4
Linears de atención de forma(h, h)+ 2Linears de MLP de forma(h, 4h)y(4h, h).
Params entrenables full FT por capa (excluyendo sesgos, embeddings, layer-norms — todos pequeños):
- Atención:
4 × h². - MLP:
2 × 4h² = 8h². - Total por capa:
12 h².
Params LoRA por capa con rango r, asumiendo que LoRA-ificamos los 6 Linears:
- Atención (4 Linears con
in=out=h):4 × 2rh = 8rh. - MLP fc1
(h, 4h):r(h + 4h) = 5rh. - MLP fc2
(4h, h): igual,5rh. - Total por capa:
8rh + 10rh = 18 rh.
Ratio por capa: 18rh / 12h² = 1.5 r / h.
Para un transformer típico:
| Modelo | h | L | Params totales (~) | Params LoRA r=8 (~) | LoRA / Full |
|---|---|---|---|---|---|
| MiniGPT (Fase 17) | 768 | 12 | 12 × 12 × 768² = 85 M |
12 × 18 × 8 × 768 = 1.3 M |
1.6% |
| LLaMA-7B | 4096 | 32 | 32 × 12 × 4096² ≈ 6.4 B |
32 × 18 × 8 × 4096 ≈ 19 M |
0.30% |
| LLaMA-70B | 8192 | 80 | 80 × 12 × 8192² ≈ 64 B |
80 × 18 × 8 × 8192 ≈ 94 M |
0.15% |
(Los números son aproximados — ignoran embeddings, sesgos, layer-norm y la estructura exacta de las heads. El orden de magnitud es correcto.)
Para LLaMA-70B, LoRA r=8 entrena el 0.15% de los parámetros. Esta es la ratio que hace tratable el fine-tuning en una sola GPU de modelos gigantes.
Adónde van realmente los params de LoRA¶
La mayoría de las configuraciones publicadas de LoRA apuntan a un subconjunto de los Linears. El paper original de LoRA puso adaptadores (adapters) sólo en W_q y W_v (las proyecciones de query y value de la atención). Por defecto QLoRA apunta a todos los Linears.
Nosotros por defecto apuntamos a todos los Linears en la Fase 28 — da más capacidad para el mismo rango por Linear, pedagógicamente más limpio (una regla aplica en todos lados).
Lo que esto gana en almacenamiento¶
Un checkpoint de LoRA es sólo A, B por cada Linear adaptado. Tamaños:
- Para MiniGPT r=8: ~1.3 M params × 2 bytes (fp16) = 2.6 MiB.
- Para LLaMA-7B r=8: ~19 M × 2 bytes = 38 MiB.
Frente al checkpoint del modelo base (MiniGPT 85 M × 2 = 170 MiB; LLaMA-7B 7 B × 2 = 14 GiB), los adaptadores LoRA son 1–2 órdenes de magnitud más pequeños.
Esto habilita zoológicos de adaptadores: un único modelo base cargado una vez en memoria de GPU, más decenas de adaptadores ajustados disponibles en disco. Servir distintas "personalidades" o "habilidades" significa intercambiar en caliente un fichero de 38 MiB — no cargar un nuevo modelo de 14 GiB.
Cómo funciona α/r¶
El forward de LoRA:
El escalado α/r desacopla la magnitud de la actualización de la elección de rango. Concretamente: si duplicas r (más capacidad), los valores singulares de BA escalan con r en el régimen de inicialización aleatoria. Dividir por r mantiene la magnitud efectiva de la actualización similar entre elecciones de rango.
α es entonces un único hiperparámetro de "fuerza de actualización", independiente de r. Típico: α = 16.
Si te olvidas del escalado α/r y simplemente usas BA, duplicar r duplica el LR efectivo — experimentos confusos. La convención es universal; síguela.
Inicialización¶
Inicialización estándar de LoRA:
A ~ N(0, 1/r)(o uniforme escalado, depende de la implementación).B = 0(cero exacto).
Así en el paso 0: BA = 0, e y = Wx + b + 0. El modelo se comporta exactamente como el modelo preentrenado. El primer paso de gradiente desplaza tanto A como B ligeramente; B era cero y se vuelve pequeño; el producto BA se convierte en una pequeña actualización de bajo rango.
¿Por qué no inicializar ambos aleatoriamente? Si tanto A como B empiezan aleatorios con la misma escala, BA es no nulo con una distribución salvaje, y el paso 0 ya saca al modelo de W. Convergencia más lenta, peor perfil de olvido.
¿Por qué B = 0 y no A = 0? Simétrico — cualquiera funciona. La convención es B = 0; la seguimos.
Una trampa: trampas del conteo de parámetros¶
Cuando reportes "LoRA entrena el 0.7% de los parámetros", ten cuidado: esta es la fracción de parámetros entrenables. La huella total de memoria también incluye el modelo base congelado. Decir "LoRA reduce la memoria en 99.3%" está mal — la mayor parte de la reducción viene de no asignar estado de Adam, gradientes y copias maestras para los pesos congelados, no del conteo entrenable en sí. Theory 03 deriva la huella de memoria con precisión.
Ejercicios de práctica¶
Soluciones al abrir la fase en solutions/02-parameter-count-ref.md.
- Para un Linear
(in=4096, out=11008)(forma de MLP fc1 de LLaMA) con LoRA r=16, calcula el conteo de parámetros entrenables y la ratio vs full FT. - Las capas MLP contribuyen
2 × 4h²parámetros por capa; la atención contribuye4 × h². ¿Cuál es la fracción de params de atención en el presupuesto de LoRA vs params del MLP? ¿Apuntar sólo a atención (LoRA original) da más o menos capacidad que apuntar sólo al MLP? - Si fijas el presupuesto de LoRA en
Mparámetros entrenables totales, ¿cuál es el rango óptimo para un Linear cuadrado(h, h)? (Pista: está acotado porr ≤ h; paraM < h^2, cada elección es válida.) - Muestra que para
r = h, LoRA puede en principio representar cualquier actualizaciónΔW(ya queBApuede ser cualquier matriz(out, in)de rango ≤h = min(out, in)). ¿En qué sentido LoRA r=h es idéntico a full FT, y en qué sentido sigue siendo distinto?
Recapitulación en un párrafo¶
LoRA reemplaza los out × in parámetros entrenables de un Linear con dos matrices que totalizan r × (in + out) — típicamente dos órdenes de magnitud menos. La ratio escala como r/h para capas cuadradas, así que los modelos más grandes se benefician más (r fijo, h creciente). A lo largo de un transformer, aplicar LoRA a todos los Linears da una ratio entrenable de ~0.15–2%. La conclusión pedagógica: el rango (rank) r es una única perilla pequeña que acota cuánto cambias el modelo, desacoplada del tamaño del modelo. Combinado con la convención de escalado α/r y la inicialización B=0, LoRA da una perilla limpia y robusta para el presupuesto de parámetros. El siguiente archivo de teoría traduce esto en huella de memoria — el coste prácticamente dominante durante el entrenamiento.
Siguiente: theory/03-memory-footprint.md.