📜  使用 FastAPI 将 ML 模型部署为 API(1)

📅  最后修改于: 2023-12-03 15:22:11.120000             🧑  作者: Mango

使用 FastAPI 将 ML 模型部署为 API

FastAPI 是一个高性能的 Web 框架,为 Python 3.7+ 提供了快速且易于使用的工具,可以使用 FastAPI 将机器学习(ML)模型轻松地部署为 API。在本文中,我们将讨论如何使用 FastAPI 将一个简单的 ML 模型部署为 API。

1. 安装 FastAPI

要安装 FastAPI,您可以使用 pip 包管理器。在命令行中输入以下命令:

pip install fastapi

此外,您需要安装 uvicorn,它是 FastAPI 的默认 ASGI 服务器。您可以使用以下命令进行安装:

pip install uvicorn
2. 创建 ML 模型

假设我们正在创建一个简单的分类器,可以根据花的特征将花分为三类: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")
3. 创建 FastAPI 应用程序

在创建 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 方法发出预测。

4. 运行 FastAPI 应用程序

我们已经创建了一个 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。由于它是一个高性能的框架,所以它可以处理高负载的任务。