如何使用Gradio将机器学习模型部署为网络应用程序

1,419 阅读7分钟

你已经建立了你的机器学习模型,准确率达到99%,现在你欣喜若狂。你就像yaaaaaaaaaaay!我的模型表现良好。

然后你暂停了,你想--现在怎么办?

好吧,首先,你可能会想到把你的代码上传到GitHub,向人们展示你的Jupyter笔记本文件。它包括你用Seaborn创建的那些看起来很华丽的可视化,那些极其强大的集合模型,以及它们如何能够通过评估指标等等。

但后来你注意到,没有人与它互动。

好吧,我的朋友,为什么不试着把模型部署成一个网络应用程序,让非技术人员也能与模型互动呢?因为只有像你这样的程序员才有可能理解这第一种方法。

有几种方法可以部署你的模型,但我们将在本文中重点讨论其中一种方法:使用Gradio。我可以告诉你,你很兴奋。好吧,放松并享受,因为这将是一次令人兴奋的旅程。

前提条件

在开始这个旅程之前,我假设你有以下知识:

  1. 你知道如何在Python中创建一个用户定义的函数
  2. 你可以建立和拟合一个ML模型
  3. 你的环境都已经设置好了

什么是Gradio?

Gradio是一个免费和开源的Python库,它允许你为你的机器学习模型开发一个易于使用的可定制的组件演示,任何人都可以在任何地方使用。

Gradio集成了最流行的Python库,包括Scikit-learn、PyTorch、NumPy、seaborn、pandas、Tensor Flow和其他。

它的优点之一是,它允许你在Jupyter或Colab笔记本中与你目前正在开发的网络应用进行互动。它有很多独特的功能,可以帮助你构建一个用户可以互动的网络应用。

如何安装Gradio

要使用Gradio,我们必须首先在本地PC上安装它的库。所以去你的Conda PowerShell或终端,运行以下命令。如果你使用的是Google Colab,你也可以输入以下内容:

pip install gradio

现在我们的本地PC上已经安装了Gradio。让我们来看看Gradio的一些基本原理,这样我们就可以熟悉这个库了。

首先,我们必须把库导入我们的笔记本或IDE,无论你使用的是哪种。我们可以通过输入以下命令来完成:

import gradio as gr

如何创建你的第一个Web应用

在本教程中,我们将创建一个打招呼的应用实例,以熟悉Gradio的基本原理。

为此,我们需要写一个问候函数,因为Gradio与Python用户定义函数一起工作。因此,我们的问候函数看起来像这样:

def greet_user(name):
	return "Hello " + name + " Welcome to Gradio!😎"

我们现在需要在Gradio上部署这个Python函数,以便它能作为一个网络应用。要做到这一点,我们输入:

app =  gr.Interface(fn = greet_user, inputs="text", outputs="text")
app.launch()

在运行上述代码之前,让我们浏览并摸索一下其中的内容。

gr.Interface:这个属性是Gradio中任何东西的基石。它是显示所有将在网络上显示的组件的用户界面。

参数fn :这是你创建的并想提供给Gradio的Python函数。

inputs 参数。这些是你希望传入你所创建的函数的组件,如文字、图像、数字、音频等等。在我们的例子中,我们创建的函数需要文本,所以我们把它输入到输入参数中。

output 参数。这是一个参数,可以让你在界面上显示你想看到的组件。因为我们在这个例子中创建的函数需要显示文本,所以我们把文本组件提供给输出参数。

app.launch 是用来启动应用程序的。当你运行上述代码时,你应该有这样的东西:

alt_text

一旦Gradio界面出现,只要输入你的名字并点击提交。然后它将结果输出到我们上面创建的函数中。现在我们已经完成了这些,在学习如何部署我们的模型之前,让我们再来看看Gradio中的一件事。

我们将创建一个Gradio应用程序,它可以接受两个输入并提供一个输出。这个应用程序只是要求输入你的名字和一个值,然后输出你的名字以及你输入值的倍数。要做到这一点,只需输入以下代码:

