上传模型
要将模型上传到 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 命令行。
上传模型后,我们建议向仓库添加模型卡片以记录你的模型并使其更易于发现。
利用 PyTorchModelHubMixin 的示例仓库。下载量显示在右侧。
使用 Web 界面
要创建全新的模型仓库,请访问 huggingface.co/new。然后按照以下步骤操作:
- 在"文件和版本"选项卡中,选择"添加文件"并指定"上传文件":


- 从那里,从计算机中选择要上传的文件,并留下有用的提交消息以了解你正在上传的内容:


-
之后,点击提交更改将模型上传到 Hub!
-
检查文件和历史记录
你可以检查包含所有最近添加文件的仓库!


UI 允许你浏览模型文件和提交,并查看每个提交引入的差异:


- 添加元数据
你可以向模型卡片添加元数据。你可以指定:
- 模型用于的任务类型,启用小部件和推理 API。
- 使用的库(
transformers、spaCy等) - 语言
- 数据集
- 指标
- 许可证
- 还有很多!
在此处阅读有关模型标签的更多信息此处。
- 添加 TensorBoard 跟踪
任何包含 TensorBoard 跟踪(包含 tfevents 的文件名)的仓库都会使用 TensorBoard 标签进行分类。按照惯例,我们建议你将跟踪保存在 runs/ 子文件夹下。"训练指标"选项卡然后可以轻松查看记录变量的图表,如损失或准确率。


如果安装了 tensorboard,使用 🤗 Transformers 训练的模型将默认生成 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")
# 重新加载
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,
# 可选地,你可以添加元数据,这些元数据会被推送到模型卡片
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)
# 创建模型
config = {"num_channels": 3, "hidden_size": 32, "num_classes": 10}
model = MyModel(**config)
# 本地保存
model.save_pretrained("my-awesome-model")
# 推送到 Hub
model.push_to_hub("your-hf-username/my-awesome-model")
# 重新加载
model = MyModel.from_pretrained("your-hf-username/my-awesome-model")
如你所见,唯一的要求是你的模型继承自 PyTorchModelHubMixin。所有实例属性将自动序列化为 config.json 文件。请注意,init 方法只能接受可 JSON 序列化的参数。支持 Python 数据类。
这带有自动下载指标,这意味着你将能够看到模型被下载了多少次,就像它们在 Transformers、Diffusers 或 Timm 库中本机集成的模型一样可用。使用此 mixin 类,每个单独的检查点都存储在 Hub 上的单个仓库中,由 2 个文件组成:
- 包含权重的
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 提交和推送模型。