TorchServe 详解:5 步将模型部署到生产环境

news2024/12/27 11:15:30

内容导读

TorchServe 自 2020 年 4 月推出至今,经历了 2 年多的发展,变得愈发成熟和稳定,本文将对 TorchServe 进行全面介绍。

TorchServe 是 PyTorch 中将模型部署到生产环境的首选解决方案。它是一个性能良好且可扩展的工具,用 HTTP 或 HTTPS API 封装模型。

TorchServe 的前端是用 Java 实现的,可以处理多种任务,包括为部署模型分配 workers、负责客户端和服务器之间通信等。其 Python 后端主要负责处理 inference service。

图一:TorchServe performance Tuning 流程总览

此外,它还支持 AB 测试、dynamic batching、logging 和 metrics 的多种 model serving 及 versioning,4 个公开 API 包括:

* Inference API:监听 8080 端口,默认情况下可通过 localhost 访问,可以在 TorchServe configuration 中进行配置,并支持从模型中获取 predictions。

Explanation API:在 hood 下使用 Captum 提供正在部署的模型的说明,并 监听 8080 端口。

Management API:允许注册或取消注册并描述模型。它还允许用户增加或减少部署模型的 workers 的数量。

* Metrics API:在默认情况下监听 8082 端口,使用户可以监测正在部署的模型。

TorchServe 通过支持 batch inference 及部署模型的多个 workers,使得用户得以扩展模型部署并处理峰值流量。这种扩展可通过 Management API 及 configuration file 中的设置来完成。此外,Metrics API 可以通过默认及自定义 metrics 来监测模型部署。

其他高级设置,如接收请求的队列长度、a batch of inputs 的最大等待时长以及其他属性,都可以通过 config file(启动时可以传递到 TorchServe)进行配置。

用 TorchServe 部署模型的步骤包括:

1、安装 TorchServe、model archiver 及其它依赖

2、选择一个合适的默认 handler(如图像分类等)或创建一个自定义 handler

3、使用 Torcharchive 将 model artifacts 和 handler 打包成一个 .mar 文件,并将其放入 model store

4、开始部署模型

5、运行推理

TorchServe 项目地址:

https://github.com/pytorch/serve/blob/master/README.md#install-torchserve-and-torch-model-archiver

TorchServe 重点概念之 Handler

TorchServe 后端使用一个 handler 来加载模型、预处理接收到的数据、运行推理和对 response 进行 post process。TorchServe 中的 handler 是一个 Python script,所有模型初始化、预处理、推理和 post process 逻辑都包含在其中。

TorchServe 还提供了一个开箱即用的 handler,可用于图像分类、分割、目标检测和文本分类等应用程序。此外,它还支持自定义 handler,以防默认 handler 不支持当下的 case。

自定义 handler 提供了很大的灵活性,这可能使 TorchServe 成为一个多框架服务工具。自定义的 handler 允许以自定义逻辑来初始化一个模型,也能让这个模型从其他框架(如 ONNX)加载模型。

TorchServe 处理程序由四个主要函数组成,functionsinitializeinference 和 preprocess,每个函数返回一个列表。

下面的代码片段是自定义 handler 的示例。自定义 handler 继承了 TorchServe 中的 BaseHandler,可以覆盖任何主函数。该示例演示了如何用 handler 加载 Detectron2 模型,解决 figure detection 问题。该模型已经被导出至 Torchscript,并使用  mod.half() 运行 FP16 推理。

 

TorchServe 重点概念之 Metrics

将模型部署到生产环境中,需要重点监测其能力表现。TorchServe 定期收集系统级 metrics,并允许添加自定义 metrics。

系统级 metrics 包括 CPU 利用率、主机上可用及已用的磁盘空间和内存,以及不同响应代码的请求数量(例如 200-300、400-500 和 500 以上)。自定义 metrics 可以添加到 Custom Metrics API。

Custom Metrics API:

https://github.com/pytorch/serve/blob/master/docs/metrics.md#custom-metrics-api

TorchServe 将这两组 metrics 记录到不同的 log file 中。默认情况下,metrics 收集在:

系统 metrics: log _ directory/ts _ metrics. log

