Datasets 文档
缓存管理
并获得增强的文档体验
开始使用
缓存管理
当您从 Hugging Face 下载数据集时,数据会本地存储在您的计算机上。来自 Hugging Face 的文件通常存储在 `huggingface_hub` 缓存中,默认位置是 `~/.cache/huggingface/hub`。更多详细信息以及如何更改其位置,请参阅 Hub 缓存文档。
Hub 缓存使 🤗 Datasets 在每次使用数据集时避免从 Hugging Face 重新下载文件。
🤗 Datasets 也有自己的缓存,用于存储转换为 Arrow 格式(Dataset 对象使用的格式)的数据集。
本指南重点介绍 🤗 Datasets 的缓存,并向您展示如何:
- 更改缓存目录。
- 控制如何从缓存中加载数据集。
- 清理目录中的缓存文件。
- 启用或禁用缓存。
缓存目录
🤗 Datasets 的默认缓存目录是 `~/.cache/huggingface/datasets`。通过将 shell 环境变量 `HF_HOME` 设置为另一个目录来更改缓存位置:
$ export HF_HOME="/path/to/another/directory/datasets"
或者,您可以设置 `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 缓存——包括数据集和 Hub 下载——请改用 `HF_HOME` 变量。
$ export HF_HOME="/path/to/cache_root"
这将导致:
- 数据集缓存 → `/path/to/cache_root/datasets`
- Hub 缓存 → `/path/to/cache_root/hub`
这些区别在共享环境或网络文件系统(例如,NFS)中特别有用。
请参阅 问题 #7480,了解当 `HF_DATASETS_CACHE` 与 `HF_HUB_CACHE` 未同时设置时用户如何遇到意外的缓存位置。
当您加载数据集时,您还可以选择更改数据缓存的位置。将 `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('rajpurkar/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` 设置为非零值。请注意,第一种方法具有更高的优先级。