Transformers 文档

分享一个模型

分享模型

最后两个教程展示了如何使用PyTorch、Keras和🤗 Accelerate在分布式设置中微调模型。下一步是与社区分享你的模型!在Hugging Face,我们相信公开分享知识和资源,以便为每个人普及人工智能。我们鼓励你考虑与社区分享你的模型,以帮助其他人节省时间和资源。

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

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

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

仓库功能

Model Hub 上的每个仓库都像一个典型的 GitHub 仓库。我们的仓库提供版本控制、提交历史记录以及可视化差异的能力。

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

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

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

文件也可以在仓库中轻松编辑,您可以查看提交历史以及差异:

vis_diff

设置

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

huggingface-cli login

如果您使用的是像Jupyter或Colaboratory这样的笔记本,请确保您已安装huggingface_hub库。该库允许您以编程方式与Hub进行交互。

pip install huggingface_hub

然后使用 notebook_login 登录到 Hub,并按照 这里 的链接生成一个用于登录的令牌:

>>> from huggingface_hub import notebook_login

>>> notebook_login()

为所有框架转换模型

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

将检查点转换为另一个框架很容易。确保你已经安装了PyTorch和TensorFlow(安装说明请参见这里),然后在另一个框架中找到适合你任务的特定模型。

Pytorch
Hide Pytorch content

指定 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
Hide TensorFlow content

指定 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
Hide JAX content

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

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

在训练期间推送模型

Pytorch
Hide Pytorch content

将模型分享到Hub就像添加一个额外的参数或回调一样简单。记得在微调教程中,TrainingArguments类是你指定超参数和其他训练选项的地方。其中一个训练选项包括直接将模型推送到Hub的能力。在你的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,
... )

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

>>> trainer.push_to_hub()
TensorFlow
Hide TensorFlow content

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

  • 模型的输出目录。
  • 一个分词器。
  • hub_model_id,这是您的Hub用户名和模型名称。
>>> 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 会将训练好的模型推送到 Hub:

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

使用 push_to_hub 函数

你也可以直接在模型上调用push_to_hub将其上传到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个人资料时,你应该会看到你新创建的模型仓库。点击文件标签将显示你上传到仓库的所有文件。

有关如何创建并将文件上传到存储库的更多详细信息,请参阅Hub文档此处

使用网页界面上传

喜欢无代码方法的用户可以通过Hub的网页界面上传模型。访问 huggingface.co/new 创建一个新的仓库:

new_model_repo

从这里开始,添加一些关于你的模型的信息:

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

现在点击文件标签,然后点击添加文件按钮,将新文件上传到您的仓库。然后拖放文件以上传并添加提交信息。

上传文件

添加模型卡片

为了确保用户了解您模型的能力、限制、潜在偏见和伦理考虑,请在您的存储库中添加一个模型卡。模型卡定义在README.md文件中。您可以通过以下方式添加模型卡:

  • 手动创建并上传一个README.md文件。
  • 点击模型仓库中的编辑模型卡片按钮。

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

< > Update on GitHub