TRL documentation

Trainer DPO trực tuyến

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

Trainer DPO trực tuyến

model badge

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.

Logged Completions

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 đó beta là hệ số phạt KL và kl là độ 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_reward là 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_hub

Cá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

< >

( 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 trong args.model_init_kwargs.
    • Một đối tượng PreTrainedModel. Chỉ hỗ trợ các mô hình ngôn ngữ nhân quả.
  • ref_model (PreTrainedModel hoặc torch.nn.Module hoặc None) — 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 trong reward_funcs. Có thể là:
    • Một lớp xử lý duy nhất: Được sử dụng khi reward_funcs chỉ 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.

  • 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ột EvalPrediction và 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

< >

( 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 (str hoặc bool, 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ên Trainer trước đó. Nếu là bool và bằng True, tải checkpoint cuối cùng trong args.output_dir do một phiên Trainer trướ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.Trial hoặc dict[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.

save_model

< >

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

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

< >

( 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ề khi git 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

< >

( 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 (float hoặc list[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à:
    • "sigmoid": hàm mất mát sigmoid từ bài báo DPO gốc.
    • "ipo": tổn thất IPO từ bài báo IPO.
  • 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ành 1.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 đến 1.0. Các giá trị điển hình nằm trong khoảng 0.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.0 khuyến khích mô hình sử dụng các token mới, trong khi các giá trị < 1.0 khuyế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 khi use_vllm được đặt thành False.
  • 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ặc SamplingParams (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ư đặt suppress_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ành True, 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ầu vllm phả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 backend transformers cho cài đặt mô hình. "vllm": Sử dụng thư viện vllm cho 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 khi use_vllm được đặt thành True. 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ằng vllm 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ếu None (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_host và vllm_server_port sẽ 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ếu vllm_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ếu vllm_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ột ConnectionError sẽ đượ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 khi vllm_mode được đặt thành "colocate". Nếu bạn đang sử dụng vllm_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 khi vllm_mode được đặt thành "colocate". Nếu bạn đang sử dụng vllm_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 cho AutoModelForCausalLM.from_pretrained khi khởi tạo mô hình từ một chuỗi. Giá trị revision cũ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ếu None, 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à 10 thay vì 500.
  • gradient_checkpointing: Mặc định là True thay vì False.
  • bf16: Mặc định là True nếu fp16 không được đặt, thay vì False.
  • learning_rate: Mặc định là 5e-7 thay vì 5e-5.
  • remove_unused_columns: Mặc định là False thay vì True.
Update on GitHub