Ubuntu搭建flask服务器, 部署sklearn 机器学习模型

本文参考自:flaskapi
说明:系统ubuntu, anaconda虚拟环境, python = 2.7

1. 项目结构和文件说明

.
├── data
│   └── 数据汇总.csv # 需要预测的数据
├── infer.py # 主要文件, 模型加载推理,和flask服务的创建、解析等
├── infer.pyc
├── model
│   └── liner.pkl # 训练好的模型
├── README.md
├── requirements.txt
├── test_post.sh # 程序入口, 启动服务, 通过crul命令发送数据, 模拟POST请求
└── train.py # 训练模型, 并保存

2. 训练

sklearn训练的过程不做赘述, 训练完用pickle序列化成二进制文件,留待后续加载。
注意: 如果数据经过了前处理, 如填补缺失值, 归一化或者值映射等等, 需要把数据处理用管道Pipeline封装, 具体参考生产环境中进行机器学习模型部署(using Flask)

3. 创建Flask服务

通过装饰器创建url对应服务, 函数为请求体的解析前向计算返回Response的过程.

# coding=utf-8
import sys

from flask import Flask, request, jsonify
import pandas as pd
from sklearn.externals import joblib

app = Flask(__name__)

@app.route('/predict', methods=['POST'])
def predict():
        json_ = request.get_json(force=True)    # 这一步解析报错, 检查POST请求的json是不是有错误
        query = pd.get_dummies(pd.DataFrame(json_))
        query = query.reindex(columns=model_columns, fill_value=0)
        prediction = list(reg.predict(query))
        return jsonify({"prediction": prediction})


if __name__ == '__main__':
    try:
        port = int(sys.argv[1])
    except Exception as e:
        port = 8899         # 自定义服务端端口,用于与客户端访问

    # inputs
    data = 'data/数据汇总.csv'
    data = pd.read_csv(data, encoding='utf-8')
    test_data = data.iloc[-6:]    # 我用最后六行的数据作测试集

    # 提取有效列, label列
    include = list(data.columns)
    dependent_variable = include[-1]
    model_columns = include[:-1]

    # 模型文件位置
    model_directory = 'model'
    model_liner_file_name = '%s/liner.pkl' % model_directory # liner.pkl是我的模型名字

    # 加载模型
    reg = joblib.load(model_liner_file_name)
    print('model loaded{}'.format(model_liner_file_name))

    app.run(host='0.0.0.0', port=port, debug=True)

4. 开启服务

开启服务命令:

python2 infer.py 8899 &
sleep 2

1430038-20190521170930104-1852453741.png


注意: python需要通过环境变量或者指定路径指定到需要的环境。推荐anaconda虚拟环境, 我的环境配置文件如下, 可以复制粘贴后通过命令conda env create -f environment.yml创建虚拟环境:

name: flask
channels:
  - defaults
dependencies:
  - ca-certificates=2019.1.23=0
  - certifi=2019.3.9=py27_0
  - libedit=3.1.20181209=hc058e9b_0
  - libffi=3.2.1=hd88cf55_4
  - libgcc-ng=8.2.0=hdf63c60_1
  - libstdcxx-ng=8.2.0=hdf63c60_1
  - ncurses=6.1=he6710b0_1
  - openssl=1.1.1b=h7b6447c_1
  - pip=19.1.1=py27_0
  - python=2.7.16=h9bab390_0
  - readline=7.0=h7b6447c_5
  - setuptools=41.0.1=py27_0
  - sqlite=3.28.0=h7b6447c_0
  - tk=8.6.8=hbc83047_0
  - wheel=0.33.4=py27_0
  - zlib=1.2.11=h7b6447c_3
  - pip:
    - click==7.0
    - flask==1.0.2
    - itsdangerous==1.1.0
    - jinja2==2.10.1
    - markupsafe==1.1.1
    - numpy==1.16.3
    - pandas==0.24.2
    - python-dateutil==2.8.0
    - pytz==2019.1
    - scikit-learn==0.20.3
    - scipy==1.2.1
    - six==1.12.0
    - werkzeug==0.15.4
prefix: /home/geoffrey/.conda/envs/flask

在安装好后, 通过source activate flask激活环境, 然后执行上面的开启服务命令。

5. 模拟请求

通过crul命令发送请求,-d是发送的json格式请求数据列表, -H "Content-Type: application/json"是青请求行,指定请求体的json解析格式, -X POST http://localhost:8899/predict是请求url .注意两点:

  • 务必加上请求头格式说明,
  • 仔细检查json有没有问题, 我因为json末尾多谢了个逗号,折腾了一中午(⊙﹏⊙)
    1430038-20190521171112494-1567919735.png

转载于:https://www.cnblogs.com/geoffreyone/p/10901052.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用flask部署机器学习模型,可以按照以下步骤进行操作: 1. 准备模型和数据:首先,准备好训练好的机器学习模型以及用于预测的数据。确保模型可以正常工作并具有适当的输入和输出。 2. 安装Flask:使用pip或conda安装Flask,并确保安装过程中所需的依赖项也被正确安装。 3. 创建Flask应用程序:在Python文件中创建一个简单的Flask应用程序。导入必要的模块并创建一个Flask实例。 4. 定义路由和视图函数:通过定义Flask应用程序的路由和关联的视图函数,为模型部署创建端点。例如,可以使用@app.route装饰器定义一个路由,并编写一个处理该路由的视图函数。 5. 加载模型:在视图函数中加载先前准备好的机器学习模型。使用模型加载函数将模型加载到内存中。 6. 处理输入数据:根据模型的要求,处理来自请求的输入数据。可以在视图函数中获取请求参数,对其进行转换、归一化或其他必要的预处理操作。 7. 进行预测:使用加载的模型对预处理后的数据进行预测。调用模型的预测函数,并将处理后的数据传递给它。 8. 返回结果:将预测结果返回给客户端。可以将结果转换为JSON格式,并使用Flask的内置函数将其发送回客户端。 9. 运行应用程序:使用Flask的run()方法运行应用程序。在终端上执行python文件名.py打开服务,并访问相应的URL以调用预测。 通过以上步骤,就可以使用Flask部署机器学习模型。通过将模型Flask应用程序结合起来,可以创建一个可以接收输入数据并返回预测结果的API。可以通过将此应用程序发布到云服务器或任何其他适当的部署地点来使其对外可用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值