Transformers 文档

共享模型

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

分享模型

前两个教程展示了如何使用 PyTorch、Keras 和 🤗 Accelerate 对模型进行微调,以实现分布式设置。下一步是与社区分享您的模型!在 Hugging Face,我们相信公开分享知识和资源,使每个人都能获得人工智能。我们鼓励您考虑与社区分享您的模型,以帮助他人节省时间和资源。

在本教程中,您将学习两种在 模型中心 上分享已训练或微调模型的方法。

  • 以编程方式将您的文件推送到中心。
  • 使用 Web 界面将文件拖放到中心。

要与社区分享模型,您需要在 huggingface.co 上拥有一个帐户。您也可以加入现有的组织或创建一个新的组织。

代码库功能

模型中心上的每个代码库都像一个典型的 GitHub 代码库。我们的代码库提供版本控制、提交历史记录以及可视化差异的功能。

模型中心的内置版本控制基于 git 和 git-lfs。换句话说,您可以将一个模型视为一个代码库,从而实现更大的访问控制和可扩展性。版本控制允许进行修订,这是一种使用提交哈希、标签或分支来固定模型特定版本的方法。

因此,您可以使用revision参数加载特定模型版本。

>>> model = AutoModel.from_pretrained(
...     "julien-c/EsperBERTo-small", revision="v2.0.1"  # tag name, or branch name, or commit hash
... )

文件也可以轻松地在代码库中编辑,并且您可以查看提交历史记录以及差异。

vis_diff

设置

在将模型分享到中心之前,您需要您的 Hugging Face 凭据。如果您有权访问终端,请在安装了 🤗 Transformers 的虚拟环境中运行以下命令。这会将您的访问令牌存储在您的 Hugging Face 缓存文件夹中(默认为~/.cache/)。

huggingface-cli login

如果您使用的是 Jupyter 或 Colaboratory 等笔记本,请确保已安装 huggingface_hub 库。此库允许您以编程方式与中心交互。

pip install huggingface_hub

然后使用notebook_login登录中心,并按照此处的链接生成用于登录的令牌。

>>> from huggingface_hub import notebook_login

>>> notebook_login()

将模型转换为所有框架

为了确保您的模型可以被使用不同框架的人使用,我们建议您使用 PyTorch 和 TensorFlow 检查点转换并上传您的模型。虽然如果跳过此步骤,用户仍然能够从其他框架加载您的模型,但这会更慢,因为 🤗 Transformers 需要即时转换检查点。

将检查点转换为另一个框架很容易。确保已安装 PyTorch 和 TensorFlow(有关安装说明,请参阅此处),然后在其他框架中找到适合您任务的特定模型。

Pytorch
隐藏 Pytorch 内容

指定from_tf=True将检查点从 TensorFlow 转换为 PyTorch。

>>> pt_model = DistilBertForSequenceClassification.from_pretrained("path/to/awesome-name-you-picked", from_tf=True)
>>> pt_model.save_pretrained("path/to/awesome-name-you-picked")
TensorFlow
隐藏 TensorFlow 内容

指定from_pt=True将检查点从 PyTorch 转换为 TensorFlow。

>>> tf_model = TFDistilBertForSequenceClassification.from_pretrained("path/to/awesome-name-you-picked", from_pt=True)

然后,您可以使用新的检查点保存新的 TensorFlow 模型。

>>> tf_model.save_pretrained("path/to/awesome-name-you-picked")
JAX
隐藏 JAX 内容

如果模型在 Flax 中可用,您还可以将检查点从 PyTorch 转换为 Flax。

>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
...     "path/to/awesome-name-you-picked", from_pt=True
... )

在训练期间推送模型

Pytorch
隐藏 Pytorch 内容

将模型分享到中心就像添加一个额外的参数或回调一样简单。请记住,在微调教程中,TrainingArguments类是您指定超参数和附加训练选项的地方。这些训练选项之一包括能够将模型直接推送到中心。在您的TrainingArguments中设置push_to_hub=True

