今天将分享基于Flask的深度学习模型服务端部署完整实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、Flask简介
Flask是一个使用Python编写的轻量级Web应用框架,可扩展性很强,相较于Django框架,灵活度很高,开发成本低。它仅仅实现了Web应用的核心功能,Flask由两个主要依赖组成,提供路由、调试、Web服务器网关接口的Werkzeug 实现的和模板语言依赖的jinja2,其他的一切都可以由第三方库来完成。
二、Flask安装配置
1、在python环境下FLask安装非常简单:pip install flask
2、选择一台带GPU的电脑作为Flask深度学习模型服务部署的设备。
三、Flask深度学习模型服务部署用例
一个简单的深度学习分类的Flask深度学习模型服务例子。
from flask import Flask, request, send_file
from model import *
import os
import torch
import cv2
# Use CUDA
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
os.environ['CUDA_LAUNCH_BLOCKING'] = '1'
use_cuda = torch.cuda.is_available()
app = Flask(__name__)
# 载入模型
ResNet2d = MutilResNet2dModel(image_height=512, image_width=512, image_channel=1, numclass=2, batch_size=16,
loss_name='MutilCrossEntropyLoss', model_name='resnet101', accum_iter=1,
use_cuda=use_cuda, inference=True, model_path=r'log/resnet101/ce/MutilResNet2d.pth')
root_dir = r"D:/uploads"
if not os.path.exists(root_dir):
os.makedirs(root_dir)
# 定义服务接口
@app.route('/predict', methods=['POST'])
def predict():
file = request.files.get('file') # 获取上传的文件
if file:
file.save(root_dir + '/' + file.filename) # 将上传文件保存到本地
image = cv2.imread(root_dir + '/' + file.filename, 0) # 读取本地文件
mask, mask_prob = ResNet2d.inference(image) # 对本地文件进行推理计算
# 返回预测结果
return f'category,{str(mask)}'
else:
return 'No file uploaded'
# 定义服务接口
@app.route('/getresult', methods=['GET'])
def getresult():
filename = request.args.get('file') # 获取请求参数中的文件名
if not filename:
return "Missing parameter: file" # 没有提供文件名
filepath = root_dir + '/' + filename # 生成完整的文件路径
try:
return send_file(filepath, as_attachment=True, attachment_filename=filename)
except FileNotFoundError:
return "The file does not exist" # 文件不存在
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
然后运行上述程序。
四、Flask深度学习模型服务部署测试
在同一个网段下,通过在linux下使用curl指令来调用Flask深度学习模型服务。
A、首先获取服务部署的设备IP,使用ipconfig。
B、然后再获取访问服务的设备IP,使用ifconfig -a。
C、再在linux下ping一下服务端的ip,是可以ping通的。
D、使用curl指令来运行深度学习分类模型,通过将本地文件上传到服务器再经过分类器得到分类结果。指令格式如下:
curl -X POST -F "file=@E:/TRAIN000106.jpg" 192.168.10.96:8000/predict
在服务端可以看到访问的消息。
E、使用curl指令可以从服务器上下载指定文件到本地目录下,例如深度学习模型是分割模型的时候,当上传完数据到服务器后通过分割模型得到分割结果,但是此时结果还是在服务器端,需要将结果从服务器端下载到本地进行后续操作。指令如下:
curl 192.168.10.96:8000/getresult?file=TRAIN000106.jpg -o /home/yuri/Project/TRAIN000106.jpg
在服务端可以看到访问的消息。
从服务器上下载到本地的数据。
如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果有任何问题,随时给我留言我会及时回复的。