当前位置: 首页 > article >正文

HuggingFace学习与使用①:核心组件、如何使用?

  • 前言:本篇文章记录了笔者对huggingface核心部件及其使用方法的探究,欢迎各位读者参考与讨论

    文章目录

    • 1 What is HuggingFace?
    • 2 Hub平台
    • 3 Repository
    • 4 Models 模型仓库
      • 4.1 Model Card
      • 4.2 上传模型
        • 上传一个自定义的Pytorch模型
      • 4.3 下载模型⭐️(对于用户来说更重要)
      • 4.4 常见问题⭐️
    • Datasets
    • Spaces

1 What is HuggingFace?

  • Hugging Face本身是一个致力于人工智能和自然语言处理 (NLP) 的公司,同时也是一个开放平台和社区
  • Hugging Face 提供了一个非常流行的开源库,特别适用于处理自然语言任务,支持机器学习模型的开发、训练和应用
  • 核心功能总结:
    • 预训练模型与微调:提供数千个预训练的模型,可以直接用于各种任务,或在新数据上进行微调
    • 开源工具库:提供了 Transformers、Datasets、Tokenizers 等工具库,用于自然语言处理的各个环节
    • 模型和数据集共享平台:Hugging Face Hub 使得开发者可以方便地分享和使用 AI 模型及数据集
    • 低门槛的应用开发:通过 Gradio 和 Spaces,用户可以快速构建和分享自己的机器学习应用
      • Gradio 和 Spaces 是 Hugging Face 提供的两个工具,旨在简化机器学习模型的展示和交互
      • Gradio 是一个用于快速创建和共享机器学习模型交互界面的 Python 库。它的主要功能是让开发者可以方便地为自己的模型、数据处理函数或者应用构建 Web 用户界面,用户无需编写复杂的前端代码即可实现这一目的。
        • 疑问:Gradio可以创建类似于ReactFlow+langchain的模块化编程前端吗?
        • 答:Gradio 的界面设计更多是静态和有限的交互,而不是像 React Flow 这种高度交互和灵活的拖拽式工作流界面
      • Spaces 是 Hugging Face 的托管服务平台,用于共享和展示机器学习应用。Spaces 可以与 Gradio 结合使用,也支持 Streamlit 这样的工具,让用户轻松将自己的模型和应用托管在云端。

2 Hub平台

  • 可以将Hub平台认为是Github的代码广场(huggingface本身就是由Git-based repositories构成的),但内容集中于开源模型、数据集以及应用(组织为Spaces)—— 用户可以自己创建repo,也可以“fork”他们的repo,下载代码库等 —— 高自由度(类比github)
  • 核心组成部分:
    • Repository(代码库)
    • Models(模型)
    • Datasets(数据集)
    • Spaces(部署与应用空间)
    • Other

3 Repository

  • Huggingface中的所有模型、数据集、应用空间都是以Repository的方式进行组织的(就是git repository, in a different display)
  • 仓库管理方式:前端,终端(terminal)
    • 操作流程与Github基本相同,这里不再赘述,具体操作方案请参考 - https://huggingface.co/docs/hub/repositories-getting-started
  • Repository类型:Model,Dataset,Space
  • (Model)仓库初始形态:
    • InitialModelRepo
  • 相较于Github,由于Huggingface中的文件较大,需要安装LFS(Large-File-Storage)插件
    • LFS基于.gitatttributes文件工作
    • .gitattributes 文件是 Git 用于管理特定文件属性和处理行为的配置文件
    • .gitattributes基础功能:
      • 规范化换行符:Linux/Windows
      • 文件合并冲突处理:为文件类型指定合并策略,例如*.png binary告诉 Git 这是一个二进制文件,不能使用普通文本合并
      • 指定文件的差异展示方式:例如*.json diff=json表示对 JSON 文件使用自定义的json差异算法
      • 过滤文件内容
      • 语言标记
      • 控制文件的属性
      • Git LFS: 例如*.psd filter=lfs diff=lfs merge=lfs -text告诉 Git 将所有.psd文件使用 Git LFS 进行存储和管理
  • 支持对Jupyter-notebook的展示,同时支持在Google Colab中运行

4 Models 模型仓库

  • 参考这里
  • Model Hub在Huggingface中用于存储以及分享模型,支持:
    • 直接下载pre-trained模型(通过huggingface_hub客户端)
    • 对模型进行微调(通过Transformers工具库)
    • Serverless Inference API以及Inference Endpoints

4.1 Model Card

  • 核心目标:提供与模型相关的关键信息(当然你也可以share其他信息)
  • 本质上是一个Markdown文件 —— READEME.md
  • 主要包含两个部分:描述信息以及metadata
  • 建议当你有需求的时候去看参考文档进行配置 —— https://huggingface.co/docs/hub/model-cards

4.2 上传模型

  • 模型本身作为一个repository,其实你能够自由地控制其中所包含的内容
    • 对于一个模型仓库而言,一般包含ckeckpoints,configs
  • 为了更有利于平台的对各种模型的管理,HuggingFace提供了很多的构建支持工具
    • 例如:支持1,支持2等
  • 提交模型的方式:web interface,git command line
  • HuggingFace提供了很多具备载入与下载能力的Model工具库,例如Transformers, Diffusers, Timm等,参考这里
  • 使用Transformers库案例:(支持直接从python代码中进行push以及download —— 这依赖于官方的支持)
from transformers import BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

model.push_to_hub("nielsr/my-awesome-bert-model")

# reload
model = BertModel.from_pretrained("nielsr/my-awesome-bert-model")

