深度学习笔记(4)模型部署和实用

深度学习笔记(4)模型部署和实用

一、环境部署

1. 模型加载和预处理

1,flask:
安装:
conda activate 环境名
pip install flask

2.导入常用的库

import io# 二进制数据处理
import json# json数据处理
# 安装所需工具包
import flask# 服务框架
import torch
import torch# pytorch
import torch.nn.functional as F#这行代码的作用是导入 PyTorch 的神经网络(nn)模块中的功能性API,并将其重命名为 F。torch.nn.functional 模块包含了许多在构建和训练神经网络时常用的函数,这些函数通常是无状态的,也就是说它们不需要存储任何状态(比如模型参数)。因此,这些函数可以被用来构建更加复杂的网络结构,比如自定义的损失函数、激活函数等。
from PIL import Image# 图像处理
from torch import nn
from torchvision import transforms as T# 图像处理
from torchvision.models import resnet50# resnet50模型
from torch.autograd import Variable #自动求导

3.初始化flask

# 初始化Flask app
app = flask.Flask(__name__)#初始化一个Flask对象
model = None#模型初始化
use_gpu = True#是否使用gpu,这里默认使用

# 返回结果用的
with open('imagenet_class.txt', 'r') as f:#打开文件,读取文件,举例的文件这里面存的是类别的标签,id和label的对应关系
    idx2label = eval(f.read()) #读取文件内容,转换为字典
    

注意这里遇到两个坑with open('imagenet_class.txt', 'r') as f: 这句代码在 我的系统上会报错FileNotFoundError: [Errno 2] No such file or directory: 'imagenet_class.txt'
于是我改成了绝对路径H:\develop\NLP\Modelinstall\pytorhModel\deploy-pytorch-model-master\imagenet_class.txt 报错SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 10-11: malformed \N character escape这个错误通常发生在 Python 中处理文件路径时,特别是在字符串字面量中使用了反斜杠(\)字符。在 Python 字符串中,反斜杠用作转义字符,这可能会导致问题,尤其是在 Windows 文件路径中。于是最后我改成了with open('H:/develop/NLP/Modelinstall/pytorhModel/deploy-pytorch-model-master/imagenet_class.txt', 'r') as f:解决。

# 初始化Flask app
app = flask.Flask(__name__)#初始化一个Flask对象
model = None#模型初始化
use_gpu = True#是否使用gpu,这里默认使用

4.加载模型

(随便找个模型试验 ) resnet50 是预训练模型 这里加载一下。

def load_model():
    """Load the pre-trained model, you can use your model just as easily.

    """
    global model#全局变量,因为后面也要用
    model = resnet50(pretrained=True)#加载预训练模型 pretrained=True就是所有权重的参数都下载下来。
    model.eval()#.eval就是一个测试的模型
    if use_gpu:
        model.cuda()#如果用gpu就用cuda执行

如果下载速度慢的话放在C:\Users\用户名.cache\torch\hub\checkpoints里就可以了

5.数据预处理

这个不同的模型各不相同。

6.开启服务

@app.route("/predict", methods=["POST"])

使用 Flask 框架定义的一个路由。这个路由对应于一个名为 predict 的端点,它只接受 HTTP POST 请求。一旦应用运行,你就可以向 http://localhost:5000/predict 发送 POST 请求来测试这个端点。

def predict():
    # Initialize the data dictionary that will be returned from the view.
    data = {"success": False}

我们调用 predict 函数,并将结果存储在 response_data 变量中。如果预测成功,更新 ‘data’ 字典 data[“success”] = True

if flask.request.method == 'POST':#如果是post请求
    if flask.request.files.get("image"):#如果请求中有image文件
        # Read the image in PIL format
        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), dim=1)#如果之前处理没有softmax操作在这里做下softmax
            results = torch.topk(preds.cpu().data, k=3, dim=1)#取前几个概率,这里k=3 就是前三个
            results = (results[0].cpu().numpy(), results[1].cpu().numpy())
data['predictions'] = list()

            # 遍历结果,并将它们添加到返回的预测列表中。
               for prob, label in zip(results[0][0], results[1][0]):
                label_name = idx2label[label]#根据label找到对应的类别
data["success"] = True#标签改成true
 return flask.jsonify(data)#返回json格式的数据

二、怎么使用

在这里插入图片描述

没做前端,用命令行模式展示

进入环境,cd到你代码所在路径,我是:
H:\develop\NLP\Modelinstall\pytorhModel\deploy-pytorch-model-master
先进入环境conda activate NLP
输入

H:
 CD develop\NLP\Modelinstall\pytorhModel\deploy-pytorch-model-master
 

