中文
本页内容

缓存系统

openMind Hub Client缓存机制旨在成为跨库共享的中央缓存系统,防止重复下载相同文件。

缓存文件布局

缓存文件布局如下:

bash

<CACHE_DIR>
├─ <MODELS>
├─ <DATASETS>
├─ <SPACES>

  • CACHE_DIR通常为用户主目录。可以通过所有方法上的cache_dir参数自定义。

  • MODELS、DATASETS、SPACE分别为模型、数据集和体验空间的缓存目录。模型、数据集和体验空间共享一个公共根目录。每个仓库目录的命名格式为:仓库类型(MODELS、DATASETS、SPACES)--命名空间(组织或用户名,如果存在)--仓库名称。示例如下:

    bash
    
    <CACHE_DIR>
    ├─ models--ByteDance--SDXL-Lightning
    ├─ models--ByteDance--sd2.1-base-zsnr-laionaes5
    ├─ models--bert-base-cased
    ├─ datasets--glue
    
    

缓存功能介绍

在缓存目录中,所有文件将从模型库下载。缓存功能中若文件已存在且未更新,则不重复下载;但当文件已更新,并且请求最新文件,则下载最新文件(同时保留历史文件以防再次需要使用)。 为了实现上述缓存功能,所有缓存目录须包含相同的结构,每个缓存目录设计为包含以下内容:

bash

<CACHE_DIR>
├─ datasets--glue
│  ├─ refs
│  ├─ blobs
│  ├─ snapshots
...

由于断点续传功能,openMind Hub Client不会自动删除下载失败后的缓存文件,建议用户不需要的情况下手动删除。

Refs

refs文件夹包含了指定分支最新提交标识符(commit hash)的文件。例如:

  • 如果之前从仓库的main分支(主版本分支)获取过文件,refs文件夹将包含一个名为main的文件,该文件本身包含当前头部的提交标识符。

  • 如果最新的main分支(主版本分支)提交标识符(commit hash)为de9f2c,则refs/main将包含de9f2c标识。

  • 如果同一分支用标识符为7fd25e的新提交进行了更新,则重新下载该引用的文件将更新refs/main文件以包含7fd25e。

Blobs

blobs文件夹包含下载的实际文件。每个文件的名称是文件的哈希值。

bash

    [  96]  .
    └── [ 160]  models--chatglm3-6B
        ├── [ 160]  blobs
        │   ├── [1201M]  447d41b7c5e7b2558905c98733469aa9e132540c91e13c4cdd7bfc58b60cc650
        │   ├── [ 398]  b098244a71fbe69ce149682d9072a7629f7e908c
        │   └── [1.4K]  c2d28f08b86bacac392140d0f6b26c05d567321f
        ├── [  96]  refs
        │   └── [  40]  main
        └── [ 128]  snapshots
            ├── [ 128]  de9f2ce1b3afad3e85a0bd17d9b100db4b3
            │   ├── [  52]  README.md -> ../../blobs/b098244a71fbe69ce149682d9072a7629f7e908c
            │   └── [  76]  pytorch_model.bin -> ../../blobs/447d41b7c5e7b2558905c98733469aa9e132540c91e13c4cdd7bfc58b60cc650
            └── [ 128]  7fd25eb4b0d3255bfef95601890afbd17d9
                ├── [  52]  README.md -> ../../blobs/c2d28f08b86bacac392140d0f6b26c05d567321f
                └── [  76]  pytorch_model.bin -> ../../blobs/447d41b7c5e7b2558905c98733469aa9e132540c91e13c4cdd7bfc58b60cc650

通过这种文件共享的机制:如果在版本de9f2c中下载了一个文件,但是在修订版本7fd25e中这个文件没有被修改,这个文件将具有相同的哈希值,因此无需重新下载该文件(pytorch_model.bin)。

no_exist

除了blobs、refs和snapshots文件夹之外,缓存系统中还可能找到一个.no_exist文件夹。这个文件夹用于跟踪曾尝试下载但在模型库内不存在的文件。 主要用于减少其他库的http请求来加速模型加载。