torchserve部署模型 安装使用及踩坑记录

官网代码链接:

安装torchveser

1.安装合适的jdk,特别重要!!

yum install openjdk-11-jdk

踩坑记录:(1)jdk版本不对。

                  (2)安装正确的jdk后发现还是报一样的错误,这个时候是因为jdk的路径还是系统指定的路径,并不是自己新下载的jdk。解决方案如下方代码行所示。切换后执行java -version测试是否切换成功。

update-alternatives --config java

 2.其他需要安装的包

captum==0.5.0

transformer==4.6.0

torch==1.8.0

torch-model-archiver==0.6.0

torch-workflow-archiver==0.2.4

torchserve==0.6.0

torchvision=0.9.0

nvgpu==0.9.0

scipy==1.9.1

pynvml==8.0.4

torch serve部署

1.文件准备:serve/examples/Huggingface_Transformers at master · pytorch/serve · GitHub

配置handle.py文件

import logging
from abc import ABC
from pynvml.smi import nvidia_smi

import numpy as np
import torch
import transformers
fromharvesttext import HarvestText
from sentence_transformers import SentenceTransformer
from ts.torch_handler.base_handler import BaseHandler

logger = logging.getLogger(__name__)

class t_hander(BaseHandler,ABC):
    def __init__(self):
        super(TransformersSeqClassifierHandler,self).__init__()
        self.initialized=False
    def initialize(self,ctx):
        # 1. 获取模型地址
        self.manifest = ctx.manifest
        properties = ctx.system_properties
        model_dir = properties.get("model_dir")
        # 2. 导入模型
        self.model = SentenceTransformer(model_dir,device="cpu")
        self.model.eval()
        logger.info("model from path %s loaded successfully", model_dir)
        # 3. 启动服务
        self.initialized=True
    def preprocess(self,requests):
        ht = HarvestText()
        # 1. 获取数据
        preprocessed_data = requests[0].get("body").get("data")
        # 2.清洗数据
        input_batch = []
        for i in preprocessed_data:
            input_batch.append(ht.clean_text(i,remove_url=True))
        return input_batch
    def inference(self,input_batch):
        #1. 模型编码数据。输出embedding list
        inference_output = self.model.encode(input_batch)
        #2. 将tensor格式转为numpy中的格式
        inference_output = [np.array(embeds).tolist for embeds in inference_output]
        return inference_output
    def postprocess(self,inference_output):
        return [inference_output]


2.模型准备:如pytorch_model.bin等,个人建议将生成的文件全部捎带上。在这里,我是用的sentencetransformer,链接:uer/sbert-base-chinese-nli at main

然后执行以下命令,启动服务:

mkdir Transformer_model
mv pytorch_model.bin vocab.txt config.json Transformer_model/
torch-model-archiver --model-name BERTSeqClassification --version 1.0 --serialized-file Transformer_model/pytorch_model.bin --handler ./Transformer_handler_generalized.py --extra-files "Transformer_model/config.json,./setup_config.json,./Seq_classification_artifacts/index_to_name.json"
mkdir model_store
mv BERTSeqClassification.mar model_store/
torchserve --start --model-store model_store --models my_tc=BERTSeqClassification.mar --ncs

3.使用Inference API 进行推理,默认端口8080

curl -X POST http://127.0.0.1:8080/predictions/my_tc -T data

import requests
res=requests.post("http://127.0.0.1:8080/predictions/my_tc",json=data)

4.停止torchserve,可以使用torchserve --stop

5. 配置Torchserve 提供远程服务(这部分参考torchserve使用教程(踩坑记录))

 为 TorchServe 创建一个配置文件,取名为 config.properties(默认名称)。
此文件定义要加载的模型,并设置远程服务,在这里将该服务器与所有公有 IP 地址绑定,但如有需要,可以将其限制为特定地址。我需要确保在安全组中打开端口 8080 和 8081

model_store=model_store
load_models=densenet161.mar
inference_address=http://0.0.0.0:8080
management_address=http://0.0.0.0:8081

现在可以在相同的目录中启动 TorchServe 了,不再需要传递任何命令行参数。

torchserve --start --ts-config config.properties

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值