执行下服务

python run_pytorch_server.py

在这里插入图片描述

PyTorch_REST_API_URL = 'http://127.0.0.1:5000/predict'
def predict_result(image_path):
    # Initialize image path
    image = open(image_path, 'rb').read()#读取图片
    payload = {'image': image}#图片数据
r = requests.post(PyTorch_REST_API_URL, files=payload).json()#发送post请求
    if r['success']:#如果请求成功
        for (i, result) in enumerate(r['predictions']):
            print('{}. {}: {:.4f}'.format(i + 1, result['label'],
                                          result['probability']))#打印结果
    # Otherwise, the request failed.
    else:
        print('Request failed')

然后配置形参,输入图片的路径
在这里插入图片描述
结果如下
在这里插入图片描述
在运行自己的模型的时候,有以下几个地方要改
1.你自己的模型,你要加进来

def load_model():
    """Load the pre-trained model, you can use your model just as easily.

    """
    global model#全局变量,因为后面也要用
    model = resnet50(pretrained=True)#加载预训练模型 pretrained=True就是所有权重的参数都下载下来。
    model.eval()#.eval就是一个测试的模型
    if use_gpu:
        model.cuda()#如果用gpu就用cuda执行

2.预处理
3.得到的结果

三、docker

1.安装docker

  去docker官网下载安装,下载后的docker 是英文版
https://github.com/asxez/DockerDesktop-CN下载汉化包,安装汉化包步骤
  1.关闭Docker Desktop
  2.在Docker安装目录(Windows下默认为C:\Program Files\Docker\Docker\frontend\resources)找到app.asar文件并将其备份,防止出现意外。
  3.将从本仓库下载的asar文件改名为app.asar后替换原文件
安装后在cmd下输入docker version出现版本信息就证明安装成功了
docker info可以查看信息
在这里插入图片描述

2.docker hub

默认是官网,但是会非常慢。
所以一般都是配置国内源,阿里云镜像
登陆https://www.aliyun.com/注册开发账号
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 镜像配置 镜像配置
点镜像加速器并复制地址
打开docker desktop ->设置->docker引擎,代码修改为

{
  "registry-mirrors": [
    "https://你的网址",
    "https://mirror.ccs.tencentyun.com"
  ]
}


重启docker

注意阿里云可能抽风,不行的话就只能梯子了、

3 docker命令和实际pull

docker images 查看镜像
在这里插入图片描述
想用什么镜像去docker hub搜索,比如pytorch
在这里插入图片描述

也可以利用github来拉取镜像
阿里云——>容器镜像服务–>个人实实例—>创建命名空间
在txt上先编辑这几个ALIYUN_NAME_SPACE 你命名空间的名字
ALIYUN_REGISTRY_USER 访问凭证里$ sudo docker login --username=后面的一串
ALIYUN_REGISTRY 访问凭证里你用户名后面那一长串
ALIYUN_REGISTRY_PASSWORD 那设置的密码
然后去github fork https://github.com/hanliu2003/docker_image_pusher
然后选Settings——>Actions secrets and variables 添加上面四个变量
然后去code那里
docker_image_pusher
/images.txt
添加自己想用的镜像

然后run这个action后去自己的阿里云镜像仓库看,镜像就在里面了
然后进入这个镜像,从Registry中拉取镜像复制命令,然后去查看版本号,就可以用命令拉取镜像了

拉取的镜像到本地后可以改名格式是docker tag [老镜像名称]:[老镜像版本][新镜像名称]:[新镜像版本]
比如我命名的是pytorch 那么在cmd里运行docker run -it pytorch
docker run --gpus all -it --rm -p 8888:8888 pytorch /bin/bash 就是指定端口
pip install jupyter 安装朱庇特
jupyter notebook --ip=0.0.0.0 --allow-root 运行

将自己的docker上传到云

docker login --username=aliyun5049531880 crpi-n6kr3hc50k43ri5o.cn-chengdu.personal.cr.aliyuncs.com
输入密码
然后输入docker images查看自己的id

docker tag [ID] crpi-n6kr3hc50k43ri5o.cn-chengdu.personal.cr.aliyuncs.com/hl_image/hl_pytorch:[镜像版本号]比如我的版本是1.0就是
docker tag 11691e035a36 crpi-n6kr3hc50k43ri5o.cn-chengdu.personal.cr.aliyuncs.com/hl_image/hl_pytorch:1.0
docker push crpi-n6kr3hc50k43ri5o.cn-chengdu.personal.cr.aliyuncs.com/hl_image/hl_pytorch:1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值