Transformers documentation

Trainer

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Trainer

Lớp Trainer cung cấp API để huấn luyện đầy đủ tính năng trong PyTorch, và hỗ trợ huấn luyện phân tán trên nhiều GPU/TPU, độ chính xác hỗn hợp cho NVIDIA GPUs, AMD GPUs, và torch.amp cho PyTorch. Trainer đi đôi với lớp TrainingArguments, cung cấp nhiều tùy chọn để tùy chỉnh cách huấn luyện mô hình. Cùng nhau, hai lớp này cung cấp API huấn luyện hoàn chỉnh.

Seq2SeqTrainer và Seq2SeqTrainingArguments kế thừa từ các lớp Trainer và TrainingArguments, được điều chỉnh để huấn luyện các mô hình cho các tác vụ sequence-to-sequence như tóm tắt hoặc dịch thuật.

Lớp Trainer được tối ưu hóa cho các mô hình 🤗 Transformers và có thể có những hành vi bất ngờ khi được sử dụng với các mô hình khác. Khi sử dụng nó với mô hình của riêng bạn, hãy đảm bảo:

  • mô hình của bạn luôn trả về các tuple hoặc các lớp con của ModelOutput
  • mô hình của bạn có thể tính toán loss nếu có cung cấp đối số labels và loss đó được trả về như phần tử đầu tiên của tuple (nếu mô hình của bạn trả về tuples)
  • mô hình của bạn có thể nhận nhiều đối số nhãn (dùng label_names trong TrainingArguments để chỉ định tên của chúng cho Trainer) nhưng không đối số nào được đặt tên là "label"

Trainer

lớp transformers.Trainer

< >

( model: typing.Union[transformers.modeling_utils.PreTrainedModel, torch.nn.Module, NoneType] = Noneargs: transformers.training_args.TrainingArguments | None = Nonedata_collator: collections.abc.Callable[[list[typing.Any]], dict[str, typing.Any]] | None = Nonetrain_dataset: Dataset | IterableDataset | datasets.Dataset | None = Noneeval_dataset: Dataset | dict[str, Dataset] | datasets.Dataset | None = Noneprocessing_class: transformers.tokenization_utils_base.PreTrainedTokenizerBase | transformers.image_processing_utils.BaseImageProcessor | transformers.feature_extraction_utils.FeatureExtractionMixin | transformers.processing_utils.ProcessorMixin | None = Nonemodel_init: collections.abc.Callable[..., transformers.modeling_utils.PreTrainedModel] | None = Nonecompute_loss_func: collections.abc.Callable | None = Nonecompute_metrics: collections.abc.Callable[[transformers.trainer_utils.EvalPrediction], dict] | None = Nonecallbacks: list[transformers.trainer_callback.TrainerCallback] | None = Noneoptimizers: tuple = (None, None)optimizer_cls_and_kwargs: tuple[type[torch.optim.Optimizer], dict[str, typing.Any]] | None = Nonepreprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = None )

Tham số

  • model (PreTrainedModel hoặc torch.nn.Module, tùy chọn) — Mô hình cần huấn luyện, đánh giá hoặc sử dụng để dự đoán. Nếu không được cung cấp, một model_init phải được truyền vào.

    Trainer được tối ưu hóa để hoạt động với PreTrainedModel do thư viện cung cấp. Bạn vẫn có thể sử dụng các mô hình tự định nghĩa của mình dưới dạng torch.nn.Module miễn là chúng hoạt động theo cách tương tự như các mô hình của 🤗 Transformers.

  • args (TrainingArguments, tùy chọn) — Các tham số để tinh chỉnh cho quá trình huấn luyện. Nếu không được cung cấp, giá trị mặc định sẽ là một instance cơ bản của TrainingArguments với output_dir được đặt thành một thư mục có tên tmp_trainer trong thư mục hiện tại.
  • data_collator (DataCollator, tùy chọn) — Hàm được sử dụng để tạo một batch từ danh sách các phần tử của train_dataset hoặc eval_dataset. Mặc định sẽ là default_data_collator() nếu không cung cấp processing_class, hoặc một instance của DataCollatorWithPadding nếu processing_class là feature extractor hoặc tokenizer.
  • train_dataset (torch.utils.data.Dataset | torch.utils.data.IterableDataset | datasets.Dataset, tuỳ chọn) — Bộ dữ liệu được sử dụng để huấn luyện. Nếu đó là một Dataset, các cột không được chấp nhận bởi phương thức model.forward() sẽ tự động bị loại bỏ. Lưu ý rằng nếu đó là một torch.utils.data.IterableDataset có một số yếu tố ngẫu nhiên và bạn đang huấn luyện theo cách phân tán, bộ dữ liệu iterable của bạn phải sử dụng một bộ tạo (generator) thuộc tính bên trong là torch.Generator cho sự ngẫu nhiên hóa, và bộ tạo này phải giống nhau trên tất cả các tiến trình (và Trainer sẽ tự động đặt seed của bộ tạo này ở mỗi epoch), hoặc phải có phương thức set_epoch() để đặt seed cho các RNG được sử dụng bên trong. Nếu bộ dữ liệu không triển khai __len__ (ví dụ: một IterableDataset dạng streaming), max_steps phải được đặt, vì tổng số bước huấn luyện không thể suy ra được.

    Lưu ý rằng nếu đó là một torch.utils.data.IterableDataset có một số yếu tố ngẫu nhiên và bạn đang huấn luyện theo cách phân tán, bộ dữ liệu lặp của bạn phải sử dụng một thuộc tính nội bộ generator là một torch.Generator cho việc ngẫu nhiên hóa, và thuộc tính này phải giống nhau trên tất cả các tiến trình (và Trainer sẽ tự động đặt seed của generator này ở mỗi epoch) hoặc phải có một phương thức set_epoch() mà bên trong sẽ đặt seed cho các RNG được sử dụng.

    Nếu tập dữ liệu không triển khai __len__ (ví dụ một IterableDataset dạng streaming), thì max_steps phải được đặt, vì tổng số bước huấn luyện không thể suy ra được.

  • eval_dataset (torch.utils.data.Dataset | dict[str, torch.utils.data.Dataset] | datasets.Dataset, optional) — Bộ dữ liệu được sử dụng để đánh giá. Nếu là Dataset, các cột không được phương thức model.forward() chấp nhận sẽ được tự động loại bỏ. Nếu là một từ điển, quá trình đánh giá sẽ được thực hiện trên từng bộ dữ liệu, với tên chỉ số được bổ sung thêm khóa từ điển ở phía trước.
  • processing_class (PreTrainedTokenizerBase hoặc BaseImageProcessor hoặc FeatureExtractionMixin hoặc ProcessorMixin, tùy chọn) — Lớp xử lý được dùng để xử lý dữ liệu. Nếu được cung cấp, lớp này sẽ được dùng để tự động xử lý các đầu vào cho mô hình, và nó sẽ được lưu cùng với mô hình để dễ dàng chạy lại một phiên huấn luyện bị gián đoạn hoặc tái sử dụng mô hình đã tinh chỉnh.
  • model_init (Callable[[], PreTrainedModel], tuỳ chọn) — Một hàm khởi tạo mô hình sẽ được sử dụng. Nếu được cung cấp, mỗi lần gọi train() sẽ bắt đầu từ một bản thể mới của mô hình do hàm này tạo ra.

    Hàm này có thể không có tham số, hoặc có một tham số duy nhất chứa đối tượng trial của optuna/Ray Tune, để có thể chọn các kiến trúc khác nhau dựa trên các siêu tham số (chẳng hạn như số lượng lớp, kích thước của các lớp bên trong, xác suất dropout, v.v.).

  • compute_loss_func (Callable, tùy chọn) — Một hàm nhận vào đầu ra thô của mô hình, nhãn và số lượng mục trong toàn bộ batch tích lũy (batch_size * gradient_accumulation_steps) và trả về loss. Ví dụ, xem hàm loss mặc định được Trainer sử dụng.
  • compute_metrics (Callable[[EvalPrediction], Dict], tùy chọn) — Hàm sẽ được sử dụng để tính toán các chỉ số đánh giá. Hàm này phải nhận một EvalPrediction và trả về một từ điển ánh xạ từ chuỗi đến giá trị chỉ số. Lưu ý Khi truyền TrainingArgs với batch_eval_metrics được đặt thành True, hàm compute_metrics của bạn phải nhận một tham số boolean compute_result. Tham số này sẽ được kích hoạt sau batch đánh giá cuối cùng để báo hiệu rằng hàm cần tính toán và trả về các thống kê tổng hợp toàn cục thay vì tích lũy các thống kê ở cấp độ batch
  • callbacks (Danh sách TrainerCallback, tùy chọn) — Danh sách các callback để tùy chỉnh vòng lặp huấn luyện. Những callback này sẽ được thêm vào danh sách các callback mặc định được mô tả chi tiết tại đây.

    Nếu bạn muốn xóa một trong các callback mặc định được sử dụng, hãy dùng phương thức Trainer.remove_callback().

  • optimizers (tuple[torch.optim.Optimizer, torch.optim.lr_scheduler.LambdaLR], tùy chọn, mặc định là (None, None)) — Một tuple chứa optimizer và scheduler cần sử dụng. Mặc định sẽ là một instance của AdamW trên model của bạn và một scheduler được tạo bởi get_linear_schedule_with_warmup() được điều khiển bởi args.
  • optimizer_cls_and_kwargs (tuple[Type[torch.optim.Optimizer], dict[str, Any]], tuỳ chọn) — Một tuple chứa lớp optimizer và các đối số từ khóa cần sử dụng. Ghi đè optim và optim_args trong args. Không tương thích với optimizers đối số.

    Khác với optimizers, đối số này giúp tránh việc phải đặt các tham số mô hình lên đúng thiết bị trước khi khởi tạo Trainer.

  • preprocess_logits_for_metrics (Callable[[torch.Tensor, torch.Tensor], torch.Tensor], tuỳ chọn) — Một hàm tiền xử lý logits ngay trước khi lưu chúng vào bộ nhớ đệm ở mỗi bước đánh giá. Hàm này phải nhận hai tensor, gồm logits và nhãn, và trả về logits sau khi đã xử lý theo mong muốn. Các thay đổi do hàm này thực hiện sẽ được phản ánh trong các dự đoán mà compute_metrics.

    Lưu ý rằng nhãn (tham số thứ hai) sẽ là None nếu tập dữ liệu không có chúng.

Trainer là vòng lặp huấn luyện và đánh giá đơn giản nhưng đầy đủ tính năng cho PyTorch, được tối ưu hóa cho 🤗 Transformers.

Các thuộc tính quan trọng:

  • model — Luôn trỏ đến mô hình cốt lõi. Nếu đang sử dụng mô hình transformers, nó sẽ là một lớp con của PreTrainedModel.
  • model_wrapped — Luôn trỏ đến model ngoài cùng trong trường hợp một hoặc nhiều module khác bọc model gốc. Đây là model cần được sử dụng cho bước forward. Ví dụ, dưới DeepSpeed, model bên trong được bọc trong DeepSpeed và sau đó lại được bọc trong torch.nn.DistributedDataParallel. Nếu model bên trong chưa được bọc, thì self.model_wrapped giống hệt self.model.
  • is_model_parallel — Cho biết mô hình đã được chuyển sang chế độ song song hóa mô hình hay chưa (khác với song song hóa dữ liệu, điều này có nghĩa là một số lớp của mô hình được chia ra trên các GPU khác nhau).
  • place_model_on_device — Có hay không tự động đặt mô hình lên thiết bị. Mặc định là True trừ khi model parallel, DeepSpeed, FSDP, full fp16/bf16 eval, hoặc SageMaker MP đang hoạt động. Có thể ghi đè bằng cách kế thừa TrainingArguments và ghi đè thuộc tính place_model_on_device.
  • is_in_train — Cho biết mô hình có đang chạy train hay không (ví dụ: khi evaluate được gọi trong khi đang ở trong train)
  • loss_is_scaled_for_ga — Xác định xem loss được trả về bởi compute_loss đã được scale cho gradient accumulation hay chưa. True: training_step sử dụng giá trị này như là. False: training_step chia nó cho số bước gradient accumulation. None (mặc định): loss được coi là đã scale khi nó được chuẩn hóa bởi num_items_in_batch, tức là khi model chấp nhận loss kwargs hoặc một compute_loss_func được truyền vào. Các lớp con tự tính toán loss của chúng nên đặt giá trị này.

add_callback

< >

( callback: type[transformers.trainer_callback.TrainerCallback] | transformers.trainer_callback.TrainerCallback )

Tham số

  • callback (type hoặc [`~transformers.TrainerCallback`]) — Một class TrainerCallback hoặc một instance của TrainerCallback. Trong trường hợp đầu tiên, sẽ instantiate một member của class đó.

Thêm một callback vào danh sách TrainerCallback hiện tại.

autocast_smart_context_manager

< >

( cache_enabled: bool | None = True )

Một wrapper trợ giúp tạo ra context manager phù hợp cho autocast trong khi cung cấp các đối số mong muốn, tùy thuộc vào tình huống. Chúng tôi dựa vào accelerate cho autocast, do đó không thực hiện gì ở đây.

call_model_init

< >

( trial: optuna.Trial | dict[str, Any] | None = None )

Gọi model_init để lấy một instance model mới, tùy chọn có điều kiện dựa trên một thử nghiệm siêu tham số.

compute_loss

< >

( model: Moduleinputs: dictreturn_outputs: bool = Falsenum_items_in_batch: typing.Union[int, torch.Tensor, NoneType] = None )

Tham số

  • model (nn.Module) — Mô hình để tính toán loss.
  • inputs (dict[str, torch.Tensor | Any]) — Dữ liệu đầu vào cho mô hình.
  • return_outputs (bool, tùy chọn, mặc định là False) — Có nên trả về đầu ra của mô hình cùng với loss hay không.
  • num_items_in_batch (Optional[torch.Tensor], tùy chọn) — Số lượng mục trong batch. Nếu không được truyền vào, loss sẽ được tính toán bằng cách sử dụng logic giảm batch size mặc định.

Cách mà Trainer tính toán loss. Mặc định, tất cả các model trả về loss ở phần tử đầu tiên.

Tạo lớp con và ghi đè để có hành vi tùy chỉnh. Nếu bạn tự tính toán loss, hãy đặt loss_is_scaled_for_ga để cho biết loss đã được scale cho gradient accumulation hay chưa: False nếu đó là trung bình trên mỗi batch (lúc đó Trainer sẽ chia nó cho số bước gradient accumulation), True nếu bạn đã chuẩn hóa nó trên toàn bộ batch đã tích lũy.

compute_loss_context_manager

< >

( )

Một lớp bọc trợ giúp để nhóm các trình quản lý ngữ cảnh lại với nhau.

create_accelerator_and_postprocess

< >

( )

Tạo accelerator và thực hiện các bước thiết lập sau khi tạo (FSDP, DeepSpeed, v.v.).

create_model_card

< >

( language: str | None = Nonelicense: str | None = Nonetags: str | list[str] | None = Nonemodel_name: str | None = Nonefinetuned_from: str | None = Nonetasks: str | list[str] | None = Nonedataset_tags: str | list[str] | None = Nonedataset: str | list[str] | None = Nonedataset_args: str | list[str] | None = None )

Tham số

  • language (str, tùy chọn) — Ngôn ngữ của mô hình (nếu có)
  • license (str, tùy chọn) — Giấy phép của mô hình. Mặc định sẽ dùng giấy phép của mô hình được huấn luyện trước đó, nếu mô hình gốc được truyền vào Trainer có nguồn gốc từ một kho trên Hub.
  • tags (str hoặc list[str], tùy chọn) — Một số thẻ cần được bao gồm trong metadata của model card.
  • model_name (str, tùy chọn) — Tên của mô hình.
  • finetuned_from (str, tùy chọn) — Tên của mô hình được dùng để tinh chỉnh mô hình này (nếu có). Mặc định sẽ là tên của kho chứa mô hình gốc được truyền vào Trainer (nếu nó đến từ Hub).
  • tasks (str hoặc list[str], tùy chọn) — Một hoặc nhiều định danh tác vụ, sẽ được bao gồm trong metadata của model card.
  • dataset_tags (str hoặc list[str], tùy chọn) — Một hoặc nhiều thẻ dữ liệu, sẽ được bao gồm trong metadata của model card.
  • dataset (str hoặc list[str], tùy chọn) — Một hoặc nhiều định danh bộ dữ liệu, sẽ được bao gồm trong metadata của thẻ mô hình.
  • dataset_args (str hoặc list[str], tùy chọn) — Một hoặc nhiều đối số tập dữ liệu, sẽ được bao gồm trong metadata của model card.

Tạo bản nháp của thẻ mô hình (model card) bằng cách sử dụng thông tin có sẵn của Trainer.

create_optimizer

< >

( model = None ) → torch.optim.Optimizer

Trả về

torch.optim.Optimizer

Thư mục cài đặt của trình tối ưu.

Cấu hình bộ tối ưu.

Chúng tôi cung cấp một giá trị mặc định hợp lý và hoạt động tốt. Nếu bạn muốn sử dụng thứ khác, bạn có thể truyền một tuple vào init của Trainer thông qua optimizers, hoặc tạo một lớp con và ghi đè phương thức này trong lớp con đó.

create_optimizer_and_scheduler

< >

( num_training_steps: int )

Cài đặt bộ tối ưu hóa và trình lập lịch tốc độ học.

Chúng tôi cung cấp một giá trị mặc định hợp lý và hoạt động tốt. Nếu bạn muốn sử dụng thứ khác, bạn có thể truyền một tuple vào init của Trainer thông qua optimizers, hoặc tạo một lớp con và ghi đè phương thức này (hoặc create_optimizer và/hoặc create_scheduler) trong lớp con đó.

create_scheduler

< >

( num_training_steps: intoptimizer: typing.Optional[torch.optim.Optimizer] = None ) → torch.optim.lr_scheduler.LRScheduler

Tham số

  • num_training_steps (int) — Số bước huấn luyện cần thực hiện.

Trả về

torch.optim.lr_scheduler.LRScheduler

Thư viện lập lịch tốc độ học.

Cấu hình trình lập lịch. Trình tối ưu của trainer phải được thiết lập trước khi phương thức này được gọi hoặc được truyền dưới dạng một đối số.

kết thúc

< >

( )

Hoàn tất các bộ theo dõi và hủy nhóm tiến trình phân tán.

Gọi lệnh này một lần, ở cuối cùng của script, sau tất cả những gì cần đến các tiến trình khác: train(), evaluate(), predict(), save_model() và push_to_hub() đều giao tiếp giữa các tiến trình và sẽ thất bại khi nhóm đã bị xóa.

Ví dụ:

trainer.train()
trainer.evaluate()
trainer.push_to_hub()
trainer.end()

evaluate

< >

( eval_dataset: typing.Union[torch.utils.data.Dataset, dict[str, torch.utils.data.Dataset], NoneType] = Noneignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'eval' )

Tham số

  • eval_dataset (Dataset | dict[str, Dataset], tuỳ chọn) — Truyền một dataset nếu bạn muốn ghi đè lên self.eval_dataset. Nếu đó là một Dataset, các cột không được chấp nhận bởi model.forward() phương thức sẽ tự động bị loại bỏ. Nếu đó là một từ điển, nó sẽ đánh giá trên từng dataset, thêm tiền tố là khóa từ điển vào tên chỉ số.

    Nếu bạn truyền một từ điển có tên các bộ dữ liệu làm khóa và các bộ dữ liệu làm giá trị, evaluate sẽ chạy các đánh giá riêng biệt trên từng bộ dữ liệu. Điều này có thể hữu ích để theo dõi cách huấn luyện ảnh hưởng đến các bộ dữ liệu khác hoặc đơn giản là để có được đánh giá chi tiết hơn. Khi sử dụng với load_best_model_at_end, hãy đảm bảo metric_for_best_model tham chiếu đến đúng một trong các bộ dữ liệu. Ví dụ, nếu bạn truyền {"data1": data1, "data2": data2} cho hai bộ dữ liệu data1 và data2, bạn có thể chỉ định metric_for_best_model="eval_data1_loss" để sử dụng loss trên data1 và metric_for_best_model="eval_data2_loss" cho loss trên data2.

  • ignore_keys (list[str], tùy chọn) — 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.
  • metric_key_prefix (str, tùy chọn, mặc định là "eval") — Một tiền tố tùy chọn được sử dụng làm tiền tố cho khóa của các chỉ số. Ví dụ, chỉ số “bleu” sẽ được đặt tên là “eval_bleu” nếu tiền tố là “eval” (mặc định)

Chạy đánh giá và trả về các chỉ số.

Script gọi sẽ có trách nhiệm cung cấp một phương thức để tính toán các chỉ số, vì chúng phụ thuộc vào tác vụ (truyền vào tham số compute_metrics của init).

Bạn cũng có thể tạo lớp con và ghi đè phương thức này để chèn hành vi tùy chỉnh.

evaluation_loop

< >

( dataloader: DataLoaderdescription: strprediction_loss_only: bool | None = Noneignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'eval' )

Vòng lặp dự đoán/đánh giá, được dùng chung bởi Trainer.evaluate() và Trainer.predict().

Hoạt động cả khi có nhãn lẫn khi không có nhãn.

floating_point_ops

< >

( inputs: dict ) → int

Tham số

  • inputs (dict[str, torch.Tensor | Any]) — Các đầu vào và mục tiêu của mô hình.

Trả về

int

Số lượng phép toán số dấu phẩy động.

Đối với các mô hình kế thừa từ PreTrainedModel, hãy sử dụng phương thức đó để tính toán số lượng phép toán số dấu phẩy động cho mỗi lượt truyền ngược + truyền xuôi. Nếu sử dụng một mô hình khác, hãy triển khai một phương thức như vậy trong mô hình hoặc kế thừa lớp con và ghi đè phương thức này.

