Transformers documentation

Geri Çağrılar

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Geri Çağrılar

TrainerCallback, eğitim olaylarına (epoch başlangıcı, değerlendirme, eğitim sonu) bağlanarak eğitim durumunu veya kontrol akışını değiştirmek için kullanılır. Callback'ler, Trackio gibi deney izleyicilerine metrik kaydetmek, kaydetme ve değerlendirme zamanlamasını özelleştirmek veya diğer özel davranışları eklemek için kullanılır. Özellikleri birleştirmek için birden fazla callback'i üst üste yığabilirsiniz.

Callbacks, ileri geçiş gibi eğitim döngüsünün kendisini değiştiremez. Trainer'ın hesapladıklarını değiştirmek için, bunun yerine yöntemlerini alt sınıflandırın.

Aşağıdaki şema, bir geri çağrının (callback) bağlanabileceği tüm olayları gösterir.

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

Geri çağrı oluşturma

TrainerCallback sınıfından türetin ve yukarıdaki şemadaki bir veya daha fazla olay yöntemini geçersiz kılın. Aşağıdaki örnek üç kancayı göstermektedir:

  • on_epoch_begin, TrainerState içindeki mevcut epoch değerini (canlı bir değer) ve TrainingArguments içindeki öğrenme oranını (statik bir değer) yazdırır.
  • on_step_end, **kwargs üzerinden iletilen lr_scheduler'dan güncel öğrenme oranını okur ve eşiğin altına düştüğünde bir değerlendirme tetiklemek için TrainerControl üzerinde should_evaluate değerini ayarlar (kontrol nesnelerinin tam listesi için bkz. TrainerControl).
  • on_train_end, en iyi metriği ve bu metriğin elde edildiği adımı yazdırır.
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}")

Çağrıyı callbacks argümanında Trainer ile kaydedin. Birden fazla çağrıyı bir liste olarak da iletebilirsiniz.

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

Yerleşik geri bildirimler

Transformers, varsayılan olarak etkin olan birkaç yerleşik geri çağrı (callback) içerir. Ek entegre geri çağrılar, Trackio gibi platformlara kayıt tutar.

DefaultFlowCallback

DefaultFlowCallback, TrainingArguments içindeki logging_strategy, eval_strategy ve save_strategy değerlerine göre varsayılan günlük tutma, değerlendirme ve checkpoint zamanlamasını yönetir. Doğru adım veya epoch'ta ilgili control bayraklarını (should_log, should_evaluate, should_save) ayarlar. Ayrıca global_step max_steps değerine ulaştığında should_training_stop bayrağını da ayarlar.

Bu geri çağırmanın (callback) üzerine yazılması, loglama, değerlendirme veya kaydetme işlemlerinin ne zaman gerçekleşeceğini özelleştirmenin ana yoludur.

ProgressCallback ve PrinterCallback

Trainer, TrainingArguments içindeki disable_tqdm alanına göre bu iki geri bildirim arasından otomatik olarak seçim yapar.

  • ProgressCallback varsayılan olarak kullanılır. Eğitim sırasında bir tqdm ilerleme çubuğu, değerlendirme veya tahmin sırasında ise ayrı bir çubuk görüntüler ve her on_log olayında en güncel metrikleri yazdırır. Dağıtık eğitim sırasında, mükerrer çıktıları önlemek için yalnızca ana işlemde çalışır.
  • PrinterCallback, disable_tqdm=True kullanıldığında devreye girer. İlerleme çubuğu olmadan, her on_log olayında günlük sözlüğünü stdout'a yazdırır.

Bunları remove_callback() ve add_callback() ile manuel olarak da değiştirebilirsiniz.

from transformers import PrinterCallback

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

EarlyStoppingCallback

EarlyStoppingCallback, bir değerlendirme metriğinin iyileşmeyi durdurması durumunda eğitimi sonlandırır. Her değerlendirme sonrasında, metrik early_stopping_threshold değerinden fazla iyileşip iyileşmediğini kontrol eder. Metrik, early_stopping_patience ardışık değerlendirmede iyileşmezse eğitim durdurulur.

EarlyStoppingCallback iki TrainingArguments gerektirir:

  • izlenecek değerlendirme metriği olan metric_for_best_model
  • eval_strategy, "steps" veya "epoch" üzerinde değerlendirme yapılıp yapılmayacağı
from transformers import EarlyStoppingCallback

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

Sonraki adımlar

Update on GitHub