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와 같은 선호 기반 직접 정렬(Direct Alignment from Preferences, DAP) 방법은 최근, 별도의 보상 모델이 필요하지 않은 인간 피드백 기반 강화 학습(RLHF)의 효율적인 대안으로 부상했습니다. 그러나 DAP 방법에서 사용되는 선호 데이터셋은 일반적으로 학습 전에 수집되어 이후 업데이트되지 않으므로, 피드백은 순수하게 오프라인입니다. 또한, 이러한 데이터셋의 응답은 정렬 대상 모델과 다른 언어 모델에서 샘플링되는 경우가 많으며, 모델이 학습 과정에서 진화하므로 정렬 단계는 필연적으로 오프-폴리시(off-policy)가 됩니다. 본 연구에서는 온라인 피드백이 핵심이며 DAP 방법을 개선한다고 가정합니다. 제안하는 방법인 온라인 AI 피드백(Online AI Feedback, OAIF)은 LLM을 annotator로 사용합니다. 각 학습 반복(iteration)에서 현재 모델로부터 두 개의 응답을 샘플링하고, LLM annotator에게 어느 응답이 선호되는지 선택하도록 프롬프트하여 온라인 피드백을 제공합니다. 단순함에도 불구하고, 여러 작업에 대한 인간 평가를 통해 OAIF가 오프라인 DAP 방법과 RLHF 방법 모두를 능가함을 입증했습니다. 또한, LLM annotator에 대한 지시 프롬프트를 통해 OAIF에서 활용되는 피드백이 쉽게 제어 가능함을 추가로 보여줍니다.
이 포스트 트레이닝 방법은 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()다음 명령을 사용하여 스크립트를 실행합니다:
torchrun --nproc_per_node 8 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는 preference dataset을 요구하는 오프라인 DPO와 달리 prompt-only dataset만 필요합니다. experimental.online_dpo.OnlineDPOTrainer는 conversational 및 standard 데이터셋 형식을 모두 지원합니다. conversational 데이터셋이 제공되면 트레이너는 데이터셋에 채팅 템플릿을 자동으로 적용합니다.
사용 팁
EOS 토큰 생성 장려
보상 모델을 사용할 때, 주어진 길이 내에서 completions을 생성하도록 모델을 설정하고 싶을 수 있습니다. 학습 중에는 experimental.online_dpo.OnlineDPOConfig의 max_new_tokens 인수로 지정된 최대 길이까지 completions을 생성합니다. 최대 길이에 도달하기 전에 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 페널티 계수이고kl이 토큰별 KL 발산인beta * kl.sum(1)입니다.objective/rlhf_reward:scores - non_score_reward의 평균 RLHF 보상입니다.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개의 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이 실험은 이 🐝 W&B 보고서에서 추적됩니다.
모델 크기를 늘릴수록 온라인 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]) — 보상을 계산하는 데 사용할 보상 함수입니다. 보상을 계산하려면 프롬프트와 completions을 인자로 받아 모든 보상 함수를 호출한 후, 그 결과를 합산합니다. 다음 중 하나여야 합니다:- 단일 보상 함수: 문자열(모델 경로), PreTrainedModel, 또는 사용자 정의 콜러블 함수일 수 있습니다.
- 보상 함수 목록: 모두 호환되는 타입이어야 합니다.
- args (experimental.online_dpo.OnlineDPOConfig) — 학습에 사용할 online 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에 보상 함수가 하나만 포함된 경우: 단일 처리 클래스가 사용됩니다.- 처리 클래스 목록:
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()를 사용하여 다시 로드할 수 있습니다.
main 프로세스에서만 저장합니다.
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = Noneprivate: bool | None = None**kwargs )
매개변수
- commit_message (
str, 선택 사항, 기본값"End of training") — 푸시할 때 커밋할 메시지입니다. - blocking (
bool, 선택 사항, 기본값True) —git push가 완료된 후에만 함수가 반환되어야 하는지 여부. - token (
str, 선택 사항, 기본값None) — Trainer의 원래 args를 덮어쓸 수 있는 쓰기 권한이 있는 토큰. - revision (
str, 선택 사항) — 커밋할 git revision입니다. 기본값은 “main” 브랜치의 head입니다. - private (
bool, 선택 사항) — 리포지토리가 생성될 때 비공개로 만들지 여부입니다. 기본값은args.hub_private_repo입니다. 리포지토리가 이미 존재하는 경우 효과가 없습니다. - kwargs (
dict[str, Any], 선택) —~Trainer.create_model_card에 함께 전달되는 추가 키워드 인자입니다.
self.args.hub_model_id 저장소에 self.model과 self.processing_class를 🤗 모델 허브에 업로드합니다.
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 = Noneactivation_checkpointing: bool | None = Noneactivation_checkpointing_kwargs: dict[str, typing.Any] | str | 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) — 완성당 생성할 최대 토큰 수. - 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 목록이 제공되면 각 새로운 epoch마다 β가 선택되며, 마지막 β가 나머지 epoch에 사용됩니다. - loss_type (
str, 선택 사항, 기본값은"sigmoid") — 사용할 손실 함수의 유형입니다. 가능한 값은 다음과 같습니다: - disable_dropout (
bool, 선택 사항, 기본값True) — 모델과 참조 모델에서 dropout을 비활성화할지 여부입니다.
생성을 제어하는 매개변수
- top_p (
float, 선택 사항, 기본값1.0) — 고려할 상위 토큰의 누적 확률을 제어하는 값입니다. 값은 (0, 1] 범위에 있어야 합니다. 모든 토큰을 고려하려면1.0으로 설정하세요. - top_k (
int, 선택 사항, 기본값0) — top-k-filtering을 위해 유지할 가장 높은 확률의 어휘 토큰 수입니다.0인 경우 top-k-filtering이 비활성화되고 모든 토큰이 고려됩니다. - 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], 선택 사항) — completions 샘플링 시 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") — 일 때 vLLM 통합에 사용할 모드use_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의 tensor parallel size를 제어합니다. 이 설정은vllm_mode가"colocate"로 설정된 경우에만 적용됩니다.vllm_mode="server"를 사용하는 경우, 이 매개변수는--vllm_tensor_parallel_size플래그를 통해 vLLM 서버를 시작할 때 별도로 전달해야 합니다. - vllm_enable_sleep_mode (
bool, 선택 사항, 기본값False) — 옵티마이저 단계에서 가중치/캐시를 오프로드하기 위해 vLLM sleep mode를 활성화합니다. GPU 메모리 사용량을 낮게 유지하지만, 엔진을 깨울 때 호스트-디바이스 전송 지연이 발생합니다.
기타 매개변수
- ds3_gather_for_generation (
bool, 선택 사항, 기본값True) — 이 설정은 DeepSpeed ZeRO-3에 적용됩니다. 활성화하면 정책 모델 가중치가 생성을 위해 수집되어 생성 속도가 향상됩니다. 그러나 이 옵션을 비활성화하면 단일 GPU의 VRAM 용량을 초과하는 모델을 학습할 수 있지만, 생성 속도가 느려집니다. 이 옵션을 비활성화하면 vLLM 생성과 호환되지 않습니다. - model_init_kwargs (
dict[str, Any], 선택 사항) — 문자열로부터 모델을 인스턴스화할 때AutoModelForCausalLM.from_pretrained에 전달할 키워드 인수입니다.revision값은 보상 처리 클래스를 로드할 때에도 사용됩니다. - trust_remote_code (
bool, 선택, 기본값False) — Hub에서 커스텀 Python 코드를 함께 제공하는 모델을 로드하는 것을 허용할지 여부입니다. from_pretrained로 전달됩니다. 또한 reward-model 및 reward-tokenizer 로드에도 적용됩니다. - 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입니다.