自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何將機(jī)器學(xué)習(xí)模型部署到生產(chǎn)環(huán)境?

譯文 精選
人工智能 機(jī)器學(xué)習(xí)
本文介紹了如何將模型從開發(fā)環(huán)境部署到生產(chǎn)環(huán)境。

譯者 | 布加迪

審校 | 重樓

開發(fā)機(jī)器學(xué)習(xí)模型只完成了一半工作。除非部署到生產(chǎn)環(huán)境、提供業(yè)務(wù)價值,否則模型仍然毫無用處。

知道如何部署自己的模型已成為任何數(shù)據(jù)科學(xué)家的一項(xiàng)基本技能,許多雇主已經(jīng)要求我們能做到這一點(diǎn)。因此,對于任何級別的數(shù)據(jù)科學(xué)家來說,學(xué)習(xí)如何將模型部署到生產(chǎn)環(huán)境大有助益

本文探討如何將機(jī)器學(xué)習(xí)模型部署到生產(chǎn)環(huán)境中。

機(jī)器學(xué)習(xí)模型準(zhǔn)備

首先,準(zhǔn)備部署到生產(chǎn)環(huán)境中的模型。我們為整個教程設(shè)置虛擬環(huán)境。可以通過在終端中使用以下代碼來實(shí)現(xiàn)這一點(diǎn)。

python -m venv myvirtualenv

在安裝并激活虛擬環(huán)境之后,需要安裝所需的軟件包。創(chuàng)建requirements.txt文件,并用下面的庫列表填充它。

pandas
scikit-learn
fastapi
pydantic
uvicorn
streamlit

requirements.txt準(zhǔn)備就緒之后,我們必須使用以下代碼安裝它們。

pip install -r requirements.txt

一切準(zhǔn)備就緒,我們將開始開發(fā)機(jī)器學(xué)習(xí)模型。在本教程中,我們將使用來自Kaggle糖尿病數(shù)據(jù)。把數(shù)據(jù)放在數(shù)據(jù)文件夾中。

然后,在app文件夾中創(chuàng)建一個名為train_model.py的文件。在train_model.py中,我們將使用下面的代碼訓(xùn)練機(jī)器學(xué)習(xí)模型。

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

可以根據(jù)自己的喜好更改數(shù)據(jù)集的位置和模型路徑。我將把模型放入模型的文件夾中。

我們將跳過所有的數(shù)據(jù)準(zhǔn)備和模型評估,因?yàn)楸疚牡哪?/span>是將模型部署到生產(chǎn)環(huán)境中。當(dāng)模型準(zhǔn)備就緒后,我們將準(zhǔn)備部署模型。

模型部署

在本節(jié)中,我們將為模型預(yù)測創(chuàng)建API,并使用Docker部署它們,同時使用Streamlit前端測試它們。

首先,確保已經(jīng)安裝了Docker桌面,我們將在本地測試它。

接下來,在app文件夾中創(chuàng)建一個名為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}

此外,我們有一個前端web來試一試我們部署的API模型。為此,在app文件夾中創(chuàng)建一個名為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.")

當(dāng)一切準(zhǔn)備就緒后,我們將創(chuàng)建Docker文件作為模型部署的基礎(chǔ)。應(yīng)該在文件中填寫下面的代碼。

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"]

我們將創(chuàng)建Docker文件已準(zhǔn)備就緒的映像,然后通過容器部署模型。為此,在終端中運(yùn)行以下代碼來構(gòu)建映像。

docker build -t diabetes-prediction-app .

上面的代碼為我們的模型容器創(chuàng)建了Docker映像。然后,我們將使用以下代碼為模型部署制作API。

docker run -d -p 8000:8000 -p 8501:8501 --name diabetes-prediction-container diabetes-prediction-app

一切準(zhǔn)備就緒后,確保容器運(yùn)行并使用下面的地址訪問前端。

http://localhost:8501/

應(yīng)該會看到如下圖所示的前端。

如果一切順利,恭喜!剛剛將機(jī)器學(xué)習(xí)模型部署到生產(chǎn)環(huán)境中。

結(jié)論

在本文中,我們介紹了使用FastAPI和Docker將模型部署到生產(chǎn)環(huán)境中的簡單方法。

當(dāng)然,從維護(hù)模型和監(jiān)測生產(chǎn)環(huán)境中模型的過程中,仍然有很多東西需要學(xué)習(xí)。但愿本文有所幫助!

原文標(biāo)題:A Guide to Deploying Machine Learning Models to Production,作者:Cornellius Yudha Wijaya

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2020-11-10 08:00:00

機(jī)器學(xué)習(xí)技術(shù)科學(xué)

2018-01-08 09:09:46

機(jī)器學(xué)習(xí)模型NET

2019-08-08 08:00:00

深度學(xué)習(xí)機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2015-03-18 10:29:01

私有云混合云云API

2019-10-23 08:00:00

Flask機(jī)器學(xué)習(xí)人工智能

2021-01-25 09:00:00

機(jī)器學(xué)習(xí)人工智能算法

2018-06-23 13:55:15

Apache SparPython數(shù)據(jù)

2020-06-10 07:46:39

機(jī)器學(xué)習(xí)預(yù)測性維護(hù)工業(yè)物聯(lián)網(wǎng)

2024-09-09 11:45:15

ONNX部署模型

2012-08-17 11:04:57

IBMdW

2024-02-20 15:17:35

機(jī)器學(xué)習(xí)模型部署

2011-05-04 09:29:22

2023-04-28 08:00:00

機(jī)器學(xué)習(xí)數(shù)據(jù)集

2023-02-07 16:36:34

機(jī)器學(xué)習(xí)Docker無服務(wù)器

2022-09-07 08:00:00

機(jī)器學(xué)習(xí)MLFlow工具

2024-10-12 08:00:00

機(jī)器學(xué)習(xí)Docker

2017-04-05 13:24:35

互聯(lián)網(wǎng)

2021-05-12 08:00:00

深度學(xué)習(xí)人工智能設(shè)備

2010-08-11 15:35:47

Flex DataGr

2023-06-07 09:00:00

JavaScript開發(fā)TypeScript
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號