TRL documentation
SDPO
SDPO
Self-Distillation Policy Optimization (SDPO), Jonas Hübotter, Frederike Lübeck, Lejs Behric, Anton Baumann, Marco Bagatella, Daniel Marta, Ido Hakimi, Idan Shenfeld, Thomas Kleine Buening, Carlos Guestrin ve Andreas Krause tarafından Reinforcement Learning via Self-Distillation makalesinde tanıtılmıştır.
Büyük dil modelleri giderek daha fazla, kod ve matematik gibi doğrulanabilir alanlarda pekiştirmeli öğrenme ile son eğitimden geçirilmektedir. Ancak, doğrulanabilir ödüllerle pekiştirmeli öğrenme (RLVR) için mevcut yöntemler, deneme başına yalnızca skaler bir sonuç ödülünden öğrenerek ciddi bir kredi atama darboğazı oluşturmaktadır. Birçok doğrulanabilir ortam, bir denemenin neden başarısız olduğunu açıklayan çalışma zamanı hataları veya yargı değerlendirmeleri gibi zengin metinsel geri bildirimler sağlar. Bu durumu zengin geri bildirimle pekiştirmeli öğrenme olarak biçimselleştiriyor ve harici bir öğretmen veya açık bir ödül modeli olmadan tokenize edilmiş geri bildirimleri yoğun bir öğrenme sinyaline dönüştüren Self-Distillation Policy Optimization (SDPO) yöntemini tanıtıyoruz. SDPO, geri bildirimle koşullandırılmış mevcut modeli bir öz-öğretmen olarak ele alır ve geri bildirimle bilgilendirilmiş sonraki token tahminlerini politika içine damıtır. Bu sayede SDPO, modelin kendi hatalarını bağlam içinde geriye dönük olarak belirleme yeteneğinden yararlanmaktadır. Bilimsel akıl yürütme, araç kullanımı ve LiveCodeBench v6 üzerindeki rekabetçi programlama alanlarında SDPO, güçlü RLVR baz çizgilerine kıyasla örnek verimliliğini ve nihai doğruluğunu artırır. Önemli olan, SDPO'nun, başarılı yuvarlanmaları başarısız denemeler için örtük geri bildirim olarak kullanarak, yalnızca skaler geri bildirim döndüren standart RLVR ortamlarında da baz çizgilerini geride bırakmasıdır. Son olarak, SDPO'nun test zamanında bireysel sorulara uygulanması, zor ikili ödül görevlerinde keşfi hızlandırır ve best-of-k örneklemesi veya çok turlu sohbetlerle aynı keşif olasılığını 3 kat daha az denemeye ulaşarak elde eder.
Nasıl çalışır
SDPO, her denemenin yalnızca seyrek bir skaler ödül ürettiği doğrulanabilir ödüllerle pekiştirmeli öğrenmeyi (RLVR) hedefler. Bunu yoğun, token düzeyinde bir sinyale dönüştürür: her istem için politika, reward_funcs ile puanlanan num_generations tamamlama örnekler; başarılı bir yuvarlama (ve isteğe bağlı privileged_context geri bildirimi) bir öğretmen yeniden istemine dönüşür ve öğretmenin geri bildirimle şekillenen tamamlama üzerindeki dağılımı, politika içine damıtılır. Öğretmen ve öğrenci aynı ağdır, bu nedenle doğrulayıcının ötesinde harici bir öğretmen veya ödül modeline gerek yoktur.
Kayıp modları ve öğretmen
distillation_weight, iki sinyalin konveks bir kombinasyon olarak nasıl birleştiğini kontrol eder: kayıp (1 - distillation_weight) * policy_loss + distillation_weight * distillation_loss şeklindedir. 1.0 (varsayılan) modeli yalnızca öz-distilasyon kaybıyla eğitirken, 0.0 standart GRPO tarzı politika gradyanına geri döner ve ara değerler her ikisini de harmanlar. Distilasyon hedefinin kendisi distillation_mode ile belirlenir — "sampled_token" (varsayılan) token düzeyinde ters KL kullanır ve distillation_alpha=1.0 gerektirirken, "full_logits" ve "topk_logits" tam veya en iyi distillation_topk sözlük üzerinde distilasyon yapar.
teacher_model_kind, öğretmen ağırlıklarını seçer: "ema" (varsayılan), öğrenciyi her teacher_sync_steps adımda teacher_update_rate oranında senkronize edilen üstel hareketli ortalama ile takip eder; "live", mevcut öğrenciyi doğrudan yeniden kullanır; "base" ise başlangıç ağırlıklarını dondurur. Yeniden istek (reprompting) işlemi use_successful_as_teacher, success_reward_threshold, dont_reprompt_on_self_success ve reprompt_template / solution_template / feedback_template dizgeleri tarafından yönetilir. Üretim, varsayılan olarak transformers üzerinden çalışır; use_vllm=True olduğunda ise vLLM (colocate veya sunucu modu) kullanılır.
Beklenen veri seti sütunları
Her örnek şunları sağlamalıdır:
prompt: öğrenciye yönelik istemprivileged_context:include_environment_feedback=Truekullanıldığında, ortam geri bildirimi gibi isteğe bağlı ayrıcalıklı metin
Kullanım
from datasets import Dataset
from trl.experimental.sdpo import SDPOConfig, SDPOTrainer
dataset = Dataset.from_dict(
{
"prompt": [[{"role": "user", "content": "Solve 2+2."}]],
"privileged_context": ["Your earlier answer used the wrong format."],
}
)
training_args = SDPOConfig(
output_dir="sdpo-model",
distillation_mode="topk_logits", # Explicitly select top-K logit distillation
distillation_topk=100, # Required when using top-K logit distillation
include_environment_feedback=True, # Use dataset privileged_context for teacher reprompts
)
trainer = SDPOTrainer(
model="Qwen/Qwen2.5-1.5B-Instruct",
reward_funcs=reward_func,
args=training_args,
train_dataset=dataset,
)
trainer.train()SDPO her zaman bir prompt sütunu gerektirir. Ortam geri bildirimini kullanmak için ayrıca bir privileged_context sütunu ekleyin ve include_environment_feedback=True olarak ayarlayın. SDPO, başarılı rollout'ları ve etkinleştirildiğinde bu metni, öz-distilasyon için öğretmen yeniden istemleri oluşturmak üzere kullanır.
Öğretmenin vLLM sunucusundan sunulması
teacher_model_kind="live" kullanıldığında öğretmen, ağırlıkları vLLM sunucusu tarafından zaten tutulan mevcut öğrencidir (ağırlıklar, üretim için her adımda senkronize edilir). Öğretmen log-olasılıklarını ayrı bir yerel öğretmen ileri geçişi çalıştırmak yerine aynı sunucuda puanlamak için use_teacher_server=True ayarlayın; bu, öğretmeni eğitim adımından tamamen çıkarır:
training_args = SDPOConfig(
output_dir="sdpo-model",
use_vllm=True,
vllm_mode="server",
teacher_model_kind="live",
use_teacher_server=True,
distillation_weight=1.0,
distillation_mode="sampled_token",
)Öğretmen sunucusu kullanılırken:
use_vllm=Truevevllm_mode="server"zorunludurteacher_model_kinddeğeri"live"olmalıdır (sunucu, güncel öğrenci ağırlıklarını barındırır)distillation_weightdeğeri1.0olmalıdır (saf distilasyon; politika kaybıyla konveks bir karışım için tam sözlük logitleri gereklidir)distillation_mode"sampled_token"(gerçekleşen token üzerinde ters KL) veya"topk_logits"olmalıdır. Sunucu, öğretmenin kendi top-k log-olasılıklarını döndürdüğü içintopk_logits, öğretmenin top-k desteği üzerinde damıtma yapar (yerel amaçtan farklı olarak öğrencinin desteğini kullanamaz);"live"bir öğretmenle bu iki destek neredeyse çakışır.full_logitskullanılamaz.
Geri Çağrılar
Trainer, hata ayıklama, gözlemlenebilirlik ve testler için faydalı olan küçük bir geri çağrı kancası seti yayar. Bu kancalar, deneysel öz-distilasyon iş akışları için pratik entegrasyon noktaları olarak tasarlanmıştır.
Paylaşılan öz-distilasyon kancaları:
on_self_distillation_batch_prepared: bir self-distillation partisi hazır olduğunda tetiklenir. Önemlik örneklemleme kırpma girdileri kullanılabilirse, yükprompt_ids,completion_idsveold_per_token_logpsiçerir.on_generation_batch_built: yeni bir tamponlu üretim partisi oluşturulduğunda tetiklenir. Yük,generate_everyvesteps_per_generationdeğerlerini içerir.
SDPO'ya özgü kancası:
on_teacher_context_built: SDPO, öğretmen koşullu girdileri oluşturduktan sonra tetiklenir. Yük,teacher_input_ids,teacher_attention_mask,completion_maskveself_distillation_maskiçerir.
Örnek betik
Komut satırından SDPO eğitimini başlatmak için examples/sdpo_math/sdpo_math.py dosyasını kullanın. Betik, doğrulanabilir matematik ödülleri, --feedback_column ile ortam geri bildirimi ve standart ModelConfig bayrakları ile PEFT/LoRA destekler.
python examples/sdpo_math/sdpo_math.py \
--model_name_or_path Qwen/Qwen2.5-Math-1.5B-Instruct \
--dataset_name openai/gsm8k \
--dataset_config main \
--output_dir outputs/sdpo-qwen35-2b-gsm8k \
--learning_rate 5e-5 \
--dtype bfloat16 \
--bf16 true \
--max_completion_length 128 \
--use_peft \
--lora_target_modules q_proj k_proj v_proj o_proj gate_proj up_proj down_proj \
--per_device_train_batch_size 1 \
--gradient_accumulation_steps 2 \
--num_generations 8 \
--generation_batch_size 32 \
--distillation_alpha 1.0 \
--distillation_mode sampled_token \
--distillation_weight 0.5 \
--report_to none \
--eval_strategy steps \
--eval_steps 1000 \
--save_strategy noSDPOConfig
sınıf trl.experimental.sdpo.SDPOConfig
< source >( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-05lr_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 = Falselabel_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 = -1model_init_kwargs: dict[str, typing.Any] | None = Nonetrust_remote_code: bool = Falsedisable_dropout: bool = Truemax_prompt_length: int | None = 512num_generations: int = 8num_generations_eval: int | None = Nonemax_completion_length: int | None = 256ds3_gather_for_generation: bool = Trueshuffle_dataset: bool = Truegeneration_batch_size: int | None = Nonesteps_per_generation: int | None = Nonetemperature: float = 1.0top_p: float = 1.0top_k: int = 0min_p: float | None = Nonegeneration_kwargs: dict[str, typing.Any] | None = Nonechat_template_kwargs: dict[str, typing.Any] | None = Nonerepetition_penalty: float = 1.0cache_implementation: str | None = Noneuse_vllm: bool = Falseuse_teacher_server: bool = Falsevllm_mode: str = 'colocate'vllm_model_impl: str = 'vllm'vllm_enable_sleep_mode: bool = Falsevllm_server_base_url: str | None = Nonevllm_server_host: str = '0.0.0.0'vllm_server_port: int = 8000vllm_group_port: int = 51216vllm_server_timeout: float = 240.0vllm_tensor_parallel_size: int = 1vllm_gpu_memory_utilization: float = 0.3vllm_max_model_length: int | None = Nonenum_iterations: int = 1loss_type: str = 'dapo'mask_truncated_completions: bool = Falsedont_reprompt_on_self_success: bool = Truebeta: float = 0.0epsilon: float = 0.2epsilon_high: float | None = Noneimportance_sampling_level: str = 'token'reward_weights: list[float] | None = Nonescale_rewards: str = 'group'distillation_alpha: float = 1.0distillation_mode: typing.Literal['sampled_token', 'full_logits', 'topk_logits'] = 'sampled_token'distillation_topk: int | None = Nonedistillation_is_clip: float | None = 2.0distillation_add_tail: bool = Falsedistillation_weight: float = 1.0teacher_model_kind: str = 'ema'teacher_update_rate: float = 0.05teacher_sync_steps: int = 1max_reprompt_len: int = 10240use_successful_as_teacher: bool = Truesuccess_reward_threshold: float = 1.0reprompt_template: str = '{prompt}{solution}{feedback}\n\nCorrectly solve the original question.\n'solution_template: str = '\nCorrect solution:\n\n{successful_previous_attempt}\n\n'feedback_template: str = '\nThe following is feedback from your unsuccessful earlier attempt:\n\n{feedback_raw}\n\n'include_environment_feedback: bool = Falseenvironment_feedback_only_without_solution: bool = Falseremove_thinking_from_demonstration: bool = Falsediagnostics_warning_interval: int = 10diagnostics_flat_tolerance: float = 1e-08 )
Çevrimiçi politika hedefini kontrol eden parametreler
- beta (
float, isteğe bağlı, varsayılan0.0) — KL katsayısı.0.0(varsayılan) ise referans model yüklenmez, bu da bellek kullanımını azaltır ve eğitim hızını artırır. DeepSeek-R1, LLM'lerde akıl yürütmeyi pekiştirmeli öğrenme yoluyla teşvik eder ve0.001değeri kullanılır. - epsilon (
float, optional, defaults to0.2) — Epsilon value for clipping. - epsilon_high (
float, isteğe bağlı) — Kesme işlemi için üst sınır epsilon değeri. Belirtilmezse,epsilonargümanında belirtilen alt sınır değeriyle aynı varsayılan değeri kullanır. DAPO makalesi0.28değerini önerir. - importance_sampling_level (
str, isteğe bağlı, varsayılan"token") — Önem örneklemesi oranlarının'token'veya'sequence'düzeyinde hesaplanıp hesaplanmayacağını kontrol eder.'token'ham token başına log-olasılık oranlarını korur (token başına bir ağırlık).'sequence'geçerli tokenler arasında log-olasılık oranlarını ortalayarak dizgi başına tek bir oran üretir. GSPO makalesi, dizgi düzeyinde örneklemenin genellikle daha kararlı eğitim ve dizgi düzeyindeki ödüllerle daha iyi hizalanma sağladığını göstermektedir. - reward_weights (
list[float], isteğe bağlı) — Her ödül fonksiyonu için ağırlıklar. Ödül fonksiyonlarının sayısıyla eşleşmelidir.Noneise, tüm ödüller1.0ağırlığıyla eşit şekilde ağırlıklandırılır. - scale_rewards (
strveyabool, isteğe bağlı, varsayılan"group") — Ödüllere uygulanacak ölçekleme stratejisini belirtir. Desteklenen değerler şunlardır:Trueveya'group'(varsayılan): ödüller, her grup içindeki standart sapmaya göre ölçeklenir ve bu, bir grup içinde birim varyansın sağlanmasını garanti eder.'batch': ödüller, PPO Lite makalesinde önerildiği gibi, tüm batch üzerinden standart sapmaya göre ölçeklenir.Falseveya'none': ölçekleme uygulanmaz. Dr. GRPO makalesi, standart sapmaya göre ölçeklemenin soru düzeyinde bir zorluk yanlılığına yol açtığı için ödülleri ölçeklememeyi önerir.
SDPO kaybını kontrol eden parametreler
- distillation_weight (
float, isteğe bağlı, varsayılan1.0) — Politika ve öz-distilasyon hedefleri arasındaki konveks kombinasyon ağırlığı. Kayıp(1 - distillation_weight) * policy_loss + distillation_weight * distillation_lossolarak hesaplanır.[0, 1]aralığında olmalıdır.1.0(varsayılan) tamamen öz-distilasyon üzerinde eğitim yapar,0.0standart GRPO tarzı politika gradyanına geri döner, ara değerler ise her ikisini birleştirir. - distillation_alpha (
float, isteğe bağlı, varsayılan1.0) — Divergence interpolasyon katsayısı. Sampled-token SDPO, resmi reverse-KL ayarını gerektirir:distillation_alpha=1.0. - distillation_mode (
Literal["sampled_token", "full_logits", "topk_logits"], isteğe bağlı, varsayılan"sampled_token") — Distillation hedef modu.sampled_tokenvarsayılan SDPO modudur vedistillation_alpha=1.0gerektirir. - distillation_topk (
int, isteğe bağlı) — Logit düzeyinde SDPO için top-k yaklaşımı.distillation_mode=topk_logitsolduğunda ayarlanmalıdır, aksi halde ayarlanmamalıdır. - distillation_is_clip (
float, isteğe bağlı, varsayılan2.0) — Kendine damıtma (self-distillation) içindeki önem örneklemesi için kırpma katsayısı.Nonekırpma işlemini devre dışı bırakır. - distillation_add_tail (
bool, isteğe bağlı, varsayılanFalse) — Top-k dışındaki olasılık kütlesi için bir kuyruk kovası eklenip eklenmeyeceğini belirtir.
Öğretmeni kontrol eden parametreler
- teacher_model_kind (
str, isteğe bağlı, varsayılan"ema") — Anlamsal öğretmen seçimi.basebaşlangıç öğrencisini,livemevcut öğrenciyi veemaüstel ortalama alınmış öğretmeni kullanır. - teacher_update_rate (
float, isteğe bağlı, varsayılan0.05) — EMA öğretmen senkronizasyonu için kullanılan öğretmen güncelleme oranı. - teacher_sync_steps (
int, isteğe bağlı, varsayılan1) — EMA öğretmen modelinin ne sıklıkla senkronize edileceği.
Yeniden istem kontrolünü sağlayan parametreler
- use_successful_as_teacher (
bool, isteğe bağlı, varsayılanTrue) — Başarılı rollout'ları, öz-distilasyon için örtük geri bildirim olarak kullanın. - success_reward_threshold (
float, isteğe bağlı, varsayılan1.0) — Bir rollout'un başarılı bir gösterim olarak kabul edilmesi için gereken minimum ödül. - dont_reprompt_on_self_success (
bool, isteğe bağlı, varsayılanTrue) — Model doğru yanıtı ürettiğinde yeniden istek atlamayı atlayın. - max_reprompt_len (
int, isteğe bağlı, varsayılan10240) — Kendinden damıtma (self-distillation) için yeniden istem (reprompting) işleminin maksimum uzunluğu. - reprompt_template (
str, isteğe bağlı, varsayılan"{prompt}{solution}{feedback}\n\nCorrectly solve the original question.\n") — Başarılı bir gösterimle öğretmene yeniden istek göndermek için kullanılan şablon. - solution_template (
str, isteğe bağlı, varsayılan"\nCorrect solution -- \n\n{successful_previous_attempt}\n\n"): Başarılı gösterim metnini biçimlendirmek için şablon. - feedback_template (
str, isteğe bağlı, varsayılan"\nThe following is feedback from your unsuccessful earlier attempt -- \n\n{feedback_raw}\n\n"): Yeniden istek için ortam geri bildirimini biçimlendirmek için şablon. - include_environment_feedback (
bool, isteğe bağlı, varsayılanFalse) — Mevcut olduğunda öğretmen yeniden isteklerinde (teacher reprompts) ortam geri bildirimlerinin dahil edilip edilmeyeceğini belirtir. - environment_feedback_only_without_solution (
bool, isteğe bağlı, varsayılanFalse) — Başarılı bir çözüm yoksa yalnızca geri bildirim kullanılıp kullanılmayacağı. - remove_thinking_from_demonstration (
bool, isteğe bağlı, varsayılanFalse) — Gösterim metninden <think>…</think> bloklarının kaldırılıp kaldırılmayacağını belirtir.
Tanılama işlemlerini kontrol eden parametreler
- diagnostics_warning_interval (
int, isteğe bağlı, varsayılan10) — Tekrarlanan eğitimci tanılamalarını, ardışık N dejeneratif adımda bir yayınla. Devre dışı bırakmak için 0 olarak ayarlayın. - diagnostics_flat_tolerance (
float, isteğe bağlı, varsayılan1e-8) — Ödül varyansının veya yeniden istek etkinliğinin fiilen sıfır olup olmadığını belirlemek için kullanılan tolerans.
Modeli kontrol eden parametreler
- model_init_kwargs (
dict[str, Any], isteğe bağlı) —SDPOTrainer'inmodelargümanı bir dize olarak verildiğinde kullanılan,transformers.AutoModelForCausalLM.from_pretrainediçin anahtar kelime argümanları. İşleme sınıfları yüklenirkenrevisiondeğeri 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. Ödül modeli ve ödül tokenizer'ı yüklemelerine de uygulanır. - disable_dropout (
bool, isteğe bağlı, varsayılanTrue) — Modelde dropout'un devre dışı bırakılıp bırakılmayacağı. Bu, referans model ile eğitim sırasında faydalıdır; çünkü modelin aynı giriş için farklı logprobs üretmesini engeller.
Veri ön işleme sürecini kontrol eden parametreler
- remove_unused_columns (
bool, isteğe bağlı, varsayılanFalse) — Veri setinde yalnızca ‘prompt’ sütununun korunup korunmayacağını belirtir. ‘prompts’ ve ‘completions’ dışında bir sütun gerektiren özel bir ödül fonksiyonu kullanıyorsanız, bu değeriFalseolarak bırakmalısınız. - max_prompt_length (
int, isteğe bağlı, varsayılan512) — Maksimum istem uzunluğu. Daha uzun istemler soldan kırpılır. - shuffle_dataset (
bool, isteğe bağlı, varsayılanTrue) — Eğitim veri setinin karıştırılıp karıştırılmayacağı.
Üretimi kontrol eden parametreler
- num_generations (
int, isteğe bağlı, varsayılan8) — Örneklenecek nesil sayısı. Etkili parti boyutu (num_processes per_device_batch_size gradient_accumulation_steps) bu değere tam bölünmelidir. - num_generations_eval (
int, isteğe bağlı) — Değerlendirme sırasında örneklenmesi gereken nesil sayısı. Bu, hesaplama tasarrufu sağlamak için değerlendirme sırasında daha az nesil kullanılmasına olanak tanır.Noneisenum_generationsdeğeri kullanılır. - max_completion_length (
int, isteğe bağlı, varsayılan256) — Oluşturulan tamamlamanın maksimum uzunluğu. - temperature (
float, isteğe bağlı, varsayılan1.0) — Örnekleme için sıcaklık. Sıcaklık ne kadar yüksekse, tamamlamalar o kadar rastgele olur. - top_p (
float, isteğe bağlı, varsayılan1.0) — Dikkate alınacak üst tokenların kümülatif olasılığını kontrol eden bir sayı. (0, 1] aralığında olmalıdır. Tüm tokenları dikkate almak için 1.0 olarak ayarlayın. - top_k (
int, isteğe bağlı, varsayılan0) — Top-k filtreleme için en yüksek olasılığa sahip tutulacak sözlük belirteçlerinin sayısı.0ise top-k filtreleme devre dışı bırakılır ve tüm belirteçler dikkate alınır. - min_p (
float, isteğe bağlı) — En olası token'ın olasılığına göre ölçeklendirilen minimum token olasılığı. 0.0 ile 1.0 arasında bir değer olmalıdır. Tipik değerler 0.01-0.2 aralığındadır. - repetition_penalty (
float, isteğe bağlı, varsayılan1.0) — İstemde ve şu ana kadar üretilen metinde görünüp görünmediklerine göre yeni jetonları cezalandıran bir ondalık sayı. 1.0'tan büyük değerler modele yeni jetonlar kullanmayı teşvik ederken, 1.0'dan küçük değerler modele jetonları tekrarlamayı teşvik eder. - cache_implementation (
str, isteğe bağlı) — use_vllm False olarak ayarlandığında daha hızlı üretim için önbellek yönteminin uygulaması. - generation_kwargs (
dict[str, Any], isteğe bağlı) — Tamamlamalar örneklenirkenGenerationConfig(transformers kullanılıyorsa) veyaSamplingParams(vLLM kullanılıyorsa) fonksiyonuna iletilecek ek anahtar kelime argümanları. Üretim davranışını daha da özelleştirmek için, örneğinsuppress_tokens,num_beamsgibi ayarları yapmak amacıyla kullanılabilir. Diğer üretim parametreleriyle (örneğinmin_p,top_pvb.) çakışan anahtarlar içeriyorsa, bu parametrelerin üzerine yazar. - chat_template_kwargs (
dict[str, Any], isteğe bağlı) — Tamamlamalar oluşturulurkenapply_chat_templatefonksiyonuna iletilecek ek anahtar kelime argümanları. - ds3_gather_for_generation (
bool, isteğe bağlı, varsayılanTrue) — Bu ayar, DeepSpeed ZeRO-3 için geçerlidir. Etkinleştirilirse, üretim için politika modeli ağırlıkları toplanır ve üretim hızı artırılır. Ancak bu seçeneğin devre dışı bırakılması, tek bir GPU'nun VRAM kapasitesini aşan modellerin eğitimine olanak tanır; bunun bedeli ise daha yavaş bir üretime yol açmasıdır. Bu seçeneğin devre dışı bırakılması, vLLM üretimiyle uyumlu değildir.
vLLM tarafından desteklenen üretim hızlandırmasını kontrol eden parametreler
- use_vllm (
bool, isteğe bağlı, varsayılanFalse) — Tamamlamaları üretmek için vLLM kullanılacak mı?Trueolarak ayarlanırsa, eğitimci üretim için varsayılan model.generate() yerine vLLM kullanır. Bunun içinvllmpaketinin yüklü olması gerekir. - use_teacher_server (
bool, isteğe bağlı, varsayılanFalse) — Öğretmen logprobs'larını yerel bir öğretmen ileri geçişi yerine çalışan vLLM üretim sunucusundan hesaplar. Yalnızcateacher_model_kind='live'ileuse_vllm=True,vllm_mode='server',distillation_weight=1.0(saf damıtma) vedistillation_mode{‘sampled_token’, ‘topk_logits’} kümesinde desteklenir (sunucu, tam sözlük yerine öğretmenin üst-k logprobs'larını döndürür;topk_logits, öğretmenin kendi üst-k desteği üzerinde damıtma yapar). - vllm_mode (
str, isteğe bağlı, varsayılan"colocate") —use_vllmTrueolarak ayarlandığında vLLM entegrasyonu için kullanılacak mod.'server'veya'colocate'değerlerinden biri olmalıdır.'server': Eğitimci, üretim isteklerini ayrı bir vLLM sunucusuna gönderir. Bir vLLM sunucusunun çalıştığından emin olun (vllm serveile başlatın).'colocate': vLLM aynı süreçte çalışır ve eğitim GPU'larını paylaşır. Bu, ayrı bir sunucuya olan ihtiyacı ortadan kaldırır ancak eğitimle kaynak çakışmasına neden olabilir. - vllm_model_impl (
str, isteğe bağlı, varsayılan"vllm") — vLLM için kullanılacak model uygulaması.transformersveyavllmdeğerlerinden biri olmalıdır.transformers: Model uygulaması içintransformersarka ucunu kullanın.vllm: Model uygulaması içinvllmkitaplığını kullanın. - vllm_enable_sleep_mode (
bool, isteğe bağlı, varsayılanFalse) — Optimizatör adımı sırasında ağırlıkları/önbelleği boşaltmak için vLLM uyku modunu etkinleştirir. GPU bellek kullanımını düşük tutar, ancak motorun uyanması ev sahibi–cihaz aktarma gecikmesi ekler. - vllm_server_base_url (
str, isteğe bağlı) — vLLM sunucusu için temel URL (ör. ‘http://localhost:8000’). Verildiğindevllm_server_hostvevllm_server_portyok sayılır. - vllm_server_host (
str, isteğe bağlı, varsayılan"0.0.0.0") — Bağlanacak vLLM sunucusunun host adresi. vllm_server_base_url sağlanırsa yok sayılır. - vllm_server_port (
int, isteğe bağlı, varsayılan8000) — Bağlanacak vLLM sunucusunun portu. vllm_server_base_url sağlanırsa yok sayılır. - vllm_group_port (
int, isteğe bağlı, varsayılan51216) — Ağırlık güncelleme grubu için port numarası. Bu, vLLM sunucusuyla iletişim kurmak için kullanılır. Port meşgul değilse değiştirmeye gerek yoktur. - vllm_server_timeout (
float, isteğe bağlı, varsayılan240.0) — vLLM sunucusunun ayağa kalkması için beklenen toplam zaman aşımı süresi (saniye cinsinden). Sunucu zaman aşımı süresinin sonunda ayağa kalkmazsa birConnectionErroryükseltilir. - vllm_tensor_parallel_size (
int, isteğe bağlı, varsayılan1) — vLLM için tensor paralel boyutunu kontrol eder. Bu ayar yalnızcavllm_modedeğeri'colocate'olarak ayarlandığında geçerlidir.vllm_mode='server'kullanıyorsanız, bu parametrenin vLLM sunucusunu--vllm_tensor_parallel_sizebayrağıyla başlatırken ayrı olarak geçirilmesi gerekir. - vllm_gpu_memory_utilization (
float, isteğe bağlı, varsayılan0.3) — vLLM için GPU bellek kullanımını kontrol edin. Bu ayar yalnızcavllm_mode'colocate'olarak ayarlandığında geçerlidir.vllm_mode='server'kullanıyorsanız, bu parametrenin vLLM sunucusunu--vllm_gpu_memory_utilizationbayrağıyla başlatırken ayrı olarak geçirilmesi gerekir. - vllm_max_model_length (
int, isteğe bağlı) — vLLM için bağlam penceresi. Veri setindeki en uzun istem uzunluğunamax_completion_lengtheklenerek en az bu değere ayarlayın; belirtilmezse model yapılandırmasından çıkarılır.
Eğitimi kontrol eden parametreler
- loss_type (
str, isteğe bağlı, varsayılan"dapo") — Kullanılacak kayıp formülasyonunu belirtir. Desteklenen değerler ‘grpo’, ‘bnpo’, ‘dr_grpo’ ve ‘dapo’dur. ‘grpo’: Token düzeyindeki kayıpları, dizinin uzunluğuna göre normalize ederek birleştirir. Uzunluk yanlılığı nedeniyle önerilmez; bu yaklaşım, pozitif avantajlara sahip kısa tamamlamaları ve negatif avantajlara sahip uzun tamamlamaları tercih etme eğilimindedir. ‘dapo’ (varsayılan): Token düzeyindeki kayıpları, küresel birikimli toplu işlemdeki aktif token sayısına göre normalize ederek birleştirir. Bu yöntem, uzunluk yanlılığını ortadan kaldırmak için DAPO makalesinde tanıtılmıştır. ‘dr_grpo’: Token düzeyindeki kayıpları, küresel bir sabite göre normalize ederek birleştirir. Bu yöntem, uzunluk yanlılığını ortadan kaldırmak için Dr. GRPO makalesinde tanıtılmıştır. Sabitin değerimax_completion_lengthdeğerine karşılık gelir. ‘bnpo’: Token düzeyindeki kayıpları, yerel toplu işlemdeki aktif token sayısına göre normalize ederek birleştirir. Normalizasyonun yalnızca yerel toplu işlem üzerinde yapıldığına dikkat edin; bu nedenle, etkin toplu işlem boyutu sabit olsa da sonuçlar yerel toplu işlem boyutuna bağlı olarak hafifçe değişebilir.per_device_train_batch_size==1kullanıldığında, kayıp GRPO kaybına eşdeğerdir. - num_iterations (
int, isteğe bağlı, varsayılan1) — Parti başına yineleme sayısı (algoritmada μ olarak gösterilir). - generation_batch_size (
int, isteğe bağlı) — Üretim için kullanılacak parti boyutu.Noneise, etkin eğitim parti boyutuna ayarlanır:per_device_train_batch_size * num_processes * steps_per_generation. - steps_per_generation (
int, isteğe bağlı) — Her üretim için adım sayısı.Noneise, varsayılan olarakgradient_accumulation_stepsdeğerini alır. - mask_truncated_completions (
bool, isteğe bağlı, varsayılanFalse) — Etkinleştirildiğinde, kesilen tamamlamalar kayıp hesabından hariç tutulur; böylece yanlışlıkla cezalandırılmaları ve eğitim sırasında gürültüye yol açmaları önlenir. DAPO makalesine göre bu, eğitim kararlılığı için iyi bir uygulamadır.
experimental.sdpo.SDPOTrainer için yapılandırma sınıfı.
SDPOTrainer
sınıf trl.experimental.sdpo.SDPOTrainer
< source >( model: typing.Union[str, transformers.modeling_utils.PreTrainedModel, torch.nn.Module]reward_funcs: typing.Any | list[typing.Any] | None = Noneargs: trl.experimental.sdpo.sdpo_config.SDPOConfig | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | dict[str, datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonereward_processing_classes: transformers.tokenization_utils_base.PreTrainedTokenizerBase | list[transformers.tokenization_utils_base.PreTrainedTokenizerBase] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[typing.Optional[torch.optim.Optimizer], typing.Optional[torch.optim.lr_scheduler.LambdaLR]] = (None, None)peft_config = None )
Kendinden Damıtma Politikası Optimizasyonu (SDPO) için Trainer.
SDPO, on-policy optimizasyonu, modelin kendi yüksek ödüllü yörüngelerinden kendi kendine damıtma (self-distillation) ile güçlendirir. Dış bir öğretmen veya açık bir ödül modeli olmadan, tokenize edilmiş geri bildirimi yoğun bir öğrenme sinyaline dönüştürür. SDPO, geri bildirimle koşullandırılmış mevcut modeli bir kendi kendine öğretmen (self-teacher) olarak ele alır ve geri bildirimle bilgilendirilmiş sonraki token tahminlerini politika (policy) içine damıtır.
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 = 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. - 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.