TRL documentation

KTO Eğiticisi

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

KTO Eğiticisi

All_models-KTO-blue

Genel Bakış

TRL, Kawin Ethayarajh, Winnie Xu, Niklas Muennighoff, Dan Jurafsky ve Douwe Kiela tarafından kaleme alınan KTO: Model Alignment as Prospect Theoretic Optimization makalesinde tanımlandığı üzere, dil modellerinin eğitimi için Kahneman-Tversky Optimization (KTO) Trainer'ı destekler.

Makalenin özeti aşağıdaki gibidir:

Kahneman & Tversky’nin beklenti teorisi, insanların rastgele değişkenleri önyargılı ancak iyi tanımlanmış bir biçimde algıladığını söyler; örneğin, insanlar meşhur bir şekilde kayıptan kaçınma eğilimindedir. İnsan geri bildirimine göre LLM’leri hizalamak için kullanılan hedeflerin, bu önyargıların çoğunu dolaylı olarak içerdiğini gösteriyoruz — bu hedeflerin (ör. DPO) çapraz entropi minimizasyonuna karşı başarısının bir kısmı, insan-farkında kayıp fonksiyonları (HALO) olmalarına atfedilebilir. Ancak bu yöntemlerin insanlara atfettiği fayda fonksiyonları, beklenti teorisi literatüründekilerden hâlâ farklıdır. İnsan faydası için bir Kahneman-Tversky modeli kullanarak, mevcut yöntemlerin aksine tercihlerin log-olabilirliğini değil, doğrudan üretilen çıktılarının faydasını maksimize eden bir HALO öneriyoruz. Bu yaklaşıma Kahneman-Tversky Optimizasyonu (KTO) adını veriyoruz ve 1B ile 30B ölçeklerinde tercih tabanlı yöntemlerin performansını eşitliyor veya aşabiliyor. Önemli olan, KTO’nun tercihlere ihtiyaç duymamasıdır — yalnızca belirli bir girdi için bir çıktının arzu edilir mi yoksa arzu edilmeyen mi olduğuna dair ikili bir sinyale ihtiyaç duyar. Bu da tercih verisinin kıt ve pahalı olduğu gerçek dünyada kullanımını çok daha kolay hale getirir.

Resmi kod ContextualAI/HALOs adresinde bulunabilir.

Bu eğitim sonrası yöntemi Kashif Rasul, Younes Belkada, Lewis Tunstall, Pablo Vicente tarafından katkıda bulunmuş ve daha sonra Albert Villanova del Moral tarafından yeniden yapılandırılmıştır.

Hızlı başlangıç

Bu örnek, KTO yöntemiyle bir modelin nasıl eğitileceğini göstermektedir. Temel model olarak Qwen 0.5B modelini kullanıyoruz. Tercih verisi olarak KTO Mix 14k'yi kullanıyoruz. Veri setindeki verilere buradan göz atabilirsiniz:

Aşağıda modeli eğitmek için betik yer almaktadır:

# train_kto.py
from datasets import load_dataset
from trl import KTOConfig, KTOTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
train_dataset = load_dataset("trl-lib/kto-mix-14k", split="train")

training_args = KTOConfig(output_dir="Qwen2-0.5B-KTO")
trainer = KTOTrainer(model=model, args=training_args, processing_class=tokenizer, train_dataset=train_dataset)
trainer.train()

Aşağıdaki komutu kullanarak betiği çalıştırın:

torchrun --nproc_per_node 8 train_kto.py

8 x H100 GPU arasında dağıtılmış eğitim yaklaşık 30 dakika sürer. Eğitim ilerlemesini ödül grafiğini kontrol ederek doğrulayabilirsiniz. Ödül marjındaki artan eğilim, modelin zamanla iyileştiğini ve daha iyi yanıtlar ürettiğini gösterir.

kto qwen2 reward margin

Eğitilen modelin performansını görmek için Transformers Chat CLI'yi kullanabilirsiniz.

$ transformers chat trl-lib/Qwen2-0.5B-KTO
<quentin_gallouedec>:
What is the best programming language?

<trl-lib/Qwen2-0.5B-KTO>:
The best programming language can vary depending on individual preferences, industry-specific requirements, technical skills, and familiarity with the specific use case or task. Here are some widely-used programming languages that have been noted as popular and widely used:

Here are some other factors to consider when choosing a programming language for a project:

 1 JavaScript: JavaScript is at the heart of the web and can be used for building web applications, APIs, and interactive front-end applications like frameworks like React and Angular. It's similar to C, C++, and F# in syntax structure and is accessible and easy to learn, making it a popular choice for beginners and professionals alike.
 2 Java: Known for its object-oriented programming (OOP) and support for Java 8 and .NET, Java is used for developing enterprise-level software applications, high-performance games, as well as mobile apps, game development, and desktop applications.
 3 C++: Known for its flexibility and scalability, C++ offers comprehensive object-oriented programming and is a popular choice for high-performance computing and other technical fields. It's a powerful platform for building real-world applications and games at scale.
 4 Python: Developed by Guido van Rossum in 1991, Python is a high-level, interpreted, and dynamically typed language known for its simplicity, readability, and versatility.

