# Callbacks

Callbacks là các đối tượng có thể tùy chỉnh hành vi của vòng lặp huấn luyện trong [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) của PyTorch, cho phép kiểm tra trạng thái của vòng lặp huấn luyện (để báo cáo tiến độ, ghi log trên TensorBoard hoặc các nền tảng ML khác...) và đưa ra các quyết định (như dừng sớm).

Callbacks là các đoạn mã "chỉ đọc", ngoại trừ đối tượng [TrainerControl](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerControl) mà chúng trả về, chúng không thể thay đổi bất kỳ điều gì trong vòng lặp huấn luyện. Đối với các tùy chỉnh yêu cầu thay đổi trong vòng lặp huấn luyện, bạn nên kế thừa [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) và ghi đè các phương thức cần thiết (xem [trainer](trainer) để có ví dụ).

Mặc định, `TrainingArguments.report_to` được đặt thành `"none"`.

Lớp chính triển khai các callback là [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback). Lớp này nhận [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) được dùng để khởi tạo [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer), có thể truy cập trạng thái nội bộ của Trainer đó thông qua [TrainerState](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerState), và có thể thực hiện một số hành động trên vòng lặp huấn luyện thông qua [TrainerControl](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerControl).

## Các Callback có sẵn[[transformers.integrations.CometCallback]]

Dưới đây là danh sách các [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) có sẵn trong thư viện:

#### transformers.integrations.CometCallback[[transformers.integrations.CometCallback]]

```python
transformers.integrations.CometCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1133)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các nhật ký đến [Comet ML](https://www.comet.com/site/).

#### cài đặt[[transformers.integrations.CometCallback.setup]]

```python
setup(args, state, model)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1147)

Cài đặt tích hợp Comet tùy chọn.

Môi trường:
- **COMET_MODE** (`str`, *tùy chọn*, mặc định là `get_or_create`): Kiểm soát việc tạo và ghi log vào một thí nghiệm Comet mới hay thêm vào một thí nghiệm hiện có. Tham số này chấp nhận các giá trị sau:
  * `get_or_create`: Tự động quyết định dựa trên việc `COMET_EXPERIMENT_KEY` có được đặt hay không và liệu một Experiment với khóa đó đã tồn tại hay chưa.
  * `create`: Luôn tạo một Comet Experiment mới.
  * `get`: Luôn cố gắng thêm vào một Comet Experiment hiện có. Yêu cầu `COMET_EXPERIMENT_KEY` phải được đặt.
- **COMET_START_ONLINE** (`bool`, *tùy chọn*): Xác định việc tạo Experiment trực tuyến hay ngoại tuyến.
- **COMET_PROJECT_NAME** (`str`, *tùy chọn*): Tên dự án Comet cho các thí nghiệm.
- **COMET_LOG_ASSETS** (`str`, *tùy chọn*, mặc định là `TRUE`): Xác định có ghi log các tài sản huấn luyện (checkpoints, v.v.) lên Comet hay không. Có thể là `TRUE` hoặc `FALSE`.

Để biết thêm về một số mục có thể cấu hình trong môi trường, hãy xem [tại đây](https://www.comet.com/docs/v2/guides/experiment-management/configure-sdk/#explore-comet-configuration-options).

#### transformers.DefaultFlowCallback[[transformers.DefaultFlowCallback]]

```python
transformers.DefaultFlowCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L563)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) xử lý luồng mặc định của vòng lặp huấn luyện cho việc ghi log, đánh giá và tạo checkpoint.

#### transformers.PrinterCallback[[transformers.PrinterCallback]]

```python
transformers.PrinterCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L698)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) đơn giản chỉ in ra các log.

#### transformers.ProgressCallback[[transformers.ProgressCallback]]

```python
transformers.ProgressCallback(max_str_len: int = 100)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L624)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) hiển thị tiến trình của quá trình huấn luyện hoặc đánh giá. Bạn có thể sửa đổi `max_str_len` để kiểm soát độ dài cắt ngắn của các chuỗi khi ghi log.

#### transformers.EarlyStoppingCallback[[transformers.EarlyStoppingCallback]]

```python
transformers.EarlyStoppingCallback(early_stopping_patience: int = 1, early_stopping_threshold: float | None = 0.0)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L711)

**Tham số:**

early_stopping_patience (`int`) : Sử dụng cùng với `metric_for_best_model` để dừng huấn luyện khi chỉ số được chỉ định xấu đi trong `early_stopping_patience` lần đánh giá.

