开发机器学习模型只是工作的一半。模型只有在投入生产并提供业务价值后才有用。
了解如何部署我们的模型已成为任何数据科学家的基本技能,许多雇主已经期望我们能够做到这一点。因此,对于任何级别的数据科学家来说,学习将模型部署到生产中都是有益的。
本文将讨论如何将机器学习模型部署到生产环境中。
事不宜迟,让我们开始吧。
我们将从准备要部署到生产环境的模型开始本指南。首先,我们将为整个教程设置虚拟环境。您可以在终端中使用以下代码来完成此操作。
python -m venv myvirtualenv
安装并激活虚拟环境后,您需要安装所需的软件包。创建requirements.txt
文件,并用以下库列表填充它。
pandasscikit-learnfastapipydanticuvicornstreamlit
准备好requirements.txt
后,我们必须使用以下代码安装它们。
pip install -r requirements.txt
一切准备就绪后,我们将开始开发我们的机器学习模型。在本教程中,我们将使用Kaggle上的糖尿病数据。将数据放入数据文件夹中。
然后,在app文件夹中创建一个名为train_model.py的文件。在train_model.py
中,我们将使用以下代码训练机器学习模型。
import pandas as pdimport joblibfrom sklearn.linear_model import LogisticRegressiondata = pd.read_csv("data\\diabetes.csv")X = data.drop('Outcome', axis =1)y = data['Outcome']model = LogisticRegression()model.fit(X, y)joblib.dump(model, 'models\\logreg_model.joblib')
您可以根据需要更改数据集和模型路径的位置。我会将模型放入模型文件夹中。
我们将跳过所有数据准备和模型评估,因为我们在本文中的目标是将模型部署到生产中。当我们的模型准备好后,我们将准备部署我们的模型。
在本节中,我们将为我们的模型预测创建API,并使用Docker部署它们,同时使用Streamlit前端进行测试。
首先,确保您已经安装了Docker桌面,因为我们将在本地测试它们。
接下来,在app文件夹中创建一个名为main.py
的文件,并用以下代码填充它以生成API。
from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import pandas as pd
# Load the logistic regression model
model = joblib.load('../models/logreg_model.joblib')
# Define the input data model
class DiabetesData(BaseModel):
Pregnancies: int
Glucose: int
BloodPressure: int
SkinThickness: int
Insulin: int
BMI: float
DiabetesPedigreeFunction: float
Age: int
app = FastAPI()
# Define prediction endpoint
@app.post("/predict")
def predict(data: DiabetesData):
input_data = {
'Pregnancies': [data.Pregnancies],
'Glucose': [data.Glucose],
'BloodPressure': [data.BloodPressure],
'SkinThickness': [data.SkinThickness],
'Insulin': [data.Insulin],
'BMI': [data.BMI],
'DiabetesPedigreeFunction': [data.DiabetesPedigreeFunction],
'Age': [data.Age]
}
input_df = pd.DataFrame(input_data)
# Make a prediction
prediction = model.predict(input_df)
result = "Diabetes" if prediction[0] == 1 else "Not Diabetes"
return {"prediction": result}
此外,我们将有一个前端网页来尝试我们部署的API模型。为此,在app文件夹中创建一个名为frontend.py的文件。然后,用以下代码填充它们。
import streamlit as st
import requests
import json
API_URL = "http://localhost:8000/predict"
st.title("Diabetes Prediction App")
st.write("Enter the details below to make a prediction.")
pregnancies = st.number_input("Pregnancies", min_value=0, step=1)
glucose = st.number_input("Glucose", min_value=0, step=1)
blood_pressure = st.number_input("Blood Pressure", min_value=0, step=1)
skin_thickness = st.number_input("Skin Thickness", min_value=0, step=1)
insulin = st.number_input("Insulin", min_value=0, step=1)
bmi = st.number_input("BMI", min_value=0.0, step=0.1)
diabetes_pedigree_function = st.number_input("Diabetes Pedigree Function", min_value=0.0, step=0.1)
age = st.number_input("Age", min_value=0, step=1)
if st.button("Predict"):
input_data = {
"Pregnancies": pregnancies,
"Glucose": glucose,
"BloodPressure": blood_pressure,
"SkinThickness": skin_thickness,
"Insulin": insulin,
"BMI": bmi,
"DiabetesPedigreeFunction": diabetes_pedigree_function,
"Age": age
}
response = requests.post(API_URL, data=json.dumps(input_data), headers={"Content-Type": "application/json"})
if response.status_code == 200:
prediction = response.json().get("prediction", "No prediction")
st.success(f"Prediction: {prediction}")
else:
st.error("Error in making prediction. Please check your input data and try again.")
当一切准备就绪时,我们将创建Docker文件作为模型部署的基础。您应该在文件中填写以下代码。
FROM python:3.9-slimWORKDIR /appCOPY app /appCOPY models /modelsRUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txtEXPOSE 8000 8501CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port 8000 & streamlit run frontend.py --server.port=8501 --server.enableCORS=false"]
我们将使用准备好的Docker文件创建镜像,然后通过容器部署模型。为此,在终端中运行以下代码以构建镜像。
docker build -t diabetes-prediction-app .
上面的代码为我们的模型容器创建了Docker镜像。然后,我们将使用以下代码为模型部署创建API。
docker run -d -p 8000:8000 -p 8501:8501 --name diabetes-prediction-container diabetes-prediction-app
一切准备就绪后,确保容器正在运行,并通过以下地址访问前端。
http://localhost:8501/
您应该看到前端界面如下面的图片所示。
如果一切正常,恭喜!您刚刚将您的机器学习模型部署到了生产环境。
在本文中,我们介绍了使用FastAPI和Docker将模型部署到生产环境的简单方法。
当然,还有很多东西需要学习,比如在生产中维护和监控模型。将其部署到云系统将需要不同的教程文章,所以请继续关注其他内容。
希望这对您有所帮助!