LibTorch使用-基础版
一、LibTorch简介
LibTorch 是 PyTorch 的 C++ 版本官方库,主要用于在 C++ 环境中进行深度学习模型的部署和推理。它保留了 PyTorch 在 Python 中的主要特性,并适合在不使用 Python 的场景(如生产部署、嵌入式设备、Windows 应用、C++ 推理服务)中使用。
区别于另外一条部署模型的线路,.pth -> .onnx -> .trt,使用Libtorch进行部署,可以不必担心算子不兼容问题,例如F.grid_sample算子在onnx和trt中兼容性不强,需要单独在TensorRT平台进行自定义算子。以下是两种路线的区别:

二、LibTorch下载
PyTorch官网:https://pytorch.org/get-started/locally/
LibTorch cu12.8 下载示例:https://download.pytorch.org/libtorch/cu128
注意:分CPU版本和GPU版本,最好是与本机CUDA版本号对应。
三、使用示例
ps:配置好包含目录、库目录、附加依赖项,及相应的动态链接库文件位置
#include <torch/script.h>
#include <opencv2/opencv.hpp>
#include <iostream>int main_fcn() {try {// 设备查询if (!torch::cuda::is_available()) {std::cout << "[Error]: CUDA is not available." << std::endl;throw std::runtime_error("[Error]: CUDA is not available.");}// 模型加载torch::Device device(torch::kCUDA);torch::jit::script::Module module = torch::jit::load("model.pt");module.eval().to(device);// 数据准备cv::Mat image = cv::imread("test.png"); // BGR uint8cv::cvtColor(image, image, cv::COLOR_BGR2RGB);image.convertTo(image, CV_32F, 1.0 / 255); // 归一化torch::Tensor img_tensor = torch::from_blob(image.data, {1, 320, 480, 3 }).permute({0, 3, 1, 2 }).to(device);img_tensor = img_tensor.to(torch::kFloat32);// 推理auto output = module.forward({ img_tensor }).toTensor();// 后处理…} catch (const c10::Error& e) {std::cerr << "运行失败: " << e.what() << std::endl;}
}
四、使用技巧及避坑
1.存在GPU无法使用的情况
表现:torch::cuda::is_available()返回False
原因:1)下载的是cpu版本 2)本机gpu无法使用
解决:如果均不是以上原因,尝试在visual studio中对项目做如下设置
属性-链接器-命令行-其他选项,添加如下代码(其含义是强制链接一个本来可能因为未引用而被剔除的符号(函数或变量)):
-INCLUDE:?warp_size@cuda@at@@YAHXZ
2.使用torch.jit.script导出时
导出代码为:
scripted = torch.jit.script(model)
scripted.save("model.pt")
注意以下几点:
(1)model应直接继承自nn.Module,不能是经过其他工具封装过的,比如LightningModule
(2)model应当是cpu下导出的,可以在LibTorch加载之后选择推理平台
(3)torch.jit.script过程中'torch.Tensor' object in attribute 'Conv1d.in_channels' is not a valid constant.
查找所有的conv1d,找到一个conv1d的参数in_channels是tensor,改为xx.item()数字格式
3.
五、参考
LibTorch官方文档:
PyTorch C++ API — PyTorch main documentation
LibTorch GPU无法使用:
VS2022 Libtorch配置无法调用CUDA的问题_libtorch cuda不可用-CSDN博客