Hub Python 库文档

缓存系统参考

Hugging Face's logo
加入 Hugging Face 社区

并获取增强文档体验的访问权限

开始使用

缓存系统参考

缓存系统在 v0.8.0 版本中进行了更新,成为依赖于 Hub 的所有库共享的中央缓存系统。阅读缓存系统指南,以详细了解 HF 中的缓存。

辅助函数

try_to_load_from_cache

huggingface_hub.try_to_load_from_cache

< >

( repo_id: str filename: str cache_dir: Union = None revision: Optional = None repo_type: Optional = None ) Optional[str]_CACHED_NO_EXIST

参数

  • cache_dir (stros.PathLike) — 缓存文件所在的文件夹。
  • repo_id (str) — huggingface.co 上仓库的 ID。
  • filename (str) — 要在 repo_id 中查找的文件名。
  • revision (str可选) — 要使用的特定模型版本。如果未提供并且也没有提供 commit_hash,则默认为 "main"
  • repo_type (str可选) — 仓库的类型。默认为 "model"

返回值

Optional[str]_CACHED_NO_EXIST

如果文件未缓存,则返回 None。否则

  • 如果在缓存中找到,则返回缓存文件的准确路径
  • 如果文件在给定的提交哈希值中不存在并且此事实已缓存,则返回特殊值 _CACHED_NO_EXIST

探索缓存以返回给定修订版本的最新缓存文件(如果找到)。

如果文件未缓存,此函数不会引发任何异常。

示例

from huggingface_hub import try_to_load_from_cache, _CACHED_NO_EXIST

filepath = try_to_load_from_cache()
if isinstance(filepath, str):
    # file exists and is cached
    ...
elif filepath is _CACHED_NO_EXIST:
    # non-existence of file is cached
    ...
else:
    # file is not cached
    ...

cached_assets_path

huggingface_hub.cached_assets_path

< >

( library_name: str namespace: str = 'default' subfolder: str = 'default' assets_dir: Union = None )

参数

  • library_name (str) — 将管理缓存文件夹的库的名称。例如:"dataset"
  • namespace (str可选,默认为“default”) — 数据所属的命名空间。例如:"SQuAD"
  • assets_dir (str, Path, 可选) — 缓存资产的文件夹路径。此路径不能与 Hub 文件缓存的文件夹相同。如果未提供,则默认为 HF_HOME / "assets"。也可以通过 HF_ASSETS_CACHE 环境变量设置。

返回一个用于缓存任意文件的文件夹路径。

huggingface_hub 提供了一个规范的文件夹路径来存储资产。这是在后续库中集成缓存的推荐方式,因为它将受益于内置工具来正确扫描和删除缓存。

Hub 文件和资产之间的缓存方式有所区别。来自 Hub 的文件以 Git 方式缓存,并完全由 huggingface_hub 管理。请参阅 相关文档。后续库缓存的所有其他文件都被视为“资产”(从外部来源下载的文件、从 .tar 归档文件中提取的文件、预处理用于训练的文件等)。

生成文件夹路径后,保证其存在且为目录。该路径基于三个级别的深度:库名称、命名空间和子文件夹。这三个级别提供了灵活性,同时允许 huggingface_hub 在扫描/删除资产缓存的部分时预期文件夹。在一个库中,预期所有命名空间共享相同的子文件夹名称子集,但这并非强制规则。然后,后续库可以完全控制在其缓存中采用哪种文件结构。命名空间和子文件夹是可选的(默认为 "default/" 子文件夹),但库名称是必须的,因为我们希望每个后续库都管理自己的缓存。

预期树结构

    assets/
    └── datasets/
    │   ├── SQuAD/
    │   │   ├── downloaded/
    │   │   ├── extracted/
    │   │   └── processed/
    │   ├── Helsinki-NLP--tatoeba_mt/
    │       ├── downloaded/
    │       ├── extracted/
    │       └── processed/
    └── transformers/
        ├── default/
        │   ├── something/
        ├── bert-base-cased/
        │   ├── default/
        │   └── training/
    hub/
    └── models--julien-c--EsperBERTo-small/
        ├── blobs/
        │   ├── (...)
        │   ├── (...)
        ├── refs/
        │   └── (...)
        └── [ 128]  snapshots/
            ├── 2439f60ef33a0d46d85da5001d52aeda5b00ce9f/
            │   ├── (...)
            └── bbc77c8132af1cc5cf678da3f1ddf2de43606d48/
                └── (...)

示例

>>> from huggingface_hub import cached_assets_path

>>> cached_assets_path(library_name="datasets", namespace="SQuAD", subfolder="download")
PosixPath('/home/wauplin/.cache/huggingface/extra/datasets/SQuAD/download')

>>> cached_assets_path(library_name="datasets", namespace="SQuAD", subfolder="extracted")
PosixPath('/home/wauplin/.cache/huggingface/extra/datasets/SQuAD/extracted')

