TRL 文件

線上 DPO 訓練器

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

線上 DPO 訓練器

概述

線上 DPO 由 Shangmin Guo, Biao Zhang, Tianlin Liu, Tianqi Liu, Misha Khalman, Felipe Llinares, Alexandre Rame, Thomas Mesnard, Yao Zhao, Bilal Piot, Johan Ferret, 和 Mathieu Blondel 在論文 《Direct Language Model Alignment from Online AI Feedback》 中提出。

論文摘要如下:

直接從偏好對齊(DAP)的方法,如 DPO,最近已成為從人類反饋中進行強化學習(RLHF)的有效替代方案,並且不需要一個獨立的獎勵模型。然而,DAP 方法中使用的偏好資料集通常在訓練前收集並且從不更新,因此反饋是純離線的。此外,這些資料集中的響應通常是從一個與正在對齊的語言模型不同的模型中取樣的,並且由於模型在訓練過程中不斷演變,對齊階段不可避免地是離策略的。在這項研究中,我們認為線上反饋是關鍵,並且能夠改進 DAP 方法。我們的方法,即線上 AI 反饋(OAIF),使用一個大語言模型(LLM)作為標註器:在每次訓練迭代中,我們從當前模型中取樣兩個響應,並提示 LLM 標註器選擇哪個更受偏好,從而提供線上反饋。儘管方法簡單,我們透過在多個任務上的人工評估證明,OAIF 的表現優於離線 DAP 和 RLHF 方法。我們進一步表明,透過向 LLM 標註器提供指令性提示,OAIF 中利用的反饋是易於控制的。

該後訓練方法由 Michael NoukhovitchShengyi Costa HuangQuentin GallouédecEdward Beeching 貢獻。

快速入門

此示例演示如何使用線上 DPO 方法訓練模型。我們使用 Qwen 0.5B 模型 作為基礎模型,並使用 PairRMJudge 作為評判模型。我們使用來自 UltraFeedback 資料集 的提示。你可以在此處檢視資料集中的提示。

以下是訓練模型的指令碼

# train_online_dpo.py
from datasets import load_dataset
from trl import OnlineDPOConfig, OnlineDPOTrainer, PairRMJudge
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
judge = PairRMJudge()
train_dataset = load_dataset("trl-lib/ultrafeedback-prompt", split="train")

training_args = OnlineDPOConfig(output_dir="Qwen2-0.5B-OnlineDPO")
trainer = OnlineDPOTrainer(
    model=model, judge=judge, args=training_args, processing_class=tokenizer, train_dataset=train_dataset
)
trainer.train()

使用以下命令執行指令碼

accelerate launch train_online_dpo.py

在 8 個 GPU 上分散式訓練,大約需要 1 小時。你可以透過檢查獎勵圖來驗證訓練進度。被拒絕和被選擇的補全獎勵都呈上升趨勢,表明模型正在改進並隨著時間的推移生成更好的響應。

要檢視 訓練後的模型 的表現,您可以使用 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.

期望的資料集型別

線上 DPO 僅需要一個僅包含提示的資料集(與離線 DPO 不同,離線 DPO 需要偏好資料集)。OnlineDPOTrainer 支援對話格式標準格式的資料集。當提供對話格式的資料集時,訓練器會自動將聊天模板應用於資料集。

使用技巧

使用獎勵模型

除了評判模型,您還可以選擇使用獎勵模型——請參閱 Reward Bench,這是一個可供使用的公開模型排行榜。下面是一個程式碼示例,展示瞭如何用 trl-lib/Qwen2-0.5B-Reward 模型替換評判模型。

- from trl import PairRMJudge
+ from transformers import AutoModelForSequenceClassification

