当前位置: 首页 > news >正文

深度学习系列70:模型部署torchserve

1. 流程说明

ts文件夹下,
从launcher.py进入,执行jar文件。
入口为model_server.py的start()函数。内容包含:

  1. 读取args,创建pid文件
    在这里插入图片描述
  2. 找到java,启动model-server.jar程序,同时读取log-config文件,TEMP文件夹地址,TS_CONFIG_FILE文件
  3. 根据cpu核数、gpu个数,启动多进程。每个进程有一个socket_name和socket_type,执行model_service_worker.py,创建TorchModelServiceWorker类,并执行run_server方法。run_server不断执行handle_connection方法,handle_connection不断执行predict(cmd为I时)或者load_model(cmd为L时)任务。
  4. load_model可以返回service对象,而service可以执行predict函数。如果handler中间包含冒号,则用后面的function作为_entry_point,否则默认用handle函数作为_entry_point。
  5. service的定义如下。其中manifest是一个字典,记录在MAR包里面的MAR_INF/MANIFEST.json中,包含modelName,serializedFile,handler,modelVersion等信息。这些信息也是modelArchiver打包模型时需要的内容。
class Service(object):"""Wrapper for custom entry_point"""def __init__(self,model_name,model_dir,manifest,entry_point,gpu,batch_size,limit_max_image_pixels=True,metrics_cache=None,):
  1. 接下来看一下predict函数。首先是调用retrieve_data_for_inference方法获取input_batch,其格式为{parameter["name"]: parameter["value"]}。然后是调用ret = self._entry_point(input_batch, self.context),这里的_entry_point就是我们自己定义的handler.handle方法。默认的handle方法执行三步:
data_preprocess = self.preprocess(data)
output = self.inference(data_preprocess)
output = self.postprocess(output)

2. 运行

  1. 首先安装java,然后pip install torchserve torch-model-archiver
  2. 接着将模型和参数打包:torch-model-archiver --model-name test --version 1.0 --serialized-file test.torchscript.pt --handler handler_test.py --export-path model_store
  3. 启动服务torchserve --start --ncs --model-store model_store --models test.mar --disable-token-auth --ts-config config.properties
  4. 停止服务torchserve --stop
  5. 调用:
res = requests.post("http://127.0.0.1:8080/predictions/test",files = {"data":data})

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python 裁剪图片
  • 《梁宁产品思维30讲》是一门深入剖析产品思维、产品认知框架的课程
  • Windows11和Win10如何彻底永久关闭Windows defender
  • MySQL可重复读的隔离机制下是否彻底解决了幻读?
  • 云服务部署项目(Spring + Vue)
  • vue-router小结
  • Python3网络爬虫开发实战(1)爬虫基础
  • Vue.js 与 Ajax(vue-resource)的集成应用
  • Vue 项目部署后首页白屏问题排查与解决
  • WEBKIT 通过JavaScript 调用本地,硬件未来之窗OS硬件APP
  • 03、爬虫数据解析-bs4解析/xpath解析
  • 套接字选项、广播和组播
  • 【elasticsearch实现优先展示连词并按某个字段折叠显示最新一条】
  • 代码片段管理的终极助手:MassCode
  • 参数化的艺术:Postman中API测试用例的动态构建
  • Android组件 - 收藏集 - 掘金
  • Apache Spark Streaming 使用实例
  • C语言笔记(第一章:C语言编程)
  • PhantomJS 安装
  • Python_网络编程
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 从零开始的无人驾驶 1
  • 好的网址,关于.net 4.0 ,vs 2010
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 每天一个设计模式之命令模式
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何进阶一名有竞争力的程序员?
  • 如何实现 font-size 的响应式
  • 实战|智能家居行业移动应用性能分析
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 用jQuery怎么做到前后端分离
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​iOS安全加固方法及实现
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #QT(智能家居界面-界面切换)
  • (4)(4.6) Triducer
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (八)Flask之app.route装饰器函数的参数
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十六)一篇文章学会Java的常用API
  • (转)memcache、redis缓存
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net中间语言BeforeFieldInit
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [APUE]进程关系(下)
  • [C++][STL源码剖析] 详解AVL树的实现
  • [CLickhouse] 学习小计
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]