TRL documentation
Trainer DPO trực tuyến
Trainer DPO trực tuyến
Tổng quan
Online DPO được đề xuất trong Direct Language Model Alignment from Online AI Feedback bởi Shangmin Guo, Biao Zhang, Tianlin Liu, Tianqi Liu, Misha Khalman, Felipe Llinares, Alexandre Rame, Thomas Mesnard, Yao Zhao, Bilal Piot, Johan Ferret và Mathieu Blondel.
Tóm tắt từ bài báo như sau:
Các phương pháp trực tiếp căn chỉnh từ sở thích (DAP), chẳng hạn như DPO, gần đây đã nổi lên như những lựa chọn thay thế hiệu quả cho học tăng cường từ phản hồi của con người (RLHF), mà không cần đến một mô hình phần thưởng riêng biệt. Tuy nhiên, các bộ dữ liệu sở thích được sử dụng trong các phương pháp DAP thường được thu thập trước khi huấn luyện và không bao giờ được cập nhật, do đó phản hồi hoàn toàn là ngoại tuyến. Hơn nữa, các phản hồi trong những bộ dữ liệu này thường được lấy mẫu từ một mô hình ngôn ngữ khác với mô hình đang được căn chỉnh, và vì mô hình tiến hóa trong suốt quá trình huấn luyện, nên giai đoạn căn chỉnh tất yếu là ngoại chính sách (off-policy). Trong nghiên cứu này, chúng tôi cho rằng phản hồi trực tuyến là yếu tố then chốt và giúp cải thiện các phương pháp DAP. Phương pháp của chúng tôi, phản hồi AI trực tuyến (OAIF), sử dụng một LLM làm người chú thích: ở mỗi lần lặp huấn luyện, chúng tôi lấy mẫu hai phản hồi từ mô hình hiện tại và yêu cầu LLM người chú thích chọn phản hồi nào được ưu tiên hơn, từ đó cung cấp phản hồi trực tuyến. Mặc dù đơn giản, chúng tôi chứng minh qua đánh giá của con người trên một số tác vụ rằng OAIF vượt trội hơn cả các phương pháp DAP ngoại tuyến và RLHF. Chúng tôi cũng chỉ ra rằng phản hồi được sử dụng trong OAIF dễ dàng kiểm soát được, thông qua các prompt chỉ thị gửi đến LLM người chú thích.
Phương pháp huấn luyện sau này được đóng góp bởi Michael Noukhovitch, Shengyi Costa Huang, Quentin Gallouédec và Edward Beeching.
Bắt đầu nhanh
Ví dụ này minh họa cách huấn luyện một mô hình bằng phương pháp DPO trực tuyến. Chúng ta sử dụng mô hình Qwen 0.5B làm mô hình cơ sở và mô hình phần thưởng trl-lib/Qwen2-0.5B-Reward. Chúng ta sử dụng các prompt từ dataset UltraFeedback. Bạn có thể xem các prompt trong dataset tại đây:
Dưới đây là script để huấn luyện mô hình:
# 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()Chạy script bằng lệnh sau:
accelerate launch train_online_dpo.py
Phân phối trên 8 GPU, quá trình huấn luyện mất khoảng 1 giờ. Bạn có thể kiểm tra tiến độ huấn luyện bằng cách xem biểu đồ phần thưởng. Xu hướng tăng của phần thưởng cho cả các câu trả lời bị từ chối và được chọn cho thấy mô hình đang cải thiện và tạo ra các phản hồi tốt hơn theo thời gian.