- judge = PairRMJudge()
+ reward_model = AutoModelForSequenceClassification.from_pretrained("trl-lib/Qwen2-0.5B-Reward", num_labels=1)
+ reward_tokenizer = AutoTokenizer.from_pretrained("trl-lib/Qwen2-0.5B-Reward")

  trainer = OnlineDPOTrainer(
      ...
-     judge=judge,
+     reward_model=reward_model,
+     reward_processing_class=reward_tokenizer,
      ...
  )

鼓勵生成 EOS 標記

在使用獎勵模型時,我們可能希望模型在給定的長度內生成補全。在訓練期間,模型將生成補全,其最大長度由 OnlineDPOConfig 的 `max_new_tokens` 引數指定。如果您想懲罰模型在達到最大長度之前未生成 EOS 標記的情況,可以使用 OnlineDPOConfig 的 `missing_eos_penalty` 引數。

training_args = OnlineDPOConfig(..., max_new_tokens=128, missing_eos_penalty=1.0)

記錄補全

為了更好地理解模型在訓練過程中的行為,您可以使用 LogCompletionsCallback 定期記錄樣本補全。

trainer = OnlineDPOTrainer(..., eval_dataset=eval_dataset)
completions_callback = LogCompletionsCallback(trainer, num_prompts=8)
trainer.add_callback(completions_callback)

此回撥函式直接將模型生成的補全記錄到 Weights & Biases。

Logged Completions

示例指令碼

我們提供了一個示例指令碼,用於使用線上 DPO 方法訓練模型。該指令碼位於 `examples/scripts/dpo_online.py`

要在 UltraFeedback 資料集 上測試使用 Qwen2.5 0.5B 模型 的線上 DPO 指令碼,請執行以下命令

python examples/scripts/dpo_online.py \
    --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct \
    --judge pair_rm \
    --dataset_name trl-lib/ultrafeedback-prompt \
    --learning_rate 5.0e-7 \
    --output_dir Qwen2.5-0.5B-Online-DPO-PairRM \
    --warmup_ratio 0.1 \
    --push_to_hub

記錄的指標

記錄的指標如下。這是一個在 Weights and Biases 上跟蹤的執行示例

  • `objective/kl`:當前模型與參考模型之間的平均 Kullback-Leibler (KL) 散度。
  • `objective/entropy`:模型的平均熵,表示模型選擇的動作的隨機性。
  • objective/non_score_reward: 來自非分數相關來源的平均獎勵,基本上是 beta * kl.sum(1),其中 beta 是 KL 懲罰係數,kl 是每個詞元的 KL 散度。
  • `objective/rlhf_reward`:平均 RLHF 獎勵,即 `scores - non_score_reward`。`rlhf_reward` 是線上 DPO 訓練的最終目標。如果訓練按預期進行,該指標應持續上升。
  • `objective/scores`:獎勵模型返回的平均分數。
  • `objective/scores_margin`:被選擇和被拒絕的補全之間的平均分數差(根據外部獎勵模型)。
  • `rewards/chosen`:被選擇的補全的平均獎勵(根據線上 DPO 的隱式獎勵模型)。
  • `rewards/rejected`:被拒絕的補全的平均獎勵(根據線上 DPO 的隱式獎勵模型)。
  • `rewards/accuracies`:線上 DPO 的隱式獎勵模型的準確率。
  • `rewards/margins`:被選擇和被拒絕的補全之間的平均獎勵差(根據線上 DPO 的隱式獎勵模型)。
  • logps/chosen:被選中補全的平均對數機率。
  • `logps/rejected`:被拒絕的補全的平均對數機率。
  • `val/contain_eos_token`:包含 EOS 標記的補全所佔的比例。
  • `beta`:控制表示與參考模型偏差的損失項權重的引數。通常是固定的,但可以透過向 OnlineDPOConfig 傳遞一個列表來使其動態化。

基準實驗

為了驗證線上 DPO 的實現是否有效,我們在單個 8 x H100s 節點上使用 Pythia 1B、2.8B 和 6.9B 模型進行了實驗。以下是我們用來執行實驗的命令。我們直接從 The N+ Implementation Details of RLHF with PPO: A Case Study on TL;DR Summarization 中獲取 SFT / RM 模型。

