Transformers documentation
Tối ưu hóa
Tối ưu hóa
Module .optimization cung cấp:
- một optimizer có weight decay cố định, có thể được sử dụng để fine-tune các mô hình, và
- một số lịch dưới dạng các đối tượng kế thừa từ
_LRSchedule: - một lớp tích lũy gradient để tích lũy gradient của nhiều lô
AdaFactor
lớp transformers.Adafactor
< source >( paramslr = Noneeps = (1e-30, 0.001)clip_threshold = 1.0decay_rate = -0.8beta1 = Noneweight_decay = 0.0scale_parameter = Truerelative_step = Truewarmup_init = False )
Tham số
- params (
Iterable[nn.parameter.Parameter]) — Dãy lặp các tham số cần tối ưu hoặc các từ điển định nghĩa nhóm tham số. - lr (
float, tùy chọn) — Tốc độ học bên ngoài. - eps (
tuple[float, float], tùy chọn, mặc định là(1e-30, 0.001)) — Các hằng số điều hòa cho gradient bình phương và thang đo tham số, tương ứng - clip_threshold (
float, tùy chọn, mặc định là 1.0) — Ngưỡng của căn bậc hai trung bình (root mean square) của bản cập nhật gradient cuối cùng - decay_rate (
float, tùy chọn, mặc định là -0.8) — Hệ số được sử dụng để tính trung bình trượt của bình phương - beta1 (
float, tùy chọn) — Hệ số được sử dụng để tính trung bình trượt của gradient - weight_decay (
float, tùy chọn, mặc định là 0.0) — Phân rã trọng số (phạt L2) - scale_parameter (
bool, tùy chọn, mặc định làTrue) — Nếu là True, tốc độ học sẽ được nhân với căn trung bình bình phương - relative_step (
bool, tùy chọn, mặc định làTrue) — Nếu là True, tốc độ học phụ thuộc thời gian sẽ được tính toán thay vì tốc độ học bên ngoài - warmup_init (
bool, tùy chọn, mặc định làFalse) — Việc tính toán tốc độ học phụ thuộc vào thời gian dựa trên việc có đang sử dụng khởi tạo làm nóng (warm-up) hay không
Cài đặt AdaFactor pytorch có thể được sử dụng như một thay thế trực tiếp cho mã fairseq gốc của Adam: https://github.com/pytorch/fairseq/blob/master/fairseq/optim/adafactor.py
Bài báo: Adafactor: Adaptive Learning Rates with Sublinear Memory Cost https://huggingface.co/papers/1804.04235 Lưu ý rằng
optimizer này tự động điều chỉnh learning rate bên trong dựa trên các tùy chọn scale_parameter, relative_step và warmup_init. Để sử dụng lịch trình learning rate thủ công (bên ngoài), bạn nên đặt scale_parameter=False và relative_step=False.
Cài đặt này xử lý các giá trị độ chính xác thấp (FP16, bfloat), nhưng chúng tôi chưa kiểm tra kỹ lưỡng.
Cài đặt tinh chỉnh T5 được khuyến nghị (https://huggingface.co/proxy/discuss.huggingface.co/t/t5-finetuning-tips/684/3):
Không khuyến nghị huấn luyện mà không có LR warmup hoặc clip_threshold.
- sử dụng LR warm-up theo lịch trình sang LR cố định
- sử dụng clip_threshold=1.0 (https://huggingface.co/papers/1804.04235)
Tắt cập nhật tương đối
Sử dụng scale_parameter=False
Các thao tác tối ưu hóa bổ sung như cắt gradient không nên được sử dụng cùng với Adafactor
Ví dụ:
Adafactor(model.parameters(), scale_parameter=False, relative_step=False, warmup_init=False, lr=1e-3)Những người khác đã báo cáo rằng sự kết hợp sau hoạt động tốt:
Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)Khi sử dụng lr=None với Trainer, bạn sẽ rất có thể cần sử dụng AdafactorSchedule
scheduler như sau:
from transformers.optimization import Adafactor, AdafactorSchedule
optimizer = Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)
lr_scheduler = AdafactorSchedule(optimizer)
trainer = Trainer(..., optimizers=(optimizer, lr_scheduler))Cách sử dụng:
# replace AdamW with Adafactor
optimizer = Adafactor(
model.parameters(),
lr=1e-3,
eps=(1e-30, 1e-3),
clip_threshold=1.0,
decay_rate=-0.8,
beta1=None,
weight_decay=0.0,
relative_step=False,
scale_parameter=False,
warmup_init=False,
)bước
< source >( closure = None )
Thực hiện một bước tối ưu hóa
Lịch trình
SchedulerType
lớp transformers.SchedulerType
< source >( valuenames = Nonemodule = Nonequalname = Nonetype = Nonestart = 1boundary = None )
Tên scheduler cho tham số lr_scheduler_type trong TrainingArguments.
Mặc định, nó sử dụng “linear”. Bên trong, điều này lấy scheduler get_linear_schedule_with_warmup từ Trainer.
Các loại scheduler:
- “linear” = get_linear_schedule_with_warmup()
- “cosine” = get_cosine_schedule_with_warmup()
- “cosine_with_restarts” = get_cosine_with_hard_restarts_schedule_with_warmup()
- “polynomial” = get_polynomial_decay_schedule_with_warmup()
- “constant” = get_constant_schedule()
- “constant_with_warmup” = get_constant_schedule_with_warmup()
- “inverse_sqrt” = get_inverse_sqrt_schedule()
- “reduce_lr_on_plateau” = get_reduce_on_plateau_schedule()
- “cosine_with_min_lr” = get_cosine_with_min_lr_schedule_with_warmup()
- “cosine_warmup_with_min_lr” = get_cosine_with_min_lr_schedule_with_warmup_lr_rate()
- “warmup_stable_decay” = get_wsd_schedule()
- “greedy” = get_greedy_schedule()
get_scheduler
transformers.get_scheduler
< source >( name: str | SchedulerTypeoptimizer: Optimizernum_warmup_steps: int | None = Nonenum_training_steps: int | None = Nonescheduler_specific_kwargs: dict | None = None )
Tham số
- name (
strhoặcSchedulerType) — Tên của scheduler cần sử dụng. - optimizer (
torch.optim.Optimizer) — Trình tối ưu sẽ được sử dụng trong quá trình huấn luyện. - num_warmup_steps (
int, tùy chọn) — Số bước warmup cần thực hiện. Không phải trình lập lịch (scheduler) nào cũng yêu cầu tham số này (do đó tham số là tùy chọn); hàm sẽ gây ra lỗi nếu tham số chưa được đặt và loại scheduler yêu cầu nó. - num_training_steps (`int“, tuỳ chọn) — Số bước huấn luyện cần thực hiện. Không phải trình lập lịch (scheduler) nào cũng yêu cầu tham số này (do đó tham số là tuỳ chọn); hàm sẽ gây ra lỗi nếu tham số chưa được đặt và loại trình lập lịch yêu cầu nó.
- scheduler_specific_kwargs (
dict, tùy chọn) — Các tham số bổ sung cho các scheduler như cosine with restarts. Việc không khớp giữa loại scheduler và các tham số scheduler sẽ khiến hàm scheduler gây ra TypeError.
API thống nhất để lấy bất kỳ trình lập lịch nào từ tên của nó.
get_constant_schedule
transformers.get_constant_schedule
< source >( optimizer: Optimizerlast_epoch: int = -1 )
Tạo lịch trình với tốc độ học không đổi, sử dụng tốc độ học được đặt trong optimizer.
get_constant_schedule_with_warmup
transformers.get_constant_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intlast_epoch: int = -1 )
Tạo lịch trình với tốc độ học không đổi, được đi trước bởi một giai đoạn làm nóng (warmup) trong đó tốc độ học tăng tuyến tính giữa 0 và lr ban đầu được đặt trong optimizer.
get_cosine_schedule_with_warmup
transformers.get_cosine_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1 )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - num_training_steps (
int) — Tổng số bước huấn luyện. - num_cycles (
float, tùy chọn, mặc định là 0.5) — Số lượng sóng trong lịch cosine (mặc định là chỉ giảm từ giá trị tối đa xuống 0 theo nửa cosine). - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện.
Tạo một lịch trình với tốc độ học giảm theo các giá trị của hàm cosine giữa lr ban đầu được đặt trong optimizer và 0, sau một giai đoạn warmup trong đó nó tăng tuyến tính giữa 0 và lr ban đầu được đặt trong optimizer.
get_cosine_with_hard_restarts_schedule_with_warmup
transformers.get_cosine_with_hard_restarts_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: int = 1last_epoch: int = -1 )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - num_training_steps (
int) — Tổng số bước huấn luyện. - num_cycles (
int, tùy chọn, mặc định là 1) — Số lần khởi động lại cứng cần sử dụng. - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện.
Tạo một lịch trình với tốc độ học giảm theo các giá trị của hàm cosine giữa lr ban đầu được đặt trong optimizer và 0, với một số lần khởi động lại cứng, sau một khoảng thời gian warmup trong đó tốc độ học tăng tuyến tính giữa 0 và lr ban đầu được đặt trong optimizer.
get_cosine_with_min_lr_schedule_with_warmup
transformers.get_cosine_with_min_lr_schedule_with_warmup
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = None )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - num_training_steps (
int) — Tổng số bước huấn luyện. - num_cycles (
float, tùy chọn, mặc định là 0.5) — Số lượng sóng trong lịch cosine (mặc định là chỉ giảm từ giá trị tối đa xuống 0 theo nửa cosine). - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện. - min_lr (
float, tùy chọn) — Tốc độ học tối thiểu cần đạt được sau lịch cosine. - min_lr_rate (
float, tùy chọn) — Tỷ lệ tối thiểu của tốc độ học so với tốc độ học ban đầu. Nếu được đặt,min_lrkhông nên được đặt.
Tạo một lịch trình với tốc độ học giảm theo các giá trị của hàm cosine giữa lr ban đầu được đặt trong optimizer và min_lr, sau một giai đoạn warmup trong đó tốc độ học tăng tuyến tính giữa 0 và lr ban đầu được đặt trong optimizer.
get_cosine_with_min_lr_schedule_with_warmup_lr_rate
transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate
< source >( optimizer: Optimizernum_warmup_steps: intnum_training_steps: intnum_cycles: float = 0.5last_epoch: int = -1min_lr: float | None = Nonemin_lr_rate: float | None = Nonewarmup_lr_rate: float | None = None )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - num_training_steps (
int) — Tổng số bước huấn luyện. - num_cycles (
float, tùy chọn, mặc định là 0.5) — Số lượng sóng trong lịch cosine (mặc định là chỉ giảm từ giá trị tối đa xuống 0 theo nửa cosine). - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện. - min_lr (
float, tùy chọn) — Tốc độ học tối thiểu cần đạt được sau lịch cosine. - min_lr_rate (
float, tùy chọn) — Tỷ lệ tối thiểu của tốc độ học so với tốc độ học ban đầu. Nếu được đặt,min_lrkhông nên được đặt. - warmup_lr_rate (
float, tùy chọn) — Tỷ lệ tối thiểu của tốc độ học so với tốc độ học ban đầu. Nếu không được đặt,warmup_lr_ratesẽ được coi là float(1/num_warmup_steps).
Tạo một lịch trình với tốc độ học giảm theo các giá trị của hàm cosine giữa lr ban đầu được đặt trong optimizer và min_lr, sau một giai đoạn warmup trong đó tốc độ học tăng tuyến tính giữa 0 và lr ban đầu được đặt trong optimizer.
GreedyLR
lớp transformers.GreedyLR
< source >( optimizer: Optimizermode: str = 'min'factor: float = 0.95patience: int = 10threshold: float = 1e-06threshold_mode: str = 'abs'cooldown: int = 0warmup: int = 0min_lr: float | list[float] = 0.001max_lr: float | list[float] = 1.0eps: float = 1e-08verbose: bool = Falsesmooth: bool = Falsewindow_size: int = 50reset_start: int = 500 )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - mode (
str, tùy chọn, mặc định là"min") — Một trong ‘min’ hoặc ‘max’. Ở chế độ ‘min’, LR sẽ được giảm khi metric ngừng giảm; ở chế độ ‘max’ khi nó ngừng tăng. - factor (
float, tùy chọn, mặc định là 0.95) — Hệ số để điều chỉnh tốc độ học. Tốc độ học sẽ được nhân với factor khi gặp điểm dừng và chia cho factor khi có cải thiện. Phải < 1.0. - patience (
int, tùy chọn, mặc định là 10) — Số epoch không có cải thiện sau đó tốc độ học sẽ được điều chỉnh. - threshold (
float, tùy chọn, mặc định là 1e-06) — Ngưỡng để đo điểm tối ưu mới. - threshold_mode (
str, tùy chọn, mặc định là"abs") — Một trong ‘rel’ hoặc ‘abs’. - cooldown (
int, tùy chọn, mặc định là 0) — Số epoch cần chờ trước khi tiếp tục hoạt động bình thường sau khi LR đã được giảm. - warmup (
int, tùy chọn, mặc định là 0) — Số epoch cần chờ trước khi tiếp tục hoạt động bình thường sau khi LR đã được tăng lên. - min_lr (
floathoặclist[float], tùy chọn, mặc định là 0.001) — Giới hạn dưới của tốc độ học. - max_lr (
floathoặclist[float], tùy chọn, mặc định là 1.0) — Giới hạn trên của tốc độ học. - eps (
float, tùy chọn, mặc định là 1e-08) — Mức suy giảm tối thiểu được áp dụng cho lr. - verbose (
bool, tùy chọn, mặc định làFalse) — Nếu là True, sẽ in một thông báo ra stdout cho mỗi lần cập nhật. - smooth (
bool, tùy chọn, mặc định làFalse) — Nếu là True, áp dụng làm mượt trung bình trượt cho các chỉ số. - window_size (
int, tùy chọn, mặc định là 50) — Kích thước cửa sổ cho trung bình trượt khi smooth=True. - reset_start (
int, tùy chọn, mặc định là 500) — Số bước cần chờ ở min_lr trước khi đặt lại về trạng thái ban đầu.
Trình lập lịch tốc độ học thích ứng, phản hồi theo các chỉ số huấn luyện.
GreedyLR tự động điều chỉnh tốc độ học dựa trên hiệu suất huấn luyện:
- Tăng LR khi các chỉ số cải thiện ổn định (chia cho hệ số)
- Giảm LR khi các chỉ số đạt trạng thái ổn định (nhân với hệ số)
Điều này khác với các trình lập lịch truyền thống như cosine annealing ở chỗ nó phản hồi với động lực học huấn luyện thực tế thay vì tuân theo một lịch trình được xác định trước.
Tham khảo: GreedyLR: A Novel Adaptive Learning Rate Scheduler <https://arxiv.org/abs/2512.14527>_
Ví dụ:
>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
>>> scheduler = GreedyLR(optimizer, mode="min", patience=10)
>>> for epoch in range(100):
... train(...)
... val_loss = validate(...)
... scheduler.step(val_loss)Trả về tốc độ học đã được tính toán gần nhất bởi trình lập lịch hiện tại.
Tải trạng thái từ một từ điển.
Trả về trạng thái của trình lập lịch dưới dạng từ điển.
bước
< source >( metrics: floatepoch: int | None = None )
Thực hiện một bước của trình lập lịch dựa trên các chỉ số đã cho.
get_greedy_schedule
transformers.get_greedy_schedule
< source >( optimizer: Optimizer**kwargs )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - kwargs (
dict, tùy chọn) — Các tham số bổ sung được truyền cho trình lập lịch. Xem GreedyLR để biết các tham số có thể.
Tạo một trình lập lịch tốc độ học thích ứng, điều chỉnh LR dựa trên các chỉ số huấn luyện.
get_linear_schedule_with_warmup
transformers.get_linear_schedule_with_warmup
< source >( optimizernum_warmup_stepsnum_training_stepslast_epoch = -1 )
Tham số
Tạo một lịch trình với tốc độ học giảm tuyến tính từ lr ban đầu được đặt trong optimizer xuống 0, sau một khoảng thời gian warmup mà trong đó tốc độ học tăng tuyến tính từ 0 lên lr ban đầu được đặt trong optimizer.
get_polynomial_decay_schedule_with_warmup
transformers.get_polynomial_decay_schedule_with_warmup
< source >( optimizernum_warmup_stepsnum_training_stepslr_end = 1e-07power = 1.0last_epoch = -1 )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - num_training_steps (
int) — Tổng số bước huấn luyện. - lr_end (
float, tùy chọn, mặc định là 1e-7) — LR cuối. - power (
float, tùy chọn, mặc định là 1.0) — Hệ số lũy thừa. - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện.
Tạo lịch trình với tốc độ học giảm theo dạng suy giảm đa thức từ lr ban đầu được đặt trong optimizer đến lr kết thúc được định nghĩa bởi lr_end, sau một giai đoạn warmup trong đó tốc độ học tăng tuyến tính từ 0 đến lr ban đầu được đặt trong optimizer.
Lưu ý: power mặc định là 1.0 như trong triển khai fairseq, vốn dựa trên triển khai BERT gốc tại https://github.com/google-research/bert/blob/f39e881b169b9d53bea03d2d341b31707a6c052b/optimization.py#L37
get_inverse_sqrt_schedule
transformers.get_inverse_sqrt_schedule
< source >( optimizer: Optimizernum_warmup_steps: inttimescale: int | None = Nonelast_epoch: int = -1 )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - timescale (
int, tùy chọn, mặc định lànum_warmup_steps) — Thang thời gian. - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện.
Tạo lịch trình với tốc độ học theo căn bậc hai nghịch đảo, bắt đầu từ lr ban đầu được đặt trong optimizer, sau một khoảng thời gian warmup trong đó lr tăng tuyến tính từ 0 lên lr ban đầu được đặt trong optimizer.
get_reduce_on_plateau_schedule
transformers.get_reduce_on_plateau_schedule
< source >( optimizer: Optimizer**kwargs )
Tạo lịch trình với tốc độ học không đổi, giảm xuống khi một chỉ số ngừng cải thiện.
get_wsd_schedule
transformers.get_wsd_schedule
< source >( optimizer: Optimizernum_warmup_steps: intnum_decay_steps: intnum_training_steps: int | None = Nonenum_stable_steps: int | None = Nonewarmup_type: str = 'linear'decay_type: str = 'cosine'min_lr_ratio: float = 0num_cycles: float = 0.5last_epoch: int = -1 )
Tham số
- optimizer (
~torch.optim.Optimizer) — Trình tối ưu hóa mà bạn muốn lập lịch cho tốc độ học. - num_warmup_steps (
int) — Số bước cho giai đoạn khởi động. - num_decay_steps (
int) — Số bước cho giai đoạn suy giảm. - num_training_steps (
int, tùy chọn) — Tổng số bước huấn luyện. Đây là tổng của các bước warmup, stable và decay. Nếunum_stable_stepskhông được cung cấp, giai đoạn stable sẽ lànum_training_steps - num_warmup_steps - num_decay_steps. - num_stable_steps (
int, tùy chọn) — Số bước cho giai đoạn ổn định. Vui lòng đảm bảo rằngnum_warmup_steps + num_stable_steps + num_decay_stepsbằngnum_training_steps, nếu không các bước còn lại sẽ mặc định về tốc độ học tối thiểu. - warmup_type (
str, tùy chọn, mặc định là “linear”) — Loại warmup cần sử dụng. Có thể là ‘linear’, ‘cosine’ hoặc ‘1-sqrt’. - decay_type (
str, tùy chọn, mặc định là “cosine”) — Loại suy giảm cần sử dụng. Có thể là ‘linear’, ‘cosine’ hoặc ‘1-sqrt’. - min_lr_ratio (
float, tùy chọn, mặc định là 0) — Tỷ lệ của tốc độ học tối thiểu so với tốc độ học ban đầu. - num_cycles (
float, tùy chọn, mặc định là 0.5) — Số lượng sóng trong lịch cosine (mặc định là chỉ giảm từ giá trị tối đa xuống 0 theo nửa cosine). - last_epoch (
int, tùy chọn, mặc định là -1) — Chỉ số của epoch cuối cùng khi tiếp tục huấn luyện.
Tạo một lịch trình với tốc độ học có ba giai đoạn:
- warmup: tăng từ min_lr_ratio lần tốc độ học ban đầu lên tốc độ học ban đầu theo warmup_type.
- stable: tốc độ học không đổi.
- decay: giảm từ tốc độ học ban đầu xuống còn min_lr_ratio lần tốc độ học ban đầu theo decay_type.