Beklenen veri seti türü ve biçimi

KTO, eşleşmemiş tercih veri seti gerektirir. Alternatif olarak, eşleşmiş bir tercih veri seti (sadece tercih veri seti olarak da bilinir) sağlayabilirsiniz. Bu durumda, eğitimci, seçilen ve reddedilen yanıtları ayırarak, seçilen tamamlamalar için label = True ve reddedilenler için label = False atayarak veri setini otomatik olarak eşleşmemiş bir formata dönüştürür.

KTOTrainer, hem standart hem de sohbet veri seti biçimleriyle uyumludur. Sohbet veri seti sağlandığında, eğitimci veri setine sohbet şablonunu otomatik olarak uygular.

# Standard format
unpaired_preference_example = {"prompt": "The sky is", "completion": " blue.", "label": True}

# Conversational format
unpaired_preference_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}],
                               "completion": [{"role": "assistant", "content": "It is blue."}],
                               "label": True}

Teoride, veri seti en az bir seçilen ve bir reddedilen tamamlama içermelidir. Ancak bazı kullanıcılar, sadece seçilen veya sadece reddedilen verilerle KTO'yu başarıyla çalıştırmıştır. Sadece reddedilen veriler kullanılıyorsa, muhafazakâr bir öğrenme oranı benimsemek önerilir.

KTO yönteminin derinlemesine incelenmesi

Kahneman-Tversky Optimizasyonu (KTO), bir girdi için bir çıktının arzu edilen mi yoksa arzu edilmeyen mi olduğunu gösteren ikili bir sinyal kullanarak dil modelini hizalamak için tasarlanmış bir eğitim yöntemidir; tercih edilen/tercih edilmeyen tamamlama çiftleri yerine bu sinyali kullanır. Kahneman ve Tversky'nin perspektif teorisinden ilham alarak, insan kayıp kaçınmasını yansıtmak üzere arzu edilen ve arzu edilmeyen örnekleri asimetrik olarak ağırlıklandırarak üretimlerin faydasını doğrudan maksimize eden bir insan-farkındalıklı kayıp (HALO) tanımlar.

Bu bölüm, KTO'nun pratikte nasıl çalıştığını, ana adımları olan ön işleme ve kayıp hesaplama adımlarını kapsayacak şekilde açıklar.

Önişleme ve belirteçleştirme

Eğitim sırasında, her örneğin bir istem (prompt), bir completion ve tamamlamanın arzu edilir (True) mi yoksa arzu edilmez (False) mi olduğunu gösteren bir label (boole) içermesi beklenir. Beklenen formatlar hakkında daha fazla ayrıntı için Dataset formats bölümüne bakın. KTOTrainer, her girdiyi modelin tokenizer'ı kullanarak işler.

Kaybın hesaplanması

KTO kaybı tarafından kullanılan KL ayrılığı terimi, her istem, batch'in başka bir yerinden çekilmiş eşleşmeyen bir tamamlama ile eşleştirilerek tahmin edilir. Bu nedenle, KL terimini tahmin eden kayıp türleri (apo_zero_unpaired hariç tümü), eşleşmeyen çiftlerin bir batch boyunca kararlı kalabilmesi için cihaz başına eğitim batch boyutunun 1'den büyük olmasını ve sıralı bir örneklemleme stratejisi gerektirir.

KTO'da kullanılan kayıp ( makalenin) 7. denklemi) şu şekilde tanımlanır: LKTO(θ)=E(x,y) ⁣[w(y)(1−v(x,y))] \mathcal{L}_{\mathrm{KTO}}(\theta) = \mathbb{E}_{(x,y)}\!\left[ w(y)\Big(1 - v(x, y)\Big) \right]

