Entraînement en précision mixte

Entraîner efficacement des modèles d’IA avec PyTorch

Dennis Lee

Data Engineer, Amazon

La précision mixte accélère le calcul

 

 

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

Entraîner efficacement des modèles d’IA avec PyTorch

Calculs plus rapides avec moins de précision

Schéma montrant la représentation des nombres à virgule flottante en FP32 et FP16.

Entraîner efficacement des modèles d’IA avec PyTorch

Calculs plus rapides avec moins de précision

Schéma montrant la représentation des nombres à virgule flottante en FP32 et FP16.

Entraîner efficacement des modèles d’IA avec PyTorch

Calculs plus rapides avec moins de précision

Schéma montrant la représentation des nombres à virgule flottante en FP32 et FP16.

Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
  • Sous-dépassement : un nombre devient 0 car il est sous la précision
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
  • Sous-dépassement : un nombre devient 0 car il est sous la précision
  • Mettre à l'échelle la perte pour éviter le sous-dépassement
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
  • Sous-dépassement : un nombre devient 0 car il est sous la précision
  • Mettre à l'échelle la perte pour éviter le sous-dépassement
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
  • Sous-dépassement : un nombre devient 0 car il est sous la précision
  • Mettre à l'échelle la perte pour éviter le sous-dépassement
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
  • Sous-dépassement : un nombre devient 0 car il est sous la précision
  • Mettre à l'échelle la perte pour éviter le sous-dépassement
Entraîner efficacement des modèles d’IA avec PyTorch

Qu'est-ce que l'entraînement en précision mixte ?

Schéma illustrant les étapes de l'entraînement en précision mixte.

  • Précision mixte : combiner des calculs FP16 et FP32 pour accélérer l'entraînement
  • Sous-dépassement : un nombre devient 0 car il est sous la précision
  • Mettre à l'échelle la perte pour éviter le sous-dépassement
Entraîner efficacement des modèles d’IA avec PyTorch

Implémentation PyTorch

Graphique comparant la facilité d'utilisation et la capacité de personnalisation pour PyTorch, Accelerator et Trainer.

Entraîner efficacement des modèles d’IA avec PyTorch

Précision mixte avec PyTorch

scaler = torch.amp.GradScaler()


for batch in train_dataloader: inputs, targets = batch["input_ids"], batch["labels"]
with torch.autocast(device_type="cpu", dtype=torch.float16):
outputs = model(inputs, labels=targets) loss = outputs.loss
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()
optimizer.zero_grad()
Entraîner efficacement des modèles d’IA avec PyTorch

De PyTorch à Accelerator

Graphique comparant la facilité d'utilisation et la capacité de personnalisation pour PyTorch, Accelerator et Trainer.

Entraîner efficacement des modèles d’IA avec PyTorch

De PyTorch à Accelerator

Graphique comparant la facilité d'utilisation et la capacité de personnalisation pour PyTorch, Accelerator et Trainer.

Entraîner efficacement des modèles d’IA avec PyTorch

Précision mixte avec Accelerator

accelerator = Accelerator(mixed_precision="fp16")


model, optimizer, train_dataloader, lr_scheduler = \ accelerator.prepare(model, optimizer, train_dataloader, lr_scheduler)
for batch in train_dataloader: inputs, targets = batch["input_ids"], batch["labels"] outputs = model(inputs, labels=targets) loss = outputs.loss accelerator.backward(loss) optimizer.step() optimizer.zero_grad()
Entraîner efficacement des modèles d’IA avec PyTorch

D'Accelerator à Trainer

Graphique comparant la facilité d'utilisation et la capacité de personnalisation pour PyTorch, Accelerator et Trainer.

Entraîner efficacement des modèles d’IA avec PyTorch

D'Accelerator à Trainer

Graphique comparant la facilité d'utilisation et la capacité de personnalisation pour PyTorch, Accelerator et Trainer.

Entraîner efficacement des modèles d’IA avec PyTorch

Précision mixte avec Trainer

training_args = TrainingArguments(
    output_dir="./results",
    evaluation_strategy="epoch",
    fp16=True
)

trainer = Trainer( model=model, args=training_args, train_dataset=dataset["train"], eval_dataset=dataset["validation"], compute_metrics=compute_metrics, )
trainer.train()
Entraîner efficacement des modèles d’IA avec PyTorch

Passons à la pratique !

Entraîner efficacement des modèles d’IA avec PyTorch

Preparing Video For Download...