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) dijelaskan dalam makalah Self-Distillation Enables Continual Learning oleh Idan Shenfeld, Mehul Damani, Jonas Hübotter, dan Pulkit Agrawal.

Pembelajaran berkelanjutan, yang memungkinkan model untuk memperoleh keterampilan dan pengetahuan baru tanpa menurunkan kemampuan yang sudah ada, tetap menjadi tantangan mendasar bagi model fondasi. Meskipun pembelajaran penguatan on-policy dapat mengurangi pelupaan, metode ini memerlukan fungsi reward eksplisit yang sering kali tidak tersedia. Pembelajaran dari demonstrasi ahli, alternatif utama, didominasi oleh penyetelan terawasi (SFT), yang secara inheren bersifat off-policy. Kami memperkenalkan Self-Distillation Fine-Tuning (SDFT), sebuah metode sederhana yang memungkinkan pembelajaran on-policy langsung dari demonstrasi. SDFT memanfaatkan pembelajaran dalam konteks dengan menggunakan model yang dikondisikan oleh demonstrasi sebagai gurunya sendiri, menghasilkan sinyal pelatihan on-policy yang mempertahankan kemampuan sebelumnya sambil memperoleh keterampilan baru. Di seluruh tugas pembelajaran keterampilan dan akuisisi pengetahuan, SDFT secara konsisten melampaui SFT, mencapai akurasi tugas baru yang lebih tinggi sambil secara substansial mengurangi pelupaan katastrofik. Dalam eksperimen pembelajaran berurutan, SDFT memungkinkan satu model untuk mengakumulasi beberapa keterampilan seiring waktu tanpa regresi kinerja, menetapkan distilasi on-policy sebagai jalur praktis menuju pembelajaran berkelanjutan dari demonstrasi.

Cara kerjanya

Fine-tuning supervised biasa melatih pada teks demonstrasi secara off-policy, yang cenderung menimpa kemampuan sebelumnya. SDFT belajar secara on-policy: siswa menghasilkan dari prompt polos, guru — model yang sama yang ditunjukkan prompt ditambah privileged_context dari contoh — menilai ulang token-token tersebut, dan distribusinya yang dikondisikan pada demonstrasi didistilasi kembali ke siswa. Guru dan siswa adalah satu jaringan yang hanya berbeda dalam apa yang mereka lihat, menciptakan loop distilasi self.

Memilih guru

teacher_model_kind memilih salinan model mana yang berperan sebagai teacher. "base" (default) membekukan bobot awal sebagai referensi tetap, sesuai dengan paper; "live" menggunakan ulang student saat ini sebagai self-teacher tanpa lag; "ema" mempertahankan exponential moving average, yang disinkronkan ulang setiap teacher_sync_steps langkah dengan laju teacher_update_rate. Di bawah PEFT, "base" diperoleh dengan menonaktifkan adapter selama forward teacher untuk memulihkan bobot dasar, dan "ema" dengan pelatihan pure-LoRA menyimpan moving average dalam adapter khusus "teacher" alih-alih salinan model kedua. "ema" dengan model PEFT non-pure-LoRA (mis. modules_to_save atau bias) tidak didukung, karena salinan EMA terpisah tidak dapat dicocokkan parameternya dengan student.

Secara default, model student menghasilkan teks dari prompt polos; atur generate_from_teacher=True untuk mengambil sampel dari prompt yang dikondisikan oleh demonstrasi, dengan mengorbankan fidelitas on-policy demi kualitas rollout yang lebih tinggi. Tujuan distilasi diatur oleh distillation_mode (default "topk_logits", dengan alternatif "full_logits" dan "sampled_token"), distillation_alpha, dan distillation_topk; num_loss_tokens_to_skip menghilangkan token penyelesaian awal dari loss. Pelatihan hanya menggunakan teks; generasi berjalan melalui transformers secara default, atau vLLM (mode colocate atau server) ketika use_vllm=True.

Penggunaan

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

Untuk menghasilkan dari prompt yang dikondisikan oleh teacher alih-alih prompt student, atur generate_from_teacher=True. Untuk menyesuaikan cara prompt teacher dibangun, atur teacher_prompt_template pada experimental.sdft.SDFTConfig.

