Q : Libtorch是什么及为什么用Libtorch?
A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!
顾名思义,PyTorch 的主要接口是 Python 编程语言。虽然对于许多需要动态性和易于迭代的场景来说,Python 是一种合适且首选的语言,但同样在许多情况下,Python 的这些属性恰恰是不利的。后者经常应用的一种环境是生产——低延迟和严格部署要求的环境。对于生产场景,C++ 通常是首选语言,即使只是将其绑定到 Java、Rust 或 Go 等另一种语言。以下段落将概述 PyTorch 提供的从现有 Python 模型到可以纯粹从 C++ 加载和执行的序列化表示的路径,而不依赖于 Python。
第 1 步:将 PyTorch 模型转换为 Torch 脚本
PyTorch 模型从 Python 到 C++ 的过程是通过 Torch Script 实现的,Torch Script 是 PyTorch 模型的表示形式,可以由 Torch Script 编译器理解、编译和序列化。如果您从用普通“eager”API 编写的现有 PyTorch 模型开始,则必须首先将模型转换为 Torch 脚本。在下面讨论的最常见的情况下,这只需要很少的努力。
有两种将 PyTorch 模型转换为 Torch 脚本的方法。第一个称为tracing,这是一种通过使用示例输入对其进行一次评估并记录这些输入通过模型的流程来捕获模型结构的机制。这适用于限制使用控制流的模型。第二种方法是向模型添加显式注释,通知 Torch Script 编译器它可以直接解析和编译您的模型代码,但须遵守 Torch Script 语言施加的约束。
方法一:通过tracing转换为 Torch 脚本
要通过tracing将 PyTorch 模型转换为 Torch 脚本,您必须将模型的实例以及示例输入传递给 torch.jit.trace 函数。这将生成一个 torch.jit.ScriptModule 对象,其中模型评估的跟踪嵌入到模块的前向方法中:
import torch
import torchvision
# 自己模型的实例
model = torchvision.models.resnet18()
# 提供给模型的示例输入
example = torch.rand(1