TRL documentation
KTO Trainer
KTO Trainer
Visão geral
O TRL oferece suporte ao Treinador de Otimização Kahneman-Tversky (KTO) para o treinamento de modelos de linguagem, conforme descrito no artigo KTO: Model Alignment as Prospect Theoretic Optimization de Kawin Ethayarajh, Winnie Xu, Niklas Muennighoff, Dan Jurafsky, Douwe Kiela.
O resumo do artigo é o seguinte:
A teoria da perspectiva de Kahneman & Tversky nos diz que os humanos percebem variáveis aleatórias de uma maneira enviesada, porém bem definida; por exemplo, os humanos são notoriamente avessos a perdas. Mostramos que os objetivos para alinhar LLMs com feedback humano incorporam implicitamente muitos desses vieses — o sucesso desses objetivos (por exemplo, DPO) em relação à minimização da entropia cruzada pode ser atribuído em parte ao fato de serem funções de perda conscientes dos humanos (HALOs). No entanto, as funções de utilidade que esses métodos atribuem aos humanos ainda diferem daquelas na literatura da teoria da perspectiva. Usando um modelo de utilidade humana de Kahneman-Tversky, propomos um HALO que maximiza diretamente a utilidade das gerações, em vez de maximizar a log-verossimilhança das preferências, como os métodos atuais fazem. Chamamos essa abordagem de Otimização de Kahneman-Tversky (KTO), e ela iguala ou supera o desempenho de métodos baseados em preferências em escalas de 1B a 30B. Crucialmente, o KTO não precisa de preferências — apenas de um sinal binário de se uma saída é desejável ou indesejável para uma entrada dada. Isso o torna muito mais fácil de usar no mundo real, onde dados de preferência são escassos e caros.
O código oficial pode ser encontrado em ContextualAI/HALOs.
Este método de pós-treinamento foi contribuído por Kashif Rasul, Younes Belkada, Lewis Tunstall, Pablo Vicente e, posteriormente, refatorado por Albert Villanova del Moral.
Início rápido
Este exemplo demonstra como treinar um modelo usando o método KTO. Usamos o modelo Qwen 0.5B como modelo base. Usamos os dados de preferência do KTO Mix 14k. Você pode visualizar os dados no dataset aqui:
Abaixo está o script para treinar o modelo:
# train_kto.py
from datasets import load_dataset
from trl import KTOConfig, KTOTrainer
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-0.5B-Instruct")
train_dataset = load_dataset("trl-lib/kto-mix-14k", split="train")
training_args = KTOConfig(output_dir="Qwen2-0.5B-KTO")
trainer = KTOTrainer(model=model, args=training_args, processing_class=tokenizer, train_dataset=train_dataset)
trainer.train()Execute o script usando o seguinte comando:
accelerate launch train_kto.py
Distribuído em 8 x H100 GPUs, o treinamento leva aproximadamente 30 minutos. Você pode verificar o progresso do treinamento analisando o gráfico de recompensa. Uma tendência de aumento na margem de recompensa 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-KTO
<quentin_gallouedec>:
What is the best programming language?
<trl-lib/Qwen2-0.5B-KTO>:
The best programming language can vary depending on individual preferences, industry-specific requirements, technical skills, and familiarity with the specific use case or task. Here are some widely-used programming languages that have been noted as popular and widely used:
Here are some other factors to consider when choosing a programming language for a project:
1 JavaScript: JavaScript is at the heart of the web and can be used for building web applications, APIs, and interactive front-end applications like frameworks like React and Angular. It's similar to C, C++, and F# in syntax structure and is accessible and easy to learn, making it a popular choice for beginners and professionals alike.
2 Java: Known for its object-oriented programming (OOP) and support for Java 8 and .NET, Java is used for developing enterprise-level software applications, high-performance games, as well as mobile apps, game development, and desktop applications.
3 C++: Known for its flexibility and scalability, C++ offers comprehensive object-oriented programming and is a popular choice for high-performance computing and other technical fields. It's a powerful platform for building real-world applications and games at scale.
4 Python: Developed by Guido van Rossum in 1991, Python is a high-level, interpreted, and dynamically typed language known for its simplicity, readability, and versatility.
Tipo e formato de dataset esperados
O KTO requer um conjunto de dados de preferência não pareada. Alternativamente, você pode fornecer um conjunto de dados de preferência pareada (também conhecido simplesmente como conjunto de dados de preferências). Nesse caso, o treinador o converterá automaticamente para o formato não pareado, separando as respostas escolhidas e rejeitadas, atribuindo label = True às conclusões escolhidas e label = False às rejeitadas.
O KTOTrainer é compatível com os formatos de dataset padrão e conversacional. Quando fornecido com um dataset conversacional, o trainer aplica automaticamente o chat template ao dataset.
# Standard format
unpaired_preference_example = {"prompt": "The sky is", "completion": " blue.", "label": True}
# Conversational format
unpaired_preference_example = {"prompt": [{"role": "user", "content": "What color is the sky?"}],
"completion": [{"role": "assistant", "content": "It is blue."}],
"label": True}Em teoria, o conjunto de dados deve conter pelo menos uma conclusão escolhida e uma rejeitada. No entanto, alguns usuários executaram o KTO com sucesso usando apenas dados escolhidos ou apenas rejeitados. Ao usar apenas dados rejeitados, é aconselhável adotar uma taxa de aprendizado conservadora.
Aprofundando-se no método KTO
A Otimização Kahneman-Tversky (KTO) é um método de treinamento projetado para alinhar um modelo de linguagem usando apenas um sinal binário de se uma saída é desejável ou indesejável para uma entrada dada, em vez de pares de conclusões preferidas/despreferidas. Baseando-se na teoria da perspectiva de Kahneman e Tversky, ela define uma perda consciente do humano (HALO) que maximiza diretamente a utilidade das gerações, ponderando exemplos desejáveis e indesejáveis de forma assimétrica para refletir a aversão à perda humana.
Esta seção detalha como o KTO funciona na prática, abordando as etapas principais: pré-processamento e cálculo da perda.
Pré-processamento e tokenização
Durante o treinamento, cada exemplo deve conter um prompt, uma completion e um label booleano indicando se a completion é desejável (True) ou indesejável (False). Para mais detalhes sobre os formatos esperados, consulte Dataset formats.
O KTOTrainer tokeniza cada entrada usando o tokenizer do modelo.
Calculando a perda
O termo de divergência KL usado pela perda KTO é estimado ao emparelhar cada prompt com uma conclusão não correspondente retirada de outra parte do lote. Por esse motivo, os tipos de perda que estimam o termo KL (todos, exceto apo_zero_unpaired) exigem um tamanho de lote de treinamento por dispositivo maior que 1 e uma estratégia de amostragem sequencial, para que os pares não correspondentes sejam estáveis ao longo de um lote.
A perda usada no KTO (Eq. 7 do artigo) é definida da seguinte forma:
onde o valor é
Aqui é o prompt, é a conclusão, é o modelo de política em treinamento, é o modelo de referência, é a função sigmoide, controla o desvio em relação ao modelo de referência, e é o termo de divergência KL estimado. O peso é desirable_weight para conclusões desejáveis e undesirable_weight para as indesejáveis, usado para compensar um desequilíbrio entre o número de exemplos desejáveis e indesejáveis.
Tipos de Perda
loss_type= | Descrição |
|---|---|
"kto" (padrão) | A perda KTO do artigo KTO. Uma perda consciente de humanos (HALO) baseada na teoria da perspectiva de Kahneman-Tversky que maximiza a utilidade de conclusões desejáveis e a minimiza para as indesejáveis, usando um termo de divergência KL estimado como ponto de referência. |
"apo_zero_unpaired" | A variante não pareada da perda APO-zero do artigo APO. Ela aumenta a probabilidade de conclusões desejáveis e diminui a probabilidade das indesejáveis, sem estimar o termo de divergência KL. Use esta perda quando você acredita que as conclusões desejáveis são melhores que a saída padrão do modelo. |
Métricas registradas
Durante o treinamento e a avaliação, registramos as seguintes métricas:
global_step: O número total de etapas do otimizador realizadas até o momento.epoch: O número do epoch atual, com base na iteração do conjunto de dados.num_tokens: O número total de tokens processados até o momento.loss: A perda média de KTO no intervalo de registro atual.entropy: A entropia média da distribuição de tokens prevista pelo modelo para tokens não mascarados.aux_loss: A perda auxiliar de balanceamento de carga de um modelo Mixture-of-Experts, antes de ser escalada porrouter_aux_loss_coefe adicionada à perda. Registrada apenas quando o modelo é um modelo MoE erouter_aux_loss_coefé diferente de zero.kl: A divergência de KL média estimada entre o modelo de política e o modelo de referência, usada como ponto de referência na perda KTO.learning_rate: a taxa de aprendizado atual, que pode mudar dinamicamente se um agendador for usado.grad_norm: A norma L2 dos gradientes, calculada antes do recorte de gradientes.logits/chosen: Os valores médios de logit atribuídos pelo modelo aos tokens na conclusão escolhida (desejável).logits/rejected: Os valores médios de logit atribuídos pelo modelo aos tokens na conclusão rejeitada (indesejável).logps/chosen: A média da log-probabilidade atribuída pelo modelo aos tokens na conclusão escolhida (desejável).logps/rejected: A média da log-probabilidade atribuída pelo modelo aos tokens na conclusão rejeitada (indesejável).rewards/chosen: A recompensa implícita média calculada para a conclusão escolhida (desejável), calculada como .rewards/rejected: A recompensa implícita média calculada para a conclusão rejeitada (indesejável), calculada como .rewards/margins: A margem média de recompensa implícita entre as conclusões escolhidas e rejeitadas.
Personalização
Compatibilidade e restrições
Algumas combinações de argumentos são intencionalmente restritas na implementação atual do KTOTrainer:
- Adaptadores PEFT que visam
lm_headnão são suportados (usemodules_to_save=["lm_head"]em vez disso). sync_ref_model=Truenão é suportado ao treinar com modelos PEFT que não mantêm umref_modelindependente.sync_ref_model=Truenão pode ser combinado comprecompute_ref_log_probs=True.precompute_ref_log_probs=Truenão é suportado comIterableDataset(treino ou avaliação) nem com conjuntos de dados de visão.- Os tipos de perda que estimam o termo de divergência KL (todos, exceto
"apo_zero_unpaired") exigemtrain_sampling_strategy="sequential"e um tamanho de lote de treinamento por dispositivo maior que 1.
Inicialização do modelo
Você pode passar diretamente os kwargs do método from_pretrained() para o KTOConfig. Por exemplo, se você quiser carregar um modelo em uma precisão diferente, análogo a
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct", dtype=torch.bfloat16)você pode fazer isso passando o argumento model_init_kwargs={"dtype": torch.bfloat16} para o KTOConfig.
from trl import KTOConfig
training_args = KTOConfig(
model_init_kwargs={"dtype": torch.bfloat16},
)Observe que todos os argumentos de palavra-chave de from_pretrained() são suportados.
Treine adaptadores com PEFT
Suportamos integração estreita com a biblioteca 🤗 PEFT, permitindo que qualquer usuário treine adaptadores de forma conveniente e os compartilhe no Hub, em vez de treinar o modelo inteiro.
from datasets import load_dataset
from trl import KTOTrainer
from peft import LoraConfig
dataset = load_dataset("trl-lib/kto-mix-14k", split="train")
trainer = KTOTrainer(
"Qwen/Qwen2-0.5B-Instruct",
train_dataset=dataset,
peft_config=LoraConfig(),
)
trainer.train()Você também pode continuar o treinamento do seu PeftModel. Para isso, primeiro carregue um PeftModel fora do KTOTrainer e passe-o diretamente para o trainer sem passar o argumento peft_config.
Ao treinar adaptadores, você geralmente usa uma taxa de aprendizado mais alta do que no ajuste fino completo, pois apenas novos parâmetros estão sendo aprendidos.
Tool Calling com KTO
O KTOTrainer oferece suporte completo ao ajuste fino de modelos com capacidades de tool calling. Nesse caso, cada exemplo do conjunto de dados deve incluir:
- As mensagens da conversa (prompt e completion), incluindo qualquer chamada de ferramenta (
tool_calls) e respostas de ferramenta (mensagens com o papeltool) - A lista de ferramentas disponíveis na coluna
tools, geralmente fornecida como esquemas JSON
Para mais detalhes sobre a estrutura esperada do conjunto de dados, consulte a seção Formato do Conjunto de Dados — Chamada de Ferramenta.
Treinando Modelos de Visão e Linguagem
KTOTrainer oferece suporte completo ao treinamento de Vision-Language Models (VLMs). Para treinar um VLM, forneça um conjunto de dados com uma coluna image (uma única imagem por amostra) ou uma coluna images (lista de imagens por amostra). Para mais informações sobre a estrutura esperada do conjunto de dados, consulte a seção Dataset Format — Vision Dataset.
from trl import KTOConfig, KTOTrainer
from datasets import load_dataset
trainer = KTOTrainer(
model="Qwen/Qwen2.5-VL-3B-Instruct",
args=KTOConfig(max_length=None),
train_dataset=load_dataset("trl-internal-testing/zen-image", "conversational_unpaired_preference", split="train"),
)
trainer.train()Para VLMs, a truncagem pode remover tokens de imagem, levando a erros durante o treinamento. Para evitar isso, defina
max_length=Noneno KTOConfig. Isso permite que o modelo processe o comprimento total da sequência sem truncar tokens de imagem.KTOConfig(max_length=None, ...)Use
max_lengthapenas quando você tiver verificado que a truncagem não removerá os tokens de imagem para todo o conjunto de dados.
Script de exemplo
Fornecemos um script de exemplo para treinar um modelo usando o método KTO. O script está disponível em trl/scripts/kto.py
Para testar o script KTO com o modelo Qwen2 0.5B no conjunto de dados UltraFeedback, execute o seguinte comando:
accelerate launch trl/scripts/kto.py \
--model_name_or_path Qwen/Qwen2-0.5B-Instruct \
--dataset_name trl-lib/kto-mix-14k \
--num_train_epochs 1 \
--output_dir Qwen2-0.5B-KTODicas de uso
Para Modelos Mixture of Experts: Habilitando a perda auxiliar
MOEs são mais eficientes quando a carga é distribuída de forma aproximadamente igual entre os especialistas.
Para garantir que treinemos MOEs de maneira semelhante durante o ajuste de preferências, é benéfico adicionar a perda auxiliar do balanceador de carga à perda final.
Esta opção é ativada definindo output_router_logits=True na configuração do modelo (por exemplo, MixtralConfig).
Para ajustar a contribuição da perda auxiliar para a perda total, use o hiperparâmetro router_aux_loss_coef=... (padrão: 0.001) na configuração do modelo.
Recomendações de tamanho de lote
Use um tamanho de lote por etapa de pelo menos 4 e um tamanho de lote efetivo entre 16 e 128. Mesmo que o seu tamanho de lote efetivo seja grande, se o seu tamanho de lote por etapa for inadequado, a estimativa de KL no KTO será inadequada.
Recomendações de taxa de aprendizado
Cada escolha de beta tem uma taxa de aprendizado máxima que pode tolerar antes que o desempenho do aprendizado se degrade. Para a configuração padrão de beta = 0.1, a taxa de aprendizado normalmente não deve exceder 1e-6 para a maioria dos modelos. À medida que beta diminui, a taxa de aprendizado também deve ser reduzida de forma correspondente. Em geral, recomendamos fortemente manter a taxa de aprendizado entre 5e-7 e 5e-6. Mesmo com conjuntos de dados pequenos, desaconselhamos o uso de uma taxa de aprendizado fora dessa faixa. Em vez disso, opte por mais épocas para obter melhores resultados.
Dados desbalanceados
Os parâmetros desirable_weight e undesirable_weight da KTOConfig referem-se aos pesos aplicados às perdas para exemplos desejáveis/positivos e indesejáveis/negativos.
Por padrão, ambos são 1. No entanto, se você tiver mais de um ou do outro, deve aumentar o peso do tipo menos comum para que a proporção entre (desirable_weight número de positivos) e (undesirable_weight número de negativos) esteja na faixa de 1:1 a 4:3.
KTOTrainer
classe trl.KTOTrainer
< source >( model: str | PreTrainedModel | PeftModelref_model: transformers.modeling_utils.PreTrainedModel | None = Noneargs: trl.trainer.kto_config.KTOConfig | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | None = Nonetrain_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | None = Noneeval_dataset: datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset | datasets.dataset_dict.DatasetDict | datasets.dataset_dict.IterableDatasetDict | dict[str, datasets.arrow_dataset.Dataset | datasets.iterable_dataset.IterableDataset] | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.processing_utils.ProcessorMixin | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalPrediction], dict] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple[typing.Optional[torch.optim.Optimizer], typing.Optional[torch.optim.lr_scheduler.LambdaLR]] = (None, None)quantization_config: BitsAndBytesConfig | None = Nonepeft_config: PeftConfig | None = None )
Parâmetros
- model (
strou PreTrainedModel ou PeftModel) — 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<ModelArchitecture>.from_pretrained(onde<ModelArchitecture>é derivado da configuração do modelo) com os argumentos de palavra-chave emargs.model_init_kwargs. Sedtypenão for especificado emargs.model_init_kwargs, o padrão éfloat32. Isso difere de from_pretrained, onde (desde a versão 5 do Transformers) o dtype é inferido a partir da configuração do modelo. - Um objeto PreTrainedModel. Somente modelos de linguagem causais são suportados.
- Um objeto PeftModel. 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, opcional) —
Modelo de referência usado para calcular as probabilidades log de referência. Se fornecido, este modelo é usado diretamente como a política de referência. Ele não pode ser um PeftModel. Se for None, o trainer usará automaticamente a política inicial correspondente a model, ou seja, o estado do modelo antes do início do treinamento KTO.
- Se fornecido, este modelo é usado diretamente como a política de referência. Ele não pode ser um PeftModel.
- Se
None, o trainer usará automaticamente a política inicial correspondente amodel, ou seja, o estado do modelo antes do início do treinamento KTO.
- args (KTOConfig, opcional) —
Configuração para este treinador. Se
None, uma configuração padrão é usada. - data_collator (
DataCollator, opcional) — Função a ser usada para formar um lote a partir de uma lista de elementos dotrain_datasetoueval_datasetprocessado. O padrão seráDataCollatorForUnpairedPreferencese o modelo for um modelo de linguagem eDataCollatorForVisionUnpairedPreferencese o modelo for um modelo de visão-linguagem. Collators personalizados devem truncar sequências antes do padding; o trainer não aplica truncamento após a colação. - train_dataset (Dataset ou IterableDataset) —
Dataset a ser usado para o treinamento. Este trainer suporta o tipo preferência não pareada . O formato das amostras pode ser:
- Padrão: Cada amostra contém texto simples.
- Conversacional: cada amostra contém mensagens estruturadas (por exemplo, papel e conteúdo).
Quando
train_dataseté um IterableDataset (por exemplo, um dataset em streaming),max_stepsdeve ser definido nos argumentos de treinamento, pois seu comprimento não pode ser inferido e o número total de etapas de treinamento é necessário para limitar o loop de treinamento e configurar o agendador de taxa de aprendizado. - eval_dataset (Dataset, IterableDataset, DatasetDict, IterableDatasetDict ou
dict[str, Dataset | IterableDataset]) — Dataset a ser usado para avaliação. Ele deve atender aos mesmos requisitos quetrain_dataset. - processing_class (PreTrainedTokenizerBase ou ProcessorMixin, opcional) —
Classe de processamento usada para processar os dados. O lado do padding deve ser definido como “left”. Se
None, a classe de processamento é carregada a partir do nome do modelo com from_pretrained. Um token de padding,tokenizer.pad_token, deve ser definido. Se a classe de processamento não tiver definido um token de padding,tokenizer.eos_tokenserá usado como padrão. - compute_metrics (
Callable[[EvalPrediction], dict], opcional) — A função que será usada para calcular métricas na avaliação. Deve receber um EvalPrediction e retornar um dicionário de strings para valores de métricas. Ao passar SFTConfig combatch_eval_metricsdefinido comoTrue, sua funçãocompute_metricsdeve receber um argumento booleanocompute_result. Isso será acionado após o último lote de avaliação para sinalizar que a função precisa calcular e retornar as estatísticas de resumo globais, em vez de acumular as estatísticas do nível do lote. Os logits que ela recebe são recalculados com uma passagem de frente extra. Isso está obsoleto e será removido na v2.0.0. - callbacks (lista de TrainerCallback, opcional) —
Lista de callbacks para personalizar o loop de treinamento. Adicionará esses à lista de callbacks padrão detalhada aqui.
Se você deseja remover um dos callbacks padrão utilizados, use o método remove_callback.
- optimizers (
tuple[torch.optim.Optimizer | None, torch.optim.lr_scheduler.LambdaLR | None], opcional, padrão(None, None)) — Uma tupla contendo o otimizador e o agendador a serem usados. Por padrão, será uma instância deAdamWno seu modelo e um agendador dado por get_linear_schedule_with_warmup controlado porargs. - quantization_config (BitsAndBytesConfig, opcional) —
Configuração de quantização usada ao carregar o modelo a partir de um identificador de modelo. Combine com
peft_configpara treinamento QLoRA. Ignorado se o modelo já estiver instanciado. - peft_config (PeftConfig, opcional) —
Configuração PEFT usada para envolver o modelo. Se
None, o modelo não é envolvido.
Trainer para o método de Otimização de Kahneman-Tversky (KTO). Este algoritmo foi inicialmente proposto no artigo KTO: Model Alignment as Prospect Theoretic Optimization. Esta classe é um wrapper em torno da classe Trainer e herda todos os seus atributos e métodos.
Exemplo:
>>> from trl import KTOTrainer
>>> from datasets import load_dataset
>>> dataset = load_dataset("trl-lib/kto-mix-14k", split="train")
>>> trainer = KTOTrainer(
... model="Qwen/Qwen2.5-0.5B-Instruct",
... train_dataset=dataset,
... )
>>> trainer.train()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 = 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”. - 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.
KTOConfig
classe trl.KTOConfig
< source >( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 1e-06lr_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 = Truelabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'sequential'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 = -1model_init_kwargs: dict[str, typing.Any] | str | None = Nonetrust_remote_code: bool = Falserouter_aux_loss_coef: float | None = Nonedisable_dropout: bool = Truedataset_num_proc: int | None = Nonemax_length: int | None = 1024pad_to_multiple_of: int | str | None = 'auto'precompute_ref_log_probs: bool = Falseprecompute_ref_batch_size: int | None = Noneloss_type: str = 'kto'beta: float = 0.1desirable_weight: float = 1.0undesirable_weight: float = 1.0activation_offloading: bool = Falsesync_ref_model: bool = Falseref_model_mixup_alpha: float = 0.6ref_model_sync_steps: int = 512 )
Parâmetros que controlam o modelo
- model_init_kwargs (
dict[str, Any], opcional) — Argumentos de palavra-chave para from_pretrained, usados quando o argumentomodeldo KTOTrainer é fornecido como uma string. O valor derevisiontambém é usado ao carregar a classe de processamento. - trust_remote_code (
bool, opcional, padrãoFalse) — Se permite carregar modelos e tokenizers que incluem código Python personalizado do Hub. Encaminhado para from_pretrained e from_pretrained. - router_aux_loss_coef (
float, opcional) — Coeficiente da perda auxiliar de balanceamento de carga para modelos Mixture-of-Experts (MoE), adicionada à perda de treinamento com esse peso. Quando não definido, o valor declarado na configuração do modelo é utilizado. Defina como0.0para desativá-la. Falha quando usado com um modelo não-MoE. - disable_dropout (
bool, opcional, padrãoTrue) — Se deve desabilitar o dropout no modelo e no modelo de referência.
Parâmetros que controlam o pré-processamento dos dados
- dataset_num_proc (
int, opcional) — Número de processos a serem usados para processar o conjunto de dados. - max_length (
intorNone, opcional, padrão1024) — Comprimento máximo da sequência tokenizada. Sequências maiores quemax_lengthsão truncadas pela direita. SeNone, nenhum truncamento é aplicado. - pad_to_multiple_of (
intoustr, opcional, padrão"auto") — Se definido, as sequências serão preenchidas até um múltiplo deste valor."auto"preenche até um múltiplo de 128 no Neuron (AWS Trainium), que compila uma vez por forma de entrada, e não preenche em outros ambientes. - precompute_ref_log_probs (
bool, opcional, padrãoFalse) — Se as probabilidades log do modelo de referência para todo o conjunto de dados de treinamento devem ser pré-computadas antes do treinamento. Isso permite economizar memória durante o treinamento, pois o modelo de referência não precisa ser mantido em memória. - precompute_ref_batch_size (
int, opcional) — Tamanho do lote a ser usado ao pré-computar as probabilidades log do modelo de referência. Isso pode ser definido com um valor maior que o tamanho do lote de treinamento para acelerar o pré-processamento. SeNone, o padrão éper_device_train_batch_sizepara treinamento eper_device_eval_batch_sizepara avaliação.
Parâmetros que controlam o treinamento
- loss_type (
str, opcional, padrão é"kto") — Tipo de perda a ser usado. Os valores possíveis são: - beta (
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. - desirable_weight (
float, opcional, padrão1.0) — As perdas desejáveis são ponderadas por este fator para compensar o número desigual de pares desejáveis e indesejáveis. - undesirable_weight (
float, opcional, padrão1.0) — As perdas indesejáveis são ponderadas por este fator para compensar o número desigual de pares desejáveis e indesejáveis. - activation_offloading (
bool, opcional, padrãoFalse) — Se as ativações devem ser transferidas para a CPU. - sync_ref_model (
bool, opcional, padrãoFalse) — Se deve sincronizar o modelo de referência com o modelo ativo a cadaref_model_sync_stepspassos, usando o parâmetroref_model_mixup_alpha. Essa sincronização origina-se do artigo TR-DPO.sync_ref_model=Trueainda não é compatível com PEFT ouprecompute_ref_log_probs=True. - ref_model_mixup_alpha (
float, opcional, padrão0.6) — parâmetro α do paper TR-DPO, que controla a mistura entre a política atual e a política de referência anterior durante as atualizações. A política de referência é atualizada de acordo com a equação:π_ref = α * π_θ + (1 - α) * π_ref_prev. Para usar este parâmetro, você deve definirsync_ref_model=True. - ref_model_sync_steps (
int, opcional, padrão512) — parâmetro τ do paper TR-DPO, que determina a frequência com que a política atual é sincronizada com a política de referência. Para usar este parâmetro, você deve definirsync_ref_model=True.
Classe de configuração para o KTOTrainer.
Esta classe inclui apenas os parâmetros específicos para o treinamento KTO. Para a lista completa de argumentos de treinamento, consulte a documentação de TrainingArguments. Observe que os valores padrão nesta classe podem diferir dos presentes 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 é1e-6em vez de5e-5.train_sampling_strategy: O padrão é"sequential"em vez de"random". Os tipos de perda que estimam o termo de divergência KL (todos, exceto"apo_zero_unpaired") exigem amostragem sequencial, pois a conclusão KL para cada exemplo é pré-computada em relação aos seus vizinhos em um lote de ordem fixa; qualquer outra estratégia quebra esse pareamento.