Deep Learning Academy · Lección

Acumulación de gradientes para lotes grandes

Simule lotes grandes en GPU pequeñas

Lección 2 de 413 pasos

Acumulación de gradientes para lotes grandes es una lección gratuita de Deep Learning Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Deep Learning Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Deep Learning Academy incluye 4 lecciones en total.

El problema de los lotes grandes

Los lotes grandes suelen entrenarse de forma más uniforme, pero también necesitan mucha memoria de GPU. Una tarjeta pequeña simplemente no puede contener un lote enorme de una sola vez.

El truco principal

La acumulación de gradientes divide un lote grande en fragmentos pequeños. Suma sus gradientes y actualiza una sola vez, como si todo el lote se hubiera procesado junto.

Los gradientes ya se acumulan

PyTorch añade cada pasada backward a .grad en lugar de reemplazarla. Este comportamiento predeterminado es exactamente en lo que se basa la acumulación.

Elegir el número de acumulación

Elija cuántos mini lotes forman una actualización. Con un valor de cuatro para accum_steps, cuatro lotes pequeños se comportan como uno cuatro veces mayor.

accum_steps = 4

No ponga a cero en cada paso

El cambio clave es el momento: use zero_grad solo al principio de un ciclo de acumulación, no después de cada mini lote.

if step % accum_steps == 0:
    optimizer.zero_grad()

Escalar la pérdida

Divida la pérdida de cada mini lote entre accum_steps antes de backward. Así, el gradiente promedio será idéntico al que obtendría procesando el lote completo de una vez.

loss = loss_fn(model(x), y) / accum_steps
loss.backward()

Avanzar solo cuando esté completo

Cuando se hayan acumulado suficientes mini lotes, llame a optimizer.step. Los gradientes acumulados representan ahora todo el lote grande.

if (step + 1) % accum_steps == 0:
    optimizer.step()

El patrón completo

Únalo todo: escale la pérdida y ejecute backward en cada paso, pero haga step y zero solo una vez por ciclo. El bucle sigue siendo sencillo.

for step, (x, y) in enumerate(loader):
    loss = loss_fn(model(x), y) / accum_steps
    loss.backward()
    if (step + 1) % accum_steps == 0:
        optimizer.step()
        optimizer.zero_grad()

La memoria se mantiene reducida

Solo mantiene un mini lote en memoria cada vez. Por eso una GPU modesta puede simular un lote muchas veces mayor que su capacidad real.

El intercambio

La acumulación intercambia tiempo por memoria: más pasadas forward y backward por actualización hacen que cada lote efectivo tarde un poco más en completarse.

Tenga en cuenta Batch Norm

Batch Norm sigue viendo únicamente el mini lote pequeño, por lo que sus estadísticas son más ruidosas que las que produciría un lote grande real. Téngalo en cuenta.

Comprobación rápida

Acumula gradientes durante 4 mini lotes. ¿Cuándo debe llamar a optimizer.step()?

Resumen

Divida un lote grande en fragmentos, divida la pérdida entre accum_steps, ejecute backward en cada fragmento y haga step solo una vez por ciclo para simular un lote grande con poca memoria. 🧮

Gratis para empezar

Aprende Python con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Acumulación de gradientes para lotes grandes» es gratis?

Sí — el texto completo de «Acumulación de gradientes para lotes grandes» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Deep Learning Academy, actualiza a CoddyKit PRO. El curso de Deep Learning Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Acumulación de gradientes para lotes grandes»?

Simule lotes grandes en GPU pequeñas Practicas Deep Learning Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Deep Learning Academy?

No se requiere experiencia previa. Deep Learning Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Acumulación de gradientes para lotes grandes»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Deep Learning Academy?

Sí. Cada lección de Deep Learning Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Precisión mixta con autocast y GradScaler
  2. Acumulación de gradientes para lotes grandes
  3. Perfilar el cuello de botella
  4. Reduzca el uso de memoria de la GPU
← Volver a Deep Learning Academy