Acumulación de gradientes para lotes grandes
Simule lotes grandes en GPU pequeñas
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 = 4No 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. 🧮
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
- Precisión mixta con autocast y GradScaler
- Acumulación de gradientes para lotes grandes
- Perfilar el cuello de botella
- Reduzca el uso de memoria de la GPU