欢迎光临散文网 会员登陆 & 注册

2022网易微专业高级前端开发工程师日出东方其道大光

2022-10-17 12:25 作者:山观那恭喜囧昂贵的  | 我要投稿


Pytorch在C++中加载TORCHSCRIPT模型

2022网易微专业高级前端开发工程师日出东方其道大光

download:https://www.51xuebc.com/thread-501-1-1.html

备用:3w 51xuebc com

PyTorch的主要编程接口是Python语言。虽然对于很多需要动态快速迭代的场景,Python是一种合适的首选语言,但也有很多情况下,Python的这些属性恰恰是不利的。经常使用后者的一个环境是生产环境,它要求低延迟和严格的部署。对于生产场景,C++通常是首选语言,即使它只绑定了另一种语言,如Java、Rust或Go。以下内容将概述如何使用PyTorch提供C++库来加载现有的Python序列化模型,该模型完全独立于Python在C++环境中的执行。
步骤1:将PyTorch模型转换为Torch脚本。
PyTorch模型从Python到C++迁移的媒介是通过Torch脚本实现的,Torch脚本是PyTorch模型的中间表示,可以被Torch脚本编译器理解、编译和序列化。如果从vanilla“eager”API编写的现有PyTorch模型开始,必须先将模型转换成Torch脚本。在下面讨论的最常见的情况下,这只需要很少的工作。如果你已经有一个Torch脚本模块,你可以跳到本教程的下一部分。
有两种方法可以将PyTorch模型转换成Torch脚本。第一个称为跟踪,这是一种通过使用样本输入评估一次来捕获模型结构的机制,并记录这些输入在模型中的流动。这适用于限制控制流使用的模型(即,如果模型中不存在)。第二种方法是向模型添加显式注释,以通知Torch脚本编译器,它可以直接解析和编译模型代码,受Torch脚本语言施加的约束。


提示:
这两种方法的完整文档可以在官方的Torch脚本参考中找到,以及关于它们的使用的进一步指导。
1.1通过跟踪转换为Torch脚本
要通过跟踪将PyTorch模型转换为Torch脚本,必须将模型实例与样本输入一起传递给torch.jit.trace函数。这将生成一个torch.jit.ScriptModule对象,它包含嵌入在模块的forward方法中的模型评估跟踪:
进口火炬
进口火炬视觉

#你的模型的一个实例。
model = torch vision . models . resnet 18()

#您通常会提供给模型的forward()方法的示例输入。
example = torch.rand(1,3,224,224)

#使用torch.jit.trace通过跟踪生成torch.jit.ScriptModule。
#将模型模型和样本数据示例传递到torch.jit.trace中
traced _ script _ module = torch . JIT . trace(模型,示例)
复制代码


与传统的PyTorch模块一样,您现在可以对被跟踪的ScriptModule进行相同的推断和预测:
in[1]:output = traced _ script _ module(torch . ones(1,3,224,224))
在[2]:输出[0,:5]
Out[2]:张量([-0.2698,-0.0381,0.4023,-0.3010,-0.0448],grad_fn=)
复制代码
1.2通过注释转换为Torch脚本
在某些情况下,如果模型采用特定形式的控制流,您可以直接用Torch脚本编写模型,并相应地对模型进行注释。例如,假设有以下普通Pytorch模型:
进口火炬

MyModule类(torch.nn.Module):
def __init__(self,N,M):
超级(MyModule,self)。__init__()
self . weight = torch . nn . parameter(torch . rand(N,M))

向前定义(自身,输入):
如果input.sum() > 0: ###</p>

2022网易微专业高级前端开发工程师日出东方其道大光的评论 (共 条)

分享到微博请遵守国家法律