TRL documentation
Pelatih DPO Online
Pelatih DPO Online
Ikhtisar
Online DPO diusulkan dalam Direct Language Model Alignment from Online AI Feedback oleh Shangmin Guo, Biao Zhang, Tianlin Liu, Tianqi Liu, Misha Khalman, Felipe Llinares, Alexandre Rame, Thomas Mesnard, Yao Zhao, Bilal Piot, Johan Ferret, dan Mathieu Blondel.
Abstrak dari makalah tersebut adalah sebagai berikut:
Metode direct alignment from preferences (DAP), seperti DPO, baru-baru ini muncul sebagai alternatif yang efisien untuk reinforcement learning from human feedback (RLHF), yang tidak memerlukan reward model terpisah. Namun, dataset preferensi yang digunakan dalam metode DAP biasanya dikumpulkan sebelum pelatihan dan tidak pernah diperbarui, sehingga umpan baliknya murni offline. Selain itu, respons dalam dataset ini sering kali disampel dari model bahasa yang berbeda dari model yang sedang di-align, dan karena model berevolusi selama pelatihan, fase alignment secara tidak terhindarkan bersifat off-policy. Dalam studi ini, kami berargumen bahwa umpan balik online adalah kunci dan meningkatkan metode DAP. Metode kami, online AI feedback (OAIF), menggunakan LLM sebagai anotator: pada setiap iterasi pelatihan, kami menyampel dua respons dari model saat ini dan memrompt LLM anotator untuk memilih mana yang lebih disukai, sehingga menyediakan umpan balik online. Meskipun sederhana, kami mendemonstrasikan melalui evaluasi manusia dalam beberapa tugas bahwa OAIF melampaui metode DAP offline dan RLHF. Kami juga menunjukkan bahwa umpan balik yang digunakan dalam OAIF mudah dikendalikan, melalui instruksi prompt ke LLM anotator.
Metode post-training ini disumbangkan oleh Michael Noukhovitch, Shengyi Costa Huang, Quentin Gallouédec, dan Edward Beeching.
Mulai cepat
Contoh ini menunjukkan cara melatih model menggunakan metode DPO online. Kami menggunakan model Qwen 0.5B sebagai model dasar dan model reward trl-lib/Qwen2-0.5B-Reward. Kami menggunakan prompt dari dataset UltraFeedback. Anda dapat melihat prompt dalam dataset di sini:
Berikut adalah skrip untuk melatih model:
# train_online_dpo.py
from datasets import load_dataset
from trl.experimental.online_dpo import OnlineDPOConfig, OnlineDPOTrainer
from transformers import AutoModelForCausalLM, AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
reward_model = AutoModelForSequenceClassification.from_pretrained("trl-lib/Qwen2-0.5B-Reward", num_labels=1)
train_dataset = load_dataset("trl-lib/ultrafeedback-prompt", split="train")
training_args = OnlineDPOConfig(output_dir="Qwen2-0.5B-OnlineDPO")
trainer = OnlineDPOTrainer(
model=model, reward_funcs=reward_model, args=training_args, processing_class=tokenizer, train_dataset=train_dataset
)
trainer.train()Jalankan skrip menggunakan perintah berikut:
accelerate launch train_online_dpo.py
Distribusi di 8 GPU, pelatihan memakan waktu sekitar 1 jam. Anda dapat memverifikasi kemajuan pelatihan dengan memeriksa grafik reward. Tren peningkatan pada reward untuk penyelesaian yang ditolak dan dipilih menunjukkan bahwa model sedang membaik dan menghasilkan respons yang lebih baik seiring waktu.

