分享模型
最后两个教程展示了如何使用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
... )
文件也可以在仓库中轻松编辑,您可以查看提交历史以及差异:
设置
在将模型分享到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(安装说明请参见这里),然后在另一个框架中找到适合你任务的特定模型。
指定 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
... )
在训练期间推送模型
将模型分享到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()
使用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 创建一个新的仓库:
从这里开始,添加一些关于你的模型的信息:
- 选择仓库的所有者。这可以是您自己或您所属的任何组织。
- 为您的模型选择一个名称,该名称也将是存储库的名称。
- 选择您的模型是公开还是私有的。
- 指定模型的许可证使用情况。
现在点击文件标签,然后点击添加文件按钮,将新文件上传到您的仓库。然后拖放文件以上传并添加提交信息。
添加模型卡片
为了确保用户了解您模型的能力、限制、潜在偏见和伦理考虑,请在您的存储库中添加一个模型卡。模型卡定义在README.md
文件中。您可以通过以下方式添加模型卡:
- 手动创建并上传一个
README.md
文件。 - 点击模型仓库中的编辑模型卡片按钮。
查看DistilBert的模型卡片,了解模型卡片应包含的信息类型的一个好例子。有关您可以在README.md
文件中控制的其他选项的更多详细信息,例如模型的碳足迹或小部件示例,请参阅此处的文档。