early_stopping_threshold(`float`, *optional*) : Dùng cùng với TrainingArguments `metric_for_best_model` và `early_stopping_patience` để chỉ định mức độ cải thiện cần thiết của chỉ số được chỉ định để đáp ứng các điều kiện dừng sớm. `

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) xử lý việc dừng sớm.

Callback này phụ thuộc vào chức năng *load_best_model_at_end* của đối số [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) để đặt best_metric trong [TrainerState](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerState). Lưu ý rằng nếu đối số *save_steps* của [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) khác với *eval_steps*, việc dừng sớm sẽ không diễn ra cho đến bước lưu tiếp theo.

#### transformers.integrations.TensorBoardCallback[[transformers.integrations.TensorBoardCallback]]

```python
transformers.integrations.TensorBoardCallback(tb_writer = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L577)

**Tham số:**

tb_writer (`SummaryWriter`, *tùy chọn*) : Trình ghi sẽ được sử dụng. Nếu không được đặt, một trình ghi sẽ được khởi tạo.

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các nhật ký đến [TensorBoard](https://www.tensorflow.org/tensorboard).

Môi trường:
- **TENSORBOARD_LOGGING_DIR** (`str`, *tùy chọn*, mặc định là `None`): Thư mục ghi log để lưu kết quả. Giá trị mặc định là os.path.join(args.output_dir, default_logdir())

#### transformers.integrations.TrackioCallback[[transformers.integrations.TrackioCallback]]

```python
transformers.integrations.TrackioCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L935)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) ghi log các chỉ số vào Trackio.

#### cài đặt[[transformers.integrations.TrackioCallback.setup]]

```python
setup(args, state, model, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L969)

Cài đặt tích hợp Trackio tùy chọn.

Để tùy chỉnh cấu hình, bạn cũng có thể đặt `project`, `trackio_space_id`, `trackio_bucket_id`, `trackio_static_space_id` và `hub_private_repo` trong [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments).

#### transformers.integrations.WandbCallback[[transformers.integrations.WandbCallback]]

```python
transformers.integrations.WandbCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L695)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) ghi lại các chỉ số, phương tiện và điểm kiểm tra mô hình vào [Weight and Biases](https://www.wandb.com/).

#### cài đặt[[transformers.integrations.WandbCallback.setup]]

```python
setup(args, state, model, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L711)

Cài đặt tích hợp tùy chọn Weights & Biases (*wandb*).

Có thể kế thừa và ghi đè phương thức này để tùy chỉnh quá trình thiết lập nếu cần. Tìm thêm thông tin [tại đây](https://docs.wandb.ai/guides/integrations/huggingface). Bạn cũng có thể ghi đè các biến môi trường sau:

Môi trường:
- **WANDB_LOG_MODEL** (`str`, *tùy chọn*, mặc định là `"false"`): Xác định có ghi log mô hình và các checkpoint trong quá trình huấn luyện hay không. Có thể là `"end"`, `"checkpoint"` hoặc `"false"`. Nếu đặt thành `"end"`, mô hình sẽ được tải lên vào cuối quá trình huấn luyện. Nếu đặt thành `"checkpoint"`, checkpoint sẽ được tải lên mỗi `args.save_steps` . Nếu đặt thành `"false"`, mô hình sẽ không được tải lên. Sử dụng cùng với `load_best_model_at_end()` để tải lên mô hình tốt nhất.
- **WANDB_WATCH** (`str`, *tùy chọn*, mặc định là `"false"`): Có thể là `"gradients"`, `"all"`, `"parameters"` hoặc `"false"`. Đặt thành `"all"` để ghi log gradient và tham số.
- **WANDB_PROJECT** (`str`, *tùy chọn*, mặc định là `"huggingface"`): Đặt giá trị này thành một chuỗi tùy chỉnh để lưu kết quả vào một dự án khác.

#### transformers.integrations.MLflowCallback[[transformers.integrations.MLflowCallback]]

```python
transformers.integrations.MLflowCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1286)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các log đến [MLflow](https://www.mlflow.org/). Có thể bị vô hiệu hóa bằng cách đặt biến môi trường `DISABLE_MLFLOW_INTEGRATION = TRUE`.

#### cài đặt[[transformers.integrations.MLflowCallback.setup]]

```python
setup(args, state, model)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1305)

Cài đặt tích hợp MLflow tùy chọn.

Môi trường:
- **HF_MLFLOW_LOG_ARTIFACTS** (`str`, *tuỳ chọn*): Có sử dụng tiện ích `.log_artifact()` của MLflow để ghi log các artifact hay không. Điều này chỉ có ý nghĩa nếu ghi log lên một máy chủ từ xa, ví dụ s3 hoặc GCS. Nếu đặt thành `True` hoặc *1*, mỗi checkpoint được lưu trong `output_dir` của [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) sẽ được sao chép vào kho lưu trữ artifact cục bộ hoặc từ xa tại mỗi lần lưu. Việc sử dụng mà không có kho lưu trữ từ xa sẽ chỉ sao chép các tệp vào vị trí artifact của bạn.
- **MLFLOW_TRACKING_URI** (`str`, *tùy chọn*): Xác định việc lưu trữ các run tại một đường dẫn cụ thể hay trên máy chủ từ xa. Mặc định không được đặt, điều này sẽ bỏ qua việc thiết lập tracking URI hoàn toàn.
- **MLFLOW_EXPERIMENT_NAME** (`str`, *tuỳ chọn*, mặc định là `None`): Xác định việc sử dụng một experiment_name của MLflow để khởi chạy run. Mặc định là `None`, trỏ đến experiment `Default` trong MLflow. Ngược lại, đây là tên phân biệt hoa thường của experiment cần kích hoạt. Nếu không có experiment nào với tên này, một experiment mới với tên đó sẽ được tạo.
- **MLFLOW_TAGS** (`str`, *tùy chọn*): Một chuỗi chứa bản dump của từ điển các cặp khóa/giá trị sẽ được thêm vào chạy MLflow dưới dạng thẻ. Ví dụ: `os.environ['MLFLOW_TAGS']='{"release.candidate": "RC1", "release.version": "2.2.0"}'`.
- **MLFLOW_NESTED_RUN** (`str`, *tùy chọn*): Có sử dụng các run lồng nhau của MLflow hay không. Nếu đặt thành `True` hoặc *1*, sẽ tạo một run lồng nhau bên trong run hiện tại.
- **MLFLOW_RUN_ID** (`str`, *tùy chọn*): Cho phép gắn lại vào một run hiện có, điều này hữu ích khi tiếp tục huấn luyện từ một checkpoint. Khi biến môi trường `MLFLOW_RUN_ID` được đặt, `start_run` sẽ cố gắng tiếp tục một run với run ID được chỉ định và các tham số khác sẽ bị bỏ qua.
- **MLFLOW_FLATTEN_PARAMS** (`str`, *tùy chọn*, mặc định là `False`): Xác định có làm phẳng từ điển tham số trước khi ghi log hay không.
- **MLFLOW_MAX_LOG_PARAMS** (`int`, *tùy chọn*): Đặt số lượng tham số tối đa để ghi log trong lần chạy.

#### transformers.integrations.AzureMLCallback[[transformers.integrations.AzureMLCallback]]

```python
transformers.integrations.AzureMLCallback(azureml_run = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1263)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các nhật ký đến [AzureML](https://pypi.org/project/azureml-sdk/).

#### transformers.integrations.CodeCarbonCallback[[transformers.integrations.CodeCarbonCallback]]

```python
transformers.integrations.CodeCarbonCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1809)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) theo dõi lượng khí thải CO2 của quá trình huấn luyện.