get_batch_samples

< >

( epoch_iterator: Iteratornum_batches: intdevice: device )

Thu thập một số lượng batch được chỉ định từ bộ lặp epoch và tùy chọn đếm số lượng phần tử trong các batch để điều chỉnh loss một cách chính xác.

get_cp_size

< >

( )

Lấy kích thước song song ngữ cảnh

get_decay_parameter_names

< >

( model: Module )

Lấy tất cả tên tham số mà weight decay sẽ được áp dụng.

Hàm này lọc các tham số theo hai cách:

  1. Theo loại lớp (các thể hiện của các lớp được chỉ định trong ALL_LAYERNORM_LAYERS)
  2. Theo mẫu tên tham số (chứa ‘bias’, hoặc biến thể của ‘norm’)

get_eval_dataloader

< >

( eval_dataset: typing.Union[str, torch.utils.data.Dataset, NoneType] = None )

Tham số

  • eval_dataset (str hoặc torch.utils.data.Dataset, tùy chọn) — Nếu là str, sẽ sử dụng self.eval_dataset[eval_dataset] làm tập dữ liệu đánh giá. Nếu là Dataset, sẽ ghi đè lên self.eval_dataset. Nếu là Dataset, các cột không được phương thức model.forward() chấp nhận sẽ tự động bị loại bỏ.

Trả về ~torch.utils.data.DataLoader đánh giá.

Hãy tạo lớp con và ghi đè phương thức này nếu bạn muốn chèn một số hành vi tùy chỉnh.

get_learning_rates

< >

( )

Trả về tốc độ học của từng tham số từ self.optimizer.

get_num_trainable_parameters

< >

( )

Lấy số lượng tham số có thể huấn luyện.

get_optimizer_cls_and_kwargs

< >

( args: TrainingArgumentsmodel: transformers.modeling_utils.PreTrainedModel | None = None )

Tham số

  • args (transformers.training_args.TrainingArguments) — Các đối số huấn luyện cho phiên huấn luyện.
  • model (PreTrainedModel, optional) — Mô hình đang được huấn luyện. Bắt buộc đối với một số optimizer (GaLore, Apollo, LOMO).

Trả về lớp optimizer và các tham số optimizer dựa trên các đối số huấn luyện.

get_optimizer_group

< >

( param: typing.Union[str, torch.nn.parameter.Parameter, NoneType] = None )

Tham số

  • param (str hoặc torch.nn.parameter.Parameter, optional) — Tham số mà nhóm optimizer cần được trả về.

Trả về nhóm optimizer cho một tham số nếu được cung cấp, nếu không thì trả về tất cả các nhóm optimizer cho các tham số.

get_sp_size

< >

( )

Lấy kích thước song song chuỗi

get_test_dataloader

< >

( test_dataset: Dataset )

Tham số

  • test_dataset (torch.utils.data.Dataset, tùy chọn) — Bộ dữ liệu kiểm tra cần sử dụng. Nếu đây là một Dataset, các cột không được phương thức model.forward() chấp nhận sẽ tự động bị loại bỏ.

Trả về ~torch.utils.data.DataLoader kiểm thử.

Hãy tạo lớp con và ghi đè phương thức này nếu bạn muốn chèn một số hành vi tùy chỉnh.

get_total_train_batch_size

< >

( args: TrainingArguments )

Tính toán kích thước lô tổng (micro_batch grad_accum dp_world_size).

Đảm bảo tính tương thích với tất cả các chiều song song: TP, CP và SP.

Công thức: dp_world_size = world_size // (tp_size cp_size sp_size)

Trong đó:

  • TP (Tensor Parallelism): Các lớp mô hình được chia nhỏ trên các GPU
  • CP (Context Parallelism): Các chuỗi được chia bằng Ring Attention (FSDP2)
  • SP (Song song chuỗi): Các chuỗi được chia bằng ALST/Ulysses (DeepSpeed)

Tất cả các chiều đều tách biệt và nhân với nhau: world_size = dp_size tp_size cp_size * sp_size

get_tp_size

< >

( )

Lấy kích thước song song tensor từ cấu hình mô hình hoặc cấu hình DeepSpeed.

get_train_dataloader

< >

( )

Trả về ~torch.utils.data.DataLoader cho quá trình huấn luyện.

Sẽ không dùng bộ lấy mẫu nào nếu train_dataset không triển khai __len__, ngược lại sẽ dùng bộ lấy mẫu ngẫu nhiên (được điều chỉnh cho huấn luyện phân tán nếu cần).

Hãy tạo lớp con và ghi đè phương thức này nếu bạn muốn chèn một số hành vi tùy chỉnh.

tìm kiếm siêu tham số

< >

( hp_space: collections.abc.Callable[['optuna.Trial'], dict[str, float]] | None = Nonecompute_objective: collections.abc.Callable[[dict[str, float]], float] | None = Nonen_trials: int = 20direction: str | list[str] = 'minimize'backend: str | transformers.trainer_utils.HPSearchBackend | None = Nonehp_name: collections.abc.Callable[['optuna.Trial'], str] | None = None**kwargs ) → [trainer_utils.BestRun or list[trainer_utils.BestRun]]

Tham số

  • hp_space (Callable[["optuna.Trial"], dict[str, float]], tùy chọn) — Một hàm xác định không gian tìm kiếm siêu tham số. Mặc định sẽ là default_hp_space_optuna() hoặc default_hp_space_ray() tùy thuộc vào backend của bạn.
  • compute_objective (Callable[[dict[str, float]], float], tùy chọn) — Hàm tính toán mục tiêu cần tối thiểu hóa hoặc tối đa hóa từ các chỉ số được trả về bởi phương thức evaluate. Mặc định sẽ là default_compute_objective().
  • n_trials (int, tùy chọn, mặc định là 100) — Số lần chạy thử nghiệm để kiểm tra.
  • direction (str hoặc list[str], tùy chọn, mặc định là "minimize") — Nếu là tối ưu hóa đơn mục tiêu, direction là str, có thể là "minimize" hoặc "maximize", bạn nên chọn "minimize" khi tối ưu hóa validation loss, "maximize" khi tối ưu hóa một hoặc vài metrics. Nếu là tối ưu hóa đa mục tiêu, direction là list[str], có thể là List của "minimize" và "maximize", bạn nên chọn "minimize" khi tối ưu hóa validation loss, "maximize" khi tối ưu hóa một hoặc vài metrics.
  • backend (str hoặc ~training_utils.HPSearchBackend, không bắt buộc) — Backend được sử dụng cho việc tìm kiếm siêu tham số. Mặc định sẽ là optuna hoặc Ray Tune, tùy thuộc vào thư viện nào được cài đặt. Nếu tất cả đều được cài đặt, mặc định sẽ là optuna.
  • hp_name (Callable[["optuna.Trial"], str]], tuỳ chọn) — Một hàm định nghĩa tên của trial/run. Mặc định là None.
  • kwargs (dict[str, Any], tuỳ chọn) — Các tham số từ khóa bổ sung cho mỗi backend:
    • optuna: các tham số từ optuna.study.create_study cũng như các tham số timeout, n_jobs và gc_after_trial từ optuna.study.Study.optimize
    • ray: các tham số từ tune.run. Nếu resources_per_trial không được đặt trong kwargs, giá trị mặc định là 1 lõi CPU và 1 GPU (nếu có sẵn). Nếu progress_reporter không được đặt trong kwargs, ray.tune.CLIReporter sẽ được sử dụng.

Trả về

[trainer_utils.BestRun hoặc list[trainer_utils.BestRun]]

Tất cả thông tin về lần chạy tốt nhất hoặc các lần chạy tốt nhất cho tối ưu hóa đa mục tiêu. Tóm tắt thí nghiệm có thể được tìm thấy trong thuộc tính run_summary cho backend Ray.

Khởi chạy tìm kiếm siêu tham số bằng optuna hoặc Ray Tune. Đại lượng được tối ưu được xác định bởi compute_objective, mặc định là một hàm trả về loss đánh giá khi không có metric nào được cung cấp, hoặc tổng của tất cả các metric nếu có.

Để sử dụng phương pháp này, bạn cần đã cung cấp model_init khi khởi tạo Trainer của mình: chúng ta cần khởi tạo lại mô hình ở mỗi lần chạy mới. Điều này không tương thích với tham số optimizers, vì vậy bạn cần tạo lớp con của Trainer và ghi đè phương thức create_optimizer_and_scheduler() cho optimizer/scheduler tùy chỉnh.

init_hf_repo

< >

( token: str | None = Noneprivate: bool | None = None )

Tham số

  • token (str, tùy chọn) — Token có quyền ghi. Mặc định là self.args.hub_token.
  • 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à self.args.hub_private_repo. Không có hiệu lực nếu kho đã tồn tại.

Khởi tạo một kho git trong self.args.hub_model_id.

is_local_process_zero

< >

( )

Dù quy trình này có phải là tiến trình chính cục bộ (ví dụ: trên một máy nếu huấn luyện theo cách phân tán trên nhiều máy) hay không.

is_world_process_zero

< >

( )

Dù quy trình này có phải là quy trình chính toàn cục hay không (khi huấn luyện theo cách phân tán trên nhiều máy, điều này chỉ True với một quy trình).

log

< >

( logs: dictstart_time: float | None = None )

Tham số

  • logs (dict[str, float]) — Các giá trị cần ghi log.
  • start_time (Optional[float]) — Thời điểm bắt đầu huấn luyện.

Ghi logs trên các đối tượng khác nhau đang theo dõi quá trình huấn luyện.

Kế thừa và ghi đè phương thức này để chèn hành vi tùy chỉnh.

log_metrics

< >

( splitmetrics )

Tham số

  • split (str) — Tên chế độ/phân chia: một trong train, eval, test
  • metrics (dict[str, float]) — Các chỉ số được trả về từ train/evaluate/predictmetrics: dict các chỉ số

Ghi lại các chỉ số theo một định dạng đặc biệt.

Trong môi trường phân tán, điều này chỉ được thực hiện cho tiến trình có rank 0.

Ghi chú về báo cáo bộ nhớ:

Để có báo cáo về mức sử dụng bộ nhớ, bạn cần cài đặt psutil. Bạn có thể thực hiện điều đó bằng pip install psutil.

Bây giờ khi phương thức này được thực thi, bạn sẽ thấy một báo cáo bao gồm:

init_mem_cpu_alloc_delta   =     1301MB
init_mem_cpu_peaked_delta  =      154MB
init_mem_gpu_alloc_delta   =      230MB
init_mem_gpu_peaked_delta  =        0MB
train_mem_cpu_alloc_delta  =     1345MB
train_mem_cpu_peaked_delta =        0MB
train_mem_gpu_alloc_delta  =      693MB
train_mem_gpu_peaked_delta =        7MB

Hiểu về các báo cáo:

  • đoạn đầu tiên, ví dụ train__, cho bạn biết các chỉ số này thuộc giai đoạn nào. Các báo cáo bắt đầu bằng init_ sẽ được thêm vào giai đoạn đầu tiên được thực thi. Do đó, nếu chỉ chạy đánh giá, mức sử dụng bộ nhớ của __init__ sẽ được báo cáo cùng với các chỉ số eval_.
  • đoạn thứ ba, là cpu hoặc gpu, cho biết đó là bộ nhớ RAM chung hay bộ nhớ gpu0.
  • *_alloc_delta - là sự chênh lệch của bộ đếm bộ nhớ đã dùng/đã cấp phát giữa thời điểm kết thúc và bắt đầu của giai đoạn - giá trị này có thể âm nếu một hàm đã giải phóng nhiều bộ nhớ hơn so với lượng đã cấp phát.
  • *_peaked_delta - là bộ nhớ bổ sung đã được sử dụng và sau đó được giải phóng - so với bộ nhớ đã cấp phát hiện tại - giá trị này không bao giờ âm. Khi xem xét các chỉ số của bất kỳ giai đoạn nào, bạn cộng alloc_delta + peaked_delta để biết lượng bộ nhớ cần thiết để hoàn thành giai đoạn đó.

Việc báo cáo chỉ được thực hiện cho tiến trình có rank 0 và gpu 0 (nếu có gpu). Thông thường điều này là đủ vì tiến trình chính thực hiện phần lớn công việc, nhưng điều này có thể không hoàn toàn đúng nếu sử dụng model parallel, khi đó các GPU khác có thể sử dụng một lượng bộ nhớ gpu khác nhau. Điều này cũng không giống nhau dưới DataParallel, nơi gpu0 có thể yêu cầu nhiều bộ nhớ hơn đáng kể so với phần còn lại vì nó lưu trữ gradient và trạng thái optimizer cho tất cả các GPU tham gia. Có lẽ trong tương lai, các báo cáo này sẽ phát triển để đo lường cả những điều đó.

Chỉ số RAM CPU đo RSS (Resident Set Size) bao gồm cả bộ nhớ duy nhất của tiến trình và bộ nhớ được chia sẻ với các tiến trình khác. Cần lưu ý rằng chỉ số này không bao gồm bộ nhớ đã bị hoán đổi (swapped out), do đó các báo cáo có thể không chính xác.

Bộ nhớ đỉnh của CPU được đo bằng một luồng lấy mẫu. Do GIL của python, một số đỉnh bộ nhớ có thể bị bỏ sót nếu luồng đó không có cơ hội chạy khi bộ nhớ được sử dụng ở mức cao nhất. Do đó, báo cáo này có thể thấp hơn thực tế. Việc sử dụng tracemalloc sẽ báo cáo chính xác bộ nhớ đỉnh, nhưng nó không báo cáo các cấp phát bộ nhớ nằm ngoài python. Vì vậy, nếu một phần mở rộng C++ CUDA tự cấp phát bộ nhớ của riêng nó, điều đó sẽ không được báo cáo. Và do đó, phương pháp này đã bị loại bỏ để ưu tiên cho cách tiếp cận lấy mẫu bộ nhớ, vốn đọc mức sử dụng bộ nhớ hiện tại của tiến trình.

Việc báo cáo bộ nhớ đã cấp phát và bộ nhớ đỉnh trên GPU được thực hiện bằng torch.cuda.memory_allocated() và torch.cuda.max_memory_allocated(). Chỉ số này chỉ báo cáo các “độ tăng” cho các lần cấp phát bộ nhớ đặc thù của PyTorch, vì hệ thống quản lý bộ nhớ torch.cuda không theo dõi bất kỳ bộ nhớ nào được cấp phát bên ngoài PyTorch. Ví dụ, lệnh gọi cuda đầu tiên thường sẽ nạp các CUDA kernel, có thể chiếm từ 0,5 đến 2GB bộ nhớ GPU.

Lưu ý rằng trình theo dõi này không tính đến các cấp phát bộ nhớ nằm ngoài các lệnh gọi __init__, train, evaluate và predict của Trainer.

Vì các cuộc gọi evaluation có thể xảy ra trong quá trình train, chúng ta không thể xử lý các cuộc gọi lồng nhau vì torch.cuda.max_memory_allocated là một bộ đếm duy nhất, nên nếu nó bị đặt lại bởi một cuộc gọi eval lồng nhau, bộ theo dõi của train sẽ báo cáo thông tin không chính xác. Nếu vấn đề pytorch này được giải quyết, sẽ có thể thay đổi lớp này để có thể tái nhập (re-entrant). Cho đến khi đó, chúng ta chỉ theo dõi mức ngoài cùng của các phương thức train, evaluate và predict. Điều này có nghĩa là nếu eval được gọi trong khi train đang chạy, thì train sẽ chịu trách nhiệm tính toán mức sử dụng bộ nhớ của chính nó và của eval.

Điều này cũng có nghĩa là nếu bất kỳ công cụ nào khác được sử dụng cùng với Trainer gọi torch.cuda.reset_peak_memory_stats, các thống kê bộ nhớ GPU đỉnh có thể không chính xác. Và Trainer sẽ làm gián đoạn hành vi bình thường của bất kỳ công cụ nào như vậy dựa vào việc tự gọi torch.cuda.reset_peak_memory_stats.

Để đạt hiệu suất tốt nhất, bạn có thể cân nhắc tắt hồ sơ bộ nhớ cho các lần chạy trong môi trường sản xuất.

metrics_format

< >

( metrics: dict ) → metrics (dict[str, float])

Tham số

  • metrics (dict[str, float]) — Các chỉ số được trả về từ train/evaluate/predict

Trả về

metrics (dict[str, float])

Các chỉ số đã được định dạng lại

Định dạng lại các giá trị chỉ số của Trainer thành định dạng dễ đọc cho con người.

số_ví_dụ

< >

( dataloader: DataLoader )

Trợ lý để lấy số lượng mẫu trong một ~torch.utils.data.DataLoader bằng cách truy cập vào dataset của nó. Khi dataloader.dataset không tồn tại hoặc không có độ dài, hàm sẽ ước lượng tốt nhất có thể

pop_callback

< >

( callback: type[transformers.trainer_callback.TrainerCallback] | transformers.trainer_callback.TrainerCallback ) → TrainerCallback

Tham số

  • callback (type hoặc [`~transformers.TrainerCallback`]) — Một class TrainerCallback hoặc một instance của TrainerCallback. Trong trường hợp đầu tiên, sẽ lấy thành viên đầu tiên của class đó được tìm thấy trong danh sách các callback.

Trả về

TrainerCallback

Callback đã được xóa, nếu tìm thấy.

Xóa một callback khỏi danh sách TrainerCallback hiện tại và trả về nó.

Nếu không tìm thấy callback, hàm trả về None (và không có lỗi nào được ném ra).

predict

< >

( test_dataset: Datasetignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'test' )

Tham số

  • test_dataset (Dataset) — Dataset để chạy các dự đoán. Nếu đây là một datasets.Dataset, các cột không được chấp nhận bởi phương thức model.forward() sẽ tự động bị loại bỏ.
  • ignore_keys (list[str], tùy chọn) — 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.
  • metric_key_prefix (str, tùy chọn, mặc định là "test") — Một tiền tố tùy chọn được sử dụng làm tiền tố cho khóa của các chỉ số. Ví dụ, chỉ số “bleu” sẽ được đặt tên là “test_bleu” nếu tiền tố là “test” (mặc định)

Chạy dự đoán và trả về các dự đoán cùng các chỉ số tiềm năng.

Tùy thuộc vào bộ dữ liệu và trường hợp sử dụng của bạn, bộ dữ liệu kiểm tra có thể chứa nhãn. Trong trường hợp đó, phương thức này cũng sẽ trả về các chỉ số, giống như trong evaluate().

Nếu dự đoán hoặc nhãn của bạn có độ dài chuỗi khác nhau (ví dụ vì bạn đang thực hiện đệm động trong một tác vụ phân loại token), các dự đoán sẽ được đệm (về phía bên phải) để cho phép ghép nối thành một mảng duy nhất. Chỉ số đệm là -100.

Trả về: NamedTuple Một namedtuple với các khóa sau:

  • predictions (np.ndarray): Các dự đoán trên test_dataset.
  • label_ids (np.ndarray, tùy chọn): Các nhãn (nếu tập dữ liệu có chứa nhãn).
  • metrics (dict[str, float], tùy chọn): Từ điển các chỉ số tiềm năng (nếu tập dữ liệu chứa nhãn).

prediction_step

< >

( model: Moduleinputs: dictprediction_loss_only: boolignore_keys: list[str] | None = None ) → tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]

Tham số

  • model (nn.Module) — Mô hình cần đánh giá.
  • inputs (dict[str, torch.Tensor | Any]) — Các đầu vào và mục tiêu của mô hình.

    Từ điển sẽ được giải nén trước khi được đưa vào mô hình. Hầu hết các mô hình kỳ vọng các mục tiêu nằm dưới tham số labels. Hãy kiểm tra tài liệu của mô hình để biết tất cả các tham số được chấp nhận.

  • prediction_loss_only (bool) — Có nên chỉ trả về loss hay không.
  • ignore_keys (list[str], tùy chọn) — 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.

Trả về

tuple[Optional[torch.Tensor], Optional[torch.Tensor], Optional[torch.Tensor]]

Một tuple chứa loss, logits và labels (mỗi thành phần đều là tùy chọn).

Thực hiện bước đánh giá trên model bằng cách sử dụng inputs.

Tạo lớp con và ghi đè để chèn hành vi tùy 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 create_model_card().

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

remove_callback

< >

( callback: type[transformers.trainer_callback.TrainerCallback] | transformers.trainer_callback.TrainerCallback )

Tham số

  • callback (type hoặc [`~transformers.TrainerCallback`]) — Một class TrainerCallback hoặc một instance của TrainerCallback. Trong trường hợp đầu tiên, sẽ xóa thành viên đầu tiên của class đó được tìm thấy trong danh sách các callback.

Xóa một callback khỏi danh sách TrainerCallback hiện tại.

save_metrics

< >

( splitmetricscombined = True )

Tham số

  • split (str) — Tên chế độ/phân chia: một trong train, eval, test, all
  • metrics (dict[str, float]) — Các chỉ số được trả về từ train/evaluate/predict
  • combined (bool, tùy chọn, mặc định là True) — Tạo các chỉ số kết hợp bằng cách cập nhật all_results.json với các chỉ số của lần gọi này

Lưu các chỉ số vào một tệp json cho phần chia đó, ví dụ train_results.json.

Trong môi trường phân tán, điều này chỉ được thực hiện cho tiến trình có rank 0.

Để hiểu các chỉ số, vui lòng đọc docstring của log_metrics(). Điểm khác biệt duy nhất là các con số thô chưa được định dạng được lưu trong phương thức hiện tại.

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.

save_state

< >

( )

Lưu trạng thái của Trainer, vì Trainer.save_model chỉ lưu tokenizer cùng với model.

Trong môi trường phân tán, điều này chỉ được thực hiện cho tiến trình có rank 0.

set_initial_training_values

< >

( args: TrainingArgumentsdataloader: DataLoader )