>>> training_args = TrainingArguments(output_dir="my-awesome-model", push_to_hub=True)

像往常一样将您的训练参数传递给Trainer

>>> trainer = Trainer(
...     model=model,
...     args=training_args,
...     train_dataset=small_train_dataset,
...     eval_dataset=small_eval_dataset,
...     compute_metrics=compute_metrics,
... )

微调模型后,在Trainer上调用push_to_hub()以将训练后的模型推送到中心。 🤗 Transformers 甚至会自动将训练超参数、训练结果和框架版本添加到您的模型卡中!

>>> trainer.push_to_hub()
TensorFlow
隐藏 TensorFlow 内容

使用PushToHubCallback将模型分享到中心。在PushToHubCallback函数中,添加:

  • 模型的输出目录。
  • 一个分词器。
  • hub_model_id,它是您的中心用户名和模型名称。
>>> from transformers import PushToHubCallback

>>> push_to_hub_callback = PushToHubCallback(
...     output_dir="./your_model_save_path", tokenizer=tokenizer, hub_model_id="your-username/my-awesome-model"
... )

将回调添加到fit, 🤗 Transformers 会将训练后的模型推送到中心。

>>> model.fit(tf_train_dataset, validation_data=tf_validation_dataset, epochs=3, callbacks=push_to_hub_callback)

使用 push_to_hub 函数

您也可以直接在模型上调用push_to_hub将其上传到中心。

push_to_hub中指定您的模型名称。

>>> pt_model.push_to_hub("my-awesome-model")

这会在您的用户名下创建一个包含模型名称my-awesome-model的代码库。用户现在可以使用from_pretrained函数加载您的模型。

>>> from transformers import AutoModel

>>> model = AutoModel.from_pretrained("your_username/my-awesome-model")

如果您属于某个组织,并希望在组织名称下推送您的模型,只需将其添加到repo_id中。

>>> pt_model.push_to_hub("my-awesome-org/my-awesome-model")

push_to_hub函数还可用于将其他文件添加到模型代码库中。例如,将分词器添加到模型代码库:

>>> tokenizer.push_to_hub("my-awesome-model")

或者,您可能希望添加微调的 PyTorch 模型的 TensorFlow 版本:

>>> tf_model.push_to_hub("my-awesome-model")

现在,当您导航到您的 Hugging Face 个人资料时,您应该会看到您新创建的模型代码库。单击“文件”选项卡将显示您已上传到代码库的所有文件。

有关如何创建和上传文件到代码库的更多详细信息,请参阅此处的中心文档。

使用 Web 界面上传

喜欢无代码方法的用户可以通过中心的 Web 界面上传模型。访问huggingface.co/new以创建新的代码库。

new_model_repo

在这里,添加一些关于您的模型的信息。

  • 选择代码库的**拥有者**。可以是您自己或您所属的任何组织。
  • 为您的模型选择一个名称,该名称也将用作代码库名称。
  • 选择您的模型是公开的还是私有的。
  • 指定模型的许可证使用情况。

现在点击**文件**选项卡,然后点击**添加文件**按钮,将新文件上传到您的代码库。然后拖放文件进行上传并添加提交消息。

upload_file

添加模型卡片

为了确保用户了解您的模型的功能、局限性、潜在偏差和伦理考量,请向您的代码库添加模型卡片。模型卡片在README.md文件中定义。您可以通过以下方式添加模型卡片:

  • 手动创建并上传README.md文件。
  • 在您的模型代码库中点击**编辑模型卡片**按钮。

查看DistilBert的模型卡片,了解模型卡片应包含的信息类型的一个好例子。有关您可以在README.md文件中控制的其他选项(例如模型的碳足迹或小部件示例)的更多详细信息,请参阅此处的文档。

< > 在GitHub上更新