Untuk melihat bagaimana kinerja model terlatih, Anda dapat menggunakan Transformers Chat CLI.
$ transformers chat trl-lib/Qwen2-0.5B-OnlineDPO
<quentin_gallouedec>:
What is the best programming language?
<trl-lib/Qwen2-0.5B-OnlineDPO>:
The best programming language depends on your specific needs and priorities. Some people prefer imperative programming languages (like Haskell or Lisp), while others prefer functional programming languages (like Scala or Python). It's important to consider your work style, programming environment, and project requirements when choosing a programming language.
Jenis dataset yang diharapkan
Online DPO hanya memerlukan dataset prompt-only (berbeda dengan offline DPO, yang mengharapkan dataset preferensi). experimental.online_dpo.OnlineDPOTrainer mendukung format dataset conversational dan standard. Ketika diberikan dataset conversational, trainer akan secara otomatis menerapkan chat template ke dataset tersebut.
Tips penggunaan
Mendorong generasi token EOS
Saat menggunakan model reward, kita mungkin ingin model menghasilkan kelengkapan (completions) dalam panjang tertentu. Selama pelatihan, model akan menghasilkan kelengkapan hingga panjang maksimum yang ditentukan dalam argumen max_new_tokens dari experimental.online_dpo.OnlineDPOConfig. Jika Anda ingin memberikan penalti kepada model karena tidak menghasilkan token EOS sebelum mencapai panjang maksimum, Anda dapat menggunakan argumen missing_eos_penalty dari experimental.online_dpo.OnlineDPOConfig:
training_args = OnlineDPOConfig(..., max_new_tokens=128, missing_eos_penalty=1.0)Mencatat Kelengkapan
Untuk memahami perilaku model Anda selama pelatihan dengan lebih baik, Anda dapat mencatat sampel penyelesaian secara berkala menggunakan LogCompletionsCallback.
trainer = OnlineDPOTrainer(..., eval_dataset=eval_dataset)
completions_callback = LogCompletionsCallback(trainer, num_prompts=8)
trainer.add_callback(completions_callback)Callback ini mencatat kelengkapan yang dihasilkan model langsung ke Weights & Biases.

