TRL documentation

SDFT

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

SDFT

Self-Distilled Fine-Tuning (SDFT), Idan Shenfeld, Mehul Damani, Jonas Hübotter ve Pulkit Agrawal tarafından kaleme alınan Self-Distillation Enables Continual Learning makalesinde tanımlanmıştır.

Mevcut yetenekleri zayıflatmadan modellere yeni beceriler ve bilgiler kazandırmayı mümkün kılan sürekli öğrenme, temel modeller için temel bir zorluk olmaya devam etmektedir. On-policy pekiştirmeli öğrenme unutmayı azaltabilir, ancak çoğu zaman kullanılamayan açık ödül fonksiyonları gerektirir. Uzman gösterimlerinden öğrenme, birincil alternatif olarak, doğası gereği off-policy olan denetimli ince ayar (SFT) tarafından baskılanmaktadır. Kendi Kendine Damıtma İnce Ayarı (SDFT) adını verdiğimiz, gösterimlerden doğrudan on-policy öğrenmeyi mümkün kılan basit bir yöntem sunuyoruz. SDFT, bir gösterim koşullu modeli kendi öğretmeni olarak kullanarak bağlam içi öğrenmeden (in-context learning) yararlanmakta ve yeni beceriler kazanırken önceki yetenekleri koruyan on-policy eğitim sinyalleri üretmektedir. Beceri öğrenme ve bilgi edinme görevlerinde SDFT, SFT'yi tutarlı bir şekilde geride bırakmakta; yeni görev doğruluğunu artırırken felaket unutmayı (catastrophic forgetting) önemli ölçüde azaltmaktadır. Sıralı öğrenme deneylerinde SDFT, tek bir modelin performans düşüşü olmadan zamanla birden fazla beceri biriktirmesini sağlayarak, gösterimlerden sürekli öğrenmeye giden pratik bir yol olarak on-policy damıtmayı (distillation) ortaya koymaktadır.

Nasıl çalışır

Düz denetimli ince ayar, gösterim metnini politika dışı (off-policy) olarak eğitir ve bu durum, önceki yeteneklerin üzerine yazılmasına eğilimlidir. SDFT bunun yerine politika içi (on-policy) öğrenir: öğrenci, düz prompt üzerinden üretim yapar; öğretmen — yani prompt ile örneğin privileged_context değerini gören aynı model — bu tokenları yeniden puanlar ve gösterim koşullu dağılımı öğrenciye damıtılarak geri aktarılır. Öğretmen ve öğrenci, yalnızca gördükleri farklı olan tek bir ağdır ve bu durum bir öz-damıtma döngüsü oluşturur.

Öğretmen seçimi

teacher_model_kind, modelin hangi kopyasının öğretmen olarak kullanılacağını seçer. "base" (varsayılan), başlangıç ağırlıklarını sabit bir referans olarak dondurur ve makaleyle uyumludur; "live", sıfır gecikmeli bir öz-öğretmen için mevcut öğrenciyi yeniden kullanır; "ema", üstel hareketli ortalama (exponential moving average) sürdürür ve her teacher_sync_steps adımda teacher_update_rate oranında yeniden senkronize edilir. PEFT altında, "base", öğretmen ileri geçişinde (forward) adaptörün devre dışı bırakılmasıyla temel ağırlıkların geri kazanılmasıyla elde edilir ve saf LoRA eğitiminde "ema", ikinci bir model kopyası yerine hareketli ortalama, ayrı bir "teacher" adaptöründe tutulur. Saf olmayan LoRA PEFT modelleriyle (ör. modules_to_save veya bias) "ema" desteklenmez, çünkü ayrı bir EMA kopyası öğrenciyle parametre eşleşmesi yapılamaz.

