1.概述
深度学习领域的盆友们想必对PyTorch
不陌生,作为近些年来深度学习框架中的佼佼者,PyTorch
在学术领域攻城略地。但该框架的实际名字应该是Torch
,而PyTorch
只是Torch
的Python版本,相应地,也有一个C++版本,称为LibTorch
。那LibTorch
有什么用呢?
别急,我们先讲讲TorchScript
吧。在Torch
中提供了TorchScript
的方法,可以将nn.Module
的子类转化为一种中间模型,也即ScriptModule
,该模型存储在磁盘后,可以被PyTorch
或者LibTorch
直接调用,用于推理。
由于PyTorch
非常方便,所以通常都是用它调试完模型后,输出模型为ScriptModule
,之后用LibTorch
直接调用,这就是所谓部署。除模型外的其他功能可以用C++实现,因为C++通常运行更快,所以这样可以获得更高的效率。
上面是LibTorch
常常被使用的方式,它的第二个使用方式是可以直接用C++编写神经网络。当然C++写起来可能不像Python那么顺溜,但是某些情况下确实是有这个需求的。
2.详述
这里的详述主要是搬点链接然后做个补充。
TorchScript
可以参考:
点击实现暴富
- 这篇文章指出,
TorchScript
有两种生成方法,Tracing用于不存在控制流的情况,Scripting用于存在控制流的情况。讲道理,都用Scripting就可以了,不知为什么还需要有一个Tracing。这是我个人的疑惑。
LibTorch
调用TorchScript
模型可以参考:
点击找到女朋友
- 这里下载LibTorch库,最好不要用1.7的版本,我用了之后编译有问题,我用1.8.1则很正常。
- 文章里的
CMakeLists.txt
无法找到依赖包,补充为:
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(custom_ops)
#主要是补充这个libtorch包的路径,否则找不到它的
#路径记得改成自己的哦
set(CMAKE_PREFIX_PATH ~/桌面/libtorch-cxx11-abi-shared-with-deps-1.8.1+cpu/libtorch)
find_package(Torch REQUIRED)
add_executable(example-app main.cpp)
target_link_libraries(example-app "${TORCH_LIBRARIES}")
set_property(TARGET example-app PROPERTY CXX_STANDARD 14)
更多的待补充…