def return_multiple(name, number):
    result = "Hi {}! 😎. The Mulitple of {} is {}".format(name, number, round(number**2, 2))
    return result

app = gr.Interface(fn = return_multiple, inputs=["text", gr.Slider(0, 50)], outputs="text")
app.launch()

alt_text

现在我们已经做到了,让我们快速浏览一下我们在这里做的一些你可能不熟悉的事情。

输入参数。在输入参数中,我们创建了一个涉及两个组件的列表,即文本和滑块。滑块也是Gradio的一个属性,当你滑过一个给定的范围时返回一个浮点数。我们使用这个是因为在我们创建的函数中,我们期望得到一个文本和一个值。

我们必须按照我们的属性在上面创建的函数中的排序方式来排列输入参数中的组件。也就是说,文本先于数字。所以我们期望的输出实际上是一个字符串。我们只是在上面的函数中做了一些格式化处理。

现在我们已经熟悉了Gradio的一些基础知识,让我们来创建一个我们要部署的模型。

如何在Gradio上部署一个机器学习模型

在这一节中,我将使用我之前训练并保存在pickle文件中的一个分类模型。

当你创建一个需要长时间训练的模型时,最有效的处理方法是在它完成训练后将其保存在一个pickle文件中,这样你就不必再经历训练模型的压力了。

如果你想把一个模型保存为pickle文件,让我告诉你如何做。首先导入pickle库,然后输入下面的代码。假设我只是想拟合一个这样的模型:

import pickle
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(random_state=42)
clf.fit(X_train, y_train) 

# If you've fitted the model just type this to save it: Remember to change the file name
with open("filename.pkl", "wb") as f:
pickle.dump(clf, f)  

现在如果你想加载它,你也可以输入下面的代码:

with open("filename.pkl", "rb") as f:
	clf  = pickle.load(f)

现在我们已经明白了,让我们创建一个函数,我们将能够传递给Gradio,以便它能够进行预测:

def make_prediction(age, employment_status, bank_name, account_balance):
    with open("filename.pkl", "rb") as f:
        clf  = pickle.load(f)
        preds = clf.predict([[age, employment_status, bank_name, account_balance]])
    if preds == 1:
            return "You are eligible for the loan"
    return "You are not eligible for the loan"

#Create the input component for Gradio since we are expecting 4 inputs

age_input = gr.Number(label = "Enter the Age of the Individual")
employment_input = gr.Number(label= "Enter Employement Status {1:For Employed, 2: For Unemployed}")
bank_input = gr.Textbox(label = "Enter Bank Name")
account_input = gr.Number(label = "Enter your account Balance:")
# We create the output
output = gr.Textbox()


app = gr.Interface(fn = make_prediction, inputs=[age_input, employment_input, bank_input, account_input], outputs=output)
app.launch()

alt_text

因此,让我们把上面的内容解开。

我们将从我们创建输入组件的地方开始。你可以选择在gr.Interface ,但在下面的代码中,我直接在gr.Interface ,然后在gr.Interface ,提供变量。

因此,如果你想制作一个接收数字的组件,请使用gr.Number ,然后从我创建的输出变量中,你可以像我们之前在第一个应用程序中那样传递文本(如果你不想明确声明属性," text "字符串是文本框的速记)。

同时我在每个组件中使用了标签参数,这样用户就会知道该怎么做。我们已经熟悉了上面提到的其他代码。 而现在我们已经完成了,我们的模型已经部署完毕。🎉🎉😎🥳🥳.

结论

感谢你阅读本教程。我们在这篇文章中涵盖了很多内容。请记住,学习Gradio并不是到此为止--你可以在他们的网站上查看更多内容。他们有相当直观的文档,告诉你如何创建你的网络应用。

再次感谢您的阅读。如果你喜欢这篇文章,你可以在LinkedInTwitter上关注我,以支持我。谢谢你,祝你部署愉快。