>>> cached_assets_path(library_name="datasets", namespace="Helsinki-NLP/tatoeba_mt")
PosixPath('/home/wauplin/.cache/huggingface/extra/datasets/Helsinki-NLP--tatoeba_mt/default')

>>> cached_assets_path(library_name="datasets", assets_dir="/tmp/tmp123456")
PosixPath('/tmp/tmp123456/datasets/default/default')

scan_cache_dir

huggingface_hub.scan_cache_dir

< >

( cache_dir: Union = None )

参数

  • cache_dir (strPath, 可选) — 要扫描的缓存目录。默认为默认的 HF 缓存目录。

抛出异常

CacheNotFoundValueError

  • CacheNotFound — 如果缓存目录不存在。

  • ValueError — 如果缓存目录是文件而不是目录。

扫描整个 HF 缓存系统并返回一个 ~HFCacheInfo 结构。

使用 scan_cache_dir 以编程方式扫描缓存系统。缓存将按存储库逐个扫描。如果存储库已损坏,则内部将抛出 ~CorruptedCacheException,但会被捕获并在 ~HFCacheInfo 结构中返回。只有有效的存储库才能获得正确的报告。

>>> from huggingface_hub import scan_cache_dir

>>> hf_cache_info = scan_cache_dir()
HFCacheInfo(
    size_on_disk=3398085269,
    repos=frozenset({
        CachedRepoInfo(
            repo_id='t5-small',
            repo_type='model',
            repo_path=PosixPath(...),
            size_on_disk=970726914,
            nb_files=11,
            revisions=frozenset({
                CachedRevisionInfo(
                    commit_hash='d78aea13fa7ecd06c29e3e46195d6341255065d5',
                    size_on_disk=970726339,
                    snapshot_path=PosixPath(...),
                    files=frozenset({
                        CachedFileInfo(
                            file_name='config.json',
                            size_on_disk=1197
                            file_path=PosixPath(...),
                            blob_path=PosixPath(...),
                        ),
                        CachedFileInfo(...),
                        ...
                    }),
                ),
                CachedRevisionInfo(...),
                ...
            }),
        ),
        CachedRepoInfo(...),
        ...
    }),
    warnings=[
        CorruptedCacheException("Snapshots dir doesn't exist in cached repo: ..."),
        CorruptedCacheException(...),
        ...
    ],
)

您也可以使用以下命令从 huggingface-cli 直接打印详细报告:

> huggingface-cli scan-cache
REPO ID                     REPO TYPE SIZE ON DISK NB FILES REFS                LOCAL PATH
--------------------------- --------- ------------ -------- ------------------- -------------------------------------------------------------------------
glue                        dataset         116.3K       15 1.17.0, main, 2.4.0 /Users/lucain/.cache/huggingface/hub/datasets--glue
google/fleurs               dataset          64.9M        6 main, refs/pr/1     /Users/lucain/.cache/huggingface/hub/datasets--google--fleurs
Jean-Baptiste/camembert-ner model           441.0M        7 main                /Users/lucain/.cache/huggingface/hub/models--Jean-Baptiste--camembert-ner
bert-base-cased             model             1.9G       13 main                /Users/lucain/.cache/huggingface/hub/models--bert-base-cased
t5-base                     model            10.1K        3 main                /Users/lucain/.cache/huggingface/hub/models--t5-base
t5-small                    model           970.7M       11 refs/pr/1, main     /Users/lucain/.cache/huggingface/hub/models--t5-small

Done in 0.0s. Scanned 6 repo(s) for a total of 3.4G.
Got 1 warning(s) while scanning. Use -vvv to print details.

返回值:一个 ~HFCacheInfo 对象。

数据结构

所有结构都由 scan_cache_dir() 构建和返回,并且是不可变的。

HFCacheInfo

huggingface_hub.HFCacheInfo

< >

( size_on_disk: int repos: FrozenSet warnings: List )

参数

  • size_on_disk (int) — 缓存系统中所有有效存储库大小的总和。
  • repos (FrozenSet[CachedRepoInfo]) — 在扫描缓存系统时找到的所有有效缓存存储库的集合,每个存储库由一个 ~CachedRepoInfo 对象描述。
  • 警告 (List[CorruptedCacheException]) — 扫描缓存期间发生的 ~CorruptedCacheException 列表。捕获这些异常以便扫描可以继续进行。扫描会跳过损坏的仓库。

保存有关整个缓存系统信息的冻结数据结构。

此数据结构由 scan_cache_dir() 返回,并且是不可变的。

这里 size_on_disk 等于所有仓库大小的总和(仅限 Blob)。但是,如果某些缓存的仓库已损坏,则不会考虑它们的大小。

delete_revisions

< >

( *revisions: str )

