TRL documentation
オンライン DPO トレーナー
オンライン DPO トレーナー
概要
Online 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で提案されました。
論文の要旨は以下の通りです:
DPOなどの、好みに基づく直接アライメント(DAP)手法は、個別の報酬モデルを必要としない、人間のフィードバックによる強化学習(RLHF)の効率的な代替手段として最近登場しました。しかし、DAP手法で使用される好みデータセットは通常、学習前に収集され、その後更新されないため、フィードバックは純粋にオフラインとなります。さらに、これらのデータセット内の応答は、アライメント対象のモデルとは異なる言語モデルからサンプリングされることが多く、モデルは学習の過程で進化するため、アライメント段階は必然的にオフポリシーとなります。本研究では、オンラインフィードバックが鍵であり、DAP手法を改善すると仮定しています。我々の手法であるオンラインAIフィードバック(OAIF)は、LLMをアノテーターとして使用します。各学習イテレーションにおいて、現在のモデルから2つの応答をサンプリングし、LLMアノテーターにどちらが好ましいかを選択させるプロンプトを与え、オンラインフィードバックを提供します。そのシンプルさにもかかわらず、複数のタスクにおける人間による評価を通じて、OAIFがオフラインDAP手法およびRLHF手法の両方を上回ることを示しました。さらに、OAIFで活用されるフィードバックは、LLMアノテーターへの指示プロンプトによって容易に制御可能であることを示しました。
このポストトレーニング手法は、Michael Noukhovitch、Shengyi Costa Huang、Quentin Gallouédec、Edward Beeching によって提供されました。
クイックスタート
この例では、オンラインDPO手法を用いてモデルを学習する方法を示します。ベースモデルにはQwen 0.5Bモデルを、報酬モデルにはtrl-lib/Qwen2-0.5B-Rewardを使用します。プロンプトにはUltraFeedbackデータセットのものを使用します。データセット内のプロンプトは、こちらで確認できます:
以下は、モデルを学習するためのスクリプトです:
# 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()以下のコマンドを使用してスクリプトを実行します:
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.
期待されるデータセットの型
Online DPOには、プロンプトのみを含むデータセット(オフラインDPOとは異なり、選好データセットを必要としない)のみが必要です。experimental.online_dpo.OnlineDPOTrainerは、会話形式と標準形式の両方のデータセット形式をサポートしています。会話形式のデータセットが提供されると、トレーナーは自動的にデータセットにチャットテンプレートを適用します。
使用のコツ
EOSトークンの生成を促す
報酬モデルを使用する場合、指定された長さの範囲内で補完を生成するようにモデルに設定したい場合があります。トレーニング中、モデルはexperimental.online_dpo.OnlineDPOConfigのmax_new_tokens引数で指定された最大長まで補完を生成します。最大長に達する前にEOSトークンを生成しなかった場合にモデルをペナルティしたい場合は、experimental.online_dpo.OnlineDPOConfigのmissing_eos_penalty引数を使用できます。
training_args = OnlineDPOConfig(..., max_new_tokens=128, missing_eos_penalty=1.0)Completionsのロギング
トレーニング中のモデルの動作をより深く理解するために、LogCompletionsCallback を使用してサンプルの補完を定期的に記録できます。
trainer = OnlineDPOTrainer(..., eval_dataset=eval_dataset)
completions_callback = LogCompletionsCallback(trainer, num_prompts=8)
trainer.add_callback(completions_callback)このコールバックは、モデルが生成した補完をWeights & Biasesに直接記録します。

