缓存管理
当您从 Hugging Face 下载数据集时,数据会存储在您计算机的本地。来自 Hugging Face 的文件通常存储在 huggingface_hub
缓存中,默认情况下位于 ~/.cache/huggingface/hub
。有关更多详细信息以及如何更改其位置,请参阅 Hub 缓存文档。
Hub 缓存允许 🤗 数据集避免每次使用数据集时都从 Hugging Face 重新下载数据集文件。
🤗 数据集也有自己的缓存来存储转换为 Arrow 格式的数据集(Dataset 对象使用的格式)。
本指南重点介绍 🤗 数据集缓存,并将向您展示如何
- 更改缓存目录。
- 控制如何从缓存加载数据集。
- 清理目录中的缓存文件。
- 启用或禁用缓存。
缓存目录
默认的 🤗 Datasets 缓存目录为 ~/.cache/huggingface/datasets
。可以通过设置 shell 环境变量 HF_DATASETS_CACHE
为另一个目录来更改缓存位置。
$ export HF_DATASETS_CACHE="/path/to/another/directory/datasets"
加载数据集时,还可以选择更改数据缓存的位置。将 cache_dir
参数更改为您想要使用的路径。
>>> from datasets import load_dataset
>>> dataset = load_dataset('username/dataset', cache_dir="/path/to/another/directory/datasets")
下载模式
下载数据集后,可以通过 load_dataset() 的 download_mode
参数控制其加载方式。默认情况下, 🤗 Datasets 会重用已存在的数据集。但如果您需要原始数据集,且未应用任何处理函数,则可以重新下载文件,如下所示。
>>> from datasets import load_dataset
>>> dataset = load_dataset('squad', download_mode='force_redownload')
有关下载模式的完整列表,请参阅 DownloadMode。
缓存文件
使用 Dataset.cleanup_cache_files() 清理目录中的 Arrow 缓存文件。
# Returns the number of removed cache files
>>> dataset.cleanup_cache_files()
2
启用或禁用缓存
如果您在本地使用缓存文件,它会自动重新加载数据集,并应用您之前应用于数据集的任何转换。可以通过在 Dataset.map() 中设置参数 load_from_cache_file=False
来禁用此行为。
>>> updated_dataset = small_dataset.map(add_prefix, load_from_cache_file=False)
在上面的示例中, 🤗 Datasets 将再次对整个数据集执行函数 add_prefix
,而不是从其先前状态加载数据集。
使用 disable_caching() 在全局范围内禁用缓存。
>>> from datasets import disable_caching
>>> disable_caching()
禁用缓存后, 🤗 Datasets 将不再在将转换应用于数据集时重新加载缓存文件。您应用于数据集的任何转换都需要重新应用。
如果您想从头开始重用数据集,请尝试在 load_dataset() 中设置 download_mode
参数。
提升性能
禁用缓存并将数据集复制到内存中可以加快数据集操作速度。有两种方法可以将数据集复制到内存中。
将
datasets.config.IN_MEMORY_MAX_SIZE
设置为一个非零值(以字节为单位),该值适合您的 RAM 内存。将环境变量
HF_DATASETS_IN_MEMORY_MAX_SIZE
设置为一个非零值。请注意,第一种方法优先级更高。