Varsayılan olarak öğrenci, düz istemden (prompt) üretim yapar; bunun yerine gösterim koşullu istemden örnek almak için generate_from_teacher=True değerini ayarlayın; bu, on-policy sadakatini daha yüksek kaliteli rollouts ile takas eder. Distilasyon hedefi distillation_mode (varsayılan olarak "topk_logits", alternatif olarak "full_logits" ve "sampled_token"), distillation_alpha ve distillation_topk ile belirlenir; num_loss_tokens_to_skip, kayıptan (loss) baştaki tamamlama tokenlarını düşürür. Eğitim yalnızca metin tabanlıdır; üretim varsayılan olarak transformers üzerinden çalışır, use_vllm=True olduğunda ise vLLM (colocate veya server modu) kullanılır.

Kullanım

from datasets import Dataset

from trl.experimental.sdft import SDFTConfig, SDFTTrainer

dataset = Dataset.from_dict(
    {
        "prompt": [[{"role": "user", "content": "Solve 2+2."}]],
        "privileged_context": ["Example answer: 4."],
    }
)

training_args = SDFTConfig(
    output_dir="sdft-model",
    distillation_alpha=0.5,
    distillation_mode="topk_logits",
    distillation_topk=5,
    max_completion_length=64,
)

trainer = SDFTTrainer(
    model="Qwen/Qwen2.5-1.5B-Instruct",
    args=training_args,
    train_dataset=dataset,
)
trainer.train()

Öğrenci istemci yerine öğretmen koşullu istemciden üretmek için generate_from_teacher=True değerini ayarlayın. Öğretmen istemcisinin nasıl oluşturulacağını özelleştirmek için experimental.sdft.SDFTConfig üzerinde teacher_prompt_template değerini ayarlayın.

Öğ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 = SDFTConfig(
    output_dir="sdft-model",
    use_vllm=True,
    vllm_mode="server",
    teacher_model_kind="live",
    use_teacher_server=True,
    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_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.

Beklenen veri seti sütunları

Her örnek şunları sağlamalıdır:

  • prompt: öğrenciye yönelik istem
  • privileged_context: bir gösterim, ipucu veya ayrıcalıklı geri bildirim gibi yalnızca öğretmen için ek bilgiler

Eğiticinin istem işleme mekanizması hem standart metin istemlerini hem de sohbet istemlerini destekler.

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.

SDFT'ye özgü kancası:

  • on_generation_prompts_selected: SDFT, on-policy üretim için prompt kaynağını seçtiğinde tetiklenir. Yük, seçilen generation_prompts ve ilgili generation_prompt_text değerlerini içerir.

Örnek betik

Komut satırından SDFT eğitimini başlatmak için examples/sdft_privileged_context/sdft_privileged_context.py dosyasını kullanın. Betik, Hub’daki herhangi bir nedensel LM’yi, --dataset_path ile özel yerel veri setlerini ve standart ModelConfig bayrakları ile PEFT/LoRA’yı destekler.

python examples/sdft_privileged_context/sdft_privileged_context.py \
    --model_name_or_path Qwen/Qwen3.5-0.8B \
    --dataset_name your-org/your-dataset \
    --output_dir outputs/sdft-qwen3.5-0.8b \
    --per_device_train_batch_size 1 \
    --gradient_accumulation_steps 16 \
    --learning_rate 2e-5 \
    --max_prompt_length 1024 \
    --max_completion_length 512 \
    --generate_from_teacher \
    --teacher_model_kind ema \
    --teacher_sync_steps 1 \
    --teacher_update_rate 0.05 \
    --eval_strategy steps \
    --eval_steps 50 \
    --report_to wandb

Orijinal uygulama idanshen/Self-Distillation adresinde mevcuttur.

SDFTConfig

sınıf trl.experimental.sdft.SDFTConfig

< >

( 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 = 1teacher_model_kind: str = 'base'teacher_update_rate: float = 0.05teacher_sync_steps: int = 1distillation_alpha: float = 0.5distillation_mode: typing.Literal['sampled_token', 'full_logits', 'topk_logits'] = 'topk_logits'distillation_topk: int | None = 100distillation_is_clip: float | None = 2.0distillation_add_tail: bool = Falsegenerate_from_teacher: bool = Falseteacher_prompt_template: str = '{prompt}\n\n{privileged_context}'num_loss_tokens_to_skip: int = 0 )

SDFT kaybını kontrol eden parametreler

  • distillation_alpha (float, isteğe bağlı, varsayılan 0.5) — SDFT top-k logit damıtması için ayrılma interpolasyon katsayısı.
  • distillation_mode (Literal["sampled_token", "full_logits", "topk_logits"], isteğe bağlı, varsayılan "topk_logits") — Distillation hedef modu. SDFT varsayılan olarak top-k logit distillation kullanır.
  • distillation_topk (int, isteğe bağlı, varsayılan 100) — Varsayılan SDFT top-k logit hedefinin kullandığı üst token sayısı.
  • 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.
  • num_loss_tokens_to_skip (int, isteğe bağlı, varsayılan 0) — Damıtma kaybından hariç tutulacak başlangıç tamamlama jetonlarının sayısı.

Öğretmeni kontrol eden parametreler

  • teacher_model_kind (str, isteğe bağlı, varsayılan "base") — SDFT için 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) — teacher_model_kind="ema" kullanıldığında EMA güncelleme oranı olarak kullanılır. 1.0 değeri, güncellemeyi sert bir yazma işlemine indirger ve öğretmeni periyodik olarak mevcut öğrenci ağırlıklarıyla yeniden senkronize eder.
  • teacher_sync_steps (int, isteğe bağlı, varsayılan 1) — Öğretmen güncellemeleri arasındaki optimizör adım sayısı.

