TRL documentation

CPO Eğiticisi

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

and get access to the augmented documentation experience

to get started

CPO Eğiticisi

model badge

Genel Bakış

Makine Çevirisinde LLM Performansının Sınırlarını İlerleten Karşıtlı Tercih Optimizasyonu başlıklı makalede Haoran Xu, Amr Sharaf, Yunmo Chen, Weiting Tan, Lingfeng Shen, Benjamin Van Durme, Kenton Murray ve Young Jin Kim tarafından tanıtılan Karşıtlı Tercih Optimizasyonu (CPO). Genel hatlarıyla CPO, Makine Çevirisi (MT) görevlerinde modellerin yeterli ancak mükemmel olmayan çeviriler üretmemesi için eğitir. Bununla birlikte CPO, DPO kaybının genel bir yaklaşık değeridir ve sohbet gibi diğer alanlara da uygulanabilir.

CPO, SFT'nin iki temel eksikliğini gidermeyi amaçlar. Birincisi, SFT'nin tahmin edilen çıktı ile altın standart referanslar arasındaki farkı en aza indirme yöntemi, model performansını eğitim verisinin kalite seviyesiyle sınırlar. İkincisi, SFT'nin modelin çevirilerdeki hataları reddetmesini önleyecek bir mekanizması yoktur. CPO hedefi, DPO hedefinden türetilmiştir.

Hızlı başlangıç

Bu örnek, CPO yöntemiyle bir modelin nasıl eğitileceğini göstermektedir. Temel model olarak Qwen 0.5B modelini kullanıyoruz. Tercih verisi olarak UltraFeedback veri setinden yararlanıyoruz. Veri setindeki verilere buradan göz atabilirsiniz:

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

# train_cpo.py
from datasets import load_dataset
from trl.experimental.cpo import CPOConfig, CPOTrainer
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/ultrafeedback_binarized", split="train")