Menyajikan model guru dari server vLLM

Dengan teacher_model_kind="live", guru adalah siswa saat ini, yang bobotnya sudah dipegang oleh server vLLM (bobot tersebut disinkronkan untuk generasi di setiap langkah). Atur use_teacher_server=True untuk menilai log-probabilitas guru di server yang sama tersebut, alih-alih menjalankan forward guru lokal yang terpisah, sehingga guru sepenuhnya dihapus dari langkah pelatihan:

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",
)

Saat menggunakan server guru:

  • use_vllm=True dan vllm_mode="server" wajib diisi
  • teacher_model_kind harus berupa "live" (server memegang bobot siswa saat ini)
  • distillation_mode harus berupa "sampled_token" (reverse KL pada token yang terealisasi) atau "topk_logits". Server mengembalikan log-prob top-k milik teacher itu sendiri, sehingga topk_logits melakukan distilasi pada dukungan top-k teacher (tidak dapat menggunakan dukungan student, berbeda dengan tujuan lokal); dengan teacher "live", kedua dukungan tersebut hampir berimpit. full_logits tidak tersedia.

Kolom dataset yang diharapkan

Setiap contoh harus menyediakan:

  • prompt: prompt yang ditampilkan ke siswa
  • privileged_context: hanya informasi tambahan khusus guru, seperti demonstrasi, petunjuk, atau umpan balik istimewa

Kedua prompt teks standar dan prompt percakapan didukung oleh penanganan prompt trainer.

Callback

Trainer mengeluarkan serangkaian kecil hook callback yang berguna untuk debugging, observabilitas, dan pengujian. Hook-hook ini dimaksudkan sebagai titik integrasi praktis untuk alur kerja self-distillation eksperimental.

Hook self-distilasi bersama:

  • on_self_distillation_batch_prepared: dipicu ketika batch self-distillation siap. Payload mencakup prompt_ids, completion_ids, dan old_per_token_logps ketika input clipping importance-sampling tersedia.
  • on_generation_batch_built: dipicu saat batch generasi baru yang dibuffer dibuat. Payload-nya mencakup generate_every dan steps_per_generation.

Hook khusus SDFT:

  • on_generation_prompts_selected: dipicu ketika SDFT memilih sumber prompt untuk generasi on-policy. Payload mencakup generation_prompts yang dipilih dan generation_prompt_text yang bersesuaian.

Skrip contoh

Gunakan examples/sdft_privileged_context/sdft_privileged_context.py untuk meluncurkan pelatihan SDFT dari baris perintah. Skrip ini mendukung LM kausal apa pun dari Hub, dataset lokal kustom melalui --dataset_path, dan PEFT/LoRA melalui flag standar ModelConfig.

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

Implementasi asli tersedia di idanshen/Self-Distillation.

SDFTConfig

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

Parameter yang mengontrol loss SDFT

  • distillation_alpha (float, opsional, default 0.5) — Koefisien interpolasi divergensi untuk distilasi logit top-k SDFT.
  • distillation_mode (Literal["sampled_token", "full_logits", "topk_logits"], opsional, default "topk_logits") — Mode tujuan distilasi. SDFT secara default menggunakan distilasi logit top-k.
  • distillation_topk (int, opsional, default 100) — Jumlah token teratas yang digunakan oleh tujuan logit top-k SDFT default.
  • distillation_is_clip (float, opsional, default 2.0) — Koefisien clipping untuk importance sampling dalam self-distillation. None menonaktifkan clipping.
  • distillation_add_tail (bool, opsional, default False) — Apakah akan menambahkan bucket ekor untuk massa probabilitas non-top-k.
  • num_loss_tokens_to_skip (int, opsional, default 0) — Jumlah token awal completion yang dikecualikan dari distillation loss.

