# Quản lý bộ nhớ đệm

Khi bạn tải xuống một bộ dữ liệu từ Hugging Face, dữ liệu sẽ được lưu trữ cục bộ trên máy tính của bạn. Các tệp từ Hugging Face được lưu trữ như bình thường trong bộ nhớ đệm `huggingface_hub`, mặc định nằm tại `~/.cache/huggingface/hub`. Xem [tài liệu về bộ nhớ đệm Hub](https://huggingface.co/docs/huggingface_hub/guides/manage-cache) để biết thêm chi tiết và cách thay đổi vị trí của nó.

Bộ nhớ đệm Hub cho phép 🤗 Datasets tránh việc tải lại các tệp dữ liệu từ Hugging Face mỗi khi bạn sử dụng chúng.

🤗 Datasets cũng có bộ nhớ đệm riêng để lưu trữ các bộ dữ liệu đã chuyển đổi sang định dạng Arrow (định dạng được sử dụng bởi các đối tượng [Dataset](/docs/datasets/main/vi/package_reference/main_classes#datasets.Dataset)).

Hướng dẫn này tập trung vào bộ nhớ đệm của 🤗 Datasets và sẽ cho bạn thấy cách:

- Thay đổi thư mục cache.
- Kiểm soát cách một tập dữ liệu được tải từ bộ nhớ đệm.
- Dọn dẹp các tệp cache trong thư mục.
- Bật hoặc tắt bộ nhớ đệm.

## Thư mục bộ nhớ đệm

Thư mục cache mặc định của 🤗 Datasets là `~/.cache/huggingface/datasets`. Thay đổi vị trí cache bằng cách đặt biến môi trường shell `HF_HOME` thành một thư mục khác:

```
$ export HF_HOME="/path/to/another/directory"
```

Ngoài ra, bạn có thể đặt biến môi trường `HF_DATASETS_CACHE` để chỉ kiểm soát thư mục cache dành riêng cho datasets:

```
$ export HF_DATASETS_CACHE="/path/to/datasets_cache"
```

⚠️ Điều này chỉ áp dụng cho các tệp được ghi bởi thư viện `datasets` (ví dụ: tệp Arrow và chỉ mục). Nó **không** ảnh hưởng đến các tệp được tải xuống từ Hugging Face Hub (chẳng hạn như mô hình, tokenizer hoặc nguồn dữ liệu thô), vốn được đặt trong `~/.cache/huggingface/hub` theo mặc định và được kiểm soát riêng thông qua biến `HF_HUB_CACHE`:

```
$ export HF_HUB_CACHE="/path/to/hub_cache"
```

💡 Nếu bạn muốn di chuyển tất cả các bộ nhớ đệm của Hugging Face — bao gồm cả datasets và các tệp tải từ hub — hãy sử dụng biến `HF_HOME` thay thế:

```
$ export HF_HOME="/path/to/cache_root"
```

Điều này dẫn đến:
- bộ nhớ đệm datasets → `/path/to/cache_root/datasets`
- bộ nhớ đệm hub → `/path/to/cache_root/hub`

Những phân biệt này đặc biệt hữu ích khi làm việc trong các môi trường dùng chung hoặc hệ thống tệp mạng (ví dụ: NFS). Xem [issue #7480](https://github.com/huggingface/datasets/issues/7480) để thảo luận về cách người dùng gặp phải các vị trí cache không mong đợi khi `HF_HUB_CACHE` không được đặt cùng với `HF_DATASETS_CACHE`.

Khi bạn tải một bộ dữ liệu, bạn cũng có tùy chọn thay đổi vị trí lưu bộ nhớ đệm cho dữ liệu. Thay đổi tham số `cache_dir` thành đường dẫn mong muốn:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset('username/dataset', cache_dir="/path/to/another/directory/datasets")
```

## Chế độ tải xuống

Kiểm soát việc tái sử dụng các tệp nguồn đã tải xuống và các bộ dữ liệu đã chuẩn bị trong [load_dataset()](/docs/datasets/main/vi/package_reference/loading_methods#datasets.load_dataset) bằng tham số `download_mode`. Mặc định, 🤗 Datasets sẽ tái sử dụng chúng nếu chúng tồn tại. Để tải lại các tệp nguồn và xây dựng lại bộ dữ liệu, hãy sử dụng `force_redownload`:

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset('rajpurkar/squad', download_mode='force_redownload')
```

Tham khảo [DownloadMode](/docs/datasets/main/vi/package_reference/builder_classes#datasets.DownloadMode) để xem danh sách đầy đủ các chế độ tải xuống.

## Tệp đệm

Dọn dẹp các tệp cache Arrow trong thư mục bằng [Dataset.cleanup_cache_files()](/docs/datasets/main/vi/package_reference/main_classes#datasets.Dataset.cleanup_cache_files):

```py
# Returns the number of removed cache files
>>> dataset.cleanup_cache_files()
2
```

## Bật hoặc tắt bộ nhớ đệm

Nếu bạn đang sử dụng một tệp được lưu trong bộ nhớ đệm cục bộ, hệ thống sẽ tự động tải lại bộ dữ liệu kèm theo các phép biến đổi trước đó mà bạn đã áp dụng lên bộ dữ liệu. Tắt hành vi này bằng cách đặt tham số `load_from_cache_file=False` trong [Dataset.map()](/docs/datasets/main/vi/package_reference/main_classes#datasets.Dataset.map):

```py
>>> updated_dataset = small_dataset.map(add_prefix, load_from_cache_file=False)
```

Trong ví dụ trên, 🤗 Datasets sẽ thực thi hàm `add_prefix` trên toàn bộ tập dữ liệu một lần nữa thay vì tải tập dữ liệu từ trạng thái trước đó.

Tắt bộ nhớ đệm trên phạm vi toàn cục bằng [disable_caching()](/docs/datasets/main/vi/package_reference/main_classes#datasets.disable_caching):

```py
>>> from datasets import disable_caching
>>> disable_caching()
```

Khi bạn tắt bộ nhớ đệm, 🤗 Datasets sẽ không còn tải lại các tệp được lưu trong bộ nhớ đệm khi áp dụng các phép biến đổi lên datasets. Mọi phép biến đổi bạn áp dụng lên dataset của mình sẽ cần được áp dụng lại.

> [!TIP]
> Nếu bạn muốn sử dụng lại một bộ dữ liệu từ đầu, hãy thử đặt tham số `download_mode` trong [load_dataset()](/docs/datasets/main/vi/package_reference/loading_methods#datasets.load_dataset) thay vào đó.

## Cải thiện hiệu suất

Việc tắt bộ nhớ đệm và sao chép bộ dữ liệu trong bộ nhớ sẽ tăng tốc các thao tác trên bộ dữ liệu. Có hai tùy chọn để sao chép bộ dữ liệu trong bộ nhớ:

1. Đặt `datasets.config.IN_MEMORY_MAX_SIZE` thành một giá trị khác không (tính bằng byte) phù hợp với bộ nhớ RAM của bạn.

2. Đặt biến môi trường `HF_DATASETS_IN_MEMORY_MAX_SIZE` thành một giá trị khác không. Lưu ý rằng phương pháp đầu tiên có độ ưu tiên cao hơn.