Tính toán và trả về các giá trị sau:

  • num_train_epochs
  • num_update_steps_per_epoch
  • num_examples
  • num_train_samples
  • total_train_batch_size
  • steps_in_epoch (tổng số lô mỗi epoch)
  • max_steps

store_flos

< >

( )

Lưu trữ số lượng phép toán số dấu phẩy động đã được thực hiện trong mô hình.

train

< >

( resume_from_checkpoint: str | bool | None = Nonetrial: optuna.Trial | dict[str, Any] | None = Noneignore_keys_for_eval: list[str] | None = None ) → 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 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 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ề

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.

training_step

< >

( model: Moduleinputs: dictnum_items_in_batch: typing.Union[int, torch.Tensor, NoneType] = None ) → torch.Tensor

Tham số

  • model (nn.Module) — Mô hình cần huấn luyện.
  • inputs (dict[str, torch.Tensor | Any]) — Các đầu vào và mục tiêu của mô hình.

    Từ điển sẽ được giải nén trước khi được đưa vào mô hình. Hầu hết các mô hình kỳ vọng các mục tiêu nằm dưới tham số labels. Hãy kiểm tra tài liệu của mô hình để biết tất cả các tham số được chấp nhận.

Trả về

torch.Tensor

Tensor chứa tổn thất huấn luyện trên lô này.

Thực hiện một bước huấn luyện trên một lô dữ liệu đầu vào.

Tạo lớp con và ghi đè để chèn hành vi tùy chỉnh.

Seq2SeqTrainer

lớp transformers.Seq2SeqTrainer

< >

( model: typing.Union[ForwardRef('PreTrainedModel'), torch.nn.Module, NoneType] = Noneargs: typing.Optional[ForwardRef('TrainingArguments')] = Nonedata_collator: typing.Optional[ForwardRef('DataCollator')] = Nonetrain_dataset: typing.Union[torch.utils.data.Dataset, ForwardRef('IterableDataset'), ForwardRef('datasets.Dataset'), NoneType] = Noneeval_dataset: typing.Union[torch.utils.data.Dataset, dict[str, torch.utils.data.Dataset], NoneType] = Noneprocessing_class: typing.Union[ForwardRef('PreTrainedTokenizerBase'), ForwardRef('BaseImageProcessor'), ForwardRef('FeatureExtractionMixin'), ForwardRef('ProcessorMixin'), NoneType] = Nonemodel_init: collections.abc.Callable[[], 'PreTrainedModel'] | None = Nonecompute_loss_func: collections.abc.Callable | None = Nonecompute_metrics: collections.abc.Callable[['EvalPrediction'], dict] | None = Nonecallbacks: list['TrainerCallback'] | None = Noneoptimizers: tuple = (None, None)preprocess_logits_for_metrics: collections.abc.Callable[[torch.Tensor, torch.Tensor], torch.Tensor] | None = None )

evaluate

< >

( eval_dataset: typing.Optional[torch.utils.data.Dataset] = Noneignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'eval'**gen_kwargs )

Tham số

  • eval_dataset (Dataset, tùy chọn) — Truyền một dataset nếu bạn muốn ghi đè lên self.eval_dataset. Nếu nó là một Dataset, các cột không được chấp nhận bởi phương thức model.forward() sẽ tự động bị loại bỏ. Nó phải triển khai phương thức __len__.
  • ignore_keys (list[str], tùy chọn) — 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.
  • metric_key_prefix (str, tùy chọn, mặc định là "eval") — Một tiền tố tùy chọn được sử dụng làm tiền tố cho khóa của các chỉ số. Ví dụ, chỉ số “bleu” sẽ được đặt tên là “eval_bleu” nếu tiền tố là "eval" (mặc định)
  • max_length (int, tùy chọn) — Chiều dài đích tối đa được sử dụng khi dự đoán bằng phương thức generate.
  • num_beams (int, tùy chọn) — Số lượng beam cho beam search sẽ được sử dụng khi dự đoán bằng phương thức generate. 1 có nghĩa là không dùng beam search.
  • gen_kwargs — Các kwargs cụ thể bổ sung cho generate.

Chạy đánh giá và trả về các chỉ số.

Script gọi sẽ có trách nhiệm cung cấp một phương thức để tính toán các chỉ số, vì chúng phụ thuộc vào tác vụ (truyền vào tham số compute_metrics của init).

Bạn cũng có thể tạo lớp con và ghi đè phương thức này để chèn hành vi tùy chỉnh.

predict

< >

( test_dataset: Datasetignore_keys: list[str] | None = Nonemetric_key_prefix: str = 'test'**gen_kwargs )

Tham số

  • test_dataset (Dataset) — Dataset để chạy các dự đoán. Nếu là Dataset, các cột không được chấp nhận bởi phương thức model.forward() sẽ tự động bị loại bỏ. Phải triển khai phương thức __len__
  • ignore_keys (list[str], tùy chọn) — 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.
  • metric_key_prefix (str, tùy chọn, mặc định là "eval") — Một tiền tố tùy chọn được sử dụng làm tiền tố cho khóa của các chỉ số. Ví dụ, chỉ số “bleu” sẽ được đặt tên là “eval_bleu” nếu tiền tố là "eval" (mặc định)
  • max_length (int, tùy chọn) — Chiều dài đích tối đa được sử dụng khi dự đoán bằng phương thức generate.
  • num_beams (int, tùy chọn) — Số lượng beam cho beam search sẽ được sử dụng khi dự đoán bằng phương thức generate. 1 có nghĩa là không dùng beam search.
  • gen_kwargs — Các kwargs cụ thể bổ sung cho generate.

Chạy dự đoán và trả về các dự đoán cùng các chỉ số tiềm năng.

Tùy thuộc vào bộ dữ liệu và trường hợp sử dụng của bạn, bộ dữ liệu kiểm tra có thể chứa nhãn. Trong trường hợp đó, phương thức này cũng sẽ trả về các chỉ số, giống như trong evaluate().

Nếu các dự đoán hoặc nhãn của bạn có độ dài chuỗi khác nhau (ví dụ vì bạn đang thực hiện đệm động trong một tác vụ phân loại token), các dự đoán sẽ được đệm (ở phía bên phải) để cho phép ghép nối thành một mảng duy nhất. Chỉ số đệm là -100.

Trả về: NamedTuple Một namedtuple với các khóa sau:

  • predictions (np.ndarray): Các dự đoán trên test_dataset.
  • label_ids (np.ndarray, tùy chọn): Các nhãn (nếu tập dữ liệu có chứa nhãn).
  • metrics (dict[str, float], tùy chọn): Từ điển các chỉ số tiềm năng (nếu tập dữ liệu chứa nhãn).

TrainingArguments

lớp transformers.TrainingArguments

< >

( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-05lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool = Falsefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Noneactivation_checkpointing: bool | None = Noneactivation_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonegradient_checkpointing: bool | None = Nonegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 500logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: typing.Any | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool = Truelabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'random'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1 )

Tham số

  • output_dir (str, tùy chọn, mặc định là "trainer_output") — Thư mục đầu ra, nơi các dự đoán của mô hình và các checkpoint sẽ được ghi.

Thời gian huấn luyện và kích thước lô

  • per_device_train_batch_size (int, tùy chọn, mặc định là 8) — Kích thước lô trên mỗi thiết bị. Kích thước lô toàn cục được tính là: per_device_train_batch_size * number_of_devices trong các cấu hình đa GPU hoặc phân tán.
  • num_train_epochs(float, tuỳ chọn, mặc định là 3.0) — Tổng số epoch huấn luyện cần thực hiện (nếu không phải số nguyên, sẽ thực hiện phần thập phân theo phần trăm của epoch cuối trước khi dừng huấn luyện).
  • max_steps (int, tùy chọn, mặc định là -1) — Ghi đè num_train_epochs. Nếu được đặt thành một số dương, đây là tổng số bước huấn luyện cần thực hiện. Đối với một tập dữ liệu hữu hạn, quá trình huấn luyện sẽ lặp lại qua tập dữ liệu (nếu toàn bộ dữ liệu đã được dùng hết) cho đến khi đạt max_steps. Tham số này phải được đặt thành một giá trị dương khi tập dữ liệu huấn luyện không triển khai __len__ (ví dụ: một tập dữ liệu streaming), vì khi đó tổng số bước không thể suy ra được và là bắt buộc để giới hạn vòng lặp huấn luyện và cấu hình trình lập lịch tốc độ học.

Tốc độ học & Bộ lập lịch

  • learning_rate (float, tùy chọn, mặc định là 5e-5) — Tốc độ học ban đầu cho bộ tối ưu. Đây thường là tốc độ học đỉnh khi sử dụng trình lập lịch có giai đoạn làm nóng (warmup).
  • lr_scheduler_type (str hoặc SchedulerType, tùy chọn, mặc định là "linear") — Loại trình điều khiển tốc độ học (learning rate scheduler) cần sử dụng. Xem SchedulerType để biết tất cả các giá trị khả dụng. Các lựa chọn phổ biến:
  • lr_scheduler_kwargs (dict hoặc str, tùy chọn, mặc định là None) — Các đối số bổ sung cho lr_scheduler. Xem tài liệu của từng scheduler để biết các giá trị có thể.
  • warmup_steps (int hoặc float, tùy chọn, mặc định là 0) — Số bước cho quá trình warmup tuyến tính từ 0 đến learning_rate. Warmup giúp ổn định quá trình huấn luyện trong giai đoạn đầu. Có thể là:
    • Một số nguyên: số bước khởi động chính xác
    • Một số float trong khoảng [0, 1): được hiểu là tỷ lệ so với tổng số bước huấn luyện

Trình tối ưu

  • optim (str hoặc training_args.OptimizerNames, tuỳ chọn, mặc định là "adamw_torch" (đối với torch>=2.8 "adamw_torch_fused")) — Bộ tối ưu cần sử dụng. Các lựa chọn phổ biến:
    • "adamw_torch": AdamW của PyTorch (mặc định được khuyến nghị)
    • "adamw_torch_fused": Lõi AdamW đã hợp nhất
    • "adamw_hf": Bản triển khai AdamW của HuggingFace
    • "sgd": Stochastic Gradient Descent có momentum
    • "adafactor": Bộ tối ưu hóa tiết kiệm bộ nhớ cho các mô hình lớn
    • "adamw_8bit": AdamW 8-bit (yêu cầu bitsandbytes) Xem OptimizerNames để biết danh sách đầy đủ.
  • optim_args (str, tùy chọn) — Các đối số tùy chọn được cung cấp cho các bộ tối ưu hóa như AnyPrecisionAdamW, AdEMAMix và GaLore.
  • weight_decay (float, tùy chọn, mặc định là 0) — Hệ số suy giảm trọng số được áp dụng bởi bộ tối ưu (không phải hàm mất mát). Thêm quy tắc hóa L2 để ngăn chặn quá khớp bằng cách phạt các trọng số lớn. Tự động loại trừ khỏi các tham số bias và LayerNorm. Các giá trị điển hình: 0.01 (chuẩn), 0.1 (quy tắc hóa mạnh hơn), 0.0 (không quy tắc hóa).
  • adam_beta1 (float, tùy chọn, mặc định là 0.9) — Tốc độ suy giảm mũ cho các ước lượng moment thứ nhất (momentum) trong các optimizer dựa trên Adam. Kiểm soát mức độ lịch sử gradient được giữ lại.
  • adam_beta2 (float, tùy chọn, mặc định là 0.999) — Tốc độ suy giảm mũ cho các ước lượng mô-men thứ hai (phương sai) trong các bộ tối ưu hóa dựa trên Adam. Kiểm soát việc điều chỉnh tỷ lệ học thích ứng.
  • adam_epsilon (float, tùy chọn, mặc định là 1e-8) — Giá trị epsilon cho sự ổn định số trong các bộ tối ưu hóa dựa trên Adam. Ngăn chặn việc chia cho số 0 ở mẫu số của quy tắc cập nhật.
  • optim_target_modules (Union[str, list[str]], tùy chọn) — Các module đích cần tối ưu hóa, tức là tên các module mà bạn muốn huấn luyện. Hiện được sử dụng cho thuật toán GaLore và thuật toán APOLLO. Xem cài đặt GaLore và cài đặt APOLLO để biết thêm chi tiết. Bạn cần đảm bảo truyền một optimizer GaLore hoặc APOLLO hợp lệ, ví dụ một trong các lựa chọn: “apollo_adamw”, “galore_adamw”, “galore_adamw_8bit”, “galore_adafactor” và đảm bảo rằng các module đích chỉ là các module nn.Linear.

Điều hòa & Ổn định huấn luyện

  • gradient_accumulation_steps (int, tuỳ chọn, mặc định là 1) — Số bước cập nhật để tích lũy gradient trước khi thực hiện một lượt backward/update. Mô phỏng kích thước batch lớn hơn mà không cần thêm bộ nhớ. Kích thước batch hiệu dụng = per_device_train_batch_size × num_devices × gradient_accumulation_steps.

    Khi sử dụng gradient accumulation, một “step” được tính là một bước có backward pass. Do đó, việc ghi log, đánh giá và lưu sẽ diễn ra mỗi gradient_accumulation_steps × xxx_step ví dụ huấn luyện.

  • average_tokens_across_devices (bool, tùy chọn, mặc định là True) — Có trung bình hóa token giữa các thiết bị hay không. Nếu bật, sẽ sử dụng all_reduce để đồng bộ hóa num_tokens_in_batch nhằm tính toán loss chính xác. Tham khảo: https://github.com/huggingface/transformers/issues/34242
  • max_grad_norm (float, tùy chọn, mặc định là 1.0) — Chuẩn gradient tối đa cho việc cắt gradient. Được áp dụng sau bước truyền ngược, trước bước tối ưu hóa. Ngăn chặn hiện tượng bùng nổ gradient bằng cách thu nhỏ gradient khi chuẩn toàn cục của chúng vượt quá ngưỡng này. Đặt thành 0 để tắt việc cắt. Các giá trị điển hình: 1.0 (chuẩn), 0.5 (thận trọng hơn), 5.0 (ít quyết liệt hơn).
  • label_smoothing_factor (float, tùy chọn, mặc định là 0.0) — Hệ số làm mịn nhãn để ngăn ngừa sự tự tin quá mức. Thay thế các mục tiêu cứng 0/1 bằng các mục tiêu mềm: 0 trở thành ε/num_labels và 1 trở thành 1 - ε + ε/num_labels, trong đó ε = label_smoothing_factor. Giá trị 0 có nghĩa là không làm mịn. Khoảng điển hình: từ 0.0 đến 0.1.

Huấn luyện độ chính xác hỗn hợp

  • bf16 (bool, tùy chọn, mặc định là False) — Bật huấn luyện độ chính xác hỗn hợp bfloat16 (BF16) Thường được ưu tiên hơn FP16 do có độ ổn định số tốt hơn và không cần bù trừ độ mất mát (loss scaling).
  • fp16 (bool, tùy chọn, mặc định là False) — Bật huấn luyện độ chính xác hỗn hợp float16 (FP16). Hãy cân nhắc sử dụng BF16 thay thế nếu phần cứng của bạn hỗ trợ.
  • bf16_full_eval (bool, tuỳ chọn, mặc định là False) — Sử dụng độ chính xác BF16 đầy đủ cho đánh giá (không chỉ độ chính xác hỗn hợp). Nhanh hơn và tiết kiệm bộ nhớ nhưng có thể ảnh hưởng nhẹ đến giá trị các chỉ số. Chỉ áp dụng trong quá trình đánh giá.
  • fp16_full_eval (bool, tùy chọn, mặc định là False) — Sử dụng độ chính xác FP16 đầy đủ cho đánh giá (không chỉ là độ chính xác hỗn hợp). Nhanh hơn và tiết kiệm bộ nhớ nhưng có thể ảnh hưởng nhẹ đến giá trị các chỉ số. Chỉ áp dụng trong quá trình đánh giá.
  • tf32 (bool, tùy chọn) — Bật chế độ TensorFloat-32 (TF32) trên các GPU Ampere và mới hơn. TF32 sử dụng độ chính xác 19-bit cho các phép nhân ma trận (thay vì 23-bit của FP32), mang lại tốc độ tăng lên đến 8 lần với sự suy giảm độ chính xác không đáng kể. Giá trị mặc định phụ thuộc vào phiên bản PyTorch. Xem tài liệu TF32.

Kiểm tra kích hoạt

  • activation_checkpointing (bool, tùy chọn, mặc định là False) — Bật activation checkpointing để đánh đổi hiệu suất tính toán lấy bộ nhớ. Giảm mức sử dụng bộ nhớ bằng cách xóa các activation trong quá trình forward và tính lại chúng trong quá trình backward. Cho phép huấn luyện các mô hình hoặc kích thước batch lớn hơn với chi phí là tốc độ huấn luyện chậm hơn khoảng 20%.
  • activation_checkpointing_kwargs (dict, tùy chọn, mặc định là None) — Các đối số dạng từ khóa được truyền cho activation_checkpointing_enable(). every_n_layers chỉ checkpoint mỗi n lớp decoder thay vì tất cả; 1 là hành vi tất cả hoặc không thông thường, và các giá trị lớn hơn trao đổi một phần bộ nhớ lấy tốc độ. offload giữ các activation đã lưu trong bộ nhớ host dạng pinned, giúp giải phóng layers x sequence x hidden byte bộ nhớ thiết bị nhưng làm chậm bước tính toán. Bất kỳ khóa nào khác đều được chuyển tiếp đến torch.utils.checkpoint.checkpoint.
  • gradient_checkpointing (bool, tùy chọn) — Biệt danh đã ngừng hỗ trợ của activation_checkpointing, sẽ bị loại bỏ trong v6.
  • gradient_checkpointing_kwargs (dict, tùy chọn) — Biệt danh đã ngừng hỗ trợ của activation_checkpointing_kwargs, sẽ bị loại bỏ trong v6.

Biên dịch

  • torch_compile (bool, tùy chọn, mặc định là False) — Biên dịch mô hình bằng torch.compile() của PyTorch 2.0 để huấn luyện nhanh hơn. Có thể tăng tốc độ 20-50% mà không cần thay đổi mã. Sử dụng cài đặt biên dịch mặc định trừ khi chỉ định torch_compile_backend hoặc torch_compile_mode.
  • torch_compile_backend (str, tuỳ chọn) — Backend cho torch.compile(). Nếu được đặt, sẽ tự động bật torch_compile. Các lựa chọn bao gồm "inductor" (mặc định), "aot_eager", "cudagraphs". Các backend khác nhau tùy theo phiên bản PyTorch - xem tài liệu PyTorch để biết các tùy chọn khả dụng.
  • torch_compile_mode (str, tùy chọn) — Chế độ biên dịch cho torch.compile(). Nếu được đặt, sẽ tự động bật torch_compile. Các tùy chọn: "default", "reduce-overhead" (giảm thiểu overhead của Python), "max-autotune" (tối ưu hóa mạnh mẽ, thời gian biên dịch chậm hơn).

Kernels

  • use_liger_kernel (bool, tùy chọn, mặc định là False) — Bật các tối ưu hóa Liger Kernel. Tăng thông lượng đa GPU khoảng 20% và giảm mức sử dụng bộ nhớ khoảng 60%. Hoạt động với Flash Attention, FSDP và DeepSpeed. Hiện hỗ trợ các mô hình Llama, Mistral, Mixtral và Gemma.
  • liger_kernel_config (Optional[dict], tùy chọn) — Cấu hình cho Liger Kernel. Được truyền dưới dạng kwargs cho _apply_liger_kernel_to_instance(). Các tùy chọn thường bao gồm: "rope", "swiglu", "cross_entropy", "fused_linear_cross_entropy", "rms_norm". Nếu là None, sẽ sử dụng cấu hình mặc định.

Tối ưu hóa bổ sung

  • use_cache (bool, tùy chọn, mặc định là False) — Có bật bộ nhớ đệm cho mô hình hay không. Đối với huấn luyện, điều này thường không cần thiết, ngoại trừ một số phương pháp PEFT sử dụng past_key_values.
  • neftune_noise_alpha (Optional[float]) — Nếu không phải None, tham số này sẽ kích hoạt nhúng nhiễu NEFTune. Điều này có thể cải thiện đáng kể hiệu suất của mô hình trong quá trình tinh chỉnh theo hướng dẫn. Xem bài báo gốc và mã nguồn gốc. Hỗ trợ PreTrainedModel của transformers và cả PeftModel từ peft. Bài báo gốc sử dụng các giá trị trong khoảng [5.0, 15.0].
  • torch_empty_cache_steps (int, tùy chọn) — Số bước cần chờ trước khi gọi torch.<device>.empty_cache(). Nếu không được đặt hoặc được đặt thành None, bộ nhớ đệm sẽ không được làm trống. Điều này có thể giúp tránh các lỗi hết bộ nhớ CUDA bằng cách giảm mức sử dụng VRAM cao nhất, với chi phí là hiệu suất chậm hơn khoảng 10%.
  • auto_find_batch_size (bool, tùy chọn, mặc định là False) — Có nên tự động tìm kích thước lô (batch size) huấn luyện phù hợp với bộ nhớ thông qua suy giảm mũ, tránh các lỗi CUDA Out-of-Memory hay không. Kích thước lô đánh giá sẽ không được điều chỉnh.