#### transformers.integrations.ClearMLCallback[[transformers.integrations.ClearMLCallback]]

```python
transformers.integrations.ClearMLCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1843)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các nhật ký đến [ClearML](https://clear.ml/).

Môi trường:
- **CLEARML_PROJECT** (`str`, *tùy chọn*, mặc định là `HuggingFace Transformers`): Tên dự án ClearML.
- **CLEARML_TASK** (`str`, *tùy chọn*, mặc định là `Trainer`): Tên tác vụ ClearML.
- **CLEARML_LOG_MODEL** (`bool`, *tùy chọn*, mặc định là `False`): Xác định có ghi nhật ký các mô hình dưới dạng các sản phẩm (artifacts) trong quá trình huấn luyện hay không.

#### transformers.integrations.DagsHubCallback[[transformers.integrations.DagsHubCallback]]

```python
transformers.integrations.DagsHubCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1467)

[TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) ghi log vào [DagsHub](https://dagshub.com/). Kế thừa từ `MLflowCallback`

#### cài đặt[[transformers.integrations.DagsHubCallback.setup]]

```python
setup(*args, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L1481)

Cài đặt tích hợp ghi log của DagsHub.

Môi trường:
- **HF_DAGSHUB_LOG_ARTIFACTS** (`str`, *tùy chọn*): Xác định có lưu các sản phẩm dữ liệu và mô hình cho thí nghiệm hay không. Mặc định là `False`.

#### transformers.integrations.FlyteCallback[[transformers.integrations.FlyteCallback]]

```python
transformers.integrations.FlyteCallback(save_log_history: bool = True, sync_checkpoints: bool = True)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L2094)

**Tham số:**

save_log_history (`bool`, *tùy chọn*, mặc định là `True`) : Khi được đặt thành True, nhật ký huấn luyện sẽ được lưu dưới dạng Flyte Deck.

