Transformers documentation

Callbacks

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Callbacks

TrainerCallback can thiệp vào các sự kiện huấn luyện cụ thể (bắt đầu epoch, đánh giá, kết thúc huấn luyện) để thay đổi trạng thái huấn luyện hoặc điều khiển luồng thực thi. Sử dụng callback để ghi log các chỉ số vào các công cụ theo dõi thí nghiệm như Trackio, tùy chỉnh thời điểm lưu và đánh giá, hoặc thêm các hành vi tùy chỉnh khác. Kết hợp nhiều callback để gộp các tính năng.

Callback không thể sửa đổi chính vòng lặp huấn luyện, chẳng hạn như bước truyền thẳng. Để thay đổi những gì Trainer tính toán, hãy sinh lớp con các phương thức của nó.

Sơ đồ bên dưới cho thấy tất cả các sự kiện mà một callback có thể can thiệp vào.

on_train_begin
  └─ for each epoch:
      on_epoch_begin
      └─ for each step:
          on_step_begin
          ├─ for each gradient accumulation substep:
          │   on_substep_end
          on_pre_optimizer_step   ← after gradient clipping, before optimizer.step()
          on_optimizer_step       ← after optimizer.step()
          on_step_end
          └─ (conditionally):
              on_log
              on_evaluate
              on_save
      on_epoch_end
on_train_end
on_predict / on_prediction_step
on_push_begin

Tạo một callback

Kế thừa TrainerCallback và ghi đè một hoặc nhiều phương thức sự kiện từ sơ đồ ở trên. Ví dụ dưới đây minh họa ba hook:

  • on_epoch_begin in epoch hiện tại từ TrainerState (một giá trị động) và tốc độ học từ TrainingArguments (một giá trị tĩnh).
  • on_step_end đọc learning rate hiện tại từ lr_scheduler (được truyền qua **kwargs) và đặt should_evaluate trên TrainerControl (xem TrainerControl để có danh sách đầy đủ các đối tượng điều khiển) nhằm kích hoạt đánh giá khi nó giảm xuống dưới ngưỡng.
  • on_train_end in chỉ số tốt nhất và bước mà nó xuất hiện.
from transformers import TrainerCallback

class EpochLoggerCallback(TrainerCallback):
    def __init__(self, lr_eval_threshold=1e-5):
        self.lr_eval_threshold = lr_eval_threshold

    def on_epoch_begin(self, args, state, control, **kwargs):
        print(f"Starting epoch {int(state.epoch) + 1}/{state.num_train_epochs} "
              f"(lr={args.learning_rate})")

    def on_step_end(self, args, state, control, **kwargs):
        lr_scheduler = kwargs.get("lr_scheduler")
        if lr_scheduler is not None:
            current_lr = lr_scheduler.get_last_lr()[0]
            if current_lr < self.lr_eval_threshold:
                control.should_evaluate = True

    def on_train_end(self, args, state, control, **kwargs):
        print(f"Training complete! Best metric: {state.best_metric} at step {state.best_global_step}")

Đăng ký callback với Trainer trong đối số callbacks. Bạn cũng có thể truyền nhiều callback dưới dạng một danh sách.

trainer = Trainer(
    callbacks=[EpochLoggerCallback(lr_eval_threshold=1e-5)],
    ...,
)

Các callback tích hợp sẵn

Transformers bao gồm một số callback tích hợp sẵn được kích hoạt mặc định. Các callback tích hợp bổ sung sẽ ghi log lên các nền tảng như Trackio.

DefaultFlowCallback

DefaultFlowCallback quản lý lịch trình ghi log, đánh giá và lưu checkpoint mặc định dựa trên các giá trị logging_strategy, eval_strategy và save_strategy trong TrainingArguments. Tại bước hoặc epoch phù hợp, nó đặt các cờ control tương ứng (should_log, should_evaluate, should_save). Nó cũng đặt should_training_stop khi global_step đạt đến max_steps.

Việc ghi đè callback này là cách chính để tùy chỉnh khi nào quá trình ghi log, đánh giá hoặc lưu trữ diễn ra.

ProgressCallback và PrinterCallback

Trainer tự động chọn giữa hai callback này dựa trên trường disable_tqdm trong TrainingArguments.

  • ProgressCallback được sử dụng mặc định. Nó hiển thị thanh tiến trình tqdm trong quá trình huấn luyện và một thanh riêng trong quá trình đánh giá hoặc dự đoán, đồng thời in các chỉ số mới nhất ở mỗi sự kiện on_log. Trong huấn luyện phân tán, nó chỉ chạy trên tiến trình chính để tránh đầu ra trùng lặp.
  • PrinterCallback được sử dụng khi disable_tqdm=True. Nó in từ điển log ra stdout ở mỗi sự kiện on_log mà không có thanh tiến trình.

Bạn cũng có thể thay đổi chúng thủ công bằng remove_callback() và add_callback().

from transformers import PrinterCallback

trainer = Trainer(...)
trainer.remove_callback(ProgressCallback)
trainer.add_callback(PrinterCallback)

EarlyStoppingCallback

EarlyStoppingCallback dừng huấn luyện khi một chỉ số đánh giá không còn cải thiện. Sau mỗi lần đánh giá, nó kiểm tra xem chỉ số có cải thiện nhiều hơn early_stopping_threshold hay không. Nếu chỉ số không cải thiện trong early_stopping_patience lần đánh giá liên tiếp, quá trình huấn luyện sẽ dừng lại.

EarlyStoppingCallback yêu cầu hai TrainingArguments:

  • metric_for_best_model, chỉ số đánh giá cần theo dõi
  • eval_strategy, có đánh giá trên "steps" hay "epoch"
from transformers import EarlyStoppingCallback

trainer = Trainer(
    ...,
    callbacks=[EarlyStoppingCallback(early_stopping_patience=3, early_stopping_threshold=0.001)],
)

Các bước tiếp theo

  • Xem tất cả callback tích hợp có sẵn để ghi log vào các trình theo dõi thí nghiệm.
  • Hướng dẫn Subclassing Trainer methods bao gồm việc ghi đè các phương thức của Trainer khi bạn cần thay đổi những gì vòng lặp huấn luyện tính toán.
Update on GitHub