Accumulation de gradients avec l'accélérateur
Vous entraînez un modèle linguistique pour simplifier les traductions en paraphrasant les phrases complexes, mais votre GPU manque de mémoire. L'accumulation du gradient permet au modèle de s'entraîner efficacement sur des lots plus importants en utilisant de petits lots qui tiennent dans la mémoire. Vous préférez écrire explicitement la boucle d'apprentissage pour voir sa structure, vous utilisez donc Accelerator
. Notez que cet exercice s'exécute en fait sur le CPU, mais que le code reste le même pour le GPU.
Les adresses model
, train_dataloader
, optimizer
, et lr_scheduler
ont été prédéfinies.
Cet exercice fait partie du cours
Entraînement efficace de modèles d'IA avec PyTorch
Instructions
- Configurez
Accelerator()
pour qu'il utilise l'accumulation de gradient en deux étapes. - Mettez en place un gestionnaire de contexte
Accelerator
pour permettre l'accumulation de gradients pour le sitemodel
.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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}")