Acumulación de gradientes con Accelerator
Estás entrenando un modelo de lenguaje para simplificar traducciones parafraseando oraciones complejas, pero tu GPU se queda sin memoria. La acumulación de gradientes permite que el modelo entrene efectivamente con lotes más grandes usando lotes pequeños que caben en memoria. Prefieres escribir el bucle de entrenamiento de forma explícita para ver su estructura, por lo que estás usando Accelerator. Ten en cuenta que este ejercicio se ejecuta en la CPU, pero el código es el mismo para la GPU.
El model, train_dataloader, optimizer y lr_scheduler ya están definidos.
Este ejercicio forma parte del curso
Entrenamiento eficiente de modelos de IA con PyTorch
Instrucciones del ejercicio
- Configura
Accelerator()para usar acumulación de gradientes con dos pasos. - Configura un gestor de contexto de
Acceleratorpara activar la acumulación de gradientes en elmodel.
Ejercicio interactivo práctico
Prueba este ejercicio y completa 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}")