# 1B Online DPO experiment
accelerate launch --config_file examples/accelerate_configs/multi_gpu.yaml \
    examples/scripts/dpo_online.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_ratio 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/dpo_online.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_ratio 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/dpo_online.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_ratio 0.1 \
    --missing_eos_penalty 1.0 \
    --gradient_checkpointing \
    --save_steps 0.1 \
    --push_to_hub

檢查點和實驗跟蹤可在以下連結檢視:

為了進行評估,我們使用 vLLM 來載入檢查點,並使用 GPT-4o mini 作為評判模型來評估生成的 TL;DR 與參考 TL;DR。有關如何使用評判模型的更多資訊,請參閱 評判模型

$ python examples/scripts/evals/judge_tldr.py --model_name_or_path trl-lib/pythia-1b-deduped-tldr-sft --judge_model gpt-4o-mini --num_examples 1000
Model win rate: 33.00%
python examples/scripts/evals/judge_tldr.py --model_name_or_path trl-lib/pythia-6.9b-deduped-tldr-sft --judge_model gpt-4o-mini --num_examples 1000
Model win rate: 41.50%
python examples/scripts/evals/judge_tldr.py --model_name_or_path trl-lib/pythia-1b-deduped-tldr-online-dpo --judge_model gpt-4o-mini --num_examples 1000
Model win rate: 62.60%
python examples/scripts/evals/judge_tldr.py --model_name_or_path trl-lib/pythia-6.9b-deduped-tldr-online-dpo --judge_model gpt-4o-mini --num_examples 1000
Model win rate: 74.20%

然後我們可以繪製 RLHF 擴充套件圖。

import matplotlib.pyplot as plt

results = {
    "SFT": {1.0e9: 0.21, 2.8e9: 0.27, 6.9e9: 0.316},
    "online-dpo": {1.0e9: 0.542, 2.8e9: 0.746, 6.9e9: 0.796},
    "offline-dpo": {1.0e9: 0.422, 2.8e9: 0.517, 6.9e9: 0.701},
}


plt.plot(results["SFT"].keys(), results["SFT"].values(), label="SFT", marker="o")
plt.plot(results["online-dpo"].keys(), results["online-dpo"].values(), label="Online-dpo with RM judge", marker="o")
plt.plot(results["offline-dpo"].keys(), results["offline-dpo"].values(), label="Offline-dpo", marker="o")
plt.axhline(y=0.5, color="black", linestyle="-.", label="Human reference summary")
plt.xscale("log")
plt.xlabel("Model size")
plt.ylabel("Win rate against reference summaries\n(according to GPT-4-0613)")
plt.title("DPO scaling by model size")
plt.legend()
plt.xlim(5e8, 1.2e10)
plt.xticks([1e9, 3e9, 1e10], ["1B", "3B", "10B"])
plt.grid(True, which="both", ls="--", c="0.7")
plt.tight_layout()
plt.show()

隨著我們擴大模型規模,線上 DPO 檢查點獲得了越來越高的勝率。這是一個好跡象,表明線上 DPO 的實現按預期工作。

OnlineDPOTrainer

class trl.OnlineDPOTrainer

< >

