首页 > 其他分享 >模型的部署:服务端与客户端建立连接(Flask)

模型的部署:服务端与客户端建立连接(Flask)

时间:2024-10-20 21:46:12浏览次数:10  
标签:__ 请求 Flask image model 服务端 客户端

目录

一、服务端部署(使用Flask)

1.安装Flask

2.加载模型(这里以识别图片的类型模型为例)

3.定义API端点

4.运行Flask应用

二、客户端请求

1.安装HTTP客户端库

2.发送请求

请求成功示例:

监控与日志

总结


在机器学习模型的部署过程中,服务端与客户端之间的有效通信是至关重要的。Flask作为一个轻量级的Python Web框架,非常适合用于构建快速、可扩展的API服务,以支持模型的推理请求。本文将详细介绍如何使用Flask来搭建服务端,并展示客户端如何与之建立连接。

一、服务端部署(使用Flask)

1.安装Flask

首先,确保你的Python环境中已经安装了Flask。如果没有安装,可以使用pip进行安装

pip install Flask

2.加载模型(这里以识别图片的类型模型为例)

在你的Flask应用中,你需要加载已经训练好的机器学习模型。这通常涉及读取模型文件(如TensorFlow的SavedModel、PyTorch的.pth文件等)并初始化模型实例

import io  
import flask  
import torch  
import torch.nn.functional as F  
from PIL import Image  
from torch import nn  
from torchvision import transforms, models  
  
# 初始化Flask应用  
app = flask.Flask(__name__)  # 创建一个新的Flask应用实例  
# __name__参数用于定位应用的根路径,以便Flask找到模板、静态文件等。  
# app = flask.Flask(__name__)是Flask应用的起点,初始化应用实例。  
  
# 定义一个全局变量model,初始化为None  
# 和一个标志use_gpu,初始化为False,表示是否使用GPU进行加速  
model = None  
use_gpu = False 

def load_model():  
    """加载预训练模型,你也可以轻松地使用自己的模型。"""  
    global model  # 声明使用全局变量model  
    # 加载resnet18网络结构  
    model = models.resnet18()  
    # 获取全连接层的输入特征数  
    num_ftrs = model.fc.in_features  
    # 修改全连接层,输出特征数为102(根据你的任务设置类别数)  
    model.fc = nn.Sequential(nn.Linear(num_ftrs, 102))  
    # 加载预训练权重  
    checkpoint = torch.load('best.pth')  
    model.load_state_dict(checkpoint['state_dict'])  
    # 将模型设置为评估模式  
    model.eval()  
    # 如果use_gpu为True,则将模型移至GPU  
    if use_gpu:  
        model.cuda()  
  
def prepare_image(image, target_size):  
    """准备图像数据,包括转换模式、调整大小、归一化等。"""  
    # 如果图像不是RGB模式,则转换为RGB模式  
    if image.mode != 'RGB':  
        image = image.convert('RGB')  
    # 调整图像大小  
    image = transforms.Resize(target_size)(image)  
    # 将图像转换为Tensor  
    image = transforms.ToTensor()(image)  
    # 归一化图像(根据ImageNet数据集的均值和标准差)  
    image = transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])(image)  
    # 增加一个batch_size维度  
    image = image[None]  
    # 如果use_gpu为True,则将图像移至GPU  
    if use_gpu:  
        image = image.cuda()  
   
    return  image

3.定义API端点

接下来,定义API端点来处理客户端的请求。这里我们将创建一个POST端点来接收数据并返回模型的推理结果。

@app.route("/predict", methods=["POST"])  
def predict():  
    """处理客户端的预测请求。"""  
    # 初始化一个字典,用于存储响应数据  
    data = {"success": False}  
    # 检查请求方法是否为POST  
    if flask.request.method == 'POST':  
        # 检查请求中是否包含名为"image"的文件  
        if flask.request.files.get("image"):  
            # 读取图像文件内容  
            image_bytes = flask.request.files["image"].read()  
            # 使用PIL打开图像  
            image = Image.open(io.BytesIO(image_bytes))  
            # 预处理图像  
            image = prepare_image(image, target_size=(224, 224))  
            # 使用模型进行预测,并应用softmax函数获取概率分布  
            preds = F.softmax(model(image), dim=1)  
            # 获取概率最高的前3个结果及其索引  
            results = torch.topk(preds.cpu().data, k=3, dim=1)  
            # 将结果转换为NumPy数组  
            results = (results[0].cpu().numpy(), results[1].cpu().numpy())  
            # 初始化预测结果列表  
            data['predictions'] = list()  
            # 遍历结果,并构建响应字典  
            for prob, label in zip(results[0][0], results[1][0]):  
                r = {"label": str(label), "probability": float(prob)}  
                data['predictions'].append(r)  
    # 设置成功标志为True  
    data["success"] = True  
    # 返回JSON格式的响应数据  
    return flask.jsonify(data)  

4.运行Flask应用

最后,运行你的Flask应用,使其监听指定的端口。

if __name__ == '__main__':  
    # 打印加载模型和启动Flask服务的消息  
    print("Loading PyTorch model and Flask starting server ...")  
    print("Please wait until server has fully started")  
    # 加载模型  
    load_model()  
    # 启动Flask服务,指定主机IP和端口号  
    app.run(host='0.0.0.0', port=5012)  
    # 注意:这里指定的IP地址应该是服务器所在的IP地址,确保客户端可以访问。

运行成功示例:

二、客户端请求

1.安装HTTP客户端库

在客户端,你需要一个HTTP客户端库来发送请求并接收响应。Python中常用的库有requests。所以需要按安装reauest库

pip install requests

