Evalúa modelos con Accelerator

Entrenamiento eficiente de modelos de IA con PyTorch

Dennis Lee

Data Engineer, Amazon

¿Por qué poner un modelo en modo evaluación?

  • Modo entrenamiento
    • Dropout: pone neuronas a cero
    • Normalización por lotes

Dropout y normalización por lotes Un diagrama de una red neuronal con capas de entrada, ocultas y salida. Se aplica dropout en las capas ocultas para evitar sobreajuste, y la normalización por lotes se usa para normalizar la salida de cada capa antes de la activación.

Entrenamiento eficiente de modelos de IA con PyTorch

¿Por qué poner un modelo en modo evaluación?

  • Modo entrenamiento
    • Dropout: pone neuronas a cero
    • Normalización por lotes
  • El modo evaluación desactiva estas capas
  • model.eval() activa el modo evaluación

Dropout y normalización por lotes Un diagrama de una red neuronal con capas de entrada, ocultas y salida. Se aplica dropout en las capas ocultas para evitar sobreajuste y la normalización por lotes se usa para normalizar la salida de cada capa antes de la activación.

Entrenamiento eficiente de modelos de IA con PyTorch

Desactiva gradientes con torch.no_grad()

  • El entrenamiento requiere calcular gradientes
  • torch.no_grad() desactiva gradientes
  • Llama a model.eval y torch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Cálculo de gradientes en backpropagation Un diagrama de una red neuronal que ilustra el backpropagation, donde se calculan gradientes en cada capa para ajustar pesos. Muestra cómo los errores retropropagan desde la salida a las capas ocultas para actualizar pesos con descenso de gradiente.

Entrenamiento eficiente de modelos de IA con PyTorch

Prepara un conjunto de validación

  • Carga el split de validación de MRPC
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokeniza el conjunto de validación
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Entrenamiento eficiente de modelos de IA con PyTorch

Ciclo de una época: bucles de entrenamiento y evaluación

  • En cada época, itera sobre train y validación
  • Primero ejecuta el modelo en modo entrenamiento
  • Luego en modo evaluación y registra métricas tras evaluar
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
Entrenamiento eficiente de modelos de IA con PyTorch

Dentro del bucle de evaluación

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}")
Métricas de eval: 
{'accuracy': 0.81, 'f1': 0.77}
Entrenamiento eficiente de modelos de IA con PyTorch

Registra métricas tras evaluar

  • Herramientas de tracking: cuadernos que registran métricas; ej.: TensorBoard y MLflow
  • log_with: usa todas las herramientas de tracking
  • .init_trackers(): inicializa el tracking
  • .log(): registra accuracy, f1, epoch
  • .end_training(): finaliza el 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()
Entrenamiento eficiente de modelos de IA con PyTorch

¡Vamos a practicar!

Entrenamiento eficiente de modelos de IA con PyTorch

Preparing Video For Download...