自定义 metrics:log directory/model _ metrics. log

TorchServe 的 Metrics API,默认情况下监听端口 8082,并允许用户查询和监控收集到的 metrics。默认的 metrics endpoint 返回 Prometheus formatted metrics。可以用 curl 请求查询 metrics,或者将 Prometheus Server 指向 endpoint,并将 Grafana 用于 Dashboard。

用 curl 请求查询 metrics:

curl http://127.0.0.1:8082/metrics

用 mtail 将 logged metrics导出到 Prometheus 的示例:https://github.com/google/mtail

通过在 Bashboard 中跟踪这些 metrics,可以监视在离线 Benchmark 运行期间,偶尔出现或难以发现的 performance regressions。

What's Next

以上就是关于 TorchServe 的全部介绍。在下一节中,我们将借助一个具体案例,讲解影响部署模型到生产环境中的具体因素,以及如何用 TorchServe 对 Animated Drawings APP 进行调优。

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

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

相关文章

【Java】多线程详解

目录 一、线程简介 进程(Process )与 线程(Thread) 二、线程创建 1、线程Thread 1.1. 步骤 1.2 应用 1.3 案例:下载图片 2、实现Runnable接口 2.1 步骤 2.2 应用 3.小结 3. 实现Callable接口(了解…

利用Github账号实现(多个)个人网站

创建仓库 命名一定要是<username>.github.io这种形式username就是自己github账号的用户名。因为我已经有这个仓库&#xff0c;所以这里的报错可以忽略。 往仓库放入静态html文件 命名为index.html&#xff0c;随便放点内容。 在设置里面开启github page 这里可以选…

verilog学习笔记- 2)时序约束文件

目录 为什么要创建时序约束文件&#xff1f; 时序&#xff1a; 创建时序约束文件&#xff1a; 为什么要创建时序约束文件&#xff1f; 对于一些简单的工程时序的要求并不是特别的严格&#xff0c;添不添加时序约束文件影响不大。但是对于一些复杂的工程&#xff0c;涉及到高…

【SpringBoot应用篇】SpringBoot 启动扩展点/常用接口

【SpringBoot应用篇】SpringBoot 启动扩展点/常用接口SpringBoot常用的接口ApplicationContextInitializerBeanDefinitionRegistryPostProcessorBeanFactoryPostProcessorInstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessorBeanFactoryAwareApplica…

Dom 重点核心

关于dom操作&#xff0c;主要针对元素的操作。 主要有创建&#xff0c;增&#xff0c;删&#xff0c;改&#xff0c;查&#xff0c;属性操作&#xff0c;事件操作。 一、创建 1.document.write 2.innerHTML 3.createElement 二、增 1.appendChild&#xff08;在后面添加&am…

【iOS】块与大中枢派发

文章目录[TOC](文章目录)前言理解“块”这一概念块的基础知识块的内部结构全局块&#xff0c;栈块&#xff0c;堆块为常用的块类型创建typedef用handler块降低代码分散程度用块引用其所属对象时不要出现保留环多用派发系列&#xff0c;少用同步锁多用GCD&#xff0c;少用perfor…

Linux/ARM下QT MQTT库的编译安装

&#x1f482; 个人主页:风间琉璃&#x1f91f; 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦目录 一、 Linux 环境下编译安装 二、 ARM Linux 环境下安装 一、 Linux 环境下…

破解分布式光伏运维难题,光伏+屋面数字化监控融合是关键

2022年5月&#xff0c;在东南地区某城市一幢写字楼上&#xff0c;技术人员们正不辞辛苦爬上数十米高的墙面&#xff0c;对写字楼的屋面和墙面进行勘察。随后&#xff0c;他们准备赶在台风季来临之前完成该写字楼的建筑光伏一体化项目安装与部署。 这是森特士兴集团股份有限公司…

fixed:error:0308010C:digital envelope routines::unsupported

目录1.故障现场2. 问题分析3. 修复方案4. 参考文献1.故障现场 最近由于一些原因&#xff0c;从Mac OSX 迁移到 Windows 平台&#xff0c;在尝试运行基于vue-element-admin 项目时&#xff0c;发生了如下异常&#xff1a; error:0308010C:digital envelope routines::unsuppor…

