ประเมินโมเดลด้วย Accelerator

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Dennis Lee

Data Engineer, Amazon

เหตุใดจึงต้องใช้โหมด evaluation?

  • โหมด training
    • Dropout: กำหนด neuron เป็นศูนย์
    • Batch normalization

Dropout และ batch normalization แผนภาพโครงข่ายประสาทเทียมที่มีหลาย layer ได้แก่ input, hidden และ output layer โดยใช้ Dropout กับ hidden layer เพื่อป้องกัน overfitting และใช้ batch normalization เพื่อ normalize ค่าผลลัพธ์ของแต่ละ layer ก่อน activation

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

เหตุใดจึงต้องใช้โหมด evaluation?

  • โหมด training
    • Dropout: กำหนด neuron เป็นศูนย์
    • Batch normalization
  • โหมด evaluation ปิดการทำงานของ layer เหล่านี้
  • model.eval() เปิดใช้โหมด evaluation

Dropout และ batch normalization แผนภาพโครงข่ายประสาทเทียมที่มีหลาย layer ได้แก่ input, hidden และ output layer โดยใช้ Dropout กับ hidden layer เพื่อป้องกัน overfitting และใช้ batch normalization เพื่อ normalize ค่าผลลัพธ์ของแต่ละ layer ก่อน activation

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

ปิดการคำนวณ gradient ด้วย torch.no_grad()

  • การ training ต้องคำนวณ gradient
  • torch.no_grad() ปิดการคำนวณ gradient
  • เรียกใช้ทั้ง model.eval และ torch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

การคำนวณ gradient ใน backpropagation แผนภาพโครงข่ายประสาทเทียมที่แสดงกระบวนการ backpropagation โดยคำนวณ gradient ในแต่ละ layer เพื่อปรับ weight แผนภาพแสดงการส่งต่อค่าความผิดพลาดย้อนกลับจาก output layer ผ่าน hidden layer เพื่ออัปเดต weight ด้วย gradient descent

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

เตรียมชุดข้อมูล validation

  • โหลด validation split ของชุดข้อมูล MRPC
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokenize ชุดข้อมูล validation
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

วงจร epoch: training และ evaluation loop

  • ในแต่ละ epoch ให้วนซ้ำชุดข้อมูล train และ validation
  • รันโมเดลในโหมด training ก่อน
  • จากนั้นรันโมเดลในโหมด evaluation และบันทึก metrics
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
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

ภายใน evaluation loop

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}
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

บันทึก metrics หลัง evaluation

  • เครื่องมือติดตาม: บันทึก metrics เช่น TensorBoard และ MLflow
  • log_with: ใช้เครื่องมือติดตามทดลองทั้งหมด
  • .init_trackers(): เริ่มต้นเครื่องมือติดตาม
  • .log(): ติดตาม accuracy, f1, epoch
  • .end_training(): สิ้นสุดการติดตาม
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()
การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

ฝึกปฏิบัติกันเลย!

การเทรน AI Model อย่างมีประสิทธิภาพด้วย PyTorch

Preparing Video For Download...