Ghi log & Giám sát huấn luyện

  • logging_strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "steps") — Chiến lược ghi log cần áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không ghi nhật ký trong quá trình huấn luyện.
    • "epoch": Việc ghi log được thực hiện vào cuối mỗi epoch.
    • "steps": Việc ghi log được thực hiện mỗi logging_steps.
  • logging_steps (int hoặc float, tùy chọn, mặc định là 500) — Số bước cập nhật giữa hai lần ghi log nếu logging_strategy="steps". Phải là một số nguyên hoặc một số thực trong khoảng [0,1). Nếu nhỏ hơn 1, sẽ được hiểu là tỷ lệ so với tổng số bước huấn luyện.
  • logging_first_step (bool, tùy chọn, mặc định là False) — Có ghi log bước global_step đầu tiên hay không.
  • log_on_each_node (bool, tùy chọn, mặc định là True) — Trong huấn luyện phân tán đa nút, có nên ghi log bằng log_level một lần cho mỗi nút hay chỉ trên nút chính.
  • logging_nan_inf_filter (bool, tùy chọn, mặc định là True) — Lọc các giá trị loss NaN và Inf khi ghi log. Nếu True, sẽ thay thế các loss huấn luyện NaN/Inf bằng trung bình của các loss hợp lệ gần nhất, và loại trừ các batch NaN/Inf (ví dụ: các batch không có token nhãn) khỏi loss đánh giá. Không ảnh hưởng đến việc tính toán gradient, chỉ ảnh hưởng đến ghi log.
  • include_num_input_tokens_seen (Optional[Union[str, bool]], tùy chọn, mặc định là “no”) — Có theo dõi số lượng token đầu vào đã nhìn thấy hay không. Phải là một trong [“all”, “non_padding”, “no”] hoặc một giá trị boolean, tương ứng với “all” hoặc “no”. Có thể chậm hơn trong huấn luyện phân tán vì phải gọi các thao tác gather.

Ghi nhật ký

  • log_level (str, tùy chọn, mặc định là passive) — Mức độ ghi log cho tiến trình chính. Các tùy chọn: "debug", "info", "warning", "error", "critical", hoặc "passive" (không thay đổi mức độ ghi log hiện tại của Transformers, mặc định là "warning")
  • log_level_replica (str, tùy chọn, mặc định là "warning") — Mức ghi log cho các tiến trình bản sao trong huấn luyện phân tán. Các tùy chọn giống với log_level.
  • disable_tqdm (bool, tùy chọn) — Tắt các thanh tiến trình tqdm. Mặc định là True nếu log_level là warning hoặc thấp hơn, False trong các trường hợp khác.

Tích hợp theo dõi thí nghiệm

  • report_to (str hoặc list[str], tùy chọn, mặc định là "none") — Danh sách các tích hợp để báo cáo kết quả và nhật ký. Các nền tảng được hỗ trợ là "azure_ml", "clearml", "codecarbon", "comet_ml", "dagshub", "dvclive", "flyte", "mlflow", "swanlab", "tensorboard", "trackio" và "wandb". Sử dụng "all" để báo cáo cho tất cả các tích hợp đã cài đặt, "none" để không sử dụng tích hợp nào.
  • run_name (str, tùy chọn) — Mô tả cho lần chạy. Thường được sử dụng cho ghi log trackio, wandb, mlflow, comet và swanlab.
  • project (str, tùy chọn, mặc định là "huggingface") — Tên của dự án được sử dụng cho việc ghi log. Hiện tại, chỉ được sử dụng bởi Trackio.
  • trackio_space_id (str hoặc None, tùy chọn, mặc định là None) — ID của Hugging Face Space được sử dụng để ghi log Trackio trực tiếp với một Space dựa trên Gradio. Nên là tên Space đầy đủ như 'username/reponame' hoặc 'orgname/reponame', hoặc chỉ cần 'reponame' (Space sẽ được tạo trong namespace của người dùng đang đăng nhập). Nếu là None, các chỉ số sẽ chỉ được ghi vào một thư mục cục bộ (không có Space trên Hub). Gradio Space đó có quyền đọc và ghi vào Bucket của Trackio, đây là điều bạn cần khi quá trình huấn luyện đang diễn ra—ví dụ khi tiếp tục một lần chạy chưa hoàn tất hoặc tổng hợp log từ nhiều máy. Space sẽ là công khai trừ khi bạn đặt hub_private_repo=True hoặc mặc định của tổ chức bạn là tạo các Space riêng tư.
  • trackio_bucket_id (str hoặc None, tùy chọn, mặc định là None) — Bucket id tùy chọn của Hugging Face cho Trackio. Nếu không được đặt, Trackio sẽ tự suy ra một id. Được sử dụng cùng với một Gradio Space (trackio_space_id) và khi triển khai một Space tĩnh (trackio_static_space_id không phải là False).
  • trackio_static_space_id (str, False, hoặc None, tùy chọn, mặc định là None) — ID của Hugging Face Space sẽ được sử dụng cho static Space được tạo sau khi quá trình huấn luyện hoàn tất. Phải là tên Space đầy đủ như 'username/reponame' hoặc 'orgname/reponame', hoặc chỉ là 'reponame' (Space sẽ được tạo trong namespace của người dùng đang đăng nhập). Nếu là False, sẽ không tạo static Space. Nếu là None và model được đẩy lên Hub, một static Space sẽ được tạo với tên mặc định và liên kết này sẽ được thêm vào model card. Space sẽ là công khai trừ khi bạn đặt hub_private_repo=True hoặc mặc định của tổ chức bạn là tạo các Space riêng tư.

Đánh giá

  • eval_strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "no") — Thời điểm chạy đánh giá. Các tùy chọn:
    • "no": Không đánh giá trong quá trình huấn luyện
    • "steps": Đánh giá mỗi eval_steps
    • "epoch": Đánh giá vào cuối mỗi epoch
  • eval_steps (int hoặc float, tùy chọn) — Số bước cập nhật giữa hai lần đánh giá nếu eval_strategy="steps". Nếu không được đặt, giá trị mặc định sẽ giống với logging_steps. Phải là một số nguyên hoặc số thực trong khoảng [0,1). Nếu nhỏ hơn 1, sẽ được hiểu là tỷ lệ so với tổng số bước huấn luyện.
  • eval_delay (float, tùy chọn) — Số epoch hoặc bước cần chờ trước khi có thể thực hiện lần đánh giá đầu tiên, tùy thuộc vào eval_strategy.
  • per_device_eval_batch_size (int, tùy chọn, mặc định là 8) — Kích thước lô trên mỗi lõi bộ tăng tốc/CPU của thiết bị để đánh giá.
  • prediction_loss_only (bool, tùy chọn, mặc định là False) — Khi thực hiện đánh giá và tạo dự đoán, chỉ trả về loss.
  • eval_on_start (bool, tùy chọn, mặc định là False) — Có thực hiện một bước đánh giá (kiểm tra tính hợp lệ) trước khi huấn luyện hay không, để đảm bảo các bước xác thực hoạt động chính xác.
  • eval_do_concat_batches (bool, tùy chọn, mặc định là True) — Có nên nối đệ quy các inputs/losses/labels/predictions giữa các batch hay không. Nếu False, thay vào đó sẽ lưu chúng dưới dạng các danh sách, với mỗi batch được giữ riêng biệt.
  • eval_use_gather_object (bool, tùy chọn, mặc định là False) — Có nên chạy gather object đệ quy trên một danh sách/bộ/bộ từ điển lồng nhau các đối tượng từ tất cả các thiết bị hay không. Chỉ nên bật tính năng này nếu người dùng không chỉ trả về các tensor, và điều này đang bị PyTorch khuyến cáo không nên làm. Điều này hữu ích khi cấu trúc nhãn không theo chuẩn, như trong các tác vụ thị giác máy tính.
  • eval_accumulation_steps (int, tùy chọn) — Số bước dự đoán để tích lũy các tensor đầu ra trước khi chuyển kết quả sang CPU. Nếu không được đặt, toàn bộ các dự đoán sẽ được tích lũy trên bộ tăng tốc thiết bị trước khi được chuyển sang CPU (nhanh hơn nhưng yêu cầu nhiều bộ nhớ hơn).

Tính toán chỉ số

  • include_for_metrics (list[str], tùy chọn, mặc định là []) — Bao gồm thêm dữ liệu trong hàm compute_metrics nếu cần cho việc tính toán metrics. Các tùy chọn có thể thêm vào include_for_metrics danh sách:
    • "inputs": Dữ liệu đầu vào được truyền vào mô hình, dùng để tính toán các chỉ số phụ thuộc vào đầu vào.
    • "loss": Các giá trị loss được tính trong quá trình đánh giá, dùng để tính các chỉ số phụ thuộc vào loss.
  • batch_eval_metrics (bool, tùy chọn, mặc định là False) — Nếu đặt thành True, quá trình đánh giá sẽ gọi compute_metrics ở cuối mỗi batch để tích lũy thống kê thay vì lưu tất cả eval logits trong bộ nhớ. Khi đặt thành True, bạn phải truyền một hàm compute_metrics nhận một đối số boolean compute_result, khi được truyền True, sẽ kích hoạt các thống kê tổng hợp toàn cục cuối cùng từ các thống kê tổng hợp cấp batch mà bạn đã tích lũy trên tập đánh giá.

Checkpointing & Saving

  • save_only_model (bool, tùy chọn, mặc định là False) — Chỉ lưu trọng số mô hình, không lưu trạng thái optimizer/scheduler/RNG. Điều này giảm đáng kể kích thước checkpoint nhưng ngăn việc tiếp tục huấn luyện từ checkpoint. Sử dụng khi bạn chỉ cần mô hình đã huấn luyện để suy luận, không cần tiếp tục huấn luyện. Bạn chỉ có thể tải mô hình bằng from_pretrained khi tùy chọn này được đặt thành True.
  • save_strategy (str hoặc SaveStrategy, tuỳ chọn, mặc định là "steps") — Chiến lược lưu checkpoint áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không thực hiện lưu trong quá trình huấn luyện.
    • "epoch": Việc lưu được thực hiện vào cuối mỗi epoch.
    • "steps": Việc lưu được thực hiện mỗi save_steps.
    • "best": Việc lưu được thực hiện mỗi khi đạt được một best_metric mới.
  • save_steps (int hoặc float, tùy chọn, mặc định là 500) — Số bước cập nhật trước khi lưu hai checkpoint nếu save_strategy="steps". Phải là một số nguyên hoặc một số thực trong khoảng [0,1). Nếu nhỏ hơn 1, sẽ được hiểu là tỷ lệ so với tổng số bước huấn luyện.
  • save_on_each_node (bool, tùy chọn, mặc định là False) — Khi thực hiện huấn luyện phân tán đa nút, có nên lưu mô hình và checkpoint trên mỗi nút hay chỉ trên nút chính. Không nên kích hoạt tùy chọn này khi các nút khác nhau sử dụng cùng một bộ lưu trữ, vì các tệp sẽ được lưu với cùng tên trên mỗi nút.
  • save_total_limit (int, tùy chọn) — Số lượng checkpoint tối đa được giữ lại. Các checkpoint cũ hơn trong output_dir sẽ bị xóa. Khi load_best_model_at_end=True, checkpoint tốt nhất luôn được giữ lại cùng với các checkpoint mới nhất. Ví dụ, save_total_limit=5 sẽ giữ lại 4 checkpoint mới nhất cùng với checkpoint tốt nhất
  • enable_jit_checkpoint (bool, tuỳ chọn, mặc định là False) — Bật checkpoint Just-In-Time khi nhận tín hiệu SIGTERM để kết thúc một cách êm dịu trên các tác vụ có thể bị thu hồi. Quan trọng: Hãy cấu hình thời gian tắt máy êm dịu của trình điều phối để dành đủ thời gian. Với Kubernetes, hãy đặt terminationGracePeriodSeconds (mặc định 30s thường không đủ). Với Slurm, hãy dùng --signal=TERM@<seconds>. Thời gian ân hạn yêu cầu ≥ thời gian lặp dài nhất + thời gian lưu checkpoint.

Tích hợp Hugging Face Hub

  • push_to_hub (bool, tùy chọn, mặc định là False) — Có đẩy mô hình lên Hub mỗi khi mô hình được lưu hay không. Nếu được kích hoạt, output_dir sẽ bắt đầu một thư mục git được đồng bộ với kho (được xác định bởi hub_model_id) và nội dung sẽ được đẩy mỗi khi một thao tác lưu được kích hoạt (tùy thuộc vào save_strategy của bạn). Việc gọi save_model() cũng sẽ kích hoạt một lần đẩy.
  • hub_token (str, tùy chọn) — Token được sử dụng để đẩy mô hình lên Hub. Mặc định sẽ dùng token trong thư mục cache được lấy bằng hf auth login.
  • hub_private_repo (bool, tùy chọn) — Xác định có làm cho kho (repo) ở chế độ riêng tư hay không. Nếu là None (mặc định), kho sẽ ở chế độ công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại. Nếu báo cáo lên Trackio với triển khai đến Hugging Face Spaces được bật, cùng một logic sẽ xác định xem Space có ở chế độ riêng tư hay không.
  • hub_model_id (str, tùy chọn) — Tên của kho cần đồng bộ với output_dir cục bộ. Nó có thể là một ID mô hình đơn giản, trong trường hợp đó mô hình sẽ được đẩy vào namespace của bạn. Ngược lại, nó phải là tên kho đầy đủ, ví dụ "user_name/model", cho phép bạn đẩy vào một tổ chức mà bạn là thành viên bằng "organization_name/model". Mặc định sẽ là user_name/output_dir_name với output_dir_name là tên của output_dir.
  • hub_strategy (str hoặc HubStrategy, tuỳ chọn, mặc định là "every_save") — Xác định nội dung và thời điểm đẩy lên Hub. Các tùy chọn:
    • "end": Chỉ đẩy ở cuối quá trình huấn luyện
    • "every_save": Push ở mỗi lần lưu (bất đồng bộ để không chặn quá trình huấn luyện)
    • "checkpoint": Giống như "every_save" nhưng có thêm việc đẩy checkpoint mới nhất vào thư mục con "last-checkpoint" để dễ dàng tiếp tục
    • "all_checkpoints": Đẩy tất cả các checkpoint khi chúng xuất hiện
  • hub_always_push (bool, tùy chọn, mặc định là False) — Trừ khi giá trị này là True, Trainer sẽ bỏ qua việc đẩy checkpoint khi lần đẩy trước đó chưa hoàn tất.
  • hub_revision (str, tùy chọn) — Phiên bản (revision) được sử dụng khi đẩy lên Hub. Có thể là tên nhánh, thẻ (tag) hoặc hash của commit.

Theo dõi mô hình tốt nhất

  • load_best_model_at_end (bool, tùy chọn, mặc định là False) — Tải checkpoint tốt nhất vào cuối quá trình huấn luyện. Yêu cầu eval_strategy phải được thiết lập. Khi được bật, checkpoint tốt nhất luôn được lưu (xem save_total_limit). Khi `True`, `save_strategy` phải khớp với `eval_strategy` (trừ khi `save_strategy` là `"best"`), và nếu sử dụng `"steps"`, `save_steps` phải là bội số của `eval_steps`.
  • metric_for_best_model (str, tùy chọn) — Chỉ số được sử dụng để so sánh các mô hình khi load_best_model_at_end=True. Phải là tên chỉ số được trả về bởi quá trình đánh giá, có hoặc không có tiền tố "eval_". Mặc định là "loss". Nếu bạn đặt giá trị này, greater_is_better sẽ mặc định là True trừ khi tên kết thúc bằng "loss". Ví dụ: "accuracy", "f1", "eval_bleu".
  • greater_is_better (bool, tùy chọn) — Liệu giá trị chỉ số cao hơn có tốt hơn không. Mặc định dựa trên metric_for_best_model: True nếu tên chỉ số không kết thúc bằng "loss", False trong trường hợp còn lại.

Tiếp tục huấn luyện

  • ignore_data_skip (bool, tùy chọn, mặc định là False) — Khi tiếp tục huấn luyện, bỏ qua việc tua nhanh qua tập dữ liệu để đạt đến trạng thái trước đó. Nếu True, quá trình huấn luyện sẽ bắt đầu từ đầu tập dữ liệu (tiếp tục nhanh hơn nhưng kết quả sẽ không khớp với phiên huấn luyện bị gián đoạn). Nếu False, sẽ bỏ qua các dữ liệu đã xem (tiếp tục chậm hơn nhưng tiếp tục chính xác).
  • restore_callback_states_from_checkpoint (bool, tùy chọn, mặc định là False) — Khôi phục trạng thái callback từ checkpoint khi tiếp tục huấn luyện. Nếu True, sẽ ghi đè lên các callback được truyền vào Trainer nếu chúng tồn tại trong checkpoint.

Tính tái lập

  • full_determinism (bool, tùy chọn, mặc định là False) — Nếu True, enable_full_determinism() sẽ được gọi thay vì set_seed() để đảm bảo kết quả có thể tái lập trong huấn luyện phân tán. Lưu ý: điều này sẽ ảnh hưởng tiêu cực đến hiệu suất, vì vậy chỉ nên sử dụng để gỡ lỗi.
  • seed (int, tùy chọn, mặc định là 42) — Hạt ngẫu nhiên sẽ được đặt ở đầu quá trình huấn luyện. Để đảm bảo khả năng tái lập giữa các lần chạy, hãy sử dụng hàm ~Trainer.model_init để khởi tạo mô hình nếu nó có một số tham số được khởi tạo ngẫu nhiên.
  • data_seed (int, tùy chọn) — Hạt ngẫu nhiên (random seed) được sử dụng với các trình lấy mẫu dữ liệu (data samplers). Nếu không được đặt, các trình tạo ngẫu nhiên cho việc lấy mẫu dữ liệu sẽ sử dụng cùng hạt với seed. Điều này có thể được sử dụng để đảm bảo khả năng tái lập của việc lấy mẫu dữ liệu, độc lập với hạt của mô hình.

Cấu hình phần cứng

  • use_cpu (bool, tùy chọn, mặc định là False) — Có sử dụng cpu hay không. Nếu đặt thành False, chúng tôi sẽ sử dụng thiết bị/backend torch khả dụng.

Cấu hình Accelerate

  • accelerator_config (str, dict, hoặc AcceleratorConfig, tùy chọn) — Cấu hình cho tích hợp Accelerate bên trong. Có thể là:
    • Đường dẫn đến tệp cấu hình JSON: "accelerator_config.json"
    • Từ điển với các tùy chọn cấu hình
    • AcceleratorConfig instance Các tùy chọn chính:
    • split_batches (bool, mặc định là False): Có nên chia các batch giữa các thiết bị hay không. Nếu True, kích thước batch thực tế sẽ giống nhau trên tất cả các thiết bị (tổng số phải chia hết cho num_processes). Nếu False, mỗi thiết bị sẽ nhận kích thước batch được chỉ định.
    • dispatch_batches (bool): Nếu True, chỉ tiến trình chính sẽ lặp qua dataloader và phân phối các batch đến các thiết bị. Mặc định là True cho IterableDataset, False trong các trường hợp khác.
    • even_batches (bool, mặc định là True): Nhân bản các mẫu từ đầu bộ dữ liệu để đảm bảo tất cả các worker nhận được kích thước batch bằng nhau.
    • use_seedable_sampler (bool, mặc định là True): Sử dụng trình lấy mẫu ngẫu nhiên có thể đặt hạt giống hoàn toàn để đảm bảo khả năng tái lập.
    • use_configured_state (bool, mặc định là False): Sử dụng AcceleratorState/PartialState đã được khởi tạo sẵn thay vì tạo mới. Có thể gây ra các vấn đề khi tinh chỉnh siêu tham số.
  • parallelism_config (ParallelismConfig, tùy chọn) — Cấu hình song song cho phiên huấn luyện. Yêu cầu Accelerate 1.10.1

Dataloader

  • dataloader_drop_last (bool, tùy chọn, mặc định là False) — Có nên loại bỏ batch cuối cùng không hoàn chỉnh (nếu độ dài của tập dữ liệu không chia hết cho kích thước batch) hay không.
  • dataloader_num_workers (int, tùy chọn, mặc định là 0) — Số lượng tiến trình con được sử dụng để nạp dữ liệu (chỉ dành cho PyTorch). Giá trị 0 có nghĩa là dữ liệu sẽ được nạp trong tiến trình chính.
  • dataloader_pin_memory (bool, tùy chọn, mặc định là True) — Liệu bạn có muốn ghim bộ nhớ trong các trình tải dữ liệu hay không. Giá trị mặc định sẽ là True.
  • dataloader_persistent_workers (bool, tùy chọn, mặc định là False) — Nếu là True, trình tải dữ liệu sẽ không tắt các tiến trình worker sau khi một tập dữ liệu đã được tiêu thụ một lần. Điều này cho phép giữ các phiên bản Dataset của worker ở trạng thái hoạt động. Có thể tăng tốc độ huấn luyện, nhưng sẽ làm tăng mức sử dụng RAM. Mặc định sẽ là False.
  • dataloader_prefetch_factor (int, tùy chọn) — Số lượng batch được tải trước bởi mỗi worker. 2 nghĩa là tổng cộng sẽ có 2 * num_workers batch được tải trước trên tất cả các worker.
  • dataloader_multiprocessing_context (str, tuỳ chọn) — Phương thức khởi tạo multiprocessing được sử dụng cho các worker tải dữ liệu ("fork", "spawn" hoặc "forkserver"). Mặc định là phương thức khởi tạo mặc định của PyTorch, ngoại trừ trên MPS với dataloader_num_workers > 1, khi đó mặc định là "fork". Hãy dùng "spawn" khi stream từ các nguồn mà các đối tượng của chúng không an toàn khi fork (ví dụ HDFS qua pyarrow). Khi dùng "spawn", bất kỳ collate_fn tùy chỉnh hoặc mã dataset nào cũng phải có thể import được ở cấp module (không dùng lambda/closure).
  • dataloader_in_order (bool, tùy chọn, mặc định là True) — Nếu True, trình tải dữ liệu sẽ trả về các lô theo thứ tự các worker được khởi tạo. Đặt thành False để trả về các lô ngay khi chúng sẵn sàng, điều này có thể giảm độ trễ cuối cho các tác vụ truyền trực tiếp IterableDataset. Yêu cầu PyTorch >= 2.6.
  • remove_unused_columns (bool, tùy chọn, mặc định là True) — Có tự động xóa các cột không được sử dụng bởi phương thức forward của mô hình hay không.
  • label_names (list[str], tùy chọn) — Danh sách các khóa trong từ điển đầu vào của bạn tương ứng với nhãn. Cuối cùng sẽ mặc định là danh sách các tên tham số được mô hình chấp nhận mà chứa từ “label”, trừ khi mô hình được sử dụng là một trong các XxxForQuestionAnswering, trong trường hợp đó nó cũng sẽ bao gồm các khóa ["start_positions", "end_positions"]. Bạn chỉ nên chỉ định label_names nếu bạn đang sử dụng tên nhãn tùy chỉnh hoặc nếu forward của mô hình của bạn tiêu thụ nhiều tensor nhãn (ví dụ: extractive QA).
  • train_sampling_strategy (str, tuỳ chọn, mặc định là "random") — Bộ lấy mẫu (sampler) được sử dụng cho dataloader huấn luyện. Các giá trị có thể là:
    • "random": Sử dụng RandomSampler (mặc định).
    • "sequential": Sử dụng SequentialSampler.
    • "group_by_length": Sử dụng LengthGroupedSampler để nhóm các mẫu có độ dài xấp xỉ bằng nhau lại với nhau (nhằm giảm thiểu padding và tăng hiệu quả).
    • "batch_rebalance": Sử dụng BatchRebalanceSampler để cân bằng chi phí token đệm giữa các thiết bị và các bước tích lũy gradient trong mỗi batch hiệu dụng, giảm thiểu lãng phí do đệm và bộ nhớ đỉnh so với "group_by_length". Hiện tại chỉ hỗ trợ huấn luyện song song dữ liệu (chưa hỗ trợ song song tensor).

    Lưu ý: Khi sử dụng IterableDataset, đối số này sẽ bị bỏ qua.

  • length_column_name (str, tùy chọn, mặc định là "length") — Tên cột cho các độ dài đã tính trước. Nếu cột tồn tại, việc nhóm theo độ dài sẽ sử dụng các giá trị này thay vì tính toán chúng khi khởi động huấn luyện. Bỏ qua trừ khi train_sampling_strategy là "group_by_length"hoặc "batch_rebalance" và tập dữ liệu là một instance của Dataset.

