TorchScript介绍
TorchScript是PyTorch模型推理部署的中间表示,可以在高性能环境libtorch(C ++)中直接加载,实现模型推理,而无需Pytorch训练框架依赖。torch.jit是torchscript Python语言包支持,支持pytorch模型快速,高效,无缝对接到libtorch运行时,实现高效推理。它是Pytorch中除了训练部分之外,开发者最需要掌握的Pytorch框架开发技能之一。trace使用
Torchscript使用分为两个部分分别是script跟trace,其中trace是跟踪执行步骤,记录模型调用推理时执行的每个步骤,代码演示如下:
classMyCell(torch.nn.Module):
def__init__(self):
super(MyCell,self).__init__()
self.linear=torch.nn.Linear(4,4)
defforward(self,x,h):
new_h=torch.tanh(self.linear(x)+h)
returnnew_h,new_h
my_cell=MyCell()
x,h=torch.rand(3,4),torch.rand(3,4)
traced_cell=torch.jit.trace(my_cell,(x,h))
print(traced_cell)
traced_cell(x,h)
print(traced_cell.graph)
运行结果如下:
MyCell(
original_name=MyCell
(linear):Linear(original_name=Linear)
)
跟踪执行结果
graph(%self.1:__torch__.MyCell,
%input:Float(3:4,4:1,requires_grad=0,device=cpu),
%h:Float(3:4,4:1,requires_grad=0,device=cpu)):
%19:__torch__.torch.nn.modules.linear.Linear=prim::GetAttr[name="linear"](%self.1)
%21:Tensor=prim::CallMethod[name="forward"](%19,%input)
%12:int=prim::Constant[value=1]()#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%13:Float(3:4,4:1,requires_grad=1,device=cpu)=aten::add(%21,%h,%12)#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%14:Float(3:4,4:1,requires_grad=1,device=cpu)=aten::tanh(%13)#D:/python/pytorch_openvino_demo/ch5/faster_rcnn2onnx.py0
%15:(Float(3:4,4:1,requires_grad=1,device=cpu),Float(3:4,4:1,requires_grad=1,device=cpu))=prim::TupleConstruct(%14,%14)
return(%15)
script部分使用
script是导出模型为中间IR格式文件,支持高性能libtorch C++部署,我们以torchvision中Mask-RCNN导出中间格式IR为例,代码演示如下:
importtorch
importtorchvisionastv
num_classes=3
model=tv.models.detection.maskrcnn_resnet50_fpn(
pretrained=False,progress=True,
num_classes=num_classes,
pretrained_backbone=True)
im=torch.zeros(1,3,*(1333,800)).to("cpu")
model.load_state_dict(torch.load("D:/gaobao_model.pth"))
model=model.to("cpu")
model.eval()
ts=torch.jit.script(model)
ts.save("gaobao.ts")
loaded_trace=torch.jit.load("gaobao.ts")
loaded_trace.eval()
withtorch.no_grad():
print(loaded_trace(list(im)))
最终得到torchscript文件,支持直接通过libtorch部署,其中通过torchscript C++部分加载的代码如下:
#include//One-stopheader.
#include
#include
intmain(intargc,constchar*argv[]){
if(argc!=2){
std::cerr<< "usage:example-app
" ;
return-1;
}
//DeserializetheScriptModulefromafileusingtorch::load().
torch::Modulemodule=torch::load(argv[1]);
std::vectorinputs;
inputs.push_back(torch::randn({4,8}));
inputs.push_back(torch::randn({8,5}));
torch::Tensoroutput=module.forward(std::move(inputs)).toTensor();
std::cout<< output << std::endl;
}
上面代码来自官方测试程序,特别说明一下!
审核编辑 :李倩
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
开发
+关注
关注
0文章
376浏览量
42019 -
C++
+关注
关注
22文章
2122浏览量
76710 -
pytorch
+关注
关注
2文章
813浏览量
14699
原文标题:轻松学Pytorch之torchscript使用!
文章出处:【微信号:CVSCHOOL,微信公众号:OpenCV学堂】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
关于系统链接脚本的介绍
一、队伍介绍
本篇为蜂鸟E203系列分享第四篇,本篇介绍的内容是系统链接脚本。
二、如何实现不同的下载模式?
实现三种不同的程序运行方式,可通过makefile的命令行指定不同的链接脚本,从而实现
发表于 10-30 08:26
NICE端口相关信号简单介绍与配置
以下对自定义指令情况下的NICE各个端口配置进行详细介绍。
由于NICE模块的输入端口由CPU发送相关信号,因此仅对NICE返回给CPU的端口进行介绍。
NICE返回给CPU的端口分为返回给
发表于 10-30 07:57
Montgomery模乘介绍
Montgomery模乘介绍
Montgomery 模乘算法是最有效的大整数模乘算法之一它的一个显著特点是消除了mod n 的除法运算。Montgomery 算法的基本思想是计算 ,设n为k比特
发表于 10-22 07:35
元器件及单元电路介绍-610页
元器件及单元电路介绍放大电路基础,电源电路,正弦波振荡电路,调制与解调电路,混频电路与变频电路,集成运算放大电路,数字集成电路等。
纯分享贴,有需要可以直接下载附件获取完整资料!
(如果内容有帮助可以关注、点赞、评论支持一下哦~)
发表于 05-19 15:41
【「AI Agent应用与项目实战」阅读体验】书籍介绍
结构如下:
可以看到整体的内容是非常丰富的,对于一本89元的书来说,除第一章是总体介绍外,包含10个应用案例,可以说是超值了,平均一个案例还不到9块钱,都不够一杯奶茶,所以还有什么理由不掌握呢
发表于 03-05 20:40
RK3568内置MCU开发介绍之二
本文重点介绍RK3568内置的MCU与AP之间的通信功能,首先介绍RPMsg的框架,然后介绍MCU端RPMSG的构建方法,最后介绍AP端的RPMSG的配置方法,并进行MCU和AP之间通

TorchScript介绍及使用
评论