2.发送请求

使用requests库发送POST请求到Flask服务端,并包含需要推理的数据。

import requests  # 导入requests库,用于发送HTTP请求  
  
# 定义Flask服务器的URL,用于发送图像预测请求  
flask_url = 'http://192.168.24.45:5012/predict'  
  
# 定义一个函数,用于预测给定图像路径的结果  
def predict_result(image_path):  
    # 以二进制读模式打开图像文件,并读取其内容  
    image = open(image_path, 'rb').read()  
      
    # 创建一个字典,将图像数据作为文件内容发送  
   
    payload = {'image': image}  
  
    # 使用requests.post发送POST请求到Flask服务器,并接收JSON格式的响应  
     
    r = requests.post(flask_url, files=payload).json()   
      
    # 检查响应中的'success'字段,判断请求是否成功  
    if r['success']:  
        # 如果成功,遍历预测结果并打印每个预测类别的标签和概率  
        for (i, result) in enumerate(r['predictions']):   
            print('{}.预测类别为{}:的概率:{}'.format(i + 1, result['label'], result['probability']))  
        # 打印'OK'表示所有预测结果已成功打印  
        print('OK')  
    else:  # 如果失败  
        # 打印'Request failed'表示请求失败  
        print('Request failed')  
  
# 当脚本作为主程序运行时,调用predict_result函数并传入一个图像路径  
if __name__ == '__main__':  
    predict_result('imagr_file')#传入发送文件
请求成功示例:

监控与日志

  1. 日志记录
    在服务端和客户端都配置日志记录,记录请求、响应和错误信息。日志可以帮助快速定位问题并进行排查。

  2. 性能监控
    使用监控工具(如Prometheus、Grafana)对服务的性能进行实时监控,包括请求数量、响应时间、错误率等指标。

  3. 告警机制
    配置告警机制,当服务出现异常或性能指标超出阈值时,及时通知相关人员进行处理。

示例:

日志信息

总结

服务端与客户端之间的有效连接是模型部署成功的关键。通过选择合适的部署架构、通信协议和优化策略,可以确保模型的推理请求能够高效、安全地进行。同时,完善的监控和日志机制能够帮助及时发现并解决问题,保障服务的稳定性和可靠性。希望本文能为你在模型部署过程中提供有价值的参考和指导。

标签:__,请求,Flask,image,model,服务端,客户端
From: https://blog.csdn.net/2401_84670644/article/details/143099279

相关文章

  • Flask中如何实现JWT认证?
    在Flask中实现JWT(JSONWebToken)认证,通常需要借助第三方库,比如PyJWT或Flask-JWT-Extended。下面我会分别介绍如何使用这两个库来实现JWT认证。使用PyJWT安装PyJWT首先,你需要安装PyJWT库。可以使用pip来安装:pipinstallPyJWT生成JWT在Flask应用中,你可以创建一个函数......
  • python+flask框架的基于Uniapp的核酸检测系统(开题+程序+论文) 计算机毕业设计
    取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当前全球新冠疫情的背景下,核酸检测已成为疫情防控的重要手段之一。关于核酸检测系统的研究,现有研究主要集中在大型医疗机构或政府卫生部门的信息系统整合与优化上,专门针对移动端、特别是基于Uniapp框架的核酸......
  • python+flask框架的基于SSM框架的微信小程序(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,已经深入到人们的日常生活中。微信小程序以其无需下载、即用即走的特点......
  • python+flask框架的基于OA技术的办公文档归档系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于办公文档归档系统的研究,现有研究主要集中在传统档案管理系统以及大型企业级内容管理系统(ECM)方面,这些系统虽然功能强大,但往往复杂且成......
  • python+flask计算机毕业设计影视信息资源交易平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,影视产业迎来了前所未有的繁荣期。然而,影视信息资源的分布不均、交易渠道不畅等问题日益凸显,限制了影视作品的传......
  • tauri2.0-admin-vue3+element-plus客户端后台管理系统-源码版
    基于Tauriv2+vue3+ElementPlus+Echarts首款重磅桌面端后台管理系统Exe解决方案Tauri2Vue3Admin,正式完结了。趁着周末,录制了一个源码版演示视频。【源码版】tauri2.0+vite5+element-plus中后台管理系统解决方案技术栈编码器:vscode技术框架:tauri2.0+vite5.4.8+vue3.5......
  • openvpn2.0.9搭建和windows客户端拨号连接vpn,并用xshell连接机房只有内网的服务器
    openvpn2.0.9搭建和windows客户端拨号连接vpn,并用xshell连接机房只有内网的服务器如果对运维课程感兴趣,可以在b站上、csdn或微信视频号上搜索我的账号:运维实战课程,可以关注我,学习更多免费的运维实战技术视频1.openvpnserver服务器的安装、配置和服务启动:vpnserver服务器:(......
  • python+flask计算机毕业设计在线小说系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的迅猛发展和数字阅读习惯的普及,在线小说系统作为一种新兴的文化传播平台,逐渐成为广大读者获取娱乐和知识的重要途径。近年......
  • HTTP客户端框架之UniHttp讲解
    目录1UniHttp1.1简介1.1.1前言1.1.2简介1.2简单使用1.2.1引入依赖1.2.2对接接口1.2.3声明定义HttpAPI包扫描路径1.2.4依赖注入使用即可1.3说明介绍1.3.1@HttpApi注解1.3.2@HttpInterface注解1.3.3@Par注解1.3.3.1@QueryPar注解1.3.3.2@PathPar注解1.3.3.3@Heade......
  • python+vue基于django/flask的在线投票管理系统java+nodejs-计算机毕业设计
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......