DDP (DistributedDataParallel)

  • ddp_find_unused_parameters (bool, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ find_unused_parameters được truyền cho DistributedDataParallel. Mặc định sẽ là False nếu sử dụng gradient checkpointing, ngược lại là True.
  • ddp_bucket_cap_mb (int, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ bucket_cap_mb được truyền cho DistributedDataParallel.
  • ddp_broadcast_buffers (bool, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ broadcast_buffers được truyền cho DistributedDataParallel. Mặc định sẽ là False nếu sử dụng gradient checkpointing, True trong các trường hợp khác.
  • ddp_static_graph (bool, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ static_graph được truyền cho DistributedDataParallel.
  • ddp_backend (str, tùy chọn) — Backend để sử dụng cho huấn luyện phân tán. Phải là một trong "nccl", "mpi", "xccl", "gloo", "hccl".
  • ddp_timeout (int, tùy chọn, mặc định là 1800) — Thời gian chờ cho các lệnh gọi torch.distributed.init_process_group, được sử dụng để tránh hết thời gian chờ socket GPU khi thực hiện các thao tác chậm trong các lần chạy phân tán. Vui lòng tham khảo tài liệu PyTorch để biết thêm thông tin.

FSDP (Fully Sharded Data Parallel)

  • fsdp (bool, tùy chọn, mặc định là None) — Bật PyTorch Fully Sharded Data Parallel (FSDP) cho huấn luyện phân tán. Truyền True để bật FSDP.
  • fsdp_config (str hoặc dict, tuỳ chọn) — Cấu hình cho khi fsdp được bật. Truyền đường dẫn đến tệp cấu hình JSON, chẳng hạn như fsdp_config.json, hoặc một dict đã được nạp sẵn.

    Các khóa được hỗ trợ:

    • version (int, tùy chọn, mặc định là 2): Phiên bản FSDP cần sử dụng (2 cho FSDP2, 1 cho FSDP1 cũ).
    • reshard_after_forward (bool, tuỳ chọn, mặc định là True): Có nên reshard các tham số sau bước forward hay không. Đặt thành False để giữ các tham số ở trạng thái đã gather giữa các bước forward và backward, tránh việc thực hiện lại all-gather, và sử dụng bộ nhớ đỉnh cao hơn.
    • cpu_offload (bool, tùy chọn, mặc định là False): Chuyển các tham số và gradient sang CPU khi không được sử dụng để tiết kiệm bộ nhớ GPU.
    • activation_checkpointing (bool, tùy chọn, mặc định là False): Đặt thành True để giảm bộ nhớ bằng cách tính lại các activation trong bước truyền ngược. Khi sử dụng FSDP, hãy ưu tiên tham số này hơn đối số huấn luyện activation_checkpointing, vì đối số đó gây ra một all-gather thừa trong bước truyền ngược.
    • cpu_ram_efficient_loading (bool, tùy chọn, mặc định là False): Đặt thành True để tải checkpoint được huấn luyện trước chỉ trên tiến trình đầu tiên. Các tiến trình khác bắt đầu với trọng số trống và nhận trọng số qua broadcast.
    • state_dict_type (str, tùy chọn, mặc định là "FULL_STATE_DICT"): Định dạng checkpoint: "FULL_STATE_DICT" (một tệp tương thích với HF duy nhất) hoặc "SHARDED_STATE_DICT" (một tệp cho mỗi rank, nhanh hơn với các mô hình lớn).
    • auto_wrap_policy (str, tùy chọn, mặc định là "TRANSFORMER_BASED_WRAP"): Chính sách auto-wrap cần sử dụng. Chọn "TRANSFORMER_BASED_WRAP", "SIZE_BASED_WRAP" hoặc "NO_WRAP".
    • transformer_layer_cls_to_wrap (list[str], optional): Tên lớp (phân biệt hoa thường) của các lớp Transformer cần bọc, ví dụ LlamaDecoderLayer. Thông thường không cần thiết: chính sách bọc sẽ tự động dùng _no_split_modules của mô hình, vốn bao phủ hầu hết các mô hình transformers.
    • min_num_params (int, tùy chọn, mặc định là 0): Số lượng tham số tối thiểu cho mỗi module để tự động bọc dựa trên kích thước (được sử dụng với auto_wrap_policy="SIZE_BASED_WRAP").
    • xla (bool, tùy chọn, mặc định là False): Có sử dụng PyTorch/XLA Fully Sharded Data Parallel Training hay không. Tính năng thử nghiệm.
    • xla_fsdp_settings (dict, tùy chọn): Từ điển các tham số bọc XLA FSDP. Để xem danh sách đầy đủ các tùy chọn, hãy xem mã nguồn XLA FSDP.
    • xla_fsdp_grad_ckpt (bool, tùy chọn, mặc định là False): Đặt thành True để sử dụng gradient checkpointing trên mỗi lớp được bọc bởi XLA FSDP lồng nhau. Yêu cầu xla=True và một chính sách tự động bọc (min_num_params hoặc transformer_layer_cls_to_wrap).

DeepSpeed

  • deepspeed (str hoặc dict, tuỳ chọn) — Bật DeepSpeed tích hợp. Giá trị là một trong các lựa chọn sau:
    • Đường dẫn đến tệp cấu hình JSON của DeepSpeed: "ds_config.json"
    • Đã tải cấu hình dưới dạng từ điển

      Nếu sử dụng khởi tạo ZeRO, hãy khởi tạo mô hình của bạn sau khi khởi tạo TrainingArguments, nếu không ZeRO sẽ không được áp dụng.

Gỡ lỗi & Phân tích hiệu năng (Thử nghiệm)

  • debug (str hoặc danh sách DebugOption, tuỳ chọn, mặc định là "") — Bật một hoặc nhiều tính năng gỡ lỗi. Đây là tính năng thử nghiệm. Các tuỳ chọn khả dụng:
    • “underflow_overflow”: phát hiện tràn trong đầu vào/đầu ra của mô hình và báo cáo các khung cuối cùng dẫn đến sự kiện
    • “tpu_metrics_debug”: in các chỉ số gỡ lỗi trên TPU
  • skip_memory_metrics (bool, tùy chọn, mặc định là True) — Có bỏ qua việc thêm báo cáo bộ nhớ của trình phân tích vào các chỉ số hay không. Mặc định là bỏ qua vì điều này làm chậm tốc độ huấn luyện và đánh giá.

Cờ kịch bản bên ngoài (không được Trainer sử dụng)

  • do_train (bool, tùy chọn, mặc định là False) — Có chạy huấn luyện hay không. Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để sử dụng trong các script huấn luyện/đánh giá của bạn.
  • do_eval (bool, tùy chọn) — Có chạy đánh giá trên tập kiểm tra hay không. Sẽ được đặt thành True nếu eval_strategy khác "no". Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để bạn sử dụng trong các script huấn luyện/đánh giá của mình.
  • do_predict (bool, tùy chọn, mặc định là False) — Có chạy dự đoán trên tập kiểm tra hay không. Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để các script huấn luyện/đánh giá của bạn sử dụng.
  • resume_from_checkpoint (str, tùy chọn) — Đường dẫn đến thư mục chứa checkpoint hợp lệ cho model của bạn. Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để các script huấn luyện/đánh giá của bạn sử dụng.

Lớp cấu hình để kiểm soát mọi khía cạnh của việc huấn luyện mô hình với Trainer. TrainingArguments tập trung tất cả các siêu tham số, cài đặt tối ưu hóa, tùy chọn ghi nhật ký và lựa chọn hạ tầng cần thiết cho việc huấn luyện.

HfArgumentParser có thể chuyển lớp này thành các đối số argparse có thể được chỉ định trên dòng lệnh.

get_process_log_level

< >

( )

Trả về cấp độ log cần sử dụng tùy thuộc vào việc tiến trình này là tiến trình chính của node 0, tiến trình chính của node khác 0, hay một tiến trình không chính.

Đối với tiến trình chính, mức ghi log mặc định là mức ghi log đã được thiết lập (logging.WARNING nếu bạn không làm gì) trừ khi bị ghi đè bởi đối số log_level.

Đối với các tiến trình bản sao, mức log mặc định là logging.WARNING trừ khi được ghi đè bởi đối số log_level_replica.

Việc lựa chọn giữa cấu hình tiến trình chính và tiến trình bản sao được thực hiện dựa trên giá trị trả về của should_log.

get_warmup_steps

< >

( num_training_steps: int )

Lấy số bước được sử dụng cho quá trình làm nóng tuyến tính.

main_process_first

< >

( local = Truedesc = 'work' )

Tham số

  • local (bool, tuỳ chọn, mặc định là True) — nếu True thì “first” có nghĩa là tiến trình rank 0 của mỗi node; nếu False thì “first” có nghĩa là tiến trình rank 0 của node rank 0. Trong môi trường đa node có hệ thống tệp dùng chung, bạn hầu như sẽ muốn dùng local=False để chỉ tiến trình chính của node đầu tiên thực hiện xử lý. Tuy nhiên, nếu hệ thống tệp không dùng chung, thì tiến trình chính của mỗi node sẽ cần thực hiện xử lý, đây là hành vi mặc định.
  • desc (str, tùy chọn, mặc định là "work") — mô tả công việc sẽ được sử dụng trong nhật ký gỡ lỗi

Một trình quản lý ngữ cảnh cho môi trường phân tán của torch, nơi cần thực hiện một số thao tác trên tiến trình chính trong khi chặn các bản sao, và khi hoàn tất thì giải phóng các bản sao đó.

Một ứng dụng như vậy là cho tính năng map của datasets, vốn nên được chạy một lần trên tiến trình chính để đạt hiệu quả, sau khi hoàn thành sẽ lưu một phiên bản kết quả được cache và sau đó được các bản sao tự động tải về.

set_dataloader

< >

( train_batch_size: int = 8eval_batch_size: int = 8drop_last: bool = Falsenum_workers: int = 0pin_memory: bool = Truepersistent_workers: bool = Falseprefetch_factor: int | None = Nonemultiprocessing_context: str | None = Nonein_order: bool = Trueauto_find_batch_size: bool = Falseignore_data_skip: bool = Falsesampler_seed: int | None = None )

Tham số

  • drop_last (bool, tùy chọn, mặc định là False) — Có nên loại bỏ batch cuối cùng không hoàn chỉnh (nếu độ dài của tập dữ liệu không chia hết cho kích thước batch) hay không.
  • num_workers (int, tùy chọn, mặc định là 0) — Số lượng tiến trình con được sử dụng để nạp dữ liệu (chỉ dành cho PyTorch). Giá trị 0 có nghĩa là dữ liệu sẽ được nạp trong tiến trình chính.
  • pin_memory (bool, tùy chọn, mặc định là True) — Xác định có ghim bộ nhớ trong các trình tải dữ liệu hay không. Mặc định là True.
  • persistent_workers (bool, tùy chọn, mặc định là False) — Nếu là True, trình tải dữ liệu sẽ không tắt các tiến trình worker sau khi một tập dữ liệu đã được tiêu thụ một lần. Điều này cho phép giữ các phiên bản Dataset của worker ở trạng thái hoạt động. Có thể tăng tốc quá trình huấn luyện, nhưng sẽ làm tăng mức sử dụng RAM. Mặc định sẽ là False.
  • prefetch_factor (int, tùy chọn) — Số lượng batch được tải trước bởi mỗi worker. 2 có nghĩa là tổng cộng sẽ có 2 * num_workers batch được tải trước trên tất cả các worker.
  • multiprocessing_context (str, tuỳ chọn) — Phương thức khởi tạo multiprocessing được sử dụng cho các worker tải dữ liệu ("fork", "spawn" hoặc "forkserver"). Mặc định là phương thức khởi tạo mặc định của PyTorch. Hãy dùng "spawn" khi stream từ các nguồn có các đối tượng không an toàn khi fork (ví dụ HDFS qua pyarrow). Khi dùng "spawn", bất kỳ collate_fn hoặc mã dataset tùy chỉnh nào cũng phải có thể import được ở cấp module (không dùng lambda/closure).
  • in_order (bool, tuỳ chọn, mặc định là True) — Nếu True, data loader sẽ trả về các batch theo thứ tự các worker được khởi tạo. Đặt thành False để trả về các batch ngay khi chúng sẵn sàng, điều này có thể giảm độ trễ cuối cho các tác vụ streaming của IterableDataset. Yêu cầu PyTorch >= 2.6.
  • auto_find_batch_size (bool, tùy chọn, mặc định là False) — Có nên tự động tìm kích thước batch phù hợp với bộ nhớ thông qua suy giảm mũ, tránh các lỗi CUDA Out-of-Memory hay không. Yêu cầu phải cài đặt accelerate (pip install accelerate)
  • ignore_data_skip (bool, tùy chọn, mặc định là False) — Khi tiếp tục huấn luyện, có bỏ qua các epoch và batch để đưa việc tải dữ liệu về cùng giai đoạn như trong lần huấn luyện trước hay không. Nếu đặt thành True, quá trình huấn luyện sẽ bắt đầu nhanh hơn (vì bước bỏ qua này có thể mất rất nhiều thời gian) nhưng sẽ không cho ra kết quả giống như nếu quá trình huấn luyện bị gián đoạn đó được tiếp tục.
  • sampler_seed (int, tùy chọn) — Hạt ngẫu nhiên (random seed) được sử dụng với các trình lấy mẫu dữ liệu (data samplers). Nếu không được đặt, các trình tạo ngẫu nhiên cho việc lấy mẫu dữ liệu sẽ sử dụng cùng hạt với self.seed. Điều này có thể được sử dụng để đảm bảo khả năng tái lập của việc lấy mẫu dữ liệu, độc lập với hạt của mô hình.

Một phương thức nhóm lại tất cả các đối số liên quan đến việc tạo các dataloader.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_dataloader(train_batch_size=16, eval_batch_size=64)
>>> args.per_device_train_batch_size
16

set_evaluate

< >

( strategy: str | transformers.trainer_utils.IntervalStrategy = 'no'steps: int = 500batch_size: int = 8accumulation_steps: int | None = Nonedelay: float | None = Noneloss_only: bool = False )

Tham số

  • strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "no") — Chiến lược đánh giá cần áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không thực hiện đánh giá trong quá trình huấn luyện.
    • "steps": Việc đánh giá được thực hiện (và ghi log) mỗi steps.
    • "epoch": Việc đánh giá được thực hiện vào cuối mỗi epoch.

    Việc đặt strategy khác "no" sẽ đặt self.do_eval thành True.

  • steps (int, tùy chọn, mặc định là 500) — Số bước cập nhật giữa hai lần đánh giá nếu strategy="steps".
  • batch_size (int tùy chọn, mặc định là 8) — Kích thước batch trên mỗi thiết bị (GPU/lõi TPU/CPU…) được sử dụng cho đánh giá.
  • accumulation_steps (int, tùy chọn) — Số bước dự đoán để tích lũy các tensor đầu ra trước khi chuyển kết quả sang CPU. Nếu không được đặt, toàn bộ các dự đoán sẽ được tích lũy trên GPU/TPU trước khi được chuyển sang CPU (nhanh hơn nhưng yêu cầu nhiều bộ nhớ hơn).
  • delay (float, tùy chọn) — Số epoch hoặc bước cần chờ trước khi có thể thực hiện đánh giá đầu tiên, tùy thuộc vào eval_strategy.
  • loss_only (bool, tùy chọn, mặc định là False) — Bỏ qua tất cả các đầu ra ngoại trừ loss.

Một phương thức nhóm lại tất cả các đối số liên quan đến đánh giá.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_evaluate(strategy="steps", steps=100)
>>> args.eval_steps
100

set_logging

< >

( strategy: str | transformers.trainer_utils.IntervalStrategy = 'steps'steps: int = 500report_to: str | list[str] = 'none'level: str = 'passive'first_step: bool = Falsenan_inf_filter: bool = Falseon_each_node: bool = Falsereplica_level: str = 'passive' )

Tham số

  • strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "steps") — Chiến lược ghi log cần áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không ghi nhật ký trong quá trình huấn luyện.
    • "epoch": Việc ghi log được thực hiện vào cuối mỗi epoch.
    • "steps": Việc ghi log được thực hiện mỗi logging_steps.
  • steps (int, tùy chọn, mặc định là 500) — Số bước cập nhật giữa hai lần ghi log nếu strategy="steps".
  • level (str, tùy chọn, mặc định là "passive") — Mức độ ghi log của Logger được sử dụng trên tiến trình chính. Các lựa chọn khả dụng là các mức log dưới dạng chuỗi: "debug", "info", "warning", "error" và "critical", cùng với mức "passive" không thiết lập gì và để ứng dụng tự đặt mức.
  • report_to (str hoặc list[str], tùy chọn, mặc định là "none") — Danh sách các tích hợp để báo cáo kết quả và nhật ký. Các nền tảng được hỗ trợ là "azure_ml", "clearml", "codecarbon", "comet_ml", "dagshub", "dvclive", "flyte", "mlflow", "swanlab", "tensorboard", "trackio" và "wandb". Sử dụng "all" để báo cáo cho tất cả các tích hợp đã cài đặt, "none" cho trường hợp không có tích hợp nào.
  • first_step (bool, tùy chọn, mặc định là False) — Có ghi log và đánh giá global_step đầu tiên hay không.
  • nan_inf_filter (bool, tuỳ chọn, mặc định là True) — Có lọc nan và inf loss để ghi log hay không. Nếu đặt là True loss của mỗi bước là nan hoặc inf sẽ được lọc và thay thế bằng loss trung bình của cửa sổ ghi log hiện tại.

    nan_inf_filter chỉ ảnh hưởng đến việc ghi log các giá trị loss, nó không thay đổi cách gradient được tính toán hoặc áp dụng cho mô hình.

  • on_each_node (bool, tùy chọn, mặc định là True) — Trong huấn luyện phân tán đa nút, có nên ghi log bằng log_level một lần cho mỗi nút hay chỉ trên nút chính.
  • replica_level (str, tùy chọn, mặc định là "passive") — Mức độ ghi log của logger để sử dụng trên các bản sao. Các lựa chọn giống như log_level

Một phương thức nhóm lại tất cả các đối số liên quan đến ghi log.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_logging(strategy="steps", steps=100)
>>> args.logging_steps
100

set_lr_scheduler

< >

( name: str | transformers.trainer_utils.SchedulerType = 'linear'num_epochs: float = 3.0max_steps: int = -1warmup_steps: float = 0 )

Tham số

  • name (str hoặc SchedulerType, tuỳ chọn, mặc định là "linear") — Loại scheduler cần sử dụng. Xem tài liệu của SchedulerType để biết tất cả các giá trị có thể.
  • num_epochs(float, tuỳ chọn, mặc định là 3.0) — Tổng số epoch huấn luyện cần thực hiện (nếu không phải số nguyên, sẽ thực hiện phần thập phân theo phần trăm của epoch cuối trước khi dừng huấn luyện).
  • max_steps (int, tùy chọn, mặc định là -1) — Nếu được đặt thành một số dương, đây là tổng số bước huấn luyện cần thực hiện. Tham số này ghi đè lên num_train_epochs. Đối với một tập dữ liệu hữu hạn, quá trình huấn luyện sẽ lặp lại qua tập dữ liệu (nếu toàn bộ dữ liệu đã được dùng hết) cho đến khi đạt đến max_steps. Tham số này phải được đặt thành một giá trị dương khi tập dữ liệu huấn luyện không triển khai __len__ (ví dụ: một tập dữ liệu streaming), vì khi đó tổng số bước không thể suy ra được và là bắt buộc để giới hạn vòng lặp huấn luyện và cấu hình trình lập lịch tốc độ học.
  • warmup_steps (float, tùy chọn, mặc định là 0) — Số bước được sử dụng cho quá trình tăng dần tuyến tính từ 0 đến learning_rate. Phải là một số nguyên hoặc một số float trong khoảng [0,1). Nếu nhỏ hơn 1, giá trị này sẽ được hiểu là tỷ lệ số bước được sử dụng cho quá trình tăng dần tuyến tính từ 0 đến learning_rate.

Một phương thức nhóm lại tất cả các đối số liên quan đến trình lập lịch tốc độ học và các siêu tham số của nó.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_lr_scheduler(name="cosine", warmup_steps=0.05)
>>> args.warmup_steps
0.05

set_optimizer

< >

( name: str | transformers.training_args.OptimizerNames = 'adamw_torch'learning_rate: float = 5e-05weight_decay: float = 0beta1: float = 0.9beta2: float = 0.999epsilon: float = 1e-08args: str | None = None )

Tham số

  • name (str hoặc training_args.OptimizerNames, tùy chọn, mặc định là "adamw_torch") — Bộ tối ưu hóa cần sử dụng: "adamw_torch", "adamw_torch_fused", "adamw_anyprecision" hoặc "adafactor".
  • learning_rate (float, tùy chọn, mặc định là 5e-5) — Tốc độ học ban đầu.
  • weight_decay (float, tùy chọn, mặc định là 0) — Hệ số suy giảm trọng số (nếu khác 0) được áp dụng cho tất cả các lớp, ngoại trừ trọng số của tất cả các bias và LayerNorm.
  • beta1 (float, tùy chọn, mặc định là 0.9) — Siêu tham số beta1 cho bộ tối ưu adam hoặc các biến thể của nó.
  • beta2 (float, tùy chọn, mặc định là 0.999) — Siêu tham số beta2 cho bộ tối ưu adam hoặc các biến thể của nó.
  • epsilon (float, tùy chọn, mặc định là 1e-8) — Siêu tham số epsilon cho bộ tối ưu adam hoặc các biến thể của nó.
  • args (str, tùy chọn) — Các đối số tùy chọn được cung cấp cho AnyPrecisionAdamW (chỉ hữu ích khi optim="adamw_anyprecision").

Một phương thức nhóm lại tất cả các đối số liên quan đến bộ tối ưu hóa và các siêu tham số của nó.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_optimizer(name="adamw_torch", beta1=0.8)
>>> args.optim
'adamw_torch'

set_push_to_hub

< >

( model_id: strstrategy: str | transformers.trainer_utils.HubStrategy = 'every_save'token: str | None = Noneprivate_repo: bool | None = Nonealways_push: bool = Falserevision: str | None = None )

Tham số

  • model_id (str) — Tên của kho cần đồng bộ với output_dir cục bộ. Nó có thể là một model ID đơn giản, trong trường hợp đó model sẽ được đẩy vào namespace của bạn. Ngược lại, nó phải là tên kho đầy đủ, ví dụ "user_name/model", cho phép bạn đẩy vào một tổ chức mà bạn là thành viên bằng "organization_name/model".
  • strategy (str hoặc HubStrategy, tuỳ chọn, mặc định là "every_save") — Xác định phạm vi của những gì được đẩy lên Hub và thời điểm thực hiện. Các giá trị có thể là:
    • "end": đẩy model, cấu hình của nó, processing_class ví dụ tokenizer (nếu được truyền vào Trainer) và bản nháp model card khi phương thức save_model() được gọi.
    • "every_save": đẩy model, cấu hình của nó, processing_class (ví dụ tokenizer, nếu được truyền vào Trainer) và một bản nháp của model card mỗi khi có thao tác lưu model. Các thao tác đẩy được thực hiện bất đồng bộ để không chặn quá trình huấn luyện, và nếu việc lưu diễn ra rất thường xuyên, một thao tác đẩy mới chỉ được thực hiện khi thao tác trước đó đã hoàn tất. Một thao tác đẩy cuối cùng sẽ được thực hiện với model cuối cùng khi kết thúc huấn luyện.
    • "checkpoint": giống như "every_save" nhưng checkpoint mới nhất cũng được đẩy vào một thư mục con có tên là last-checkpoint, cho phép bạn tiếp tục huấn luyện một cách dễ dàng với trainer.train(resume_from_checkpoint="last-checkpoint").
    • "all_checkpoints": giống như "checkpoint" nhưng tất cả các checkpoint được đẩy lên theo đúng thứ tự xuất hiện trong thư mục đầu ra (do đó bạn sẽ nhận được một thư mục checkpoint cho mỗi thư mục trong kho lưu trữ cuối cùng của bạn)
  • token (str, tùy chọn) — Token được sử dụng để đẩy mô hình lên Hub. Mặc định sẽ dùng token trong thư mục cache được lấy bằng hf auth login.
  • private_repo (bool, tùy chọn, mặc định là False) — Có nên đặt kho thành riêng tư hay không. Nếu là None (mặc định), kho sẽ là công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại.
  • always_push (bool, tùy chọn, mặc định là False) — Trừ khi giá trị này là True, Trainer sẽ bỏ qua việc đẩy checkpoint nếu lần đẩy trước đó chưa hoàn tất.
  • revision (str, tùy chọn) — Phiên bản (revision) cần sử dụng khi đẩy lên Hub. Có thể là tên nhánh, thẻ (tag) hoặc mã băm (hash) của commit.

Một phương thức nhóm lại tất cả các đối số liên quan đến việc đồng bộ hóa checkpoint với Hub.

Việc gọi phương thức này sẽ đặt self.push_to_hub thành True, điều này có nghĩa là output_dir sẽ bắt đầu một thư mục git được đồng bộ với kho (được xác định bởi model_id) và nội dung sẽ được đẩy lên mỗi khi một thao tác lưu được kích hoạt (tùy thuộc vào self.save_strategy của bạn). Việc gọi save_model() cũng sẽ kích hoạt một lần đẩy.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_push_to_hub("me/awesome-model")
>>> args.hub_model_id
'me/awesome-model'

set_save

< >

( strategy: str | transformers.trainer_utils.IntervalStrategy = 'steps'steps: int = 500total_limit: int | None = Noneon_each_node: bool = False )

Tham số

  • strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "steps") — Chiến lược lưu checkpoint áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không thực hiện lưu trong quá trình huấn luyện.
    • "epoch": Việc lưu được thực hiện vào cuối mỗi epoch.
    • "steps": Việc lưu được thực hiện mỗi save_steps.
  • steps (int, tùy chọn, mặc định là 500) — Số bước cập nhật trước khi lưu hai checkpoint nếu strategy="steps".
  • total_limit (int, tùy chọn) — Nếu có truyền giá trị, sẽ giới hạn tổng số checkpoint. Các checkpoint cũ hơn trong output_dir sẽ bị xóa.
  • on_each_node (bool, tùy chọn, mặc định là False) — Khi huấn luyện phân tán đa nút, có nên lưu mô hình và checkpoint trên mỗi nút hay chỉ trên nút chính hay không.

    Không nên kích hoạt tính năng này khi các node khác nhau sử dụng cùng một bộ lưu trữ, vì các tệp sẽ được lưu với cùng tên trên mỗi node.

Một phương thức nhóm lại tất cả các đối số liên quan đến việc lưu checkpoint.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_save(strategy="steps", steps=100)
>>> args.save_steps
100

set_testing

< >

( batch_size: int = 8loss_only: bool = False )

Tham số

  • batch_size (int tùy chọn, mặc định là 8) — Kích thước batch trên mỗi thiết bị (GPU/lõi TPU/CPU…) được sử dụng để kiểm thử.
  • loss_only (bool, tùy chọn, mặc định là False) — Bỏ qua tất cả các đầu ra ngoại trừ loss.

Một phương pháp nhóm lại tất cả các đối số cơ bản liên quan đến việc kiểm tra trên một tập dữ liệu giữ lại.

Gọi phương thức này sẽ tự động đặt self.do_predict thành True.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_testing(batch_size=32)
>>> args.per_device_eval_batch_size
32

set_training

< >

( learning_rate: float = 5e-05batch_size: int = 8weight_decay: float = 0num_epochs: float = 3max_steps: int = -1gradient_accumulation_steps: int = 1seed: int = 42activation_checkpointing: bool = Falsegradient_checkpointing: bool | None = None )

Tham số

  • learning_rate (float, tùy chọn, mặc định là 5e-5) — Tốc độ học ban đầu cho bộ tối ưu.
  • batch_size (int tùy chọn, mặc định là 8) — Kích thước batch trên mỗi thiết bị (GPU/lõi TPU/CPU…) được sử dụng cho huấn luyện.
  • weight_decay (float, tùy chọn, mặc định là 0) — Hệ số suy giảm trọng số (nếu khác 0) được áp dụng cho tất cả các lớp, ngoại trừ trọng số của tất cả các bias và LayerNorm, trong bộ tối ưu hóa.
  • num_epochs (float, tùy chọn, mặc định là 3.0) — Tổng số epoch huấn luyện cần thực hiện (nếu không phải số nguyên, sẽ thực hiện phần thập phân theo phần trăm của epoch cuối trước khi dừng huấn luyện).
  • max_steps (int, tùy chọn, mặc định là -1) — Nếu được đặt thành một số dương, đây là tổng số bước huấn luyện cần thực hiện. Tham số này ghi đè lên num_train_epochs. Đối với một tập dữ liệu hữu hạn, quá trình huấn luyện sẽ lặp lại qua tập dữ liệu (nếu toàn bộ dữ liệu đã được dùng hết) cho đến khi đạt đến max_steps. Tham số này phải được đặt thành một giá trị dương khi tập dữ liệu huấn luyện không triển khai __len__ (ví dụ: một tập dữ liệu streaming), vì khi đó tổng số bước không thể suy ra được và là bắt buộc để giới hạn vòng lặp huấn luyện và cấu hình trình lập lịch tốc độ học.
  • gradient_accumulation_steps (int, tuỳ chọn, mặc định là 1) — Số bước cập nhật để tích lũy gradient trước khi thực hiện một lượt backward/update.

    Khi sử dụng gradient accumulation, một bước được tính là một bước có backward pass. Do đó, logging, evaluation, save sẽ được thực hiện mỗi gradient_accumulation_steps * xxx_step ví dụ huấn luyện.

  • seed (int, tùy chọn, mặc định là 42) — Hạt ngẫu nhiên sẽ được đặt ở đầu quá trình huấn luyện. Để đảm bảo khả năng tái lập giữa các lần chạy, hãy sử dụng hàm ~Trainer.model_init để khởi tạo mô hình nếu nó có một số tham số được khởi tạo ngẫu nhiên.
  • activation_checkpointing (bool, tùy chọn, mặc định là False) — Nếu là True, sử dụng activation checkpointing để tiết kiệm bộ nhớ với chi phí là quá trình backward chậm hơn.
  • gradient_checkpointing (bool, tùy chọn) — Biệt danh đã ngừng hỗ trợ của activation_checkpointing, sẽ bị loại bỏ trong v6.

Một phương thức nhóm lại tất cả các đối số cơ bản liên quan đến quá trình huấn luyện.

Gọi phương thức này sẽ tự động đặt self.do_train thành True.

Ví dụ:

>>> from transformers import TrainingArguments

>>> args = TrainingArguments("working_dir")
>>> args = args.set_training(learning_rate=1e-4, batch_size=32)
>>> args.learning_rate
1e-4

to_dict

< >

( )

Thực hiện serialize instance này trong khi thay thế Enum bằng giá trị của chúng (để hỗ trợ serialize JSON). Nó làm mờ các giá trị token bằng cách xóa giá trị của chúng.

to_json_string

< >

( )

Chuẩn hóa bản thể này thành một chuỗi JSON.

to_sanitized_dict

< >

( )

Chuẩn hóa chuỗi hóa để sử dụng với hparams của TensorBoard

Seq2SeqTrainingArguments

lớp transformers.Seq2SeqTrainingArguments

< >

( output_dir: str | None = Noneper_device_train_batch_size: int = 8num_train_epochs: float = 3.0max_steps: int = -1learning_rate: float = 5e-05lr_scheduler_type: transformers.trainer_utils.SchedulerType | str = 'linear'lr_scheduler_kwargs: dict | str | None = Nonewarmup_steps: float = 0optim: transformers.training_args.OptimizerNames | str = 'adamw_torch_fused'optim_args: str | None = Noneweight_decay: float = 0.0adam_beta1: float = 0.9adam_beta2: float = 0.999adam_epsilon: float = 1e-08optim_target_modules: None | str | list[str] = Nonegradient_accumulation_steps: int = 1average_tokens_across_devices: bool = Truemax_grad_norm: float = 1.0label_smoothing_factor: float = 0.0bf16: bool = Falsefp16: bool = Falsebf16_full_eval: bool = Falsefp16_full_eval: bool = Falsetf32: bool | None = Noneactivation_checkpointing: bool | None = Noneactivation_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonegradient_checkpointing: bool | None = Nonegradient_checkpointing_kwargs: dict[str, typing.Any] | str | None = Nonetorch_compile: bool = Falsetorch_compile_backend: str | None = Nonetorch_compile_mode: str | None = Noneuse_liger_kernel: bool = Falseliger_kernel_config: dict[str, bool] | None = Noneuse_cache: bool = Falseneftune_noise_alpha: float | None = Nonetorch_empty_cache_steps: int | None = Noneauto_find_batch_size: bool = Falselogging_strategy: transformers.trainer_utils.IntervalStrategy | str = 'steps'logging_steps: float = 500logging_first_step: bool = Falselog_on_each_node: bool = Truelogging_nan_inf_filter: bool = Trueinclude_num_input_tokens_seen: str | bool = 'no'log_level: str = 'passive'log_level_replica: str = 'warning'disable_tqdm: bool | None = Nonereport_to: None | str | list[str] = 'none'run_name: str | None = Noneproject: str = 'huggingface'trackio_space_id: str | None = Nonetrackio_bucket_id: str | None = Nonetrackio_static_space_id: typing.Union[str, NoneType, typing.Literal[False]] = Noneeval_strategy: transformers.trainer_utils.IntervalStrategy | str = 'no'eval_steps: float | None = Noneeval_delay: float = 0per_device_eval_batch_size: int = 8prediction_loss_only: bool = Falseeval_on_start: bool = Falseeval_do_concat_batches: bool = Trueeval_use_gather_object: bool = Falseeval_accumulation_steps: int | None = Noneinclude_for_metrics: list = <factory>batch_eval_metrics: bool = Falsesave_only_model: bool = Falsesave_strategy: transformers.trainer_utils.SaveStrategy | str = 'steps'save_steps: float = 500save_on_each_node: bool = Falsesave_total_limit: int | None = Noneenable_jit_checkpoint: bool = Falsepush_to_hub: bool = Falsehub_token: str | None = Nonehub_private_repo: bool | None = Nonehub_model_id: str | None = Nonehub_strategy: transformers.trainer_utils.HubStrategy | str = 'every_save'hub_always_push: bool = Falsehub_revision: str | None = Noneload_best_model_at_end: bool = Falsemetric_for_best_model: str | None = Nonegreater_is_better: bool | None = Noneignore_data_skip: bool = Falserestore_callback_states_from_checkpoint: bool = Falsefull_determinism: bool = Falseseed: int = 42data_seed: int | None = Noneuse_cpu: bool = Falseaccelerator_config: dict | str | None = Noneparallelism_config: typing.Any | None = Nonedataloader_drop_last: bool = Falsedataloader_num_workers: int = 0dataloader_pin_memory: bool = Truedataloader_persistent_workers: bool = Falsedataloader_prefetch_factor: int | None = Nonedataloader_multiprocessing_context: str | None = Nonedataloader_in_order: bool = Trueremove_unused_columns: bool = Truelabel_names: list[str] | None = Nonetrain_sampling_strategy: str = 'random'length_column_name: str = 'length'ddp_find_unused_parameters: bool | None = Noneddp_bucket_cap_mb: int | None = Noneddp_broadcast_buffers: bool | None = Noneddp_static_graph: bool | None = Noneddp_backend: str | None = Noneddp_timeout: int = 1800fsdp: str | None = Nonefsdp_config: dict[str, typing.Any] | str | None = Nonedeepspeed: dict | str | None = Nonedebug: str | list[transformers.debug_utils.DebugOption] = ''skip_memory_metrics: bool = Truedo_train: bool = Falsedo_eval: bool = Falsedo_predict: bool = Falseresume_from_checkpoint: str | None = Nonelocal_rank: int = -1sortish_sampler: bool = Falsepredict_with_generate: bool = Falsegeneration_max_length: int | None = Nonegeneration_num_beams: int | None = Nonegeneration_config: str | pathlib.Path | transformers.generation.configuration_utils.GenerationConfig | None = None )

Tham số

  • output_dir (str, tùy chọn, mặc định là "trainer_output") — Thư mục đầu ra, nơi các dự đoán của mô hình và các checkpoint sẽ được ghi.

Thời gian huấn luyện và kích thước lô

  • per_device_train_batch_size (int, tùy chọn, mặc định là 8) — Kích thước lô trên mỗi thiết bị. Kích thước lô toàn cục được tính là: per_device_train_batch_size * number_of_devices trong các cấu hình đa GPU hoặc phân tán.
  • num_train_epochs(float, tuỳ chọn, mặc định là 3.0) — Tổng số epoch huấn luyện cần thực hiện (nếu không phải số nguyên, sẽ thực hiện phần thập phân theo phần trăm của epoch cuối trước khi dừng huấn luyện).
  • max_steps (int, tùy chọn, mặc định là -1) — Ghi đè num_train_epochs. Nếu được đặt thành một số dương, đây là tổng số bước huấn luyện cần thực hiện. Đối với một tập dữ liệu hữu hạn, quá trình huấn luyện sẽ lặp lại qua tập dữ liệu (nếu toàn bộ dữ liệu đã được dùng hết) cho đến khi đạt max_steps. Tham số này phải được đặt thành một giá trị dương khi tập dữ liệu huấn luyện không triển khai __len__ (ví dụ: một tập dữ liệu streaming), vì khi đó tổng số bước không thể suy ra được và là bắt buộc để giới hạn vòng lặp huấn luyện và cấu hình trình lập lịch tốc độ học.

Tốc độ học & Bộ lập lịch

  • learning_rate (float, tùy chọn, mặc định là 5e-5) — Tốc độ học ban đầu cho bộ tối ưu. Đây thường là tốc độ học đỉnh khi sử dụng trình lập lịch có giai đoạn làm nóng (warmup).
  • lr_scheduler_type (str hoặc SchedulerType, tùy chọn, mặc định là "linear") — Loại trình điều khiển tốc độ học (learning rate scheduler) cần sử dụng. Xem SchedulerType để biết tất cả các giá trị khả dụng. Các lựa chọn phổ biến:
  • lr_scheduler_kwargs (dict hoặc str, tùy chọn, mặc định là None) — Các đối số bổ sung cho lr_scheduler. Xem tài liệu của từng scheduler để biết các giá trị có thể.
  • warmup_steps (int hoặc float, tùy chọn, mặc định là 0) — Số bước cho quá trình warmup tuyến tính từ 0 đến learning_rate. Warmup giúp ổn định quá trình huấn luyện trong giai đoạn đầu. Có thể là:
    • Một số nguyên: số bước khởi động chính xác
    • Một số float trong khoảng [0, 1): được hiểu là tỷ lệ so với tổng số bước huấn luyện

Trình tối ưu

  • optim (str hoặc training_args.OptimizerNames, tuỳ chọn, mặc định là "adamw_torch" (đối với torch>=2.8 "adamw_torch_fused")) — Bộ tối ưu cần sử dụng. Các lựa chọn phổ biến:
    • "adamw_torch": AdamW của PyTorch (mặc định được khuyến nghị)
    • "adamw_torch_fused": Lõi AdamW đã hợp nhất
    • "adamw_hf": Bản triển khai AdamW của HuggingFace
    • "sgd": Stochastic Gradient Descent có momentum
    • "adafactor": Bộ tối ưu hóa tiết kiệm bộ nhớ cho các mô hình lớn
    • "adamw_8bit": AdamW 8-bit (yêu cầu bitsandbytes) Xem OptimizerNames để biết danh sách đầy đủ.
  • optim_args (str, tùy chọn) — Các đối số tùy chọn được cung cấp cho các bộ tối ưu hóa như AnyPrecisionAdamW, AdEMAMix và GaLore.
  • weight_decay (float, tùy chọn, mặc định là 0) — Hệ số suy giảm trọng số được áp dụng bởi bộ tối ưu (không phải hàm mất mát). Thêm quy tắc hóa L2 để ngăn chặn quá khớp bằng cách phạt các trọng số lớn. Tự động loại trừ khỏi các tham số bias và LayerNorm. Các giá trị điển hình: 0.01 (chuẩn), 0.1 (quy tắc hóa mạnh hơn), 0.0 (không quy tắc hóa).
  • adam_beta1 (float, tùy chọn, mặc định là 0.9) — Tốc độ suy giảm mũ cho các ước lượng moment thứ nhất (momentum) trong các optimizer dựa trên Adam. Kiểm soát mức độ lịch sử gradient được giữ lại.
  • adam_beta2 (float, tùy chọn, mặc định là 0.999) — Tốc độ suy giảm mũ cho các ước lượng mô-men thứ hai (phương sai) trong các bộ tối ưu hóa dựa trên Adam. Kiểm soát việc điều chỉnh tỷ lệ học thích ứng.
  • adam_epsilon (float, tùy chọn, mặc định là 1e-8) — Giá trị epsilon cho sự ổn định số trong các bộ tối ưu hóa dựa trên Adam. Ngăn chặn việc chia cho số 0 ở mẫu số của quy tắc cập nhật.
  • optim_target_modules (Union[str, list[str]], tùy chọn) — Các module đích cần tối ưu hóa, tức là tên các module mà bạn muốn huấn luyện. Hiện được sử dụng cho thuật toán GaLore và thuật toán APOLLO. Xem cài đặt GaLore và cài đặt APOLLO để biết thêm chi tiết. Bạn cần đảm bảo truyền một optimizer GaLore hoặc APOLLO hợp lệ, ví dụ một trong các lựa chọn: “apollo_adamw”, “galore_adamw”, “galore_adamw_8bit”, “galore_adafactor” và đảm bảo rằng các module đích chỉ là các module nn.Linear.

Điều hòa & Ổn định huấn luyện

  • gradient_accumulation_steps (int, tuỳ chọn, mặc định là 1) — Số bước cập nhật để tích lũy gradient trước khi thực hiện một lượt backward/update. Mô phỏng kích thước batch lớn hơn mà không cần thêm bộ nhớ. Kích thước batch hiệu dụng = per_device_train_batch_size × num_devices × gradient_accumulation_steps.

    Khi sử dụng gradient accumulation, một “step” được tính là một bước có backward pass. Do đó, việc ghi log, đánh giá và lưu sẽ diễn ra mỗi gradient_accumulation_steps × xxx_step ví dụ huấn luyện.

  • average_tokens_across_devices (bool, tùy chọn, mặc định là True) — Có trung bình hóa token giữa các thiết bị hay không. Nếu bật, sẽ sử dụng all_reduce để đồng bộ hóa num_tokens_in_batch nhằm tính toán loss chính xác. Tham khảo: https://github.com/huggingface/transformers/issues/34242
  • max_grad_norm (float, tùy chọn, mặc định là 1.0) — Chuẩn gradient tối đa cho việc cắt gradient. Được áp dụng sau bước truyền ngược, trước bước tối ưu hóa. Ngăn chặn hiện tượng bùng nổ gradient bằng cách thu nhỏ gradient khi chuẩn toàn cục của chúng vượt quá ngưỡng này. Đặt thành 0 để tắt việc cắt. Các giá trị điển hình: 1.0 (chuẩn), 0.5 (thận trọng hơn), 5.0 (ít quyết liệt hơn).
  • label_smoothing_factor (float, tùy chọn, mặc định là 0.0) — Hệ số làm mịn nhãn để ngăn ngừa sự tự tin quá mức. Thay thế các mục tiêu cứng 0/1 bằng các mục tiêu mềm: 0 trở thành ε/num_labels và 1 trở thành 1 - ε + ε/num_labels, trong đó ε = label_smoothing_factor. Giá trị 0 có nghĩa là không làm mịn. Khoảng điển hình: từ 0.0 đến 0.1.

Huấn luyện độ chính xác hỗn hợp

  • bf16 (bool, tùy chọn, mặc định là False) — Bật huấn luyện độ chính xác hỗn hợp bfloat16 (BF16) Thường được ưu tiên hơn FP16 do có độ ổn định số tốt hơn và không cần bù trừ độ mất mát (loss scaling).
  • fp16 (bool, tùy chọn, mặc định là False) — Bật huấn luyện độ chính xác hỗn hợp float16 (FP16). Hãy cân nhắc sử dụng BF16 thay thế nếu phần cứng của bạn hỗ trợ.
  • bf16_full_eval (bool, tuỳ chọn, mặc định là False) — Sử dụng độ chính xác BF16 đầy đủ cho đánh giá (không chỉ độ chính xác hỗn hợp). Nhanh hơn và tiết kiệm bộ nhớ nhưng có thể ảnh hưởng nhẹ đến giá trị các chỉ số. Chỉ áp dụng trong quá trình đánh giá.
  • fp16_full_eval (bool, tùy chọn, mặc định là False) — Sử dụng độ chính xác FP16 đầy đủ cho đánh giá (không chỉ là độ chính xác hỗn hợp). Nhanh hơn và tiết kiệm bộ nhớ nhưng có thể ảnh hưởng nhẹ đến giá trị các chỉ số. Chỉ áp dụng trong quá trình đánh giá.
  • tf32 (bool, tùy chọn) — Bật chế độ TensorFloat-32 (TF32) trên các GPU Ampere và mới hơn. TF32 sử dụng độ chính xác 19-bit cho các phép nhân ma trận (thay vì 23-bit của FP32), mang lại tốc độ tăng lên đến 8 lần với sự suy giảm độ chính xác không đáng kể. Giá trị mặc định phụ thuộc vào phiên bản PyTorch. Xem tài liệu TF32.

Kiểm tra kích hoạt

  • activation_checkpointing (bool, tùy chọn, mặc định là False) — Bật activation checkpointing để đánh đổi hiệu suất tính toán lấy bộ nhớ. Giảm mức sử dụng bộ nhớ bằng cách xóa các activation trong quá trình forward và tính lại chúng trong quá trình backward. Cho phép huấn luyện các mô hình hoặc kích thước batch lớn hơn với chi phí là tốc độ huấn luyện chậm hơn khoảng 20%.
  • activation_checkpointing_kwargs (dict, tùy chọn, mặc định là None) — Các đối số dạng từ khóa được truyền cho activation_checkpointing_enable(). every_n_layers chỉ checkpoint mỗi n lớp decoder thay vì tất cả; 1 là hành vi tất cả hoặc không thông thường, và các giá trị lớn hơn trao đổi một phần bộ nhớ lấy tốc độ. offload giữ các activation đã lưu trong bộ nhớ host dạng pinned, giúp giải phóng layers x sequence x hidden byte bộ nhớ thiết bị nhưng làm chậm bước tính toán. Bất kỳ khóa nào khác đều được chuyển tiếp đến torch.utils.checkpoint.checkpoint.
  • gradient_checkpointing (bool, tùy chọn) — Biệt danh đã ngừng hỗ trợ của activation_checkpointing, sẽ bị loại bỏ trong v6.
  • gradient_checkpointing_kwargs (dict, tùy chọn) — Biệt danh đã ngừng hỗ trợ của activation_checkpointing_kwargs, sẽ bị loại bỏ trong v6.

Biên dịch

  • torch_compile (bool, tùy chọn, mặc định là False) — Biên dịch mô hình bằng torch.compile() của PyTorch 2.0 để huấn luyện nhanh hơn. Có thể tăng tốc độ 20-50% mà không cần thay đổi mã. Sử dụng cài đặt biên dịch mặc định trừ khi chỉ định torch_compile_backend hoặc torch_compile_mode.
  • torch_compile_backend (str, tuỳ chọn) — Backend cho torch.compile(). Nếu được đặt, sẽ tự động bật torch_compile. Các lựa chọn bao gồm "inductor" (mặc định), "aot_eager", "cudagraphs". Các backend khác nhau tùy theo phiên bản PyTorch - xem tài liệu PyTorch để biết các tùy chọn khả dụng.
  • torch_compile_mode (str, tùy chọn) — Chế độ biên dịch cho torch.compile(). Nếu được đặt, sẽ tự động bật torch_compile. Các tùy chọn: "default", "reduce-overhead" (giảm thiểu overhead của Python), "max-autotune" (tối ưu hóa mạnh mẽ, thời gian biên dịch chậm hơn).

Kernels

  • use_liger_kernel (bool, tùy chọn, mặc định là False) — Bật các tối ưu hóa Liger Kernel. Tăng thông lượng đa GPU khoảng 20% và giảm mức sử dụng bộ nhớ khoảng 60%. Hoạt động với Flash Attention, FSDP và DeepSpeed. Hiện hỗ trợ các mô hình Llama, Mistral, Mixtral và Gemma.
  • liger_kernel_config (Optional[dict], tùy chọn) — Cấu hình cho Liger Kernel. Được truyền dưới dạng kwargs cho _apply_liger_kernel_to_instance(). Các tùy chọn thường bao gồm: "rope", "swiglu", "cross_entropy", "fused_linear_cross_entropy", "rms_norm". Nếu là None, sẽ sử dụng cấu hình mặc định.

Tối ưu hóa bổ sung

  • use_cache (bool, tùy chọn, mặc định là False) — Có bật bộ nhớ đệm cho mô hình hay không. Đối với huấn luyện, điều này thường không cần thiết, ngoại trừ một số phương pháp PEFT sử dụng past_key_values.
  • neftune_noise_alpha (Optional[float]) — Nếu không phải None, tham số này sẽ kích hoạt nhúng nhiễu NEFTune. Điều này có thể cải thiện đáng kể hiệu suất của mô hình trong quá trình tinh chỉnh theo hướng dẫn. Xem bài báo gốc và mã nguồn gốc. Hỗ trợ PreTrainedModel của transformers và cả PeftModel từ peft. Bài báo gốc sử dụng các giá trị trong khoảng [5.0, 15.0].
  • torch_empty_cache_steps (int, tùy chọn) — Số bước cần chờ trước khi gọi torch.<device>.empty_cache(). Nếu không được đặt hoặc được đặt thành None, bộ nhớ đệm sẽ không được làm trống. Điều này có thể giúp tránh các lỗi hết bộ nhớ CUDA bằng cách giảm mức sử dụng VRAM cao nhất, với chi phí là hiệu suất chậm hơn khoảng 10%.
  • auto_find_batch_size (bool, tùy chọn, mặc định là False) — Có nên tự động tìm kích thước lô (batch size) huấn luyện phù hợp với bộ nhớ thông qua suy giảm mũ, tránh các lỗi CUDA Out-of-Memory hay không. Kích thước lô đánh giá sẽ không được điều chỉnh.

Ghi log & Giám sát huấn luyện

  • logging_strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "steps") — Chiến lược ghi log cần áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không ghi nhật ký trong quá trình huấn luyện.
    • "epoch": Việc ghi log được thực hiện vào cuối mỗi epoch.
    • "steps": Việc ghi log được thực hiện mỗi logging_steps.
  • logging_steps (int hoặc float, tùy chọn, mặc định là 500) — Số bước cập nhật giữa hai lần ghi log nếu logging_strategy="steps". Phải là một số nguyên hoặc một số thực trong khoảng [0,1). Nếu nhỏ hơn 1, sẽ được hiểu là tỷ lệ so với tổng số bước huấn luyện.
  • logging_first_step (bool, tùy chọn, mặc định là False) — Có ghi log bước global_step đầu tiên hay không.
  • log_on_each_node (bool, tùy chọn, mặc định là True) — Trong huấn luyện phân tán đa nút, có nên ghi log bằng log_level một lần cho mỗi nút hay chỉ trên nút chính.
  • logging_nan_inf_filter (bool, tùy chọn, mặc định là True) — Lọc các giá trị loss NaN và Inf khi ghi log. Nếu True, sẽ thay thế các loss huấn luyện NaN/Inf bằng trung bình của các loss hợp lệ gần nhất, và loại trừ các batch NaN/Inf (ví dụ: các batch không có token nhãn) khỏi loss đánh giá. Không ảnh hưởng đến việc tính toán gradient, chỉ ảnh hưởng đến ghi log.
  • include_num_input_tokens_seen (Optional[Union[str, bool]], tùy chọn, mặc định là “no”) — Có theo dõi số lượng token đầu vào đã nhìn thấy hay không. Phải là một trong [“all”, “non_padding”, “no”] hoặc một giá trị boolean, tương ứng với “all” hoặc “no”. Có thể chậm hơn trong huấn luyện phân tán vì phải gọi các thao tác gather.

