分享一个模型
最后两个教程展示了如何使用 PyTorch、 Keras 和 Accelerate 优化分布式设置的模型。下一步就是把你的模型公之于众!我们相信公开分享知识和资源,使人工智能大众化。我们鼓励你考虑与社区分享你的模式,以帮助其他人节省时间和资源。
在本教程中,您将学习在 Model Hub 上共享经过训练或调优的模型的两种方法:
- 以编程方式将文件推送到Hub。
- 通过 web 界面将文件拖放到 Hub。
要与社区共享一个模型,您需要在 huggingface.co 上注册一个帐户。您还可以加入现有的组织或创建一个新的组织。
知识库特性
Model Hub 上的每个存储库都像一个典型的 GitHub 存储库一样运行。我们的存储库提供版本控制、提交历史以及可视化差异的能力。
Model Hub 的内置版本控制基于 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 库。此库允许您以编程方式与Hub交互。
pip install huggingface_hub
然后使用 notebook_login 登录到 Hub,并按照这里的链接生成一个令牌来登录:
from huggingface_hub import notebook_login
notebook_login()
转换所有框架的模型
为了确保您的模型可以被使用不同框架的人使用,我们建议您使用 PyTorch 和 TensorFlow 检查点转换和上传您的模型。如果跳过这个步骤,用户仍然可以从不同的框架加载模型,但是Transformers需要在运行时转换检查点,所以速度会变慢。
将检查点转换为另一个框架很容易。确保您已经安装了 PyTorch 和 TensorFlow (请参阅这里的安装说明) ,然后在其他框架中找到任务的特定模型。
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
指定从_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
如果 Flax 中有一个模型,你也可以将一个检查点从 PyTorch 转换成 Flax:
flax_model = FlaxDistilBertForSequenceClassification.from_pretrained(
"path/to/awesome-name-you-picked", from_pt=True
)
训练过程中推送模型
Pytorch
将模型共享到 Hub 非常简单,只需添加一个额外的参数或回调。记住,在微调教程中,TrainingArguments 类是指定超参数和其他训练选项的地方。其中一个训练选项包括将模型直接推送到 Hub 的能力。在你的训练中设置 push_to_hub=True 参数:
training_args = TrainingArguments(output_dir="my-awesome-model", push_to_hub=True)
像往常一样把你的训练参数传递给训练者:
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 () ,将训练好的模型推送到 Hub。Transformers甚至会自动添加训练超参数,训练结果和框架版本到您的模型卡!
trainer.push_to_hub()
TensorFlow
用 PushToHubCallback 共享一个模型到 Hub,在 PushToHubCallback 函数中添加:
- 模型的输出目录。
- 一个标记器
- hub_model_id Hub 用户名和模型名。
from transformers.keras.callbacks import PushToHubCallback
push_to_hub_callback = PushToHubCallback(
output_dir="./your_model_save_path", tokenizer=tokenizer, hub_model_id="your-username/my-awesome-model"
)
添加适合的回调,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")
如果您属于某个组织,并希望将您的模型放在组织名称下,请添加组织参数:
pt_model.push_to_hub("my-awesome-model", organization="my-awesome-org")
Push_to_hub 函数还可以用于向模型存储库添加其他文件。例如,在模型库中添加一个 tokenizer:
tokenizer.push_to_hub("my-awesome-model")
或者你也可以添加微调 PyTorch 模型的 TensorFlow 版本:
tf_model.push_to_hub("my-awesome-model")
现在,当你导航到Hugging Face配置文件时,你应该看到你新创建的模型库。单击“文件”选项卡将显示已上传到存储库的所有文件。
有关如何创建和上传文件到存储库的更多详细信息,请参阅此处的 Hub 文档。
v通过网页界面上传
喜欢无代码方法的用户可以通过 Hub 的 web 界面上传模型。访问 google huggingface.co/new 创建一个新的知识库:
从这里,添加一些关于你的模型的信息:
- 选择存储库的所有者。这可以是您自己或您所属的任何组织。
- 为您的模型选择一个名称,它也将是存储库名称。
- 选择您的模型是公共的还是私有的。
- 指定模型的许可证用法。
现在单击“文件”选项卡,然后单击“添加文件”按钮,将新文件上传到存储库。然后拖放一个文件来上传和添加提交消息。
添加一个模型卡片
为了确保用户了解您的模型的能力、局限性、潜在的偏见和道德考虑,请在存储库中添加一个示范卡片。模型卡片在 README.md 文件中定义。你可以通过以下方式添加一个模型卡片:
- 手动创建并上传 README.md 文件。
- 单击模型库中的 Edit model card 按钮。
看一下 DistilBert 模型卡片,它是一个模型卡片应该包含的信息类型的好例子。有关其他选项的详细信息,可以在 README.md 文件中进行控制,比如模型的碳足印或小部件示例,请参阅这里的文档。
本文是抱抱脸(Hugging Face)教程中文翻译,仅学习使用
[原文链接]https://huggingface.co/docs/transformers/main/en/model_sharing)