准备删除本地缓存的一个或多个修订版本的策略。

输入的修订版本可以是任何修订版本哈希。如果在本地缓存中找不到修订版本哈希,则会发出警告,但不会引发错误。由于哈希在仓库之间是唯一的,因此修订版本可以来自不同的缓存仓库。

示例

>>> from huggingface_hub import scan_cache_dir
>>> cache_info = scan_cache_dir()
>>> delete_strategy = cache_info.delete_revisions(
...     "81fd1d6e7847c99f5862c9fb81387956d99ec7aa"
... )
>>> print(f"Will free {delete_strategy.expected_freed_size_str}.")
Will free 7.9K.
>>> delete_strategy.execute()
Cache deletion done. Saved 7.9K.
>>> from huggingface_hub import scan_cache_dir
>>> scan_cache_dir().delete_revisions(
...     "81fd1d6e7847c99f5862c9fb81387956d99ec7aa",
...     "e2983b237dccf3ab4937c97fa717319a9ca1a96d",
...     "6c0e6080953db56375760c0471a8c5f2929baf11",
... ).execute()
Cache deletion done. Saved 8.6G.

delete_revisions 返回一个 DeleteCacheStrategy 对象,该对象需要执行。该 DeleteCacheStrategy 不应修改,但允许在实际执行删除之前进行试运行。

export_as_table

< >

( verbosity: int = 0 ) str

参数

  • 详细程度 (int, 可选) — 详细程度级别。默认为 0。

返回值

str

表格作为字符串。

HFCacheInfo 对象生成表格。

传递 verbosity=0 以获取每个仓库一行、列为“repo_id”、“repo_type”、“size_on_disk”、“nb_files”、“last_accessed”、“last_modified”、“refs”、“local_path”的表格。

传递 verbosity=1 以获取每个仓库和修订版本一行(因此单个仓库可以出现多行)、列为“repo_id”、“repo_type”、“revision”、“size_on_disk”、“nb_files”、“last_modified”、“refs”、“local_path”的表格。

示例

>>> from huggingface_hub.utils import scan_cache_dir

>>> hf_cache_info = scan_cache_dir()
HFCacheInfo(...)

>>> print(hf_cache_info.export_as_table())
REPO ID                                             REPO TYPE SIZE ON DISK NB FILES LAST_ACCESSED LAST_MODIFIED REFS LOCAL PATH
--------------------------------------------------- --------- ------------ -------- ------------- ------------- ---- --------------------------------------------------------------------------------------------------
roberta-base                                        model             2.7M        5 1 day ago     1 week ago    main ~/.cache/huggingface/hub/models--roberta-base
suno/bark                                           model             8.8K        1 1 week ago    1 week ago    main ~/.cache/huggingface/hub/models--suno--bark
t5-base                                             model           893.8M        4 4 days ago    7 months ago  main ~/.cache/huggingface/hub/models--t5-base
t5-large                                            model             3.0G        4 5 weeks ago   5 months ago  main ~/.cache/huggingface/hub/models--t5-large

>>> print(hf_cache_info.export_as_table(verbosity=1))
REPO ID                                             REPO TYPE REVISION                                 SIZE ON DISK NB FILES LAST_MODIFIED REFS LOCAL PATH
--------------------------------------------------- --------- ---------------------------------------- ------------ -------- ------------- ---- -----------------------------------------------------------------------------------------------------------------------------------------------------
roberta-base                                        model     e2da8e2f811d1448a5b465c236feacd80ffbac7b         2.7M        5 1 week ago    main ~/.cache/huggingface/hub/models--roberta-base/snapshots/e2da8e2f811d1448a5b465c236feacd80ffbac7b
suno/bark                                           model     70a8a7d34168586dc5d028fa9666aceade177992         8.8K        1 1 week ago    main ~/.cache/huggingface/hub/models--suno--bark/snapshots/70a8a7d34168586dc5d028fa9666aceade177992
t5-base                                             model     a9723ea7f1b39c1eae772870f3b547bf6ef7e6c1       893.8M        4 7 months ago  main ~/.cache/huggingface/hub/models--t5-base/snapshots/a9723ea7f1b39c1eae772870f3b547bf6ef7e6c1
t5-large                                            model     150ebc2c4b72291e770f58e6057481c8d2ed331a         3.0G        4 5 months ago  main ~/.cache/huggingface/hub/models--t5-large/snapshots/150ebc2c4b72291e770f58e6057481c8d2ed331a

CachedRepoInfo

huggingface_hub.CachedRepoInfo

< >

( repo_id: str repo_type: Literal repo_path: Path size_on_disk: int nb_files: int revisions: FrozenSet last_accessed: float last_modified: float )

