当前位置: 首页 > news >正文

flask模型部署教程

搭建python flask服务的步骤

1、安装相关的包

具体参考https://blog.csdn.net/weixin_42126327/article/details/127642279

1、安装conda环境和相关包

# 一、安装conda
# 1、首先,前往Anaconda官网(https://www.anaconda.com/products/individual)下载适合您的Linux版本的Anaconda安装文件。# 2、下载Anaconda安装文件
wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh
# 3、安装conda
bash Anaconda3-2023.07-2-Linux-x86_64.sh# 4、conda --version
如果输出了Anaconda的版本号,则安装成功。## 二、创建canda的虚拟开发环境 py36# 1、创建canda的虚拟开发环境 py36
conda create --name py36 python=3.6# 2、进入虚拟开发环境 
conda activate py36# 3、退出虚拟环境
conda deactivate## 三、安装flask相关的包
conda install flask
conda install scikit-learn

2、搭建flask服务代码

1、训练模型并保存模型

model.py


from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import pickle# 加载iris数据集,并进行最简单的训练过程,可以自行扩展
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
classifier = RandomForestClassifier()
classifier.fit(X_train, y_train)
print(classifier)将模型保存为pkl格式,准备应用层调用
pickle.dump(classifier, open("./model.pkl", "wb"))

2、启动flask服务

app_demo.py


import numpy as np
from flask import Flask, request, jsonify, render_template
from flask_cors import CORS
import pickleapp = Flask(__name__,template_folder='../templates')model = pickle.load(open('model.pkl', 'rb'))
@app.route('/')
def home():return render_template('index.html')@app.route('/results', methods=['POST'])
def results():data = request.get_json(force=True)print(data)prediction = model.predict([np.array(list(data.values()))])# 将预测结果放在字典中output = {'prediction': int(prediction[0])}# 将字典转换为 JSON 格式并返回return jsonify(output)
if __name__ == "__main__":app.run(debug=True)    

3、调用flask服务的客户端代码

request_demo.py python客服端代码


import requests
url = 'http://localhost:5000/results'
r = requests.post(url,json={'Sepal_Length':5,'Sepal_Width':2, 'Petal_Length':4, 'Petal_Width':2})
print(r.json())

FlaskClient.scala scala客户端代码

package com.demoimport java.net.URLimport org.apache.http.client.methods.HttpPost
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.HttpClientBuilder
import org.json4s._
import org.json.JSONObject
import org.apache.http.util.EntityUtils
import org.json4s.jackson.JsonMethods.parseobject FlaskClient {implicit val formats = DefaultFormatsdef main(args: Array[String]): Unit = {val url = new URL("http://localhost:5000/results")// 构造JSON对象val data = new JSONObject()data.put("feature1", 1)data.put("feature2", 2)data.put("feature3", 3)data.put("feature4", 4)// 将JSON对象转换为字符串val json = data.toString()val post = new HttpPost(url.toURI)post.setEntity(new StringEntity(json))post.setHeader("Content-type", "application/json")val client = HttpClientBuilder.create.buildval response = client.execute(post)val entity = response.getEntityval result = EntityUtils.toString(entity)val prediction = (parse(result) \ "prediction").extract[Int]println(prediction)}
}

http客户端代码 templates/index.html


<!-- index.html -->
<!DOCTYPE html>
<html >
<head><meta charset="UTF-8"><title>ML API</title>
</head>
<body>
<div class="login"><h1>Flower Class Prediction</h1><form action="{{ url_for('predict')}}"method="post">  <!-- 这一块是用户输入自定义数据 --><input type="text" name="Sepal_Length" placeholder="Sepal_Length" required="required"/><input type="text" name="Sepal_Width" placeholder="Sepal_Width" required="required" /><input type="text" name="Petal_Length" placeholder="Petal_Length" required="required"/><input type="text" name="Petal_Width" placeholder="Petal_Width" required="required" /><button type="submit" class="btn btn-primary btn-block btn-large">Predict</button></form><br>{{ prediction_text }}  <!-- 这一块是模型输出结果 -->
</div>
</body>
</html>

3、flask服务的运行

1、调试环境


# 1、启动flask服务
python app_demo.py
# 2、客户端请求flask服务
# 2.1 python客户端
python request_demo.py # 2.2 scala 客户端java -cp target/xx-2.0.0-SNAPSHOT-jar-with-dependencies.jar com.xx.FlaskClient# 2.3 http客户端
http://127.0.0.1:5000/predict 

2、生产环境部署

uWSGI:uWSGI是一个高性能的WSGI服务器,支持多种编程语言和应用程序框架,包括Flask。可以使用uWSGI来部署Flask服务
uwsgi安装

conda install uwsgi --no-deps # 使用--no-deps选项:这将跳过依赖项

部署 参考:https://juejin.cn/post/7014036187937505317

配置文件uwsgi.ini 文件

`[uwsgi]http = 127.0.0.1:5000wsgi-file = app_demo.pycallable = app`

准备好配置文件后

# 启动uwsgi服务
uwsgi --ini uwsgi.ini
# 停止uwsgi服务
uwsgi --stop uwsgi.pid
# 重启uwsgi服务
uwsgi --reload uwsgi.pid
http://www.lryc.cn/news/134816.html

相关文章:

  • 一文详解4种聚类算法及可视化(Python)
  • SpringBoot---内置Tomcat 配置和切换
  • Qt 显示git版本信息
  • Mysql的视图和管理
  • uniapp 顶部头部样式
  • 最新ai系统ChatGPT程序源码+详细搭建教程+mj以图生图+Dall-E2绘画+支持GPT4+AI绘画+H5端+Prompt知识库
  • FairyGUI-Unity 自定义UIShader
  • Excel/PowerPoint柱状图条形图负值设置补色
  • el-date-picker 时间区域选择,type=daterange,form表单校验+数据回显问题
  • LeetCode 面试题 01.02. 判定是否互为字符重排
  • 学习maven工具
  • 手机直播源码开发,协议讨论篇(三):RTMP实时消息传输协议
  • 【JavaEE基础学习打卡05】JDBC之基本入门就可以了
  • 2023/8/16 华为云OCR识别驾驶证、行驶证
  • 【Java开发】 Mybatis-Plus 07:创建时间、更新时间自动添加
  • 解决vue2项目在IE11浏览器中无画面的兼容问题
  • 信号
  • 产品经理的真实薪资有多少?今天带你看看
  • 《一个操作系统的实现》windows用vm安装CentOS——从bochs环境搭建到第一个demo跑通
  • 线程Thread
  • 如何使用CSS实现一个渐变背景效果?
  • 初始C语言(7)——详细讲解有关初阶指针的内容
  • ArcGIS Pro技术应用(暨基础入门、制图、空间分析、影像分析、三维建模、空间统计分析与建模、python融合、案例应用)
  • RISC-V公测平台发布 · 数据库在RISC-V服务器上的适配评估
  • UE5.2 LyraDemo源码阅读笔记(五)输入系统
  • 线段树详解——影子宽度
  • 使用R语言绘制折线图
  • 无涯教程-Perl - wantarray函数
  • 【gitkraken】gitkraken自动更新问题
  • 《Java Web程序设计》试卷03