Avalie modelos com o Accelerator

Treinamento Eficiente de Modelos de IA com PyTorch

Dennis Lee

Data Engineer, Amazon

Por que colocar o modelo em modo de avaliação?

  • Modo de treino
    • Dropout: zera neurônios
    • Batch normalization

Dropout e batch normalization Um diagrama de uma rede neural com várias camadas: entrada, ocultas e saída. O dropout é aplicado nas camadas ocultas para evitar overfitting, e a batch normalization normaliza a saída de cada camada antes da ativação.

Treinamento Eficiente de Modelos de IA com PyTorch

Por que colocar o modelo em modo de avaliação?

  • Modo de treino
    • Dropout: zera neurônios
    • Batch normalization
  • O modo de avaliação desativa essas camadas
  • model.eval() ativa o modo de avaliação

Dropout e batch normalization Um diagrama de uma rede neural com várias camadas: entrada, ocultas e saída. O dropout é aplicado nas camadas ocultas para evitar overfitting, e a batch normalization normaliza a saída de cada camada antes da ativação.

Treinamento Eficiente de Modelos de IA com PyTorch

Desative gradientes com torch.no_grad()

  • Treino exige cálculo de gradientes
  • torch.no_grad() desativa gradientes
  • Chame model.eval e torch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Calculando gradientes na retropropagação Um diagrama de uma rede neural ilustrando o processo de retropropagação, onde os gradientes são calculados em cada camada para ajustar pesos. Mostra como os erros são propagados da saída de volta pelas camadas ocultas para atualizar os pesos com descida de gradiente.

Treinamento Eficiente de Modelos de IA com PyTorch

Prepare um conjunto de validação

  • Carregue a divisão de validação do MRPC
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokenize o conjunto de validação
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Treinamento Eficiente de Modelos de IA com PyTorch

Ciclo de uma época: laços de treino e avaliação

  • A cada época, itere sobre treino e validação
  • Primeiro, execute o modelo em modo de treino
  • Depois, em modo de avaliação e registre métricas
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
Treinamento Eficiente de Modelos de IA com PyTorch

Dentro do laço de avaliação

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}
Treinamento Eficiente de Modelos de IA com PyTorch

Registre métricas após a avaliação

  • Ferramentas de tracking: notebooks que registram métricas; ex.: TensorBoard e MLflow
  • log_with: use todas as ferramentas de tracking
  • .init_trackers(): inicia as ferramentas
  • .log(): registra accuracy, f1, epoch
  • .end_training(): finaliza o tracking
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()
Treinamento Eficiente de Modelos de IA com PyTorch

Vamos praticar!

Treinamento Eficiente de Modelos de IA com PyTorch

Preparing Video For Download...