sync_checkpoints (`bool`, *tùy chọn*, mặc định là `True`) : Khi được đặt thành True, các checkpoint sẽ được đồng bộ hóa với Flyte và có thể được sử dụng để tiếp tục huấn luyện trong trường hợp bị gián đoạn.

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các log đến [Flyte](https://flyte.org/). LƯU Ý: Callback này chỉ hoạt động bên trong một task của Flyte.

Ví dụ:

```python
# Note: This example skips over some setup steps for brevity.
from flytekit import current_context, task

@task
def train_hf_transformer():
    cp = current_context().checkpoint
    trainer = Trainer(..., callbacks=[FlyteCallback()])
    output = trainer.train(resume_from_checkpoint=cp.restore())
```

#### transformers.integrations.KubeflowCallback[[transformers.integrations.KubeflowCallback]]

```python
transformers.integrations.KubeflowCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L2436)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) báo cáo tiến độ huấn luyện cho [Kubeflow Trainer](https://github.com/kubeflow/trainer).

Callback này được đăng ký tự động khi huấn luyện bên trong một Kubeflow TrainJob với cổng tính năng `TrainJobRuntimeStatus` được bật. Bộ điều khiển Kubeflow sẽ tiêm các biến môi trường cần thiết vào pod huấn luyện.

**Biến môi trường (được tiêm bởi bộ điều khiển):**

- `KUBEFLOW_TRAINER_SERVER_URL`: điểm cuối HTTPS cho các bản cập nhật trạng thái
- `KUBEFLOW_TRAINER_SERVER_CA_CERT`: Đường dẫn đến chứng chỉ CA để xác minh TLS
- `KUBEFLOW_TRAINER_SERVER_TOKEN`: Đường dẫn đến token của service account để xác thực

**Thông tin được báo cáo:**

- Tỷ lệ tiến độ (0-100%)
- Thời gian còn lại ước tính (giây)
- Các chỉ số huấn luyện (loss, learning_rate, v.v.)

**Các tính năng:**

- Tự động hạn chế tần suất (tối đa 1 cập nhật mỗi 5 giây) để tránh quá tải bộ điều khiển
- Caching token (5 phút) để giảm thiểu I/O tệp
- Chỉ rank 0 báo cáo tiến độ trong huấn luyện phân tán
- Lỗi im lặng - các vấn đề về mạng sẽ không làm gián đoạn quá trình huấn luyện

Có thể tắt bằng cách đặt biến môi trường `DISABLE_KUBEFLOW_INTEGRATION=TRUE`.

#### transformers.integrations.DVCLiveCallback[[transformers.integrations.DVCLiveCallback]]

```python
transformers.integrations.DVCLiveCallback(live: typing.Any | None = None, log_model: typing.Union[typing.Literal['all'], bool, NoneType] = None, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L2157)

**Tham số:**

live (`dvclive.Live`, *tùy chọn*, mặc định là `None`) : Đối tượng Live tùy chọn. Nếu là None, một đối tượng mới sẽ được tạo bằng **kwargs.

log_model (Union[Literal["all"], bool], *tuỳ chọn*, mặc định là `None`) : Có nên sử dụng `dvclive.Live.log_artifact()` để ghi log các checkpoint được tạo bởi [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) hay không. Nếu đặt thành `True`, checkpoint cuối cùng sẽ được ghi log vào cuối quá trình huấn luyện. Nếu đặt thành `"all"`, toàn bộ `output_dir` của [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) sẽ được ghi log tại mỗi checkpoint.

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) gửi các log đến [DVCLive](https://www.dvc.org/doc/dvclive).

Sử dụng các biến môi trường bên dưới trong `setup` để cấu hình tích hợp. Để tùy chỉnh callback này ngoài các biến môi trường đó, xem [ở đây](https://dvc.org/doc/dvclive/ml-frameworks/huggingface).

#### cài đặt[[transformers.integrations.DVCLiveCallback.setup]]

```python
setup(args, state, model)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L2198)

Cài đặt tích hợp DVCLive tùy chọn. Để tùy chỉnh callback này ngoài các biến môi trường bên dưới, xem [tại đây](https://dvc.org/doc/dvclive/ml-frameworks/huggingface).

Môi trường:
- **HF_DVCLIVE_LOG_MODEL** (`str`, *tuỳ chọn*): Có sử dụng `dvclive.Live.log_artifact()` để ghi log các checkpoint được tạo bởi [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) hay không. Nếu đặt thành `True` hoặc *1*, checkpoint cuối cùng sẽ được ghi log khi kết thúc huấn luyện. Nếu đặt thành `all`, toàn bộ `output_dir` của [TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments) sẽ được ghi log tại mỗi checkpoint.

#### transformers.integrations.SwanLabCallback[[transformers.integrations.SwanLabCallback]]

```python
transformers.integrations.SwanLabCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L2262)

Một [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) ghi lại các chỉ số, phương tiện và điểm kiểm tra mô hình vào [SwanLab](https://swanlab.cn/).

#### cài đặt[[transformers.integrations.SwanLabCallback.setup]]

```python
setup(args, state, model, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/integration_utils.py#L2276)

Cài đặt tích hợp tùy chọn SwanLab (*swanlab*).

Bạn có thể kế thừa và ghi đè phương thức này để tùy chỉnh quá trình thiết lập nếu cần. Tìm thêm thông tin [tại đây](https://docs.swanlab.cn/guide_cloud/integration/integration-huggingface-transformers.html).

Bạn cũng có thể ghi đè các biến môi trường sau. Tìm thêm thông tin về biến môi trường [tại đây](https://docs.swanlab.cn/en/api/environment-variable.html#environment-variables)

Môi trường:
- **SWANLAB_API_KEY** (`str`, *tùy chọn*, mặc định là `None`): Cloud API Key. Trong quá trình đăng nhập, biến môi trường này được kiểm tra trước tiên. Nếu nó không tồn tại, hệ thống sẽ kiểm tra xem người dùng đã đăng nhập hay chưa. Nếu chưa, quy trình đăng nhập sẽ được khởi động.

  - Nếu một chuỗi được truyền vào giao diện đăng nhập, biến môi trường này sẽ bị bỏ qua.
  - Nếu người dùng đã đăng nhập, biến môi trường này sẽ có ưu tiên cao hơn so với thông tin đăng nhập được lưu cục bộ.

- **SWANLAB_PROJECT** (`str`, *tùy chọn*, mặc định là `None`): Đặt giá trị này thành một chuỗi tùy chỉnh để lưu kết quả vào một dự án khác. Nếu không được chỉ định, tên của thư mục đang chạy hiện tại sẽ được sử dụng.

- **SWANLAB_LOG_DIR** (`str`, *tùy chọn*, mặc định là `swanlog`): Biến môi trường này chỉ định đường dẫn lưu trữ cho các tệp nhật ký khi chạy ở chế độ cục bộ. Mặc định, nhật ký được lưu trong thư mục có tên swanlog dưới thư mục làm việc.

- **SWANLAB_MODE** (`Literal["local", "cloud", "disabled"]`, *tuỳ chọn*, mặc định là `cloud`): Chế độ phân tích của SwanLab, liên quan đến các callback được đăng ký bởi người vận hành. Hiện tại có ba chế độ: local, cloud và disabled. Lưu ý: Phân biệt chữ hoa chữ thường. Tìm thêm thông tin [tại đây](https://docs.swanlab.cn/en/api/py-init.html#swanlab-init)

- **SWANLAB_LOG_MODEL** (`str`, *tùy chọn*, mặc định là `None`): SwanLab hiện chưa hỗ trợ chức năng chế độ lưu trữ. Tính năng này sẽ có sẵn trong một bản phát hành tương lai

- **SWANLAB_WEB_HOST** (`str`, *tùy chọn*, mặc định là `None`): Địa chỉ web cho môi trường đám mây SwanLab của phiên bản riêng (miễn phí)

- **SWANLAB_API_HOST** (`str`, *tùy chọn*, mặc định là `None`): địa chỉ API cho môi trường đám mây SwanLab của phiên bản riêng tư (miễn phí)

- **SWANLAB_RUN_ID** (`str`, *tùy chọn*, mặc định là `None`): ID của thí nghiệm để tiếp tục một lần chạy trước đó. Sử dụng cùng với `SWANLAB_RESUME` để tiếp tục một thí nghiệm hiện có.

- **SWANLAB_RESUME** (`str`, *tùy chọn*, mặc định là `None`): Chế độ tiếp tục (`"must"`, `"allow"`, `"never"`). Mặc định là `"allow"` khi sử dụng `resume_from_checkpoint`.

## TrainerCallback[[transformers.TrainerCallback]]

#### transformers.TrainerCallback[[transformers.TrainerCallback]]

```python
transformers.TrainerCallback()
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L295)

**Tham số:**

args ([TrainingArguments](/docs/transformers/main/vi/main_classes/trainer#transformers.TrainingArguments)) : Các đối số huấn luyện được sử dụng để khởi tạo [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer).

state ([TrainerState](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerState)) : Trạng thái hiện tại của [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer).

control ([TrainerControl](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerControl)) : Đối tượng được trả về cho [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) và có thể được sử dụng để đưa ra một số quyết định.

model ([PreTrainedModel](/docs/transformers/main/vi/main_classes/model#transformers.PreTrainedModel) hoặc `torch.nn.Module`) : Mô hình đang được huấn luyện.

processing_class ([`PreTrainedTokenizer` hoặc `BaseImageProcessor` hoặc `ProcessorMixin` hoặc `FeatureExtractionMixin`]) : Lớp xử lý được dùng để mã hóa dữ liệu. Có thể là một tokenizer, một processor, một image processor hoặc một feature extractor.

optimizer (`torch.optim.Optimizer`) : Bộ tối ưu được sử dụng cho các bước huấn luyện.

lr_scheduler (`torch.optim.lr_scheduler.LambdaLR`) : Bộ lập lịch được sử dụng để thiết lập tốc độ học.

train_dataloader (`torch.utils.data.DataLoader`, *tùy chọn*) : Dataloader hiện tại được sử dụng cho huấn luyện.

eval_dataloader (`torch.utils.data.DataLoader`, *tùy chọn*) : Dataloader hiện tại được sử dụng để đánh giá.

metrics (`dict[str, float]`) : Các chỉ số được tính bởi giai đoạn đánh giá cuối cùng. Chúng chỉ có thể truy cập trong sự kiện `on_evaluate`.

logs  (`dict[str, float]`) : Các giá trị cần ghi log.  Chúng chỉ có thể truy cập trong sự kiện `on_log`.

Một lớp dành cho các đối tượng sẽ kiểm tra trạng thái của vòng lặp huấn luyện tại một số sự kiện và đưa ra một số quyết định. Tại mỗi sự kiện đó, các đối số sau đây có sẵn:

Đối tượng `control` là đối tượng duy nhất có thể được thay đổi bởi callback, trong trường hợp đó, sự kiện thay đổi nó phải trả về phiên bản đã được sửa đổi.

Các đối số `args`, `state` và `control` là các đối số theo vị trí cho tất cả các sự kiện, tất cả các đối số khác được nhóm trong `kwargs`. Bạn có thể giải nén những đối số cần thiết trong chữ ký của sự kiện bằng cách sử dụng chúng. Ví dụ, hãy xem mã của [PrinterCallback](/docs/transformers/main/vi/main_classes/callback#transformers.PrinterCallback) đơn giản.

Ví dụ:

```python
class PrinterCallback(TrainerCallback):
    def on_log(self, args, state, control, logs=None, **kwargs):
        _ = logs.pop("total_flos", None)
        if state.is_local_process_zero:
            print(logs)
```

#### on_epoch_begin[[transformers.TrainerCallback.on_epoch_begin]]

```python
on_epoch_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L361)

Sự kiện được gọi vào đầu một epoch.

#### on_epoch_end[[transformers.TrainerCallback.on_epoch_end]]

```python
on_epoch_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L366)

Sự kiện được gọi vào cuối một epoch.

#### on_evaluate[[transformers.TrainerCallback.on_evaluate]]

```python
on_evaluate(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L398)

Sự kiện được gọi sau một giai đoạn đánh giá.

#### on_init_end[[transformers.TrainerCallback.on_init_end]]

```python
on_init_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L346)

Sự kiện được gọi vào cuối quá trình khởi tạo của [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer).

#### on_log[[transformers.TrainerCallback.on_log]]

```python
on_log(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L413)

Sự kiện được gọi sau khi ghi lại các nhật ký cuối cùng.

#### on_optimizer_step[[transformers.TrainerCallback.on_optimizer_step]]

```python
on_optimizer_step(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L382)

Sự kiện được gọi sau bước tối ưu hóa nhưng trước khi các gradient được đặt về không. Hữu ích để theo dõi các gradient.

#### on_pre_optimizer_step[[transformers.TrainerCallback.on_pre_optimizer_step]]

```python
on_pre_optimizer_step(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L377)

Sự kiện được gọi trước bước tối ưu hóa nhưng sau khi cắt tỉa gradient. Hữu ích để giám sát gradient.

#### on_predict[[transformers.TrainerCallback.on_predict]]

```python
on_predict(args: TrainingArguments, state: TrainerState, control: TrainerControl, metrics, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L403)

Sự kiện được gọi sau một lần dự đoán thành công.

#### on_prediction_step[[transformers.TrainerCallback.on_prediction_step]]

```python
on_prediction_step(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L418)

Sự kiện được gọi sau một bước dự đoán.

#### on_push_begin[[transformers.TrainerCallback.on_push_begin]]

```python
on_push_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L423)

Sự kiện được gọi trước khi đẩy mô hình lên hub, ở đầu của Trainer.push_to_hub và Trainer._push_from_checkpoint.

#### on_save[[transformers.TrainerCallback.on_save]]

```python
on_save(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L408)

Sự kiện được gọi sau khi lưu checkpoint.

#### on_step_begin[[transformers.TrainerCallback.on_step_begin]]

```python
on_step_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L371)

Sự kiện được gọi vào đầu mỗi bước huấn luyện. Nếu sử dụng tích lũy gradient, một bước huấn luyện có thể bao gồm nhiều đầu vào.

#### on_step_end[[transformers.TrainerCallback.on_step_end]]

```python
on_step_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L392)

Sự kiện được gọi vào cuối một bước huấn luyện. Nếu sử dụng tích lũy gradient, một bước huấn luyện có thể bao gồm nhiều đầu vào.

#### on_substep_end[[transformers.TrainerCallback.on_substep_end]]

```python
on_substep_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L387)

Sự kiện được gọi vào cuối một substep trong quá trình tích lũy gradient.

#### on_train_begin[[transformers.TrainerCallback.on_train_begin]]

```python
on_train_begin(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L351)

Sự kiện được gọi vào đầu quá trình huấn luyện.

#### on_train_end[[transformers.TrainerCallback.on_train_end]]

```python
on_train_end(args: TrainingArguments, state: TrainerState, control: TrainerControl, **kwargs)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L356)