burada değeri v(x,y) v(x, y) şudur v(x,y)={σ ⁣(β(log⁡πθ(y∣x)πref(y∣x)−KL))if y is desirableσ ⁣(β(KL−log⁡πθ(y∣x)πref(y∣x)))if y is undesirable v(x, y) = \begin{cases} \sigma\!\left(\beta\big(\log\frac{\pi_{\theta}(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)} - \mathrm{KL}\big)\right) & \text{if } y \text{ is desirable} \\ \sigma\!\left(\beta\big(\mathrm{KL} - \log\frac{\pi_{\theta}(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)}\big)\right) & \text{if } y \text{ is undesirable} \end{cases}

Burada x x istemdir, y y tamamlamadır, πθ \pi_{\theta} eğitilen politika modelidir, πref \pi_{\mathrm{ref}} referans modelidir, σ \sigma sigmoid fonksiyonudur, β>0 \beta > 0 referans modelden sapmayı kontrol eder ve KL \mathrm{KL} tahmini KL ayrılığı terimidir. Ağırlık w(y) w(y) arzu edilen tamamlamalar için desirable_weight ve undesirable_weight arzu edilmeyenler için kullanılır; arzu edilen ve edilmeyen örneklerin sayısı arasındaki dengesizliği dengelemek için kullanılır.

Kayıp Türleri

loss_type=Açıklama
"kto" (varsayılan)KTO makalesindeki KTO kaybı. Kahneman-Tversky perspektif teorisine dayalı, insan farkındalıklı bir kayıp (HALO); bu kayıp, tahmin edilen bir KL ayrılığı terimini referans noktası olarak kullanarak, arzu edilen tamamlamaların faydasını maksimize eder ve arzu edilmeyenlerin faydasını minimize eder.
"apo_zero_unpaired"APO makalesindeki APO-zero kaybının eşleşmemiş (unpaired) varyantı. KL sapması terimini tahmin etmeden, arzu edilen tamamlamaların olasılığını artırır ve arzu edilmeyenlerin olasılığını azaltır. Arzu edilen tamamlamaların modelin varsayılan çıktısından daha iyi olduğuna inandığınızda bu kaybı kullanın.

Kaydedilen metrikler

Eğitim ve değerlendirme sırasında aşağıdaki metrikleri kaydederiz:

  • global_step: Şu ana kadar atılan toplam optimizör adımı sayısı.
  • epoch: Veri seti yinelemesine dayalı olarak geçerli epoch numarası.
  • num_tokens: Şu ana kadar işlenen toplam token sayısı.
  • loss: Güncel kayıt aralığındaki ortalama KTO kaybı.
  • entropy: Modelin maskelenmemiş jetonlar üzerindeki tahmini jeton dağılımının ortalama entropisi.
  • aux_loss: Bir Mixture-of-Experts modelinin, router_aux_loss_coef ile ölçeklenip kayba eklenmeden önceki yük dengeleme yardımcı kaybı. Sadece model bir MoE modeli olduğunda ve router_aux_loss_coef sıfır olmadığında kaydedilir.
  • kl: KTO kaybında referans noktası olarak kullanılan, politika ve referans model arasındaki ortalama tahmini KL ayrılığı.
  • learning_rate: Bir zamanlayıcı kullanılıyorsa dinamik olarak değişebilen mevcut öğrenme oranı.
  • grad_norm: Gradyan kesme işleminden önce hesaplanan gradyanların L2 normu.
  • logits/chosen: Modelin seçilen (arzu edilen) tamamlamadaki jetonlara atadığı ortalama logit değerleri.
  • logits/rejected: Modelin reddedilen (istenmeyen) tamamlamadaki jetonlara atadığı ortalama logit değerleri.
  • logps/chosen: Modelin seçilen (arzu edilen) tamamlamadaki jetonlara atadığı ortalama log-olasılık.
  • logps/rejected: Modelin reddedilen (istenmeyen) tamamlamadaki jetonlara atadığı ortalama log-olasılık.
  • rewards/chosen: seçilen (arzu edilen) tamamlama için hesaplanan ortalama örtük ödül, şu şekilde hesaplanır: βlog⁡πθ(y∣x)πref(y∣x) \beta \log \frac{\pi_{\theta}(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)} .
  • rewards/rejected: reddedilen (istenmeyen) tamamlama için hesaplanan ortalama örtük ödül, şu şekilde hesaplanır: βlog⁡πθ(y∣x)πref(y∣x) \beta \log \frac{\pi_{\theta}(y\mid x)}{\pi_{\mathrm{ref}}(y\mid x)} .
  • rewards/margins: Seçilen ve reddedilen tamamlamalar arasındaki ortalama örtük ödül marjı.

Özelleştirme

Uyumluluk ve kısıtlamalar

Mevcut KTOTrainer uygulamasında bazı argüman kombinasyonları bilinçli olarak kısıtlanmıştır:

  • lm_head hedefli PEFT adaptörleri desteklenmez (bunun yerine modules_to_save=["lm_head"] kullanın).
  • PEFT modelleriyle eğitim sırasında bağımsız bir ref_model tutmayan modellerde sync_ref_model=True desteklenmez.
  • sync_ref_model=True, precompute_ref_log_probs=True ile birleştirilemez.
  • precompute_ref_log_probs=True, IterableDataset (eğitim veya değerlendirme) veya görü veri setleriyle desteklenmez.
  • KL sapma terimini tahmin eden kayıp türleri ("apo_zero_unpaired" hariç tümü) train_sampling_strategy="sequential" ve 1'den büyük bir cihaz başına eğitim partisi boyutu gerektirir.

Model başlatma

from_pretrained() yönteminin kwargs'larını doğrudan KTOConfig'e iletebilirsiniz. Örneğin, bir modeli farklı bir hassasiyette yüklemek istiyorsanız,

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct", dtype=torch.bfloat16)

Bunu, KTOConfig sınıfına model_init_kwargs={"dtype": torch.bfloat16} argümanını geçirerek yapabilirsiniz.

from trl import KTOConfig

training_args = KTOConfig(
    model_init_kwargs={"dtype": torch.bfloat16},
)

from_pretrained() işlevinin tüm anahtar kelime argümanlarının desteklendiğini unutmayın.

PEFT ile adaptörler eğitin

🤗 PEFT kütüphanesiyle sıkı entegrasyon destekliyoruz; bu sayede kullanıcılar, tüm modeli eğitmek yerine adaptörleri kolayca eğitebilir ve Hub üzerinde paylaşabilir.

from datasets import load_dataset
from trl import KTOTrainer
from peft import LoraConfig

dataset = load_dataset("trl-lib/kto-mix-14k", split="train")

trainer = KTOTrainer(
    "Qwen/Qwen2-0.5B-Instruct",
    train_dataset=dataset,
    peft_config=LoraConfig(),
)

trainer.train()

PeftModel eğitiminizi devam ettirebilirsiniz. Bunun için, önce KTOTrainer dışında bir PeftModel yükleyin ve peft_config argümanını geçirmeden doğrudan trainer'a iletin.

Adaptörler eğitilirken, yalnızca yeni parametrelerin öğrenildiği için tam ince ayara kıyasla genellikle daha yüksek bir öğrenme oranı kullanılır.

KTO ile Araç Çağrısı

KTOTrainer, tool calling yeteneklerine sahip modellerin ince ayarını tamamen destekler. Bu durumda, veri setindeki her örnek şunları içermelidir:

  • Sohbet mesajları (istem ve tamamlama), herhangi bir araç çağrısı (tool_calls) ve araç yanıtları (tool rol mesajları) dahil
  • tools sütunundaki kullanılabilir araçların listesi, genellikle JSON şemaları olarak sağlanır

Beklenen veri seti yapısına ilişkin ayrıntılar için Veri Seti Biçimi — Araç Çağrısı bölümüne bakın.

Görsel Dil Modellerinin Eğitimi

KTOTrainer, Görüntü-Dil Modelleri (VLM) eğitimini tam olarak destekler. Bir VLM eğitmek için, veri setinde her örnek için tek bir görüntü içeren bir image sütunu veya her örnek için bir görüntü listesi içeren bir images sütunu bulunmalıdır. Beklenen veri seti yapısı hakkında daha fazla bilgi için Veri Seti Biçimi — Görüntü Veri Seti bölümüne bakın.

from trl import KTOConfig, KTOTrainer
from datasets import load_dataset

trainer = KTOTrainer(
    model="Qwen/Qwen2.5-VL-3B-Instruct",
    args=KTOConfig(max_length=None),
    train_dataset=load_dataset("trl-internal-testing/zen-image", "conversational_unpaired_preference", split="train"),
)
trainer.train()

VLM'ler için kırpma işlemi, eğitim sırasında hatalara yol açabilecek görüntü belirteçlerini kaldırabilir. Bunu önlemek için KTOConfig içinde max_length=None değerini ayarlayın. Bu, modelin görüntü belirteçlerini kırpma işlemi olmadan tam dizi uzunluğunu işlemesine olanak tanır.

KTOConfig(max_length=None, ...)

Tüm veri setinde kırpmanın görüntü belirteçlerini kaldırmayacağını doğruladığınızda yalnızca max_length kullanın.

Örnek betik

KTO yöntemiyle bir model eğitmek için örnek bir betik sunuyoruz. Betik, trl/scripts/kto.py adresinde bulunabilir.

Qwen2 0.5B modeli ile UltraFeedback veri seti üzerinde KTO betiğini test etmek için aşağıdaki komutu çalıştırın:

torchrun --nproc_per_node 8 trl/scripts/kto.py \
    --model_name_or_path Qwen/Qwen2-0.5B-Instruct \
    --dataset_name trl-lib/kto-mix-14k \
    --num_train_epochs 1 \
    --output_dir Qwen2-0.5B-KTO

Kullanım ipuçları

Uzmanlar Karışımı (Mixture of Experts) Modelleri için: Yardımcı kaybı (auxiliary loss) etkinleştirme

MOE'ler, yük uzmanlar arasında yaklaşık olarak eşit dağıtıldığında en verimli şekilde çalışır.
Tercih ayarlaması sırasında MOE'lerin benzer şekilde eğitilmesini sağlamak için, yük dengeleyiciden gelen yardımcı kaybın nihai kayba eklenmesi faydalıdır.

Bu seçenek, model yapılandırmasında output_router_logits=True olarak ayarlanarak etkinleştirilir (ör. MixtralConfig).
Yardımcı kaybın toplam kayba ne kadar katkıda bulunacağını ölçeklemek için model yapılandırmasında router_aux_loss_coef=... hiperparametresini kullanın (varsayılan: 0.001).

Toplu işlem boyutu önerileri

En az 4 olan bir adım başına parti boyutu ve 16 ile 128 arasında bir etkili parti boyutu kullanın. Etkili parti boyutunuz büyük olsa bile, adım başına parti boyutunuz yetersizse KTO'daki KL tahmini de yetersiz olacaktır.

Öğrenme hızı önerileri

beta için her seçim, öğrenme performansının düşmeye başlamadan önce tolere edebileceği bir maksimum öğrenme hızına sahiptir. beta = 0.1 varsayılan ayarı için, çoğu modelde öğrenme hızının genellikle 1e-6 değerini aşmaması gerekir. beta azaldıkça, öğrenme hızının da buna göre düşürülmesi gerekir. Genel olarak, öğrenme hızının 5e-7 ile 5e-6 arasında tutulmasını güçlü bir şekilde öneririz. Küçük veri setlerinde bile, öğrenme hızının bu aralığın dışında kullanılmasını önermiyoruz. Bunun yerine, daha iyi sonuçlar elde etmek için daha fazla epoch (tekrar) kullanmayı tercih edin.

Dengelenmemiş veri

KTOConfig desirable_weight ve undesirable_weight parametrelerindeki KTOConfig değerleri, arzu edilen/olumlu ve arzu edilmeyen/olumsuz örneklerin kayıplarına verilen ağırlıkları ifade eder. Varsayılan olarak her ikisi de 1'dir. Ancak, birinin diğerinden daha fazla olması durumunda, daha az yaygın olan türün ağırlığını artırarak (desirable_weight ×\times pozitif sayısı) ile (undesirable_weight ×\times negatif sayısı) oranının 1:1 ile 4:3 aralığında olmasını sağlamalısınız.

KTOTrainer

sınıf trl.KTOTrainer

< >

( model: str | PreTrainedModel | PeftModelref_model: transformers.modeling_utils.PreTrainedModel | None = Noneargs: trl.trainer.kto_config.KTOConfig | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | datasets.dataset_dict.DatasetDict | datasets.dataset_dict.IterableDatasetDict | dict[str, datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalPrediction], dict] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[typing.Optional[torch.optim.Optimizer], typing.Optional[torch.optim.lr_scheduler.LambdaLR]] = (None, None)quantization_config: BitsAndBytesConfig | None = Nonepeft_config: PeftConfig | None = None )

