Hub documentation

上传模型

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

上传模型

要将模型上传到 Hub,你需要在 Hugging Face 上创建一个账户。Hub 上的模型是 基于 Git 的仓库,它们提供版本控制、分支、可发现性和共享功能,以及与数十个库的集成等!你可以控制要上传到仓库的内容,其中包括检查点、配置文件以及其他任何文件。

您可以将仓库与个人用户关联,例如 osanseviero/fashion_brands_patterns,或者与组织关联,例如 facebook/bart-large-xsum。组织可以收集与公司、社区或库相关的模型!如果您选择组织,该模型将展示在组织的页面上,并且组织的每位成员都将能够向该仓库贡献内容。您可以在此处创建一个新组织。

注意:模型无需与 Transformers/Diffusers 库兼容即可获取下载指标。支持任何自定义模型。请阅读下文了解更多信息!

有几种方法可以上传模型,以便它们能够很好地集成到 Hub 中并获取下载指标,具体说明如下。

  • 如果您的模型是为具有内置支持的库而设计的,您可以使用该库提供的方法。使用trust_remote_code=True的自定义模型也可以利用这些方法。
  • 如果您的模型是自定义的 PyTorch 模型,可以利用 PyTorchModelHubMixin 类,因为它允许为任何 nn.Module 类添加 from_pretrained 和 push_to_hub,就像 Transformers、Diffusers 和 Timm 库中的模型一样。
  • 除了通过编程方式上传,您还可以随时使用Web 界面或git 命令行。

模型上传完成后,我们建议在你的仓库中添加一个 Model Card,以记录你的模型信息并提高其可发现性。

drawing Example [repository](https://huggingface.co/LiheYoung/depth_anything_vitl14) that leverages [PyTorchModelHubMixin](#upload-a-pytorch-model-using-huggingfacehub). Downloads are shown on the right.

使用 Web 界面

要创建一个全新的模型仓库,请访问 huggingface.co/new。然后按照以下步骤操作:

  1. 在“Files and versions”选项卡中,选择“Add File”并指定“Upload File”:
  1. 然后,从您的计算机中选择一个文件进行上传,并留下有用的提交信息,以便了解您正在上传的内容:
  1. 之后,点击 Commit changes 将您的模型上传到 Hub!

  2. 检查文件和历史记录

您可以检查包含所有最近添加文件的仓库!

该界面允许您浏览模型文件和提交记录,并查看每个提交所引入的差异:

  1. 添加元数据

您可以在模型卡中添加元数据。您可以指定:

  • 该模型所针对的任务类型,用于启用小部件和推理服务提供商。
  • 所使用的库(transformers、spaCy等)
  • 语言
  • 数据集
  • metrics
  • 许可证
  • 还有很多!

有关模型标签的更多信息,请参见此处。

  1. 添加 TensorBoard 跟踪

任何包含 TensorBoard 跟踪文件(文件名中包含 tfevents)的仓库都会被归类为带有 TensorBoard 标签。按照惯例,我们建议将跟踪文件保存在 runs/ 子文件夹下。这样,“Training metrics”选项卡就能方便地查看已记录变量(如损失或准确率)的图表。

使用 🤗 Transformers 训练的模型,如果已安装 tensorboard,默认会生成 TensorBoard 跟踪记录。

从内置支持的库上传

首先检查你的模型是否来自一个内置了推送到/从 Hub 加载支持的库,例如 Transformers、Diffusers、Timm、Asteroid 等:https://huggingface.co/docs/hub/models-libraries。下面我们将展示对于像 Transformers 这样的库,这有多简单:

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")

一些库(例如 Transformers)支持从 Hub 加载 代码。这是一种让你的模型通过 trust_remote_code=True 标志与 Transformers 配合使用的方式。你可以考虑采用此选项,而不是进行完整的库集成。

使用 huggingface_hub 上传 PyTorch 模型

如果您的模型是一个(自定义的)PyTorch 模型,您可以利用 huggingface_hub Python 库中提供的 PyTorchModelHubMixin 类。这是一个极简的类,它为任意 nn.Module 添加了 from_pretrained 和 push_to_hub 功能,并附带下载指标。

以下是使用方法(假设您已运行 pip install huggingface_hub):

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 文件中。请注意,init 方法只能接受可 JSON 序列化的参数。支持 Python dataclasses。

这附带了自动化的下载指标,这意味着您将能够查看模型被下载的次数,其方式与原生集成在 Transformers、Diffusers 或 Timm 库中的模型相同。使用此混入类,每个独立的检查点都会以包含 2 个文件的单个仓库形式存储在 Hub 上:

  • 包含权重的 pytorch_model.bin 或 model.safetensors 文件
  • 一个 config.json 文件,它是模型配置的序列化版本。该类用于统计下载指标:每当用户调用 from_pretrained 来加载 config.json 时,计数就会增加一。有关自动下载指标的说明,请参阅此指南。

建议为每个检查点添加一个模型卡片,以便人们了解该模型的相关信息、获取论文的链接等。

访问 huggingface_hub 的文档 以了解更多信息。

或者,也可以直接以编程方式将文件或文件夹上传到 Hub:https://huggingface.co/docs/huggingface_hub/guides/upload。

使用 Git

最后,由于模型仓库本质上就是 Git 仓库,你也可以使用 Git 将模型文件推送到 Hub。请遵循仓库入门指南,了解如何使用git CLI 来提交并推送你的模型。

Update on GitHub