003、torchserve 调用LSTM模型预测

前言

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

自己的模型,是用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 阶段,对数据解析出现问题,刚开始编写代码时,可以多打印出来看看,定位问题具体是什么。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nsq_ai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值