TRL documentation
Treinador DPO Online
Treinador DPO Online
Visão geral
O DPO online foi proposto em Direct Language Model Alignment from Online AI Feedback por Shangmin Guo, Biao Zhang, Tianlin Liu, Tianqi Liu, Misha Khalman, Felipe Llinares, Alexandre Rame, Thomas Mesnard, Yao Zhao, Bilal Piot, Johan Ferret e Mathieu Blondel.
O resumo do artigo é o seguinte:
Métodos de alinhamento direto a partir de preferências (DAP), como o DPO, surgiram recentemente como alternativas eficientes ao aprendizado por reforço com feedback humano (RLHF), que não exigem um modelo de recompensa separado. No entanto, os conjuntos de dados de preferências usados em métodos DAP são geralmente coletados antes do treinamento e nunca atualizados, de modo que o feedback é puramente offline. Além disso, as respostas nesses conjuntos de dados são frequentemente amostradas de um modelo de linguagem distinto daquele que está sendo alinhado, e, como o modelo evolui ao longo do treinamento, a fase de alinhamento é inevitavelmente off-policy. Neste estudo, postulamos que o feedback online é fundamental e melhora os métodos DAP. Nosso método, feedback de IA online (OAIF), usa um LLM como anotador: em cada iteração de treinamento, amostramos duas respostas do modelo atual e solicitamos ao anotador LLM que escolha qual delas é preferida, fornecendo assim feedback online. Apesar de sua simplicidade, demonstramos, por meio de avaliação humana em várias tarefas, que o OAIF supera tanto os métodos DAP offline quanto os métodos RLHF. Mostramos ainda que o feedback utilizado no OAIF é facilmente controlável, por meio de prompts de instrução ao anotador LLM.
Este método de pós-treinamento foi contribuído por Michael Noukhovitch, Shengyi Costa Huang, Quentin Gallouédec e Edward Beeching.
Início rápido
Este exemplo demonstra como treinar um modelo usando o método DPO online. Usamos o modelo Qwen 0.5B como modelo base e o modelo de recompensa trl-lib/Qwen2-0.5B-Reward. Usamos os prompts do conjunto de dados UltraFeedback. Você pode visualizar os prompts no conjunto de dados aqui:
Abaixo está o script para treinar o modelo:
# 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()Execute o script usando o seguinte comando:
torchrun --nproc_per_node 8 train_online_dpo.py
Distribuído em 8 GPUs, o treinamento leva aproximadamente 1 hora. Você pode verificar o progresso do treinamento analisando o gráfico de recompensa. Uma tendência de aumento tanto na recompensa para as conclusões rejeitadas quanto para as escolhidas indica que o modelo está melhorando e gerando respostas melhores ao longo do tempo.

Para ver como o modelo treinado se comporta, você pode usar o 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.
Tipo de dataset esperado
O DPO online requer apenas um conjunto de dados somente com prompts (diferentemente do DPO offline, que espera um conjunto de dados de preferências). O experimental.online_dpo.OnlineDPOTrainer suporta tanto o formato conversacional quanto o formato padrão de conjuntos de dados. Quando fornecido com um conjunto de dados conversacional, o treinador aplicará automaticamente o modelo de chat ao conjunto de dados.
Dicas de uso
Incentivar a geração do token EOS
Ao usar um modelo de recompensa, podemos querer que o modelo gere conclusões dentro de um comprimento específico. Durante o treinamento, o modelo gerará conclusões até o comprimento máximo especificado no argumento max_new_tokens de experimental.online_dpo.OnlineDPOConfig. Se você quiser penalizar o modelo por não gerar um token EOS antes de atingir o comprimento máximo, pode usar o argumento missing_eos_penalty de experimental.online_dpo.OnlineDPOConfig:
training_args = OnlineDPOConfig(..., max_new_tokens=128, missing_eos_penalty=1.0)Registro de Completions
Para entender melhor o comportamento do seu modelo durante o treinamento, você pode registrar periodicamente as conclusões de amostras usando o LogCompletionsCallback.
trainer = OnlineDPOTrainer(..., eval_dataset=eval_dataset)
completions_callback = LogCompletionsCallback(trainer, num_prompts=8)
trainer.add_callback(completions_callback)Este callback registra as conclusões geradas pelo modelo diretamente no Weights & Biases.