Parametreler

  • model (str veya PreTrainedModel veya PeftModel) — Eğitilecek model. Şunlardan biri olabilir:
    • Bir dize, huggingface.co üzerindeki bir model deposunda barındırılan ön eğitilmiş bir modelin model kimliği veya save_pretrained kullanılarak kaydedilmiş model ağırlıklarını içeren bir dizin yolu, örneğin './my_model_directory/'. Model, args.model_init_kwargs içindeki anahtar kelime argümanlarıyla, <ModelArchitecture>.from_pretrained (burada <ModelArchitecture> model yapılandırmasından türetilir) kullanılarak yüklenir. dtype, args.model_init_kwargs içinde belirtilmediyse, varsayılan olarak float32 olur. Bu, from_pretrained'den farklıdır; orada (Transformers v5'ten itibaren) dtype model yapılandırmasından çıkarılır.
    • Bir PreTrainedModel nesnesi. Yalnızca nedensel dil modelleri desteklenir.
    • Bir PeftModel nesnesi. Yalnızca nedensel dil modelleri desteklenir.
  • ref_model (PreTrainedModel, isteğe bağlı) — Referans log olasılıklarını hesaplamak için kullanılan referans model. Sağlanırsa, bu model doğrudan referans politika olarak kullanılır. PeftModel olamaz. None ise, eğitimci model ile eşleşen başlangıç politikasını, yani KTO eğitimine başlamadan önceki model durumunu otomatik olarak kullanır.
    • Sağlanırsa, bu model doğrudan referans politika olarak kullanılır. PeftModel olamaz.
    • None ise, trainer, KTO eğitimine başlamadan önceki model durumu olan, model'e karşılık gelen başlangıç politikasını otomatik olarak kullanır.
  • args (KTOConfig, isteğe bağlı) — Bu eğitimci için yapılandırma. None ise varsayılan yapılandırma kullanılır.
  • data_collator (DataCollator, isteğe bağlı) — İşlenmiş train_dataset veya eval_dataset öğelerinin listesinden bir batch oluşturmak için kullanılacak işlev. Model bir dil modeli ise varsayılan olarak DataCollatorForUnpairedPreference, model bir görü-dil modeli ise DataCollatorForVisionUnpairedPreference kullanılır. Özel collator'lar, padding uygulamadan önce dizileri kısaltmalıdır; trainer, collation sonrası kısaltma uygulamaz.
  • train_dataset (Dataset veya IterableDataset) — Eğitim için kullanılacak veri seti. Bu trainer eşleşmemiş tercih türünü destekler. Örneklerin biçimi şu olabilir:
    • Standart: Her örnek düz metin içerir.
    • Sohbet: Her örnek yapılandırılmış mesajlar içerir (ör. rol ve içerik).

    train_dataset bir IterableDataset (ör. bir akış veri seti) olduğunda, uzunluğu çıkarılamadığı ve eğitim döngüsünü sınırlamak ile öğrenme oranı zamanlayıcısını yapılandırmak için toplam eğitim adım sayısının gerekli olması nedeniyle, max_steps eğitim argümanlarında ayarlanmalıdır.

  • eval_dataset (Dataset, IterableDataset, DatasetDict, IterableDatasetDict veya dict[str, Dataset | IterableDataset]) — Değerlendirme için kullanılacak veri seti. train_dataset ile aynı gereksinimleri karşılaması gerekir.
  • processing_class (PreTrainedTokenizerBase veya ProcessorMixin, isteğe bağlı) — Verileri işlemek için kullanılan işleme sınıfı. Dolgu tarafı “left” olarak ayarlanmalıdır. None ise, işleme sınıfı modelin adından from_pretrained ile yüklenir. Bir dolgu belirteci, tokenizer.pad_token, ayarlanmış olmalıdır. İşleme sınıfı bir dolgu belirteci ayarlamadıysa, tokenizer.eos_token varsayılan olarak kullanılır.
  • compute_metrics (Callable[[EvalPrediction], dict], isteğe bağlı) — Değerlendirme sırasında metrikleri hesaplamak için kullanılacak işlev. Bir EvalPrediction almalı ve metrik değerlerini içeren bir sözlük döndürmelidir. SFTConfig ile batch_eval_metrics değeri True olarak ayarlandığında, compute_metrics işleviniz bir boole compute_result argümanı almalıdır. Bu, son değerlendirme grubundan sonra tetiklenir ve işlevin grup düzeyindeki istatistikleri biriktirmek yerine küresel özet istatistikleri hesaplayıp döndürmesi gerektiğini sinyal verir. Aldığı logitler, ek bir ileri geçişle yeniden hesaplanır. Bu özellik kullanımdan kaldırılmıştır ve v2.0.0 sürümünde kaldırılacaktır.
  • callbacks (liste TrainerCallback, isteğe bağlı) — Eğitim döngüsünü özelleştirmek için kullanılacak geri çağrılar listesi. Bunlar, burada.

    Varsayılan olarak kullanılan geri çağrılardan birini kaldırmak istiyorsanız, remove_callback metodunu kullanın.

  • optimizers (tuple[torch.optim.Optimizer | None, torch.optim.lr_scheduler.LambdaLR | None], isteğe bağlı, varsayılan (None, None)) — Kullanılacak optimizörü ve zamanlayıcıyı içeren bir demet. Modelinizde AdamW örneği ve args tarafından kontrol edilen get_linear_schedule_with_warmup tarafından verilen bir zamanlayıcı olarak varsayılan değerlere sahip olacaktır.
  • quantization_config (BitsAndBytesConfig, isteğe bağlı) — Model bir model tanımlayıcısından yüklenirken kullanılan nicelleştirme yapılandırması. QLoRA eğitimi için peft_config ile birleştirin. Model zaten örneklenmişse yok sayılır.
  • peft_config (PeftConfig, isteğe bağlı) — Modeli sarmak için kullanılan PEFT yapılandırması. None ise model sarılmaz.

