Congela el modelo, entrena el adaptador
El fine-tuning completo significa actualizar cada peso de un modelo — a menudo miles de millones de números — y almacenar los gradientes y el estado del optimizador para cada uno de ellos. Por eso "solo haz fine-tuning" solía significar "renta un rack de GPUs". LoRA rompe esa suposición: congela por completo los pesos originales y entrena un conjunto mucho más pequeño de parámetros nuevos que quedan junto a ellos.
Por qué congelar los pesos es el verdadero truco
La idea central detrás de LoRA es que la actualización de una matriz de pesos durante el fine-tuning no necesita ser de rango completo. En lugar de aprender una matriz de cambio de tamaño completo, LoRA representa ese cambio como el producto de dos matrices mucho más pequeñas — piénsalo como comprimir la actualización en sí, no el modelo. Multiplica las dos matrices pequeñas entre sí y obtienes algo con la misma forma que la actualización de peso original, pero con muchos menos parámetros entrenables detrás.
Como los pesos base están congelados, no necesitas almacenar gradientes ni el estado del optimizador para todo el modelo — solo para el adaptador. De ahí vienen los ahorros de memoria. No es un truco que reduzca el modelo en disco; reduce la cantidad de estado de entrenamiento que tienes que mantener en memoria a la vez.
En el momento de la inferencia, las dos matrices del adaptador se multiplican entre sí y se suman de vuelta a los pesos originales, así que no hay una "capa adaptadora" separada que ralentice cada pasada hacia adelante. Obtienes un único conjunto de pesos fusionados que se comporta como un modelo con fine-tuning completo, producido al entrenar una fracción de los parámetros.
QLoRA: el mismo truco, más cuantización
QLoRA añade una capa más: cuantiza el modelo base congelado a una precisión de 4 bits antes de entrenar el adaptador encima de él. Eso reduce la huella de memoria del propio modelo base — la parte que ni siquiera estás entrenando — en aproximadamente 4x en comparación con mantenerlo en 16 bits. QLoRA incluye técnicas para recuperar la precisión perdida por la cuantización, así que la exactitud se mantiene cercana a la de LoRA estándar mientras el uso de memoria baja aún más.
La conclusión: LoRA ya te permite hacer fine-tuning en hardware modesto; QLoRA lleva eso hasta una sola GPU de consumo con una cantidad modesta de VRAM, porque el mayor bloque de memoria — los pesos base congelados — se almacena 4x más pequeño.
Cómo hacerlo en la práctica
- Elige un modelo base y congélalo. Cárgalo tal cual; ningún peso se actualiza directamente.
- Adjunta adaptadores LoRA a las capas que quieras adaptar (comúnmente las capas de proyección de atención). Esto añade un pequeño número de parámetros nuevos y entrenables.
- (Opcional, para QLoRA) Cuantiza el modelo base a 4 bits antes de adjuntar el adaptador, para que los pesos congelados ocupen menos memoria.
- Entrena solo el adaptador. El optimizador únicamente rastrea el estado de los parámetros del adaptador, por eso los ahorros de memoria son tan grandes.
- Fusiona el adaptador de vuelta en los pesos base para la inferencia, o mantenlo separado si quieres intercambiar adaptadores para distintas tareas.
El rango no es la palanca que crees
Es tentador suponer que un "rango" más alto (el tamaño de las matrices pequeñas del adaptador) es lo que determina la calidad del fine-tuning, y que deberías subirlo al máximo para obtener mejores resultados. La evidencia apunta en la dirección opuesta: a qué capas aplicas el adaptador — idealmente a todas, no solo a un subconjunto — importa mucho más que el rango que elijas. El rendimiento se mantiene aproximadamente plano en un amplio rango de valores (desde un solo dígito hasta cientos bajos). Si tu fine-tuning rinde por debajo de lo esperado, revisa la cobertura de capas antes de perseguir un número de rango más grande.
Trucos avanzados
- Aplicar el adaptador a solo unas pocas capas es la mayor palanca de calidad — y es fácil pasarla por alto si copias una configuración por defecto que solo apunta a las capas de atención en un subconjunto de bloques.
- No supongas que un rango más grande arregla los problemas de calidad. Rara vez lo hace. El rango en el intervalo de 8 a 256 rinde de forma similar; la diferencia que persigues es más probablemente un problema de cobertura de capas o de calidad de datos.
- Fusiona el adaptador para el despliegue. Si tu stack de servicio no soporta adaptadores de forma nativa, fusiona las matrices de LoRA en los pesos base antes de enviarlo a producción, o pagarás el costo de la multiplicación del adaptador en cada llamada de inferencia.
Recursos
- LoRA: Low-Rank Adaptation of Large Language Models (paper original)
- QLoRA: Efficient Finetuning of Quantized LLMs (paper original)
- Hugging Face PEFT — guía conceptual de LoRA
¿Estás haciendo fine-tuning de un modelo para producción? Yeda AI diseña, audita y despliega sistemas LLM en producción.