机器学习模型生产部署全流程指南:从开发到上线

开发好机器学习模型只是完成了一半的工作。只有当模型被部署到生产环境并带来业务价值时,它才真正有用。

掌握模型部署的技能已经成为每一个数据科学家的必备能力,许多雇主也已经开始期望我们能够完成这一任务。因此,无论处于哪个水平的数据科学家,都有必要学习如何将模型部署到生产环境中。

本文将系统讲解如何将机器学习模型部署到生产环境。

A Guide to Deploying Machine Learning Models to Production

废话不多说,让我们开始吧。


机器学习模型准备

我们将从准备即将部署到生产环境的模型开始。首先,需要为本教程设置虚拟环境。你可以在终端中运行以下命令:

python -m venv myvirtualenv

安装并激活虚拟环境后,需要安装所需的依赖包。请创建一个 requirements.txt 文件,并填入以下库列表:

pandas
scikit-learn
fastapi
pydantic
uvicorn
streamlit

准备好 requirements.txt 后,使用以下命令安装依赖:

pip install -r requirements.txt

一切准备就绪后,我们将开始开发机器学习模型。在本教程中,我们将使用 Kaggle 的糖尿病数据集。请将数据集放在 data 文件夹中。

然后,在 app 文件夹下创建一个名为 train_model.py 的文件,在其中使用以下代码训练机器学习模型:

import pandas as pd
import joblib
from sklearn.linear_model import LogisticRegression

data = 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')

你可以根据需要更改数据集和模型保存路径。这里将模型保存在 models 文件夹中。

由于本教程的重点是模型部署,因此我们将跳过数据准备和模型评估的部分。当模型准备好后,就可以进入部署准备环节。


模型部署

在本节中,我们将为模型预测创建 API,并通过 Docker 部署,并使用 Streamlit 前端进行测试。

首先,请确保你已经安装了 Docker Desktop,以便在本地进行测试。

接下来,在 app 文件夹下创建一个名为 main.py 的文件,并填写以下代码以生成 API:

from fastapi import FastAPI
from pydantic import BaseModel
import joblib
import pandas as pd

# 加载逻辑回归模型
model = joblib.load('../models/logreg_model.joblib')

# 定义输入数据模型
class DiabetesData(BaseModel):
    Pregnancies: int
    Glucose: int
    BloodPressure: int
    SkinThickness: int
    Insulin: int
    BMI: float
    DiabetesPedigreeFunction: float
    Age: int

app = FastAPI()

# 定义预测端点
@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)

    # 进行预测
    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.")

一切准备就绪后,我们将创建 Dockerfile 作为模型部署的基础。在 Dockerfile 中填写以下内容:

FROM python:3.9-slim

WORKDIR /app

COPY app /app
COPY models /models

RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt

EXPOSE 8000 8501

CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port 8000 & streamlit run frontend.py --server.port=8501 --server.enableCORS=false"]

完成 Dockerfile 后,在终端运行以下命令以构建镜像:

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,将机器学习模型简单、高效地部署到生产环境中。

当然,关于在生产环境下维护和监控模型,还有许多内容值得进一步学习。而将模型部署到云端,则需要另行教程来详细讲解,敬请期待后续内容。

希望本教程对你有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值