参数

  • repo_id (str) — Hub 上仓库的仓库 ID。例如:"google/fleurs"
  • repo_type (Literal["dataset", "model", "space"]) — 缓存仓库的类型。
  • 磁盘占用大小 (int) — 缓存仓库中 Blob 文件大小的总和。
  • 文件数量 (int) — 缓存仓库中 Blob 文件的总数。
  • 版本信息 (FrozenSet[CachedRevisionInfo]) — ~CachedRevisionInfo 的集合,描述了仓库中缓存的所有版本。
  • 上次访问时间 (float) — 仓库中 Blob 文件最后一次被访问的时间戳。
  • 上次修改时间 (float) — 仓库中 Blob 文件最后一次修改/创建的时间戳。

存储关于缓存仓库信息的冻结数据结构。

由于存在重复文件,size_on_disk 不一定等于所有版本大小的总和。此外,仅考虑 Blob 文件的大小,不包括文件夹和符号链接(大小可以忽略不计)。

last_accessedlast_modified 的可靠性可能取决于您使用的操作系统。有关更多详细信息,请参阅 python 文档

size_on_disk_str

< >

( )

(属性) Blob 文件大小的总和,以人类可读的字符串表示。

例如:“42.2K”。

refs

< >

( )

(属性) refs 与版本数据结构之间的映射。

CachedRevisionInfo

huggingface_hub.CachedRevisionInfo

< >

( commit_hash: str snapshot_path: Path size_on_disk: int files: FrozenSet refs: FrozenSet last_modified: float )

参数

  • snapshot_path (Path) — snapshots 文件夹中修订版本目录的路径。它包含与 Hub 上的仓库完全相同的树结构。files — (FrozenSet[CachedFileInfo]): ~CachedFileInfo 的集合,描述快照中包含的所有文件。
  • refs (FrozenSet[str]) — 指向此修订版本的 refs 集合。如果修订版本没有 refs,则认为它是分离的。例如:{"main", "2.4.0"}{"refs/pr/1"}
  • size_on_disk (int) — 由修订版本符号链接的 Blob 文件大小的总和。
  • last_modified (float) — 修订版本最后创建/修改的时间戳。

保存有关修订版本信息的冻结数据结构。

修订版本对应于 snapshots 文件夹中的一个文件夹,并填充与 Hub 上的仓库完全相同的树结构,但仅包含符号链接。修订版本可以被 1 个或多个 refs 引用,也可以是“分离的”(没有 refs)。

由于 Blob 文件在多个修订版本之间共享,因此无法在单个修订版本上正确确定 last_accessed

由于可能存在重复文件,因此 size_on_disk 不一定是所有文件大小的总和。此外,只考虑 Blob,不考虑文件夹和符号链接(可忽略不计)的大小。

size_on_disk_str

< >

( )

(属性) Blob 文件大小的总和,以人类可读的字符串表示。

例如:“42.2K”。

文件数量

< >

( )

(属性) 修订版本中的文件总数。

CachedFileInfo

huggingface_hub.CachedFileInfo

< >

( file_name: str file_path: Path blob_path: Path size_on_disk: int blob_last_accessed: float blob_last_modified: float )

参数

  • file_name (str) — 文件的名称。例如:config.json
  • blob_path (Path) — Blob 文件的路径。这等效于 file_path.resolve()
  • size_on_disk (int) — Blob 文件的大小(以字节为单位)。
  • blob_last_accessed (float) — Blob 文件上次访问的时间戳(来自任何修订版)。
  • blob_last_modified (float) — Blob 文件上次修改/创建的时间戳。

存储单个缓存文件信息的冻结数据结构。

blob_last_accessedblob_last_modified 的可靠性可能取决于您使用的操作系统。有关更多详细信息,请参阅 python 文档

size_on_disk_str

< >

( )

(属性) Blob 文件大小的可读字符串。

例如:“42.2K”。

DeleteCacheStrategy

class huggingface_hub.DeleteCacheStrategy

< >

( expected_freed_size: int blobs: FrozenSet refs: FrozenSet repos: FrozenSet snapshots: FrozenSet )

参数

  • expected_freed_size (float) — 执行策略后预计释放的空间大小。
  • blobs (FrozenSet[Path]) — 要删除的 Blob 文件路径的集合。
  • refs (FrozenSet[Path]) — 要删除的参考文件路径的集合。
  • snapshots (FrozenSet[Path]) — 要删除的快照集(符号链接目录)。

用于删除缓存版本的策略的冻结数据结构。

此对象并非旨在通过编程方式实例化,而是由 delete_revisions() 返回。请参阅文档以了解使用示例。

expected_freed_size_str

< >

( )

(属性) 将释放的预期大小,以人类可读的字符串表示。

例如:“42.2K”。

异常

CorruptedCacheException

class huggingface_hub.CorruptedCacheException

< >

( )

Huggingface 缓存系统中出现任何意外结构时的异常。

< > 在 GitHub 上更新