TRL documentation
KTO Trainer
KTO Trainer
Resumen
TRL admite el entrenador de Optimización Kahneman-Tversky (KTO) para entrenar modelos de lenguaje, tal como se describe en el artículo KTO: Model Alignment as Prospect Theoretic Optimization de Kawin Ethayarajh, Winnie Xu, Niklas Muennighoff, Dan Jurafsky, Douwe Kiela.
El resumen del artículo es el siguiente:
La teoría de la perspectiva de Kahneman & Tversky nos dice que los humanos perciben las variables aleatorias de manera sesgada pero bien definida; por ejemplo, los humanos son notoriamente aversos a las pérdidas. Mostramos que los objetivos para alinear LLMs con retroalimentación humana incorporan implícitamente muchos de estos sesgos: el éxito de estos objetivos (p. ej., DPO) sobre la minimización de la entropía cruzada puede atribuirse en parte a que son funciones de pérdida conscientes de lo humano (HALOs). Sin embargo, las funciones de utilidad que estos métodos atribuyen a los humanos aún difieren de las de la literatura sobre la teoría de la perspectiva. Utilizando un modelo de utilidad humana de Kahneman-Tversky, proponemos un HALO que maximiza directamente la utilidad de las generaciones, en lugar de maximizar la verosimilitud logarítmica de las preferencias, como hacen los métodos actuales. Llamamos a este enfoque Optimización de Kahneman-Tversky (KTO), y iguala o supera el rendimiento de los métodos basados en preferencias a escalas de 1B a 30B. Crucialmente, KTO no necesita preferencias: solo una señal binaria de si una salida es deseable o indeseable para una entrada dada. Esto lo hace mucho más fácil de usar en el mundo real, donde los datos de preferencia son escasos y costosos.
El código oficial se puede encontrar en ContextualAI/HALOs.
Este método de post-entrenamiento fue aportado por Kashif Rasul, Younes Belkada, Lewis Tunstall, Pablo Vicente y, posteriormente, refactorizado por Albert Villanova del Moral.
Inicio rápido
Este ejemplo demuestra cómo entrenar un modelo utilizando el método KTO. Utilizamos el modelo Qwen 0.5B como modelo base. Utilizamos los datos de preferencia de KTO Mix 14k. Puede ver los datos del conjunto de datos aquí:
A continuación se muestra el script para entrenar el 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()Ejecute el script usando el siguiente comando:
accelerate launch train_kto.py
Distribuido en 8 x H100 GPUs, el entrenamiento toma aproximadamente 30 minutos. Puedes verificar el progreso del entrenamiento revisando el gráfico de recompensa. Una tendencia creciente en el margen de recompensa indica que el modelo está mejorando y generando mejores respuestas con el tiempo.