training_args = CPOConfig(output_dir="Qwen2-0.5B-CPO")
trainer = CPOTrainer(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_cpo.py

Beklenen veri seti türü

CPO, bir tercih veri seti gerektirir. experimental.cpo.CPOTrainer, hem sohbet hem de standart veri seti biçimlerini destekler. Sohbet veri seti sağlandığında, eğitimci veri setine sohbet şablonunu otomatik olarak uygular.

Kaydedilen metrikler

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

  • rewards/chosen: seçilen yanıtlar için politika modelinin ortalama log olasılıkları, beta ile ölçeklenmiş
  • rewards/rejected: beta ile ölçeklendirilmiş, reddedilen yanıtlar için politika modelinin ortalama log olasılıkları
  • rewards/accuracies: seçilen ödülün, ilgili reddedilen ödülden > olma sıklığının ortalaması
  • rewards/margins: seçilen ve buna karşılık gelen reddedilen ödüller arasındaki ortalama fark
  • nll_loss: seçilen yanıtlar için politika modelinin ortalama negatif log olma olasılığı kaybı

CPO varyantları

Basit Tercih Optimizasyonu (SimPO)

Simple Preference Optimization (SimPO), Yu Meng, Mengzhou Xia ve Danqi Chen tarafından önerilen, referans model kullanmadan DPO'dan daha basit ve daha etkili bir tercih optimizasyonu algoritmasıdır. SimPO'nun temel tasarımları (1) örtük ödül olarak uzunluk-normalize edilmiş log olma olasılığının kullanılması ve (2) Bradley-Terry sıralama hedefine bir hedef ödül marjının dahil edilmesidir. Resmi kod princeton-nlp/SimPO adresinde bulunabilir.

Makalenin özeti aşağıdaki gibidir:

Direct Preference Optimization (DPO), insan geri bildiriminden pekiştirmeli öğrenme (RLHF) kapsamında ödül fonksiyonlarını yeniden parametrik hale getirerek basitliği ve eğitim kararlılığını artıran, yaygın olarak kullanılan çevrimdışı tercih optimizasyon algoritmasıdır. Bu çalışmada, daha basit ancak daha etkili bir yaklaşım olan SimPO'yu öneriyoruz. SimPO'nun etkinliği, bir dizinin ortalama log olasılığını örtük ödül olarak kullanma tasarımına dayanmaktadır. Bu ödül formülasyonu, model üretimiyle daha iyi uyum sağlar ve referans modele olan ihtiyacı ortadan kaldırarak hesaplama ve bellek açısından daha verimli hale gelir. Ayrıca, Bradley-Terry hedefine, kazanan ve kaybeden yanıtlar arasındaki farkı artırmak için bir hedef ödül marjı ekleyerek algoritmanın performansını daha da artırıyoruz. SimPO'yu, Mistral ve Llama3 gibi hem taban hem de talimatla ayarlanmış modelleri içeren çeşitli son teknoloji eğitim kurulumlarında DPO ve en son varyantlarıyla karşılaştırıyoruz. AlpacaEval 2, MT-Bench ve son zamanlarda zorlu hale gelen Arena-Hard benchmark'ı dahil olmak üzere kapsamlı talimat takibi benchmark'larında değerlendirme yaptık. Sonuçlarımız, SimPO'nun yanıt uzunluğunu önemli ölçüde artırmadan mevcut yaklaşımları tutarlı ve anlamlı bir şekilde geride bıraktığını göstermektedir. Özellikle SimPO, AlpacaEval 2'de DPO'yu en fazla 6,4 puan, Arena-Hard'da ise en fazla 7,5 puan geride bırakmaktadır. Llama3-8B-Instruct üzerine inşa edilen en yüksek performanslı modelimiz, AlpacaEval 2'de 44,7 uzunluk kontrollü kazanma oranına ulaşarak liderlik tablosunda Claude 3 Opus'u geride bırakmakta ve Arena-Hard'da %33,8 kazanma oranı elde etmektedir; bu da onu en güçlü 8B açık kaynak model yapmaktadır.

SimPO kaybı, ödül marjı ekleyen, uzunluk normalizasyonuna izin veren ve BC düzenlemesi kullanmayan alternatif bir kayıp olduğu için experimental.cpo.CPOTrainer içinde entegre edilmiştir. Bu kaybı kullanmak için experimental.cpo.CPOConfig içinde loss_type="simpo" ve cpo_alpha=0.0 değerlerini etkinleştirin ve simpo_gamma değerini önerilen bir değere ayarlayın.

CPO-SimPO

CPO ve SimPO'nun bir arada kullanımını da sunuyoruz; bu, daha kararlı bir eğitim ve iyileştirilmiş performans sağlar. Daha fazla ayrıntı için CPO-SimPO GitHub adresine göz atın. Bu yöntemi kullanmak için, experimental.cpo.CPOConfig içinde loss_type="simpo" ayarlayarak SimPO'yu etkinleştirin ve cpo_alpha değerini sıfırdan farklı bir değere ayarlayın.

AlphaPO

Aman Gupta, Shao Tang, Qingquan Song, Sirou Zhu, Jiwoo Hong, Ankan Saha, Viral Gupta, Noah Lee, Eunki Kim, Jason Zhu, Natesh Pillai ve S. Sathiya Keerthi tarafından geliştirilen AlphaPO — Reward shape matters for LLM alignment (AlphaPO) yöntemi de experimental.cpo.CPOTrainer içinde uygulanmıştır. AlphaPO, SimPO kaybı bağlamında ödül fonksiyonu biçimine bir dönüşüm uygulayan alternatif bir yöntemdir. Makalenin özeti aşağıdaki gibidir:

İnsan Geri Bildirimli Pekiştirmeli Öğrenme (RLHF) ve türevleri, büyük dil modellerinin (LLM) talimatları takip etmesi ve insan değerlerini yansıtması için etkili hizalama (alignment) konusunda büyük ilerlemeler kaydetmiştir. Daha yakın zamanda, ödül modelleme aşamasını, ödülü öğrenilen politikanın (policy) doğrudan bir fonksiyonu olarak karakterize ederek atlayan Doğrudan Hizalama Algoritmaları (DAA) ortaya çıkmıştır. DAA'ların popüler örneklerinden bazıları Doğrudan Tercih Optimizasyonu (DPO) ve Basit Tercih Optimizasyonu (SimPO)'dur. Bu yöntemler genellikle likelihood displacement (olasılık yer değiştirmesi) sorunundan muzdariptir; bu olgu, tercih edilen yanıtların olasılıklarının sıklıkla istenmeyen şekilde azalmasıdır. Bu makalede, DAA'lar için ödül (fonksiyon) şeklinin önemli olduğunu savunuyoruz. Standart log ödülün ötesinde ödül fonksiyonunun şeklini değiştirmeye yardımcı olmak için bir α-parametresinden yararlanan yeni bir DAA yöntemi olan AlphaPO'yu tanıtıyoruz. AlphaPO, likelihood displacement ve aşırı optimizasyon (overoptimization) üzerinde ince ayarlı kontrol sağlamaya yardımcı olur. En iyi performans gösteren DAA'lardan biri olan SimPO ile karşılaştırıldığında, AlphaPO, Mistral-7B ve Llama3-8B'nin instruct sürümlerinde hizalama performansında yaklaşık %7 ile %10 arasında göreli bir iyileşme sağlarken, aynı modellerde DPO'ya kıyasla %15 ile %50 arasında göreli bir iyileşme elde etmektedir. Sunulan analiz ve sonuçlar, ödül şeklinin önemini ve eğitim dinamiklerini etkilemek ve hizalama performansını iyileştirmek için bunun nasıl sistematik olarak değiştirilebileceğini vurgulamaktadır.

Bu kaybı makalede anlatıldığı şekilde kullanmak için, experimental.cpo.CPOConfig içinde önerilen değerlere alpha ve simpo_gamma ayarlanarak loss_type="alphapo" değerini belirleyebiliriz; bu, otomatik olarak loss_type="simpo" ve cpo_alpha=0.0 değerlerini de ayarlar. Alternatif olarak, önerilen değerlere alpha ve simpo_gamma ayarlanarak loss_type="simpo" ve cpo_alpha=0.0 değerlerini manuel olarak belirleyebilirsiniz. Bu yöntemin diğer varyantları da mümkündür; örneğin loss_type="ipo" değerini belirleyip alpha değerini sıfırdan farklı herhangi bir değere ayarlayabilirsiniz.

Kayıp fonksiyonları

CPO algoritması birkaç kayıp fonksiyonunu destekler. Kayıp fonksiyonu, experimental.cpo.CPOConfig içindeki loss_type parametresi kullanılarak ayarlanabilir. Desteklenen kayıp fonksiyonları şunlardır:

loss_type=Açıklama
"sigmoid" (varsayılan)Tercih verisi verildiğinde, Bradley-Terry modeline göre bir ikili sınıflandırıcı sığdırılabilir ve gerçekte DPO yazarları, lojistik regresyon sığdırmak için normalize edilmiş olasılık üzerinden logsigmoid ile sigmoid kaybını önermektedir.
"hinge"RSO yazarları, SLiC makalesindeki normalize edilmiş olasılık üzerinde bir menteşe kaybı (hinge loss) kullanmayı önermektedir. Bu durumda beta, pay (margin) değerinin tersidir.
"ipo"IPO yazarları, DPO algoritmaları hakkında daha derin bir teorik anlayış sunmakta, aşırı uyum (overfitting) ile ilgili bir sorunu tespit etmekte ve alternatif bir kayıp fonksiyonu önermektedir. Bu durumda beta, seçilen ve reddedilen tamamlama çiftlerinin log-olabilirlik oranları arasındaki farkın tersidir; dolayısıyla beta ne kadar küçükse bu fark o kadar büyüktür. Makaleye göre, kayıp, tamamlamanın log-olabilirlikleri üzerinde ortalamaya alınır (yalnızca toplanan DPO'dan farklı olarak).
"simpo"SimPO yöntemi ayrıca experimental.cpo.CPOTrainer içinde de uygulanmıştır. SimPO, bir ödül payı ekleyen, uzunluk normalizasyonuna izin veren ve BC düzenlemesi kullanmayan alternatif bir kayıp fonksiyonudur. Bu kaybı kullanmak için experimental.cpo.CPOConfig içinde loss_type="simpo" ve cpo_alpha=0.0 değerlerini ayarlayın ve simpo_gamma değerini önerilen bir değere eşitleyin.
"alphapo"AlphaPO yöntemi ayrıca experimental.cpo.CPOTrainer içinde de uygulanmıştır. Bu, loss_type="simpo" ve cpo_alpha=0.0 değerlerini otomatik olarak ayarlayan sözdizimi şekeri (syntactic sugar) niteliğindedir. alpha parametresi sıfır olmadığında, AlphaPO, SimPO kaybı bağlamında ödül fonksiyonu biçimine bir dönüşüm uygular.

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).

CPOTrainer

sınıf trl.experimental.cpo.CPOTrainer

< >

( model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, str, NoneType] = Noneargs: trl.experimental.cpo.cpo_config.CPOConfig | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | dict[str, datasets.arrow_dataset.Dataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.image_processing_utils.BaseImageProcessor | transformers.feature_extraction_utils.FeatureExtractionMixin | transformers.processing_utils.ProcessorMixin | None = Nonemodel_init: collections.abc.Callable[[], transformers.modeling_utils.PreTrainedModel] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR] = (None, None)preprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = Nonepeft_config: PeftConfig | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalLoopOutput], dict] | None = None )

