Transformers documentation
Geri Çağrılar
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_beginGeri ç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 üzerindeshould_evaluatedeğ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_logolayı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=Truekullanıldığında devreye girer. İlerleme çubuğu olmadan, heron_logolayı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
- Deneysel izleyicilere kayıt için kullanılabilen tüm entegre geri bildirimleri görüntüleyin.
- Trainer yöntemlerini alt sınıflandırma kılavuzu, eğitim döngüsünün hesapladıklarını değiştirmeniz gerektiğinde Trainer yöntemlerini geçersiz kılma işlemini kapsar.