Recursos/Entrenamiento de modelos/Qué ocurre durante el entrenamiento

Mejor práctica

¿Cabrá el modelo? Memoria para el entrenamiento

El entrenamiento necesita espacio para los pesos del modelo, sus gradientes y el estado del optimizador, además de la memoria de trabajo. Una regla general sencilla, de unos 2 GB por cada mil millones de parámetros para LoRA y 12 GB para el ajuste fino completo, le indica antes de empezar si un modelo cabrá en su máquina.

Capítulo 65 min de lectura4 referencias

Por qué el entrenamiento necesita más que la descarga

Ejecutar un modelo necesita poco más que sus pesos: un modelo de 7B en 16 bits ocupa unos 14 GB. El entrenamiento necesita más, porque cada peso que aprende también necesita un gradiente (hacia dónde moverlo) y un estado del optimizador (los promedios móviles de Adam que establecen cuánto). A esto se suman las activaciones del paso hacia adelante, que crecen con el tamaño del lote y la longitud del ejemplo. Cuáles de estos existen para qué pesos es lo que separa el ajuste fino completo de LoRA.

La regla general

Una regla general para la memoria de entrenamiento
LoRA   ≈ 2 GB per billion parameters  + ~3 GB
         frozen 16-bit weights            adapter, activations, overhead

full   ≈ 12 GB per billion parameters + ~4 GB
         16-bit weight          2 bytes
         16-bit gradient        2 bytes
         Adam moment 1 (fp32)   4 bytes
         Adam moment 2 (fp32)   4 bytes
                              ─────────
                               12 bytes per weight
         (+ 4 bytes for a 32-bit master copy = 16)
  • LoRA mantiene la base congelada en 16 bits: 2 bytes por peso, es decir, 2 GB por cada mil millones de parámetros. El adaptador es diminuto, y los ~3 GB lo cubren a él, a su estado del optimizador, a las activaciones en longitudes moderadas y al propio marco de trabajo.
  • El ajuste fino completo entrena cada peso: un peso y un gradiente de 16 bits, más las dos estimaciones de momento de 32 bits de Adam; en total, 12 bytes por peso.
  • QLoRA almacena la base congelada en 4 bits, lo que reduce la memoria a aproximadamente un tercio de la de LoRA: un modelo de 8B necesita unos 9 GB en lugar de 19.

La página de ajuste fino completo cuenta 16 bytes por peso, no 12. La diferencia es la copia maestra de 32 bits de los pesos que la receta clásica de precisión mixta mantiene junto a los de 16 bits. Esta regla general asume un entrenamiento sin esa copia adicional; una configuración que la mantenga necesita unos 16 GB por cada mil millones de parámetros. Ambas son estimaciones antes de los ejemplos largos: las activaciones se suman a esto y crecen con la longitud máxima y el tamaño del lote.

Ajuste fino completo16 bits + Adam≈ 112 GBLoRAbase de 16 bits, congelada≈ 15 GBQLoRAbase de 4 bits, congelada≈ 4–5 GBAdam + copia fp32pesos congeladospesos entrenablesgradientesestado del optimizador
Memoria de GPU aproximada para el ajuste fino de un modelo de 7 mil millones de parámetros, antes de las activaciones. El ajuste fino completo con Adam necesita unos 16 bytes por cada peso: los pesos, sus gradientes, una copia maestra de precisión completa y dos estadísticas del optimizador. LoRA mantiene la base congelada, por lo que los gradientes y el estado del optimizador solo existen para el adaptador pequeño (aquí unos 40 millones de pesos).
Tamaño del modeloLoRAAjuste fino completo
0.5B~4 GB~10 GB
1.5B~6 GB~22 GB
3B~9 GB~40 GB
7B~17 GB~88 GB
14B~31 GB~172 GB

Las activaciones son la parte que la regla solo puede aproximar. Crecen con el número de tokens retenidos a la vez, el tamaño del lote multiplicado por la longitud del ejemplo, por lo que duplicar la longitud máxima aproximadamente las duplica, y la atención puede añadir más para ejemplos muy largos. El margen fijo en la regla asume longitudes moderadas. Si sus ejemplos son largos, deje un margen adicional en lugar de planificar hasta el último gigabyte.

Cuánta memoria tiene realmente

En los portátiles con memoria unificada, como los Mac con procesadores de Apple, la GPU comparte la memoria principal, por lo que un portátil de 36 GB puede dar a un modelo más espacio que una GPU típica para juegos. Pero el sistema operativo y sus otras aplicaciones necesitan su parte, así que cuente con que aproximadamente tres cuartas partes estarán libres para el entrenamiento. En un PC con una tarjeta gráfica independiente, el límite es la propia memoria de la GPU, no la RAM del ordenador.

