Accumulo dei gradienti con Accelerator
Stai addestrando un modello di linguaggio per semplificare le traduzioni parafrasando frasi complesse, ma la tua GPU sta esaurendo la memoria. L'accumulo dei gradienti consente al modello di addestrarsi efficacemente su batch più grandi usando batch piccoli che rientrano in memoria. Preferisci scrivere esplicitamente il loop di training per vederne la struttura, quindi stai usando Accelerator. Nota che questo esercizio gira effettivamente sulla CPU, ma il codice rimane lo stesso per la GPU.
model, train_dataloader, optimizer e lr_scheduler sono già stati definiti.
Questo esercizio fa parte del corso
Efficient AI Model Training with PyTorch
Istruzioni dell'esercizio
- Configura
Accelerator()per usare l'accumulo dei gradienti con due step. - Imposta un context manager di
Acceleratorper abilitare l'accumulo dei gradienti per ilmodel.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# 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}")