Metrik yang dicatat
Selama pelatihan dan evaluasi, kami mencatat metrik-metrik berikut. Berikut adalah contoh jalur yang dilacak di Weights and Biases
objective/kl: Rata-rata divergensi Kullback-Leibler (KL) antara model saat ini dan model referensi.objective/entropy: Entropi rata-rata dari model, yang menunjukkan tingkat keacakan dari aksi-aksi yang dipilih oleh model.objective/non_score_reward: Rata-rata reward dari sumber yang tidak terkait skor, pada dasarnyabeta * kl.sum(1), di manabetaadalah koefisien penalti KL dankladalah divergensi KL per token.objective/rlhf_reward: Rata-rata reward RLHF, yaituscores - non_score_reward.rlhf_rewardadalah tujuan akhir dari pelatihan online DPO. Jika pelatihan berjalan sesuai rencana, metrik ini seharusnya terus meningkat.objective/scores: Skor rata-rata yang dikembalikan oleh model reward.objective/scores_margin: Margin skor rata-rata (menurut model reward eksternal) antara penyelesaian yang dipilih dan yang ditolak.rewards/chosen: Rata-rata reward (menurut model reward implisit dari online DPO) dari penyelesaian yang dipilih.rewards/rejected: Rata-rata reward (menurut model reward implisit dari online DPO) dari penyelesaian yang ditolak.rewards/accuracies: Akurasi dari model reward implisit DPO online.rewards/margins: Margin reward rata-rata (menurut model reward implisit dari online DPO) antara penyelesaian yang dipilih dan yang ditolak.logps/chosen: Rata-rata log probabilitas dari penyelesaian yang dipilih.logps/rejected: Rata-rata log probabilitas dari penyelesaian yang ditolak.val/contain_eos_token: Proporsi penyelesaian yang mengandung token EOS.beta: Parameter yang mengontrol bobot dari istilah kerugian yang mewakili deviasi dari model referensi. Biasanya tetap, tetapi dapat dibuat dinamis dengan meneruskan daftar ke experimental.online_dpo.OnlineDPOConfig.
Eksperimen benchmark
Untuk memvalidasi bahwa implementasi DPO online berfungsi, kami menjalankan eksperimen dengan model Pythia 1B, 2.8B, dan 6.9B pada satu node dengan 8 x H100. Berikut adalah perintah yang kami gunakan untuk menjalankan eksperimen, dengan skrip contoh DPO online seperti yang ada pada saat itu (examples/scripts/online_dpo.py, yang kemudian dihapus) — untuk mereplikasinya, jalankan dari checkout v1.10.0 (git checkout v1.10.0). Kami mengambil model SFT / RM langsung dari The N+ Implementation Details of RLHF with PPO: A Case Study on TL;DR Summarization.
# 1B Online DPO experiment
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml \
examples/scripts/online_dpo.py \
--model_name_or_path trl-lib/pythia-1b-deduped-tldr-sft \
--reward_model_path trl-lib/pythia-1b-deduped-tldr-rm \
--dataset_name trl-lib/tldr \
--learning_rate 5.0e-7 \
--output_dir pythia-1b-deduped-tldr-online-dpo \
--beta 0.1 \
--per_device_train_batch_size 8 \
--gradient_accumulation_steps 2 \
--num_train_epochs 3 \
--max_new_tokens 53 \
--warmup_steps 0.1 \
--missing_eos_penalty 1.0 \
--save_steps 0.1 \
--push_to_hub
# 2.8B Online DPO experiment
accelerate launch --config_file examples/accelerate_configs/deepspeed_zero2.yaml \
examples/scripts/online_dpo.py \
--model_name_or_path trl-lib/pythia-2.8b-deduped-tldr-sft \
--reward_model_path trl-lib/pythia-2.8b-deduped-tldr-rm \
--dataset_name trl-lib/tldr \
--learning_rate 5.0e-7 \
--output_dir pythia-2.8b-deduped-tldr-online-dpo \
--beta 0.1 \
--per_device_train_batch_size 8 \
--gradient_accumulation_steps 2 \
--num_train_epochs 3 \
--max_new_tokens 53 \
--warmup_steps 0.1 \
--missing_eos_penalty 1.0 \
--save_steps 0.1 \
--push_to_hub
# 6.9B Online DPO experiment
accelerate launch --config_file examples/accelerate_configs/deepspeed_zero2.yaml \
examples/scripts/online_dpo.py \
--model_name_or_path trl-lib/pythia-6.9b-deduped-tldr-sft \
--reward_model_path trl-lib/pythia-6.9b-deduped-tldr-rm \
--dataset_name trl-lib/tldr \
--learning_rate 5.0e-7 \
--output_dir pythia-6.9b-deduped-tldr-online-dpo \
--beta 0.1 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--num_train_epochs 3 \
--max_new_tokens 53 \
--warmup_steps 0.1 \
--missing_eos_penalty 1.0 \
--save_steps 0.1 \
--push_to_hubCheckpoint dan pelacakan eksperimen tersedia di:
Checkpoint DPO online menunjukkan tingkat kemenangan yang semakin meningkat seiring dengan peningkatan ukuran model. Ini merupakan tanda baik bahwa implementasi DPO online berfungsi sesuai dengan yang dimaksud.
OnlineDPOTrainer
kelas trl.experimental.online_dpo.OnlineDPOTrainer
< source >( model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, str]ref_model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, NoneType] = Nonereward_funcs: str | transformers.modeling_utils.PreTrainedModel | collections.abc.Callable[..., list[float | None]] | list[str | transformers.modeling_utils.PreTrainedModel | collections.abc.Callable[..., list[float | None]]] | None = Noneargs: trl.experimental.online_dpo.online_dpo_config.OnlineDPOConfig | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | None = Nonetrain_dataset: typing.Union[datasets.arrow_dataset.Dataset, torch.utils.data.IterableDataset, NoneType] = Noneeval_dataset: typing.Union[datasets.arrow_dataset.Dataset, torch.utils.data.IterableDataset, dict[str, typing.Union[datasets.arrow_dataset.Dataset, torch.utils.data.IterableDataset]], NoneType] = 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 = Nonepeft_config: PeftConfig | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalPrediction], dict] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR] = (None, None)preprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = None )
Parameter
- model (
str | nn.Module | PreTrainedModel) — Model yang akan dilatih. Bisa berupa:- String, berupa model id dari model pretrained yang dihosting di dalam repo model di huggingface.co, atau
path ke directory yang berisi bobot model yang disimpan menggunakan
save_pretrained, misalnya
'./my_model_directory/'. Model dimuat menggunakan from_pretrained dengan keyword arguments diargs.model_init_kwargs. - Objek PreTrainedModel. Hanya model bahasa kausal yang didukung.
- String, berupa model id dari model pretrained yang dihosting di dalam repo model di huggingface.co, atau
path ke directory yang berisi bobot model yang disimpan menggunakan
save_pretrained, misalnya
- ref_model (PreTrainedModel atau
torch.nn.ModuleatauNone) — Model referensi yang akan digunakan untuk pelatihan. Jika None ditentukan, model referensi akan dibuat dari model. - reward_funcs (
RewardFunc | list[RewardFunc]) — Fungsi reward yang akan digunakan untuk menghitung reward. Untuk menghitung reward, kami memanggil semua fungsi reward dengan prompt dan completion, lalu menjumlahkan reward-nya. Bisa berupa:- Satu fungsi reward: Bisa berupa string (path ke model), PreTrainedModel, atau fungsi callable kustom.
- Daftar fungsi reward: Semua harus memiliki tipe yang kompatibel.
- args (experimental.online_dpo.OnlineDPOConfig) — Argumen konfigurasi online DPO yang digunakan untuk pelatihan.
- data_collator (
DataCollator) — Data collator yang akan digunakan untuk pelatihan. Jika None ditentukan, data collator default (experimental.utils.DPODataCollatorWithPadding) akan digunakan, yang akan melakukan padding pada urutan hingga panjang maksimum dari urutan dalam batch, mengingat dataset berupa pasangan urutan. - train_dataset (Dataset atau IterableDataset) — Dataset yang akan digunakan untuk pelatihan.
- eval_dataset (Dataset, IterableDataset atau
dict[str, Dataset | IterableDataset]) — Dataset yang digunakan untuk evaluasi. - processing_class (PreTrainedTokenizerBase atau ProcessorMixin, opsional) — Kelas pemrosesan yang digunakan untuk memproses data. Jika disediakan, kelas ini akan digunakan untuk memproses input model secara otomatis, dan akan disimpan bersama model untuk memudahkan pelanjutan pelatihan yang terputus atau penggunaan ulang model yang telah dihaluskan.
- reward_processing_classes (PreTrainedTokenizerBase atau
list[PreTrainedTokenizerBase], opsional) — Kelas pemrosesan yang sesuai dengan fungsi reward yang ditentukan dalamreward_funcs. Dapat berupa:- Satu kelas pemrosesan: Digunakan ketika
reward_funcshanya berisi satu fungsi reward. - Daftar kelas pemrosesan: Harus sesuai dengan urutan dan panjang fungsi reward di
reward_funcs.
Jika diatur ke
None, tokenizer untuk setiap fungsi reward berbasis model dimuat secara otomatis menggunakan from_pretrained. - Satu kelas pemrosesan: Digunakan ketika
- peft_config (PeftConfig, opsional) —
Konfigurasi PEFT yang digunakan untuk membungkus model. Jika
None, model tidak dibungkus. - compute_metrics (
Callable[[EvalPrediction], dict], opsional) — Fungsi yang digunakan untuk menghitung metrik. Harus menerimaEvalPredictiondan mengembalikan kamus string ke nilai metrik. - callbacks (
list[transformers.TrainerCallback]) — Callback yang akan digunakan untuk pelatihan. - optimizers (
tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — Optimizer dan scheduler yang akan digunakan untuk pelatihan. - preprocess_logits_for_metrics (
Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — Fungsi yang digunakan untuk memproses ulang logits sebelum menghitung metrik.
Inisialisasi OnlineDPOTrainer.
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.
OnlineDPOConfig
kelas trl.experimental.online_dpo.OnlineDPOConfig
< source >( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-07lr_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 = -1reward_model_path: str | None = Nonemax_new_tokens: int = 64max_length: int = 512temperature: float = 0.9top_p: float = 1.0top_k: int = 0min_p: float | None = Nonerepetition_penalty: float = 1.0generation_kwargs: dict | None = Nonecache_implementation: str | None = Nonemissing_eos_penalty: float | None = Nonebeta: list[float] = <factory>loss_type: str = 'sigmoid'disable_dropout: bool = Trueuse_vllm: bool = Falsevllm_model_impl: str = 'vllm'vllm_structured_outputs_regex: str | None = Nonevllm_gpu_memory_utilization: float | None = 0.55vllm_mode: str = 'colocate'vllm_server_base_url: str | None = Nonevllm_server_host: str = '0.0.0.0'vllm_server_port: int = 8000vllm_server_timeout: float = 240.0vllm_group_port: int = 51216vllm_tensor_parallel_size: int = 1vllm_enable_sleep_mode: bool = Falseds3_gather_for_generation: bool = Truemodel_init_kwargs: dict[str, typing.Any] | str | None = Nonetrust_remote_code: bool = Falsereward_weights: list[float] | None = None )
Parameter
- reward_model_path (
str, opsional) — Path ke model reward. - max_new_tokens (
int, opsional, defaultnya64) — Jumlah maksimum token yang akan dihasilkan per penyelesaian. - max_length (
int, opsional, default512) — Panjang total maksimum dari sekuens (prompt + completion) yang digunakan untuk menghitung log probabilities. Jika sekuens melebihi batas ini, token paling kiri akan dipangkas untuk mempertahankan sebanyak mungkin bagian completion. Tidak diterapkan ketika input mengandung gambar, karena pemangkasan akan membuang token gambar. - temperature (
float, opsional, default0.9) — Suhu untuk sampling. Semakin tinggi suhu, semakin acak hasil pelengkapannya. - missing_eos_penalty (
float, opsional) — Penalti yang diterapkan pada skor ketika model gagal menghasilkan token EOS. Hal ini berguna untuk mendorong penghasilkan kelengkapan yang lebih pendek dari panjang maksimum (max_new_tokens). Penalti harus berupa nilai positif. - beta (
floatataulist[float], opsional, default0.1) — Parameter yang mengontrol deviasi dari model referensi. Nilai β yang lebih tinggi berarti deviasi yang lebih kecil dari model referensi. Untuk kerugian IPO (loss_type="ipo"), β adalah parameter regularisasi yang dilambangkan dengan τ dalam makalah. Jika daftar float diberikan, maka β dipilih untuk setiap epoch baru dan β terakhir digunakan untuk sisa epoch. - loss_type (
str, opsional, defaultnya"sigmoid") — Jenis loss yang akan digunakan. Nilai yang mungkin adalah: - disable_dropout (
bool, opsional, defaultTrue) — Apakah akan menonaktifkan dropout pada model dan model referensi.
Parameter yang mengontrol generasi
- top_p (
float, opsional, default1.0) — Float yang mengontrol probabilitas kumulatif dari token teratas yang dipertimbangkan. Harus berada dalam (0, 1]. Atur ke1.0untuk 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 di antara0.0dan1.0. Nilai tipikal berada dalam rentang0.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.0mendorong model untuk menggunakan token baru, sedangkan nilai <1.0mendorong model untuk mengulang token. - cache_implementation (
str, opsional) — Implementasi metode cache untuk generasi yang lebih cepat ketikause_vllmdiatur keFalse. - generation_kwargs (
dict[str, Any], opsional) — Argumen kata kunci tambahan untuk diteruskan ke GenerationConfig (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.
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. - vllm_model_impl (
str, opsional, default"vllm") — Implementasi model yang digunakan untuk vLLM. Harus salah satu dari"transformers"atau"vllm"."transformers": Gunakan backendtransformersuntuk implementasi model."vllm": Gunakan pustakavllmuntuk implementasi model. - vllm_mode (
str, opsional, defaultnya"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. Hal ini menghindari kebutuhan akan server terpisah, tetapi dapat menyebabkan perebutan sumber daya dengan pelatihan.
- vllm_structured_outputs_regex (
str, opsional) — Regex untuk structured outputs vLLM. JikaNone(default), structured outputs dinonaktifkan.
Parameter yang mengontrol server vLLM (hanya digunakan ketika `vllm_mode` adalah `"server"`)
- 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 jikavllm_server_base_urldisediakan. - vllm_server_port (
int, opsional, default8000) — Port server vLLM yang akan dihubungi. Diabaikan jikavllm_server_base_urldisediakan. - 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_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.
Parameter yang mengontrol eksekusi vLLM yang terkolokasi (hanya digunakan ketika `vllm_mode` adalah `"colocate"`)
- vllm_gpu_memory_utilization (
float, opsional, default0.55) — 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_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_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.
Parameter lainnya
- 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. - model_init_kwargs (
dict[str, Any], opsional) — Argumen kata kunci untuk diteruskan keAutoModelForCausalLM.from_pretrainedsaat menginstansiasi model dari sebuah string. Nilairevisionjuga digunakan saat memuat kelas pemrosesan reward. - trust_remote_code (
bool, opsional, defaultFalse) — Apakah mengizinkan pemuatan model yang menyertakan kode Python kustom dari Hub. Diteruskan ke from_pretrained. Juga diterapkan pada pemuatan reward-model dan reward-tokenizer. - reward_weights (
list[float], opsional) — Bobot untuk menggabungkan beberapa fungsi reward. Harus sesuai dengan jumlah fungsi reward. JikaNone, semua fungsi reward diberi bobot yang sama.
Kelas konfigurasi untuk experimental.online_dpo.OnlineDPOTrainer.
Kelas ini hanya mencakup parameter yang spesifik untuk pelatihan Online DPO. Untuk daftar lengkap argumen pelatihan, silakan merujuk ke dokumentasi TrainingArguments. Perhatikan bahwa nilai default dalam kelas ini mungkin berbeda dari yang ada di TrainingArguments.
Dengan HfArgumentParser, kita dapat mengubah kelas ini menjadi argumen argparse yang dapat ditentukan di baris perintah.
Parameter-parameter ini memiliki nilai default yang berbeda dari TrainingArguments:
logging_steps: Bawaan adalah10alih-alih500.gradient_checkpointing: Beralih keTruesebagai nilai bawaan, bukanFalse.bf16: Beralih keTruejikafp16tidak diatur, alih-alihFalse.learning_rate: Beralih ke5e-7sebagai nilai default, bukan5e-5.remove_unused_columns: Beralih keFalsesebagai nilai default, bukanTrue.