让神经网络再次变得不酷…并分享它们
fast.ai生态系统在使深度学习变得易用方面做出了巨大贡献。Hugging Face的使命是普及优秀的机器学习。让我们将对机器学习的独占访问,包括预训练模型,成为过去的事情,并进一步推动这个令人惊奇的领域。
fastai是一个开源的深度学习库,利用PyTorch和Python提供高级组件,以在文本、视觉和表格数据上训练快速而准确的神经网络。然而,fast.ai作为一家公司,不仅仅是一个库;它已经发展成为一个蓬勃发展的开源贡献者和学习神经网络的人们的生态系统。作为一些例子,看看他们的书和课程。加入fast.ai的Discord和论坛。加入他们的社区将能够保证你通过参与学习。
正因为所有这些原因(本文的作者也是通过fast.ai课程开始了他的学习之旅),我们自豪地宣布,fastai从业者现在可以使用一行Python代码将模型分享和上传到Hugging Face Hub。
👉 在本文中,我们将介绍fastai和Hub之间的集成。此外,您可以将此教程作为Colab笔记本打开。
我们要感谢fast.ai社区,特别是Jeremy Howard、Wayde Gilliam和Zach Mueller对他们的反馈🤗。本博客受到了fastai文档中Hugging Face Hub部分的很大启发。
为什么要分享到Hub?
Hub是一个中心平台,任何人都可以分享和探索模型、数据集和机器学习演示。它拥有最广泛的开源模型、数据集和演示的集合。
在Hub上分享可以通过使您的fastai模型可供他人下载和探索来放大其影响力。您还可以使用fastai模型进行迁移学习;将别人的模型作为您任务的基础。
任何人都可以通过在hf.co/models网页上按照fastai库进行过滤来访问Hub中的所有fastai模型,如下图所示。
除了免费的模型托管和向更广泛的社区展示之外,Hub还基于git(对于大文件使用git-lfs)具有内置的版本控制和用于发现和可重现性的模型卡片。有关浏览Hub的更多信息,请参阅此介绍。
加入Hugging Face和安装
要在Hub上共享模型,您需要拥有一个用户。在Hugging Face网站上创建它。
huggingface_hub
库是一个轻量级的Python客户端,具有与Hugging Face Hub交互的实用函数。要将fastai模型推送到Hub,您需要预先安装一些库(fastai>=2.4、fastcore>=1.3.27和toml)。通过在安装huggingface_hub
时指定[“fastai”],您可以自动安装它们,然后您的环境就准备好了:
pip install huggingface_hub["fastai"]
创建一个fastai Learner
这里我们训练fastbook中的第一个模型来识别猫🐱。我们强烈建议阅读整本fastbook。
# Training of 6 lines in chapter 1 of the fastbook.
from fastai.vision.all import *
path = untar_data(URLs.PETS)/'images'
def is_cat(x): return x[0].isupper()
dls = ImageDataLoaders.from_name_func(
path, get_image_files(path), valid_pct=0.2, seed=42,
label_func=is_cat, item_tfms=Resize(224))
learn = vision_learner(dls, resnet34, metrics=error_rate)
learn.fine_tune(1)
将Learner
分享到Hub
Learner
是一个fastai对象,它捆绑了一个模型、数据加载器和损失函数。在本文中,我们将使用Learner
和模型这两个词来互换使用。
首先,登录到Hugging Face Hub。您需要在您的帐户设置中创建一个write
令牌。然后有三种登录选项:
-
在终端中键入
huggingface-cli login
并输入您的令牌。 -
如果在Python笔记本中,您可以使用
notebook_login
。
from huggingface_hub import notebook_login
notebook_login()
- 使用
push_to_hub_fastai
函数的token
参数。
您可以使用希望上传的Learner
和Hub中的存储库ID(格式为“命名空间/存储库名称”)作为输入push_to_hub_fastai
。命名空间可以是您拥有写入访问权限的个人帐户或组织(例如,’fastai/stanza-de’)。有关更多详细信息,请参阅Hub客户端文档。
from huggingface_hub import push_to_hub_fastai
# repo_id = "YOUR_USERNAME/YOUR_LEARNER_NAME"
repo_id = "espejelomar/identify-my-cat"
push_to_hub_fastai(learner=learn, repo_id=repo_id)
Learner
现在在名为espejelomar/identify-my-cat
的Hub存储库中。自动生成一个带有一些链接和下一步的模型卡片。将fastai Learner
(或任何其他模型)上传到Hub时,编辑其模型卡片(如下图)对于他人更好地理解您的工作是有帮助的(请参阅Hugging Face文档)。
如果您想了解更多关于push_to_hub_fastai
的内容,请参阅Hub客户端文档。这里有一些您可能感兴趣的很酷的参数👀。请记住,您的模型是一个具有版本控制、提交和分支等所有优势的Git存储库。
从Hugging Face Hub加载Learner
从Hub加载模型甚至更简单。我们将加载我们的Learner
,”espejelomar/identify-my-cat”,并使用一张猫的图片进行测试(🦮?)。这段代码改编自fastbook的第一章。
首先,上传一张猫的图片(或可能是一只狗?)。此教程的Colab笔记本使用ipywidgets
来交互式上传一张猫的图片(或者不是?)。这里我们将使用这只可爱的猫🐅:
现在让我们加载刚刚在Hub中共享的Learner
并进行测试。
from huggingface_hub import from_pretrained_fastai
# repo_id = "YOUR_USERNAME/YOUR_LEARNER_NAME"
repo_id = "espejelomar/identify-my-cat"
learner = from_pretrained_fastai(repo_id)
它工作了👇!
_,_,probs = learner.predict(img)
print(f"Probability it's a cat: {100*probs[1].item():.2f}%")
Probability it's a cat: 100.00%
Hub客户端文档中包含有关from_pretrained_fastai
的其他详细信息。
使用Blurr
将fastai和Hugging Face Transformers混合(并共享它们)!
[Blurr是]一个为希望训练和部署Hugging Face transformers的fastai开发者设计的库-Blurr Docs。
我们将:
- 使用高级Blurr API训练一个
blurr
Learner。它将从Hugging Face Hub加载distilbert-base-uncased
模型,并准备一个序列分类模型。 - 使用
push_to_hub_fastai
将其共享到Hub,使用命名空间fastai/blurr_IMDB_distilbert_classification
。 - 使用
from_pretrained_fastai
加载它,并使用learner_blurr.predict()
进行尝试。
合作和开源是很棒的!
首先,安装blurr
并训练学习器。
git clone https://github.com/ohmeow/blurr.git
cd blurr
pip install -e ".[dev]"
import torch
import transformers
from fastai.text.all import *
from blurr.text.data.all import *
from blurr.text.modeling.all import *
path = untar_data(URLs.IMDB_SAMPLE)
model_path = Path("models")
imdb_df = pd.read_csv(path / "texts.csv")
learn_blurr = BlearnerForSequenceClassification.from_data(imdb_df, "distilbert-base-uncased", dl_kwargs={"bs": 4})
learn_blurr.fit_one_cycle(1, lr_max=1e-3)
使用push_to_hub_fastai
与Hub共享。
from huggingface_hub import push_to_hub_fastai
# repo_id = "YOUR_USERNAME/YOUR_LEARNER_NAME"
repo_id = "fastai/blurr_IMDB_distilbert_classification"
push_to_hub_fastai(learn_blurr, repo_id)
使用from_pretrained_fastai
从Hub加载blurr
模型。
from huggingface_hub import from_pretrained_fastai
# repo_id = "YOUR_USERNAME/YOUR_LEARNER_NAME"
repo_id = "fastai/blurr_IMDB_distilbert_classification"
learner_blurr = from_pretrained_fastai(repo_id)
用几句话试一下,并使用learner_blurr.predict()
查看它们的情感(负面或正面)。
sentences = ["This integration is amazing!",
"I hate this was not available before."]
probs = learner_blurr.predict(sentences)
print(f"句子'{sentences[0]}'是负面的概率为:{100*probs[0]['probs'][0]:.2f}%")
print(f"句子'{sentences[1]}'是负面的概率为:{100*probs[1]['probs'][0]:.2f}%")
又一次,它可行!
句子'This integration is amazing!'是负面的概率为:29.46%
句子'I hate this was not available before.'是负面的概率为:70.04%
接下来是什么?
参加fast.ai课程(即将推出新版本),关注Jeremy Howard和fast.ai的Twitter以获取更新,并开始在Hub上分享您的fastai模型🤗。或者加载已经在Hub上的模型。
📧 欢迎通过Hugging Face Discord与我们联系,并分享您对项目的想法。我们很乐意听到您的反馈💖。
您想将您的库集成到Hub中吗?
这个集成是由huggingface_hub
库实现的。如果您想将您的库添加到Hub中,我们为您提供了一份指南!或者简单地标记Hugging Face团队的某个人。
向Hugging Face团队致敬,感谢他们在这个集成中的所有工作,特别是@osanseviero 🦙。
感谢fastlearners和hugging learners 🤗。