Để xem mô hình đã huấn luyện hoạt động như thế nào, bạn có thể sử dụng 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.
Kiểu dữ liệu tập dữ liệu dự kiến
Online DPO chỉ yêu cầu một dataset chỉ chứa prompt (khác với offline DPO, vốn kỳ vọng một dataset preference). experimental.online_dpo.OnlineDPOTrainer hỗ trợ cả định dạng dataset conversational và standard. Khi được cung cấp một dataset conversational, trainer sẽ tự động áp dụng chat template lên dataset đó.
Mẹo sử dụng
Khuyến khích tạo token EOS
Khi sử dụng một mô hình phần thưởng, chúng ta có thể muốn mô hình tạo ra các phần hoàn thành trong một độ dài cho trước. Trong quá trình huấn luyện, mô hình sẽ tạo ra các phần hoàn thành cho đến độ dài tối đa được chỉ định trong đối số max_new_tokens của experimental.online_dpo.OnlineDPOConfig. Nếu bạn muốn phạt mô hình vì không tạo ra một token EOS trước khi đạt đến độ dài tối đa, bạn có thể sử dụng đối số missing_eos_penalty của experimental.online_dpo.OnlineDPOConfig:
training_args = OnlineDPOConfig(..., max_new_tokens=128, missing_eos_penalty=1.0)Ghi log các kết quả hoàn thành
Để hiểu rõ hơn về hành vi của mô hình trong quá trình huấn luyện, bạn có thể ghi lại các mẫu hoàn thành một cách định kỳ bằng cách sử dụng LogCompletionsCallback.
trainer = OnlineDPOTrainer(..., eval_dataset=eval_dataset)
completions_callback = LogCompletionsCallback(trainer, num_prompts=8)
trainer.add_callback(completions_callback)Callback này ghi log các câu hoàn thành do mô hình tạo ra trực tiếp lên Weights & Biases.

