DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Hugging Face 模型已经下载,离线加载仍报 LocalEntryNotFoundError

离线加载按实际 cache_dir、仓库、revision 和文件名定位。核对子模型及 symlink 目标,区分 Hub 缓存、local_dir 与 pyannote 自有缓存目录。

磁盘里能看到模型目录,切到离线环境后仍报 LocalEntryNotFoundError。这个错误说明当前调用没找到它要的本地条目,不能据此断定整个模型都没下载,也不能证明库忽略了缓存。

应对齐四项:这次调用的缓存目录、仓库 ID、revision 和文件名。下面按 huggingface_hub 0.36.0 的文件缓存结构说明,并单独指出 pyannote.audio 3.1.1 的缓存入口。

检查的是报错文件,不是任意一个 config

从完整异常里读出 repo_id、filename 和 revision。主模型的 config.yaml 存在,不代表配置引用的另一个 segmentation 或 embedding 模型权重也存在。修改了配置中的模型 ID,更需要重新核对依赖。

如果应用显式传了 cache_dir,先按这个目录检查。只看 HF_HUB_CACHE 的值可能找错位置;容器还要确认目录挂载到了实际报错进程可见的位置,且运行账号能读取。

以下示例只查询缓存,不发 HTTP 请求。三个字符串都应替换成失败调用中的值,revision 尽量使用已经下载过的完整 commit hash:

from pathlib import Path
from huggingface_hub import try_to_load_from_cache, _CACHED_NO_EXIST

path = try_to_load_from_cache(
    repo_id="organization/model-name",
    filename="config.json",
    revision="REPLACE_WITH_FULL_COMMIT_HASH",
    cache_dir="/srv/models/hub",
)
if isinstance(path, str):
    print("cached:", path, "regular file exists:", Path(path).is_file())
elif path is _CACHED_NO_EXIST:
    print("file absence was cached for this revision")
else:
    print("no matching cached entry")

is_file() 只核对常规文件是否存在(包括符号链接指向的目标),不检查当前账号是否有读取权限;可读性仍要由实际打开或原加载入口确认。这也只核对指定的一个文件。权重分片、索引和 tokenizer 文件需要各自存在;_CACHED_NO_EXIST 也不是“这份模型永远没有此文件”,而是该 revision 的不存在记录。

revision 与搬运目录要保持一致

Hub 缓存通常在仓库目录中包含 refs、snapshots 和 blobs。分支名通过 refs 映射到 commit;snapshots/<commit> 中的文件可能是指向 blobs 的符号链接。只复制 snapshot 目录而漏掉 blob,会留下看起来存在、实际目标丢失的链接。

保留原缓存,重新准备完整的所需缓存结构或独立模型目录。Windows 等不使用 symlink 的缓存方式应按实际文件检查,不强行把它改造成链接结构。

离线调用 main 时,需要本地知道它映射到哪个 commit。已经有正确 commit 的缓存时,可在应用配置中固定同一个 commit,避免误用另一个 revision。不要通过手改 refs/main 掩盖文件来自不同版本的问题。

下载到 local_dir,不等于放进默认 Hub 缓存

使用 snapshot_download(..., local_dir=...) 时,文件布局与默认缓存模式不同。应用若仍按 repo_id 加默认 cache_dir 查找,就可能看不到这些文件。

在可联网且已有必要访问权限的准备环境中,用同一 revision 下载需要的完整文件,保留库版本与依赖清单。目标框架支持本地目录加载时,明确传入那个目录;使用 Hub 缓存模式时,下载端与离线端应使用同一 cache_dir。不要混用路径后再复制一份看似同名的目录。

0.36.0 的离线 snapshot_download 可能返回已经存在的 snapshot 目录,这不能单独证明所有文件完整。还需按目标框架的权重索引、配置和 tokenizer 需求核对文件,并让原加载入口在隔离验证环境中完成离线加载。

pyannote 的缓存可能另有入口

pyannote.audio 3.1.1 使用 PYANNOTE_CACHE,默认路径按该版本的 torch 缓存约定确定;它的加载函数会把自己的 cache_dir 传给 Hub。仅设置 HF_HUB_CACHE,不保证它沿用该目录。

确认项目确实使用这个版本路径后,在导入 pyannote 之前设置预期的 PYANNOTE_CACHE,或使用加载入口支持的显式 cache_dir。顶层 pipeline 和子模型也要沿用预期目录,不能只让第一份配置命中。

最后在新的离线进程中复查原应用,确认实际需要的所有仓库和文件可读。local_files_only=True 与 HF_HUB_OFFLINE=1 可以限制 Hub 的联网行为,但不会补齐缺失文件,也不保证应用的其他组件不会联网。保留原目录和配置,失败时切回;无需先清空全部缓存。