Soup: fine-tunear Llama-3.1-8B en una GPU de laptop de 4 GB con layer streaming
Soup es una herramienta open source que permite hacer fine-tuning de un modelo de 8 mil millones de parámetros en una GPU de laptop de 4 GB. Llama-3.1-8B-Instruct en RTX 3050, 3,32 GB de VRAM en pico, 119,6 tokens por segundo. Los números son reportados por los autores en el repositorio de GitHub.
La técnica se llama layer streaming. En lugar de cargar todo el modelo en memoria de video (que en 4 GB no cabe), Soup mantiene el modelo base fuera de la VRAM y lo alimenta a la GPU un decoder layer a la vez. El resultado, según los autores, es bit-exact comparado con una ejecución normal del modelo en memoria.
Para quien quiere adaptar un modelo a sus datos sin enviarlos a la nube, el punto es directo. El fine-tuning requería GPUs dedicadas, frecuentemente alquiladas por horas. Si una laptop cualquiera puede hacer el trabajo, la brecha entre «uso un modelo genérico» y «entreno mi propio modelo» se achica. Es la misma tendencia de inferencia local en el navegador: la IA útil se acerca al hardware que ya tienes, solo que aquí hablamos de entrenar, no solo de ejecutar.
La herramienta está en beta. El layer streaming es opcional (stream_layers: true). Los números se miden en una sola arquitectura (RTX 3050 Laptop 4 GB) y aún no se han replicado de forma independiente. La versión 0.72.4 añadió soporte para DPO, ORPO, SimPO y KTO, siempre vía layer streaming, con el modelo de referencia de DPO obtenido gratis reutilizando el mismo stream base.
Licencia Apache-2.0, disponible en GitHub.
En detalle
El fine-tuning de un LLM tiene un cuello de botella simple: la memoria de video. Un modelo de 8 mil millones de parámetros en precisión NF4 (4 bits por parámetro) ocupa unos 4 GB solo en pesos. En una GPU de 4 GB como la RTX 3050 Laptop, no queda espacio para gradientes, optimizador y batch de entrada. El modelo no entra.
Layer streaming evita el problema de forma directa. El modelo base permanece congelado (no se actualiza) y se carga en memoria CPU o en disco. Soup lo alimenta a la GPU un decoder layer a la vez: carga el layer, calcula la activación, lo descarga, pasa al siguiente. La GPU ve solo un layer a la vez, no el modelo completo. Lo que permanece en VRAM son los parámetros del adaptador LoRA (pequeños, algunas decenas de millones) y el batch actual.
Los autores reportan 3,32 GB de pico en RTX 3050 4 GB con Llama-3.1-8B-Instruct cuantizado NF4, LoRA, batch 1, secuencia 512 tokens, a 119,6 tokens por segundo. El claim más fuerte es que el resultado es bit-exact comparado con una ejecución del modelo en VRAM: mismos outputs, cero diferencia. Si se confirma, significa que el layer streaming no introduce aproximaciones, solo reordena cuándo los datos transitan por la GPU.
La versión 0.72.4 extendió el layer streaming a métodos de preference learning (DPO, ORPO, SimPO, KTO). Lo interesante es el modelo de referencia de DPO. DPO normalmente requiere dos copias del modelo: la que entrenas y una de referencia congelada para comparación. Dos copias en 4 GB son imposibles. Soup reutiliza el mismo stream base con los adaptadores LoRA desactivados: un solo set de pesos, un solo stream. El costo se paga completamente en tiempo de cálculo, sin afectar la memoria: DPO lee el stack de layers 1,52 veces más seguido por step comparado con fine-tuning supervisado. El pico de VRAM para DPO streameado es 0,914 veces el del SFT, siempre dentro de los 4 GB.
Los autores son honestos sobre qué no funciona. GRPO y PPO quedan excluidos: la generación de tokens requiere releer cada layer, y el layer streaming se vuelve prohibitivo en términos de tiempo. KTO, frecuentemente descrito como reference-free, en realidad usa el mismo esquema de referencia que DPO, y Soup lo trata así.
Los límites son claros. Los números vienen de una sola arquitectura, medidos por los autores mismos. El layer streaming está marcado BETA y es opcional. La velocidad de 119,6 tok/s es para batch 1 y secuencia 512: en datos reales, con secuencias más largas o batches más grandes, el rendimiento cambia. El repo tiene 186 estrellas en GitHub y 60 issues abiertas, señal de adopción aún temprana y fricción real en uso cotidiano.
Pero la señal es interesante. Si el layer streaming mantiene la promesa del bit-exact, el fine-tuning local en GPUs de consumidor deja de ser un experimento y se convierte en una opción práctica. Para quien tiene datos sensibles que no quiere enviar a la nube, o quien quiere iterar rápido sin pagar horas de GPU, la diferencia cuenta.