【Pytorch基础教程38】torchserve模型部署和推理

news2025/1/21 18:40:33

note

  • torch-model-archiver打包模型;利用torchserve加载前面打包的模型,并以grpc和http等接口往外提供推理服务
  • 启动模型的api服务、curl命令发送http post请求,请求模型服务API;流程和TensorFlow serving流程大同小异

文章目录

  • note
  • 一、torchserve和archiver模块
  • 二、Speech2Text Wav2Vec2模型部署
    • 2.1 准备模型和自定义handler
    • 2.2 打包模型和启动模型api服务
    • 2.3 相关参数记录
  • Reference

一、torchserve和archiver模块

在这里插入图片描述

  • 模型部署需要用到两个模块
  • torchserve用来模型部署
  • torch-model-archiver打包模型
pip:
    - torch-workflow-archiver
    - torch-model-archiver 
    - torchserve 

二、Speech2Text Wav2Vec2模型部署

2.1 准备模型和自定义handler

  • Wav2Vec2语音转文本的模型。这里我们为了简化流程从huggingface下载对应的模型,进行本地化利用torchserve部署
  • hander将原始data进行转为模型输入所需的格式;nlp中很多任务可以直接用torchtext的text_classifier
# 1. 导入huggingface模型
from transformers import AutoModelForCTC, AutoProcessor
import os

modelname = "facebook/wav2vec2-base-960h"
model = AutoModelForCTC.from_pretrained(modelname)
processor = AutoProcessor.from_pretrained(modelname)

modelpath = "model"
os.makedirs(modelpath, exist_ok=True)
model.save_pretrained(modelpath)
processor.save_pretrained(modelpath)

# 2. 自定义handler
import torch
import torchaudio
from transformers import AutoProcessor, AutoModelForCTC
import io


class Wav2VecHandler(object):
    def __init__(self):
        self._context = None
        self.initialized = False
        self.model = None
        self.processor = None
        self.device = None
        # Sampling rate for Wav2Vec model must be 16k
        self.expected_sampling_rate = 16_000

    def initialize(self, context):
        """Initialize properties and load model"""
        self._context = context
        self.initialized = True
        properties = context.system_properties

        # See https://pytorch.org/serve/custom_service.html#handling-model-execution-on-multiple-gpus
        self.device = torch.device("cuda:" + str(properties.get("gpu_id")) if torch.cuda.is_available() else "cpu")

        model_dir = properties.get("model_dir")
        self.processor = AutoProcessor.from_pretrained(model_dir)
        self.model = AutoModelForCTC.from_pretrained(model_dir)

    def handle(self, data, context):
        """Transform input to tensor, resample, run model and return transcribed text."""
        input = data[0].get("data")
        if input is None:
            input = data[0].get("body")
        
        # torchaudio.load accepts file like object, here `input` is bytes
        model_input, sample_rate = torchaudio.load(io.BytesIO(input), format="WAV")
        
        # Ensure sampling rate is the same as the trained model
        if sample_rate != self.expected_sampling_rate:
            model_input = torchaudio.functional.resample(model_input, sample_rate, self.expected_sampling_rate)
        
        model_input = self.processor(model_input, sampling_rate = self.expected_sampling_rate, return_tensors="pt").input_values[0]
        logits = self.model(model_input)[0]
        pred_ids = torch.argmax(logits, axis=-1)[0]
        output = self.processor.decode(pred_ids)

        return [output]

2.2 打包模型和启动模型api服务

  • 可以直接在linux环境的terminal进行如下相关操作(打包模型、启动模型的api服务、curl命令发送http post请求,请求模型服务API)
  • curl命令发送http post请求,请求模型服务API,如果遇到报错java.lang.NoSuchMethodError: java.nio.file.Files.readString(Ljava/nio/file/Path;)Ljava/lang/String;则应该是JRE没有安装或者需要升级:sudo apt install default-jre即可。
  • curl那坨后正常会返回I HAD THAT CURIOSITY BESIDE ME AT THIS MOMENT%,测试数据是一段简单的sample.wav语音文件
  • Waveform Audio File Format(WAVE,又或者是因为WAV后缀而被大众所知的),它采用RIFF(Resource Interchange File Format)文件格式结构。通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频
# 打包部署模型文件, 把model部署到torchserve 
torch-model-archiver --model-name Wav2Vec2 --version 1.0 --serialized-file model/pytorch_model.bin --handler ./handler.py --extra-files "model/config.json,model/special_tokens_map.json,model/tokenizer_config.json,model/vocab.json,model/preprocessor_config.json" -f
mv Wav2Vec2.mar model_store

# 启动model服务, 加载前面打包的model, 并以grpc和http接口向外提供推理服务
torchserve --start --model-store model_store --models Wav2Vec2=Wav2Vec2.mar --ncs

# Once the server is running, let's try it with:
curl -X POST http://127.0.0.1:8080/predictions/Wav2Vec2 --data-binary '@./sample.wav' -H "Content-Type: audio/basic"

