📅  最后修改于: 2023-12-03 15:22:11.120000             🧑  作者: Mango
FastAPI 是一个高性能的 Web 框架,为 Python 3.7+ 提供了快速且易于使用的工具,可以使用 FastAPI 将机器学习(ML)模型轻松地部署为 API。在本文中,我们将讨论如何使用 FastAPI 将一个简单的 ML 模型部署为 API。
要安装 FastAPI,您可以使用 pip 包管理器。在命令行中输入以下命令:
pip install fastapi
此外,您需要安装 uvicorn,它是 FastAPI 的默认 ASGI 服务器。您可以使用以下命令进行安装:
pip install uvicorn
假设我们正在创建一个简单的分类器,可以根据花的特征将花分为三类:Iris Setosa,Iris Versicolor 和 Iris Virginica。我们将使用 Iris 数据集 来训练我们的分类器。以下是训练和序列化模型的代码:
import joblib
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
X, y = load_iris(return_X_y=True)
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X, y)
joblib.dump(clf, "model.pkl")
在创建 FastAPI 应用程序之前,我们需要启动一个代码编辑器或集成开发环境(IDE)。创建一个名为 main.py
的文件。
导入 FastAPI 和模型:
from fastapi import FastAPI
import joblib
app = FastAPI()
clf = joblib.load("model.pkl")
以上代码中,我们导入并初始化了 FastAPI 应用程序对象,并从 model.pkl
文件中加载了我们的模型。
接下来,我们将在路由器中定义一个 predict
路由器,用于将输入数据发送到模型,并返回预测值:
from typing import List, Dict
@app.post("/predict")
def predict(data: List[Dict]):
X = [[item['sepal_length'],
item['sepal_width'],
item['petal_length'],
item['petal_width']] for item in data]
prediction = clf.predict(X)
return {'prediction': list(prediction)}
该路由器定义了一个 POST
方法,并将 JSON 形式的输入数据作为一个列表传递给 data
参数。然后,可以将输入转换为模型接受的格式,并使用 clf.predict
方法发出预测。
我们已经创建了一个 FastAPI 应用程序,并将模型作为 API 部署。现在,我们需要在命令行中将应用程序设置为运行。在应用程序所在目录中打开命令行,并输入以下命令:
uvicorn main:app --reload
该命令告诉 uvicorn 启动 main.py
文件中的应用程序,并重新加载代码更改。在应用程序成功运行后,您应该能够在浏览器中通过以下 URL 访问 API:
http://localhost:8000/docs
此 URL 提供了 FastAPI 的交互式文档,您可以使用它测试 API。或者,您可以使用以下代码通过 Python 脚本调用 API:
import requests
data = [
{
"sepal_length": 5.1,
"sepal_width": 3.5,
"petal_length": 1.4,
"petal_width": 0.2
},
{
"sepal_length": 6.7,
"sepal_width": 3.1,
"petal_length": 4.7,
"petal_width": 1.5
}
]
response = requests.post("http://localhost:8000/predict", json=data)
print(response.json())
在本文中,我们已经学习了如何使用 FastAPI 将一个简单的 ML 模型部署为 API。FastAPI 提供了一种快速且易于使用的方式来创建生产就绪的 API。由于它是一个高性能的框架,所以它可以处理高负载的任务。