TRL documentation
BEMA для эталонной модели
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
обучение
< 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
Параметры
- 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
Объект, содержащий количество глобальных шагов, потерю обучения и метрики.
Основная точка входа для обучения.
Сохранит модель, чтобы вы могли загрузить её снова с помощью from_pretrained().
Сохранение будет выполняться только из основного процесса.
push_to_hub
< source >( 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
< 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 )
Параметры
- update_freq (
int, необязательный, по умолчанию400) — Обновлять веса BEMA каждые X шагов. В статье обозначается как {@html "ϕ"} in the paper. - ema_power (
float, optional, defaults to0.5) — Power for the EMA decay factor. Denoted {@html "κ "} в статье. Чтобы отключить 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 ρ "}η"} 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 "ρ"} в статье. - update_after (
int, необязательный, по умолчанию0) — Время прогрева перед началом обновления весов BEMA. Обозначается как {@html "τ \\tau τ"} в статье. multiplier (float, необязательный, по умолчанию 1.0) — Начальное значение для коэффициента затухания EMA. Обозначается как {@html "γ \\gamma γ "}τ"} in the paper. - multiplier (
float, optional, defaults to1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ"} в статье. - 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 вычисляет веса модели, которые масштабируются следующим образом:
где — текущие веса модели, — снимок весов модели на первом update_after шаге — экспоненциальное скользящее среднее весов модели, а — коэффициент масштабирования, который затухает с числом шагов по формуле
EMA вычисляется следующим образом:
где — коэффициент затухания, который уменьшается с числом шагов по закону