首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

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

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

机器学习模型准备

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

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/

此时,前端页面应如下图所示

机器学习模型生产部署全流程指南

如果一切顺利,恭喜你!你已经成功将机器学习模型部署到生产环境。

结论

在本文中,我们介绍了如何通过 FastAPI 和 Docker,将机器学习模型简单、高效地部署到生产环境中。

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

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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OMh_ZhJNRD3vjr582-GvLbsQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券