( model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.modules.module.Module, str] ref_model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.modules.module.Module, NoneType] = None reward_model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.modules.module.Module, NoneType] = None judge: typing.Optional[trl.trainer.judges.BasePairwiseJudge] = None args: typing.Optional[trl.trainer.online_dpo_config.OnlineDPOConfig] = None data_collator: typing.Optional[transformers.data.data_collator.DataCollator] = None train_dataset: typing.Union[datasets.arrow_dataset.Dataset, torch.utils.data.dataset.IterableDataset, ForwardRef('datasets.Dataset'), NoneType] = None eval_dataset: typing.Union[datasets.arrow_dataset.Dataset, dict[str, datasets.arrow_dataset.Dataset], ForwardRef('datasets.Dataset'), NoneType] = None processing_class: typing.Union[transformers.tokenization_utils_base.PreTrainedTokenizerBase, transformers.image_processing_utils.BaseImageProcessor, transformers.feature_extraction_utils.FeatureExtractionMixin, transformers.processing_utils.ProcessorMixin, NoneType] = None reward_processing_class: typing.Optional[transformers.tokenization_utils_base.PreTrainedTokenizerBase] = None peft_config: typing.Optional[dict] = None compute_metrics: typing.Optional[typing.Callable[[transformers.trainer_utils.EvalPrediction], dict]] = None callbacks: typing.Optional[list[transformers.trainer_callback.TrainerCallback]] = None optimizers: tuple = (None, None) preprocess_logits_for_metrics: typing.Optional[typing.Callable[[torch.Tensor, torch.Tensor], torch.Tensor]] = None )