上传一个自定义的Pytorch模型

  • 使用官方提供的PyTorchModelHubMixin
    • 位于huggingface_hub库中,通过pip install huggingface_hub进行安装
    • 在Pytorch nn.Module的基础上添加了一些功能函数
import torch
import torch.nn as nn
from huggingface_hub import PyTorchModelHubMixin


class MyModel(
    nn.Module,
    PyTorchModelHubMixin, 
    # optionally, you can add metadata which gets pushed to the model card
    repo_url="your-repo-url",
    pipeline_tag="text-to-image",
    license="mit",
):
    def __init__(self, num_channels: int, hidden_size: int, num_classes: int):
        super().__init__()
        self.param = nn.Parameter(torch.rand(num_channels, hidden_size))
        self.linear = nn.Linear(hidden_size, num_classes)

    def forward(self, x):
        return self.linear(x + self.param)

# create model
config = {"num_channels": 3, "hidden_size": 32, "num_classes": 10}
model = MyModel(**config)

# save locally
model.save_pretrained("my-awesome-model")

# push to the hub
model.push_to_hub("your-hf-username/my-awesome-model")

# reload
model = MyModel.from_pretrained("your-hf-username/my-awesome-model")
  • 要点:
    • 继承PyTorchModelHubMixin
    • 所有与模型实例相关的信息会被自动序列化为一个config.json文件(上传后-在repo中)
    • 注意:init方法只能接受可被JSON序列化的对象
    • 上传的model,在库中会包含两个文件(指通过上述方式或官方工具库上传的模型):
      • pytorch_model.bin或者model.safetensors:包含模型权重
      • config.json:模型的配置文件,同时也具备记录模型下载次数的功能(即其他用户通过.from_pretrained方法载入你的模型时,记录会得到同步)
  • 特别提醒:这只是个github仓库,你完全可以通过git工具自己进行文件管理

4.3 下载模型⭐️(对于用户来说更重要)

  • 如果目标模型时通过Huggingface的支持工具构建的:
    • 一般在model card页面会有一个Use in XXX(这里的XXX就是对应的构建工具),点击后你可以看到对应的指示
  • 使用HuggingFace Client工具库:
from huggingface_hub import hf_hub_download
import joblib

REPO_ID = "YOUR_REPO_ID"
FILENAME = "sklearn_model.joblib"

model = joblib.load(
    hf_hub_download(repo_id=REPO_ID, filename=FILENAME)
)
  • 使用Git:
    • 直接通过git clone进行model下载即可,注意LFS支持
  • 使用hf_transfer
    • 官方提供的一个基于Rust语言构建的工具库——用于加速用户与Hub之间的数据传输
    • 对网络设备配置要求较高
    • 参考资料:这里
  • 注意:你常用的部分工具可能已经直接支持与Huggingface的互动,例如Keras等,参考这里进行判断

4.4 常见问题⭐️

  • 如何判断哪些dataset用于目标模型的训练?
    • Model仓库的构建者可以添加对应的信息,但如果没有添加,则不会有直接的信息提示
    • 上传者可以将训练数据集的信息放置在Model Card页面(通过metadata)
  • 如何看到目标模型的运行示例?
    • 模型上传者可以添加对应的Model Widget以支持用户直接在browser中运行模型,关于Model Widget的信息参考这里
    • 可以在Spaces中运行模型(所有人都可以创建spaces,如果有关联的spaces,一般会显示在model card页面中,你可以直接访问进行查看和运行)
  • 如果更新模型?提交commit,之前的模型会保存在commit history中
  • 我如何提交同一个模型的多个checkpoints?
    • 一个Model repo中只能包含一份checkpoint;如果你有多个checkpoint,可以通过创建一个新的repo,然后相互链接的方式完成
  • 如果关联模型与arXiv文章?
    • 通过在Model Card中添加对应的tag实现,如arxiv: <Papar ID>

Datasets

  • 参考这里

Spaces

  • 参考这里

http://www.kler.cn/news/363766.html

相关文章:

  • ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南
  • 详解23种设计模式——第二部分:结构型模式
  • Flume面试整理-Flume的故障排除与监控
  • 我谈Sobel算子与高斯一阶微分的关系
  • [Python学习日记-54] 软件开发目录设计规范
  • 负载均衡服务器攻击怎么解决最有效?
  • 怎么重写equals()方法和hashCode()方法
  • 代码随想录:206. 反转链表
  • vue3移动端可同时上传照片和视频的组件
  • 项目分析:自然语言处理(语言情感分析)
  • 释放双手,让微信聊天更智能 —— 单机版个人微信智能客服软件介绍
  • Redis学习笔记(三)--Redis客户端
  • SpringBoot技术的车辆管理流程自动化
  • 基于SSM+微信小程序的酒店管理系统1
  • Java项目-基于springboot框架的自习室预订系统项目实战(附源码+文档)
  • 如何高效清除PostgreSQL数据库缓存
  • Flink CDC 报:RPC response exceeds maximum data length
  • 5G智慧医疗的实践先锋:SR830-E工业路由器的理性应用
  • 《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)
  • 【lca,树上差分】P3128 [USACO15DEC] Max Flow P
  • 显示指定目录下的 .c 文件 Linux环境 C语言实现
  • 解释 RESTful API,以及如何使用它构建 web 应用程序。
  • 0 Day漏洞利用激增:谷歌Mandiant警示新安全趋势
  • 【springboot应用-RestTemplate】
  • RHCE--nginx实现多IP访问多网站
  • 形式架构定义语言(ADL)