机器学习模型部署到生产环境指南

2025年01月23日 由 佚名 发表 45 0

A Guide to Deploying Machine Learning Models to Production作者提供的图片 | Ideogram

 

开发机器学习模型只是工作的一半。模型只有在投入生产并提供业务价值后才有用。

了解如何部署我们的模型已成为任何数据科学家的基本技能,许多雇主已经期望我们能够做到这一点。因此,对于任何级别的数据科学家来说,学习将模型部署到生产中都是有益的。

本文将讨论如何将机器学习模型部署到生产环境中。

事不宜迟,让我们开始吧。

 

机器学习模型准备

 
我们将从准备要部署到生产环境的模型开始本指南。首先,我们将为整个教程设置虚拟环境。您可以在终端中使用以下代码来完成此操作。

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/

 

您应该看到前端界面如下面的图片所示。

 
A Guide to Deploying Machine Learning Models to Production
 

如果一切正常,恭喜!您刚刚将您的机器学习模型部署到了生产环境。

 

结论

 
在本文中,我们介绍了使用FastAPI和Docker将模型部署到生产环境的简单方法。

当然,还有很多东西需要学习,比如在生产中维护和监控模型。将其部署到云系统将需要不同的教程文章,所以请继续关注其他内容。

希望这对您有所帮助!
 

    文章来源:https://www.kdnuggets.com/guide-deploying-machine-learning-models-production
    欢迎关注ATYUN官方公众号
    商务合作及内容投稿请联系邮箱:bd@atyun.com
    评论 登录
    热门职位
    Maluuba
    20000~40000/月
    Cisco
    25000~30000/月 深圳市
    PilotAILabs
    30000~60000/年 深圳市
    写评论取消
    回复取消