Các chỉ số được ghi log
Trong quá trình huấn luyện và đánh giá, chúng tôi ghi lại các chỉ số sau. Dưới đây là một ví dụ về chạy được theo dõi trên Weights and Biases
objective/kl: Trung bình của độ phân kỳ Kullback-Leibler (KL) giữa mô hình hiện tại và mô hình tham chiếu.objective/entropy: Entropy trung bình của mô hình, cho thấy mức độ ngẫu nhiên của các hành động được mô hình chọn.objective/non_score_reward: Phần thưởng trung bình từ các nguồn không liên quan đến điểm số, về cơ bản làbeta * kl.sum(1), trong đóbetalà hệ số phạt KL vàkllà độ phân kỳ KL cho từng token.objective/rlhf_reward: Phần thưởng RLHF trung bình, được tính làscores - non_score_reward.rlhf_rewardlà mục tiêu cuối cùng của quá trình huấn luyện DPO trực tuyến. Nếu quá trình huấn luyện diễn ra đúng như mong đợi, chỉ số này sẽ tiếp tục tăng lên.objective/scores: Điểm trung bình được trả về bởi mô hình phần thưởng.objective/scores_margin: Biên độ điểm trung bình (theo mô hình phần thưởng bên ngoài) giữa các câu trả lời được chọn và bị từ chối.rewards/chosen: Phần thưởng trung bình (theo mô hình phần thưởng ẩn của online DPO) của các câu trả lời được chọn.rewards/rejected: Phần thưởng trung bình (theo mô hình phần thưởng ẩn của online DPO) của các câu trả lời bị từ chối.rewards/accuracies: Độ chính xác của mô hình phần thưởng ẩn của online DPO.rewards/margins: Biên độ phần thưởng trung bình (theo mô hình phần thưởng ẩn của online DPO) giữa các câu trả lời được chọn và bị từ chối.logps/chosen: Xác suất log trung bình của các phần hoàn thành được chọn.logps/rejected: Xác suất log trung bình của các câu trả lời bị từ chối.val/contain_eos_token: Tỷ lệ các câu trả lời chứa token EOS.beta: Tham số kiểm soát trọng số của số hạng loss đại diện cho độ lệch so với mô hình tham chiếu. Thường được cố định, nhưng có thể làm động bằng cách truyền một danh sách vào experimental.online_dpo.OnlineDPOConfig.
Thí nghiệm đánh giá hiệu năng
Để xác minh việc triển khai DPO trực tuyến hoạt động, chúng tôi đã chạy các thí nghiệm với các mô hình Pythia 1B, 2.8B và 6.9B trên một nút duy nhất gồm 8 x H100. Dưới đây là các lệnh chúng tôi đã sử dụng để chạy các thí nghiệm, với kịch bản ví dụ DPO trực tuyến như nó tồn tại vào thời điểm đó (examples/scripts/online_dpo.py, đã bị xóa sau đó) — để tái tạo chúng, hãy chạy từ bản checkout v1.10.0 (git checkout v1.10.0). Chúng tôi lấy các mô hình SFT / RM trực tiếp từ 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_hubCác checkpoint và theo dõi thí nghiệm có sẵn tại:
Tỷ lệ thắng của checkpoint DPO online ngày càng tăng khi chúng ta mở rộng kích thước mô hình. Đây là một dấu hiệu tốt cho thấy việc triển khai DPO online đang hoạt động đúng như mong đợi.
OnlineDPOTrainer
class 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 )
Tham số
- model (
str | nn.Module | PreTrainedModel) — Mô hình cần được huấn luyện. Có thể là:- Một chuỗi, là model id của một model được huấn luyện trước lưu trữ trong một model repo trên huggingface.co, hoặc một
đường dẫn đến một thư mục chứa các trọng số model được lưu bằng
save_pretrained, ví dụ:
'./my_model_directory/'. Model được nạp bằng from_pretrained với các tham số từ khóa trongargs.model_init_kwargs. - Một đối tượng PreTrainedModel. Chỉ hỗ trợ các mô hình ngôn ngữ nhân quả.
- Một chuỗi, là model id của một model được huấn luyện trước lưu trữ trong một model repo trên huggingface.co, hoặc một
đường dẫn đến một thư mục chứa các trọng số model được lưu bằng
save_pretrained, ví dụ:
- ref_model (PreTrainedModel hoặc
torch.nn.ModulehoặcNone) — Mô hình tham chiếu được sử dụng cho việc huấn luyện. Nếu None được chỉ định, mô hình tham chiếu sẽ được tạo từ model. - reward_funcs (
RewardFunc | list[RewardFunc]) — Các hàm reward được sử dụng để tính toán phần thưởng. Để tính phần thưởng, chúng ta gọi tất cả các hàm reward với prompts và completions rồi cộng tổng các phần thưởng. Có thể là:- Một hàm phần thưởng duy nhất: Có thể là một chuỗi (đường dẫn đến mô hình), một PreTrainedModel, hoặc một hàm callable tùy chỉnh.
- Một danh sách các hàm phần thưởng: Tất cả phải có kiểu tương thích.
- args (experimental.online_dpo.OnlineDPOConfig) — Các đối số cấu hình online DPO để sử dụng cho huấn luyện.
- data_collator (
DataCollator) — Data collator được sử dụng cho quá trình huấn luyện. Nếu không chỉ định (None), data collator mặc định (experimental.utils.DPODataCollatorWithPadding) sẽ được sử dụng, thực hiện việc đệm (padding) các chuỗi đến độ dài tối đa của các chuỗi trong batch, dựa trên một dataset gồm các cặp chuỗi. - train_dataset (Dataset hoặc IterableDataset) — Bộ dữ liệu được sử dụng để huấn luyện.
- eval_dataset (Dataset, IterableDataset hoặc
dict[str, Dataset | IterableDataset]) — Bộ dữ liệu được sử dụng để đánh giá. - processing_class (PreTrainedTokenizerBase hoặc ProcessorMixin, tùy chọn) — Lớp xử lý được dùng để xử lý dữ liệu. Nếu được cung cấp, lớp này sẽ được dùng để tự động xử lý các đầu vào cho mô hình, và nó sẽ được lưu cùng với mô hình để dễ dàng chạy lại một phiên huấn luyện bị gián đoạn hoặc tái sử dụng mô hình đã tinh chỉnh.
- reward_processing_classes (PreTrainedTokenizerBase hoặc
list[PreTrainedTokenizerBase], tùy chọn) — Các lớp xử lý tương ứng với các hàm phần thưởng được chỉ định trongreward_funcs. Có thể là:- Một lớp xử lý duy nhất: Được sử dụng khi
reward_funcschỉ chứa một hàm phần thưởng. - Một danh sách các lớp xử lý: Phải khớp với thứ tự và độ dài của các hàm phần thưởng trong
reward_funcs.
Nếu được đặt thành
None, tokenizer cho mỗi hàm phần thưởng dựa trên mô hình sẽ được tải tự động bằng from_pretrained. - Một lớp xử lý duy nhất: Được sử dụng khi
- peft_config (PeftConfig, tùy chọn) —
Cấu hình PEFT được sử dụng để bọc model. Nếu là
None, model sẽ không được bọc. - compute_metrics (
Callable[[EvalPrediction], dict], tùy chọn) — Hàm được sử dụng để tính toán các chỉ số. Phải nhận mộtEvalPredictionvà trả về một từ điển ánh xạ từ chuỗi sang giá trị chỉ số. - callbacks (
list[transformers.TrainerCallback]) — Các callback được sử dụng cho quá trình huấn luyện. - optimizers (
tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — Optimizer và scheduler được sử dụng cho quá trình huấn luyện. - preprocess_logits_for_metrics (
Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — Hàm được sử dụng để tiền xử lý logits trước khi tính toán các chỉ số.
Khởi tạo OnlineDPOTrainer.
train
< 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
Tham số
- resume_from_checkpoint (
strhoặcbool, tùy chọn) — Nếu làstr, đường dẫn cục bộ đến một checkpoint đã lưu bởi một phiênTrainertrước đó. Nếu làboolvà bằngTrue, tải checkpoint cuối cùng trong args.output_dir do một phiênTrainertrước đó lưu lại. Nếu có, quá trình huấn luyện sẽ tiếp tục từ trạng thái model/optimizer/scheduler được tải ở đây. - trial (
optuna.Trialhoặcdict[str, Any], tùy chọn) — Lần chạy thử nghiệm hoặc từ điển siêu tham số cho việc tìm kiếm siêu tham số. - ignore_keys_for_eval (
list[str], tùy chọn) — Một danh sách các khóa trong đầu ra của mô hình của bạn (nếu đó là một từ điển) cần được bỏ qua khi thu thập các dự đoán để đánh giá trong quá trình huấn luyện.
Trả về
~trainer_utils.TrainOutput
Đối tượng chứa số bước toàn cục, tổn thất huấn luyện và các chỉ số.
Điểm vào chính cho quá trình huấn luyện.
Sẽ lưu mô hình, để bạn có thể tải lại bằng from_pretrained().
Chỉ lưu từ tiến trình chính.
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )
Tham số
- commit_message (
str, tùy chọn, mặc định là"End of training") — Thông điệp để commit khi đẩy lên. - blocking (
bool, tùy chọn, mặc định làTrue) — Xác định xem hàm có chỉ trả về khigit pushđã hoàn tất hay không. - token (
str, tùy chọn, mặc định làNone) — Token có quyền ghi để ghi đè lên các args gốc của Trainer. - revision (
str, tùy chọn) — Phiên bản git để commit từ. Mặc định là đầu của nhánh “main”. - kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung được truyền đến~Trainer.create_model_card.
Tải self.model và self.processing_class lên 🤗 model hub tại repo self.args.hub_model_id.
OnlineDPOConfig
class 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 )
Tham số
- reward_model_path (
str, tùy chọn) — Đường dẫn đến mô hình phần thưởng. - max_new_tokens (
int, tùy chọn, mặc định là64) — Số lượng token tối đa được tạo ra cho mỗi lần hoàn thành. - max_length (
int, tùy chọn, mặc định là512) — Độ dài tối đa của toàn bộ chuỗi (prompt + completion) được sử dụng để tính log probabilities. Nếu chuỗi vượt quá giới hạn này, các token bên trái sẽ bị cắt bỏ để giữ lại càng nhiều phần completion càng tốt. Không áp dụng khi đầu vào chứa hình ảnh, vì việc cắt bỏ sẽ làm mất các token hình ảnh. - temperature (
float, tùy chọn, mặc định là0.9) — Nhiệt độ cho quá trình lấy mẫu. Nhiệt độ càng cao, các phần hoàn thành càng ngẫu nhiên. - missing_eos_penalty (
float, tùy chọn) — Phạt áp dụng cho điểm khi mô hình không tạo ra token EOS. Điều này hữu ích để khuyến khích tạo ra các phần hoàn thành ngắn hơn độ dài tối đa (max_new_tokens). Phạt phải là một giá trị dương. - beta (
floathoặclist[float], tùy chọn, mặc định là0.1) — Tham số kiểm soát mức độ sai lệch so với mô hình tham chiếu. β càng cao thì mức độ sai lệch so với mô hình tham chiếu càng thấp. Đối với tổn thất IPO (loss_type="ipo"), β là tham số điều hòa được ký hiệu là τ trong bài báo. Nếu một danh sách các số float được cung cấp thì β sẽ được chọn cho mỗi epoch mới và β cuối cùng sẽ được sử dụng cho các epoch còn lại. - loss_type (
str, tuỳ chọn, mặc định là"sigmoid") — Loại loss cần sử dụng. Các giá trị có thể là: - disable_dropout (
bool, tùy chọn, mặc định làTrue) — Có vô hiệu hóa dropout trong mô hình và mô hình tham chiếu hay không.
Các tham số kiểm soát quá trình sinh
- top_p (
float, tùy chọn, mặc định là1.0) — Kiểm soát xác suất tích lũy của các token hàng đầu cần xem xét. Phải nằm trong khoảng (0, 1]. Đặt thành1.0để xem xét tất cả các token. - top_k (
int, tùy chọn, mặc định là0) — Số lượng token từ vựng có xác suất cao nhất được giữ lại cho lọc top-k. Nếu là0, lọc top-k sẽ bị vô hiệu hóa và tất cả các token đều được xem xét. - min_p (
float, tùy chọn) — Xác suất tối thiểu của token, sẽ được nhân với xác suất của token có khả năng cao nhất. Giá trị này phải nằm trong khoảng từ0.0đến1.0. Các giá trị điển hình nằm trong khoảng0.01-0.2. - repetition_penalty (
float, tùy chọn, mặc định là1.0) — Giá trị động áp dụng hình phạt cho các token mới dựa trên việc chúng có xuất hiện trong prompt và văn bản đã tạo ra cho đến hiện tại hay không. Các giá trị >1.0khuyến khích mô hình sử dụng các token mới, trong khi các giá trị <1.0khuyến khích mô hình lặp lại các token. - cache_implementation (
str, tùy chọn) — Cách triển khai phương pháp cache để tạo nhanh hơn khiuse_vllmđược đặt thànhFalse. - generation_kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung để truyền cho GenerationConfig (nếu dùng transformers) hoặcSamplingParams(nếu dùng vLLM) khi lấy mẫu các câu trả lời hoàn chỉnh. Tham số này có thể được dùng để tùy chỉnh thêm hành vi sinh, chẳng hạn như đặtsuppress_tokens,num_beams, v.v. Nếu nó chứa các khóa xung đột với các tham số sinh khác (nhưmin_p,top_p, v.v.), chúng sẽ ghi đè lên các tham số đó.
Các tham số kiểm soát việc tăng tốc sinh nội dung được hỗ trợ bởi vLLM
- use_vllm (
bool, tùy chọn, mặc định làFalse) — Có sử dụng vLLM để tạo các câu trả lời hoàn chỉnh hay không. Nếu đặt thànhTrue, trình huấn luyện sẽ sử dụng vLLM để tạo nội dung thay vì model.generate() mặc định. Yêu cầuvllmphải được cài đặt. - vllm_model_impl (
str, không bắt buộc, mặc định là"vllm") — Cài đặt mô hình để sử dụng cho vLLM. Phải là một trong"transformers"hoặc"vllm"."transformers": Sử dụng backendtransformerscho cài đặt mô hình."vllm": Sử dụng thư việnvllmcho cài đặt mô hình. - vllm_mode (
str, tuỳ chọn, mặc định là"colocate") — Chế độ sử dụng cho tích hợp vLLM khiuse_vllmđược đặt thànhTrue. Phải là một trong"server"hoặc"colocate"."server": Trainer sẽ gửi các yêu cầu sinh nội dung đến một server vLLM riêng. Hãy đảm bảo rằng một server vLLM đang chạy (khởi chạy bằngvllm serve)."colocate": vLLM sẽ chạy trong cùng một tiến trình và chia sẻ các GPU huấn luyện. Cách này tránh được nhu cầu về một máy chủ riêng biệt nhưng có thể gây ra xung đột tài nguyên với quá trình huấn luyện.
- vllm_structured_outputs_regex (
str, tuỳ chọn) — Regex cho structured outputs của vLLM. NếuNone(mặc định), structured outputs sẽ bị tắt.
Các tham số điều khiển máy chủ vLLM (chỉ được sử dụng khi `vllm_mode` là `"server"`)
- vllm_server_base_url (
str, tùy chọn) — URL gốc cho máy chủ vLLM (ví dụ:"http://localhost:8000"). Nếu được cung cấp,vllm_server_hostvàvllm_server_portsẽ bị bỏ qua. - vllm_server_host (
str, tuỳ chọn, mặc định là"0.0.0.0") — Host của máy chủ vLLM cần kết nối. Bỏ qua nếuvllm_server_base_urlđược cung cấp. - vllm_server_port (
int, tuỳ chọn, mặc định là8000) — Cổng của máy chủ vLLM để kết nối. Bỏ qua nếuvllm_server_base_urlđược cung cấp. - vllm_server_timeout (
float, tuỳ chọn, mặc định là240.0) — Tổng thời gian chờ (tính bằng giây) để máy chủ vLLM khởi động. Nếu máy chủ chưa sẵn sàng sau thời gian chờ này, mộtConnectionErrorsẽ được ném ra. - vllm_group_port (
int, tuỳ chọn, mặc định là51216) — Số cổng cho nhóm cập nhật trọng số. Cổng này được dùng để liên lạc với máy chủ vLLM. Trừ khi cổng đang bị chiếm dụng, bạn không cần phải thay đổi nó.
Các tham số điều khiển việc thực thi vLLM colocated (chỉ được sử dụng khi `vllm_mode` là `"colocate"`)
- vllm_gpu_memory_utilization (
float, tuỳ chọn, mặc định là0.55) — Kiểm soát mức sử dụng bộ nhớ GPU cho vLLM. Cài đặt này chỉ áp dụng khivllm_modeđược đặt thành"colocate". Nếu bạn đang sử dụngvllm_mode="server", tham số này phải được truyền riêng khi khởi động máy chủ vLLM thông qua cờ--vllm_gpu_memory_utilization. - vllm_tensor_parallel_size (
int, tùy chọn, mặc định là1) — Kiểm soát kích thước song song tensor cho vLLM. Cài đặt này chỉ áp dụng khivllm_modeđược đặt thành"colocate". Nếu bạn đang sử dụngvllm_mode="server", tham số này phải được truyền riêng khi khởi động máy chủ vLLM thông qua cờ--vllm_tensor_parallel_size. - vllm_enable_sleep_mode (
bool, tùy chọn, mặc định làFalse) — Bật chế độ ngủ của vLLM để chuyển trọng số/bộ đệm ra ngoài trong bước tối ưu hóa. Giữ mức sử dụng bộ nhớ GPU thấp, nhưng việc đánh thức engine sẽ thêm độ trễ chuyển dữ liệu giữa host và thiết bị.
Các tham số khác
- ds3_gather_for_generation (
bool, tùy chọn, mặc định làTrue) — Cài đặt này áp dụng cho DeepSpeed ZeRO-3. Nếu được bật, trọng số của mô hình chính sách sẽ được thu thập (gather) cho quá trình sinh, giúp cải thiện tốc độ sinh. Tuy nhiên, việc tắt tùy chọn này cho phép huấn luyện các mô hình vượt quá dung lượng VRAM của một GPU đơn lẻ, dù phải đánh đổi bằng tốc độ sinh chậm hơn. Việc tắt tùy chọn này không tương thích với sinh bằng vLLM. - model_init_kwargs (
dict[str, Any], tuỳ chọn) — Các tham số dạng từ khóa để truyền choAutoModelForCausalLM.from_pretrainedkhi khởi tạo mô hình từ một chuỗi. Giá trịrevisioncũng được sử dụng khi nạp các lớp xử lý phần thưởng. - trust_remote_code (
bool, tùy chọn, mặc định làFalse) — Có cho phép tải các mô hình có kèm theo mã Python tùy chỉnh từ Hub hay không. Tham số này được chuyển tiếp đến from_pretrained. Nó cũng được áp dụng cho việc tải reward-model và reward-tokenizer. - reward_weights (
list[float], tùy chọn) — Trọng số để kết hợp nhiều hàm phần thưởng. Phải khớp với số lượng hàm phần thưởng. NếuNone, tất cả các hàm phần thưởng được gán trọng số bằng nhau.
Lớp cấu hình cho experimental.online_dpo.OnlineDPOTrainer.
Lớp này chỉ bao gồm các tham số đặc thù cho huấn luyện Online DPO. Để xem danh sách đầy đủ các đối số huấn luyện, vui lòng tham khảo tài liệu TrainingArguments. Lưu ý rằng các giá trị mặc định trong lớp này có thể khác với các giá trị trong TrainingArguments.
Sử dụng HfArgumentParser, chúng ta có thể chuyển lớp này thành các đối số argparse có thể được chỉ định trên dòng lệnh.
Các tham số này có giá trị mặc định khác với TrainingArguments:
logging_steps: Mặc định là10thay vì500.gradient_checkpointing: Mặc định làTruethay vìFalse.bf16: Mặc định làTruenếufp16không được đặt, thay vìFalse.learning_rate: Mặc định là5e-7thay vì5e-5.remove_unused_columns: Mặc định làFalsethay vìTrue.