Vérification des gradients et SGD local

Entraînement efficace de modèles d’IA avec PyTorch

Dennis Lee

Data Engineer, Amazon

Améliorer l’efficacité de l’entraînement

 

 

Icônes représentant l’efficacité mémoire, l’efficacité de communication et l’efficacité de calcul.

Entraînement efficace de modèles d’IA avec PyTorch

La vérification des gradients améliore l’efficacité mémoire

 

 

Icônes représentant l’efficacité mémoire, l’efficacité de communication et l’efficacité de calcul.

Entraînement efficace de modèles d’IA avec PyTorch

Le SGD local améliore l’efficacité de communication

 

 

Icônes représentant l’efficacité mémoire, l’efficacité de communication et l’efficacité de calcul.

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C
    • Calculer d’abord A et B, puis calculer C

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C
    • Calculer d’abord A et B, puis calculer C
    • A et B ne sont plus requis pour le reste du passage avant
  • Devrait-on conserver ou supprimer A et B?

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C
    • Calculer d’abord A et B, puis calculer C
    • A et B ne sont plus requis pour le reste du passage avant
  • Devrait-on conserver ou supprimer A et B?
    • Sans vérification des gradients : conserver A et B

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C
    • Calculer d’abord A et B, puis calculer C
    • A et B ne sont plus requis pour le reste du passage avant
  • Devrait-on conserver ou supprimer A et B?
    • Sans vérification des gradients : conserver A et B
    • Avec vérification des gradients : supprimer A et B

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C
    • Calculer d’abord A et B, puis calculer C
    • A et B ne sont plus requis pour le reste du passage avant
  • Devrait-on conserver ou supprimer A et B?
    • Sans vérification des gradients : conserver A et B
    • Avec vérification des gradients : supprimer A et B
    • Recalculer A et B pendant la rétropropagation

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que la vérification des gradients?

  • Vérification des gradients : réduire la mémoire en choisissant quelles activations conserver
  • Exemple : calculer A + B = C
    • Calculer d’abord A et B, puis calculer C
    • A et B ne sont plus requis pour le reste du passage avant
  • Devrait-on conserver ou supprimer A et B?
    • Sans vérification des gradients : conserver A et B
    • Avec vérification des gradients : supprimer A et B
    • Recalculer A et B pendant la rétropropagation
    • Si B est coûteux à recalculer, le conserver

Graphique illustrant la vérification des gradients avec des nœuds et des arêtes

Entraînement efficace de modèles d’IA avec PyTorch

Trainer et Accelerator

Graphique comparant la facilité d’utilisation et la personnalisation pour Accelerator et Trainer.

Entraînement efficace de modèles d’IA avec PyTorch

Trainer et Accelerator

Graphique comparant la facilité d’utilisation et la personnalisation pour Accelerator et Trainer.

Entraînement efficace de modèles d’IA avec PyTorch

Vérification des gradients avec Trainer

training_args = TrainingArguments(output_dir="./results",
                                  evaluation_strategy="epoch",
                                  gradient_accumulation_steps=4)







Entraînement efficace de modèles d’IA avec PyTorch

Vérification des gradients avec Trainer

training_args = TrainingArguments(output_dir="./results",
                                  evaluation_strategy="epoch",
                                  gradient_accumulation_steps=4,
                                  gradient_checkpointing=True)

trainer = Trainer(model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["validation"], compute_metrics=compute_metrics)
trainer.train()
{'epoch': 1.0, 'eval_loss': 0.73, 'eval_accuracy': 0.03, 'eval_f1': 0.05}
Entraînement efficace de modèles d’IA avec PyTorch

De Trainer à Accelerator

Graphique comparant la facilité d’utilisation et la personnalisation pour Accelerator et Trainer.

Entraînement efficace de modèles d’IA avec PyTorch

Vérification des gradients avec Accelerator

accelerator = Accelerator(gradient_accumulation_steps=2)


for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        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()
Entraînement efficace de modèles d’IA avec PyTorch

Vérification des gradients avec Accelerator

accelerator = Accelerator(gradient_accumulation_steps=2)
model.gradient_checkpointing_enable()

for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        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()
Entraînement efficace de modèles d’IA avec PyTorch

Le SGD local améliore l’efficacité de communication

 

 

Icônes représentant l’efficacité mémoire, l’efficacité de communication et l’efficacité de calcul.

Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que le SGD local?

Schéma montrant le fonctionnement du SGD local en synchronisant les gradients après un certain nombre d’étapes.

  • Chaque appareil calcule les gradients en parallèle
Entraînement efficace de modèles d’IA avec PyTorch

Qu’est-ce que le SGD local?

Schéma montrant le fonctionnement du SGD local en synchronisant les gradients après un certain nombre d’étapes.

  • Chaque appareil calcule les gradients en parallèle
  • Synchronisation des gradients : le nœud pilote met à jour les paramètres du modèle sur chaque appareil
  • SGD local : réduire la fréquence de synchronisation des gradients
Entraînement efficace de modèles d’IA avec PyTorch

SGD local avec Accelerator





for index, batch in enumerate(dataloader):
    with accelerator.accumulate(model):
        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()

Entraînement efficace de modèles d’IA avec PyTorch

SGD local avec Accelerator

from accelerate.local_sgd import LocalSGD

with LocalSGD(accelerator=accelerator, model=model, local_sgd_steps=8, 
              enabled=True) as local_sgd:
    for index, batch in enumerate(dataloader):
        with accelerator.accumulate(model):
            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()

Entraînement efficace de modèles d’IA avec PyTorch

SGD local avec Accelerator

from accelerate.local_sgd import LocalSGD

with LocalSGD(accelerator=accelerator, model=model, local_sgd_steps=8, 
              enabled=True) as local_sgd:
    for index, batch in enumerate(dataloader):
        with accelerator.accumulate(model):
            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()
            local_sgd.step()
Entraînement efficace de modèles d’IA avec PyTorch

Passons à la pratique !

Entraînement efficace de modèles d’IA avec PyTorch

Preparing Video For Download...