Ewaluacja modeli z Accelerator

Efektywne trenowanie modeli AI z PyTorch

Dennis Lee

Data Engineer, Amazon

Dlaczego przełączyć model w tryb ewaluacji?

  • Tryb trenowania
    • Dropout: zeruje neurony
    • Normalizacja wsadowa

Dropout i normalizacja wsadowa Diagram sieci neuronowej z wieloma warstwami: wejściową, ukrytymi i wyjściową. Dropout stosowany jest w warstwach ukrytych w celu zapobiegania przeuczeniu, a normalizacja wsadowa normalizuje wyjście każdej warstwy przed aktywacją.

Efektywne trenowanie modeli AI z PyTorch

Dlaczego przełączyć model w tryb ewaluacji?

  • Tryb trenowania
    • Dropout: zeruje neurony
    • Normalizacja wsadowa
  • Tryb ewaluacji wyłącza te warstwy
  • model.eval() aktywuje tryb ewaluacji

Dropout i normalizacja wsadowa Diagram sieci neuronowej z wieloma warstwami: wejściową, ukrytymi i wyjściową. Dropout stosowany jest w warstwach ukrytych w celu zapobiegania przeuczeniu, a normalizacja wsadowa normalizuje wyjście każdej warstwy przed aktywacją.

Efektywne trenowanie modeli AI z PyTorch

Wyłączanie gradientów z torch.no_grad()

  • Trenowanie wymaga obliczania gradientów
  • torch.no_grad() wyłącza gradienty
  • Należy wywołać zarówno model.eval, jak i torch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Obliczanie gradientów podczas wstecznej propagacji Diagram sieci neuronowej ilustrujący proces wstecznej propagacji, w którym gradienty są obliczane w każdej warstwie w celu aktualizacji wag. Diagram pokazuje, jak błędy są propagowane wstecz od warstwy wyjściowej przez warstwy ukryte w celu aktualizacji wag metodą gradientu prostego.

Efektywne trenowanie modeli AI z PyTorch

Przygotowanie zbioru walidacyjnego

  • Wczytaj zbiór walidacyjny MRPC
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokenizuj zbiór walidacyjny
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Efektywne trenowanie modeli AI z PyTorch

Życie epoki: pętle treningowa i ewaluacyjna

  • W każdej epoce iteruj po zbiorach treningowym i walidacyjnym
  • Najpierw uruchom model w trybie trenowania
  • Następnie uruchom model w trybie ewaluacji i zapisz metryki
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
Efektywne trenowanie modeli AI z PyTorch

Wnętrze pętli ewaluacyjnej

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}")
Eval metrics: 
{'accuracy': 0.81, 'f1': 0.77}
Efektywne trenowanie modeli AI z PyTorch

Zapisywanie metryk po ewaluacji

  • Narzędzia śledzenia: notatniki zapisujące metryki; przykłady: TensorBoard i MLflow
  • log_with: użyj wszystkich narzędzi śledzenia eksperymentów
  • .init_trackers(): inicjalizuje narzędzia śledzenia
  • .log(): śledzi accuracy, f1, epoch
  • .end_training(): kończy śledzenie
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()
Efektywne trenowanie modeli AI z PyTorch

Czas na ćwiczenia!

Efektywne trenowanie modeli AI z PyTorch

Preparing Video For Download...