TRL documentation
Entraîneur DPO en ligne
Entraîneur DPO en ligne
Aperçu
Le DPO en ligne a été proposé dans Direct Language Model Alignment from Online AI Feedback par Shangmin Guo, Biao Zhang, Tianlin Liu, Tianqi Liu, Misha Khalman, Felipe Llinares, Alexandre Rame, Thomas Mesnard, Yao Zhao, Bilal Piot, Johan Ferret et Mathieu Blondel.
L'abstract de l'article est le suivant :
Les méthodes d’alignement direct à partir de préférences (DAP), telles que DPO, sont récemment apparues comme des alternatives efficaces à l’apprentissage par renforcement à partir de retours humains (RLHF), car elles ne nécessitent pas de modèle de récompense distinct. Toutefois, les jeux de données de préférences utilisés dans les méthodes DAP sont généralement collectés avant l’entraînement et ne sont jamais mis à jour, si bien que le retour est purement hors ligne. De plus, les réponses de ces jeux de données sont souvent échantillonnées à partir d’un modèle de langage distinct de celui qui est aligné, et comme le modèle évolue au fil de l’entraînement, la phase d’alignement est inévitablement hors politique. Dans cette étude, nous posons que le retour en ligne est essentiel et améliore les méthodes DAP. Notre méthode, le retour d’IA en ligne (OAIF), utilise un LLM comme annotateur : à chaque itération d’entraînement, nous échantillonnons deux réponses du modèle actuel et demandons à l’annotateur LLM de choisir laquelle est préférée, fournissant ainsi un retour en ligne. Malgré sa simplicité, nous démontrons par une évaluation humaine sur plusieurs tâches que OAIF surpasse à la fois les méthodes DAP hors ligne et RLHF. Nous montrons par ailleurs que le retour exploité dans OAIF est facilement contrôlable, via des invites d’instructions à l’annotateur LLM.
Cette méthode de post-entraînement a été proposée par Michael Noukhovitch, Shengyi Costa Huang, Quentin Gallouédec et Edward Beeching.
Démarrage rapide
Cet exemple montre comment entraîner un modèle à l'aide de la méthode DPO en ligne. Nous utilisons le modèle Qwen 0.5B comme modèle de base et le modèle de récompense trl-lib/Qwen2-0.5B-Reward. Nous utilisons les prompts du jeu de données UltraFeedback. Vous pouvez consulter les prompts du jeu de données ici :
Voici le script pour entraîner le modèle :
# 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()Exécutez le script à l'aide de la commande suivante :
accelerate launch train_online_dpo.py
Réparti sur 8 GPU, l’entraînement prend environ 1 heure. Vous pouvez vérifier la progression de l’entraînement en consultant le graphique de la récompense. Une tendance à la hausse de la récompense pour les complétions rejetées et choisies indique que le modèle s’améliore et génère de meilleures réponses au fil du temps.

Pour voir les performances du modèle entraîné, vous pouvez utiliser le 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.
Type de jeu de données attendu
Le DPO en ligne n’exige qu’un jeu de données de prompts (contrairement au DPO hors ligne, qui s’attend à un jeu de données de préférences). Le experimental.online_dpo.OnlineDPOTrainer prend en charge les formats de jeu de données conversationnels et standards. Lorsqu’un jeu de données conversationnel est fourni, l’entraîneur applique automatiquement le modèle de chat au jeu de données.
Conseils d'utilisation
Encourager la génération du jeton EOS
Lors de l'utilisation d'un modèle de récompense, on peut souhaiter que le modèle génère des complétions dans une longueur donnée. Pendant l'entraînement, le modèle génère des complétions jusqu'à la longueur maximale spécifiée dans l'argument max_new_tokens de experimental.online_dpo.OnlineDPOConfig. Si vous souhaitez pénaliser le modèle pour ne pas générer de jeton EOS avant d'atteindre la longueur maximale, vous pouvez utiliser l'argument missing_eos_penalty de experimental.online_dpo.OnlineDPOConfig :
training_args = OnlineDPOConfig(..., max_new_tokens=128, missing_eos_penalty=1.0)Journalisation des complétions
Pour mieux comprendre le comportement de votre modèle pendant l’entraînement, vous pouvez enregistrer périodiquement des complétions d’échantillons à l’aide du LogCompletionsCallback.
trainer = OnlineDPOTrainer(..., eval_dataset=eval_dataset)
completions_callback = LogCompletionsCallback(trainer, num_prompts=8)
trainer.add_callback(completions_callback)Ce rappel journalise les complétions générées par le modèle directement dans Weights & Biases.

