TIS教程03-导出

news2023/12/12 2:06:23

简介

众所周知,模型部署框架部署的是深度学习模型,因此我们希望TIS只对模型的推理进行处理,故而需要提供给它合适的模型。而对于PyTorch的模型而言,有着主要的两种部署级模型,一种就是通用的ONNX模型以便支持诸多框架,另一种则是PyTorch自带的TorchScript模型。本文及本系列的其他文章都采用TorchScript模型进行部署。

TorchScript

首先来介绍一下TorchScript是啥?

在这里插入图片描述

TorchScript主要的应用场景是把Python/PyTorch代码转换成等价的C++代码从而提高深度学习模型在线上生产环境部署的运行效率。Python代码会被编译成TorchScript编译器可以理解的一种格式(ScriptModule),C++的生产环境可以载入该格式的文件并用内置的JIT来执行对应的代码。

落地到模型这个层面来说,其实就是将PyTorch模型从Python进程(一般指的是开发环境,用于模型设计和训练)中保存并加载到没有Python依赖(一般指的是部署环境,用于模型的线上部署)的进程中。这个过程中,纯Python模型转换为独立于Python的TorchScript程序,如C++环境中,使得生产环境的部署成为了可能,在这种环境中,Python程序可能由于性能和多线程的原因不适用。

TorchScript从PyTorch1.x开始陆续完善,是PyTorch和TensorFlow竞争工业部署市场浓墨重彩的一笔。

模型导出

实际上,TorchScript支持的是Python到C++这类高效语言环境的转换,其中最典型的就是使用C++编写的LibTorch库。不过,TorchScript自成一个生态,也有比较底层的语法需要学习,下文我也只是介绍最基础的模型导出的常见策略,至于LibTorch的细节使用Triton Inference Server也不需要过分关注,我们只需要关注模型在TIS中的推理运行结构即可。

要想保存TorchScript模型,需要首先构建出这个模型并跟踪运行一次,就可以将模型序列化为本地文件了。

import torch

x = torch.randn(1, 3, 640, 640)
model = create_model('yolov5s')
ts_model = torch.jit.trace(model, x, strict=False)
ts_model.save('yolov5.ts.pt')

上面就是使用TorchScript将PyTorch模型导出的实例代码,我这里是将yolov5s导出。至于模型加载的细节,则由TIS来负责,事实上TIS支持包括TensorRT、TorchScript(LibTorch)、TensorFlow等多种后端,我们只需要去完善输入输出的配置细节即可。

总结

本文只是简单介绍了TorchScript模型导出的简单操作,想要了解更多的建议去详细学习一下官方文档。

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

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

相关文章

TIS教程04-客户端

简介 在之前的文章中,我们主要关注服务端的配置和部署,这无可厚非,因为Triton Inference Server本就是服务端框架。但是,作为一个完善的生态,Triton也对客户端请求做了诸多封装以方便开发者的使用,这样我们…

基类成员的public访问权限在派生类中变为_C++ 派生类的构造函数举例:继承+组合(学习笔记:第7章 07)...

派生类构造函数举例[1]例7-4 派生类构造函数举例#include 对程序的说明:构造函数的执行顺序1、调用基类构造函数。顺序按照它们被继承时声明的顺序(从左向右):Base2, Base1, Base3。2、对初始化列表中的成员进行初始化。顺序按照它…

vs 2012 +opengl

2019独角兽企业重金招聘Python工程师标准>>> I was recently helping a friend get set up running OpenGL and I realized that most of the instructions available online for this are fairly outdated. So, here’s a quick run through to set the record str…

Linux压缩那些事

简介 本文主要介绍互联网上最主流的两种压缩格式(rar和zip)文件在Linux系统上的压缩和解压操作,包括分卷压缩。本文不展开过多详细的命令选项的讲解,只列举实际使用Linux系统最常用的一些命令。 ZIP 压缩 将多个文件压缩为一个…

手机当电脑音响_hifi迷你组合音响怎么样 hifi迷你组合音响优势简介【详解】

迷你音响简单的讲就是便于携带的产品,在近年来受到人们的青睐,户外的时候,hifi迷你组合音响会给人们增添很多乐趣。这种类型产品虽然个头小巧,但是不影响音质播放。那么,hifi迷你组合音响有什么特点吗?大家请看介绍。…

android之SharedPreferences

2019独角兽企业重金招聘Python工程师标准>>> 一、SharedPreferences应用场景 SharedPreferences 用于保存参数; 内部是以XML文件进行保存的,位于/data/data/package/shared_prefs目录中; 二、SharedPreferences核心代码 1.保存 Sh…