Kahneman-Tversky Optimizasyonu (KTO) yöntemi için Trainer. Bu algoritma ilk olarak KTO: Model Alignment as Prospect Theoretic Optimization makalesinde önerilmiştir. Bu sınıf, Trainer sınıfının bir sarmalayıcısıdır ve tüm özelliklerini ve yöntemlerini devralır.

Örnek:

>>> from trl import KTOTrainer
>>> from datasets import load_dataset

>>> dataset = load_dataset("trl-lib/kto-mix-14k", split="train")

>>> trainer = KTOTrainer(
...     model="Qwen/Qwen2.5-0.5B-Instruct",
...     train_dataset=dataset,
... )
>>> trainer.train()

eğit

< >

( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → ~trainer_utils.TrainOutput

Parametreler

  • resume_from_checkpoint (str veya bool, isteğe bağlı) — str ise, önceki bir Trainer örneği tarafından kaydedilen bir kontrol noktasının yerel yolu. bool ise ve True değerine eşitse, önceki bir Trainer örneği tarafından args.output_dir içinde kaydedilen son kontrol noktasını yükler. Mevcutsa, eğitim burada yüklenen model/optimizör/zamanlayıcı durumlarından devam eder.
  • trial (optuna.Trial veya dict[str, Any], isteğe bağlı) — Hiperparametre araması için deneme çalışması veya hiperparametre sözlüğü.
  • ignore_keys_for_eval (list[str], isteğe bağlı) — Eğitim sırasında değerlendirme için tahminleri toplarken göz ardı edilmesi gereken, model çıktısındaki (bir sözlükse) anahtarların listesi.

Dönüş değeri

~trainer_utils.TrainOutput

Küresel adım sayısını, eğitim kaybını ve metrikleri içeren nesne.

Ana eğitim giriş noktası.

save_model

< >

( output_dir: str | None = None_internal_call: bool = False )

Modeli kaydeder, böylece from_pretrained() kullanarak yeniden yükleyebilirsiniz.

Yalnızca ana süreçten kaydedecektir.

push_to_hub

< >

( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = Noneprivate: bool | None = None**kwargs )

Parametreler

  • commit_message (str, isteğe bağlı, varsayılan "End of training") — İterlerken gönderilecek mesaj.
  • blocking (bool, isteğe bağlı, varsayılan True) — Fonksiyonun yalnızca git push işlemi tamamlandığında mı değer döndürmesi gerektiğini belirtir.
  • token (str, isteğe bağlı, varsayılan None) — Trainer'ın orijinal argümanlarını üzerine yazma iznine sahip jeton.
  • revision (str, isteğe bağlı) — Commit'in alınacağı git revizyonu. Varsayılan olarak “main” dalının başıdır.
  • private (bool, isteğe bağlı) — Depo oluşturulurken özel yapılıp yapılmayacağı. Varsayılan olarak args.hub_private_repo değerini alır. Depo zaten mevcutsa hiçbir etkisi yoktur.
  • kwargs (dict[str, Any], isteğe bağlı) — ~Trainer.create_model_card ile birlikte iletilen ek anahtar kelime argümanları.

self.model ve self.processing_class öğelerini self.args.hub_model_id deposundaki 🤗 model hub'ına yükleyin.

KTOConfig

sınıf trl.KTOConfig

< >

( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 1e-06lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool | None = Nonefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Noneactivation_checkpointing: bool | None = Noneactivation_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonegradient_checkpointing: bool = Truegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 10logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list[str] = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: accelerate.parallelism_config.ParallelismConfig | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool = Truelabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'sequential'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1model_init_kwargs: dict[str, typing.Any] | str | None = Nonetrust_remote_code: bool = Falserouter_aux_loss_coef: float | None = Nonedisable_dropout: bool = Truedataset_num_proc: int | None = Nonemax_length: int | None = 1024pad_to_multiple_of: int | str | None = 'auto'precompute_ref_log_probs: bool = Falseprecompute_ref_batch_size: int | None = Noneloss_type: str = 'kto'beta: float = 0.1desirable_weight: float = 1.0undesirable_weight: float = 1.0activation_offloading: bool = Falsesync_ref_model: bool = Falseref_model_mixup_alpha: float = 0.6ref_model_sync_steps: int = 512 )

Modeli kontrol eden parametreler

  • model_init_kwargs (dict[str, Any], isteğe bağlı) — KTOTrainer'in model argümanı bir dize olarak verildiğinde from_pretrained için kullanılan anahtar kelime argümanları. revision değeri, işleme sınıfı yüklenirken de kullanılır.
  • trust_remote_code (bool, isteğe bağlı, varsayılan False) — Hub'dan özel Python kodu içeren modellerin ve tokenizer'ların yüklenmesine izin verilip verilmeyeceğini belirtir. from_pretrained ve from_pretrained işlevlerine aktarılır.
  • router_aux_loss_coef (float, isteğe bağlı) — Mixture-of-Experts (MoE) modelleri için yük dengeleme yardımcı kaybının katsayısı, eğitim kaybına bu ağırlıkla eklenir. Ayarlanmadığında, model yapılandırmasında beyan edilen değer kullanılır. Devre dışı bırakmak için 0.0 olarak ayarlayın. MoE olmayan bir modelle kullanıldığında hata verir.
  • disable_dropout (bool, isteğe bağlı, varsayılan True) — Modelde ve referans modelde dropout'un devre dışı bırakılıp bırakılmayacağı.

Veri ön işleme sürecini kontrol eden parametreler

  • dataset_num_proc (int, isteğe bağlı) — Veri setini işlemek için kullanılacak süreç sayısı.
  • max_length (int or None, isteğe bağlı, varsayılan 1024) — Tokenize edilmiş dizinin maksimum uzunluğu. max_length değerinden uzun olan diziler sağdan kırpılır. None ise kırpma uygulanmaz.
  • pad_to_multiple_of (int veya str, isteğe bağlı, varsayılan "auto") — Belirlenirse, diziler bu değerin katına kadar doldurulur. "auto", Neuron (AWS Trainium) üzerinde 128'in katına kadar doldurur; bu platform her giriş şekli için bir kez derleme yapar ve başka yerlerde doldurma uygulanmaz.
  • precompute_ref_log_probs (bool, isteğe bağlı, varsayılan False) — Eğitimden önce, eğitim veri setinin tamamı için referans model log olasılıklarının önceden hesaplanıp hesaplanmayacağı. Bu, referans modelin bellekte tutulmasına gerek kalmadığı için eğitim sırasında bellek tasarrufu sağlar.
  • precompute_ref_batch_size (int, isteğe bağlı) — Referans model log olasılıklarını önceden hesaplanırken kullanılacak batch boyutu. Bu değer, ön işleme hızını artırmak için eğitim batch boyutundan daha yüksek ayarlanabilir. None ise, eğitim için per_device_train_batch_size, değerlendirme için per_device_eval_batch_size varsayılan olarak kullanılır.

Eğitimi kontrol eden parametreler

  • loss_type (str, isteğe bağlı, varsayılan olarak "kto") — Kullanılacak kayıp türü. Olası değerler:
    • "kto": KTO makalesindeki KTO kaybı.
    • "apo_zero_unpaired": APO makalesindeki APO-zero kaybının eşleşmemiş (unpaired) varyantı.
  • beta (float, isteğe bağlı, varsayılan 0.1) — Referans modelden sapmayı kontrol eden parametre. β değeri ne kadar yüksekse, referans modelden sapma o kadar azdır.
  • desirable_weight (float, isteğe bağlı, varsayılan 1.0) — İstenen kayıplar, istenen ve istenmeyen çiftlerin sayısındaki eşitsizliği dengelemek için bu çarpanla ağırlıklandırılır.
  • undesirable_weight (float, isteğe bağlı, varsayılan 1.0) — İstenmeyen kayıplar, istenilen ve istenmeyen çiftlerin sayısındaki eşitsizliği dengelemek için bu çarpanla ağırlıklandırılır.
  • activation_offloading (bool, isteğe bağlı, varsayılan False) — Aktivasyonların CPU'ya taşınıp taşınmayacağı.
  • sync_ref_model (bool, isteğe bağlı, varsayılan False) — Referans modelin, ref_model_mixup_alpha parametresini kullanarak her ref_model_sync_steps adımda aktif modelle senkronize edilip edilmeyeceğini belirtir. Bu senkronizasyon, TR-DPO makalesinden kaynaklanmaktadır. sync_ref_model=True henüz PEFT veya precompute_ref_log_probs=True ile uyumlu değildir.
  • ref_model_mixup_alpha (float, isteğe bağlı, varsayılan 0.6) — TR-DPO makalesinden gelen α parametresi, güncellemeler sırasında mevcut politika ile önceki referans politika arasındaki karışımı kontrol eder. Referans politika şu denkleme göre güncellenir: π_ref = α * π_θ + (1 - α) * π_ref_prev. Bu parametreyi kullanmak için sync_ref_model=True değerini ayarlamanız gerekir.
  • ref_model_sync_steps (int, isteğe bağlı, varsayılan 512) — TR-DPO makalesindeki τ parametresi, mevcut politikanın referans politika ile ne sıklıkta senkronize edileceğini belirler. Bu parametreyi kullanmak için sync_ref_model=True değerini ayarlamanız gerekir.

KTOTrainer için yapılandırma sınıfı.

Bu sınıf yalnızca KTO eğitimine özgü parametreleri içerir. Eğitim argümanlarının tam listesi için lütfen TrainingArguments belgelerine başvurun. Bu sınıftaki varsayılan değerlerin TrainingArguments içindeki değerlerden farklı olabileceğini unutmayın.

HfArgumentParser kullanarak bu sınıfı, komut satırında belirtilebilen argparse argümanlarına dönüştürebiliriz.

Bu parametrenin TrainingArguments'ten farklı varsayılan değerleri vardır:

  • logging_steps: Varsayılan olarak 500 yerine 10 değerine ayarlanır.
  • gradient_checkpointing: Varsayılan olarak False yerine True değerini alır.
  • bf16: fp16 ayarlanmadıysa varsayılan olarak True, False yerine.
  • learning_rate: Varsayılan olarak 5e-5 yerine 1e-6 olarak ayarlanır.
  • train_sampling_strategy: "random" yerine varsayılan olarak "sequential" değerini alır. KL sapma terimini tahmin eden kayıp türleri ("apo_zero_unpaired" hariç tümü), her örneğin KL tamamlamasının sabit sıralı bir toplamdaki komşularına karşı önceden hesaplandığı için ardışık örneklemeyi gerektirir; başka bir strateji bu eşleştirmeyi bozar.
Update on GitHub