MySQL的一些指令,函数以及关键字

这个里面我准备记录一些比较有意思的MySQL的指令和函数&#xff0c;当然使用函数的时候我们要注意&#xff0c;会不会因为函数导致不走索引&#xff0c;走全表扫描的情况。 因为对索引字段做函数操作&#xff0c;可能会破坏索引值的有序性&#xff0c;因此优化器就决定放弃走树…

导读:21 世纪中叶的精准肿瘤学奇点?循环肿瘤细胞和单细胞测序?

Tips: 组学时代的循环肿瘤细胞&#xff1a;我们离实现“奇点”还有多远&#xff1f;&#xff08;Br J Cancer&#xff0c;IF&#xff1a;9.075&#xff09;&#xff0c;原文链接: https://pubmed.ncbi.nlm.nih.gov/35273384/ 循环肿瘤细胞的生物学、脆弱性和临床应用&#xff0…

用javascript分类刷leetcode22.字典树(图文视频讲解)

目录 Trie树&#xff0c;即字典树&#xff0c;又称前缀树&#xff0c;是一种树形结构&#xff0c;典型应用是用于统计和排序大量的字符串&#xff08;但不限于字符串&#xff09;&#xff0c;所以经常被搜索引擎用于文本词频统计。它的优先是&#xff0c;最大限度的减少无谓的…

数据挖掘与机器学习作业_06 决策树

决策树 步骤 1.计算不纯度2.选取不纯度最高的特征进行分支3.计算不纯度4.继续划分 from sklearn import tree from sklearn.model_selection import GridSearchCV from sklearn.model_selection import cross_val_score from sklearn.model_selection import train_test_spl…

单点登录 SSO 解决方案选型指南|身份云研究院

单点登录&#xff08;SSO&#xff09;是目前企业降本增效以及提升用户体验的主流选择方案。常规的单点登录指“登录一次&#xff0c;即可访问所有互相信任的应用&#xff0c;用户不再需要记住每一个应用的账号密码”&#xff0c;这有效解决了密码疲劳、登录效率等问题&#xff…

(深度学习快速入门)第三章第二节:通过一个二分类任务介绍完整的深度学习项目

文章目录一&#xff1a;数据集介绍二&#xff1a;一个完整的深度学习项目必备文件三&#xff1a;项目代码&#xff08;1&#xff09;config.py——超参数文件&#xff08;2&#xff09;preprocess——数据预处理文件&#xff08;3&#xff09;dataloader——数据集封装&#xf…

后端人眼中的Vue(一)

一、简介 1.1、Vue简介 ​ Vue是渐进式 JavaScript 框架&#xff0c;啥叫渐进式&#xff1f;渐进式意味着你可以将Vue作为你应用的一部分嵌入其中&#xff0c;或者如果你希望将更多的业务逻辑使用Vue实现&#xff0c;那么Vue的核心库以及其生态系统。比如CoreVue-routerVuexax…

Homekit智能家居DIY之智能灯泡

一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时&#xff0c;它们可以通过声控、触控、红外等方式进行控制&#xff0c;或者带有调光开关&#xff0c;让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块&#xff0c;可与手机、家庭智能助手、或其他智能…

RabbitMQ、Kafka、RocketMQ消息中间件对比总结

文章目录前言侧重点架构模型消息通讯其他对比总结参考文档前言 不论Kafka还是RabbitMQ和RocketMQ&#xff0c;作为消息中间件&#xff0c;其作用为应用解耦、异步通讯、流量削峰填谷等。 拿我之前参加的一个电商项目来说&#xff0c;订单消息通过MQ从订单系统到支付系统、库存…

ORB-SLAM2 --- KeyFrame::UpdateConnections 函数

目录 一、函数作用 二、函数流程 三、code 四、函数解析 一、函数作用 更新关键帧之间的连接图。 更新变量 mConnectedKeyFrameWeights&#xff1a;当前关键帧的共视信息&#xff0c;记录当前关键帧共视关键帧的信息&#xff08;哪一帧和当前关键帧有共视&#xff0c;共视…

用C++实现十大经典排序算法

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 简介 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大…