TRL documentation

BEMA для эталонной модели

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 для эталонной модели

Эта функция реализует алгоритм BEMA для обновления эталонной модели во время обучения DPO.

Использование

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

класс trl.DPOTrainer

< >

( *args**kwargs )

обучение

< >

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

Параметры

  • resume_from_checkpoint (str или bool, необязательный) — Если передано значение типа str, это локальный путь к сохранённой контрольной точке, созданной предыдущим экземпляром Trainer. Если передано значение типа bool и оно равно True, загружается последняя контрольная точка из args.output_dir, сохранённая предыдущим экземпляром Trainer. Если параметр указан, обучение возобновляется из состояний модели/оптимизатора/планировщика, загруженных из этой контрольной точки.
  • trial (optuna.Trial или dict[str, Any], необязательный) — Запуск испытания или словарь гиперпараметров для поиска гиперпараметров.
  • ignore_keys_for_eval (list[str], необязательный) — Список ключей в выводе вашей модели (если он представляет собой словарь), которые следует игнорировать при сборе предсказаний для оценки во время обучения.

Возвращает

~trainer_utils.TrainOutput

Объект, содержащий количество глобальных шагов, потерю обучения и метрики.

Основная точка входа для обучения.

save_model

< >

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

Сохранит модель, чтобы вы могли загрузить её снова с помощью from_pretrained().

Сохранение будет выполняться только из основного процесса.

push_to_hub

< >

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

Параметры

  • commit_message (str, необязательный, по умолчанию "End of training") — Сообщение для коммита при отправке.
  • blocking (bool, необязательный, по умолчанию True) — Определяет, должна ли функция возвращаться только после завершения git push.
  • token (str, необязательный, по умолчанию None) — Токен с правом записи для перезаписи исходных аргументов Trainer.
  • revision (str, необязательный) — Git-ревизия, от которой выполняется коммит. По умолчанию используется head ветки “main”.
  • private (bool, необязательный) — Определяет, следует ли сделать репозиторий приватным при его создании. По умолчанию используется значение args.hub_private_repo. Не имеет эффекта, если репозиторий уже существует.
  • kwargs (dict[str, Any], необязательный) — Дополнительные именованные аргументы, передаваемые в ~Trainer.create_model_card.

Загрузите self.model и self.processing_class в модельный хаб 🤗 в репозиторий self.args.hub_model_id.

BEMACallback

класс 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 )

Параметры

  • update_freq (int, необязательный, по умолчанию 400) — Обновлять веса BEMA каждые X шагов. В статье обозначается как {@html "ϕ \\phi ϕ"} in the paper.
  • ema_power (float, optional, defaults to 0.5) — Power for the EMA decay factor. Denoted {@html "κ \\kappa κ "} в статье. Чтобы отключить EMA, установите это значение в 0.0.
  • bias_power (float, необязательный, по умолчанию 0.2) — степень для масштабирующего коэффициента BEMA. В статье обозначается как {@html "η \\eta η"}. Большое значение (например, 8.0) приводит к тому, что {@html "αt \\alpha_t αt​"} стремится к 0, что приближается к отключённой коррекции смещения; значение 0.0, напротив, фиксирует {@html "αt \\alpha_t αt​"} на уровне 1 на каждом шаге (максимальная, не затухающая коррекция). lag (int, необязательный, по умолчанию 10) — начальное смещение в расписании затухания весов, которое контролирует плавность на ранних этапах, выступая в роли виртуального начального возраста для обновлений. Обозначается как {@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 ρ"} в статье.
  • update_after (int, необязательный, по умолчанию 0) — Время прогрева перед началом обновления весов BEMA. Обозначается как {@html "τ \\tau τ"} в статье. multiplier (float, необязательный, по умолчанию 1.0) — Начальное значение для коэффициента затухания EMA. Обозначается как {@html "γ \\gamma γ "}τ \\tau τ"} in the paper.
  • multiplier (float, optional, defaults to 1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ \\gamma γ"} в статье.
  • min_ema_multiplier (float, необязательный, по умолчанию 0.0) — Минимальное значение для коэффициента затухания EMA.
  • device (str, необязательный, по умолчанию "cpu") — Устройство для буферов BEMA, например "cpu" или "cuda". Обратите внимание, что в большинстве случаев это устройство ДОЛЖНО БЫТЬ РАЗЛИЧНЫМ от устройства, используемого для обучения, чтобы избежать OOM.
  • update_ref_model (bool, необязательный, по умолчанию False) — Определяет, следует ли обновлять эталонную модель с весами BEMA. Это создаёт отставшую, сглаженную версию основной модели в качестве эталонной.
  • ref_model_update_freq (int, необязательный, по умолчанию 400) — Обновлять эталонную модель весами BEMA каждые эти шаги.
  • ref_model_update_after (int, необязательный, по умолчанию 0) — Количество шагов, которые нужно пропустить перед началом обновления эталонной модели.

Класс TrainerCallback, реализующий BEMA (Bias-Corrected Exponential Moving Average) от Adam Block и Cyril Zhang. Код из https://github.com/abblock/bema под лицензией MIT.

BEMA вычисляет веса модели, которые масштабируются следующим образом: θt′=αt⋅(θt−θ0)+EMAt \theta_t' = \alpha_t \cdot (\theta_t - \theta_0) + \text{EMA}_t

где θt \theta_t — текущие веса модели, θ0 \theta_0 — снимок весов модели на первом update_after шаге EMAt \text{EMA}_t — экспоненциальное скользящее среднее весов модели, аαt \alpha_t — коэффициент масштабирования, который затухает с числом шагов t t по формуле αt=(ρ+γ⋅t)−η. \alpha_t = (\rho + \gamma \cdot t)^{-\eta}.

EMA вычисляется следующим образом: EMAt=(1−βt)⋅EMAt−1+βt⋅θt \text{EMA}_t = (1 - \beta_t) \cdot \text{EMA}_{t-1} + \beta_t \cdot \theta_t

где βt \beta_t — коэффициент затухания, который уменьшается с числом шагов t t по закону βt=(ρ+γ⋅t)−κ. \beta_t = (\rho + \gamma \cdot t)^{-\kappa}.

Пример:

>>> from trl import BEMACallback

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