TRL documentation
KTO Eğiticisi
KTO Eğiticisi
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.

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:
burada değeri şudur
Burada istemdir, tamamlamadır, eğitilen politika modelidir, referans modelidir, sigmoid fonksiyonudur, referans modelden sapmayı kontrol eder ve tahmini KL ayrılığı terimidir. Ağırlık 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_coefile ölçeklenip kayba eklenmeden önceki yük dengeleme yardımcı kaybı. Sadece model bir MoE modeli olduğunda verouter_aux_loss_coefsı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: .rewards/rejected: reddedilen (istenmeyen) tamamlama için hesaplanan ortalama örtük ödül, şu şekilde hesaplanır: .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_headhedefli PEFT adaptörleri desteklenmez (bunun yerinemodules_to_save=["lm_head"]kullanın).- PEFT modelleriyle eğitim sırasında bağımsız bir
ref_modeltutmayan modellerdesync_ref_model=Truedesteklenmez. sync_ref_model=True,precompute_ref_log_probs=Trueile 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ı (toolrol mesajları) dahil toolssü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=Nonedeğ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_lengthkullanı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-KTOKullanı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 pozitif sayısı) ile (undesirable_weight 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
< source >( 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 (
strveya PreTrainedModel veyaPeftModel) — 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_kwargsiç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_kwargsiçinde belirtilmediyse, varsayılan olarakfloat32olur. 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
PeftModelnesnesi. Yalnızca nedensel dil modelleri desteklenir.
- 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
- 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.
PeftModelolamaz. Noneise, trainer, KTO eğitimine başlamadan önceki model durumu olan,model'e karşılık gelen başlangıç politikasını otomatik olarak kullanır.
- Sağlanırsa, bu model doğrudan referans politika olarak kullanılır.
- args (KTOConfig, isteğe bağlı) —
Bu eğitimci için yapılandırma.
Noneise varsayılan yapılandırma kullanılır. - data_collator (
DataCollator, isteğe bağlı) — İşlenmiştrain_datasetveyaeval_datasetöğelerinin listesinden bir batch oluşturmak için kullanılacak işlev. Model bir dil modeli ise varsayılan olarakDataCollatorForUnpairedPreference, model bir görü-dil modeli iseDataCollatorForVisionUnpairedPreferencekullanı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_datasetbir 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_stepseğ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_datasetile 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.
Noneise, 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_tokenvarsayı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 ilebatch_eval_metricsdeğeriTrueolarak ayarlandığında,compute_metricsişleviniz bir boolecompute_resultargü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. ModelinizdeAdamWörneği veargstarafı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_configile 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ı.Noneise 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
< source >( 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 (
strveyabool, isteğe bağlı) —strise, önceki birTrainerörneği tarafından kaydedilen bir kontrol noktasının yerel yolu.boolise veTruedeğerine eşitse, önceki birTrainerö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.Trialveyadict[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ı.
Modeli kaydeder, böylece from_pretrained() kullanarak yeniden yükleyebilirsiniz.
Yalnızca ana süreçten kaydedecektir.
push_to_hub
< source >( 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ılanTrue) — Fonksiyonun yalnızcagit pushişlemi tamamlandığında mı değer döndürmesi gerektiğini belirtir. - token (
str, isteğe bağlı, varsayılanNone) — 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 olarakargs.hub_private_repodeğerini alır. Depo zaten mevcutsa hiçbir etkisi yoktur. - kwargs (
dict[str, Any], isteğe bağlı) —~Trainer.create_model_cardile 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
< source >( 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'inmodelargümanı bir dize olarak verildiğinde from_pretrained için kullanılan anahtar kelime argümanları.revisiondeğeri, işleme sınıfı yüklenirken de kullanılır. - trust_remote_code (
bool, isteğe bağlı, varsayılanFalse) — 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çin0.0olarak ayarlayın. MoE olmayan bir modelle kullanıldığında hata verir. - disable_dropout (
bool, isteğe bağlı, varsayılanTrue) — 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 (
intorNone, isteğe bağlı, varsayılan1024) — Tokenize edilmiş dizinin maksimum uzunluğu.max_lengthdeğerinden uzun olan diziler sağdan kırpılır.Noneise kırpma uygulanmaz. - pad_to_multiple_of (
intveyastr, 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ılanFalse) — 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.Noneise, eğitim içinper_device_train_batch_size, değerlendirme içinper_device_eval_batch_sizevarsayı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: - beta (
float, isteğe bağlı, varsayılan0.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ılan1.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ılan1.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ılanFalse) — Aktivasyonların CPU'ya taşınıp taşınmayacağı. - sync_ref_model (
bool, isteğe bağlı, varsayılanFalse) — Referans modelin,ref_model_mixup_alphaparametresini kullanarak herref_model_sync_stepsadımda aktif modelle senkronize edilip edilmeyeceğini belirtir. Bu senkronizasyon, TR-DPO makalesinden kaynaklanmaktadır.sync_ref_model=Truehenüz PEFT veyaprecompute_ref_log_probs=Trueile uyumlu değildir. - ref_model_mixup_alpha (
float, isteğe bağlı, varsayılan0.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çinsync_ref_model=Truedeğerini ayarlamanız gerekir. - ref_model_sync_steps (
int, isteğe bağlı, varsayılan512) — TR-DPO makalesindeki τ parametresi, mevcut politikanın referans politika ile ne sıklıkta senkronize edileceğini belirler. Bu parametreyi kullanmak içinsync_ref_model=Truedeğ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 olarak500yerine10değerine ayarlanır.gradient_checkpointing: Varsayılan olarakFalseyerineTruedeğerini alır.bf16:fp16ayarlanmadıysa varsayılan olarakTrue,Falseyerine.learning_rate: Varsayılan olarak5e-5yerine1e-6olarak 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.