Libtorch的介绍与使用方法

5 篇文章 0 订阅
5 篇文章 2 订阅

1.libtorch是什么

libtorch是pytorch的C++版本,支持CPU端和GPU端的部署和训练。由于python和c++的语言特性,因此用pytorch做模型训练,libtorch做模型部署。

用libtorch部署pytorch模型,而不是用tensorrt等工具部署模型的优势在于:pytorch和libtorch同属一个生态,API语句比较接近,并且不会出现某网络层不支持的问题。

Note that LibTorch is only available for C++.

2.libtorch如何下载

libtorch的下载链接,如下图所示,libtorch有release和debug版本可以选择。
在这里插入图片描述
注意:最新版本的pytorch和libtorch(1.11.0)已经不支持windows系统下的CUDA10.2,如下图所示。解决方法:windows下使用CUDA11.3,或者不使用最新版本的pytorch和libtorch,1.10版本是支持windows下的pytorch的。老版本的libtorch下载请参考这篇博客
在这里插入图片描述

3.libtorch在windows下如何使用

libtorch解压后如下图所示:

最核心的是include和lib这两个文件夹。其实,不管是libtorch,还是别的tensorrt、openvino等模型部署工具,其本质都是给用户提供include和lib去使用。
在这里插入图片描述
下面讲解下libtorch在windows下如何在VS中使用。
3.1在VS的包含目录中添加libtorch的头文件
在这里插入图片描述
3.2 在VS的库目录中添加libtorch的库文件
在这里插入图片描述
3.3 在VS中添加附加依赖项
在这里插入图片描述
libtorch的所有依赖项如下,可以直接粘贴使用。

asmjit.lib
c10.lib
c10_cuda.lib
caffe2_detectron_ops_gpu.lib
caffe2_module_test_dynamic.lib
caffe2_nvrtc.lib
Caffe2_perfkernels_avx.lib
Caffe2_perfkernels_avx2.lib
Caffe2_perfkernels_avx512.lib
clog.lib
cpuinfo.lib
dnnl.lib
fbgemm.lib
fbjni.lib
kineto.lib
libprotobuf-lite.lib
libprotobuf.lib
libprotoc.lib
mkldnn.lib
pthreadpool.lib
pytorch_jni.lib
torch.lib
torch_cpu.lib
torch_cuda.lib
XNNPACK.lib

3.4 错误:c2872 std 不明确的符号
解决方法:将 VS配置中的符合模式 改为否,问题解决。如下图所示。
在这里插入图片描述
3.5 Torch::cuda::is_available()返回值为False的解决办法:
在链接器中 -> 命令行 -> 其他选项,添加如下内容:

/INCLUDE:?warp_size@cuda@at@@YAHXZ

在这里插入图片描述
如果还没解决的话,可以参考下图,亲测有效:
在这里插入图片描述

4.libtorch推理YOLOv5的例子

这篇博客写的较为详细,推荐看这篇博客。

5.libtorch模型转换方法

官方教程链接Converting to Torch Script via Tracing

#例子
import torch
import torchvision

# An instance of your model.
model = torchvision.models.resnet18()

# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 224, 224)

# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)

# save model
traced_script_module.save("traced_resnet_model.pt")
  • 19
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
torch::data::transforms::Lambda是PyTorch C++ API中的一个数据转换函数,允许用户使用自定义的Lambda函数来对数据进行转换。其使用方法如下: 1. 首先,需要包含头文件: ```c++ #include <torch/data/transforms/lambda.h> ``` 2. 然后,定义一个Lambda函数,该函数接受一个Tensor类型的输入参数,对其进行转换并返回一个新的Tensor类型的输出结果。例如,下面定义了一个Lambda函数,将输入的Tensor类型数据除以2: ```c++ auto my_lambda = [](torch::Tensor x) -> torch::Tensor { return x / 2; }; ``` 3. 最后,将Lambda函数作为参数传递给Lambda转换函数,创建一个Lambda转换对象。该对象可以被应用于数据集或数据加载器中,对数据进行转换。例如,下面创建了一个Lambda转换对象,将数据集中的所有Tensor类型数据都除以2: ```c++ auto my_transform = torch::data::transforms::Lambda(my_lambda); auto transformed_dataset = dataset.map(my_transform); ``` 上述代码中,dataset是一个数据集对象,map函数会将数据集中的每个样本都应用my_transform转换对象,从而得到一个新的数据集对象transformed_dataset。该数据集对象中的所有Tensor类型数据都已经被除以2。 4. 如果要将Lambda转换对象应用于数据加载器中,可以使用transform函数,例如: ```c++ auto dataloader = torch::data::make_data_loader(dataset, batch_size).map(my_transform); ``` 上述代码中,make_data_loader函数会创建一个数据加载器对象dataloader,该对象会从数据集dataset中获取数据,每次获取batch_size个样本。map函数会将dataloader中的每个Tensor类型数据都应用my_transform转换对象。 总之,torch::data::transforms::Lambda是一个非常灵活的数据转换函数,可以让用户自由定义转换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值