# 暂停torchserve serving
torchserve --stop

2.3 相关参数记录

torch-model-archiver:用来打包模型

  • model-name: 设定部署的模型名称
  • version: 设定部署的模型版本
  • model-file: 定义模型结构的python文件
  • serialized-file: 设定训练模型保存的pth文件
  • export-path: 设定打包好的模型保存路径
  • extra-files: 设定额外的文件,如label跟id映射的定义文件等,用于一并打包到模型压缩包中
  • handler: 为一个处理器,用来指定模型推理预测前后的数据的处理问题;如 nlp模型中的文本分词和转换为id的步骤;以及分类问题中,模型预测结果映射为具体的label等数据处理功能
torch-model-archiver:用来打包模型
usage: torch-model-archiver [-h] --model-name MODEL_NAME
                            [--serialized-file SERIALIZED_FILE]
                            [--model-file MODEL_FILE] --handler HANDLER
                            [--extra-files EXTRA_FILES]
                            [--runtime {python,python2,python3}]
                            [--export-path EXPORT_PATH]
                            [--archive-format {tgz,no-archive,default}] [-f]
                            -v VERSION [-r REQUIREMENTS_FILE]

torchserve:该组件用来加载前面打包的模型,并以grpc和http等接口往外提供推理服务

  • start 和 stop: 即推理服务的启动和停止;
  • model-store: 打包模型存储的路径;
  • models: 设定模型名称和模型文件名,如:MODEL_NAME=MODEL_PATH2 格式;
  • no-config-snapshots: 即 --ncs,用来设置防止服务器存储配置快照文件;

Reference

[1] https://github.com/pytorch/serve
[2] Torch Model archiver for TorchServe
[3] https://github.com/pytorch/serve/tree/master/examples/speech2text_wav2vec2
[4] https://huggingface.co/docs/transformers/model_doc/wav2vec2
[5] https://github.com/pytorch/serve/tree/master/model-archiver
[6] pytorch 模型部署.nlper
[7] cURL - 学习/实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能之配置环境教程二:在Anaconda中创建虚拟环境并在VsCode中使用

人工智能之配置环境教程二:在Anaconda中创建虚拟环境安装pytorch并在VsCode中使用虚拟环境 作者介绍一. 在Anaconda中创建虚拟环境1. 进入本地终端1.1 键盘使用**winR**快捷键1.2 输入**cmd**点击**确定**进入windows命令行终端 2. 安装镜像源2.1 添加镜像源 3. 创建…

PowerShell install 一键部署http+用户名密码登录实现文件系统

Apache 前言 Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等…

BUUCTF [第五空间2019 决赛]PWN5

小白垃圾做题笔记而已,不建议阅读。 简书上的大佬有三种解题思路,而我刚开始一种也不会,看了题解后才勉强有了两种。 1.第一种算绕过if吧。 更改dword_804C044中的内容,第二次输出相同的内容,从而绕过if 脚本如下&…

Linux-安装gcc和g++报错降级的解决方法

一、简介 通过sudo apt-get install gcc指令安装g报错。 下列软件包有未满足的依赖关系:gcc : 依赖: gcc-7 (> 7.3.0-12~) 但是它将不会被安装推荐: libc6-dev 但是它将不会被安装 或libc-dev又按照网上的解决办法 ,还是报错。 apt-get update apt-g…

ESET NOD32 互联网安全软件和防毒软件 -简单,可靠的防护。

安全防范病毒和间谍软件,银行和网上购物更安全, 网络摄像头和家用路由器使用更安全,阻止黑客访问您的电脑, 让您的孩子网络安全;产品兑换码仅支持中国ip地址兑换,兑换后可全球通用。 简单,可靠的防护 防范黑客&#x…

【C++11】新的类功能、可变参数模板

C11——新的类功能、可变参数模板 文章目录 C11——新的类功能、可变参数模板一、新的类功能1.测试代码2.默认成员函数3.类成员变量初始化4.强制生成默认函数的关键字default5.禁止生成默认函数的关键字delete6.继承和多态中的final与override关键字 二、可变参数模板1.可变参数…

第64章 树型结构数据的前端渲染渲染显示示例

1 \src\views\TreeTestView.vue <template> <div class"wrap"> <!--注意&#xff1a;1、“回到顶部”组件及其回滚内容都必须包含到同1个div容器中。--> <!-- 2、div容器中必须有1个唯1性的样式类&#xff08;例如&#xff1a;wrap&#xff09…

【Kubenetes进阶】Helm3保姆级安装与Chart使用

之前在Centos 7_64位上实现了用kubespray-2.15.0完成kubenetes的部署&#xff0c;对于kubenetes&#xff0c;Helm无疑是一个良好的命令行下的客户端工具。Helm主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。 需要对helm加深了…

安全狗云安全资源池为运营商行业云降本增效