Sự kiện được gọi vào cuối quá trình huấn luyện.

Dưới đây là một ví dụ về cách đăng ký một callback tùy chỉnh với [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) của PyTorch:

```python
class MyCallback(TrainerCallback):
    "A callback that prints a message at the beginning of training"

    def on_train_begin(self, args, state, control, **kwargs):
        print("Starting training")

trainer = Trainer(
    model,
    args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
    callbacks=[MyCallback],  # We can either pass the callback class this way or an instance of it (MyCallback())
)
```

Một cách khác để đăng ký callback là gọi `trainer.add_callback()` như sau:

```python
trainer = Trainer(...)
trainer.add_callback(MyCallback)
# Alternatively, we can pass an instance of the callback class
trainer.add_callback(MyCallback())
```

## TrainerState[[transformers.TrainerState]]

#### transformers.TrainerState[[transformers.TrainerState]]

```python
transformers.TrainerState(epoch: float = 0, global_step: int = 0, max_steps: int = 0, logging_steps: int = 500, eval_steps: int = 500, save_steps: int = 500, train_batch_size: int | None = None, num_train_epochs: int = 0, num_input_tokens_seen: int = 0, total_flos: float = 0, log_history: list = None, best_metric: float | None = None, best_global_step: int | None = None, best_model_checkpoint: str | None = None, is_local_process_zero: bool = True, is_world_process_zero: bool = True, is_hyper_param_search: bool = False, trial_name: str | None = None, trial_params: dict[str, str | float | int | bool] | None = None, stateful_callbacks: list['TrainerCallback'] | None = None)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L35)

**Tham số:**

epoch (`float`, *tùy chọn*) : Chỉ được đặt trong quá trình huấn luyện, sẽ đại diện cho epoch mà quá trình huấn luyện đang ở (phần thập phân là phần trăm của epoch hiện tại đã hoàn thành).

global_step (`int`, *tuỳ chọn*, mặc định là 0) : Trong quá trình huấn luyện, đại diện cho số bước cập nhật đã hoàn thành.

max_steps (`int`, *tuỳ chọn*, mặc định là 0) : Số bước cập nhật cần thực hiện trong quá trình huấn luyện hiện tại.

logging_steps (`int`, *tùy chọn*, mặc định là 500) : Ghi log mỗi X bước cập nhật

eval_steps (`int`, *optional*) : Chạy đánh giá mỗi X bước.

save_steps (`int`, *tuỳ chọn*, mặc định là 500) : Lưu checkpoint mỗi X bước cập nhật.

train_batch_size (`int`, *optional*) : Kích thước lô (batch size) cho dataloader huấn luyện. Chỉ cần thiết lập khi đã sử dụng `auto_find_batch_size`.

num_input_tokens_seen (`int`, *tuỳ chọn*, mặc định là 0) : Khi theo dõi các token đầu vào, đây là số lượng token đã được xem trong quá trình huấn luyện (số lượng token đầu vào, không phải số lượng token dự đoán).

total_flos (`float`, *tuỳ chọn*, mặc định là 0) : Tổng số phép toán số thực mà mô hình đã thực hiện kể từ khi bắt đầu huấn luyện (được lưu dưới dạng số thực để tránh tràn).

log_history (`list[dict[str, float]]`, *tùy chọn*) : Danh sách các nhật ký được thực hiện kể từ khi bắt đầu huấn luyện.

best_metric (`float`, *tùy chọn*) : Khi theo dõi mô hình tốt nhất, giá trị của chỉ số tốt nhất được ghi nhận cho đến hiện tại.

best_global_step (`int`, *tuỳ chọn*) : Khi theo dõi mô hình tốt nhất, bước mà chỉ số tốt nhất được ghi nhận. Được dùng để thiết lập `best_model_checkpoint`.

best_model_checkpoint (`str`, *tùy chọn*) : Khi theo dõi mô hình tốt nhất, giá trị của tên checkpoint cho mô hình tốt nhất được gặp cho đến nay.

is_local_process_zero (`bool`, *tùy chọn*, mặc định là `True`) : Xác định xem tiến 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 (`bool`, *tùy chọn*, mặc định là `True`) : Xác định xem tiến trình này có phải là tiến 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ỉ có giá trị `True` cho một tiến trình).

is_hyper_param_search (`bool`, *tùy chọn*, mặc định là `False`) : Xác định xem chúng ta có đang trong quá trình tìm kiếm siêu tham số sử dụng Trainer.hyperparameter_search hay không. Điều này sẽ ảnh hưởng đến cách dữ liệu được ghi log trong TensorBoard.

stateful_callbacks (`list[StatefulTrainerCallback]`, *tùy chọn*) : Các callback được gắn với `Trainer` mà trạng thái của chúng cần được lưu hoặc khôi phục. Các callback liên quan cần triển khai một hàm `state` và `from_state`.

Một lớp chứa trạng thái bên trong của [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer) sẽ được lưu cùng với model và optimizer khi checkpoint và được truyền cho [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback).

Trong toàn bộ lớp này, một bước được hiểu là một bước cập nhật. Khi sử dụng tích lũy gradient, một bước cập nhật có thể yêu cầu nhiều lần truyền thuận và truyền ngược: nếu bạn sử dụng `gradient_accumulation_steps=n`, thì một bước cập nhật yêu cầu xử lý *n* lô dữ liệu.

#### compute_steps[[transformers.TrainerState.compute_steps]]

```python
compute_steps(args, max_steps)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L156)