牛客多校9 - Groundhog Chasing Death(质因子分解+思维)

题目链接:点击查看 题目大意:给出 a , b , c , d , x , y ,求 题目分析:因为涉及到了 gcd 的乘积运算,那么易知不同质因子的贡献是相互独立的,首先我们就可以先将 x 和 y 进行质因子分解,那么…

用WPF山寨折线图,抄?是狠狠的抄

对于没有美术细胞的我来说,抄袭人家的设计或是创意是再平常不过的事,我承认这很无耻,如果在伟大“天朝”的教育体系下还可能升级为道德上的沦丧,毕竟人家搞个东西也不容易,可任务在身,只好下策,…

PyCharm编写shell脚本无法运行

背景 我们常常选择使用PyCharm在本地(Windows)进行开发,然后将文件远程同步到远程服务器(Linux)运行程序,但是这样编写的shell脚本常常无法运行,出现语法错误,因为好几个朋友和我提…

返回局部变量或临时变量的地址_值传递和地址返回两者在堆区(Heap)应用的三种易错点...

1、指针变量作为参数进行值传递给函数的形参,并在堆区(Heap)进行内存分配和赋值程序源码:1 结果:Segmentation fault (core dumped)分析:如上图,指针变量ptr进行值传递给函数allocation()的形参tmp并赋值为NULL&#x…

微服务通信带来的问题

有了远程通信以后,我们势必会考虑几个问题 1. 目标服务肯定会做扩容,扩容以后,客户端会带来一些变化 2. 客户端对于目标服务如何进行负载均衡 3. 客户端如何维护目标服务的地址信息 4. 服务端的服务状态变化,如何让客户端尽心…

牛客多校10 - Tournament(找规律)

题目链接:点击查看 题目大意:现在有 n 个队伍参加比赛,任意两个队伍之间都要进行一次比赛,也就是共需要进行 n * ( n - 1 ) / 2 次比赛,对于每个队伍来说,必须要在第一场比赛的时候到达赛场,在…

Zend API: array_init

为什么80%的码农都做不了架构师?>>> array_init 和array_init_size 这2个看起来像是个函数其实这2个都是宏,具体定义在文件:zend_API.h 中。 #define array_init(arg) _array_init((arg), 0 ZEND_FILE_LINE_CC) #define array…

pvbrowser安装教程(Linux)

简介 pvbrowser是一款基于QT的开源组态软件开发框架,它为客户端计算机提供了一个专门的浏览器,并为创建实现可视化的服务器提供了一个集成开发环境。不过,官方文档对于pvbrowser开发环境的配置写的略微有点草率,本文给出Ubuntu下…

tensorflow官方文档_Tensorflow 2.0 Preview 官方文档

TensorFlow 2.0目前放出了Preview版本。目前想了解TensorFlow 2.0最快的方式就是查看官方API中的变化。本文列举一些从TF官方API中看出的TF 2.0的改进。TensorFlow 2.0 Preview可以通过pip下载了:CPU: https://pypi.org/project/tf-nightly-2.0-preview/GPU: https://pypi.org/…

Android ---- Context

Context字面意思上下文,位于framework package的android.content.Context中,很多方法需要通过  Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的 …

Linux进程详细信息查看

我们通过ps及top系列命令查看进程信息时,只能看到命令执行的相对路径,查不到的进程的详细信息(如绝对路径),那么这些信息到底如何查找呢? 其实,在Linux中,一切皆文本,那…

python操作json_如何使用Python处理JSON数据

如何使用Python处理JSON数据?本篇文章就给大家介绍使用Python处理JSON数据的基本方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 在介绍使用Python处理JSON数据的基本方法之前,我们首先要了解一下什么是J…

面试题——interleave

2019独角兽企业重金招聘Python工程师标准>>> <!-- lang: cpp --> /** *3个字符串a&#xff0c;b&#xff0c;c。判断c是否是a和b的interleave&#xff0c;也就是c中应该有a&#xff0c;b中所有字符&#xff0c; *并且c中字符顺序和a&#xff0c;b中一样。 *比…

corosync/openais+pacemaker+drbd+web实现高可用群集

拓扑图:配置前提&#xff1a; 1.节点的名字必须跟uname -n的名字相同&#xff0c;而且两个主机必须能通过主机名来访问。尽量不通过DNS来访问。时钟时间保持一样。 2.双方的通信要必须通过SSL的无障碍通信机制 3.双节点之间可以通过某个IP来提供连接&#xff0c;但是这只是通信…