Calculadora de memoria por batch size: cuánta VRAM ocupan las activaciones
Estima la memoria de activaciones que consume un batch de entrenamiento según el batch size, la longitud de secuencia, el tamaño oculto y el número de capas.
Cómo funciona
Memoria de activaciones ≈ batch × longitud de secuencia × tamaño oculto × capas × bytes × k (k ≈ 10 para las activaciones que guarda un transformer)
Durante el entrenamiento, el forward pass guarda activaciones que luego necesita el backward pass, y esa memoria crece en línea recta con el batch size. Por eso lo que suele provocar el temido error de memoria insuficiente (OOM) es duplicar el batch, no los pesos. La estimación usa un multiplicador aproximado por los varios tensores de activación que conserva cada capa del transformer; la cifra exacta depende de la arquitectura, de la implementación de atención y de si usas gradient checkpointing. Tómala como un orden de magnitud: si supera por mucho la memoria de tu GPU, baja el batch, acorta las secuencias o activa el checkpointing para cambiar cómputo por memoria.
Ejemplo resuelto
Luis entrena con batch 16, secuencias de 2,048 tokens, tamaño oculto 4,096 y 32 capas en bf16 (2 bytes). Cada muestra ocupa ≈ 2,048 × 4,096 × 32 × 2 × 10 ≈ 5.369 GB, así que el batch de 16 necesita unos 85.90 GB solo de activaciones, sin contar pesos ni estado del optimizador. Con esa cifra tiene que repartir el trabajo entre varias GPU o activar checkpointing.
Preguntas frecuentes
¿Por qué el batch size, y no el tamaño del modelo, causa errores de memoria?
Los pesos y el estado del optimizador ocupan lo mismo sin importar el batch, pero las activaciones crecen en proporción al batch size y a la longitud de secuencia. Por eso el batch es la perilla que más seguido te saca del límite de la GPU: si lo reduces a la mitad, la memoria de activaciones baja más o menos a la mitad.
¿Qué tan precisa es esta estimación?
Es un orden de magnitud con un multiplicador fijo. El uso real cambia con el kernel de atención (FlashAttention guarda mucho menos), el checkpointing de activaciones y la sobrecarga del framework. Para cifras exactas, perfila tu entrenamiento real.
¿Qué es el gradient checkpointing (checkpointing de activaciones)?
Es una técnica que descarta la mayoría de las activaciones en el forward pass y las vuelve a calcular en el backward pass. Puede recortar muchísimo la memoria de activaciones, a menudo hasta la raíz cuadrada del número de capas, a cambio de más cómputo.
¿Qué pasa si uso float32 en lugar de bf16?
Cada valor ocupa 4 bytes en vez de 2, así que la memoria de activaciones se duplica. En el ejemplo de 16 muestras pasaría de unos 85.90 GB a 171.80 GB.
Calculadoras relacionadas
Estimación con fines educativos: los costos y la memoria reales dependen de tu proveedor, framework, arquitectura del modelo y precios, que cambian seguido. Compáralo con tus propias facturas y mediciones antes de comprometer presupuesto.