# Управление кэшем

При загрузке набора данных с Hugging Face данные сохраняются локально на вашем компьютере. Файлы с Hugging Face хранятся в кэше `huggingface_hub` по стандарту, по умолчанию в `~/.cache/huggingface/hub`. Подробности и способы изменения расположения кэша описаны в [документации кэша Hub](https://huggingface.co/docs/huggingface_hub/guides/manage-cache).

Кэш Hub позволяет 🤗 Datasets избегать повторной загрузки файлов датасетов с Hugging Face каждый раз при их использовании.

🤗 Datasets также имеет собственный кэш для хранения датасетов, преобразованных в формат Arrow (формат, используемый объектами [Dataset](/docs/datasets/main/ru/package_reference/main_classes#datasets.Dataset)).

В этом руководстве рассматривается кеш 🤗 Datasets, и в нём показано, как:

- Измените каталог кэша.
- Управление способом загрузки набора данных из кэша.
- Удалите файлы кэша в каталоге.
- Включить или отключить кэширование.

## Каталог кэша

Каталог кэша 🤗 Datasets по умолчанию — `~/.cache/huggingface/datasets`. Чтобы изменить расположение кэша, задайте переменной окружения оболочки `HF_HOME` значение другого каталога:

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

В качестве альтернативы вы можете задать переменную окружения `HF_DATASETS_CACHE`, чтобы управлять только каталогом кэша, специфичным для датасетов:

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

⚠️ Это касается только файлов, записанных библиотекой `datasets` (например, файлов Arrow и индексов). Это **не** затрагивает файлы, загруженные с Hugging Face Hub (такие как модели, токенизаторы или исходные данные наборов данных), которые по умолчанию находятся в `~/.cache/huggingface/hub` и управляются отдельно с помощью переменной `HF_HUB_CACHE`:

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

💡 Если вы хотите переместить все кэши Hugging Face — включая загрузки датасетов и хаб-файлов — используйте переменную `HF_HOME`:

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

В результате получается:
- кэш datasets → `/path/to/cache_root/datasets`
- hub cache → `/path/to/cache_root/hub`

Эти различия особенно полезны при работе в общих средах или сетевых файловых системах (например, NFS). Обсуждение того, как пользователи сталкивались с неожиданными расположениями кэша, когда `HF_HUB_CACHE` не был задан вместе с `HF_DATASETS_CACHE`, приведено в [issue #7480](https://github.com/huggingface/datasets/issues/7480).

При загрузке набора данных вы также можете изменить место кэширования данных. Задайте параметру `cache_dir` нужный путь:

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

## Режим загрузки

После загрузки набора данных управляйте тем, как он загружается с помощью [load_dataset()](/docs/datasets/main/ru/package_reference/loading_methods#datasets.load_dataset), с помощью параметра `download_mode`. По умолчанию 🤗 Datasets будет повторно использовать набор данных, если он уже существует. Но если вам нужен исходный набор данных без применения каких-либо функций обработки, повторно загрузите файлы, как показано ниже:

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

Список всех режимов загрузки см. в [DownloadMode](/docs/datasets/main/ru/package_reference/builder_classes#datasets.DownloadMode).

## Файлы кэша

Очистите файлы кэша Arrow в каталоге с помощью [Dataset.cleanup_cache_files()](/docs/datasets/main/ru/package_reference/main_classes#datasets.Dataset.cleanup_cache_files):

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

## Включение или отключение кэширования

Если вы используете кэшированный файл локально, набор данных будет автоматически перезагружен вместе с ранее применёнными к нему преобразованиями. Чтобы отключить это поведение, установите аргумент `load_from_cache_file=False` в [Dataset.map()](/docs/datasets/main/ru/package_reference/main_classes#datasets.Dataset.map):

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

В примере выше 🤗 Datasets снова выполнит функцию `add_prefix` над всем набором данных, а не загрузит его из предыдущего состояния.

Отключите кэширование глобально с помощью [disable_caching()](/docs/datasets/main/ru/package_reference/main_classes#datasets.disable_caching):

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

При отключении кэширования 🤗 Datasets больше не будет перезагружать файлы из кэша при применении трансформаций к наборам данных. Любая трансформация, применённая к вашему набору данных, будет требовать повторного применения.

> [!TIP]
> Если вы хотите использовать набор данных с нуля, попробуйте вместо этого задать параметр `download_mode` в [load_dataset()](/docs/datasets/main/ru/package_reference/loading_methods#datasets.load_dataset).

## Повышение производительности

Отключение кэша и копирование набора данных в оперативную память ускорят операции с ним. Существует два варианта копирования набора данных в память:

1. Установите для `datasets.config.IN_MEMORY_MAX_SIZE` ненулевое значение (в байтах), которое помещается в вашу оперативную память.

2. Установите переменную окружения `HF_DATASETS_IN_MEMORY_MAX_SIZE` в ненулевое значение. Обратите внимание, что первый метод имеет более высокий приоритет.