引數

  • model (Union[str, nn.Module, PreTrainedModel]) — 要訓練的模型。可以是:

    • 一個字串,作為託管在 huggingface.co 模型庫中的預訓練模型的*模型 ID*,或一個包含使用 `save_pretrained` 儲存的模型權重的*目錄*路徑,例如 `'./my_model_directory/'`。模型使用 `from_pretrained` 並附帶 `args.model_init_kwargs` 中的關鍵字引數載入。
    • 一個 `PreTrainedModel` 物件。僅支援因果語言模型。
  • ref_model (transformers.PreTrainedModel or torch.nn.Module or None) — 用於訓練的參考模型。如果指定為 None,將從模型建立參考模型。
  • reward_model (transformers.PreTrainedModel or torch.nn.Module or None) — 用於對補全進行評分的獎勵模型,最好是 `AutoModelForSequenceClassification`。
  • judge (BasePairwiseJudge) — 用於對模型補全進行成對比較的評判模型。
  • args (OnlineDPOConfig) — 用於訓練的線上 DPO 配置引數。
  • data_collator (transformers.DataCollator) — 用於訓練的資料整理器。如果指定為 None,將使用預設的資料整理器 (`DPODataCollatorWithPadding`),它會根據批次中序列的最大長度對序列進行填充,給定一個成對序列的資料集。
  • train_dataset (datasets.Dataset) — 用於訓練的資料集。
  • eval_dataset (datasets.Dataset) — 用於評估的資料集。
  • processing_class (PreTrainedTokenizerBase, BaseImageProcessor, FeatureExtractionMixin or ProcessorMixin, *optional*, defaults to None) — 用於處理資料的處理類。如果提供,將用於自動處理模型的輸入,並與模型一起儲存,以便更容易地重新執行中斷的訓練或重用微調後的模型。
  • peft_config (dict) — 用於訓練的 peft 配置。
  • compute_metrics (Callable[[EvalPrediction], dict], *optional*) — 用於計算指標的函式。必須接受一個 `EvalPrediction` 並返回一個從字串到指標值的字典。
  • callbacks (list[transformers.TrainerCallback]) — 用於訓練的回撥函式。
  • optimizers (tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — 用於訓練的最佳化器和學習率排程器。
  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — 用於在計算指標前預處理 logits 的函式。

初始化 OnlineDPOTrainer。

train

< >

( resume_from_checkpoint: typing.Union[str, bool, NoneType] = None trial: typing.Union[ForwardRef('optuna.Trial'), dict[str, typing.Any], NoneType] = None ignore_keys_for_eval: typing.Optional[list[str]] = None **kwargs )

引數

  • resume_from_checkpoint (str or bool, *optional*) — 如果是 `str`,則為 `Trainer` 的前一個例項儲存的檢查點的本地路徑。如果是 `bool` 且等於 `True`,則載入 `args.output_dir` 中由 `Trainer` 的前一個例項儲存的最後一個檢查點。如果存在,訓練將從此處載入的模型/最佳化器/排程器狀態恢復。
  • trial (optuna.Trial or dict[str, Any], *optional*) — 用於超引數搜尋的試驗執行或超引數字典。
  • ignore_keys_for_eval (list[str], *optional*) — 模型輸出中(如果它是一個字典)應在訓練期間收集評估預測時忽略的鍵列表。
  • kwargs (dict[str, Any], *optional*) — 用於隱藏已棄用引數的附加關鍵字引數。

主訓練入口點。

save_model

< >

( output_dir: typing.Optional[str] = None _internal_call: bool = False )

將儲存模型,以便您可以使用 `from_pretrained()` 重新載入它。

僅從主程序儲存。

push_to_hub

< >

( commit_message: typing.Optional[str] = 'End of training' blocking: bool = True token: typing.Optional[str] = None revision: typing.Optional[str] = None **kwargs )

引數

  • commit_message (str, *optional*, defaults to "End of training") — 推送時提交的訊息。
  • blocking (bool, *optional*, defaults to True) — 該函式是否應僅在 `git push` 完成後返回。
  • token (str, *optional*, defaults to None) — 具有寫許可權的令牌,用於覆蓋 Trainer 的原始引數。
  • revision (str, *optional*) — 要提交的 git 修訂版本。預設為“main”分支的頭部。
  • kwargs (dict[str, Any], *optional*) — 傳遞給 `~Trainer.create_model_card` 的附加關鍵字引數。

將 `self.model` 和 `self.processing_class` 上傳到 🤗 模型中心的 `self.args.hub_model_id` 儲存庫。

OnlineDPOConfig

class trl.OnlineDPOConfig

< >

( output_dir: typing.Optional[str] = None overwrite_output_dir: bool = False do_train: bool = False do_eval: bool = False do_predict: bool = False eval_strategy: typing.Union[transformers.trainer_utils.IntervalStrategy, str] = 'no' prediction_loss_only: bool = False per_device_train_batch_size: int = 8 per_device_eval_batch_size: int = 8 per_gpu_train_batch_size: typing.Optional[int] = None per_gpu_eval_batch_size: typing.Optional[int] = None gradient_accumulation_steps: int = 1 eval_accumulation_steps: typing.Optional[int] = None eval_delay: typing.Optional[float] = 0 torch_empty_cache_steps: typing.Optional[int] = None learning_rate: float = 5e-07 weight_decay: float = 0.0 adam_beta1: float = 0.9 adam_beta2: float = 0.999 adam_epsilon: float = 1e-08 max_grad_norm: float = 1.0 num_train_epochs: float = 3.0 max_steps: int = -1 lr_scheduler_type: typing.Union[transformers.trainer_utils.SchedulerType, str] = 'linear' lr_scheduler_kwargs: typing.Union[dict[str, typing.Any], str, NoneType] = <factory> warmup_ratio: float = 0.0 warmup_steps: int = 0 log_level: str = 'passive' log_level_replica: str = 'warning' log_on_each_node: bool = True logging_dir: typing.Optional[str] = None logging_strategy: typing.Union[transformers.trainer_utils.IntervalStrategy, str] = 'steps' logging_first_step: bool = False logging_steps: float = 10 logging_nan_inf_filter: bool = True save_strategy: typing.Union[transformers.trainer_utils.SaveStrategy, str] = 'steps' save_steps: float = 500 save_total_limit: typing.Optional[int] = None save_safetensors: typing.Optional[bool] = True save_on_each_node: bool = False save_only_model: bool = False restore_callback_states_from_checkpoint: bool = False no_cuda: bool = False use_cpu: bool = False use_mps_device: bool = False seed: int = 42 data_seed: typing.Optional[int] = None jit_mode_eval: bool = False use_ipex: bool = False bf16: typing.Optional[bool] = None fp16: bool = False fp16_opt_level: str = 'O1' half_precision_backend: str = 'auto' bf16_full_eval: bool = False fp16_full_eval: bool = False tf32: typing.Optional[bool] = None local_rank: int = -1 ddp_backend: typing.Optional[str] = None tpu_num_cores: typing.Optional[int] = None tpu_metrics_debug: bool = False debug: typing.Union[str, list[transformers.debug_utils.DebugOption]] = '' dataloader_drop_last: bool = False eval_steps: typing.Optional[float] = None dataloader_num_workers: int = 0 dataloader_prefetch_factor: typing.Optional[int] = None past_index: int = -1 run_name: typing.Optional[str] = None disable_tqdm: typing.Optional[bool] = None remove_unused_columns: typing.Optional[bool] = True label_names: typing.Optional[list[str]] = None load_best_model_at_end: typing.Optional[bool] = False metric_for_best_model: typing.Optional[str] = None greater_is_better: typing.Optional[bool] = None ignore_data_skip: bool = False fsdp: typing.Union[list[transformers.trainer_utils.FSDPOption], str, NoneType] = '' fsdp_min_num_params: int = 0 fsdp_config: typing.Union[dict[str, typing.Any], str, NoneType] = None fsdp_transformer_layer_cls_to_wrap: typing.Optional[str] = None accelerator_config: typing.Union[dict, str, NoneType] = None deepspeed: typing.Union[dict, str, NoneType] = None label_smoothing_factor: float = 0.0 optim: typing.Union[transformers.training_args.OptimizerNames, str] = 'adamw_torch' optim_args: typing.Optional[str] = None adafactor: bool = False group_by_length: bool = False length_column_name: typing.Optional[str] = 'length' report_to: typing.Union[NoneType, str, list[str]] = None ddp_find_unused_parameters: typing.Optional[bool] = None ddp_bucket_cap_mb: typing.Optional[int] = None ddp_broadcast_buffers: typing.Optional[bool] = None dataloader_pin_memory: bool = True dataloader_persistent_workers: bool = False skip_memory_metrics: bool = True use_legacy_prediction_loop: bool = False push_to_hub: bool = False resume_from_checkpoint: typing.Optional[str] = None hub_model_id: typing.Optional[str] = None hub_strategy: typing.Union[transformers.trainer_utils.HubStrategy, str] = 'every_save' hub_token: typing.Optional[str] = None hub_private_repo: typing.Optional[bool] = None hub_always_push: bool = False hub_revision: typing.Optional[str] = None gradient_checkpointing: bool = False gradient_checkpointing_kwargs: typing.Union[dict[str, typing.Any], str, NoneType] = None include_inputs_for_metrics: bool = False include_for_metrics: list = <factory> eval_do_concat_batches: bool = True fp16_backend: str = 'auto' push_to_hub_model_id: typing.Optional[str] = None push_to_hub_organization: typing.Optional[str] = None push_to_hub_token: typing.Optional[str] = None mp_parameters: str = '' auto_find_batch_size: bool = False full_determinism: bool = False torchdynamo: typing.Optional[str] = None ray_scope: typing.Optional[str] = 'last' ddp_timeout: int = 1800 torch_compile: bool = False torch_compile_backend: typing.Optional[str] = None torch_compile_mode: typing.Optional[str] = None include_tokens_per_second: typing.Optional[bool] = False include_num_input_tokens_seen: typing.Optional[bool] = False neftune_noise_alpha: typing.Optional[float] = None optim_target_modules: typing.Union[NoneType, str, list[str]] = None batch_eval_metrics: bool = False eval_on_start: bool = False use_liger_kernel: typing.Optional[bool] = False liger_kernel_config: typing.Optional[dict[str, bool]] = None eval_use_gather_object: typing.Optional[bool] = False average_tokens_across_devices: typing.Optional[bool] = True reward_model_path: typing.Optional[str] = None judge: typing.Optional[str] = None max_new_tokens: int = 64 max_length: int = 512 temperature: float = 0.9 missing_eos_penalty: typing.Optional[float] = None beta: list = <factory> loss_type: str = 'sigmoid' dataset_num_proc: typing.Optional[int] = None disable_dropout: bool = True use_vllm: bool = False vllm_model_impl: str = 'vllm' gpu_memory_utilization: typing.Optional[float] = 0.55 ds3_gather_for_generation: bool = True model_init_kwargs: typing.Optional[dict[str, typing.Any]] = None )

引數

  • reward_model_path (strNone, 可選, 預設為 None) — 獎勵模型的路徑。必須設定 judgereward_model_path,但不能同時設定。
  • judge (strNone, 可選, 預設為 None) — 要使用的裁判(judge)名稱。必須設定 judgereward_model_path,但不能同時設定。
  • max_new_tokens (int, 可選, 預設為 64) — 每次補全(completion)生成的最大詞元數(token)。
  • max_length (int, 可選, 預設為 256) — 用於計算對數機率的序列(提示 + 補全)的最大總長度。如果序列超過此限制,將截斷最左側的詞元,以儘可能多地保留補全部分。
  • temperature (float, 可選, 預設為 0.9) — 用於取樣的溫度。溫度越高,補全結果越隨機。
  • missing_eos_penalty (floatNone, 可選, 預設為 None) — 當模型未能生成 EOS(序列結束)詞元時應用於分數的懲罰。這有助於鼓勵模型生成比最大長度(max_new_tokens)更短的補全。懲罰值必須為正數。
  • beta (floatlist[float], 可選, 預設為 0.1) — 控制與參考模型偏差的引數。較高的 β 意味著與參考模型的偏差較小。對於 IPO 損失(loss_type="ipo"),β 是論文中表示為 τ 的正則化引數。如果提供了一個浮點數列表,則會為每個新的 epoch 選擇一個 β,並且最後一個 β 將用於剩餘的 epoch。
  • loss_type (str, 可選, 預設為 "sigmoid") — 要使用的損失型別。可能的值有:

    • "sigmoid": 來自原始 DPO 論文的 sigmoid 損失。
    • "ipo": 來自 IPO 論文的 IPO 損失。
  • dataset_num_proc (intNone, 可選, 預設為 None) — 用於處理資料集的程序數。
  • disable_dropout (bool, 可選, 預設為 True) — 是否在模型和參考模型中停用 dropout。
  • use_vllm (bool, 可選, 預設為 False) — 是否使用 vLLM 生成補全。需要安裝 vLLM(pip install vllm)。
  • vllm_model_impl (str, 可選, 預設為 "vllm") — 用於 vLLM 的模型實現。必須是 "transformers""vllm" 之一。"transformers": 使用 transformers 後端進行模型實現。"vllm": 使用 vllm 庫進行模型實現。
  • gpu_memory_utilization (float, 可選, 預設為 0.55) — vLLM 視訊記憶體利用率。預設值為 0.55。
  • ds3_gather_for_generation (bool, 可選, 預設為 True) — 此設定適用於 DeepSpeed ZeRO-3。如果啟用,策略模型的權重將在生成時被聚合,從而提高生成速度。然而,停用此選項可以訓練超過單個 GPU 視訊記憶體容量的模型,但代價是生成速度較慢。
  • model_init_kwargs (dict[str, Any]None, 可選, 預設為 None) — 當從字串例項化模型時,傳遞給 AutoModelForCausalLM.from_pretrained 的關鍵字引數。

OnlineDPOTrainer 的配置類。

此類僅包含特定於 Online DPO 訓練的引數。有關訓練引數的完整列表,請參閱 TrainingArguments 文件。請注意,此類中的預設值可能與 TrainingArguments 中的預設值不同。

使用 HfArgumentParser,我們可以將此類別轉換為可在命令列上指定的 argparse 引數。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.