TRL documentation

BEMA para el modelo de referencia

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.18.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

BEMA para el modelo de referencia

Esta función implementa el algoritmo BEMA para actualizar el modelo de referencia durante el entrenamiento con DPO.

Uso

from trl.experimental.bema_for_ref_model import BEMACallback, DPOTrainer
from datasets import load_dataset

dataset = load_dataset("trl-internal-testing/zen", "standard_preference", split="train")

bema_callback = BEMACallback(update_ref_model=True)

trainer = DPOTrainer(
    model="trl-internal-testing/tiny-Qwen2ForCausalLM-2.5",
    train_dataset=dataset,
    callbacks=[bema_callback],
)
trainer.train()

DPOTrainer

clase trl.DPOTrainer

< >

( *args**kwargs )

entrenar

< >

( 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 (str o bool, opcional) — Si es una str, ruta local a un punto de control guardado por una instancia anterior de Trainer. Si es un bool y es igual a True, carga el último punto de control en args.output_dir guardado por una instancia anterior de Trainer. Si está presente, el entrenamiento se reanudará desde los estados del modelo/optimizador/planificador cargados aquí.
  • trial (optuna.Trial o dict[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.

save_model

< >

( output_dir: str | None = None_internal_call: bool = False )

Guardará el modelo, por lo que podrás recargarlo usando from_pretrained().

Solo se guardará desde el proceso principal.

push_to_hub

< >

( 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, valor predeterminado "End of training") — Mensaje para el commit al hacer push.
  • blocking (bool, opcional, valor predeterminado True) — Si la función debe devolver el control solo cuando el git push haya terminado.
  • token (str, opcional, valor predeterminado None) — 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”.
  • private (bool, opcional) — Si se debe hacer el repositorio privado cuando se crea. El valor predeterminado es args.hub_private_repo. No tiene efecto si el repositorio ya existe.
  • 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.

BEMACallback

clase trl.BEMACallback

< >

( update_freq: int = 400ema_power: float = 0.5bias_power: float = 0.2lag: int = 10update_after: int = 0multiplier: float = 1.0min_ema_multiplier: float = 0.0device: str = 'cpu'update_ref_model: bool = Falseref_model_update_freq: int = 400ref_model_update_after: int = 0 )

Parámetros

  • update_freq (int, opcional, por defecto 400) — Actualiza los pesos de BEMA cada X pasos. Se denota como {@html "ϕ \\phi ϕ"} in the paper.
  • ema_power (float, optional, defaults to 0.5) — Power for the EMA decay factor. Denoted {@html "κ \\kappa κ "} en el artículo. Para desactivar EMA, establézcalo en 0.0.
  • bias_power (float, opcional, por defecto 0.2) — Potencia para el factor de escalado de BEMA. Denotado como {@html "η \\eta η"} en el artículo. Un valor grande (p. ej. 8.0) hace que {@html "αt \\alpha_t αt​"} decaiga a 0, aproximando la desactivación de la corrección de sesgo; 0.0, en cambio, fija {@html "αt \\alpha_t αt​"} en 1 para cada paso (corrección máxima, sin decaimiento). lag (int, opcional, por defecto 10) — Desplazamiento inicial en el programa de decaimiento de pesos que controla la suavidad de las primeras etapas actuando como una edad inicial virtual para las actualizaciones. Denotado como {@html "ρ \\rho ρ "}η \\eta η"} in the paper. A large value (e.g. 8.0) makes {@html "αt \\alpha_t αt​"} decay to 0, approximating disabled bias-correction; 0.0 instead pins {@html "αt \\alpha_t αt​"} at 1 for every step (maximum, undecayed correction).
  • lag (int, optional, defaults to 10) — Initial offset in the weight decay schedule that controls early-stage smoothness by acting as a virtual starting age for the updates. Denoted as {@html "ρ \\rho ρ"} en el artículo.
  • update_after (int, opcional, el valor predeterminado es 0) — Tiempo de precalentamiento antes de comenzar a actualizar los pesos de BEMA. Se denota como {@html "τ \\tau τ"} en el artículo. multiplier (float, opcional, el valor predeterminado es 1.0) — Valor inicial para el factor de decaimiento EMA. Se denota como {@html "γ \\gamma γ "}τ \\tau τ"} in the paper.
  • multiplier (float, optional, defaults to 1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ \\gamma γ"} en el artículo.
  • min_ema_multiplier (float, opcional, valor predeterminado 0.0) — Valor mínimo para el factor de decaimiento de la EMA.
  • device (str, opcional, valor predeterminado "cpu") — Dispositivo que se usará para los búferes de BEMA, por ejemplo, "cpu" o "cuda". Tenga en cuenta que, en la mayoría de los casos, este dispositivo DEBERÍA SER DIFERENTE del dispositivo utilizado para el entrenamiento, a fin de evitar errores de memoria insuficiente (OOM).
  • update_ref_model (bool, opcional, valor predeterminado False) — Si se debe actualizar el modelo de referencia con los pesos de BEMA. Esto crea una versión con retardo y suavizada del modelo principal como modelo de referencia.
  • ref_model_update_freq (int, opcional, valor predeterminado 400) — Actualiza el modelo de referencia con los pesos de BEMA cada este número de pasos.
  • ref_model_update_after (int, opcional, valor predeterminado 0) — Número de pasos a esperar antes de comenzar a actualizar el modelo de referencia.

Un TrainerCallback que implementa BEMA (Bias-Corrected Exponential Moving Average) de Adam Block y Cyril Zhang. Código de https://github.com/abblock/bema bajo licencia MIT.

BEMA calcula los pesos del modelo que se escalan de la siguiente manera: θt′=αt⋅(θt−θ0)+EMAt \theta_t' = \alpha_t \cdot (\theta_t - \theta_0) + \text{EMA}_t

donde θt \theta_t son los pesos actuales del modelo, θ0 \theta_0 es una instantánea de los pesos del modelo en el primer update_after paso, EMAt \text{EMA}_t es la media móvil exponencial de los pesos del modelo, yαt \alpha_t es un factor de escala que decae con el número de pasos t t como αt=(ρ+γ⋅t)−η. \alpha_t = (\rho + \gamma \cdot t)^{-\eta}.

El EMA se calcula como: EMAt=(1−βt)⋅EMAt−1+βt⋅θt \text{EMA}_t = (1 - \beta_t) \cdot \text{EMA}_{t-1} + \beta_t \cdot \theta_t

donde βt \beta_t es un factor de decaimiento que decae con el número de pasos t t como βt=(ρ+γ⋅t)−κ. \beta_t = (\rho + \gamma \cdot t)^{-\kappa}.

Ejemplo:

>>> from trl import BEMACallback

>>> trainer = Trainer(..., callbacks=[BEMACallback()])
Update on GitHub