Modelle mit Accelerator auswerten

Effizientes KI-Modelltraining mit PyTorch

Dennis Lee

Data Engineer, Amazon

Warum Modell in den Auswertungsmodus setzen?

  • Trainingsmodus
    • Dropout: Neuronen auf null setzen
    • Batch-Normalisierung

Dropout und Batch-Normalisierung Ein Diagramm eines neuronalen Netzes mit Eingabe-, versteckten und Ausgabeschichten. Dropout wird auf die versteckten Schichten angewendet, um Overfitting zu vermeiden, und Batch-Normalisierung normalisiert die Ausgabe jeder Schicht vor der Aktivierung.

Effizientes KI-Modelltraining mit PyTorch

Warum Modell in den Auswertungsmodus setzen?

  • Trainingsmodus
    • Dropout: Neuronen auf null setzen
    • Batch-Normalisierung
  • Auswertungsmodus deaktiviert diese Schichten
  • model.eval() aktiviert den Auswertungsmodus

Dropout und Batch-Normalisierung Ein Diagramm eines neuronalen Netzes mit Eingabe-, versteckten und Ausgabeschichten. Dropout wird auf die versteckten Schichten angewendet, um Overfitting zu vermeiden, und Batch-Normalisierung normalisiert die Ausgabe jeder Schicht vor der Aktivierung.

Effizientes KI-Modelltraining mit PyTorch

Gradienten mit torch.no_grad() deaktivieren

  • Training benötigt Gradienten
  • torch.no_grad() deaktiviert Gradienten
  • Beide aufrufen: model.eval und torch.no_grad
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Gradientenberechnung beim Backpropagation Ein Diagramm eines neuronalen Netzes, das den Backpropagation-Prozess zeigt, bei dem in jeder Schicht Gradienten berechnet werden, um Gewichte anzupassen. Es zeigt, wie Fehler von der Ausgabeschicht rückwärts durch die verborgenen Schichten propagiert werden, um die Gewichte mittels Gradientenabstieg zu aktualisieren.

Effizientes KI-Modelltraining mit PyTorch

Ein Validierungs-Dataset vorbereiten

  • Validierungs-Teilmenge des MRPC-Datasets laden
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Validierungs-Dataset tokenisieren
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Effizientes KI-Modelltraining mit PyTorch

Ablauf einer Epoche: Trainings- und Auswertungsschleifen

  • Pro Epoche über Trainings- und Validierungs-Dataset iterieren
  • Zuerst Modell im Trainingsmodus ausführen
  • Dann im Auswertungsmodus ausführen und Metriken danach loggen
for epoch in range(num_epochs):

model.train() for step, batch in enumerate(train_dataloader): # Perform training step
model.eval() for step, batch in enumerate(eval_dataloader): # Perform evaluation step
# Log evaluation metrics
Effizientes KI-Modelltraining mit PyTorch

In der Auswertungsschleife

metric = evaluate.load("glue", "mrpc")
model.eval()
for step, batch in enumerate(eval_dataloader):

with torch.no_grad(): outputs = model(**batch) predictions = outputs.logits.argmax(dim=-1)
predictions, references = accelerator.gather_for_metrics((predictions, batch["labels"]))
metric.add_batch(predictions=predictions, references=references)
eval_metric = metric.compute() print(f"Eval metrics: \n{eval_metric}")
Auswertungsmetriken: 
{'accuracy': 0.81, 'f1': 0.77}
Effizientes KI-Modelltraining mit PyTorch

Metriken nach der Auswertung loggen

  • Tracking-Tools: Notebooks zum Loggen von Metriken; z. B. TensorBoard und MLflow
  • log_with: alle Experiment-Tracker nutzen
  • .init_trackers(): Tracker initialisieren
  • .log(): accuracy, f1, epoch loggen
  • .end_training(): Tracking beenden
accelerator = Accelerator(project_dir=".",
                          log_with="all")

accelerator.init_trackers("my_project")
for epoch in range(num_epochs): # Training loop is here # Evaluation loop is here accelerator.log({
"accuracy": eval_metric["accuracy"], "f1": eval_metric["f1"],
}, step=epoch)
accelerator.end_training()
Effizientes KI-Modelltraining mit PyTorch

Lass uns üben!

Effizientes KI-Modelltraining mit PyTorch

Preparing Video For Download...