Parameter yang mengontrol teacher

  • teacher_model_kind (str, opsional, default "base") — Pilihan guru semantik untuk SDFT. base menggunakan siswa awal, live menggunakan siswa saat ini, dan ema menggunakan guru yang dirata-rata secara eksponensial.
  • teacher_update_rate (float, opsional, default 0.05) — Laju pembaruan EMA yang digunakan saat teacher_model_kind="ema". Nilai 1.0 mengurangi pembaruan menjadi penimpaan keras (hard overwrite), yang secara berkala menyinkronkan ulang model guru ke bobot siswa saat ini.
  • teacher_sync_steps (int, opsional, default 1) — Jumlah langkah optimizer antara pembaruan teacher.

Parameter yang mengontrol generasi yang dikondisikan oleh teacher

  • generate_from_teacher (bool, opsional, default False) — Apakah generasi on-policy harus menggunakan prompt yang dikondisikan oleh teacher alih-alih prompt student.
  • teacher_prompt_template (str, opsional, default "{prompt}\n\n{privileged_context}") — Template yang digunakan untuk menggabungkan prompt siswa dan konteks istimewa menjadi prompt guru.

Parameter yang mengontrol model

  • model_init_kwargs (dict[str, Any], opsional) — Argumen kata kunci untuk transformers.AutoModelForCausalLM.from_pretrained, digunakan ketika argumen model dari SDFTTrainer diberikan sebagai string. Nilai revision juga digunakan saat memuat kelas pemrosesan.
  • trust_remote_code (bool, opsional, default False) — Apakah mengizinkan pemuatan model dan tokenizer yang menyertakan kode Python kustom dari Hub. Diteruskan ke from_pretrained dan from_pretrained, untuk student dan teacher.
  • disable_dropout (bool, opsional, default True) — Apakah akan menonaktifkan dropout pada model student dan teacher.

Parameter yang mengontrol pra-pemrosesan data

  • remove_unused_columns (bool, opsional, default False) — Apakah hanya kolom yang diperlukan oleh trainer yang dipertahankan dalam dataset. Biarkan ini sebagai False jika Anda menyediakan kolom tambahan (seperti privileged_context) yang dibutuhkan oleh trainer.
  • max_prompt_length (int, opsional, default 512) — Panjang maksimum prompt. Prompt yang lebih panjang akan dipangkas dari sisi kiri.
  • shuffle_dataset (bool, opsional, default True) — Apakah dataset pelatihan akan diacak.

Parameter yang mengontrol generasi

  • num_generations (int, opsional, default 8) — Jumlah generasi yang akan disampelkan. Ukuran batch efektif (num_processes per_device_batch_size gradient_accumulation_steps) harus dapat dibagi habis oleh nilai ini.
  • num_generations_eval (int, opsional) — Jumlah generasi yang akan disampelkan selama evaluasi. Hal ini memungkinkan penggunaan lebih sedikit generasi selama evaluasi untuk menghemat komputasi. Jika None, menggunakan nilai dari num_generations.
  • max_completion_length (int, opsional, defaultnya 256) — Panjang maksimum dari penyelesaian yang dihasilkan.
  • temperature (float, opsional, default 1.0) — Suhu untuk sampling. Semakin tinggi suhu, semakin acak hasil pelengkapannya.
  • top_p (float, opsional, default 1.0) — Float yang mengontrol probabilitas kumulatif dari token teratas yang dipertimbangkan. Harus berada dalam (0, 1]. Atur ke 1.0 untuk mempertimbangkan semua token.
  • top_k (int, opsional, default 0) — Jumlah token kosakata dengan probabilitas tertinggi yang dipertahankan untuk top-k-filtering. Jika 0, top-k-filtering dinonaktifkan dan semua token dipertimbangkan.
  • min_p (float, opsional) — Probabilitas token minimum, yang akan diskalakan oleh probabilitas token yang paling mungkin. Nilainya harus berada antara 0.0 dan 1.0. Nilai tipikal berada dalam rentang 0.01-0.2.
  • repetition_penalty (float, opsional, default 1.0) — Float yang menghukum token baru berdasarkan apakah token tersebut muncul dalam prompt dan teks yang telah dihasilkan sejauh ini. Nilai > 1.0 mendorong model untuk menggunakan token baru, sedangkan nilai < 1.0 mendorong model untuk mengulang token.
  • cache_implementation (str, opsional) — Implementasi metode cache untuk generasi yang lebih cepat ketika use_vllm diatur ke False.
  • generation_kwargs (dict[str, Any], opsional) — Argumen kata kunci tambahan untuk diteruskan ke GenerationConfig (jika menggunakan transformers) atau SamplingParams (jika menggunakan vLLM) saat mengambil sampel penyelesaian. Ini dapat digunakan untuk lebih menyesuaikan perilaku generasi, seperti mengatur suppress_tokens, num_beams, dll. Jika berisi kunci yang bertentangan dengan parameter generasi lainnya (seperti min_p, top_p, dll.), mereka akan menimpanya.
  • chat_template_kwargs (dict[str, Any], opsional) — Argumen kata kunci tambahan untuk diteruskan ke fungsi apply_chat_template saat menghasilkan kelengkapan.
  • ds3_gather_for_generation (bool, opsional, default True) — Pengaturan ini berlaku untuk DeepSpeed ZeRO-3. Jika diaktifkan, bobot model kebijakan akan dikumpulkan untuk generasi, sehingga meningkatkan kecepatan generasi. Namun, menonaktifkan opsi ini memungkinkan pelatihan model yang melebihi kapasitas VRAM satu GPU, meskipun dengan biaya kecepatan generasi yang lebih lambat. Menonaktifkan opsi ini tidak kompatibel dengan generasi vLLM.

