TRL documentation
SDFT
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=Truedanvllm_mode="server"wajib diisiteacher_model_kindharus berupa"live"(server memegang bobot siswa saat ini)distillation_modeharus berupa"sampled_token"(reverse KL pada token yang terealisasi) atau"topk_logits". Server mengembalikan log-prob top-k milik teacher itu sendiri, sehinggatopk_logitsmelakukan distilasi pada dukungan top-k teacher (tidak dapat menggunakan dukungan student, berbeda dengan tujuan lokal); dengan teacher"live", kedua dukungan tersebut hampir berimpit.full_logitstidak tersedia.
Kolom dataset yang diharapkan
Setiap contoh harus menyediakan:
prompt: prompt yang ditampilkan ke siswaprivileged_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 mencakupprompt_ids,completion_ids, danold_per_token_logpsketika input clipping importance-sampling tersedia.on_generation_batch_built: dipicu saat batch generasi baru yang dibuffer dibuat. Payload-nya mencakupgenerate_everydansteps_per_generation.
Hook khusus SDFT:
on_generation_prompts_selected: dipicu ketika SDFT memilih sumber prompt untuk generasi on-policy. Payload mencakupgeneration_promptsyang dipilih dangeneration_prompt_textyang 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 wandbImplementasi asli tersedia di idanshen/Self-Distillation.
SDFTConfig
kelas trl.experimental.sdft.SDFTConfig
< 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 = 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, default0.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, default100) — Jumlah token teratas yang digunakan oleh tujuan logit top-k SDFT default. - distillation_is_clip (
float, opsional, default2.0) — Koefisien clipping untuk importance sampling dalam self-distillation.Nonemenonaktifkan clipping. - distillation_add_tail (
bool, opsional, defaultFalse) — Apakah akan menambahkan bucket ekor untuk massa probabilitas non-top-k. - num_loss_tokens_to_skip (
int, opsional, default0) — 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.basemenggunakan siswa awal,livemenggunakan siswa saat ini, danemamenggunakan guru yang dirata-rata secara eksponensial. - teacher_update_rate (
float, opsional, default0.05) — Laju pembaruan EMA yang digunakan saatteacher_model_kind="ema". Nilai1.0mengurangi pembaruan menjadi penimpaan keras (hard overwrite), yang secara berkala menyinkronkan ulang model guru ke bobot siswa saat ini. - teacher_sync_steps (
int, opsional, default1) — Jumlah langkah optimizer antara pembaruan teacher.
Parameter yang mengontrol generasi yang dikondisikan oleh teacher
- generate_from_teacher (
bool, opsional, defaultFalse) — 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 untuktransformers.AutoModelForCausalLM.from_pretrained, digunakan ketika argumenmodeldariSDFTTrainerdiberikan sebagai string. Nilairevisionjuga digunakan saat memuat kelas pemrosesan. - trust_remote_code (
bool, opsional, defaultFalse) — 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, defaultTrue) — Apakah akan menonaktifkan dropout pada model student dan teacher.
Parameter yang mengontrol pra-pemrosesan data
- remove_unused_columns (
bool, opsional, defaultFalse) — Apakah hanya kolom yang diperlukan oleh trainer yang dipertahankan dalam dataset. Biarkan ini sebagaiFalsejika Anda menyediakan kolom tambahan (sepertiprivileged_context) yang dibutuhkan oleh trainer. - max_prompt_length (
int, opsional, default512) — Panjang maksimum prompt. Prompt yang lebih panjang akan dipangkas dari sisi kiri. - shuffle_dataset (
bool, opsional, defaultTrue) — Apakah dataset pelatihan akan diacak.
Parameter yang mengontrol generasi
- num_generations (
int, opsional, default8) — 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. JikaNone, menggunakan nilai darinum_generations. - max_completion_length (
int, opsional, defaultnya256) — Panjang maksimum dari penyelesaian yang dihasilkan. - temperature (
float, opsional, default1.0) — Suhu untuk sampling. Semakin tinggi suhu, semakin acak hasil pelengkapannya. - top_p (
float, opsional, default1.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, default0) — Jumlah token kosakata dengan probabilitas tertinggi yang dipertahankan untuk top-k-filtering. Jika0, 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, default1.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 keGenerationConfig(jika menggunakan transformers) atauSamplingParams(jika menggunakan vLLM) saat mengambil sampel penyelesaian. Ini dapat digunakan untuk lebih menyesuaikan perilaku generasi, seperti mengatursuppress_tokens,num_beams, dll. Jika berisi kunci yang bertentangan dengan parameter generasi lainnya (sepertimin_p,top_p, dll.), mereka akan menimpanya. - chat_template_kwargs (
dict[str, Any], opsional) — Argumen kata kunci tambahan untuk diteruskan ke fungsiapply_chat_templatesaat menghasilkan kelengkapan. - ds3_gather_for_generation (
bool, opsional, defaultTrue) — 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, defaultFalse) — Apakah akan menggunakan vLLM untuk menghasilkan kelengkapan. Jika diatur keTrue, trainer akan menggunakan vLLM untuk generasi alih-alih model.generate() default. Memerlukanvllmterpasang. - use_teacher_server (
bool, opsional, defaultFalse) — Hitung logprobs guru dari server generasi vLLM yang berjalan, bukan dari forward guru lokal. Hanya didukung untukteacher_model_kind='live'denganuse_vllm=Truedanvllm_mode='server', sertadistillation_modedalam {‘sampled_token’, ‘topk_logits’} (server mengembalikan top-k logprobs guru, bukan kosakata penuh;topk_logitsmelakukan distilasi pada dukungan top-k milik guru itu sendiri). - vllm_mode (
str, opsional, default"colocate") — Mode yang digunakan untuk integrasi vLLM ketikause_vllmdiatur keTrue. Harus salah satu dari'server'atau'colocate'.'server': Trainer akan mengirim permintaan generasi ke server vLLM terpisah. Pastikan server vLLM sedang berjalan (mulai denganvllm 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 daritransformersatauvllm.transformers: Gunakan backendtransformersuntuk implementasi model.vllm: Gunakan pustakavllmuntuk implementasi model. - vllm_enable_sleep_mode (
bool, opsional, defaultFalse) — 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_hostdanvllm_server_portdiabaikan. - 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, default8000) — Port server vLLM yang akan dihubungi. Diabaikan jika vllm_server_base_url disediakan. - vllm_group_port (
int, opsional, default51216) — 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, default240.0) — Durasi total timeout dalam detik untuk menunggu server vLLM siap. Jika server belum siap setelah timeout,ConnectionErrorakan dilempar. - vllm_tensor_parallel_size (
int, opsional, default1) — Mengontrol ukuran paralel tensor untuk vLLM. Pengaturan ini hanya berlaku ketikavllm_modediatur ke'colocate'. Jika Anda menggunakanvllm_mode='server', parameter ini harus diteruskan secara terpisah saat meluncurkan server vLLM melalui flag--vllm_tensor_parallel_size. - vllm_gpu_memory_utilization (
float, opsional, default0.3) — Mengontrol utilisasi memori GPU untuk vLLM. Pengaturan ini hanya berlaku ketikavllm_modediatur ke'colocate'. Jika Anda menggunakanvllm_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 ditambahmax_completion_length; jika diabaikan, nilainya akan disimpulkan dari konfigurasi model.
Parameter yang mengontrol pelatihan
- num_iterations (
int, opsional, default1) — Jumlah iterasi per batch (dilambangkan sebagai μ dalam algoritma). - generation_batch_size (
int, opsional) — Ukuran batch yang digunakan untuk generasi. JikaNone, 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. JikaNone, nilainya secara default adalahgradient_accumulation_steps.
Kelas konfigurasi untuk experimental.sdft.SDFTTrainer.
SDFTTrainer
kelas trl.experimental.sdft.SDFTTrainer
< source >( 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
< 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
Parameter
- resume_from_checkpoint (
strataubool, opsional) — Jika berupastr, jalur lokal ke checkpoint yang disimpan oleh instanceTrainersebelumnya. Jika berupabooldan bernilaiTrue, muat checkpoint terakhir di args.output_dir yang disimpan oleh instanceTrainersebelumnya. Jika ada, pelatihan akan dilanjutkan dari status model/optimizer/scheduler yang dimuat di sini. - trial (
optuna.Trialataudict[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.
Akan menyimpan model, sehingga Anda dapat memuatnya kembali menggunakan from_pretrained().
Hanya akan menyimpan dari proses utama.
push_to_hub
< source >( 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, defaultTrue) — Apakah fungsi harus hanya mengembalikan nilai setelahgit pushselesai. - token (
str, opsional, defaultnyaNone) — 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.