TRL documentation
BEMA cho Mô hình Tham chiếu
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
train
< 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
Tham số
- resume_from_checkpoint (
strhoặcbool, 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ênTrainertrước đó. Nếu làboolvà bằngTrue, tải checkpoint cuối cùng trong args.output_dir do một phiênTrainertrướ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.Trialhoặcdict[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.
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
< source >( 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ề khigit 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
< 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 )
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 "ϕ"} in the paper. - ema_power (
float, optional, defaults to0.5) — Power for the EMA decay factor. Denoted {@html "κ "} trong bài báo. Để tắt EMA, đặt giá trị này thành0.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 ρ "}η"} 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 "ρ"} 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 τ"}τ"} in the paper. - multiplier (
float, optional, defaults to1.0) — Initial value for the EMA decay factor. Denoted as {@html "γ"} 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:
trong đó là trọng số mô hình hiện tại, là bản sao của trọng số mô hình tại bước update_after đầu tiên sau của trọng số mô hình, và là hệ số tỷ lệ giảm dần theo số bước theo công thức
EMA được tính như sau:
trong đó là hệ số suy giảm, giảm dần theo số bước theo công thức