Huggingface_hub源码解析 - 简介篇

首先把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_patternsignore_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 交互,这个看起来还挺复杂,目前应该也用不上,我们平时查资料都是直接在网页检索的,所以忽略。

感觉少了点什么,平时用的接口还没记录到,还得看看英文的文档。

相关推荐
测试-鹏哥7 小时前
全新驾驶舱功能助力ITP测试平台腾飞
python·测试工具·压力测试
wxin_VXbishe7 小时前
springboot居家养老管理系统-计算机毕业设计源码55953
java·c++·spring boot·python·spring·django·php
Hi_kenyon7 小时前
Plotly高级可视化库的使用方法(二)
python·plotly
互亿无线明明7 小时前
国际金融短信:如何为跨境金融业务构建稳定安全的消息通知链路?
java·python·安全·eclipse·django·virtualenv·pygame
我送炭你添花7 小时前
Pelco KBD300A 模拟器:05+1.本项目中的链式调用类设计详解
python·自动化·运维开发
ULTRA??7 小时前
归并排序算法实现,kotlin,c++,python
c++·python·kotlin
Tipriest_7 小时前
C++ Python使用常用库时如何做欧拉角 ⇄ 四元数转换
c++·python·四元数·欧拉角
Salt_07287 小时前
DAY 35 文件的规范拆分和写法
python·算法·机器学习
xingzhemengyou18 小时前
python serial模块使用
python
盼哥PyAI实验室8 小时前
Python编码处理:解决12306项目的中文乱码问题
开发语言·python