Métricas registradas
Durante o treinamento e a avaliação, registramos as seguintes métricas. Aqui está um exemplo de execução rastreada no Weights and Biases
objective/kl: A divergência média de Kullback-Leibler (KL) entre o modelo atual e o modelo de referência.objective/entropy: A entropia média do modelo, indicando o grau de aleatoriedade das ações escolhidas pelo modelo.objective/non_score_reward: A recompensa média de fontes não relacionadas à pontuação, basicamentebeta * kl.sum(1), ondebetaé o coeficiente de penalidade de KL eklé a divergência de KL por token.objective/rlhf_reward: A recompensa média de RLHF, que éscores - non_score_reward. Orlhf_rewardé o objetivo final do treinamento de DPO online. Se o treinamento estiver funcionando como previsto, essa métrica deve continuar aumentando.objective/scores: As pontuações médias retornadas pelo modelo de recompensa.objective/scores_margin: A margem média de pontuação (de acordo com o modelo de recompensa externo) entre as conclusões escolhidas e rejeitadas.rewards/chosen: A recompensa média (de acordo com o modelo de recompensa implícito do DPO online) das conclusões escolhidas.rewards/rejected: A recompensa média (de acordo com o modelo de recompensa implícito do DPO online) das conclusões rejeitadas.rewards/accuracies: As acurácias do modelo de recompensa implícito do DPO online.rewards/margins: A margem média de recompensa (de acordo com o modelo de recompensa implícito do DPO online) entre as conclusões escolhidas e rejeitadas.logps/chosen: As probabilidades logarítmicas médias das conclusões escolhidas.logps/rejected: As probabilidades logarítmicas médias das conclusões rejeitadas.val/contain_eos_token: A fração de conclusões que contêm um token EOS.beta: O parâmetro que controla o peso do termo de perda que representa o desvio em relação ao modelo de referência. Geralmente fixo, mas pode ser dinâmico ao passar uma lista para experimental.online_dpo.OnlineDPOConfig.
Experimentos de benchmark
Para validar que a implementação do DPO online funciona, executamos experimentos com os modelos Pythia 1B, 2.8B e 6.9B em um único nó com 8 x H100s. Seguem os comandos que usamos para executar os experimentos, com o script de exemplo do DPO online como ele existia na época (examples/scripts/online_dpo.py, removido posteriormente) — para reproduzi-los, execute a partir de um checkout da v1.10.0 (git checkout v1.10.0). Utilizamos os modelos SFT / RM diretamente 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_hubO experimento é rastreado neste 🐝 relatório do W&B.
O checkpoint do DPO online apresenta uma taxa de vitória cada vez maior à medida que aumentamos o tamanho dos modelos. Esse é um bom sinal de que a implementação do DPO online está funcionando conforme o esperado.
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 )
Parâmetros
- model (
str | nn.Module | PreTrainedModel) — Modelo a ser treinado. Pode ser:- Uma string, sendo o model id de um modelo pré-treinado hospedado em um repositório de modelos no huggingface.co, ou um
caminho para um diretório contendo pesos de modelo salvos usando
save_pretrained, por exemplo,
'./my_model_directory/'. O modelo é carregado usando from_pretrained com os argumentos de palavra-chave emargs.model_init_kwargs. - Um objeto PreTrainedModel. Somente modelos de linguagem causais são suportados.
- Uma string, sendo o model id de um modelo pré-treinado hospedado em um repositório de modelos no huggingface.co, ou um
caminho para um diretório contendo pesos de modelo salvos usando
save_pretrained, por exemplo,
- ref_model (PreTrainedModel ou
torch.nn.ModuleouNone) — O modelo de referência a ser usado para o treinamento. Se None for especificado, o modelo de referência será criado a partir do modelo. - reward_funcs (
RewardFunc | list[RewardFunc]) — Funções de recompensa a serem usadas para calcular as recompensas. Para calcular as recompensas, chamamos todas as funções de recompensa com os prompts e as conclusões e somamos as recompensas. Pode ser:- Uma única função de recompensa: pode ser uma string (caminho para o modelo), um PreTrainedModel ou uma função chamável personalizada.
- Uma lista de funções de recompensa: todas devem ser de tipos compatíveis.
- args (experimental.online_dpo.OnlineDPOConfig) — Os argumentos de configuração do DPO online a serem usados para o treinamento.
- data_collator (
DataCollator) — O data collator a ser usado para o treinamento. Se None for especificado, o data collator padrão (experimental.utils.DPODataCollatorWithPadding) será utilizado, que irá aplicar padding nas sequências até o comprimento máximo das sequências no batch, dado um conjunto de dados de sequências em pares. - train_dataset (Dataset ou IterableDataset) — O conjunto de dados a ser usado para o treinamento.
- eval_dataset (Dataset, IterableDataset ou
dict[str, Dataset | IterableDataset]) — O conjunto de dados a ser usado para avaliação. - processing_class (PreTrainedTokenizerBase ou ProcessorMixin, opcional) — Classe de processamento usada para processar os dados. Se fornecida, será usada para processar automaticamente as entradas para o modelo e será salva junto com o modelo para facilitar a reexecução de um treinamento interrompido ou a reutilização do modelo ajustado.
- reward_processing_classes (PreTrainedTokenizerBase ou
list[PreTrainedTokenizerBase], opcional) — Classes de processamento correspondentes às funções de recompensa especificadas emreward_funcs. Pode ser:- Uma única classe de processamento: usada quando
reward_funcscontém apenas uma função de recompensa. - Uma lista de classes de processamento: deve corresponder à ordem e ao comprimento das funções de recompensa em
reward_funcs.
Se definido como
None, o tokenizer para cada função de recompensa baseada em modelo é carregado automaticamente usando from_pretrained. - Uma única classe de processamento: usada quando
- peft_config (PeftConfig, opcional) —
Configuração PEFT usada para envolver o modelo. Se
None, o modelo não é envolvido. - compute_metrics (
Callable[[EvalPrediction], dict], opcional) — A função a ser usada para calcular as métricas. Deve receber umEvalPredictione retornar um dicionário de strings para valores de métricas. - callbacks (
list[transformers.TrainerCallback]) — Os callbacks a serem usados para o treinamento. - optimizers (
tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR]) — O otimizador e o agendador a serem usados para o treinamento. - preprocess_logits_for_metrics (
Callable[[torch.Tensor, torch.Tensor], torch.Tensor]) — A função a ser usada para pré-processar os logits antes de calcular as métricas.
Inicialize o OnlineDPOTrainer.
treino
< 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
Parâmetros
- resume_from_checkpoint (
stroubool, opcional) — Se for umstr, caminho local para um checkpoint salvo por uma instância anterior deTrainer. Se for umboole for igual aTrue, carrega o último checkpoint em args.output_dir salvo por uma instância anterior deTrainer. Se presente, o treinamento será retomado a partir dos estados do modelo/otimizador/agendador carregados aqui. - trial (
optuna.Trialoudict[str, Any], opcional) — A execução do trial ou o dicionário de hiperparâmetros para a busca de hiperparâmetros. - ignore_keys_for_eval (
list[str], opcional) — Uma lista de chaves na saída do seu modelo (se for um dicionário) que devem ser ignoradas ao coletar previsões para avaliação durante o treinamento.
Retorna
~trainer_utils.TrainOutput
Objeto contendo a contagem de etapas globais, a perda de treinamento e as métricas.
Ponto de entrada principal do treinamento.
Salvará o modelo, para que você possa recarregá-lo usando from_pretrained().
Salvará apenas a partir do processo principal.
push_to_hub
< source >( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = Noneprivate: bool | None = None**kwargs )
Parâmetros
- commit_message (
str, opcional, padrão"End of training") — Mensagem a ser commitada durante o push. - blocking (
bool, opcional, padrãoTrue) — Se a função deve retornar apenas quando ogit pushtiver terminado. - token (
str, opcional, padrãoNone) — Token com permissão de escrita para sobrescrever os argumentos originais do Trainer. - revision (
str, opcional) — A revisão git de onde o commit será feito. O padrão é o topo do ramo “main”. - private (
bool, opcional) — Se o repositório deve ser privado quando for criado. O padrão éargs.hub_private_repo. Não tem efeito se o repositório já existir. - kwargs (
dict[str, Any], opcional) — Argumentos de palavra-chave adicionais passados para~Trainer.create_model_card.
Envie self.model e self.processing_class para o hub de modelos do 🤗 no repositório 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 = 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 )
Parâmetros
- reward_model_path (
str, opcional) — Caminho para o modelo de recompensa. - max_new_tokens (
int, opcional, padrão64) — Número máximo de tokens a serem gerados por conclusão. - max_length (
int, opcional, padrão512) — Comprimento total máximo da sequência (prompt + completion) usado para calcular as probabilidades logarítmicas. Se a sequência exceder esse limite, os tokens mais à esquerda serão truncados para preservar o máximo possível da completion. Não é aplicado quando as entradas contêm imagens, pois o truncamento removeria os tokens de imagem. - temperature (
float, opcional, padrão0.9) — Temperatura para amostragem. Quanto maior a temperatura, mais aleatórias são as conclusões. - missing_eos_penalty (
float, opcional) — Penalidade aplicada à pontuação quando o modelo não gera um token EOS. Isso é útil para incentivar a geração de complementos mais curtos que o comprimento máximo (max_new_tokens). A penalidade deve ser um valor positivo. - beta (
floatoulist[float], opcional, padrão0.1) — Parâmetro que controla o desvio em relação ao modelo de referência. Valores maiores de β indicam menor desvio em relação ao modelo de referência. Para a perda IPO (loss_type="ipo"), β é o parâmetro de regularização denotado por τ no artigo. Se uma lista de floats for fornecida, o β é selecionado para cada novo epoch e o último β é usado para o restante dos epochs. - loss_type (
str, opcional, padrão é"sigmoid") — Tipo de loss a ser usado. Os valores possíveis são: - disable_dropout (
bool, opcional, padrãoTrue) — Se deve desabilitar o dropout no modelo e no modelo de referência.
Parâmetros que controlam a geração
- top_p (
float, opcional, padrão1.0) — Float que controla a probabilidade cumulativa dos tokens principais a serem considerados. Deve estar em (0, 1]. Defina como1.0para considerar todos os tokens. - top_k (
int, opcional, padrão0) — Número de tokens do vocabulário com maior probabilidade a serem mantidos para o filtro top-k. Se0, o filtro top-k é desativado e todos os tokens são considerados. - min_p (
float, opcional) — Probabilidade mínima do token, que será escalada pela probabilidade do token mais provável. Deve ser um valor entre0.0e1.0. Valores típicos estão na faixa de0.01-0.2. - repetition_penalty (
float, opcional, padrão1.0) — Float que penaliza novos tokens com base em sua presença no prompt e no texto gerado até o momento. Valores >1.0incentivam o modelo a usar novos tokens, enquanto valores <1.0incentivam o modelo a repetir tokens. - cache_implementation (
str, opcional) — Implementação do método de cache para uma geração mais rápida quandouse_vllmestá definido comoFalse. - generation_kwargs (
dict[str, Any], opcional) — Argumentos de palavra-chave adicionais para passar ao GenerationConfig (se estiver usando transformers) ouSamplingParams(se estiver usando vLLM) ao amostrar as conclusões. Isso pode ser usado para personalizar ainda mais o comportamento da geração, como definirsuppress_tokens,num_beams, etc. Se contiver chaves que conflitam com os outros parâmetros de geração (comomin_p,top_p, etc.), eles os substituirão.
Parâmetros que controlam a aceleração da geração com vLLM
- use_vllm (
bool, opcional, padrãoFalse) — Se deve usar o vLLM para gerar completions. Se definido comoTrue, o trainer usará o vLLM para geração em vez do padrão model.generate(). Requer quevllmesteja instalado. - vllm_model_impl (
str, opcional, padrão"vllm") — Implementação do modelo a ser usada para o vLLM. Deve ser uma das opções"transformers"ou"vllm"."transformers": Use o backendtransformerspara a implementação do modelo."vllm": Use a bibliotecavllmpara a implementação do modelo. - vllm_mode (
str, opcional, padrão é"colocate") — Modo a ser usado para a integração com o vLLM quandouse_vllmestá definido comoTrue. Deve ser um dos valores"server"ou"colocate"."server": O trainer enviará solicitações de geração para um servidor vLLM separado. Certifique-se de que um servidor vLLM está em execução (inicie comvllm serve)."colocate": o vLLM será executado no mesmo processo e compartilhará as GPUs de treinamento. Isso evita a necessidade de um servidor separado, mas pode causar contenda de recursos com o treinamento.
- vllm_structured_outputs_regex (
str, opcional) — Regex para saídas estruturadas do vLLM. SeNone(padrão), as saídas estruturadas ficam desativadas.
Parâmetros que controlam o servidor vLLM (usados apenas quando `vllm_mode` é `"server"`)
- vllm_server_base_url (
str, opcional) — URL base para o servidor vLLM (por exemplo,"http://localhost:8000"). Se fornecida,vllm_server_hostevllm_server_portsão ignorados. - vllm_server_host (
str, opcional, padrão"0.0.0.0") — Host do servidor vLLM para conexão. Ignorado sevllm_server_base_urlfor fornecido. - vllm_server_port (
int, opcional, padrão8000) — Porta do servidor vLLM para conexão. Ignorado sevllm_server_base_urlfor fornecido. - vllm_server_timeout (
float, opcional, padrão240.0) — Duração total do tempo limite, em segundos, para aguardar que o servidor vLLM esteja ativo. Se o servidor não estiver ativo após o tempo limite, umConnectionErrorserá lançado. - vllm_group_port (
int, opcional, padrão51216) — Número da porta para o grupo de atualização de pesos. Isso é usado para se comunicar com o servidor vLLM. A menos que a porta esteja ocupada, não há necessidade de alterá-la.
Parâmetros que controlam a execução do vLLM co-localizado (usados apenas quando `vllm_mode` é `"colocate"`)
- vllm_gpu_memory_utilization (
float, opcional, padrão0.55) — Controla a utilização de memória de GPU para o vLLM. Esta configuração só se aplica quandovllm_modeestá definido como"colocate". Se você estiver usandovllm_mode="server", este parâmetro deve ser passado separadamente ao iniciar o servidor vLLM por meio da flag--vllm_gpu_memory_utilization. - vllm_tensor_parallel_size (
int, opcional, padrão1) — Controla o tamanho da paralelização de tensor para o vLLM. Essa configuração só se aplica quandovllm_modeestá definido como"colocate". Se você estiver usandovllm_mode="server", este parâmetro deve ser passado separadamente ao iniciar o servidor vLLM por meio da flag--vllm_tensor_parallel_size. - vllm_enable_sleep_mode (
bool, opcional, padrãoFalse) — Ativa o modo de suspensão do vLLM para descarregar pesos/cache durante o passo do otimizador. Mantém o uso de memória da GPU baixo, mas acordar o mecanismo adiciona latência de transferência entre host e dispositivo.
Outros parâmetros
- ds3_gather_for_generation (
bool, opcional, padrãoTrue) — Esta configuração se aplica ao DeepSpeed ZeRO-3. Se habilitado, os pesos do modelo de política são reunidos para a geração, melhorando a velocidade de geração. No entanto, desabilitar esta opção permite treinar modelos que excedem a capacidade de VRAM de uma única GPU, embora com o custo de uma geração mais lenta. Desabilitar esta opção não é compatível com a geração do vLLM. - model_init_kwargs (
dict[str, Any], opcional) — Argumentos de palavra-chave para passar aAutoModelForCausalLM.from_pretrainedao instanciar o modelo a partir de uma string. O valor derevisiontambém é usado ao carregar as classes de processamento de recompensa. - trust_remote_code (
bool, opcional, padrãoFalse) — Se permite carregar modelos que incluem código Python personalizado do Hub. Encaminhado para from_pretrained. Também aplicado aos carregamentos de reward-model e reward-tokenizer. - reward_weights (
list[float], opcional) — Pesos para combinar múltiplas funções de recompensa. Deve corresponder ao número de funções de recompensa. SeNone, todas as funções de recompensa têm pesos iguais.
Classe de configuração para o experimental.online_dpo.OnlineDPOTrainer.
Esta classe inclui apenas os parâmetros específicos para o treinamento de Online DPO. Para a lista completa de argumentos de treinamento, consulte a documentação de TrainingArguments. Observe que os valores padrão nesta classe podem diferir daqueles em TrainingArguments.
Usando HfArgumentParser, podemos transformar essa classe em argumentos argparse que podem ser especificados na linha de comando.
Esses parâmetros possuem valores padrão diferentes de TrainingArguments:
logging_steps: O valor padrão é10em vez de500.gradient_checkpointing: O padrão éTrueem vez deFalse.bf16: Padrão éTruesefp16não estiver definido, em vez deFalse.learning_rate: O valor padrão é5e-7em vez de5e-5.remove_unused_columns: Padrão éFalseem vez deTrue.