当前位置:网站首页>003、torchserve 调用LSTM模型预测

003、torchserve 调用LSTM模型预测

2022-06-13 12:05:00 nsq1101

前言

总体步骤介绍,执行整个流程,每个步骤可能会出现很多小问题

自己的模型,是用LSTM 模型进行预测,前12个数据预测下一个数据,

参考文章 https://blog.csdn.net/weixin_45492560/article/details/121316540

一、总体步骤

1、保存模型为.pt 或者.pth 格式

import torch
from ... import 

# 训练模型
model
model.fit()

# 转换模型
model.eval()

traced_script_module = torch.jit.script(model)

# 保存 TorchScript model
traced_script_module.save("xxx.pt")

2、转为.mar 格式
在serve/model-archiver 下输入

torch-model-archiver -f --model-name  xxx \   # mar格式的模型名称xxx
--version 1.0 \ # 版本
--serialized-file xxx.pt \   # pt文件
--handler handlers/xxx_handler.py \    # 模型输入前数据预处理,输出结果处理,展示处理等功能,这块很重要
--export-path targets/  # 输出mar 文件的位置 ,一般是serve/model-archiver/model-store 下

3、docker 启动
在serve/model-archiver 下输入

docker run --rm -it -p 8080:8080 -p 8081:8081 --name mar -v $(pwd)/model-store:/home/model-server/model-store -v $(pwd)/examples:/home/model-server/examples pytorch/torchserve:latest

-v 目录映射

4、注册一个模型

curl --location --request POST 'http://localhost:8081/models' \
--header 'Content-Type: application/json' \
--data-raw '{
"url": "xxx.mar",
"batch_size": 64,
"initial_workers": 1
}'

注册后, curl http://127.0.0.1:8081/models ,查询是否注册成功

5、预测数据

curl --location --request POST 'http://localhost:8080/predictions/xxx  -T   # 要预测的数据

展示预测数据

二、坑指南

保存模型这块基本不会出错。

1、遇到 OSError: [Errno 13] Permission denied:

ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: ‘/home/venv/lib/python3.8/site-packages/threadpoolctl.py’

Check the permissions.

应该是遇到了不能安装的包

解决方法:

1、 加个–requirements-file ,加上依赖 ,参考链接 https://pip.pypa.io/en/stable/user_guide/#requirements-files

2、根据这个包信息,不调用,自己写代码

2、第二步中,handle文件编写。至关重要

2.1 preprocess ,数据预处理

首先数据data 是list格式,需要获取data、body数据信息,我采用的是csv 文件

def preprocess(self, data):
    # processed = []
    print("data原数据",data)
    for row in data:
        print("row:",row)
        values_ori = row.get("data") or row.get("body") # 字节数组
        values_str = values_ori.decode('utf-8')  # str
        values_str_split = values_str.split("\r\n")  # split
        values_str_split.pop() # 删除最后一个空字符串
        values = list(map(float, values_str_split))
        print("values数据:",values)
        print("values数据类型",type(values))
        tensor = super().preprocess(values)  # 转为Tensor 类型
        print("tensor 数据:",tensor)

        # 归一化处理
        max_values = torch.max(tensor)
        min_values = torch.min(tensor)
        normalized_values = (tensor - min_values) / \
                            (max_values - min_values + EPSILON)
        # 处理后,数据格式变换,输入到模型中
        expanded_values = torch.unsqueeze(normalized_values, dim=0).t()
        print("expanded_values全部数据:", expanded_values)
        print("expanded_valuesshape:", (np.array(expanded_values)).shape)
        # processed.append(expanded_values) # 获取数据
        return expanded_values

2.2 postprocess,预测后的数据处理

def postprocess(self, data):

    pred = []
    with torch.no_grad():
        print("data:",data)
        print("data type:",type(data))
        # tensor 转为 numpy
        data_num = data.numpy()
        print("data_num:", data_num)
        print("data_num type:", type(data_num))

        data_num = data_num * 100
        pred.append(data_num.tolist())
    print("pred:",pred)

    return pred # 转为 list

3、遇到TypeError,多少是在preprocess 阶段,对数据解析出现问题,刚开始编写代码时,可以多打印出来看看,定位问题具体是什么。

原网站

版权声明
本文为[nsq1101]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_45063703/article/details/125146289