Portátil de 36 GB27 GB utilizablesSO, aplicaciones1.5B · LoRA≈ 6 GB · cabe7B · LoRA≈ 17 GB · cabe14B · LoRA≈ 31 GB · demasiado grande32B · QLoRA≈ 22–26 GB · cabe1.5B · completo≈ 22 GB · cabe3B · completo≈ 40 GB · demasiado grande
Lo que cabe en un portátil de 36 GB con memoria compartida, según la regla general de esta página. Quedan unos 27 GB para el entrenamiento una vez que el sistema operativo y sus otras aplicaciones consumen su parte. Estimaciones ilustrativas: los ejemplos largos y los lotes grandes necesitan más.
Qué cabe en un portátil de 36 GB (ilustrativo)
  1. Memoria utilizable: después del sistema operativo y las aplicaciones, unos 27 GB.
  2. Modelo de 1.5B: LoRA 2 × 1.5 + 3 ≈ 6 GB, ajuste fino completo 12 × 1.5 + 4 ≈ 22 GB. Ambos caben.
  3. LoRA, modelos más grandes: un modelo de 7B necesita unos 17 GB y cabe; un modelo de 14B necesita más de 30 GB y no cabe. En la práctica, LoRA admite modelos de hasta unos 10B.
  4. Ajuste fino completo, modelos más grandes: un modelo de 3B necesita unos 40 GB, por lo que el límite es de aproximadamente 1.5B.
  5. QLoRA: un modelo de 27–32B necesita unos 22–26 GB, lo cual cabe.
El modelo de 1.5B, de ambas formas
1.5B · LoRA    2 × 1.5 + 3   ≈  6 GB
1.5B · full   12 × 1.5 + 4   ≈ 22 GB

En una GPU NVIDIA de 16 GB, la misma regla dice que un modelo de 8B necesita unos 19 GB con LoRA, lo cual es demasiado, pero unos 9 GB con QLoRA, lo que cabe con espacio para ejemplos más largos.

Si una ejecución se queda sin memoria

  1. Reduzca la longitud máxima. La memoria crece con la longitud del ejemplo, por lo que esto es lo que más recupera. Compruebe primero que sus ejemplos típicos sigan cabiendo.
  2. Reduzca el tamaño del lote. Menos ejemplos por paso significa menos activaciones retenidas a la vez.
  3. Cambie a QLoRA. La base de 4 bits ocupa aproximadamente una cuarta parte de la memoria de una de 16 bits.
  4. Utilice puntos de control de gradiente. Sacrifica un 20–30% de velocidad a cambio de mucha menos memoria de activación, y muchas configuraciones ya lo activan.
  5. Elija un modelo más pequeño, o use LoRA en lugar de un ajuste fino completo.

Errores comunes

  • Juzgar por el tamaño de descarga. El ajuste fino completo necesita de seis a ocho veces los pesos de 16 bits, más las activaciones.
  • Contar toda la RAM de un portátil de memoria compartida como disponible. El sistema operativo y otras aplicaciones necesitan su parte.
  • Contar la RAM de un PC en lugar de la memoria de su tarjeta gráfica.
  • Aumentar la longitud máxima o el tamaño del lote después de que una ejecución cupiera, y esperar que la siguiente también lo haga.
  • Reducir la longitud máxima por debajo de la longitud de sus ejemplos típicos, de modo que el modelo nunca vea el final de las respuestas que debería aprender.

Referencias y lecturas adicionales

Las fuentes externas se abren en una pestaña nueva.

  1. 01ZeRO: Memory Optimizations Toward Training Trillion Parameter ModelsRajbhandari et al., 2019 · arXiv · arxiv.orgEl cálculo estándar de pesos, gradientes y estado del optimizador por parámetro.
  2. 02GPU memory usageHugging Face Transformers docs · huggingface.co
  3. 03Model memory estimatorHugging Face Accelerate docs · huggingface.coUna herramienta para estimar la memoria de un modelo específico de Hugging Face para su ejecución y entrenamiento.
  4. 04Unified MemoryMLX docs · ml-explore.github.ioCómo la CPU y la GPU de los procesadores de Apple comparten un único grupo de memoria.

Convierta semanas de trabajo experto en minutos

Vea cómo Scalata se adapta a su equipo, a sus datos y a sus Controles.

Contactar con ventas