Para ver cómo rinde el modelo entrenado, puedes usar el 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 y formato de datos esperados
KTO requiere un conjunto de datos de preferencias sin pares. Alternativamente, puede proporcionar un conjunto de datos de preferencias con pares (también conocido simplemente como conjunto de datos de preferencias). En este caso, el entrenador lo convertirá automáticamente a un formato sin pares separando las respuestas elegidas y rechazadas, asignando label = True a las finalizaciones elegidas y label = False a las rechazadas.
El KTOTrainer es compatible con los formatos de datos estándar y conversacional. Cuando se proporciona un conjunto de datos conversacional, el entrenador aplica automáticamente la plantilla de chat al conjunto de datos.
# 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}En teoría, el conjunto de datos debe contener al menos una finalización elegida y una rechazada. Sin embargo, algunos usuarios han ejecutado KTO con éxito utilizando únicamente datos elegidos o únicamente datos rechazados. Si se utilizan solo datos rechazados, es aconsejable adoptar una tasa de aprendizaje conservadora.
Mirando más a fondo el método KTO
La optimización de Kahneman-Tversky (KTO) es un método de entrenamiento diseñado para alinear un modelo de lenguaje utilizando únicamente una señal binaria de si una salida es deseable o indeseable para una entrada dada, en lugar de pares de finalizaciones preferidas/no preferidas. Basándose en la teoría de la perspectiva de Kahneman y Tversky, define una pérdida consciente del humano (HALO) que maximiza directamente la utilidad de las generaciones, ponderando de forma asimétrica los ejemplos deseables e indeseables para reflejar la aversión a las pérdidas de los humanos.
Esta sección detalla cómo funciona KTO en la práctica, cubriendo los pasos clave: preprocesamiento y cálculo de la pérdida.
Preprocesamiento y tokenización
Durante el entrenamiento, se espera que cada ejemplo contenga un prompt, una completion y una etiqueta booleana label que indique si la completion es deseable (True) o indeseable (False). Para más detalles sobre los formatos esperados, consulte Dataset formats.
El KTOTrainer tokeniza cada entrada utilizando el tokenizer del modelo.
Cálculo de la pérdida
El término de divergencia KL utilizado por la pérdida KTO se estima emparejando cada prompt con una finalización no coincidente extraída de otra parte del lote. Por esta razón, los tipos de pérdida que estiman el término KL (todos excepto apo_zero_unpaired) requieren un tamaño de lote de entrenamiento por dispositivo mayor que 1 y una estrategia de muestreo secuencial, para que los pares no coincidentes sean estables a lo largo de un lote.
La pérdida utilizada en KTO (Ec. 7 del artículo) ) se define de la siguiente manera:
donde el valor es
Aquí es el prompt, es la finalización, es el modelo de política que se está entrenando, es el modelo de referencia, es la función sigmoide, controla la desviación respecto al modelo de referencia, y es el término de divergencia KL estimado. El peso es desirable_weight para las finalizaciones deseables y undesirable_weight para las indeseables, utilizado para contrarrestar un desequilibrio entre el número de ejemplos deseables e indeseables.
Tipos de pérdida
loss_type= | Descripción |
|---|---|
"kto" (predeterminado) | La pérdida KTO del artículo KTO. Una pérdida consciente de los humanos (HALO) basada en la teoría de la perspectiva de Kahneman-Tversky que maximiza la utilidad de las finalizaciones deseables y la minimiza para las indeseables, utilizando un término de divergencia KL estimado como punto de referencia. |
"apo_zero_unpaired" | La variante no emparejada de la pérdida APO-zero del artículo APO. Aumenta la probabilidad de las finalizaciones deseables y disminuye la probabilidad de las indeseables sin estimar el término de divergencia KL. Utilice esta pérdida cuando crea que las finalizaciones deseables son mejores que la salida predeterminada del modelo. |
Métricas registradas
Durante el entrenamiento y la evaluación, registramos las siguientes métricas:
global_step: El número total de pasos del optimizador realizados hasta el momento.epoch: El número de época actual, basado en la iteración del conjunto de datos.num_tokens: El número total de tokens procesados hasta el momento.loss: La pérdida KTO promedio durante el intervalo de registro actual.entropy: La entropía media de la distribución de tokens predicha por el modelo sobre los tokens no enmascarados.aux_loss: La pérdida auxiliar de equilibrio de carga de un modelo Mixture-of-Experts, antes de que se escale porrouter_aux_loss_coefy se sume a la pérdida. Se registra solo cuando el modelo es un modelo MoE yrouter_aux_loss_coefes distinto de cero.kl: La divergencia KL promedio estimada entre el modelo de política y el modelo de referencia, utilizada como punto de referencia en la pérdida KTO.learning_rate: la tasa de aprendizaje actual, que puede cambiar dinámicamente si se utiliza un programador.grad_norm: La norma L2 de los gradientes, calculada antes del recorte de gradientes.logits/chosen: Los valores de logit promedio asignados por el modelo a los tokens de la finalización elegida (deseable).logits/rejected: Los valores medios de logit asignados por el modelo a los tokens de la finalización rechazada (no deseable).logps/chosen: La probabilidad logarítmica media asignada por el modelo a los tokens de la finalización elegida (deseable).logps/rejected: La probabilidad logarítmica media asignada por el modelo a los tokens de la finalización rechazada (no deseable).rewards/chosen: La recompensa implícita promedio calculada para la finalización elegida (deseable), calculada como .rewards/rejected: La recompensa implícita promedio calculada para la finalización rechazada (indeseable), calculada como .rewards/margins: El margen medio de recompensa implícita entre las finalizaciones elegidas y rechazadas.
Personalización
Compatibilidad y restricciones
Algunas combinaciones de argumentos están restringidas intencionalmente en la implementación actual de KTOTrainer:
- Los adaptadores PEFT que apuntan a
lm_headno son compatibles (usamodules_to_save=["lm_head"]en su lugar). sync_ref_model=Trueno se admite al entrenar con modelos PEFT que no conservan unref_modelindependiente.sync_ref_model=Trueno se puede combinar conprecompute_ref_log_probs=True.precompute_ref_log_probs=Trueno se admite conIterableDataset(entrenamiento o evaluación) ni con conjuntos de datos de visión.- Los tipos de pérdida que estiman el término de divergencia KL (todos excepto
"apo_zero_unpaired") requierentrain_sampling_strategy="sequential"y un tamaño de lote de entrenamiento por dispositivo mayor que 1.
Inicialización del modelo
Puede pasar directamente los kwargs del método from_pretrained() a KTOConfig. Por ejemplo, si desea cargar un modelo en una precisión diferente, de manera análoga a
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2-0.5B-Instruct", dtype=torch.bfloat16)puede hacerlo pasando el argumento model_init_kwargs={"dtype": torch.bfloat16} a KTOConfig.
from trl import KTOConfig
training_args = KTOConfig(
model_init_kwargs={"dtype": torch.bfloat16},
)Tenga en cuenta que se admiten todos los argumentos de palabra clave de from_pretrained().
Entrenar adaptadores con PEFT
Soportamos una integración estrecha con la biblioteca 🤗 PEFT, lo que permite a cualquier usuario entrenar adaptadores de manera conveniente y compartirlos en el Hub, en lugar de entrenar el modelo completo.
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()También puedes continuar entrenando tu PeftModel. Para ello, primero carga un PeftModel fuera de KTOTrainer y pásalo directamente al trainer sin pasar el argumento peft_config.
Al entrenar adaptadores, normalmente se utiliza una tasa de aprendizaje más alta que en el ajuste fino completo, ya que solo se están aprendiendo parámetros nuevos.
Llamadas a herramientas con KTO
El KTOTrainer admite por completo el ajuste fino de modelos con capacidades de tool calling. En este caso, cada ejemplo del conjunto de datos debe incluir:
- Los mensajes de la conversación (el prompt y la respuesta), incluidos los llamados a herramientas (
tool_calls) y las respuestas de las herramientas (mensajes con el roltool) - La lista de herramientas disponibles en la columna
tools, generalmente proporcionada como esquemas JSON
Para obtener detalles sobre la estructura esperada del conjunto de datos, consulte la sección Formato de conjunto de datos — Llamadas a herramientas.
Entrenamiento de modelos de visión y lenguaje
KTOTrainer admite por completo el entrenamiento de modelos de visión-lenguaje (VLM). Para entrenar un VLM, proporcione un conjunto de datos con una columna image (una imagen por muestra) o una columna images (lista de imágenes por muestra). Para obtener más información sobre la estructura esperada del conjunto de datos, consulte la sección Formato del conjunto de datos — Conjunto de datos de visión.
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()En el caso de los VLM, la truncación puede eliminar los tokens de imagen, lo que provoca errores durante el entrenamiento. Para evitarlo, establece
max_length=Noneen KTOConfig. Esto permite que el modelo procese la longitud completa de la secuencia sin truncar los tokens de imagen.KTOConfig(max_length=None, ...)Solo usa
max_lengthcuando hayas verificado que la truncación no eliminará los tokens de imagen para todo el conjunto de datos.
Script de ejemplo
Proporcionamos un script de ejemplo para entrenar un modelo utilizando el método KTO. El script está disponible en trl/scripts/kto.py
Para probar el script de KTO con el modelo Qwen2 0.5B en el conjunto de datos UltraFeedback, ejecute el siguiente 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-KTOConsejos de uso
Para los modelos Mixture of Experts: habilitar la pérdida auxiliar
Los MOEs son más eficientes cuando la carga se distribuye de manera aproximadamente equitativa entre los expertos.
Para garantizar que entrenemos los MOEs de forma similar durante el ajuste de preferencias, es beneficioso añadir la pérdida auxiliar del equilibrador de carga a la pérdida final.
Esta opción se habilita configurando output_router_logits=True en la configuración del modelo (p. ej. MixtralConfig).
Para escalar cuánto contribuye la pérdida auxiliar a la pérdida total, use el hiperparámetro router_aux_loss_coef=... (valor predeterminado: 0.001) en la configuración del modelo.
Recomendaciones de tamaño de lote
Utilice un tamaño de lote por paso de al menos 4 y un tamaño de lote efectivo entre 16 y 128. Incluso si su tamaño de lote efectivo es grande, si su tamaño de lote por paso es deficiente, la estimación de KL en KTO también será deficiente.
Recomendaciones de tasa de aprendizaje
Cada elección de beta tiene una tasa de aprendizaje máxima que puede tolerar antes de que el rendimiento del aprendizaje se degrade. Para la configuración predeterminada de beta = 0.1, la tasa de aprendizaje normalmente no debería superar 1e-6 para la mayoría de los modelos. A medida que beta disminuye, la tasa de aprendizaje también debe reducirse en consecuencia. En general, recomendamos encarecidamente mantener la tasa de aprendizaje entre 5e-7 y 5e-6. Incluso con conjuntos de datos pequeños, desaconsejamos utilizar una tasa de aprendizaje fuera de este rango. En su lugar, elija más épocas para obtener mejores resultados.
Datos desequilibrados
Los parámetros desirable_weight y undesirable_weight de KTOConfig se refieren a los pesos asignados a las pérdidas de los ejemplos deseables/positivos e indeseables/negativos.
Por defecto, ambos son 1. Sin embargo, si tienes más de uno u otro tipo, debes aumentar el peso del tipo menos común para que la proporción entre (desirable_weight número de positivos) y (undesirable_weight número de negativos) esté en el rango de 1:1 a 4:3.
KTOTrainer
clase 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 (
stro PreTrainedModel o PeftModel) — Modelo que se va a entrenar. Puede ser:- Una cadena, que es el model id de un modelo preentrenado alojado en un repositorio de modelos en huggingface.co, o una ruta a un directorio que contiene los pesos del modelo guardados con save_pretrained, por ejemplo,
'./my_model_directory/'. El modelo se carga usando<ModelArchitecture>.from_pretrained(donde<ModelArchitecture>se deriva de la configuración del modelo) con los argumentos de palabra clave enargs.model_init_kwargs. Sidtypeno se especifica enargs.model_init_kwargs, el valor predeterminado esfloat32. Esto difiere de from_pretrained, donde (desde Transformers v5) el dtype se infiere de la configuración del modelo. - Un objeto PreTrainedModel. Solo se admiten modelos de lenguaje causales.
- Un objeto PeftModel. Solo se admiten modelos de lenguaje causales.
- Una cadena, que es el model id de un modelo preentrenado alojado en un repositorio de modelos en huggingface.co, o una ruta a un directorio que contiene los pesos del modelo guardados con save_pretrained, por ejemplo,
- ref_model (PreTrainedModel, opcional) —
Modelo de referencia utilizado para calcular las probabilidades logarítmicas de referencia. Si se proporciona, este modelo se utiliza directamente como la política de referencia. No puede ser un PeftModel. Si es None, el entrenador utilizará automáticamente la política inicial correspondiente a model, es decir, el estado del modelo antes de que comience el entrenamiento KTO.
- Si se proporciona, este modelo se utiliza directamente como la política de referencia. No puede ser un PeftModel.
- Si
None, el trainer usará automáticamente la política inicial correspondiente amodel, es decir, el estado del modelo antes de que comience el entrenamiento KTO.
- args (KTOConfig, opcional) —
Configuración para este entrenador. Si es
None, se utiliza una configuración predeterminada. - data_collator (
DataCollator, opcional) — Función que se utilizará para formar un lote a partir de una lista de elementos deltrain_datasetoeval_datasetprocesado. Por defecto, seráDataCollatorForUnpairedPreferencesi el modelo es un modelo de lenguaje yDataCollatorForVisionUnpairedPreferencesi el modelo es un modelo de visión-lenguaje. Los collators personalizados deben truncar las secuencias antes de aplicar el relleno; el trainer no aplica truncamiento posterior a la colación. - train_dataset (Dataset o IterableDataset) —
Conjunto de datos para usar en el entrenamiento. Este trainer admite el tipo preferencia no emparejada . El formato de las muestras puede ser:
- Estándar: Cada muestra contiene texto plano.
- Conversacional: Cada muestra contiene mensajes estructurados (p. ej., rol y contenido).
Cuando
train_datasetes un IterableDataset (por ejemplo, un dataset de streaming),max_stepsdebe establecerse en los argumentos de entrenamiento, ya que su longitud no se puede inferir y se requiere el número total de pasos de entrenamiento para acotar el bucle de entrenamiento y configurar el programador de tasa de aprendizaje. - eval_dataset (Dataset, IterableDataset, DatasetDict, IterableDatasetDict o
dict[str, Dataset | IterableDataset]) — Conjunto de datos para usar en la evaluación. Debe cumplir los mismos requisitos quetrain_dataset. - processing_class (PreTrainedTokenizerBase o ProcessorMixin, opcional) —
Clase de procesamiento utilizada para procesar los datos. El lado de relleno debe estar configurado en “left”. Si es
None, la clase de procesamiento se carga desde el nombre del modelo con from_pretrained. Debe establecerse un token de relleno,tokenizer.pad_token. Si la clase de procesamiento no ha establecido un token de relleno, se utilizarátokenizer.eos_tokencomo valor predeterminado. - compute_metrics (
Callable[[EvalPrediction], dict], opcional) — La función que se utilizará para calcular métricas durante la evaluación. Debe recibir un EvalPrediction y devolver un diccionario de cadenas a valores de métricas. Al pasar SFTConfig conbatch_eval_metricsestablecido enTrue, su funcióncompute_metricsdebe recibir un argumento booleanocompute_result. Esto se activará después del último lote de evaluación para indicar que la función necesita calcular y devolver las estadísticas de resumen globales en lugar de acumular las estadísticas a nivel de lote. Los logits que recibe se recalculan con una pasada de adelante adicional. Esto está obsoleto y se eliminará en v2.0.0. - callbacks (lista de TrainerCallback, opcional) —
Lista de callbacks para personalizar el bucle de entrenamiento. Se añadirán a la lista de callbacks predeterminados detallada en aquí.
Si deseas eliminar uno de los callbacks predeterminados, utiliza el método remove_callback.
- optimizers (
tuple[torch.optim.Optimizer | None, torch.optim.lr_scheduler.LambdaLR | None], opcional, por defecto(None, None)) — Una tupla que contiene el optimizador y el programador a utilizar. Por defecto, se utilizará una instancia deAdamWen su modelo y un programador dado por get_linear_schedule_with_warmup controlado porargs. - quantization_config (BitsAndBytesConfig, opcional) —
Configuración de cuantización utilizada al cargar el modelo desde un identificador de modelo. Combínala con
peft_configpara el entrenamiento QLoRA. Se ignora si el modelo ya está instanciado. - peft_config (PeftConfig, opcional) —
Configuración de PEFT utilizada para envolver el modelo. Si es
None, el modelo no se envuelve.
Trainer para el método de Optimización de Kahneman-Tversky (KTO). Este algoritmo fue propuesto inicialmente en el artículo KTO: Model Alignment as Prospect Theoretic Optimization. Esta clase es un envoltorio de la clase Trainer y hereda todos sus atributos y métodos.
Ejemplo:
>>> 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()entrenar
< 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 (
strobool, opcional) — Si es unastr, ruta local a un punto de control guardado por una instancia anterior deTrainer. Si es unbooly es igual aTrue, carga el último punto de control en args.output_dir guardado por una instancia anterior deTrainer. Si está presente, el entrenamiento se reanudará desde los estados del modelo/optimizador/planificador cargados aquí. - trial (
optuna.Trialodict[str, Any], opcional) — La ejecución del ensayo o el diccionario de hiperparámetros para la búsqueda de hiperparámetros. - ignore_keys_for_eval (
list[str], opcional) — Una lista de claves en la salida de tu modelo (si es un diccionario) que deben ignorarse al recopilar predicciones para la evaluación durante el entrenamiento.
Devuelve
~trainer_utils.TrainOutput
Objeto que contiene el número de pasos globales, la pérdida de entrenamiento y las métricas.
Punto de entrada principal del entrenamiento.
Guardará el modelo, por lo que podrás recargarlo usando from_pretrained().
Solo se guardará desde el proceso 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, valor predeterminado"End of training") — Mensaje para el commit al hacer push. - blocking (
bool, opcional, valor predeterminadoTrue) — Si la función debe devolver el control solo cuando elgit pushhaya terminado. - token (
str, opcional, valor predeterminadoNone) — Token con permiso de escritura para sobrescribir los argumentos originales de Trainer. - revision (
str, opcional) — La revisión de git desde la que se realizará el commit. Por defecto, es la cabecera de la rama “main”. - kwargs (
dict[str, Any], opcional) — Argumentos de palabra clave adicionales que se pasan a~Trainer.create_model_card.
Sube self.model y self.processing_class al hub de modelos de 🤗 en el repositorio self.args.hub_model_id.
KTOConfig
clase 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 controlan el modelo
- model_init_kwargs (
dict[str, Any], opcional) — Argumentos de palabra clave para from_pretrained, utilizados cuando el argumentomodelde KTOTrainer se proporciona como una cadena. El valor derevisiontambién se utiliza al cargar la clase de procesamiento. - trust_remote_code (
bool, opcional, valor predeterminadoFalse) — Si se permite cargar modelos y tokenizadores que incluyen código Python personalizado desde el Hub. Se reenvía a from_pretrained y from_pretrained. - router_aux_loss_coef (
float, opcional) — Coeficiente de la pérdida auxiliar de equilibrado de carga para modelos Mixture-of-Experts (MoE), que se añade a la pérdida de entrenamiento con este peso. Si no se establece, se utiliza el valor declarado en la configuración del modelo. Establezca0.0para desactivarlo. Falla si se utiliza con un modelo que no es MoE. - disable_dropout (
bool, opcional, valor predeterminadoTrue) — Si se desactiva el dropout en el modelo y el modelo de referencia.
Parámetros que controlan el preprocesamiento de datos
- dataset_num_proc (
int, opcional) — Número de procesos a utilizar para procesar el conjunto de datos. - max_length (
intoNone, opcional, valor predeterminado1024) — Longitud máxima de la secuencia tokenizada. Las secuencias más largas quemax_lengthse truncan por la derecha. Si esNone, no se aplica truncamiento. - pad_to_multiple_of (
intostr, opcional, valor predeterminado"auto") — Si se establece, las secuencias se rellenarán hasta un múltiplo de este valor."auto"rellena hasta un múltiplo de 128 en Neuron (AWS Trainium), que compila una vez por forma de entrada, y no rellena en otros entornos. - precompute_ref_log_probs (
bool, opcional, valor predeterminadoFalse) — Si se deben precalcular las probabilidades logarítmicas del modelo de referencia para todo el conjunto de datos de entrenamiento antes de iniciar el entrenamiento. Esto permite ahorrar memoria durante el entrenamiento, ya que no es necesario mantener el modelo de referencia en memoria. - precompute_ref_batch_size (
int, opcional) — Tamaño de lote a utilizar al precalcular las probabilidades de registro del modelo de referencia. Esto se puede establecer en un valor mayor que el tamaño de lote de entrenamiento para acelerar el preprocesamiento. Si esNone, el valor predeterminado esper_device_train_batch_sizepara el entrenamiento yper_device_eval_batch_sizepara la evaluación.
Parámetros que controlan el entrenamiento
- loss_type (
str, opcional, por defecto"kto") — Tipo de pérdida a utilizar. Los valores posibles son: - beta (
float, opcional, valor predeterminado0.1) — Parámetro que controla la desviación respecto al modelo de referencia. Un β más alto implica una menor desviación respecto al modelo de referencia. - desirable_weight (
float, opcional, valor predeterminado1.0) — Las pérdidas deseables se ponderan con este factor para contrarrestar el número desigual de pares deseables e indeseables. - undesirable_weight (
float, opcional, valor predeterminado1.0) — Las pérdidas no deseadas se ponderan con este factor para contrarrestar el número desigual de pares deseados y no deseados. - activation_offloading (
bool, opcional, valor predeterminadoFalse) — Si se deben descargar las activaciones a la CPU. - sync_ref_model (
bool, opcional, valor predeterminadoFalse) — Indica si se debe sincronizar el modelo de referencia con el modelo activo cadaref_model_sync_stepspasos, utilizando el parámetroref_model_mixup_alpha. Esta sincronización proviene del artículo TR-DPO.sync_ref_model=Trueaún no es compatible con PEFT ni conprecompute_ref_log_probs=True. - ref_model_mixup_alpha (
float, opcional, valor predeterminado0.6) — Parámetro α del artículo TR-DPO, que controla la mezcla entre la política actual y la política de referencia anterior durante las actualizaciones. La política de referencia se actualiza según la ecuación:π_ref = α * π_θ + (1 - α) * π_ref_prev. Para usar este parámetro, debe establecersync_ref_model=True. - ref_model_sync_steps (
int, opcional, valor predeterminado512) — parámetro τ del artículo TR-DPO, que determina la frecuencia con la que la política actual se sincroniza con la política de referencia. Para usar este parámetro, debes establecersync_ref_model=True.
Clase de configuración para el KTOTrainer.
Esta clase incluye solo los parámetros específicos para el entrenamiento KTO. Para obtener la lista completa de argumentos de entrenamiento, consulte la documentación de TrainingArguments. Tenga en cuenta que los valores predeterminados de esta clase pueden diferir de los de TrainingArguments.
Con HfArgumentParser podemos convertir esta clase en argumentos de argparse que se pueden especificar en la línea de comandos.
Estos parámetros tienen valores predeterminados diferentes de TrainingArguments:
logging_steps: El valor predeterminado es10en lugar de500.gradient_checkpointing: El valor predeterminado esTrueen lugar deFalse.bf16: Por defecto, esTruesifp16no está establecido, en lugar deFalse.learning_rate: El valor predeterminado es1e-6en lugar de5e-5.train_sampling_strategy: El valor predeterminado es"sequential"en lugar de"random". Los tipos de pérdida que estiman el término de divergencia KL (todos excepto"apo_zero_unpaired") requieren muestreo secuencial porque la finalización KL para cada ejemplo se precalcula en relación con sus vecinos en un lote de orden fijo; cualquier otra estrategia rompe ese emparejamiento.