随着政府大力促进数字化转型&#xff0c;网络安全作为数字化建设的安全基石&#xff0c;已然成为保障数字化过程中稳定运行的重要因素。 一 严峻挑战下用户亟需安全托管专业服务 1) 云计算虚拟化的存储、部署及运作模式&#xff0c;数据所有权与管理权分离等特点&#xff0c…

【iOS】—— KVO再学习

KVO 文章目录 KVOKVO概念KVO使用步骤注册KVO监听KVO监听实现移除KVO监听 KVO基本用法KVO传值禁止KVO的方法使用注意事项 KVO原理GSKVOInfoGSKVOPathInfoGSKVOObservation为什么要重写class方法呢&#xff1f; GSKVOReplacementGSKVOBaseGSKVOBase小结 源码实现移除观察者总结 K…

unity Shader实现半透明阴影

在shader中&#xff0c;要对移动端的兼容&#xff0c;还不想实现两套分开兼容的话&#xff0c; #pragma exclude_renderers gles gles3 glcore #pragma target 4.5这两句话一定要改掉&#xff0c;第一行代码直接剔除了gles的渲染&#xff0c;而恰恰大部分移动端都是用的gles&a…

第十七章 访问者模式

文章目录 前言一、访问者模式基本介绍二、访问者模式应用实例完整代码评测抽象类 Action成功评价 Success失败评价评价人抽象类男性女性数据结构&#xff0c;管理很多人评价Clint 测试添加 wait 选票clint 测试 三、访问者模式的注意事项和细节 前言 一、访问者模式基本介绍 二…

Vue2 脚手架下载及配置淘宝镜像--和ieda的配置和打开

目录 Vue2 脚手架下载及配置淘宝镜像 为什么需要 Vue Cli 脚手架? 环境配置&#xff0c;搭建项目 1. 搭建 Vue2 脚手架工程&#xff0c; 2.查看 3.冲突 4. 下载 5. 安装 6. 验证 7. 先删除以前的 cli 版本<不论是之前未下载或没有下载> 8. 安装淘宝镜像-cnpm…

20230427配置cv1826的buildroot在串口免登录的方法二

20230427配置cv1826的buildroot在串口免登录的方法二 2023/4/27 16:46 进度&#xff1a;可以拿掉密码&#xff0c;但是无法拿掉用户名&#xff01; 1、 Z:\buildroot1\buildroot\configs\cvitek_cv182x_defconfig BR2_TOOLCHAIN_EXTERNAL_GCC_6y BR2_TOOL…

编译一个魔兽世界开源服务端Windows需要安装什么环境

编译一个魔兽世界开源服务端Windows需要安装什么环境 大家好我是艾西&#xff0c;去年十月份左右wy和bx发布了在停服的公告。当时不少小伙伴都在担心如果停服了怎么办&#xff0c;魔兽这游戏伴随着我们渡过了太多的时光。但已经发生的事情我们只能顺其自然的等待GF的消息就好了…

Selenium基础篇之键盘操作(一)

文章目录 前言一、常用方法(上)二、小剧场2.1场景2.2代码2.2.1引入库2.2.2启动浏览器实例2.2.3访问C站首页2.2.4窗口最大化2.2.5获取输入框元素2.2.6向输入框输入文字2.2.7使用退格键删除最后一个字符2.2.8全选输入框文字2.2.9剪切输入框文字2.2.10粘贴文字到输入框2.2.11回车查…

经验分享 | 科研行业如何搭建RASP防护体系?

多年来&#xff0c;开源网安长期服务金融、政府、科技等大型企业&#xff0c;针对不同实际应用场景&#xff0c;打造出了成熟落地的解决方案&#xff0c;提高并完善了企业安全防护技术与管理体系。今天&#xff0c;我们就来了解开源网安是如何为科研行业搭建RASP防护体系的。 科…

“ ES6+ —— 让你的JavaScript代码从平凡到精彩 “

前期回顾 【提高代码可读性】—— 手握多个代码优化技巧、细数哪些惊艳一时的策略_0.活在风浪里的博客-CSDN博客代码优化对象策略https://blog.csdn.net/m0_57904695/article/details/128318224?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%…

GQCNN

Berkeley AUTOLAB’s GQCNN Package — GQCNN 1.1.0 documentation (berkeleyautomation.github.io) (3条消息) 机器人抓取&#xff08;六&#xff09;—— 抓取点检测&#xff08;抓取位姿估计&#xff09; gqcnn代码测试与解读_zxxRobot的博客-CSDN博客 GQ-CNN模型对生成数据…

C#,OpenCv开发指南(02)——OpenCvSharp编程入门与矩阵Mat的基础知识

在 Visual Studio 中很方便搭建与使用 OpenCV 的 C# 的开发环境&#xff0c;几乎不用键盘输入。 使用 C# 开发 OpenCV 可以直接成为工业软件产品&#xff0c;而不是实验室程序。世界上几乎所有的视频厂家都提供 C# OpenCV 开发接口。 C#&#xff0c;人工智能&#xff0c;深度学…