Acumulación de gradiente con Acelerador
Estás entrenando un modelo lingüístico para simplificar las traducciones parafraseando frases complejas, pero tu GPU se está quedando sin memoria. La acumulación de gradiente permite que el modelo se entrene eficazmente en lotes más grandes utilizando lotes pequeños que quepan en la memoria. Prefieres escribir el bucle de entrenamiento explícitamente para ver su estructura, así que utilizas Accelerator
. Ten en cuenta que este ejercicio en realidad se ejecuta en la CPU, pero el código sigue siendo el mismo para la GPU.
Se han predefinido las direcciones model
, train_dataloader
, optimizer
, y lr_scheduler
.
Este ejercicio forma parte del curso
Entrenamiento eficiente de modelos de IA con PyTorch
Instrucciones del ejercicio
- Configura
Accelerator()
para utilizar la acumulación de gradiente con dos pasos. - Configura un gestor de contexto
Accelerator
para permitir la acumulación de gradiente para elmodel
.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
# Configure Accelerator
accelerator = ____(____=____)
model, optimizer, train_dataloader, lr_scheduler = accelerator.prepare(model, optimizer, train_dataloader, lr_scheduler)
for batch in train_dataloader:
# Set up an Accelerator context manager
with ____.____(____):
inputs, targets = batch["input_ids"], batch["labels"]
outputs = model(inputs, labels=targets)
loss = outputs.loss
accelerator.backward(loss)
optimizer.step()
lr_scheduler.step()
optimizer.zero_grad()
print(f"Loss = {loss}")