TRL documentation

BEMA pour le modèle de référence

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

and get access to the augmented documentation experience

to get started

BEMA pour le modèle de référence

Cette fonctionnalité implémente l'algorithme BEMA pour mettre à jour le modèle de référence pendant l'entraînement DPO.

Utilisation

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

classe trl.DPOTrainer

< >

( *args**kwargs )

train

< >

( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → ~trainer_utils.TrainOutput

Paramètres

  • resume_from_checkpoint (str ou bool, facultatif) — Si c'est une str, chemin local d'un point de contrôle enregistré par une instance précédente de Trainer. Si c'est un bool et vaut True, charge le dernier point de contrôle dans args.output_dir enregistré par une instance précédente de Trainer. S'il est présent, l'entraînement reprendra à partir des états du modèle/optimiseur/planificateur chargés ici.
  • trial (optuna.Trial ou dict[str, Any], facultatif) — L’exécution de l’essai ou le dictionnaire d’hyperparamètres pour la recherche d’hyperparamètres.
  • ignore_keys_for_eval (list[str], facultatif) — Une liste de clés dans la sortie de votre modèle (s’il s’agit d’un dictionnaire) qui doivent être ignorées lors de la collecte des prédictions pour l’évaluation pendant l’entraînement.

Retourne

~trainer_utils.TrainOutput

Objet contenant le nombre d'étapes globales, la perte d'entraînement et les métriques.

Point d'entrée principal de l'entraînement.

save_model

< >

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

Enregistrera le modèle, ce qui vous permettra de le recharger à l'aide de from_pretrained().

N'enregistrera que depuis le processus principal.

push_to_hub

< >

( commit_message: str | None = 'End of training'blocking: bool = Truetoken: str | None = Nonerevision: str | None = None**kwargs )

Paramètres

  • commit_message (str, facultatif, par défaut "End of training") — Message à committer lors de la poussée.
  • blocking (bool, facultatif, par défaut True) — Indique si la fonction doit ne renvoyer que lorsque le git push est terminé.
  • token (str, facultatif, par défaut None) — Jeton avec permission d’écriture pour écraser les arguments originaux du Trainer.
  • revision (str, facultatif) — La révision git à partir de laquelle effectuer le commit. Par défaut, il s'agit de la tête de la branche « main ».
  • kwargs (dict[str, Any], facultatif) — Arguments supplémentaires passés à ~Trainer.create_model_card.

Téléchargez self.model et self.processing_class sur le hub de modèles 🤗 dans le dépôt self.args.hub_model_id.

BEMACallback

classe 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 )

Paramètres

  • update_freq (int, facultatif, par défaut 400) — Mettre à jour les poids BEMA toutes les X étapes. Noté {@html "ϕ \\phi ϕ"} in the paper.
  • ema_power (float, optional, defaults to 0.5) — Power for the EMA decay factor. Denoted {@html "κ \\kappa κ "} dans l'article. Pour désactiver l'EMA, définissez cette valeur sur 0.0.
  • bias_power (float, facultatif, valeur par défaut 0.2) — Puissance du facteur d'échelle BEMA. Noté {@html "η \\eta η"} dans l'article. Une valeur élevée (par ex. 8.0) fait décroître {@html "αt \\alpha_t αt​"} vers 0, ce qui approxime une correction de biais désactivée ; 0.0 fixe au contraire {@html "αt \\alpha_t αt​"} à 1 à chaque étape (correction maximale, non atténuée). lag (int, facultatif, valeur par défaut 10) — Décalage initial dans le calendrier de décroissance du poids qui contrôle la fluidité des premières étapes en agissant comme un âge de départ virtuel pour les mises à jour. Noté {@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 ρ"} dans l'article.
  • update_after (int, facultatif, valeur par défaut 0) — Durée de préchauffage avant de commencer à mettre à jour les poids de BEMA. Noté {@html "τ \\tau τ"} in the paper.
  • multiplier (float, optional, defaults to 1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ \\gamma γ"} dans l'article.
  • min_ema_multiplier (float, facultatif, valeur par défaut 0.0) — Valeur minimale pour le facteur de décroissance de l'EMA.
  • device (str, facultatif, par défaut "cpu") — Appareil à utiliser pour les tampons BEMA, par exemple "cpu" ou "cuda". Notez que dans la plupart des cas, cet appareil DOIT ÊTRE DIFFÉRENT de celui utilisé pour l'entraînement afin d'éviter les erreurs OOM.
  • update_ref_model (bool, facultatif, valeur par défaut False) — Indique s'il faut mettre à jour le modèle de référence avec les poids BEMA. Cela crée une version retardée et lissée du modèle principal en tant que modèle de référence.
  • ref_model_update_freq (int, facultatif, valeur par défaut 400) — Mettre à jour le modèle de référence avec les poids BEMA toutes les X étapes.
  • ref_model_update_after (int, facultatif, par défaut 0) — Nombre d'étapes à attendre avant de commencer à mettre à jour le modèle de référence.

Un TrainerCallback qui implémente BEMA (moyenne mobile exponentielle corrigée du biais) de Adam Block et Cyril Zhang. Code issu de https://github.com/abblock/bema sous licence MIT.

BEMA calcule les poids du modèle qui évoluent comme suit : θt′=αt⋅(θt−θ0)+EMAt \theta_t' = \alpha_t \cdot (\theta_t - \theta_0) + \text{EMA}_t

où θt \theta_t sont les poids actuels du modèle, θ0 \theta_0 est une copie des poids du modèle au premier update_after pas, EMAt \text{EMA}_t est la moyenne mobile exponentielle des poids du modèle, etαt \alpha_t est un facteur d'échelle qui décroît avec le nombre de pas t t selon αt=(ρ+γ⋅t)−η. \alpha_t = (\rho + \gamma \cdot t)^{-\eta}.

L'EMA est calculée comme suit : EMAt=(1−βt)⋅EMAt−1+βt⋅θt \text{EMA}_t = (1 - \beta_t) \cdot \text{EMA}_{t-1} + \beta_t \cdot \theta_t

où βt \beta_t est un facteur d'atténuation qui diminue avec le nombre d'étapes t t selon la formule βt=(ρ+γ⋅t)−κ. \beta_t = (\rho + \gamma \cdot t)^{-\kappa}.

Exemple :

>>> from trl import BEMACallback

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