Cannot find an appropriate cached snapshot folder错误?一篇文章彻底搞定huggingface下载难题
作为一名AI开发者,当您满怀期待地写下 from_pretrained
时,最不想看到的可能就是一行鲜红的错误信息。而下面这个错误,相信很多使用 Hugging Face 的朋友都遇到过:
err[msg]=Cannot find an appropriate cached snapshot folder for the specified revision on the local disk and outgoing traffic has been disabled. To enable repo look-ups and downloads online, pass 'local_files_only=False' as input.
别担心,这通常不是一个大问题。但它往往是一个“连锁问题”的开始,尤其对于身处中国大陆的开发者。这篇文章将带您从源头彻底理解并解决这个错误,并提供针对中国区网络环境的最佳实践,让您和您的团队从此告别模型下载的烦恼。
第一步:解读并解决 local_files_only
错误
这个错误信息其实非常直白,我们可以把它分解成两部分来理解:
- “Cannot find an appropriate cached snapshot folder... on the local disk”: 程序在你的电脑本地缓存目录中,没有找到它需要的模型文件。
- “and outgoing traffic has been disabled”: 同时,代码的设置(
local_files_only=True
)禁止了它联网去 Hugging Face Hub 下载这些文件。
通俗地说,就是“我要的东西本地没有,但你又不准我上网去拿,我只能报错了。”
如何解决?
错误信息本身已经给出了答案:允许程序联网下载。
您只需要在加载模型或分词器(Tokenizer)的函数中,明确设置参数 local_files_only=False
即可。
错误代码示例:
from transformers import AutoModel
# 这种设置会禁止网络下载,如果本地没有缓存就会报错
model = AutoModel.from_pretrained("google-bert/bert-base-cased", local_files_only=True)
正确修复后的代码:
from transformers import AutoModel
# 设置为 False,允许程序在找不到本地缓存时,自动联网下载
model = AutoModel.from_pretrained("google-bert/bert-base-cased", local_files_only=False)
注意: 在很多新版本的
transformers
库中,local_files_only
的默认值已经是False
。如果您遇到此错误,说明您的代码或环境中明确地将其设置为了True
。
解决了这个问题,您可能会长舒一口气,重新运行代码。但很快,一个新的问题可能接踵而至——程序卡在 Downloading
...,最后以 Connection Timeout
(连接超时) 告终。
第二步:解决中国区的网络难题——超时与连接失败
这是因为 Hugging Face 的服务器在国外,因众所周知的原因,从中国大陆无法直接访问。
幸运的是,我们有非常成熟且简单的解决方案。强烈推荐使用国内镜像源。
最佳解决方案:使用国内镜像 (hf-mirror.com)
社区驱动的镜像 hf-mirror.com
是目前最受推荐、最稳定可靠的 Hugging Face 镜像。您无需修改任何 Python 代码,只需设置一个环境变量即可。
huggingface_hub
库会自动识别这个名为 HF_ENDPOINT
的环境变量,并将所有下载请求指向这个国内镜像地址,从而实现高速、稳定的下载。
如何设置:
在运行您的 Python 程序之前,在您的终端中执行以下命令:
Linux / macOS 用户:
bashexport HF_ENDPOINT=https://hf-mirror.com
Windows (CMD) 用户:
cmdset HF_ENDPOINT=https://hf-mirror.com
Windows (PowerShell) 用户:
powershell$env:HF_ENDPOINT = "https://hf-mirror.com"
python代码中设置
import os os.environ['HF_ENDPOINT']='https://hf-mirror.com'
设置完毕后,您就可以正常运行之前的 Python 脚本了,下载速度将会有质的飞跃。
备选方案:设置网络代理
如果您已经有一个稳定可靠的科学上网工具,也可以通过设置代理环境变量来解决问题。假设您的代理在本地 127.0.0.1
,端口为 7890
:
- Linux / macOS:bash
export HTTP_PROXY=http://127.0.0.1:7890 export HTTPS_PROXY=http://127.0.0.1:7890
- Windows (CMD):cmd
set HTTP_PROXY=http://127.0.0.1:7890 set HTTPS_PROXY=http://127.0.0.1:7890
虽然此方法可行,但对于仅仅解决 Hugging Face 下载问题来说,使用镜像源(HF_ENDPOINT)是更推荐、更稳定、更专注的方案。
一站式解决方案
下次再遇到 Cannot find an appropriate cached snapshot folder
错误,或任何 Hugging Face 下载相关的网络问题时,请遵循以下两个步骤,即可一劳永逸:
检查代码:确保在
from_pretrained
函数中没有错误地设置local_files_only=True
。如果需要联网,请移除该参数或将其设置为local_files_only=False
。配置环境(中国区用户必做):在终端或系统中设置环境变量
HF_ENDPOINT
。bashexport HF_ENDPOINT=https://hf-mirror.com