Parametreler

  • model (PreTrainedModel) — Eğitilecek model, tercihen bir AutoModelForSequenceClassification.
  • args (experimental.cpo.CPOConfig) — Eğitim için kullanılacak CPO yapılandırma argümanları.
  • data_collator (DataCollator) — Eğitim için kullanılacak veri toplayıcı. None belirtilirse, çift dizilerden oluşan bir veri seti verildiğinde, dizileri batch içindeki dizilerin maksimum uzunluğuna kadar dolduran varsayılan veri toplayıcı (experimental.utils.DPODataCollatorWithPadding) kullanılacaktır.
  • train_dataset (Dataset) — Eğitim için kullanılacak veri seti.
  • eval_dataset (Dataset) — Değerlendirme için kullanılacak veri seti.
  • processing_class (PreTrainedTokenizerBase, BaseImageProcessor, FeatureExtractionMixin veya ProcessorMixin, isteğe bağlı) — Verileri işlemek için kullanılan işleme sınıfı. Sağlanırsa, model girdilerini otomatik olarak işlemek için kullanılır ve yarıda kalan bir eğitimi yeniden başlatmayı veya ince ayarlanmış modeli yeniden kullanmayı kolaylaştırmak amacıyla modelle birlikte kaydedilir.
  • model_init (Callable[[], transformers.PreTrainedModel]) — Eğitim için kullanılacak model başlatıcısı. None belirtilirse, varsayılan model başlatıcısı kullanılır.
  • callbacks (list[transformers.TrainerCallback]) — Eğitim için kullanılacak geri çağrılar.
  • optimizers (tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — Eğitim için kullanılacak optimizör ve zamanlayıcı.
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — Metrikler hesaplanmadan önce logit'leri ön işlemek için kullanılacak işlev.
  • peft_config (PeftConfig, isteğe bağlı) — Eğitim için kullanılacak PEFT yapılandırması. Bir PEFT yapılandırması geçirirseniz, model bir PEFT modeliyle sarılır.
  • compute_metrics (Callable[[EvalPrediction], dict], isteğe bağlı) — Metrikleri hesaplamak için kullanılacak işlev. Bir EvalPrediction almalı ve metrik değerlerini içeren bir sözlük döndürmelidir.

CPOTrainer'ı başlatın.

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 = 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.
  • 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.

CPOConfig

sınıf trl.experimental.cpo.CPOConfig

< >

( 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 = 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 = 'random'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 = -1max_length: int | None = 1024max_completion_length: int | None = Nonebeta: float = 0.1label_smoothing: float = 0.0loss_type: str = 'sigmoid'disable_dropout: bool = Truecpo_alpha: float = 1.0simpo_gamma: float = 0.5alpha: float = 0.0generate_during_eval: bool = Falseis_encoder_decoder: bool | None = Nonemodel_init_kwargs: dict[str, typing.Any] | str | None = Nonetrust_remote_code: bool = Falsedataset_num_proc: int | None = None )

Parametreler

  • max_length (int veya None, isteğe bağlı, varsayılan 1024) — Toplu işlemdeki dizilerin (istek + tamamlama) maksimum uzunluğu. Varsayılan veri toplayıcısını kullanmak istiyorsanız bu argüman gereklidir.
  • max_completion_length (int, isteğe bağlı) — Tamamlamanın (completion) maksimum uzunluğu. Varsayılan veri toplayıcısını (data collator) kullanmak ve modeliniz bir kodlayıcı-çözücü (encoder-decoder) ise bu argüman gereklidir.
  • 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. IPO kaybı (loss_type="ipo") için β, makalede τ ile gösterilen düzenleme parametresidir.
  • label_smoothing (float, isteğe bağlı, varsayılan 0.0) — Etiket yumuşatma katsayısı. Varsayılan veri toplayıcısını kullanmak istiyorsanız bu argüman gereklidir.
  • loss_type (str, isteğe bağlı, varsayılan olarak "sigmoid") — Kullanılacak kayıp türü. Olası değerler şunlardır:
    • "sigmoid": orijinal DPO makalesindeki sigmoid kaybı.
    • "hinge": SLiC makalesindeki normalize edilmiş olasılık üzerindeki hinge kaybı.
    • "ipo": IPO makalesinden IPO kaybı.
    • "simpo": SimPO makalesindeki SimPO kaybı.
    • "alphapo": AlphaPO makalesindeki AlphaPO kaybı. Bu, loss_type="simpo" ve cpo_alpha=0.0 değerlerini otomatik olarak ayarlar.
  • disable_dropout (bool, isteğe bağlı, varsayılan True) — Modelde dropout'un devre dışı bırakılıp bırakılmayacağı.
  • cpo_alpha (float, isteğe bağlı, varsayılan 1.0) — CPO eğitimindeki BC düzenleyicisinin ağırlığı.
  • simpo_gamma (float, isteğe bağlı, varsayılan 0.5) — loss_type="simpo" kullanıldığında yalnızca SimPO kaybı için hedef ödül marjı.
  • alpha (float, isteğe bağlı, varsayılan 0.0) — Tüm kayıp türlerinde ödül fonksiyonu şeklini kontrol eden Alpha parametresi. alpha=0 (varsayılan) olduğunda standart log olasılık ödüllerini kullanır. alpha != 0 olduğunda AlphaPO makalesinden r = (1 - p^(-alpha)) / alpha formülüne dayalı AlphaPO dönüşümünü uygular. Bu parametre tüm kayıp türleriyle çalışır.
  • generate_during_eval (bool, isteğe bağlı, varsayılan False) — True ise, değerlendirme sırasında modelden tamamlamalar üretilir ve W&B veya Comet'e kaydedilir.
  • is_encoder_decoder (bool, isteğe bağlı) — model argümanı yerine modeli örneklemek için model_init argümanını (callable) kullanırken, callable tarafından döndürülen modelin bir encoder-decoder modeli olup olmadığını belirtmeniz gerekir.
  • model_init_kwargs (dict[str, Any], isteğe bağlı) — Modelin bir dizgeden örneklenirken AutoModelForCausalLM.from_pretrained fonksiyonuna geçirilecek 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 yüklenmesine izin verilip verilmeyeceğini belirtir. from_pretrained fonksiyonuna iletilir.
  • dataset_num_proc (int, isteğe bağlı) — Veri setini işlemek için kullanılacak süreç sayısı.

experimental.cpo.CPOTrainer için yapılandırma sınıfı.

Bu sınıf yalnızca CPO 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.
Update on GitHub