Ghi nhật ký

  • log_level (str, tùy chọn, mặc định là passive) — Mức độ ghi log cho tiến trình chính. Các tùy chọn: "debug", "info", "warning", "error", "critical", hoặc "passive" (không thay đổi mức độ ghi log hiện tại của Transformers, mặc định là "warning")
  • log_level_replica (str, tùy chọn, mặc định là "warning") — Mức ghi log cho các tiến trình bản sao trong huấn luyện phân tán. Các tùy chọn giống với log_level.
  • disable_tqdm (bool, tùy chọn) — Tắt các thanh tiến trình tqdm. Mặc định là True nếu log_level là warning hoặc thấp hơn, False trong các trường hợp khác.

Tích hợp theo dõi thí nghiệm

  • report_to (str hoặc list[str], tùy chọn, mặc định là "none") — Danh sách các tích hợp để báo cáo kết quả và nhật ký. Các nền tảng được hỗ trợ là "azure_ml", "clearml", "codecarbon", "comet_ml", "dagshub", "dvclive", "flyte", "mlflow", "swanlab", "tensorboard", "trackio" và "wandb". Sử dụng "all" để báo cáo cho tất cả các tích hợp đã cài đặt, "none" để không sử dụng tích hợp nào.
  • run_name (str, tùy chọn) — Mô tả cho lần chạy. Thường được sử dụng cho ghi log trackio, wandb, mlflow, comet và swanlab.
  • project (str, tùy chọn, mặc định là "huggingface") — Tên của dự án được sử dụng cho việc ghi log. Hiện tại, chỉ được sử dụng bởi Trackio.
  • trackio_space_id (str hoặc None, tùy chọn, mặc định là None) — ID của Hugging Face Space được sử dụng để ghi log Trackio trực tiếp với một Space dựa trên Gradio. Nên là tên Space đầy đủ như 'username/reponame' hoặc 'orgname/reponame', hoặc chỉ cần 'reponame' (Space sẽ được tạo trong namespace của người dùng đang đăng nhập). Nếu là None, các chỉ số sẽ chỉ được ghi vào một thư mục cục bộ (không có Space trên Hub). Gradio Space đó có quyền đọc và ghi vào Bucket của Trackio, đây là điều bạn cần khi quá trình huấn luyện đang diễn ra—ví dụ khi tiếp tục một lần chạy chưa hoàn tất hoặc tổng hợp log từ nhiều máy. Space sẽ là công khai trừ khi bạn đặt hub_private_repo=True hoặc mặc định của tổ chức bạn là tạo các Space riêng tư.
  • trackio_bucket_id (str hoặc None, tùy chọn, mặc định là None) — Bucket id tùy chọn của Hugging Face cho Trackio. Nếu không được đặt, Trackio sẽ tự suy ra một id. Được sử dụng cùng với một Gradio Space (trackio_space_id) và khi triển khai một Space tĩnh (trackio_static_space_id không phải là False).
  • trackio_static_space_id (str, False, hoặc None, tùy chọn, mặc định là None) — ID của Hugging Face Space sẽ được sử dụng cho static Space được tạo sau khi quá trình huấn luyện hoàn tất. Phải là tên Space đầy đủ như 'username/reponame' hoặc 'orgname/reponame', hoặc chỉ là 'reponame' (Space sẽ được tạo trong namespace của người dùng đang đăng nhập). Nếu là False, sẽ không tạo static Space. Nếu là None và model được đẩy lên Hub, một static Space sẽ được tạo với tên mặc định và liên kết này sẽ được thêm vào model card. Space sẽ là công khai trừ khi bạn đặt hub_private_repo=True hoặc mặc định của tổ chức bạn là tạo các Space riêng tư.

