Utvärdera modeller med Accelerator

Effektiv AI-modellträning med PyTorch

Dennis Lee

Data Engineer, Amazon

Varför sätta en modell i utvärderingsläge?

  • Träningsläge
    • Dropout: Sätt neuroner till noll
    • Batchnormalisering

Dropout och batchnormalisering Ett diagram över ett neuralt nätverk med flera lager, inklusive indata-, dolda och utdatalager. Dropout tillämpas på de dolda lagren för att förhindra överanpassning, och batchnormalisering används för att normalisera utdata från varje lager före aktivering.

Effektiv AI-modellträning med PyTorch

Varför sätta en modell i utvärderingsläge?

  • Träningsläge
    • Dropout: Sätt neuroner till noll
    • Batchnormalisering
  • Utvärderingsläge inaktiverar dessa lager
  • model.eval() aktiverar utvärderingsläge

Dropout och batchnormalisering Ett diagram över ett neuralt nätverk med flera lager, inklusive indata-, dolda och utdatalager. Dropout tillämpas på de dolda lagren för att förhindra överanpassning, och batchnormalisering används för att normalisera utdata från varje lager före aktivering.

Effektiv AI-modellträning med PyTorch

Inaktivera gradienter med torch.no_grad()

  • Träning kräver gradientberäkning
  • torch.no_grad() inaktiverar gradienter
  • Anropa både model.eval och torch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Gradientberäkning vid backpropagation Ett diagram över ett neuralt nätverk som illustrerar backpropagation-processen, där gradienter beräknas i varje lager för att justera vikterna. Diagrammet visar hur fel propageras bakåt från utdatalagret genom de dolda lagren för att uppdatera vikterna med gradientnedstigning.

Effektiv AI-modellträning med PyTorch

Förbered ett valideringsdataset

  • Ladda valideringsdelning av MRPC-datasetet
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokenisera valideringsdatasetet
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Effektiv AI-modellträning med PyTorch

En epoks livscykel: tränings- och utvärderingsloopar

  • Iterera över tränings- och valideringsdataset för varje epok
  • Kör först modellen i träningsläge
  • Kör sedan modellen i utvärderingsläge och logga mätvärden
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
Effektiv AI-modellträning med PyTorch

Inuti utvärderingsloopen

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}
Effektiv AI-modellträning med PyTorch

Logga mätvärden efter utvärdering

  • Spårningsverktyg: anteckningsböcker som loggar mätvärden; exempel är TensorBoard och MLflow
  • log_with: använd alla experiment-spårningsverktyg
  • .init_trackers(): initialisera spårningsverktyg
  • .log(): spåra accuracy, f1, epoch
  • .end_training(): avsluta spårning
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()
Effektiv AI-modellträning med PyTorch

Låt oss öva!

Effektiv AI-modellträning med PyTorch

Preparing Video For Download...