分享模型

前面两个教程展示了如何使用 PyTorch、Keras 和 🤗 Accelerate 进行模型的微调,以及如何在分布式环境中进行模型的微调。下一步是与社区分享您的模型!在 Hugging Face,我们相信开放分享知识和资源,让每个人都能参与到人工智能的发展中来。我们鼓励您考虑与社区分享您的模型,以帮助他人节省时间和资源。

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

  • 通过编程方式将文件推送到 Hub。
  • 使用网页界面将文件拖放到 Hub。

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

仓库功能

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

模型仓库内置的版本控制基于 git 和 git-lfs 。换句话说,您可以将一个模型当作一个仓库,从而实现更大的访问控制和扩展性。版本控制允许创建 revisions,它可以通过提交哈希、标签或分支锁定模型的特定版本。

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

>>> model = AutoModel.from_pretrained(
...     "julien-c/EsperBERTo-small", revision="v2.0.1"  # 标签名称、分支名称或提交哈希
... )

在仓库中,文件也很容易进行编辑,您可以查看提交历史以及差异:

vis_diff

设置

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

huggingface-cli login

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

pip install huggingface_hub

然后使用 notebook_login 函数登录到 Hub,点击此处的链接 here 生成一个用于登录的令牌:

>>> 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 与添加其他参数或回调函数一样简单。回想一下,根据 fine-tuning 教程 ,您可以通过 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() 函数来将训练好的模型推送到 Hub。🤗 Transformers 甚至会自动将训练超参数、训练结果和框架版本添加到您的模型卡片中!

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

使用 PushToHubCallback 将模型分享到 Hub。在 PushToHubCallback 函数中添加以下内容:

  • 您的模型输出目录。
  • 一个 tokenizer。
  • 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 添加到模型仓库中:

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

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

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

现在,当您转到您的 Hugging Face 个人资料页面时,您应该能够看到您新创建的模型仓库。点击 Files 标签将显示您上传到仓库中的所有文件。

有关如何创建和上传文件到仓库的详细信息,请参考 此处 的 Hub 文档。

使用网页界面上传

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

new_model_repo

在此处添加有关您的模型的一些信息:

  • 选择仓库的 所有者。可以是您自己或您所属的任何组织。

  • 为您的模型选择一个名称,这也将成为您的仓库名称。

  • 选择您的模型是公开还是私有。

  • 指定您的模型的许可证使用情况。

现在点击 Files 选项卡,然后点击 Add file 按钮将一个新文件上传到您的仓库。然后将文件拖放到该区域进行上传,并添加一个提交消息。

upload_file

添加一个模型卡片

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

  • 手动创建并上传一个 README.md 文件。

  • 点击模型仓库中的 Edit model card 按钮。

可以参考 DistilBert 模型卡片 获取一个好的示例,了解模型卡片应包含的信息类型。有关在 README.md 文件中其他可控制的选项,例如模型的碳足迹或小部件示例等,详见 此处 的文档说明。