企业网站托管方式,asp影楼网站数据库用什么软件,网页设计搭建网站,网站制作职业文章目录 模型部署一、模型部署的定义与目的二、模型部署的步骤三、模型部署的方式四、Flask框架五、实现模型部署1. 搭建服务端1.1 初始化Flask app1.2 加载模型1.3 数据预处理1.4 构建装饰器1.5 完整代码 2. 搭建客户端2.1 服务端网址2.2 发送请求2.3 完整代码 六、运行使用 … 文章目录 模型部署一、模型部署的定义与目的二、模型部署的步骤三、模型部署的方式四、Flask框架五、实现模型部署1. 搭建服务端1.1 初始化Flask app1.2 加载模型1.3 数据预处理1.4 构建装饰器1.5 完整代码 2. 搭建客户端2.1 服务端网址2.2 发送请求2.3 完整代码 六、运行使用 总结 模型部署
一、模型部署的定义与目的
模型部署是指将大模型运行在专属的计算资源上使模型在独立的运行环境中高效、可靠地运行并为业务应用提供推理服务。其目标是将机器学习模型应用于实际业务中使最终用户或系统能够利用模型的输出从而发挥其作用。
二、模型部署的步骤
导出模型将训练好的模型导出为可部署的格式。部署模型将导出的模型部署到生产环境中通常是以一个服务或一个库的形式。测试模型在生产环境中对模型进行测试以确保其能够正常工作并且输出结果符合预期。监控模型在生产环境中对模型进行监控以便及时发现并解决问题。
三、模型部署的方式
模型的部署方式多种多样可以根据具体的应用场景和需求而定。以下是一些常见的模型部署方式
云端部署将模型部署到云端服务器上通过API接口提供服务实现远程调用。这种方式可以实现大规模的分布式计算和存储同时提供高可用性和可扩展性。在云端部署中需要考虑数据的安全性和隐私保护以及模型的并发处理能力。嵌入式设备部署将模型部署到嵌入式设备中如智能手机、智能音箱、智能家居等。这种方式可以实现本地化的智能化应用具有实时性、低延迟的优点。在嵌入式设备部署中需要考虑设备的计算能力、存储空间等限制以及模型的轻量化设计。边缘计算部署将模型部署到边缘设备上如路由器、摄像头等。这种方式可以实现本地数据的实时处理和智能化分析减少数据传输的延迟和成本。在边缘计算部署中需要考虑设备的计算能力和数据处理能力以及模型的实时性要求。移动端部署将模型部署到移动端设备上如智能手机、平板电脑等。这种方式可以实现移动设备的智能化应用提高用户体验。在移动端部署中需要考虑设备的功耗和性能限制以及模型的轻量化设计。FPGA和GPU部署FPGAField-Programmable Gate Array部署是将深度学习模型部署到FPGA芯片上实现高效的硬件加速提高模型的运行速度和效率。GPUGraphics Processing Unit部署是将深度学习模型部署到GPU上利用GPU的并行计算能力提高模型的运行速度和效率。这两种方式适用于对计算性能要求较高的场景如实时图像处理、视频分析等。
四、Flask框架 优点 轻量级Flask是一个轻量级的框架代码量少灵活性高适合快速开发小型应用程序。简单易学Flask的设计理念简洁明了入门相对容易对于初学者来说非常友好。可扩展性强Flask提供了丰富的扩展库开发者可以根据需求选择合适的扩展来扩展功能。社区支持良好Flask有一个庞大的社区提供了丰富的资源和支持。 缺点 功能相对较少相比于一些大型框架如DjangoFlask的功能相对较少需要依赖扩展库来实现一些功能。安全性考虑由于Flask的轻量级特性安全性方面的考虑需要开发者自行关注。不适合大型应用由于Flask的轻量级特性它可能不适合开发大型复杂的应用程序。
五、实现模型部署
1. 搭建服务端
1.1 初始化Flask app
-----初始化Flask app-----
app flask.Flask(__name__) # 创建一个Flask应用程序实例
model None
use_gpu False1.2 加载模型
本片使用自带的残差网络模型将网络模型输出转化为自己要求的输出类别数量
def load_model():global model# 加载resnet18网络model models.resnet18()num_ftrs model.fc.in_featuresmodel.fc nn.Sequential(nn.Linear(num_ftrs,102))checkpoint torch.load(best.pth)model.load_state_dict(checkpoint[state_dict])model.eval()# 是否使用gpuif use_gpu:model.cuda()1.3 数据预处理
将图像转换为模型输入所需的格式
def prepare_image(image,target_size):if image.mode !RGB:image image.convert(RGB)image transforms.Resize(target_size)(image)image transforms.ToTensor()(image)image transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])(image)image image[None]if use_gpu:image image.cuda()return torch.tensor(image)1.4 构建装饰器
app.route是一个装饰器用于将特定的URL路径绑定到一个视图函数上。当Web服务器接收到与该URL路径匹配且方法也匹配的HTTP请求时就会调用相应的视图函数来处理该请求。
app.route(/predict,methods [POST])
def predict():# 做一个标志刚开始无图像传入时为false传入图像时为truedata {success:False}if flask.request.method POST:if flask.request.files.get(image):image flask.request.files[image].read()image Image.open(io.BytesIO(image))image prepare_image(image,target_size(224,224))preds F.softmax(model(image),dim1)results torch.topk(preds.cpu().data,k3,dim1)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)data[success] Truereturn flask.jsonify(data)1.5 完整代码
import io
import flask
import torch
import jsonify
import torch.nn.functional as F
from PIL import Image
from torch import nn
from torchvision import transforms,models,datasets-----初始化Flask app-----
app flask.Flask(__name__) # 创建一个Flask应用程序实例model None
use_gpu False-----加载模型进来-----
def load_model():global model# 加载resnet18网络model models.resnet18()num_ftrs model.fc.in_featuresmodel.fc nn.Sequential(nn.Linear(num_ftrs,102))checkpoint torch.load(best.pth)model.load_state_dict(checkpoint[state_dict])model.eval()# 是否使用gpuif use_gpu:model.cuda()-----数据预处理-----
def prepare_image(image,target_size):if image.mode !RGB:image image.convert(RGB)image transforms.Resize(target_size)(image)image transforms.ToTensor()(image)image transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225])(image)image image[None]if use_gpu:image image.cuda()return torch.tensor(image)# app.route是一个装饰器用于将特定的URL路径绑定到一个视图函数上。
# 当Web服务器接收到与该URL路径匹配且方法也匹配的HTTP请求时就会调用相应的视图函数来处理该请求。
app.route(/predict,methods [POST])
def predict():# 做一个标志刚开始无图像传入时为false传入图像时为truedata {success:False}if flask.request.method POST:if flask.request.files.get(image):image flask.request.files[image].read()image Image.open(io.BytesIO(image))image prepare_image(image,target_size(224,224))preds F.softmax(model(image),dim1)results torch.topk(preds.cpu().data,k3,dim1)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)data[success] Truereturn flask.jsonify(data)if __name__ __main__:print(Loading PyTorch model and Flask starting server...)print(Please wait until server has fully started)load_model() #加载模型# 再开启服务app.run(port5012) # 端口2. 搭建客户端
2.1 服务端网址
用于连接服务端
-- 127.0.0.1:表示本地地址
-- 5012表示端口flask_url http://127.0.0.1:5012/predict2.2 发送请求
def predict_result(image_path):image open(image_path,rb).read()payload {image:image}r requests.post(flask_url,filespayload).json()# 向服务端发送一个POST请求并尝试将返回的JSON响应解析为一个Python字典if r[success]:for (i,result) in enumerate(r[predictions]):print({}.预测类别为{}:的概率{}.format(i1,result[label],result[probability]))else:print(Reqquest failed)2.3 完整代码
import requests
flask_url http://127.0.0.1:5012/predictdef predict_result(image_path):image open(image_path,rb).read()payload {image:image}r requests.post(flask_url,filespayload).json()# 向服务端发送一个POST请求并尝试将返回的JSON响应解析为一个Python字典if r[success]:for (i,result) in enumerate(r[predictions]):print({}.预测类别为{}:的概率{}.format(i1,result[label],result[probability]))else:print(Reqquest failed)if __name__ __main__:predict_result(./train/6/image_07162.jpg)六、运行使用
先行运行服务端使得服务端打开然后再运行客户端就可以连接上服务端并使用服务端函数进行操作。
总结
本篇介绍了如何进行模型部署将客户端与服务端连接在一起使客户可以借用服务端来操作。