Parameter yang mengontrol akselerasi generasi yang didukung oleh vLLM

  • use_vllm (bool, opsional, default False) — Apakah akan menggunakan vLLM untuk menghasilkan kelengkapan. Jika diatur ke True, trainer akan menggunakan vLLM untuk generasi alih-alih model.generate() default. Memerlukan vllm terpasang.
  • use_teacher_server (bool, opsional, default False) — Hitung logprobs guru dari server generasi vLLM yang berjalan, bukan dari forward guru lokal. Hanya didukung untuk teacher_model_kind='live' dengan use_vllm=True dan vllm_mode='server', serta distillation_mode dalam {‘sampled_token’, ‘topk_logits’} (server mengembalikan top-k logprobs guru, bukan kosakata penuh; topk_logits melakukan distilasi pada dukungan top-k milik guru itu sendiri).
  • vllm_mode (str, opsional, default "colocate") — Mode yang digunakan untuk integrasi vLLM ketika use_vllm diatur ke True. Harus salah satu dari 'server' atau 'colocate'. 'server': Trainer akan mengirim permintaan generasi ke server vLLM terpisah. Pastikan server vLLM sedang berjalan (mulai dengan vllm serve). 'colocate': vLLM akan berjalan dalam proses yang sama dan berbagi GPU pelatihan. Ini menghindari kebutuhan akan server terpisah tetapi dapat menyebabkan perebutan sumber daya dengan pelatihan.
  • vllm_model_impl (str, opsional, default "vllm") — Implementasi model yang digunakan untuk vLLM. Harus salah satu dari transformers atau vllm. transformers: Gunakan backend transformers untuk implementasi model. vllm: Gunakan pustaka vllm untuk implementasi model.
  • vllm_enable_sleep_mode (bool, opsional, default False) — Aktifkan mode tidur vLLM untuk memindahkan bobot/cache selama langkah optimizer. Menjaga penggunaan memori GPU tetap rendah, tetapi membangunkan mesin menambah latensi transfer host–perangkat.
  • vllm_server_base_url (str, opsional) — URL dasar untuk server vLLM (misalnya, ‘http://localhost:8000’). Jika disediakan, vllm_server_host dan vllm_server_port diabaikan.
  • vllm_server_host (str, opsional, default "0.0.0.0") — Host dari server vLLM yang akan dihubungi. Diabaikan jika vllm_server_base_url disediakan.
  • vllm_server_port (int, opsional, default 8000) — Port server vLLM yang akan dihubungi. Diabaikan jika vllm_server_base_url disediakan.
  • vllm_group_port (int, opsional, default 51216) — Nomor port untuk grup pembaruan bobot. Ini digunakan untuk berkomunikasi dengan server vLLM. Kecuali port tersebut sedang digunakan, tidak perlu diubah.
  • vllm_server_timeout (float, opsional, default 240.0) — Durasi total timeout dalam detik untuk menunggu server vLLM siap. Jika server belum siap setelah timeout, ConnectionError akan dilempar.
  • vllm_tensor_parallel_size (int, opsional, default 1) — Mengontrol ukuran paralel tensor untuk vLLM. Pengaturan ini hanya berlaku ketika vllm_mode diatur ke 'colocate'. Jika Anda menggunakan vllm_mode='server', parameter ini harus diteruskan secara terpisah saat meluncurkan server vLLM melalui flag --vllm_tensor_parallel_size.
  • vllm_gpu_memory_utilization (float, opsional, default 0.3) — Mengontrol utilisasi memori GPU untuk vLLM. Pengaturan ini hanya berlaku ketika vllm_mode diatur ke 'colocate'. Jika Anda menggunakan vllm_mode='server', parameter ini harus diteruskan secara terpisah saat meluncurkan server vLLM melalui flag --vllm_gpu_memory_utilization.
  • vllm_max_model_length (int, opsional) — Jendela konteks untuk vLLM. Atur nilainya setidaknya sama dengan panjang prompt maksimum dalam dataset ditambah max_completion_length; jika diabaikan, nilainya akan disimpulkan dari konfigurasi model.

Parameter yang mengontrol pelatihan

  • num_iterations (int, opsional, default 1) — Jumlah iterasi per batch (dilambangkan sebagai μ dalam algoritma).
  • generation_batch_size (int, opsional) — Ukuran batch yang digunakan untuk generasi. Jika None, nilainya secara default adalah ukuran batch pelatihan efektif: per_device_train_batch_size * num_processes * steps_per_generation.
  • steps_per_generation (int, opsional) — Jumlah langkah per generasi. Jika None, nilainya secara default adalah gradient_accumulation_steps.

Kelas konfigurasi untuk experimental.sdft.SDFTTrainer.

SDFTTrainer

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

Trainer untuk self-distillation on-policy bergaya SDFT dengan prompt guru yang eksplisit.

latih

< >

( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → ~trainer_utils.TrainOutput

Parameter

  • resume_from_checkpoint (str atau bool, opsional) — Jika berupa str, jalur lokal ke checkpoint yang disimpan oleh instance Trainer sebelumnya. Jika berupa bool dan bernilai True, muat checkpoint terakhir di args.output_dir yang disimpan oleh instance Trainer sebelumnya. Jika ada, pelatihan akan dilanjutkan dari status model/optimizer/scheduler yang dimuat di sini.
  • trial (optuna.Trial atau dict[str, Any], opsional) — Jalankan trial atau kamus hiperparameter untuk pencarian hiperparameter.
  • ignore_keys_for_eval (list[str], opsional) — Daftar kunci dalam output model Anda (jika berupa dictionary) yang harus diabaikan saat mengumpulkan prediksi untuk evaluasi selama pelatihan.

Mengembalikan

~trainer_utils.TrainOutput

Objek yang berisi jumlah langkah global, kerugian pelatihan, dan metrik.

Titik masuk utama pelatihan.

save_model

< >

( output_dir: str | None = None_internal_call: bool = False )

Akan menyimpan model, sehingga Anda dapat memuatnya kembali menggunakan from_pretrained().

Hanya akan menyimpan dari proses utama.

push_to_hub

< >

( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )

Parameter

  • commit_message (str, opsional, default "End of training") — Pesan untuk commit saat melakukan push.
  • blocking (bool, opsional, default True) — Apakah fungsi harus hanya mengembalikan nilai setelah git push selesai.
  • token (str, opsional, defaultnya None) — Token dengan izin tulis untuk menimpa argumen asli Trainer.
  • revision (str, opsional) — Revisi git untuk di-commit. Secara default menggunakan head dari branch “main”.
  • kwargs (dict[str, Any], opsional) — Argumen kata kunci tambahan yang diteruskan ke ~Trainer.create_model_card.

Unggah self.model dan self.processing_class ke 🤗 model hub di repo self.args.hub_model_id.

Update on GitHub