如何更改 Huggingface Transformers 默认缓存目录

Iva*_*Lee 5 huggingface-transformers

默认缓存目录磁盘容量不足,我需要更改默认缓存目录的配置。

ays*_*ljc 53

正如@cronoik提到的,除了在终端中修改缓存路径之外,您还可以直接在代码中修改缓存目录。如果您在 HuggingFace 上查找有任何困难,我只会为您提供实际的代码:

tokenizer = AutoTokenizer.from_pretrained("roberta-base", cache_dir="new_cache_dir/")

model = AutoModelForMaskedLM.from_pretrained("roberta-base", cache_dir="new_cache_dir/")
Run Code Online (Sandbox Code Playgroud)


Ber*_*ler 38

您可能需要设置HF_HOME环境变量:

export HF_HOME=/path/to/cache/directory
Run Code Online (Sandbox Code Playgroud)

这是因为除了 HF Transformers 本身的模型缓存之外,还有其他 Hugging Face 库的缓存目录也会占用主目录中的空间。之前的回答和评论都没有说清楚这一点。

此外,设置符号链接来捕获未设置环境变量的情况可能是有意义的(您可能必须先移走该目录~/.cache/huggingface,如果存在的话):

ln -s /path/to/cache/directory ~/.cache/huggingface
Run Code Online (Sandbox Code Playgroud)

特别是,HF_HOME环境变量受到 Hugging Face 数据集库的尊重,尽管文档没有明确说明这一点。

Transformers 文档描述了如何确定默认缓存目录:

缓存设置

预训练模型下载并本地缓存在:~/.cache/huggingface/hub。这是 shell 环境变量 TRANSFORMERS_CACHE 指定的默认目录。

在 Windows 上,默认目录由 给出C:\Users\username\.cache\huggingface\hub。您可以更改如下所示的 shell 环境变量(按优先级顺序)以指定不同的缓存目录:

  1. Shell 环境变量(默认):HUGGINGFACE_HUB_CACHE 或 TRANSFORMERS_CACHE。
  2. 外壳环境变量:HF_HOME。
  3. Shell 环境变量:XDG_CACHE_HOME + /huggingface。

这篇文档没有明确提到的是 HF_HOME 默认为$XDG_CACHE_HOME/huggingface并用于其他 Huggingface 缓存,例如数据集缓存,它与 Transformers 缓存分开。XDG_CACHE_HOME 的值取决于机器,但通常是这样的~/.cache(如果未设置 XDG_CACHE_HOME,HF 默认为该值) - 因此通常是默认值~/.cache/huggingface

  • TRANSFORMERS_CACHE 仅控制 Hugging Face Transformers 缓存,即模型检查点。其他 HF 库,如 [datasets](https://github.com/huggingface/datasets/blob/main/src/datasets/config.py#L147)、[evaluate](https://github.com/huggingface/evaluate /blob/main/src/evaluate/config.py#L115)、[集线器](https://github.com/huggingface/huggingface_hub/blob/main/src/huggingface_hub/constants.py#L73) 和 [自动训练] (https://github.com/huggingface/autotrain-advanced/blob/main/src/autotrain/dataset.py#L141)的缓存目录受 HF_HOME 影响,但不受 TRANSFORMERS_CACHE 影响。 (2认同)

cro*_*oik 18

每次使用.from_pretrained加载模型时,您都可以通过设置参数来指定缓存目录cache_dir。您可以通过在每次使用之前(即导入库之前!)导出环境变量TRANSFORMERS_CACHE来定义默认位置。

蟒蛇的例子:

import os
os.environ['TRANSFORMERS_CACHE'] = '/blabla/cache/'
Run Code Online (Sandbox Code Playgroud)

bash 示例:

export TRANSFORMERS_CACHE=/blabla/cache/
Run Code Online (Sandbox Code Playgroud)

  • “导入模块之前”让我避免了使用 flair 的相关问题,提示我在更改 Huggingface 缓存环境变量后导入 flair。 (16认同)
  • 此外,数据集缓存的环境变量是“HF_HOME”。https://github.com/huggingface/transformers/issues/8703 (7认同)

Shi*_*hah 10

通常,您希望将数据集和模型缓存保留更长时间,但其他东西则不然。另外,这些东西很大,您可能不希望放在主文件夹中。

因此,假设您创建了\my_drive\hf希望 HuggingFace 缓存所有内容的目录。您可以创建以下环境变量:

export HF_HOME=\my_drive\hf\misc
export HF_DATASETS_CACHE=\my_drive\hf\datasets
export TRANSFORMERS_CACHE=\my_drive\hf\models
Run Code Online (Sandbox Code Playgroud)

现在您可以更轻松地清理非必需的东西。

请注意,这HF_HOME基本上是 Hub 上所有内容的缓存位置,但在上面您将数据集和模型缓存分开。如果设置则不XDG_CACHE_HOME使用。HF_HOME如果未按上述方式设置,则HF_HOME默认为$XDG_CACHE_HOME/huggingface.

更多信息:https://huggingface.co/docs/huggingface_hub/package_reference/environment_variables