Đánh giá

  • eval_strategy (str hoặc IntervalStrategy, tùy chọn, mặc định là "no") — Thời điểm chạy đánh giá. Các tùy chọn:
    • "no": Không đánh giá trong quá trình huấn luyện
    • "steps": Đánh giá mỗi eval_steps
    • "epoch": Đánh giá vào cuối mỗi epoch
  • eval_steps (int hoặc float, tùy chọn) — Số bước cập nhật giữa hai lần đánh giá nếu eval_strategy="steps". Nếu không được đặt, giá trị mặc định sẽ giống với logging_steps. Phải là một số nguyên hoặc số thực trong khoảng [0,1). Nếu nhỏ hơn 1, sẽ được hiểu là tỷ lệ so với tổng số bước huấn luyện.
  • eval_delay (float, tùy chọn) — Số epoch hoặc bước cần chờ trước khi có thể thực hiện lần đánh giá đầu tiên, tùy thuộc vào eval_strategy.
  • per_device_eval_batch_size (int, tùy chọn, mặc định là 8) — Kích thước lô trên mỗi lõi bộ tăng tốc/CPU của thiết bị để đánh giá.
  • prediction_loss_only (bool, tùy chọn, mặc định là False) — Khi thực hiện đánh giá và tạo dự đoán, chỉ trả về loss.
  • eval_on_start (bool, tùy chọn, mặc định là False) — Có thực hiện một bước đánh giá (kiểm tra tính hợp lệ) trước khi huấn luyện hay không, để đảm bảo các bước xác thực hoạt động chính xác.
  • eval_do_concat_batches (bool, tùy chọn, mặc định là True) — Có nên nối đệ quy các inputs/losses/labels/predictions giữa các batch hay không. Nếu False, thay vào đó sẽ lưu chúng dưới dạng các danh sách, với mỗi batch được giữ riêng biệt.
  • eval_use_gather_object (bool, tùy chọn, mặc định là False) — Có nên chạy gather object đệ quy trên một danh sách/bộ/bộ từ điển lồng nhau các đối tượng từ tất cả các thiết bị hay không. Chỉ nên bật tính năng này nếu người dùng không chỉ trả về các tensor, và điều này đang bị PyTorch khuyến cáo không nên làm. Điều này hữu ích khi cấu trúc nhãn không theo chuẩn, như trong các tác vụ thị giác máy tính.
  • eval_accumulation_steps (int, tùy chọn) — Số bước dự đoán để tích lũy các tensor đầu ra trước khi chuyển kết quả sang CPU. Nếu không được đặt, toàn bộ các dự đoán sẽ được tích lũy trên bộ tăng tốc thiết bị trước khi được chuyển sang CPU (nhanh hơn nhưng yêu cầu nhiều bộ nhớ hơn).

Tính toán chỉ số

  • include_for_metrics (list[str], tùy chọn, mặc định là []) — Bao gồm thêm dữ liệu trong hàm compute_metrics nếu cần cho việc tính toán metrics. Các tùy chọn có thể thêm vào include_for_metrics danh sách:
    • "inputs": Dữ liệu đầu vào được truyền vào mô hình, dùng để tính toán các chỉ số phụ thuộc vào đầu vào.
    • "loss": Các giá trị loss được tính trong quá trình đánh giá, dùng để tính các chỉ số phụ thuộc vào loss.
  • batch_eval_metrics (bool, tùy chọn, mặc định là False) — Nếu đặt thành True, quá trình đánh giá sẽ gọi compute_metrics ở cuối mỗi batch để tích lũy thống kê thay vì lưu tất cả eval logits trong bộ nhớ. Khi đặt thành True, bạn phải truyền một hàm compute_metrics nhận một đối số boolean compute_result, khi được truyền True, sẽ kích hoạt các thống kê tổng hợp toàn cục cuối cùng từ các thống kê tổng hợp cấp batch mà bạn đã tích lũy trên tập đánh giá.

Checkpointing & Saving

  • save_only_model (bool, tùy chọn, mặc định là False) — Chỉ lưu trọng số mô hình, không lưu trạng thái optimizer/scheduler/RNG. Điều này giảm đáng kể kích thước checkpoint nhưng ngăn việc tiếp tục huấn luyện từ checkpoint. Sử dụng khi bạn chỉ cần mô hình đã huấn luyện để suy luận, không cần tiếp tục huấn luyện. Bạn chỉ có thể tải mô hình bằng from_pretrained khi tùy chọn này được đặt thành True.
  • save_strategy (str hoặc SaveStrategy, tuỳ chọn, mặc định là "steps") — Chiến lược lưu checkpoint áp dụng trong quá trình huấn luyện. Các giá trị có thể là:
    • "no": Không thực hiện lưu trong quá trình huấn luyện.
    • "epoch": Việc lưu được thực hiện vào cuối mỗi epoch.
    • "steps": Việc lưu được thực hiện mỗi save_steps.
    • "best": Việc lưu được thực hiện mỗi khi đạt được một best_metric mới.
  • save_steps (int hoặc float, tùy chọn, mặc định là 500) — Số bước cập nhật trước khi lưu hai checkpoint nếu save_strategy="steps". Phải là một số nguyên hoặc một số thực trong khoảng [0,1). Nếu nhỏ hơn 1, sẽ được hiểu là tỷ lệ so với tổng số bước huấn luyện.
  • save_on_each_node (bool, tùy chọn, mặc định là False) — Khi thực hiện huấn luyện phân tán đa nút, có nên lưu mô hình và checkpoint trên mỗi nút hay chỉ trên nút chính. Không nên kích hoạt tùy chọn này khi các nút khác nhau sử dụng cùng một bộ lưu trữ, vì các tệp sẽ được lưu với cùng tên trên mỗi nút.
  • save_total_limit (int, tùy chọn) — Số lượng checkpoint tối đa được giữ lại. Các checkpoint cũ hơn trong output_dir sẽ bị xóa. Khi load_best_model_at_end=True, checkpoint tốt nhất luôn được giữ lại cùng với các checkpoint mới nhất. Ví dụ, save_total_limit=5 sẽ giữ lại 4 checkpoint mới nhất cùng với checkpoint tốt nhất
  • enable_jit_checkpoint (bool, tuỳ chọn, mặc định là False) — Bật checkpoint Just-In-Time khi nhận tín hiệu SIGTERM để kết thúc một cách êm dịu trên các tác vụ có thể bị thu hồi. Quan trọng: Hãy cấu hình thời gian tắt máy êm dịu của trình điều phối để dành đủ thời gian. Với Kubernetes, hãy đặt terminationGracePeriodSeconds (mặc định 30s thường không đủ). Với Slurm, hãy dùng --signal=TERM@<seconds>. Thời gian ân hạn yêu cầu ≥ thời gian lặp dài nhất + thời gian lưu checkpoint.

