CommencerCommencez gratuitement

Accumulation de gradients avec Accelerator

Vous entraînez un modèle de langage pour simplifier des traductions en reformulant des phrases complexes, mais votre GPU manque de mémoire. L’accumulation de gradients permet d’entraîner le modèle sur des lots plus grands en utilisant de petits lots qui tiennent en mémoire. Vous préférez écrire explicitement la boucle d’entraînement pour en voir la structure, donc vous utilisez Accelerator. Notez que cet exercice s’exécute en réalité sur le CPU, mais le code est identique pour le GPU.

Le model, le train_dataloader, l’optimizer et le lr_scheduler ont été pré-définis.

Cet exercice fait partie du cours

<cours>Entraîner efficacement des modèles d’IA avec PyTorch</cours>
Voir le cours

Instructions de l’exercice

  • Configurez Accelerator() pour utiliser l’accumulation de gradients avec deux étapes.
  • Mettez en place un gestionnaire de contexte Accelerator pour activer l’accumulation de gradients pour le model.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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}")
Modifier et exécuter le code