Öğretmen koşullu üretimi kontrol eden parametreler

  • generate_from_teacher (bool, isteğe bağlı, varsayılan False) — On-policy üretimde, öğrenci istemci yerine öğretmen koşullu istemcinin kullanılıp kullanılmayacağı.
  • teacher_prompt_template (str, isteğe bağlı, varsayılan "{prompt}\n\n{privileged_context}") — Öğrenci istemini ve ayrıcalıklı bağlamı öğretmen istemine birleştirmek için kullanılan şablon.

Modeli kontrol eden parametreler

  • model_init_kwargs (dict[str, Any], isteğe bağlı) — SDFTTrainer'in model argümanı bir dize olarak verildiğinde kullanılan, transformers.AutoModelForCausalLM.from_pretrained için anahtar kelime argümanları. revision değeri, işleme sınıfı yüklenirken de kullanılır.
  • trust_remote_code (bool, isteğe bağlı, varsayılan False) — Hub'dan özel Python kodu içeren modellerin ve tokenizer'ların yüklenmesine izin verilip verilmeyeceğini belirtir. Hem öğrenci hem de öğretmen için from_pretrained ve from_pretrained işlevlerine iletilir.
  • disable_dropout (bool, isteğe bağlı, varsayılan True) — Öğrenci ve öğretmen modellerinde dropout'un devre dışı bırakılıp bırakılmayacağı.

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

  • remove_unused_columns (bool, isteğe bağlı, varsayılan False) — Veri setinde yalnızca trainer'ın gerektirdiği sütunların korunup korunmayacağını belirtir. Trainer'ın ihtiyaç duyduğu ek sütunlar (örneğin privileged_context) sağlıyorsanız bunu False olarak bırakın.
  • 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 ve vllm_mode='server' kullanıldığında ve distillation_mode {‘sampled_token’, ‘topk_logits’} kümesinde olduğunda 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

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

experimental.sdft.SDFTTrainer için yapılandırma sınıfı.

SDFTTrainer

sınıf trl.experimental.sdft.SDFTTrainer

< >

( model: typing.Union[str, transformers.modeling_utils.PreTrainedModel, torch.nn.Module]args: trl.experimental.sdft.sdft_config.SDFTConfig | 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 = 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: PeftConfig | None = None )

Açık öğretmen istemcileriyle SDFT tarzı politika-üstü öz-distilasyon için Trainer.

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