Tính toán và lưu trữ giá trị tuyệt đối cho các bước ghi log, eval và lưu dựa trên việc giá trị đó có phải là tỷ lệ hay không.

#### init_training_references[[transformers.TrainerState.init_training_references]]

```python
init_training_references(trainer, max_steps, num_train_epochs, trial)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L169)

Lưu trữ các tham chiếu huấn luyện ban đầu cần thiết trong `self`

#### load_from_json[[transformers.TrainerState.load_from_json]]

```python
load_from_json(json_path: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L149)

Tạo một instance từ nội dung của `json_path`.

#### save_to_json[[transformers.TrainerState.save_to_json]]

```python
save_to_json(json_path: str)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L143)

Lưu nội dung của instance này dưới định dạng JSON trong `json_path`.

## TrainerControl[[transformers.TrainerControl]]

#### transformers.TrainerControl[[transformers.TrainerControl]]

```python
transformers.TrainerControl(should_training_stop: bool = False, should_epoch_stop: bool = False, should_save: bool = False, should_evaluate: bool = False, should_log: bool = False)
```

[Nguồn](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_callback.py#L234)

**Tham số:**

should_training_stop (`bool`, *tùy chọn*, mặc định là `False`) : Xác định xem quá trình huấn luyện có nên bị gián đoạn hay không. Nếu là `True`, biến này sẽ không được đặt lại về `False`. Quá trình huấn luyện sẽ chỉ dừng lại.

should_epoch_stop (`bool`, *tuỳ chọn*, mặc định là `False`) : Xác định xem epoch hiện tại có nên bị ngắt hay không. Nếu là `True`, biến này sẽ được đặt lại về `False` vào đầu epoch tiếp theo.

should_save (`bool`, *tùy chọn*, mặc định là `False`) : Xác định xem mô hình có nên được lưu ở bước này hay không. Nếu là `True`, biến này sẽ được đặt lại thành `False` ở đầu bước tiếp theo.

should_evaluate (`bool`, *tùy chọn*, mặc định là `False`) : Xác định xem mô hình có nên được đánh giá ở bước này hay không. Nếu là `True`, biến này sẽ được đặt lại thành `False` ở đầu bước tiếp theo.

should_log (`bool`, *tùy chọn*, mặc định là `False`) : Xác định xem nhật ký có nên được báo cáo ở bước này hay không. Nếu là `True`, biến này sẽ được đặt lại thành `False` ở đầu bước tiếp theo.

Một lớp xử lý luồng điều khiển của [Trainer](/docs/transformers/main/vi/main_classes/trainer#transformers.Trainer). Lớp này được [TrainerCallback](/docs/transformers/main/vi/main_classes/callback#transformers.TrainerCallback) sử dụng để kích hoạt một số công tắc trong vòng lặp huấn luyện.