Métriques journalisées
Lors de l’entraînement et de l’évaluation, nous enregistrons les métriques suivantes. Voici un exemple d’exécution suivie sur Weights and Biases
objective/kl: divergence de Kullback-Leibler (KL) moyenne entre le modèle actuel et le modèle de référence.objective/entropy: l'entropie moyenne du modèle, indiquant le caractère aléatoire des actions choisies par le modèle.objective/non_score_reward: La récompense moyenne provenant de sources non liées au score, soitbeta * kl.sum(1), oùbetaest le coefficient de pénalité KL etklest la divergence KL par jeton.objective/rlhf_reward: la récompense RLHF moyenne, qui estscores - non_score_reward. Larlhf_rewardest l'objectif ultime de l'entraînement DPO en ligne. Si l'entraînement fonctionne comme prévu, cette métrique devrait continuer à augmenter.objective/scores: Les scores moyens renvoyés par le modèle de récompense.objective/scores_margin: Marge de score moyenne (selon le modèle de récompense externe) entre les complétions choisies et rejetées.rewards/chosen: La récompense moyenne (selon le modèle de récompense implicite de l’online DPO) des complétions choisies.rewards/rejected: La récompense moyenne (selon le modèle de récompense implicite de l’online DPO) des complétions rejetées.rewards/accuracies: Les précisions du modèle de récompense implicite de l’online DPO.rewards/margins: Marge de récompense moyenne (selon le modèle de récompense implicite du DPO en ligne) entre les complétions choisies et rejetées.logps/chosen: Probabilités logiques moyennes des complétions choisies.logps/rejected: Probabilités logiques moyennes des complétions rejetées.val/contain_eos_token: La proportion de complétions contenant un jeton EOS.beta: Le paramètre qui contrôle le poids du terme de perte représentant l'écart par rapport au modèle de référence. Généralement fixe, mais peut être rendu dynamique en passant une liste à experimental.online_dpo.OnlineDPOConfig.
Expériences de référence
Pour valider que l’implémentation de DPO en ligne fonctionne, nous avons mené des expériences avec les modèles Pythia 1B, 2.8B et 6.9B sur un nœud unique de 8 x H100. Voici les commandes que nous avons utilisées pour lancer les expériences, avec le script d’exemple de DPO en ligne tel qu’il existait à l’époque (examples/scripts/online_dpo.py, supprimé depuis) — pour les reproduire, exécutez depuis un checkout v1.10.0 (git checkout v1.10.0). Nous utilisons directement les modèles SFT / RM de 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_hubLes points de contrôle et le suivi des expériences sont disponibles à l'adresse suivante :
Le taux de victoire du point de contrôle DPO en ligne augmente à mesure que nous augmentons la taille des modèles. C'est un bon signe que l'implémentation DPO en ligne fonctionne comme prévu.
OnlineDPOTrainer
classe 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 )
Paramètres
- model (
str | nn.Module | PreTrainedModel) — Modèle à entraîner. Peut être soit :- Une chaîne de caractères, correspondant à l'identifiant du modèle d'un modèle pré-entraîné hébergé dans un dépôt de modèles sur huggingface.co, ou à un
chemin vers un dossier contenant les poids du modèle enregistrés à l'aide de
save_pretrained, par exemple
'./my_model_directory/'. Le modèle est chargé à l'aide de from_pretrained avec les arguments par mot-clé deargs.model_init_kwargs. - Un objet PreTrainedModel. Seuls les modèles de langage causaux sont pris en charge.
- Une chaîne de caractères, correspondant à l'identifiant du modèle d'un modèle pré-entraîné hébergé dans un dépôt de modèles sur huggingface.co, ou à un
chemin vers un dossier contenant les poids du modèle enregistrés à l'aide de
save_pretrained, par exemple
- ref_model (PreTrainedModel ou
torch.nn.ModuleouNone) — Le modèle de référence à utiliser pour l’entraînement. Si None est spécifié, le modèle de référence sera créé à partir du modèle. - reward_funcs (
RewardFunc | list[RewardFunc]) — Fonctions de récompense à utiliser pour le calcul des récompenses. Pour calculer les récompenses, nous appelons toutes les fonctions de récompense avec les prompts et les complétions, puis nous additionnons les récompenses. Peut être soit :- Une fonction de récompense unique : peut être une chaîne de caractères (chemin vers le modèle), un PreTrainedModel ou une fonction callable personnalisée.
- Une liste de fonctions de récompense : toutes doivent être de types compatibles.
- args (experimental.online_dpo.OnlineDPOConfig) — Les arguments de configuration DPO en ligne à utiliser pour l’entraînement.
- data_collator (
DataCollator) — Le collateur de données à utiliser pour l’entraînement. Si None est spécifié, le collateur de données par défaut (experimental.utils.DPODataCollatorWithPadding) sera utilisé, ce qui rembourra les séquences jusqu’à la longueur maximale des séquences du lot, étant donné un jeu de données de séquences appariées. - train_dataset (Dataset ou IterableDataset) — Le jeu de données à utiliser pour l’entraînement.
- eval_dataset (Dataset, IterableDataset ou
dict[str, Dataset | IterableDataset]) — Le jeu de données à utiliser pour l'évaluation. - processing_class (PreTrainedTokenizerBase ou ProcessorMixin, facultatif) — Classe de traitement utilisée pour traiter les données. Si fournie, elle sera utilisée pour traiter automatiquement les entrées du modèle et sera enregistrée avec le modèle afin de faciliter la reprise d'une formation interrompue ou la réutilisation du modèle affiné.
- reward_processing_classes (PreTrainedTokenizerBase ou
list[PreTrainedTokenizerBase], facultatif) — Classes de traitement correspondant aux fonctions de récompense spécifiées dansreward_funcs. Peut être soit :- Une seule classe de traitement : utilisée lorsque
reward_funcsne contient qu'une seule fonction de récompense. - Une liste de classes de traitement : doit correspondre à l'ordre et à la longueur des fonctions de récompense dans
reward_funcs.
Si défini sur
None, le tokenizer de chaque fonction de récompense basée sur un modèle est chargé automatiquement à l’aide de from_pretrained. - Une seule classe de traitement : utilisée lorsque
- peft_config (PeftConfig, facultatif) —
Configuration PEFT utilisée pour envelopper le modèle. Si
None, le modèle n'est pas enveloppé. - compute_metrics (
Callable[[EvalPrediction], dict], facultatif) — La fonction à utiliser pour calculer les métriques. Elle doit prendre unEvalPredictionet renvoyer un dictionnaire de chaînes vers les valeurs des métriques. - callbacks (
list[transformers.TrainerCallback]) — Les callbacks à utiliser pour l'entraînement. - optimizers (
tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — L’optimiseur et le planificateur à utiliser pour l’entraînement. - preprocess_logits_for_metrics (
Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — La fonction à utiliser pour prétraiter les logits avant de calculer les métriques.
Initialiser 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
Paramètres
- resume_from_checkpoint (
stroubool, facultatif) — Si c'est unestr, chemin local d'un point de contrôle enregistré par une instance précédente deTrainer. Si c'est unboolet vautTrue, charge le dernier point de contrôle dans args.output_dir enregistré par une instance précédente deTrainer. S'il est présent, l'entraînement reprendra à partir des états du modèle/optimiseur/planificateur chargés ici. - trial (
optuna.Trialoudict[str, Any], facultatif) — L’exécution de l’essai ou le dictionnaire d’hyperparamètres pour la recherche d’hyperparamètres. - ignore_keys_for_eval (
list[str], facultatif) — Une liste de clés dans la sortie de votre modèle (s’il s’agit d’un dictionnaire) qui doivent être ignorées lors de la collecte des prédictions pour l’évaluation pendant l’entraînement.
Retourne
~trainer_utils.TrainOutput
Objet contenant le nombre d'étapes globales, la perte d'entraînement et les métriques.
Point d'entrée principal de l'entraînement.
Enregistrera le modèle, ce qui vous permettra de le recharger à l'aide de from_pretrained().
N'enregistrera que depuis le processus principal.
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )
Paramètres
- commit_message (
str, facultatif, par défaut"End of training") — Message à committer lors de la poussée. - blocking (
bool, facultatif, par défautTrue) — Indique si la fonction doit ne renvoyer que lorsque legit pushest terminé. - token (
str, facultatif, par défautNone) — Jeton avec permission d’écriture pour écraser les arguments originaux du Trainer. - revision (
str, facultatif) — La révision git à partir de laquelle effectuer le commit. Par défaut, il s'agit de la tête de la branche « main ». - kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires passés à~Trainer.create_model_card.
Téléchargez self.model et self.processing_class sur le hub de modèles 🤗 dans le dépôt self.args.hub_model_id.
OnlineDPOConfig
classe 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 )
Paramètres
- reward_model_path (
str, facultatif) — Chemin vers le modèle de récompense. - max_new_tokens (
int, facultatif, par défaut64) — Nombre maximal de jetons à générer par complétion. - max_length (
int, facultatif, par défaut512) — Longueur totale maximale de la séquence (invite + complétion) utilisée pour calculer les log-probabilités. Si la séquence dépasse cette limite, les jetons les plus à gauche seront tronqués afin de conserver le maximum de la complétion. Non appliqué lorsque les entrées contiennent des images, car la troncature supprimerait les jetons d’image. - temperature (
float, facultatif, par défaut0.9) — Température pour l'échantillonnage. Plus la température est élevée, plus les complétions sont aléatoires. - missing_eos_penalty (
float, facultatif) — Pénalité appliquée au score lorsque le modèle ne génère pas de jeton EOS. Cela est utile pour encourager la génération de complétions plus courtes que la longueur maximale (max_new_tokens). La pénalité doit être une valeur positive. - beta (
floatoulist[float], facultatif, par défaut0.1) — Paramètre contrôlant l'écart par rapport au modèle de référence. Plus β est élevé, moins l'écart par rapport au modèle de référence est important. Pour la perte IPO (loss_type="ipo"), β est le paramètre de régularisation noté τ dans l'article. Si une liste de flottants est fournie, β est sélectionné pour chaque nouvel epoch et le dernier β est utilisé pour le reste des epochs. - loss_type (
str, facultatif, par défaut"sigmoid") — Type de perte à utiliser. Les valeurs possibles sont : - disable_dropout (
bool, facultatif, valeur par défautTrue) — Indique s'il faut désactiver le dropout dans le modèle et le modèle de référence.
Paramètres qui contrôlent la génération
- top_p (
float, facultatif, par défaut1.0) — Flottant qui contrôle la probabilité cumulée des jetons de tête à prendre en compte. Doit être dans (0, 1]. Définissez-le à1.0pour prendre en compte tous les jetons. - top_k (
int, facultatif, par défaut0) — Nombre de jetons du vocabulaire ayant la plus haute probabilité à conserver pour le filtrage top-k. Si la valeur est0, le filtrage top-k est désactivé et tous les jetons sont pris en compte. - min_p (
float, facultatif) — Probabilité minimale du jeton, qui sera mise à l'échelle par la probabilité du jeton le plus probable. Elle doit être une valeur comprise entre0.0et1.0. Les valeurs typiques se situent dans la plage0.01-0.2. - repetition_penalty (
float, facultatif, par défaut1.0) — Flottant qui pénalise les nouveaux jetons en fonction de leur présence dans le prompt et dans le texte généré jusqu’à présent. Les valeurs >1.0encouragent le modèle à utiliser de nouveaux jetons, tandis que les valeurs <1.0encouragent le modèle à répéter les jetons. - cache_implementation (
str, facultatif) — Implémentation de la méthode de cache pour une génération plus rapide lorsqueuse_vllmest défini surFalse. - generation_kwargs (
dict[str, Any], facultatif) — Arguments supplémentaires à passer à GenerationConfig (si vous utilisez transformers) ouSamplingParams(si vous utilisez vLLM) lors de l'échantillonnage des complétions. Cela permet de personnaliser davantage le comportement de la génération, par exemple en définissantsuppress_tokens,num_beams, etc. S'il contient des clés qui entrent en conflit avec les autres paramètres de génération (commemin_p,top_p, etc.), ils les remplaceront.
Paramètres qui contrôlent l'accélération de la génération propulsée par vLLM
- use_vllm (
bool, facultatif, valeur par défautFalse) — Indique s'il faut utiliser vLLM pour générer des complétions. Si défini surTrue, l'entraîneur utilisera vLLM pour la génération au lieu de model.generate() par défaut. Nécessite l'installation devllm. - vllm_model_impl (
str, facultatif, par défaut"vllm") — Implémentation du modèle à utiliser pour vLLM. Doit être l'une des valeurs"transformers"ou"vllm"."transformers": utiliser le backendtransformerspour l'implémentation du modèle."vllm": utiliser la bibliothèquevllmpour l'implémentation du modèle. - vllm_mode (
str, facultatif, valeur par défaut"colocate") — Mode à utiliser pour l'intégration vLLM lorsqueuse_vllmest défini surTrue. Doit être l'un des"server"ou"colocate"."server": le formateur enverra les requêtes de génération à un serveur vLLM distinct. Assurez-vous qu’un serveur vLLM est en cours d’exécution (à démarrer avecvllm serve)."colocate": vLLM s’exécute dans le même processus et partage les GPU d’entraînement. Cela évite d’avoir besoin d’un serveur séparé, mais peut provoquer une concurrence pour les ressources avec l’entraînement.
- vllm_structured_outputs_regex (
str, facultatif) — Expression régulière pour les sorties structurées de vLLM. SiNone(par défaut), les sorties structurées sont désactivées.
Paramètres qui contrôlent le serveur vLLM (utilisés uniquement lorsque `vllm_mode` est `"server"`)
- vllm_server_base_url (
str, facultatif) — URL de base du serveur vLLM (par exemple,"http://localhost:8000"). Si fournie,vllm_server_hostetvllm_server_portsont ignorés. - vllm_server_host (
str, facultatif, par défaut"0.0.0.0") — Hôte du serveur vLLM auquel se connecter. Ignoré sivllm_server_base_urlest fourni. - vllm_server_port (
int, facultatif, par défaut8000) — Port du serveur vLLM auquel se connecter. Ignoré sivllm_server_base_urlest fourni. - vllm_server_timeout (
float, facultatif, valeur par défaut240.0) — Durée totale de temporisation, en secondes, à attendre pour que le serveur vLLM soit opérationnel. Si le serveur n'est pas opérationnel après le dépassement de ce délai, uneConnectionErrorest levée. - vllm_group_port (
int, facultatif, valeur par défaut51216) — Numéro de port du groupe de mise à jour des poids. Il est utilisé pour communiquer avec le serveur vLLM. Sauf si le port est occupé, il n'est pas nécessaire de le modifier.
Paramètres qui contrôlent l'exécution de vLLM co-localisée (utilisés uniquement lorsque `vllm_mode` est `"colocate"`)
- vllm_gpu_memory_utilization (
float, facultatif, valeur par défaut0.55) — Contrôle l'utilisation de la mémoire GPU pour vLLM. Ce paramètre ne s'applique que lorsquevllm_modeest défini sur"colocate". Si vous utilisezvllm_mode="server", ce paramètre doit être transmis séparément lors du démarrage du serveur vLLM via le drapeau--vllm_gpu_memory_utilization. - vllm_tensor_parallel_size (
int, facultatif, valeur par défaut1) — Contrôle la taille du parallélisme de tenseurs pour vLLM. Ce paramètre ne s’applique que lorsquevllm_modeest défini sur"colocate". Si vous utilisezvllm_mode="server", ce paramètre doit être transmis séparément lors du démarrage du serveur vLLM via le drapeau--vllm_tensor_parallel_size. - vllm_enable_sleep_mode (
bool, facultatif, valeur par défautFalse) — Active le mode veille de vLLM pour décharger les poids et le cache pendant l'étape d'optimisation. Cela maintient l'utilisation de la mémoire GPU au plus bas, mais le réveil du moteur ajoute une latence de transfert hôte-appareil.
Autres paramètres
- ds3_gather_for_generation (
bool, facultatif, valeur par défautTrue) — Ce paramètre s’applique à DeepSpeed ZeRO-3. S’il est activé, les poids du modèle de politique sont regroupés pour la génération, ce qui améliore la vitesse de génération. Toutefois, désactiver cette option permet d’entraîner des modèles dont la taille dépasse la capacité VRAM d’une seule GPU, au prix d’une génération plus lente. La désactivation de cette option n’est pas compatible avec la génération vLLM. - model_init_kwargs (
dict[str, Any], facultatif) — Arguments par mot-clé à passer àAutoModelForCausalLM.from_pretrainedlors de l’instanciation du modèle à partir d’une chaîne de caractères. La valeur derevisionest également utilisée lors du chargement des classes de traitement des récompenses. - trust_remote_code (
bool, facultatif, valeur par défautFalse) — Indique s'il faut autoriser le chargement de modèles qui incluent du code Python personnalisé depuis le Hub. Transmis à from_pretrained. S'applique également au chargement des modèles de récompense et des tokenizers de récompense. - reward_weights (
list[float], facultatif) — Poids pour combiner plusieurs fonctions de récompense. Doit correspondre au nombre de fonctions de récompense. SiNone, toutes les fonctions de récompense sont pondérées de manière égale.
Classe de configuration pour le experimental.online_dpo.OnlineDPOTrainer.
Cette classe ne contient que les paramètres spécifiques à l’entraînement Online DPO. Pour la liste complète des arguments d’entraînement, veuillez consulter la documentation de TrainingArguments. Notez que les valeurs par défaut de cette classe peuvent différer de celles de TrainingArguments.
À l’aide de HfArgumentParser, nous pouvons transformer cette classe en arguments argparse qui peuvent être spécifiés sur la ligne de commande.
Ces paramètres ont des valeurs par défaut différentes de TrainingArguments :
logging_steps: la valeur par défaut est10au lieu de500.gradient_checkpointing: la valeur par défaut estTrueau lieu deFalse.bf16: passe àTruepar défaut sifp16n’est pas défini, au lieu deFalse.learning_rate: passe par défaut à5e-7au lieu de5e-5.remove_unused_columns: la valeur par défaut estFalseau lieu deTrue.