La idea central detras de LoRA, publicada por Hu et al. en 2021, es que las actualizaciones de pesos durante el fine-tuning tienden a ser de bajo rango — lo que significa que los cambios pueden aproximarse bien mediante el producto de dos matrices mucho mas pequenas. En lugar de actualizar una matriz de pesos W (digamos, 4096 x 4096 = 16 millones de parametros), LoRA congela W completamente y agrega dos matrices pequenas A (4096 x r) y B (r x 4096) donde r (el rango) es tipicamente 8, 16 o 64. La actualizacion efectiva es el producto BA, que tiene la misma forma que W pero esta parametrizado por solo 2 x 4096 x r valores. Con rango 16, eso es aproximadamente 131,000 parametros entrenables en lugar de 16 millones — una reduccion de 120x para esa sola capa. Aplica esto a todas las capas de atencion del modelo y tus parametros entrenables totales bajan de miles de millones a unos pocos millones, que es por lo que un archivo de adaptador LoRA suele pesar solo de 10 a 50 MB comparado con el modelo base de varios gigabytes.
En la practica, eliges a que capas aplicar LoRA (tipicamente las matrices de proyeccion de atencion: Q, K, V y la proyeccion de salida) y estableces el rango r y un factor de escalado llamado alpha. La relacion alpha/r controla cuanta influencia tiene el adaptador en relacion con los pesos base congelados. Mayor rango significa mas expresividad pero mas parametros y memoria; en la practica, rango 16 o 32 cubre la mayoria de los casos de uso. QLoRA, introducido por Dettmers et al. en 2023, llevo la eficiencia aun mas lejos al combinar LoRA con cuantizacion de 4 bits del modelo base: los pesos congelados se almacenan en NF4 (un formato de 4 bits optimizado para pesos con distribucion normal) mientras que los adaptadores LoRA entrenan en bf16. Esto te permite hacer fine-tuning de un modelo de 70B parametros en una sola GPU de 48 GB — algo que de otra forma requeriria una configuracion multi-GPU con cientos de gigabytes de VRAM.
El ecosistema LoRA ha madurado rapidamente. La biblioteca PEFT de HuggingFace es la implementacion estandar, y herramientas como Axolotl, LLaMA-Factory y Unsloth la envuelven en interfaces de nivel mas alto que manejan el formato de datos, valores predeterminados de hiperparametros y ciclos de entrenamiento. Una de las caracteristicas practicas mas poderosas es la composabilidad de adaptadores: como los adaptadores LoRA son aditivos, puedes entrenar adaptadores separados para diferentes tareas y fusionarlos o intercambiarlos en tiempo de inferencia sin recargar el modelo base. Algunos frameworks de serving como LoRAX y vLLM explotan esto para servir cientos de adaptadores LoRA diferentes desde un unico modelo base en memoria, enrutando cada solicitud al adaptador apropiado. Esto hace viable ofrecer modelos afinados por cliente sin el costo de desplegar instancias de modelo separadas.
Sin embargo, LoRA no es gratis. La restriccion de bajo rango significa que no puede aprender cambios de pesos arbitrarios — si la tarea requiere una reestructuracion significativa de las representaciones internas del modelo, el fine-tuning completo superara a LoRA. En la practica, esto importa mas para tareas que son muy diferentes de aquello para lo que el modelo base fue pre-entrenado, o cuando intentas ensenarle al modelo conocimiento factual sustancial nuevo en lugar de ajustar su estilo o formato. Tambien hay un error comun de establecer el rango demasiado bajo y preguntarse por que el adaptador no parece aprender, o establecerlo demasiado alto y terminar con un adaptador que sobreajusta en datasets pequenos. El rango es tanto una perilla de regularizacion como de capacidad, y ajustarlo junto con la tasa de aprendizaje y el numero de pasos de entrenamiento es esencial para buenos resultados.