Đánh giá mô hình với Accelerator

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Dennis Lee

Data Engineer, Amazon

Vì sao đặt mô hình ở chế độ đánh giá?

  • Chế độ huấn luyện
    • Dropout: đặt một số neuron về 0
    • Batch normalization

Dropout và batch normalization Sơ đồ mạng nơ-ron nhiều lớp gồm lớp vào, ẩn, và ra. Dropout áp dụng ở các lớp ẩn để tránh overfitting; batch normalization chuẩn hóa đầu ra mỗi lớp trước khi kích hoạt.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Vì sao đặt mô hình ở chế độ đánh giá?

  • Chế độ huấn luyện
    • Dropout: đặt neuron về 0
    • Batch normalization
  • Chế độ đánh giá vô hiệu hóa các lớp này
  • model.eval() bật chế độ đánh giá

Dropout và batch normalization Sơ đồ mạng nơ-ron nhiều lớp gồm lớp vào, ẩn và ra. Dropout áp dụng ở các lớp ẩn để tránh overfitting; batch normalization dùng để chuẩn hóa đầu ra mỗi lớp trước khi kích hoạt.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Tắt gradient với torch.no_grad()

  • Huấn luyện cần tính gradient
  • torch.no_grad() tắt gradient
  • Gọi cả model.evaltorch.no_grad:
model.eval()
with torch.no_grad():
    outputs = model(**inputs)

Tính gradient trong lan truyền ngược Sơ đồ mạng nơ-ron minh họa quá trình lan truyền ngược, nơi gradient được tính ở mỗi lớp để điều chỉnh trọng số. Sơ đồ cho thấy lỗi lan truyền ngược từ lớp ra qua các lớp ẩn để cập nhật trọng số bằng gradient descent.

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Chuẩn bị tập validation

  • Tải tập validation của bộ dữ liệu MRPC
validation_dataset = load_dataset("glue", "mrpc", split="validation")
  • Tokenize tập validation
def encode(examples):
    return tokenizer(examples["sentence1"], 
                      examples["sentence2"],
                      truncation=True,
                      padding="max_length")

validation_dataset = validation_dataset.map(encode, batched=True)
Huấn luyện Mô hình AI Hiệu quả với PyTorch

Vòng đời một epoch: vòng lặp train và eval

  • Mỗi epoch, lặp qua tập train và validation
  • Chạy mô hình ở chế độ huấn luyện trước
  • Sau đó chuyển sang chế độ đánh giá và ghi log chỉ số
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
Huấn luyện Mô hình AI Hiệu quả với PyTorch

Bên trong vòng lặp đánh giá

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}")
Chỉ số đánh giá: 
{'accuracy': 0.81, 'f1': 0.77}
Huấn luyện Mô hình AI Hiệu quả với PyTorch

Ghi log chỉ số sau đánh giá

  • Công cụ theo dõi: notebook ghi log chỉ số; ví dụ TensorBoard, MLflow
  • log_with: dùng mọi công cụ theo dõi thí nghiệm
  • .init_trackers(): khởi tạo công cụ theo dõi
  • .log(): theo dõi accuracy, f1, epoch
  • .end_training(): kết thúc theo dõi
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()
Huấn luyện Mô hình AI Hiệu quả với PyTorch

Ayo berlatih!

Huấn luyện Mô hình AI Hiệu quả với PyTorch

Preparing Video For Download...