TRL documentation
BEMA para el modelo de referencia
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
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 = 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 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”. - private (
bool, opcional) — Si se debe hacer el repositorio privado cuando se crea. El valor predeterminado esargs.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
< source >( 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 defecto400) — Actualiza los pesos de BEMA cada X pasos. Se denota como {@html "ϕ"} in the paper. - ema_power (
float, optional, defaults to0.5) — Power for the EMA decay factor. Denoted {@html "κ "} en el artículo. Para desactivar EMA, establézcalo en0.0. - bias_power (
float, opcional, por defecto0.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 ρ "}η"} in the paper. A large value (e.g.8.0) makes {@html "αt"} decay to0, approximating disabled bias-correction;0.0instead pins {@html "αt"} at1for every step (maximum, undecayed correction). - lag (
int, optional, defaults to10) — 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 "ρ"} en el artículo. - update_after (
int, opcional, el valor predeterminado es0) — 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 γ "}τ"} in the paper. - multiplier (
float, optional, defaults to1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ"} en el artículo. - min_ema_multiplier (
float, opcional, valor predeterminado0.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 predeterminadoFalse) — 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 predeterminado400) — Actualiza el modelo de referencia con los pesos de BEMA cada este número de pasos. - ref_model_update_after (
int, opcional, valor predeterminado0) — 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:
donde son los pesos actuales del modelo, es una instantánea de los pesos del modelo en el primer update_after paso, es la media móvil exponencial de los pesos del modelo, y es un factor de escala que decae con el número de pasos como
El EMA se calcula como:
donde es un factor de decaimiento que decae con el número de pasos como