torchserve安装、模型的部署与测试(基于docker)

news2024/11/25 9:25:24

问题描述

pytorch 一直很受大家的欢迎,但是作为一个深度模型,与外界复杂的业务需求交互其实是一件比较麻烦的事情,这里 torchserve 提供一个基于 TCP 的交互方法,算法模型部署后,用户可以通过提交 post 请求,将数据传送给 torchserve 并获得算法结果。

docker 环境

不管是 mac os 或者 windows 、linux ,均需要安装好 docker 环境,此步骤安装简单,全网教程也非常多,一般按照官方提供的安装脚本或软件即可正常安装。

docker 添加 torchserve

首先查看一下 docker 已经安装的镜像:

$ sudo docker images

因为我当前没有安装任何环境,输出内容为:
在这里插入图片描述
若未安装,则输入如下命令安装 torchserve。

$ sudo docker pull pytorch/torchserve:latest

这个过程可能需要消耗一些时间。

再次输入如下命令,可以看到:

$ sudo docker images

在这里插入图片描述

打包模型为 mar 文件

如果已经训练好 pytorch 的模型(.pt 文件),需要打包成为 .mar 文件后方能作为 torchserve 能调用的模型,即需要使用 torch-model-archiver 对已有的 .pt 文件打包,方法如下:

torch-model-archiver -f --model-name shape_cnn \
--version 1.0 \
--serialized-file 模型对应的pt文件.pt \
--handler 预处理与后处理的文件.py \
--export-path 导出mar文件的路径

启动 torchserve 提供服务

上个步骤中有提到导出mar文件的路径,这里注意需要保证如下命令中的第二行的路径为 mar 文件的所在路径,因为在模型的注册的时候将会在这个目录下寻找 mar 文件(也就是这里的 /home/yan/models)。

$ sudo docker run --rm -it -d -p 8280:8080 -p 8281:8081 -p 8282:8082 \
       --name torchserve -v /home/yan/models:/home/model-server/model-store \
       pytorch/torchserve:latest

启动后,将会通过 TCP 协议接收外界的一些模型相关操作。注意这里还没有注册模型,也就是还没法提供算法服务,只是启动了平台,算法需要在这个平台上注册才能提供服务。

注册模型

这里需要发送一个 POST 请求,注册模型,注意注册的模型需要确保启动 torchserve 时配置的文件夹中有对应的 .mar 文件。

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

测试

运行模型后,我们需要注意post请求中有个 url 参数,这个对应的是提供服务的地址,接下来的测试均需要访问这个路径。

$ curl --location --request POST 'http://localhost:8280/predictions/my_cnn' \
--header 'Content-Type: application/json' \
--data-raw '测试数据数据'

一般情况下会输出算法的结果,也就是前面提到打包时 --handler 预处理与后处理的文件.py 这个文件实现的内容。

总结

torchserve 是一个很好的工具,通过 tcp 协议完成算法模型与测试的交互,比如人脸识别模型可能需要训练很长时间才能完成,并且测试的时候可能在其他设备中,比如门禁、移动电话等等。

Smileyan
2023.02.28 19:58

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

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

相关文章

今天面了个腾讯拿25K出来的软件测试工程师,让我见识到了真正的天花板...

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

html实现浪漫的爱情日记(附源码)

文章目录1.设计来源1.1 主界面1.2 遇见1.3 相熟1.4 相知1.5 相念2.效果和源码2.1 动态效果2.2 源代码2.3 代码结构源码下载更多爱情表白源码作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/129264757 html实现浪漫的爱情…

Vue3 组合式函数,实现minxins

截至目前,组合式函数应该是在VUE 3应用程序中组织业务逻辑最佳的方法。它让我们可以把一些小块的通用逻辑进行抽离、复用,使我们的代码更易于编写、阅读和维护。 一. 什么是“组合式函数”? 根据官方文档说明,在 Vue 应用的概念中…

你还不会用CAD一键布置停车位?赶紧学起来!

在设计CAD建筑图的过程中,你还在一个一个地画停车位吗?那未免也太低效了吧!今天,小编用浩辰CAD建筑软件来教大家一键布置停车位,赶紧学起来吧! 浩辰CAD建筑软件是行业应用最广泛的创新型建筑设计专业软件&…

2023软件测试金三银四常见的软件测试面试题-【接口测试】

九、接口测试 9.1 接口测试怎么测 (jmeter版本) 首先开发会给我们一个接口文档,我们根据开发给的接口文档,进行测试点的分析,主要是考虑正常场景与异常场景,正常场景,条件的组合,…

uni-app实现可滑动日历

效果&#xff1a; uni-calendar.vue <template><view class"uni-calendar"><view v-if"!insert&&show" class"uni-calendar__mask" :class"{uni-calendar--mask-show:aniMaskShow}" click"clean"&…

项目难点——【4】分布式事务

项目难点——【4】分布式事务 1 概述 我们想知道什么是分布式事务首先了解下什么是本地事务。 平常我们在程序中通过spring去控制事务是利用数据库本身的事务特性来实现的&#xff0c;因此叫数据 库事务&#xff0c;由于应用主要靠关系数据库来控制事务&#xff0c;而数据库通…

