当前位置: 首页 > news >正文

LibTorch使用-基础版

一、LibTorch简介

        LibTorch 是 PyTorch 的 C++ 版本官方库,主要用于在 C++ 环境中进行深度学习模型的部署和推理。它保留了 PyTorch 在 Python 中的主要特性,并适合在不使用 Python 的场景(如生产部署、嵌入式设备、Windows 应用、C++ 推理服务)中使用。

        区别于另外一条部署模型的线路,.pth -> .onnx -> .trt,使用Libtorch进行部署,可以不必担心算子不兼容问题,例如F.grid_sample算子在onnx和trt中兼容性不强,需要单独在TensorRT平台进行自定义算子。以下是两种路线的区别:

图 1 LibTorch与ONNX\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_channelstensor,改为xx.item()数字格式

3.

五、参考

LibTorch官方文档:

PyTorch C++ API — PyTorch main documentation

LibTorch GPU无法使用:

VS2022 Libtorch配置无法调用CUDA的问题_libtorch cuda不可用-CSDN博客

http://www.lryc.cn/news/603360.html

相关文章:

  • Jetpack - Room(Room 引入、Room 优化)
  • Spring Boot 自动配置:从 2.x 到 3.x 的进化之路
  • 牛顿拉夫逊法PQ分解法计算潮流MATLAB程序计算模型。
  • 微信小程序私密消息
  • GaussDB 数据库架构师修炼(十) 性能诊断常用视图
  • 原生html+js+jq+less 实现时间区间下拉弹窗选择器
  • 鸿蒙网络编程系列59-仓颉版TLS回声服务器示例
  • 42、鸿蒙HarmonyOS Next开发:应用上下文Context
  • Apache Ignite 的分布式原子类型(Atomic Types)
  • 专业Python爬虫实战教程:逆向加密接口与验证码突破完整案例
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章评论量分析实现
  • Apache Ignite Cluster Groups的介绍
  • U3D中的package
  • 【PHP】Swoole:CentOS安装Composer+Hyperf
  • vue2 使用liveplayer加载视频
  • .NET Core 3.1 升级到 .NET 8
  • 自学嵌入式 day37 HTML
  • 前端代码格式化工具HTML离线版
  • LangChain学习笔记01---基本概念及使用
  • SkSurface---像素的容器:表面
  • echarts饼图
  • .NET测试平台Parasoft dotTEST在汽车电子行业的核心功能及应用
  • OpenAI Python API 完全指南:从入门到实战
  • 使用jQuery动态操作HTML和CSS
  • 从centos更换至ubuntu的安装、配置、操作记录
  • 系统选择菜单(ubuntu grub)介绍
  • 智能健康项链专利拆解:ECG 与 TBI 双模态监测的硬件架构与信号融合
  • Ubuntu22.04系统安装,Nvidia显卡驱动安装问题
  • 【Linux系统编程】Ext2文件系统
  • Java 9 新特性解析