記録されたメトリクス
学習と評価の実行中、以下のメトリクスを記録します。以下は、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: 参照モデルからの逸脱を表す損失項の重みを制御するパラメータです。通常は固定されますが、experimental.online_dpo.OnlineDPOConfig にリストを渡すことで動的に設定できます。
ベンチマーク実験
オンラインDPOの実装が機能することを確認するために、単一ノードの8 x H100でPythia 1B、2.8B、6.9Bモデルを用いた実験を実行しました。以下は、当時存在していたオンラインDPOのサンプルスクリプト(examples/scripts/online_dpo.py、現在は削除済み)を使用して実験を実行するために使用したコマンドです。再現するには、v1.10.0のチェックアウト(git checkout v1.10.0)から実行してください。SFT / RMモデルは、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チェックポイントと実験の追跡は、以下の場所で利用できます:
モデルサイズを拡大するにつれて、オンラインDPOのチェックポイントの勝率は向上しています。これは、オンラインDPOの実装が意図した通りに機能していることを示す良い兆候です。
OnlineDPOTrainer
クラス 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 )
パラメータ
- model (
str | nn.Module | PreTrainedModel) — 学習対象のモデル。以下のいずれかです:- 文字列。huggingface.co のモデルリポジトリにホストされている事前学習モデルの model id、または save_pretrained を使用して保存されたモデルの重みを含む ディレクトリ へのパス。例:
'./my_model_directory/'。モデルは、args.model_init_kwargsのキーワード引数を使用して from_pretrained によって読み込まれます。 - PreTrainedModelオブジェクト。因果言語モデルのみサポートされています。
- 文字列。huggingface.co のモデルリポジトリにホストされている事前学習モデルの model id、または save_pretrained を使用して保存されたモデルの重みを含む ディレクトリ へのパス。例:
- ref_model (PreTrainedModel または
torch.nn.ModuleまたはNone) — 学習に使用する参照モデルです。None が指定されている場合、参照モデルは model から作成されます。 - reward_funcs (
RewardFunc | list[RewardFunc]) — 報酬の計算に使用する報酬関数です。報酬を計算するには、プロンプトと補完を引数としてすべての報酬関数を呼び出し、その結果の合計を計算します。以下のいずれかの形式を指定できます:- 単一の報酬関数: 文字列(モデルへのパス)、PreTrainedModel、またはカスタムの呼び出し可能関数であることができます。
- 報酬関数のリスト: すべてが互換性のある型である必要があります。
- args (experimental.online_dpo.OnlineDPOConfig) — 学習に使用するオンライン DPO の設定引数です。
- data_collator (
DataCollator) — 学習に使用するデータコラレーター。None が指定された場合、デフォルトのデータコラレーター (experimental.utils.DPODataCollatorWithPadding) が使用されます。これは、ペアのシーケンスからなるデータセットに対して、バッチ内のシーケンスの最大長までシーケンスをパディングします。 - train_dataset (Dataset または IterableDataset) — 学習に使用するデータセット。
- eval_dataset (Dataset、IterableDataset、または
dict[str, Dataset | IterableDataset]) — 評価に使用するデータセット。 - processing_class (PreTrainedTokenizerBase または ProcessorMixin、任意) — データを処理するために使用される処理クラスです。指定された場合、モデルの入力を自動的に処理するために使用され、中断されたトレーニングを再開したり、ファインチューニングされたモデルを再利用したりしやすくするために、モデルとともに保存されます。
- reward_processing_classes (PreTrainedTokenizerBase または
list[PreTrainedTokenizerBase], 省略可) — reward_funcs で指定された報酬関数に対応する処理クラスです。reward_funcs. 以下のいずれかです:- 単一の処理クラス:
reward_funcsに報酬関数が1つのみ含まれている場合に使用されます。 - 処理クラスのリスト:
reward_funcs内の報酬関数の順序と長さに一致する必要があります。
Noneに設定されている場合、各モデルベースの報酬関数用のトークナイザーは、from_pretrainedを使用して自動的に読み込まれます。 - 単一の処理クラス:
- peft_config (PeftConfig、任意) —
モデルをラップするために使用されるPEFT設定です。
Noneの場合、モデルはラップされません。 - compute_metrics (
Callable[[EvalPrediction], dict], 省略可) — メトリクスを計算するために使用する関数。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
< 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
パラメータ
- resume_from_checkpoint (
strまたはbool、省略可) —strの場合、以前のTrainerインスタンスによって保存されたチェックポイントのローカルパスを指定します。boolでTrueの場合、以前のTrainerインスタンスによって args.output_dir に保存された最後のチェックポイントを読み込みます。指定がある場合、ここで読み込まれたモデル/オプティマイザ/スケジューラの状態からトレーニングを再開します。 - trial (
optuna.Trialまたはdict[str, Any]、省略可) — ハイパーパラメータ探索のための試行またはハイパーパラメータの辞書。 - ignore_keys_for_eval (
list[str]、省略可) — モデルの出力が辞書である場合、学習中の評価で予測を収集する際に無視すべきキーのリストです。
戻り値
~trainer_utils.TrainOutput
グローバルステップ数、トレーニング損失、およびメトリクスを含むオブジェクト。
メインの学習エントリポイント。
モデルを保存するため、from_pretrained()を使用して再読み込みできます。
メインプロセスからのみ保存します。
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )
パラメータ
- commit_message (
str、任意、デフォルトは"End of training") — プッシュ時にコミットするメッセージ。 - blocking (
bool、省略可能、デフォルトはTrue) —git pushが完了した後にのみ関数が返すかどうか。 - token (
str、任意、デフォルトはNone) — Trainer の元の引数を上書きするための書き込み権限を持つトークン。 - revision (
str, 省略可) — コミット元の git リビジョンです。“main” ブランチのヘッドがデフォルトです。 - kwargs (
dict[str, Any]、省略可) —~Trainer.create_model_cardに渡される追加のキーワード引数。
self.args.hub_model_id のリポジトリに、self.model と self.processing_class を 🤗 model hub にアップロードします。
OnlineDPOConfig
クラス 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 )
パラメータ
- reward_model_path (
str, 任意) — 報酬モデルへのパス。 - max_new_tokens (
int、任意、デフォルトは64) — 1回の補完で生成するトークンの最大数。 - max_length (
int、任意、デフォルトは512) — 対数尤度を計算するために使用されるシーケンス(プロンプト + 補完)の最大総長です。シーケンスがこの上限を超えた場合、補完部分をできるだけ多く保持するために、左端のトークンが切り捨てられます。入力に画像が含まれている場合は、切り捨てによって画像トークンが失われるため、このパラメータは適用されません。 - temperature (
float、任意、デフォルトは0.9) — サンプリング用の温度です。温度が高いほど、補完結果はランダムになります。 - missing_eos_penalty (
float, 任意) — モデルが EOS トークンを生成できなかった場合にスコアに適用されるペナルティです。これにより、最大長(max_new_tokens)より短い補完を生成することを促すことができます。ペナルティは正の値でなければなりません。 - beta (
floatまたはlist[float]、任意、デフォルトは0.1) — 参照モデルからの逸脱を制御するパラメータです。β の値が大きいほど、参照モデルからの逸脱は小さくなります。IPO ロス (loss_type="ipo") の場合、β は 論文 で τ と表記される正則化パラメータです。float のリストが指定された場合、各新しいエポックごとに β が選択され、最後の β が残りのエポックで使用されます。 - loss_type (
str, 省略可, デフォルトは"sigmoid") — 使用する損失の種類。使用可能な値は以下の通りです: - disable_dropout (
bool、任意、デフォルトはTrue) — モデルおよび参照モデルでdropoutを無効にするかどうかを指定します。
生成を制御するパラメータ
- top_p (
float、任意、デフォルトは1.0) — 考慮する上位トークンの累積確率を制御する浮動小数点数です。値は (0, 1] の範囲でなければなりません。すべてのトークンを考慮するには1.0を設定してください。 - top_k (
int、任意、デフォルトは0) — トップkフィルタリングのために保持する、確率の高い語彙トークンの数。0の場合、トップkフィルタリングは無効になり、すべてのトークンが対象となります。 - min_p (
float, 省略可) — トークンの最小確率です。最も確率の高いトークンの確率でスケーリングされます。0.0と1.0の間の値である必要があります。一般的な値は0.01-0.2の範囲です。 - repetition_penalty (
float、任意、デフォルト値は1.0) — プロンプトとこれまでに生成されたテキストにトークンが出現しているかどうかに基づいて、新しいトークンをペナルティする浮動小数点数です。 値が1.0より大きい場合、モデルは新しいトークンを使用するよう促され、値が1.0より小さい場合、モデルはトークンを繰り返すよう促されます。 - cache_implementation (
str, 任意) —use_vllmがFalseに設定されている場合、生成を高速化するためのキャッシュ方式の実装。 - generation_kwargs (
dict[str, Any], 省略可) — 補完のサンプリング時に GenerationConfig (transformers を使用する場合) またはSamplingParams(vLLM を使用する場合) に渡す追加のキーワード引数です。suppress_tokensやnum_beamsの設定など、生成の動作をさらにカスタマイズするために使用できます。 他の生成パラメータ (例:min_p、top_pなど) と競合するキーが含まれている場合、それらが上書きされます。
vLLM による生成加速を制御するパラメータ
- use_vllm (
bool、省略可、デフォルトはFalse) — 補完の生成に vLLM を使用するかどうかを指定します。Trueに設定すると、デフォルトの model.generate() の代わりに、vLLM を生成に使用します。vllmのインストールが必要です。 - vllm_model_impl (
str、任意、デフォルトは"vllm") — vLLM に使用するモデル実装です。"transformers"または"vllm"のいずれかである必要があります。"transformers": モデル実装にtransformersバックエンドを使用します。"vllm": モデル実装にvllmライブラリを使用します。 - vllm_mode (
str, 省略可能, デフォルトは"colocate") — がuse_vllmに設定されている場合の vLLM 統合で使用するモードTrue. のいずれかである必要があります"server"または"colocate"."server": トレーナーは、別の vLLM サーバーに生成リクエストを送信します。vLLM サーバーが実行されていることを確認してください(vllm serveで開始)。"colocate": vLLM は同じプロセス内で実行され、トレーニング用の GPU を共有します。これにより、別のサーバーを必要としない一方で、トレーニングとの間でリソースの競合が発生する可能性があります。
- vllm_structured_outputs_regex (
str, 省略可) — vLLM の構造化出力に使用する正規表現です。None(デフォルト)の場合、構造化出力は無効になります。
vLLM サーバーを制御するパラメータ(`vllm_mode` が `"server"` の場合のみ使用)
- vllm_server_base_url (
str, 省略可) — vLLM サーバーのベース URL (例:"http://localhost:8000")。指定された場合、vllm_server_hostおよびvllm_server_portは無視されます。 - vllm_server_host (
str、任意、デフォルトは"0.0.0.0") — 接続する vLLM サーバーのホストです。vllm_server_base_urlが指定されている場合は無視されます。 - vllm_server_port (
int、任意、デフォルトは8000) — 接続する vLLM サーバーのポートです。vllm_server_base_urlが指定されている場合は無視されます。 - vllm_server_timeout (
float, 省略可能、デフォルト値は240.0) — vLLM サーバーの起動を待機する合計タイムアウト時間(秒)です。タイムアウト後にサーバーが起動していない場合、ConnectionErrorが発生します。 - vllm_group_port (
int, 任意、デフォルトは51216) — 重み更新グループ用のポート番号です。vLLM サーバーとの通信に使用されます。ポートが占有されていない限り、変更する必要はありません。
colocate された vLLM 実行を制御するパラメータ(`vllm_mode` が `"colocate"` の場合のみ使用)
- vllm_gpu_memory_utilization (
float、任意、デフォルト値は0.55) — vLLM の GPU メモリ使用率を制御します。この設定は、vllm_modeが"colocate"に設定されている場合にのみ適用されます。vllm_mode="server"を使用している場合は、--vllm_gpu_memory_utilizationフラグを指定して vLLM サーバーを起動する際に、このパラメータを別途渡す必要があります。 - vllm_tensor_parallel_size (
int、任意、デフォルトは1) — vLLM のテンソル並列サイズを制御します。この設定は、vllm_modeが"colocate"に設定されている場合にのみ適用されます。vllm_mode="server"を使用している場合は、--vllm_tensor_parallel_sizeフラグを指定して vLLM サーバーを起動する際に、このパラメータを別途渡す必要があります。 - vllm_enable_sleep_mode (
bool、任意、デフォルトはFalse) — オプティマイザーステップ中に重み/キャッシュをオフロードするために、vLLM のスリープモードを有効にします。GPU メモリ使用率を低く保ちますが、エンジンの復帰時にホストとデバイス間の転送遅延が発生します。
その他のパラメータ
- ds3_gather_for_generation (
bool、任意、デフォルトはTrue) — この設定は DeepSpeed ZeRO-3 に適用されます。有効にすると、生成のためにポリシーモデルの重みが集約され、生成速度が向上します。ただし、このオプションを無効にすると、1 つの GPU の VRAM 容量を超えるモデルのトレーニングが可能になりますが、その代わりとして生成速度は低下します。このオプションを無効にすると、vLLM による生成と互換性がありません。 - model_init_kwargs (
dict[str, Any]、省略可) — 文字列からモデルをインスタンス化する際にAutoModelForCausalLM.from_pretrainedに渡すキーワード引数です。revisionの値は、報酬処理クラスの読み込み時にも使用されます。 - trust_remote_code (
bool、省略可、デフォルトはFalse) — HubからカスタムのPythonコードを同梱したモデルを読み込むことを許可するかどうか。from_pretrainedに転送されます。報酬モデルおよび報酬トークナイザの読み込みにも適用されます。 - reward_weights (
list[float], 任意) — 複数の報酬関数を組み合わせるための重みです。報酬関数の数と一致する必要があります。Noneの場合、すべての報酬関数が等しく重み付けされます。
experimental.online_dpo.OnlineDPOTrainerの構成クラスです。
このクラスには、Online DPO 学習に固有のパラメータのみが含まれます。学習引数の完全なリストについては、TrainingArgumentsのドキュメントを参照してください。なお、このクラスのデフォルト値は、TrainingArgumentsのものと異なる場合があります。
HfArgumentParser を使用すると、このクラスをコマンドラインで指定できる argparse の引数に変換できます。
これらのパラメータは、TrainingArgumentsとは異なるデフォルト値を持っています:
logging_steps: デフォルト値が500ではなく10になります。gradient_checkpointing: デフォルト値がFalseではなくTrueに変更されました。bf16:fp16が設定されていない場合、デフォルトでFalseではなくTrueになります。learning_rate:5e-5ではなく、デフォルト値が5e-7に変更されています。remove_unused_columns: デフォルト値がTrueではなくFalseに変更されました。