首先把huggingface_hub的中文文档过一遍。
之前以为huggingface_hub还管模型加载啥的,看了一遍文档之后才知道,它是完完全全只管文件在本地和远端的交互,不做其他事情。
然后发现英文文档还有额外的一些Tips,这个以后再看。
文章目录
仅拉取仓库
如果只是要拉别人的仓库,那么基本只要掌握HfApi的用法就足够了。
py
>>> from huggingface_hub import HfApi
>>> api = HfApi()
api.list_models 列出模型
api.list_datasets 列出数据集
api.list_spaces 列出space,space指的是GUI界面,可以直接上手操作的那种
它们都可以添加各种filter参数,比如任务类型、用的什么库跑的、训练用的数据集等等,还可以按某个属性(比如下载量)排序,取前几条。
仓库开发
如果自己要做模型开发,要上传到远端,那么还要看一下这个小节。
huggingface_hub.create_repo 创建仓库,可以设置仓库名称、仓库类型、可见性等
huggingface_hub.delete_repo 删除仓库
huggingface_hub.duplicate_space 复制别人的仓库
标签和分支操作、重命名仓库、修改可见性等接口在此忽略,详见原始文档。
集合操作
集合(collection)是 Hub 上将一组相关项目(模型、数据集、Spaces、论文)组织在同一页面上的一种方式。一个集合包含了多个元素,每一个元素是"模型、数据集、Spaces、论文"中的一种,可以理解为是Tuple[Any]的数据结构。
huggingface_hub.get_collection 列出特定的集合
huggingface_hub.get_collections 搜索集合
其他集合操作,比如创建新集合、向集合中添加条目、添加备注、重排序等接口在此忽略,详见原始文档。
下载接口
终于来到huggingface_hub.hf_hub_download接口了。这个接口负责从远端下载单个的文件,缓存在本地磁盘(不同版本会自动区分开),并返回它的本地路径。huggingface缓存目录的文件不要乱动,接口给的是软链的地址,手动改到某个地方可能会导致路径失效。
缓存的文件都在.cache/huggingface/下。
hf_hub_download接口至少需要传入repo_id跟文件名称,还有repo_type,默认是模型,也可以是dataset等。还有很多可以指定的参数,比如版本revision,填的话要用完整hash不能用前n位。接口内部有一个hf_hub_url参数,代表下载url,如果有需求也可以拿这个url出去到其他接口里头再下载。
然后是huggingface_hub.snapshot_download接口,这个接口可以下载一整个仓库,内部实际是并行调用了hf_hub_download。这个接口也是需要传入repo_id,但是不需要传文件名了因为要下载整个仓库。其他的比如repo_type和revision都是跟hf_hub_download一样的。然后有一些新的参数,比如allow_patterns跟ignore_patterns可以指定只下载哪些文件,不要哪些文件,local_dir可以不下载到.cache目录,转而下载到用户自己选择的位置。
命令行工具
huggingface还有一个命令行工具hf,可以独立安装,看文档的意思应该是装了huggingface_hub之后就有hf了。
hf auth登录
hf download下载,各种下载,下载单个文件、多个文件、整个目录、一个数据集、dry-run,还有其他一些次要参数就忽略了。
hf upload上传
hf repo仓库操作,创建、修改等
hf cache对已经下载下来的缓存进行操作,比如清空缓存
这里的hf download应该就是用的snapshot_download接口
社区功能
拉取评论之类的接口,略过。
文件系统
通过文件系统 API 与 Hub 交互,这个看起来还挺复杂,目前应该也用不上,我们平时查资料都是直接在网页检索的,所以忽略。
感觉少了点什么,平时用的接口还没记录到,还得看看英文的文档。