Tích hợp Hugging Face Hub

  • push_to_hub (bool, tùy chọn, mặc định là False) — Có đẩy mô hình lên Hub mỗi khi mô hình được lưu hay không. Nếu được kích hoạt, output_dir sẽ bắt đầu một thư mục git được đồng bộ với kho (được xác định bởi hub_model_id) và nội dung sẽ được đẩy mỗi khi một thao tác lưu được kích hoạt (tùy thuộc vào save_strategy của bạn). Việc gọi save_model() cũng sẽ kích hoạt một lần đẩy.
  • hub_token (str, tùy chọn) — Token được sử dụng để đẩy mô hình lên Hub. Mặc định sẽ dùng token trong thư mục cache được lấy bằng hf auth login.
  • hub_private_repo (bool, tùy chọn) — Xác định có làm cho kho (repo) ở chế độ riêng tư hay không. Nếu là None (mặc định), kho sẽ ở chế độ công khai trừ khi mặc định của tổ chức là riêng tư. Giá trị này bị bỏ qua nếu kho đã tồn tại. Nếu báo cáo lên Trackio với triển khai đến Hugging Face Spaces được bật, cùng một logic sẽ xác định xem Space có ở chế độ riêng tư hay không.
  • hub_model_id (str, tùy chọn) — Tên của kho cần đồng bộ với output_dir cục bộ. Nó có thể là một ID mô hình đơn giản, trong trường hợp đó mô hình sẽ được đẩy vào namespace của bạn. Ngược lại, nó phải là tên kho đầy đủ, ví dụ "user_name/model", cho phép bạn đẩy vào một tổ chức mà bạn là thành viên bằng "organization_name/model". Mặc định sẽ là user_name/output_dir_name với output_dir_name là tên của output_dir.
  • hub_strategy (str hoặc HubStrategy, tuỳ chọn, mặc định là "every_save") — Xác định nội dung và thời điểm đẩy lên Hub. Các tùy chọn:
    • "end": Chỉ đẩy ở cuối quá trình huấn luyện
    • "every_save": Push ở mỗi lần lưu (bất đồng bộ để không chặn quá trình huấn luyện)
    • "checkpoint": Giống như "every_save" nhưng có thêm việc đẩy checkpoint mới nhất vào thư mục con "last-checkpoint" để dễ dàng tiếp tục
    • "all_checkpoints": Đẩy tất cả các checkpoint khi chúng xuất hiện
  • hub_always_push (bool, tùy chọn, mặc định là False) — Trừ khi giá trị này là True, Trainer sẽ bỏ qua việc đẩy checkpoint khi lần đẩy trước đó chưa hoàn tất.
  • hub_revision (str, tùy chọn) — Phiên bản (revision) được sử dụng khi đẩy lên Hub. Có thể là tên nhánh, thẻ (tag) hoặc hash của commit.

Theo dõi mô hình tốt nhất

  • load_best_model_at_end (bool, tùy chọn, mặc định là False) — Tải checkpoint tốt nhất vào cuối quá trình huấn luyện. Yêu cầu eval_strategy phải được thiết lập. Khi được bật, checkpoint tốt nhất luôn được lưu (xem save_total_limit). Khi `True`, `save_strategy` phải khớp với `eval_strategy` (trừ khi `save_strategy` là `"best"`), và nếu sử dụng `"steps"`, `save_steps` phải là bội số của `eval_steps`.
  • metric_for_best_model (str, tùy chọn) — Chỉ số được sử dụng để so sánh các mô hình khi load_best_model_at_end=True. Phải là tên chỉ số được trả về bởi quá trình đánh giá, có hoặc không có tiền tố "eval_". Mặc định là "loss". Nếu bạn đặt giá trị này, greater_is_better sẽ mặc định là True trừ khi tên kết thúc bằng "loss". Ví dụ: "accuracy", "f1", "eval_bleu".
  • greater_is_better (bool, tùy chọn) — Liệu giá trị chỉ số cao hơn có tốt hơn không. Mặc định dựa trên metric_for_best_model: True nếu tên chỉ số không kết thúc bằng "loss", False trong trường hợp còn lại.

Tiếp tục huấn luyện

  • ignore_data_skip (bool, tùy chọn, mặc định là False) — Khi tiếp tục huấn luyện, bỏ qua việc tua nhanh qua tập dữ liệu để đạt đến trạng thái trước đó. Nếu True, quá trình huấn luyện sẽ bắt đầu từ đầu tập dữ liệu (tiếp tục nhanh hơn nhưng kết quả sẽ không khớp với phiên huấn luyện bị gián đoạn). Nếu False, sẽ bỏ qua các dữ liệu đã xem (tiếp tục chậm hơn nhưng tiếp tục chính xác).
  • restore_callback_states_from_checkpoint (bool, tùy chọn, mặc định là False) — Khôi phục trạng thái callback từ checkpoint khi tiếp tục huấn luyện. Nếu True, sẽ ghi đè lên các callback được truyền vào Trainer nếu chúng tồn tại trong checkpoint.

Tính tái lập

  • full_determinism (bool, tùy chọn, mặc định là False) — Nếu True, enable_full_determinism() sẽ được gọi thay vì set_seed() để đảm bảo kết quả có thể tái lập trong huấn luyện phân tán. Lưu ý: điều này sẽ ảnh hưởng tiêu cực đến hiệu suất, vì vậy chỉ nên sử dụng để gỡ lỗi.
  • seed (int, tùy chọn, mặc định là 42) — Hạt ngẫu nhiên sẽ được đặt ở đầu quá trình huấn luyện. Để đảm bảo khả năng tái lập giữa các lần chạy, hãy sử dụng hàm ~Trainer.model_init để khởi tạo mô hình nếu nó có một số tham số được khởi tạo ngẫu nhiên.
  • data_seed (int, tùy chọn) — Hạt ngẫu nhiên (random seed) được sử dụng với các trình lấy mẫu dữ liệu (data samplers). Nếu không được đặt, các trình tạo ngẫu nhiên cho việc lấy mẫu dữ liệu sẽ sử dụng cùng hạt với seed. Điều này có thể được sử dụng để đảm bảo khả năng tái lập của việc lấy mẫu dữ liệu, độc lập với hạt của mô hình.

Cấu hình phần cứng

  • use_cpu (bool, tùy chọn, mặc định là False) — Có sử dụng cpu hay không. Nếu đặt thành False, chúng tôi sẽ sử dụng thiết bị/backend torch khả dụng.

Cấu hình Accelerate

  • accelerator_config (str, dict, hoặc AcceleratorConfig, tùy chọn) — Cấu hình cho tích hợp Accelerate bên trong. Có thể là:
    • Đường dẫn đến tệp cấu hình JSON: "accelerator_config.json"
    • Từ điển với các tùy chọn cấu hình
    • AcceleratorConfig instance Các tùy chọn chính:
    • split_batches (bool, mặc định là False): Có nên chia các batch giữa các thiết bị hay không. Nếu True, kích thước batch thực tế sẽ giống nhau trên tất cả các thiết bị (tổng số phải chia hết cho num_processes). Nếu False, mỗi thiết bị sẽ nhận kích thước batch được chỉ định.
    • dispatch_batches (bool): Nếu True, chỉ tiến trình chính sẽ lặp qua dataloader và phân phối các batch đến các thiết bị. Mặc định là True cho IterableDataset, False trong các trường hợp khác.
    • even_batches (bool, mặc định là True): Nhân bản các mẫu từ đầu bộ dữ liệu để đảm bảo tất cả các worker nhận được kích thước batch bằng nhau.
    • use_seedable_sampler (bool, mặc định là True): Sử dụng trình lấy mẫu ngẫu nhiên có thể đặt hạt giống hoàn toàn để đảm bảo khả năng tái lập.
    • use_configured_state (bool, mặc định là False): Sử dụng AcceleratorState/PartialState đã được khởi tạo sẵn thay vì tạo mới. Có thể gây ra các vấn đề khi tinh chỉnh siêu tham số.
  • parallelism_config (ParallelismConfig, tùy chọn) — Cấu hình song song cho phiên huấn luyện. Yêu cầu Accelerate 1.10.1

Dataloader

  • dataloader_drop_last (bool, tùy chọn, mặc định là False) — Có nên loại bỏ batch cuối cùng không hoàn chỉnh (nếu độ dài của tập dữ liệu không chia hết cho kích thước batch) hay không.
  • dataloader_num_workers (int, tùy chọn, mặc định là 0) — Số lượng tiến trình con được sử dụng để nạp dữ liệu (chỉ dành cho PyTorch). Giá trị 0 có nghĩa là dữ liệu sẽ được nạp trong tiến trình chính.
  • dataloader_pin_memory (bool, tùy chọn, mặc định là True) — Liệu bạn có muốn ghim bộ nhớ trong các trình tải dữ liệu hay không. Giá trị mặc định sẽ là True.
  • dataloader_persistent_workers (bool, tùy chọn, mặc định là False) — Nếu là True, trình tải dữ liệu sẽ không tắt các tiến trình worker sau khi một tập dữ liệu đã được tiêu thụ một lần. Điều này cho phép giữ các phiên bản Dataset của worker ở trạng thái hoạt động. Có thể tăng tốc độ huấn luyện, nhưng sẽ làm tăng mức sử dụng RAM. Mặc định sẽ là False.
  • dataloader_prefetch_factor (int, tùy chọn) — Số lượng batch được tải trước bởi mỗi worker. 2 nghĩa là tổng cộng sẽ có 2 * num_workers batch được tải trước trên tất cả các worker.
  • dataloader_multiprocessing_context (str, tuỳ chọn) — Phương thức khởi tạo multiprocessing được sử dụng cho các worker tải dữ liệu ("fork", "spawn" hoặc "forkserver"). Mặc định là phương thức khởi tạo mặc định của PyTorch, ngoại trừ trên MPS với dataloader_num_workers > 1, khi đó mặc định là "fork". Hãy dùng "spawn" khi stream từ các nguồn mà các đối tượng của chúng không an toàn khi fork (ví dụ HDFS qua pyarrow). Khi dùng "spawn", bất kỳ collate_fn tùy chỉnh hoặc mã dataset nào cũng phải có thể import được ở cấp module (không dùng lambda/closure).
  • dataloader_in_order (bool, tùy chọn, mặc định là True) — Nếu True, trình tải dữ liệu sẽ trả về các lô theo thứ tự các worker được khởi tạo. Đặt thành False để trả về các lô ngay khi chúng sẵn sàng, điều này có thể giảm độ trễ cuối cho các tác vụ truyền trực tiếp IterableDataset. Yêu cầu PyTorch >= 2.6.
  • remove_unused_columns (bool, tùy chọn, mặc định là True) — Có tự động xóa các cột không được sử dụng bởi phương thức forward của mô hình hay không.
  • label_names (list[str], tùy chọn) — Danh sách các khóa trong từ điển đầu vào của bạn tương ứng với nhãn. Cuối cùng sẽ mặc định là danh sách các tên tham số được mô hình chấp nhận mà chứa từ “label”, trừ khi mô hình được sử dụng là một trong các XxxForQuestionAnswering, trong trường hợp đó nó cũng sẽ bao gồm các khóa ["start_positions", "end_positions"]. Bạn chỉ nên chỉ định label_names nếu bạn đang sử dụng tên nhãn tùy chỉnh hoặc nếu forward của mô hình của bạn tiêu thụ nhiều tensor nhãn (ví dụ: extractive QA).
  • train_sampling_strategy (str, tuỳ chọn, mặc định là "random") — Bộ lấy mẫu (sampler) được sử dụng cho dataloader huấn luyện. Các giá trị có thể là:
    • "random": Sử dụng RandomSampler (mặc định).
    • "sequential": Sử dụng SequentialSampler.
    • "group_by_length": Sử dụng LengthGroupedSampler để nhóm các mẫu có độ dài xấp xỉ bằng nhau lại với nhau (nhằm giảm thiểu padding và tăng hiệu quả).
    • "batch_rebalance": Sử dụng BatchRebalanceSampler để cân bằng chi phí token đệm giữa các thiết bị và các bước tích lũy gradient trong mỗi batch hiệu dụng, giảm thiểu lãng phí do đệm và bộ nhớ đỉnh so với "group_by_length". Hiện tại chỉ hỗ trợ huấn luyện song song dữ liệu (chưa hỗ trợ song song tensor).

    Lưu ý: Khi sử dụng IterableDataset, đối số này sẽ bị bỏ qua.

  • length_column_name (str, tùy chọn, mặc định là "length") — Tên cột cho các độ dài đã tính trước. Nếu cột tồn tại, việc nhóm theo độ dài sẽ sử dụng các giá trị này thay vì tính toán chúng khi khởi động huấn luyện. Bỏ qua trừ khi train_sampling_strategy là "group_by_length"hoặc "batch_rebalance" và tập dữ liệu là một instance của Dataset.

DDP (DistributedDataParallel)

  • ddp_find_unused_parameters (bool, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ find_unused_parameters được truyền cho DistributedDataParallel. Mặc định sẽ là False nếu sử dụng gradient checkpointing, ngược lại là True.
  • ddp_bucket_cap_mb (int, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ bucket_cap_mb được truyền cho DistributedDataParallel.
  • ddp_broadcast_buffers (bool, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ broadcast_buffers được truyền cho DistributedDataParallel. Mặc định sẽ là False nếu sử dụng gradient checkpointing, True trong các trường hợp khác.
  • ddp_static_graph (bool, tùy chọn) — Khi sử dụng huấn luyện phân tán, giá trị của cờ static_graph được truyền cho DistributedDataParallel.
  • ddp_backend (str, tùy chọn) — Backend để sử dụng cho huấn luyện phân tán. Phải là một trong "nccl", "mpi", "xccl", "gloo", "hccl".
  • ddp_timeout (int, tùy chọn, mặc định là 1800) — Thời gian chờ cho các lệnh gọi torch.distributed.init_process_group, được sử dụng để tránh hết thời gian chờ socket GPU khi thực hiện các thao tác chậm trong các lần chạy phân tán. Vui lòng tham khảo tài liệu PyTorch để biết thêm thông tin.

FSDP (Fully Sharded Data Parallel)

  • fsdp (bool, tùy chọn, mặc định là None) — Bật PyTorch Fully Sharded Data Parallel (FSDP) cho huấn luyện phân tán. Truyền True để bật FSDP.
  • fsdp_config (str hoặc dict, tuỳ chọn) — Cấu hình cho khi fsdp được bật. Truyền đường dẫn đến tệp cấu hình JSON, chẳng hạn như fsdp_config.json, hoặc một dict đã được nạp sẵn.

    Các khóa được hỗ trợ:

    • version (int, tùy chọn, mặc định là 2): Phiên bản FSDP cần sử dụng (2 cho FSDP2, 1 cho FSDP1 cũ).
    • reshard_after_forward (bool, tuỳ chọn, mặc định là True): Có nên reshard các tham số sau bước forward hay không. Đặt thành False để giữ các tham số ở trạng thái đã gather giữa các bước forward và backward, tránh việc thực hiện lại all-gather, và sử dụng bộ nhớ đỉnh cao hơn.
    • cpu_offload (bool, tùy chọn, mặc định là False): Chuyển các tham số và gradient sang CPU khi không được sử dụng để tiết kiệm bộ nhớ GPU.
    • activation_checkpointing (bool, tùy chọn, mặc định là False): Đặt thành True để giảm bộ nhớ bằng cách tính lại các activation trong bước truyền ngược. Khi sử dụng FSDP, hãy ưu tiên tham số này hơn đối số huấn luyện activation_checkpointing, vì đối số đó gây ra một all-gather thừa trong bước truyền ngược.
    • cpu_ram_efficient_loading (bool, tùy chọn, mặc định là False): Đặt thành True để tải checkpoint được huấn luyện trước chỉ trên tiến trình đầu tiên. Các tiến trình khác bắt đầu với trọng số trống và nhận trọng số qua broadcast.
    • state_dict_type (str, tùy chọn, mặc định là "FULL_STATE_DICT"): Định dạng checkpoint: "FULL_STATE_DICT" (một tệp tương thích với HF duy nhất) hoặc "SHARDED_STATE_DICT" (một tệp cho mỗi rank, nhanh hơn với các mô hình lớn).
    • auto_wrap_policy (str, tùy chọn, mặc định là "TRANSFORMER_BASED_WRAP"): Chính sách auto-wrap cần sử dụng. Chọn "TRANSFORMER_BASED_WRAP", "SIZE_BASED_WRAP" hoặc "NO_WRAP".
    • transformer_layer_cls_to_wrap (list[str], optional): Tên lớp (phân biệt hoa thường) của các lớp Transformer cần bọc, ví dụ LlamaDecoderLayer. Thông thường không cần thiết: chính sách bọc sẽ tự động dùng _no_split_modules của mô hình, vốn bao phủ hầu hết các mô hình transformers.
    • min_num_params (int, tùy chọn, mặc định là 0): Số lượng tham số tối thiểu cho mỗi module để tự động bọc dựa trên kích thước (được sử dụng với auto_wrap_policy="SIZE_BASED_WRAP").
    • xla (bool, tùy chọn, mặc định là False): Có sử dụng PyTorch/XLA Fully Sharded Data Parallel Training hay không. Tính năng thử nghiệm.
    • xla_fsdp_settings (dict, tùy chọn): Từ điển các tham số bọc XLA FSDP. Để xem danh sách đầy đủ các tùy chọn, hãy xem mã nguồn XLA FSDP.
    • xla_fsdp_grad_ckpt (bool, tùy chọn, mặc định là False): Đặt thành True để sử dụng gradient checkpointing trên mỗi lớp được bọc bởi XLA FSDP lồng nhau. Yêu cầu xla=True và một chính sách tự động bọc (min_num_params hoặc transformer_layer_cls_to_wrap).

DeepSpeed

  • deepspeed (str hoặc dict, tuỳ chọn) — Bật DeepSpeed tích hợp. Giá trị là một trong các lựa chọn sau:
    • Đường dẫn đến tệp cấu hình JSON của DeepSpeed: "ds_config.json"
    • Đã tải cấu hình dưới dạng từ điển

      Nếu sử dụng khởi tạo ZeRO, hãy khởi tạo mô hình của bạn sau khi khởi tạo TrainingArguments, nếu không ZeRO sẽ không được áp dụng.

Gỡ lỗi & Phân tích hiệu năng (Thử nghiệm)

  • debug (str hoặc danh sách DebugOption, tuỳ chọn, mặc định là "") — Bật một hoặc nhiều tính năng gỡ lỗi. Đây là tính năng thử nghiệm. Các tuỳ chọn khả dụng:
    • “underflow_overflow”: phát hiện tràn trong đầu vào/đầu ra của mô hình và báo cáo các khung cuối cùng dẫn đến sự kiện
    • “tpu_metrics_debug”: in các chỉ số gỡ lỗi trên TPU
  • skip_memory_metrics (bool, tùy chọn, mặc định là True) — Có bỏ qua việc thêm báo cáo bộ nhớ của trình phân tích vào các chỉ số hay không. Mặc định là bỏ qua vì điều này làm chậm tốc độ huấn luyện và đánh giá.

Cờ kịch bản bên ngoài (không được Trainer sử dụng)

  • do_train (bool, tùy chọn, mặc định là False) — Có chạy huấn luyện hay không. Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để sử dụng trong các script huấn luyện/đánh giá của bạn.
  • do_eval (bool, tùy chọn) — Có chạy đánh giá trên tập kiểm tra hay không. Sẽ được đặt thành True nếu eval_strategy khác "no". Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để bạn sử dụng trong các script huấn luyện/đánh giá của mình.
  • do_predict (bool, tùy chọn, mặc định là False) — Có chạy dự đoán trên tập kiểm tra hay không. Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để các script huấn luyện/đánh giá của bạn sử dụng.
  • resume_from_checkpoint (str, tùy chọn) — Đường dẫn đến thư mục chứa checkpoint hợp lệ cho model của bạn. Tham số này không được Trainer sử dụng trực tiếp, mà được thiết kế để các script huấn luyện/đánh giá của bạn sử dụng.
  • sortish_sampler (bool, tuỳ chọn, mặc định là False) — có sử dụng sortish sampler hay không. Hiện tại chỉ khả thi nếu các dataset nền tảng là Seq2SeqDataset nhưng sẽ sớm khả dụng rộng rãi hơn.

    Nó sắp xếp các đầu vào theo độ dài nhằm giảm thiểu kích thước đệm, với một chút ngẫu nhiên cho tập huấn luyện.

  • predict_with_generate (bool, tùy chọn, mặc định là False) — Có sử dụng generate để tính các chỉ số sinh (ROUGE, BLEU) hay không.
  • generation_max_length (int, tùy chọn) — max_length được sử dụng trong mỗi vòng lặp đánh giá khi predict_with_generate=True. Mặc định sẽ dùng giá trị max_length của cấu hình mô hình.
  • generation_num_beams (int, tùy chọn) — num_beams được sử dụng trong mỗi vòng lặp đánh giá khi predict_with_generate=True. Mặc định sẽ dùng giá trị num_beams của cấu hình mô hình.
  • generation_config (str hoặc Path hoặc GenerationConfig, tùy chọn) — Cho phép nạp một GenerationConfig từ phương thức from_pretrained . Điều này có thể là:
    • một chuỗi, model id của một cấu hình model được huấn luyện trước được lưu trữ trong một kho model trên huggingface.co.
    • đường dẫn đến một thư mục chứa tệp cấu hình được lưu bằng phương thức save_pretrained(), ví dụ: ./my_model_directory/.
    • một đối tượng GenerationConfig.

Lớp cấu hình để kiểm soát mọi khía cạnh của việc huấn luyện mô hình với Trainer. TrainingArguments tập trung tất cả các siêu tham số, cài đặt tối ưu hóa, tùy chọn ghi nhật ký và lựa chọn hạ tầng cần thiết cho việc huấn luyện.

HfArgumentParser có thể chuyển lớp này thành các đối số argparse có thể được chỉ định trên dòng lệnh.

to_dict

< >

( )

Thực hiện serialize instance này trong khi thay thế Enum bằng giá trị của chúng và GenerationConfig bằng các từ điển (để hỗ trợ serialize JSON). Nó làm mờ các giá trị token bằng cách xóa giá trị của chúng.

Update on GitHub