TRL documentation

BEMA cho Mô hình Tham chiếu

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 cho Mô hình Tham chiếu

Tính năng này triển khai thuật toán BEMA để cập nhật mô hình tham chiếu trong quá trình huấn luyện DPO.

Cách sử dụng

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

lớp 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

Tham số

  • resume_from_checkpoint (str hoặc bool, tùy chọn) — Nếu là str, đường dẫn cục bộ đến một checkpoint đã lưu bởi một phiên Trainer trước đó. Nếu là bool và bằng True, tải checkpoint cuối cùng trong args.output_dir do một phiên Trainer trước đó lưu lại. Nếu có, quá trình huấn luyện sẽ tiếp tục từ trạng thái model/optimizer/scheduler được tải ở đây.
  • trial (optuna.Trial hoặc dict[str, Any], tùy chọn) — Lần chạy thử nghiệm hoặc từ điển siêu tham số cho việc tìm kiếm siêu tham số.
  • ignore_keys_for_eval (list[str], tùy chọn) — Một danh sách các khóa trong đầu ra của mô hình của bạn (nếu đó là một từ điển) cần được bỏ qua khi thu thập các dự đoán để đánh giá trong quá trình huấn luyện.

Trả về

~trainer_utils.TrainOutput

Đối tượng chứa số bước toàn cục, tổn thất huấn luyện và các chỉ số.

Điểm vào chính cho quá trình huấn luyện.

save_model

< >

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

Sẽ lưu mô hình, để bạn có thể tải lại bằng from_pretrained().

Chỉ lưu từ tiến trình chính.

push_to_hub

< >

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

Tham số

  • commit_message (str, tùy chọn, mặc định là "End of training") — Thông điệp để commit khi đẩy lên.
  • blocking (bool, tùy chọn, mặc định là True) — Xác định xem hàm có chỉ trả về khi git push đã hoàn tất hay không.
  • token (str, tùy chọn, mặc định là None) — Token có quyền ghi để ghi đè lên các args gốc của Trainer.
  • revision (str, tùy chọn) — Phiên bản git để commit từ. Mặc định là đầu của nhánh “main”.
  • private (bool, tuỳ chọn) — Xác định xem có đặt kho thành riêng tư khi tạo hay không. Mặc định là args.hub_private_repo. Không có tác dụng nếu kho đã tồn tại.
  • kwargs (dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung được truyền đến ~Trainer.create_model_card.

Tải self.model và self.processing_class lên 🤗 model hub tại repo self.args.hub_model_id.

BEMACallback

lớp 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 )

Tham số

  • update_freq (int, tuỳ chọn, mặc định là 400) — Cập nhật trọng số BEMA mỗi X bước. Kí hiệu là {@html "ϕ \\phi ϕ"} in the paper.
  • ema_power (float, optional, defaults to 0.5) — Power for the EMA decay factor. Denoted {@html "κ \\kappa κ "} trong bài báo. Để tắt EMA, đặt giá trị này thành 0.0.
  • bias_power (float, tuỳ chọn, mặc định là 0.2) — Số mũ cho hệ số tỷ lệ BEMA. Được ký hiệu là {@html "η \\eta η"} trong bài báo. Giá trị lớn (ví dụ: 8.0) khiến {@html "αt \\alpha_t αt​"} suy giảm về 0, xấp xỉ việc vô hiệu hóa hiệu chỉnh bias; 0.0 thay vào đó giữ {@html "αt \\alpha_t αt​"} ở mức 1 cho mỗi bước (hiệu chỉnh tối đa, không suy giảm). lag (int, tuỳ chọn, mặc định là 10) — Độ lệch ban đầu trong lịch trình suy giảm trọng số, kiểm soát độ mượt ở giai đoạn đầu bằng cách đóng vai trò tuổi bắt đầu ảo cho các cập nhật. Được ký hiệu là {@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 ρ"} trong bài báo.
  • update_after (int, tuỳ chọn, mặc định là 0) — Thời gian chạy thử trước khi bắt đầu cập nhật trọng số BEMA. Được ký hiệu là {@html "τ \tau τ"}τ \\tau τ"} in the paper.
  • multiplier (float, optional, defaults to 1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ \\gamma γ"} trong bài báo.
  • min_ema_multiplier (float, tùy chọn, mặc định là 0.0) — Giá trị tối thiểu cho hệ số suy giảm EMA.
  • device (str, tùy chọn, mặc định là "cpu") — Thiết bị để sử dụng cho các bộ đệm BEMA, ví dụ "cpu" hoặc "cuda". Lưu ý rằng trong hầu hết các trường hợp, thiết bị này NÊN KHÁC với thiết bị được sử dụng cho huấn luyện để tránh OOM.
  • update_ref_model (bool, tùy chọn, mặc định là False) — Có cập nhật mô hình tham chiếu với trọng số BEMA hay không. Thao tác này tạo ra một phiên bản trễ, được làm mượt của mô hình chính để làm mô hình tham chiếu.
  • ref_model_update_freq (int, tùy chọn, mặc định là 400) — Cập nhật mô hình tham chiếu với trọng số BEMA mỗi số bước này.
  • ref_model_update_after (int, tùy chọn, mặc định là 0) — Số bước cần chờ trước khi bắt đầu cập nhật mô hình tham chiếu.

Một TrainerCallback triển khai BEMA (Bias-Corrected Exponential Moving Average) do Adam Block và Cyril Zhang phát triển. Mã nguồn từ https://github.com/abblock/bema theo giấy phép MIT.

BEMA tính toán trọng số mô hình có tỷ lệ như sau: θt′=αt⋅(θt−θ0)+EMAt \theta_t' = \alpha_t \cdot (\theta_t - \theta_0) + \text{EMA}_t

trong đó θt \theta_t là trọng số mô hình hiện tại, θ0 \theta_0 là bản sao của trọng số mô hình tại bước update_after đầu tiên sau EMAt \text{EMA}_t của trọng số mô hình, vàαt \alpha_t là hệ số tỷ lệ giảm dần theo số bước t t theo công thức αt=(ρ+γ⋅t)−η. \alpha_t = (\rho + \gamma \cdot t)^{-\eta}.

EMA được tính như sau: EMAt=(1−βt)⋅EMAt−1+βt⋅θt \text{EMA}_t = (1 - \beta_t) \cdot \text{EMA}_{t-1} + \beta_t \cdot \theta_t

trong đó βt \beta_t là hệ số suy giảm, giảm dần theo số bước t t theo công thức βt=(ρ+γ⋅t)−κ. \beta_t = (\rho + \gamma \cdot t)^{-\kappa}.

Ví dụ:

>>> from trl import BEMACallback

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