TRL documentation

SDPO

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

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 istem
  • privileged_context: include_environment_feedback=True kullanı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=True ve vllm_mode="server" zorunludur
  • teacher_model_kind değeri "live" olmalıdır (sunucu, güncel öğrenci ağırlıklarını barındırır)
  • distillation_weight değeri 1.0 olmalı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çin topk_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_logits kullanı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ük prompt_ids, completion_ids ve old_per_token_logps içerir.
  • on_generation_batch_built: yeni bir tamponlu üretim partisi oluşturulduğunda tetiklenir. Yük, generate_every ve steps_per_generation değ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_mask ve self_distillation_mask iç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 no

SDPOConfig

sınıf trl.experimental.sdpo.SDPOConfig

< >

( 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ılan 0.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 ve 0.001 değeri kullanılır.
  • epsilon (float, optional, defaults to 0.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, epsilon argümanında belirtilen alt sınır değeriyle aynı varsayılan değeri kullanır. DAPO makalesi 0.28 değ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. None ise, tüm ödüller 1.0 ağırlığıyla eşit şekilde ağırlıklandırılır.
  • scale_rewards (str veya bool, isteğe bağlı, varsayılan "group") — Ödüllere uygulanacak ölçekleme stratejisini belirtir. Desteklenen değerler şunlardır: True veya '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. False veya '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ılan 1.0) — Politika ve öz-distilasyon hedefleri arasındaki konveks kombinasyon ağırlığı. Kayıp (1 - distillation_weight) * policy_loss + distillation_weight * distillation_loss olarak hesaplanır. [0, 1] aralığında olmalıdır. 1.0 (varsayılan) tamamen öz-distilasyon üzerinde eğitim yapar, 0.0 standart GRPO tarzı politika gradyanına geri döner, ara değerler ise her ikisini birleştirir.
  • distillation_alpha (float, isteğe bağlı, varsayılan 1.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_token varsayılan SDPO modudur ve distillation_alpha=1.0 gerektirir.
  • distillation_topk (int, isteğe bağlı) — Logit düzeyinde SDPO için top-k yaklaşımı. distillation_mode=topk_logits olduğunda ayarlanmalıdır, aksi halde ayarlanmamalıdır.
  • distillation_is_clip (float, isteğe bağlı, varsayılan 2.0) — Kendine damıtma (self-distillation) içindeki önem örneklemesi için kırpma katsayısı. None kırpma işlemini devre dışı bırakır.
  • distillation_add_tail (bool, isteğe bağlı, varsayılan False) — 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. base başlangıç öğrencisini, live mevcut öğrenciyi ve ema üstel ortalama alınmış öğretmeni kullanır.
  • teacher_update_rate (float, isteğe bağlı, varsayılan 0.05) — EMA öğretmen senkronizasyonu için kullanılan öğretmen güncelleme oranı.
  • teacher_sync_steps (int, isteğe bağlı, varsayılan 1) — 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ılan True) — 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ılan 1.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ılan True) — Model doğru yanıtı ürettiğinde yeniden istek atlamayı atlayın.
  • max_reprompt_len (int, isteğe bağlı, varsayılan 10240) — 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ılan False) — 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ılan False) — 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ılan False) — 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ılan 10) — 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ılan 1e-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'in model argümanı bir dize olarak verildiğinde kullanılan, transformers.AutoModelForCausalLM.from_pretrained için anahtar kelime argümanları. İşleme sınıfları yüklenirken revision değeri de kullanılır.
  • trust_remote_code (bool, isteğe bağlı, varsayılan False) — Hub'dan özel Python kodu içeren modellerin ve tokenizer'ların yüklenmesine izin verilip verilmeyeceğini belirtir. from_pretrained ve from_pretrained işlevlerine aktarılır. Ödül modeli ve ödül tokenizer'ı yüklemelerine de uygulanır.
  • disable_dropout (bool, isteğe bağlı, varsayılan True) — 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ılan False) — 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ğeri False olarak bırakmalısınız.
  • max_prompt_length (int, isteğe bağlı, varsayılan 512) — Maksimum istem uzunluğu. Daha uzun istemler soldan kırpılır.
  • shuffle_dataset (bool, isteğe bağlı, varsayılan True) — 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ılan 8) — Ö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. None ise num_generations değeri kullanılır.
  • max_completion_length (int, isteğe bağlı, varsayılan 256) — Oluşturulan tamamlamanın maksimum uzunluğu.
  • temperature (float, isteğe bağlı, varsayılan 1.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ılan 1.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ılan 0) — Top-k filtreleme için en yüksek olasılığa sahip tutulacak sözlük belirteçlerinin sayısı. 0 ise 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ılan 1.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 örneklenirken GenerationConfig (transformers kullanılıyorsa) veya SamplingParams (vLLM kullanılıyorsa) fonksiyonuna iletilecek ek anahtar kelime argümanları. Üretim davranışını daha da özelleştirmek için, örneğin suppress_tokens, num_beams gibi ayarları yapmak amacıyla kullanılabilir. Diğer üretim parametreleriyle (örneğin min_p, top_p vb.) çakışan anahtarlar içeriyorsa, bu parametrelerin üzerine yazar.
  • chat_template_kwargs (dict[str, Any], isteğe bağlı) — Tamamlamalar oluşturulurken apply_chat_template fonksiyonuna iletilecek ek anahtar kelime argümanları.
  • ds3_gather_for_generation (bool, isteğe bağlı, varsayılan True) — 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ılan False) — Tamamlamaları üretmek için vLLM kullanılacak mı? True olarak ayarlanırsa, eğitimci üretim için varsayılan model.generate() yerine vLLM kullanır. Bunun için vllm paketinin yüklü olması gerekir.
  • use_teacher_server (bool, isteğe bağlı, varsayılan False) — Öğretmen logprobs'larını yerel bir öğretmen ileri geçişi yerine çalışan vLLM üretim sunucusundan hesaplar. Yalnızca teacher_model_kind='live' ile use_vllm=True, vllm_mode='server', distillation_weight=1.0 (saf damıtma) ve distillation_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_vllm True olarak 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 serve ile 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ı. transformers veya vllm değerlerinden biri olmalıdır. transformers: Model uygulaması için transformers arka ucunu kullanın. vllm: Model uygulaması için vllm kitaplığını kullanın.
  • vllm_enable_sleep_mode (bool, isteğe bağlı, varsayılan False) — 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ğinde vllm_server_host ve vllm_server_port yok 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ılan 8000) — 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ılan 51216) — 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ılan 240.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 bir ConnectionError yükseltilir.
  • vllm_tensor_parallel_size (int, isteğe bağlı, varsayılan 1) — vLLM için tensor paralel boyutunu kontrol eder. Bu ayar yalnızca vllm_mode değeri 'colocate' olarak ayarlandığında geçerlidir. vllm_mode='server' kullanıyorsanız, bu parametrenin vLLM sunucusunu --vllm_tensor_parallel_size bayrağıyla başlatırken ayrı olarak geçirilmesi gerekir.
  • vllm_gpu_memory_utilization (float, isteğe bağlı, varsayılan 0.3) — vLLM için GPU bellek kullanımını kontrol edin. Bu ayar yalnızca vllm_mode 'colocate' olarak ayarlandığında geçerlidir. vllm_mode='server' kullanıyorsanız, bu parametrenin vLLM sunucusunu --vllm_gpu_memory_utilization bayrağı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ğuna max_completion_length eklenerek 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ğeri max_completion_length değ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==1 kullanıldığında, kayıp GRPO kaybına eşdeğerdir.
  • num_iterations (int, isteğe bağlı, varsayılan 1) — 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. None ise, 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ı. None ise, varsayılan olarak gradient_accumulation_steps değerini alır.
  • mask_truncated_completions (bool, isteğe bağlı, varsayılan False) — 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

< >

( 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

< >

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

Update on GitHub