分享模型
前两个教程展示了如何使用 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
... )
文件也可以轻松地在代码库中编辑,并且您可以查看提交历史记录以及差异。
设置
在将模型分享到中心之前,您需要您的 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(有关安装说明,请参阅此处),然后在其他框架中找到适合您任务的特定模型。
指定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")
指定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")
如果模型在 Flax 中可用,您还可以将检查点从 PyTorch 转换为 Flax。
>>> flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
... "path/to/awesome-name-you-picked", from_pt=True
... )
在训练期间推送模型
将模型分享到中心就像添加一个额外的参数或回调一样简单。请记住,在微调教程中,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()
使用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以创建新的代码库。
在这里,添加一些关于您的模型的信息。
- 选择代码库的**拥有者**。可以是您自己或您所属的任何组织。
- 为您的模型选择一个名称,该名称也将用作代码库名称。
- 选择您的模型是公开的还是私有的。
- 指定模型的许可证使用情况。
现在点击**文件**选项卡,然后点击**添加文件**按钮,将新文件上传到您的代码库。然后拖放文件进行上传并添加提交消息。
添加模型卡片
为了确保用户了解您的模型的功能、局限性、潜在偏差和伦理考量,请向您的代码库添加模型卡片。模型卡片在README.md
文件中定义。您可以通过以下方式添加模型卡片:
- 手动创建并上传
README.md
文件。 - 在您的模型代码库中点击**编辑模型卡片**按钮。
查看DistilBert的模型卡片,了解模型卡片应包含的信息类型的一个好例子。有关您可以在README.md
文件中控制的其他选项(例如模型的碳足迹或小部件示例)的更多详细信息,请参阅此处的文档。