缓存系统
openMind Hub Client缓存机制旨在成为跨库共享的中央缓存系统,防止重复下载相同文件。
缓存文件布局
缓存文件布局如下:
<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
缓存功能介绍
在缓存目录中,所有文件将从模型库下载。缓存功能中若文件已存在且未更新,则不重复下载;但当文件已更新,并且请求最新文件,则下载最新文件(同时保留历史文件以防再次需要使用)。 为了实现上述缓存功能,所有缓存目录须包含相同的结构,每个缓存目录设计为包含以下内容:
<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文件夹包含下载的实际文件。每个文件的名称是文件的哈希值。
[ 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请求来加速模型加载。