顺序表(2)

目录 1、线性表 2、顺序表 1、概念及结构 2、接口实现 1、SeqList.h 2、SeqList.c 3、练习 例1、移除元素 例2、删除有序数组中的重复项 例3、合并两个有序数组 1、线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列&#xff…

运行你的第一个 Django APP

Django 版本&#xff1a;4.1.7 Python 版本&#xff1a;3.9.13 目录一、运行 Django二、创建 APP一、运行 Django 1、新建项目&#xff08;Project&#xff09; 项目类型为 Django&#xff0c;选择虚拟环境&#xff0c;点击 Create 后就会自动下载并安装 Django。 如果你是在 …

机器学习——支持向量机学习

支持向量机(Support Vector Machine, SVM)不仅具有坚实的统计学理论基础,还可以很好地应用于高维数据、避免维度灾难问题&#xff0c;已经成为一种倍受关注的机器学习分类技术。为了解释SVM的基本思想,我们首先介绍一下最大边缘超平面(Maximal Margin Hyperplane)给定训练数据集…

C++STL详解(三)——vector的介绍和使用

文章目录vector的介绍vector的使用vector的定义方式vector的空间增长问题reserve和resizevector的迭代器使用begin 和endrbegin和rendinsert 和erasefind函数元素访问vector迭代器失效问题1&#xff1a;inserse插入扩容时空间销毁造成野指针问题2&#xff1a;erase删除或者inse…

什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化

什么是“奥卡姆剃刀”&#xff0c;如何用“奥卡姆剃刀”解决复杂问题&#xff1f;复杂问题简单化问题什么是“奥卡姆剃刀”?如何使用“奥卡姆剃刀”解决问题复杂问题简单化“汉隆剃刀”小结问题 假设你在夜空中看到一颗闪闪发光的「不明飞行物」&#xff0c;你认为这会是什么呢…

优秀的IC/FPGA开源项目(六)-手语字母翻译器

《优秀的IC/FPGA开源项目》是新开的系列&#xff0c;旨在介绍单一项目&#xff0c;会比《优秀的 Verilog/FPGA开源项目》内容介绍更加详细&#xff0c;包括但不限于综合、上板测试等。两者相辅相成&#xff0c;互补互充~一种智能手套&#xff0c;可将手语字母翻译成带显示器的书…

【分享】订阅集简云畅捷通T+cloud连接器自动同步财务费用单至畅捷通

方案场景 伴随公司发展和数字化水平提高&#xff0c;大量的财务单据需要手动审核和录入&#xff0c;这些重复机械的操作占据大量人力&#xff0c;同时极容易出现数据出错或丢失等情况&#xff0c;严重影响着企业经营效率。 使用集简云提供服务的畅捷通TCloud钉钉连接器完成财…

UML 类关系(详解)——依赖、关联、聚合、组合、泛化

概述 在学习面向对象设计时&#xff0c;类关系涉及依赖、关联、聚合、组合和泛化&#xff08;继承&#xff09;这五种关系&#xff0c;耦合度依次递增。关于耦合度&#xff0c;可以简单地理解为当一个类发生变更时&#xff0c;对其他类造成的影响程度&#xff0c;影响越小则耦…

电子发票打印工具 v2023.02.27 免费的PDF发票打印软件

电子发票打印工具一款PDF发票打印辅助软件,因为单位有很多电子发票需要打印,每次打印都要用reader阅读器打开,选打印,选份数,选纸张,选纸盒,当然,有些发票有清单页的,以上步骤请再重复一遍。多张发票请重复N遍,忍了多年,终于决心开发一款方便用于打印PDF发票的辅助工…

源码numpy笔记

参考文章 numpy学习 numpy中的浅复制和深复制的详细用法 numpy中的np.where torch.gather() Numpy的核心数据结构&#xff0c;就叫做array就是数组&#xff0c;array对象可以是一维数组&#xff0c;也可以是多维数组 array本身的属性 shape&#xff1a;返回一个元组&#xf…

【数据库增删查改进阶版】保姆级教程带大家去学习更加复杂的sql语句,各种各样的约束以及各种各样的查询

前言&#xff1a; 大家好&#xff0c;我是良辰丫&#x1f345;&#x1f345;&#x1f345;&#xff0c;上一篇数据库我们一起学习了基础版本的增删查改&#xff0c;今天我们将接触更高级的增删查改&#xff0c;主要是学习一些约束条件&#xff0c;你们准备好了嘛&#xff1f;开…

华为OD机试题,用 Java 解【流水线】问题

最近更新的博客 华为OD机试题,用 Java 解【停车场车辆统计】问题华为OD机试题,用 Java 解【字符串变换最小字符串】问题华为OD机试题,用 Java 解【计算最大乘积】问题华为OD机试题,用 Java 解【DNA 序列】问题华为OD机试 - 组成最大数(Java) | 机试题算法思路 【2023】使…

LearnOpenGL-入门-8.坐标系统

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网&#xff1a;https://learnopengl-cn.github.io/ 文章目录坐标系统概述局部空间世界空…