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

libtorch配置指南(包含Windows和Linux)

libtorch

libtorch是pytorch的c++库,提供了用于深度学习和张量计算的功能,允许开发者在c++环境中使用pytorch的核心功能。特别是当一些pt模型无法转换到ncnn、mnn等模型时(ncnn、mnn可能还不支持某些层),可以在libtorch直接使用pt模型,避免了模型框架转换出错的问题。以下是libtorch的一些主要特点和功能:

主要特点

  1. 高性能
    libtorch提供了高效的张量操作和深度学习模型训练,能够充分利用cpu和gpu的计算能力

  2. 灵活性
    libtorch允许开发者在c++中构建和训练深度学习模型,适合需要高性能和低延迟的应用场景,如嵌入式系统和实时应用

  3. 与pytorch兼容
    libtorch与pytorch的python api兼容,用户可以在python中训练模型,然后将其导出为 torchscript格式,在c++中加载和运行

  4. 支持自动求导
    libtorch支持自动求导功能,使得模型训练过程中的梯度计算变得简单高效

  5. 丰富的功能
    提供了多种神经网络层、优化器、损失函数等,支持构建复杂的深度学习模型

主要组件

  • 张量(Tensor):libtorch提供了多维数组(张量)的数据结构,支持各种数学操作
  • 自动求导(Autograd):支持自动计算梯度,简化了反向传播的实现
  • 神经网络模块(torch::nn):提供了构建神经网络的基础组件
  • 优化器(torch::optim):提供多种优化算法,如SGD、Adam等

使用场景

  • 高性能计算:适用于需要高性能计算的应用,如图像处理和实时推理
  • 嵌入式系统:可以在资源受限的设备上运行深度学习模型
  • c++应用:对于已有c++项目,libtorch提供了一种将深度学习功能集成到现有代码中的方式

下载libtorch

cpu版本  

download.pytorch.org/libtorch/cpu

gpu版本

libtorch-cuda12.1
libtorch-cuda11.8
libtorch-cuda11.3
libtorch-cuda10.1

Windows配置libtorch

这里以libtorch-win-shared-with-deps-2.2.2+cpu.zip为例,

1、下载libtorch并解压

2、在vs2019新建一个空项目

3、在项目-属性-配置属性-VC++目录的包含目录中添加“D:\libtorch-win-shared-with-deps-2.2.2+cpu\libtorch\include\torch\csrc\api\include”和“D:\libtorch-win-shared-with-deps-2.2.2+cpu\libtorch\include

4、在项目-属性-配置属性-VC++目录的库目录中添加“D:\libtorch-win-shared-with-deps-2.2.2+cpu\libtorch\lib

5、在项目-属性-配置属性-链接器-输入的附加依赖项中添加“c10.lib”、“torch.lib”、“torch_cpu.lib”。如果是gpu版本的libtorch,还需要添加如“torch_cuda.lib”这类的库,以及在项目-属性-配置属性-链接器—命令行—其他选项—添加下面两行代码(主要作用是确保在编译和链接过程中,特定的 CUDA 相关函数和变量能够被正确找到和使用,从而避免运行时错误),

/INCLUDE:?searchsorted_cuda@native@at@@YA?AVTensor@2@AEBV32@0_N1@Z
/INCLUDE:?warp_size@cuda@at@@YAHXZ

6、简单写个代码测试能否正常使用libtorch,

#include <torch/torch.h>
#include <iostream>int main() {torch::manual_seed(0);auto tensor = torch::rand({2, 3});std::cout << "随机生成的张量:\n" << tensor << std::endl;auto tensor2 = torch::rand({2, 3});auto sum_tensor = tensor + tensor2;std::cout << "张量加法结果:\n" << sum_tensor << std::endl;auto mat1 = torch::rand({2, 2});auto mat2 = torch::rand({2, 2});auto result = torch::mm(mat1, mat2);std::cout << "矩阵乘法结果:\n" << result << std::endl;return 0;
}

Linux配置libtorch

linux系统的配置则比较简单,这里以libtorch-shared-with-deps-2.2.2+cpu.zip为例,

1、下载并解压

2、编写CMakeLists.txt,如,

cmake_minimum_required(VERSION 3.16)
project(LibTorch_Demo)set(CMAKE_CXX_STANDARD 17)
#set(CMAKE_BUILD_TYPE RELEASE)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE -fPIC ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE -fPIC -fpermissive")
set(CMAKE_CXX_STANDARD_REQUIRED ON)find_package(OpenMP REQUIRED)# libtorch
set(Torch_DIR libtorch-shared-with-deps-2.2.2+cpu/libtorch/share/cmake/Torch/)
find_package(Torch REQUIRED)add_executable(LibTorch_Demo main.cpp)
target_link_libraries(LibTorch_Demo "${TORCH_LIBRARIES}")

其中,set(Torch_DIR libtorch-shared-with-deps-2.2.2+cpu/libtorch/share/cmake/Torch/) 的设置是为了指定libtorch的CMake配置文件所在的目录。这个目录通常包含了CMake所需的配置文件和模块。这些文件定义了如何找到libtorch的库、头文件以及其他相关的设置

3、简单写个代码进行测试,

#include <torch/torch.h>
#include <iostream>int main() {torch::manual_seed(0);auto tensor = torch::rand({2, 3});std::cout << "随机生成的张量:\n" << tensor << std::endl;auto tensor2 = torch::rand({2, 3});auto sum_tensor = tensor + tensor2;std::cout << "张量加法结果:\n" << sum_tensor << std::endl;auto mat1 = torch::rand({2, 2});auto mat2 = torch::rand({2, 2});auto result = torch::mm(mat1, mat2);std::cout << "矩阵乘法结果:\n" << result << std::endl;return 0;
}

4、在CMakeLists.txt所在目录中,打开命令行,输入,

mkdir build
cd buildcmake ..make./LibTorchDemo

执行完以上指令后,会得到类似如下的结果,

随机生成的张量:0.1234  0.5678  0.90120.3456  0.7890  0.1234
[ CPUFloatType{2,3} ]张量加法结果:0.4567  1.2345  1.23451.2345  1.5678  0.5678
[ CPUFloatType{2,3} ]矩阵乘法结果:0.9876  1.23451.2345  0.9876
[ CPUFloatType{2,2} ]

相关文章:

libtorch配置指南(包含Windows和Linux)

libtorch libtorch是pytorch的c库&#xff0c;提供了用于深度学习和张量计算的功能&#xff0c;允许开发者在c环境中使用pytorch的核心功能。特别是当一些pt模型无法转换到ncnn、mnn等模型时&#xff08;ncnn、mnn可能还不支持某些层&#xff09;&#xff0c;可以在libtorch直…...

Java开发经验——阿里巴巴编码规范经验总结2

摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制&#xff0c;因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…...

机器人手臂“听不懂“指令?Ethercat转PROFINET网关妙解通信僵局

机器人手臂"听不懂"指令&#xff1f;Ethercat转PROFINET网关妙解产线通信僵局 协作机器人&#xff08;如KUKA iiWA&#xff09;使用EtherCAT控制&#xff0c;与Profinet主站&#xff08;如西门子840D CNC&#xff09;同步动作。 客户反馈&#xff1a;基于Profinet…...

深度学习 CNN

CNN 简介 什么是 CNN&#xff1f; 卷积神经网络&#xff08;Convolutional Neural Network&#xff09;是专为处理网格数据&#xff08;如图像&#xff09;设计的神经网络。核心组件&#xff1a; 卷积层 &#xff1a;提取局部特征&#xff08;如边缘、纹理&#xff09;通过卷…...

GrassRoot备份项目

Windows服务项目 Grass.cs using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http.Headers; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Time…...

iOS开发架构——MVC、MVP和MVVM对比

文章目录 前言MVC&#xff08;Model - View - Controller&#xff09;MVP&#xff08;Model - View - Presenter&#xff09;MVVM&#xff08;Model - View - ViewModel&#xff09; 前言 在 iOS 开发中&#xff0c;MVC、MVVM、和 MVP 是常见的三种架构模式&#xff0c;它们主…...

typecho中的Widget设计文档

组成系统的最基本元素 什么是Widget Widget是组成Typecho的最基本元素&#xff0c;除了已经抽象出来的类库外&#xff0c;其它几乎所有的功能都会通过Widget来完成。在实践中我们发现&#xff0c;在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的&#xff0c…...

MySQL索引原理以及SQL优化(二)

目录 1. 索引与约束 1.1 索引是什么 1.2 索引的目的 1.3 索引分类 1.3.1 数据结构 1.3.2 物理存储 1.3.3 列属性 1.3.4 列的个数 1.4 主键的选择 1.5 索引使用场景 1.6 索引的底层实现 1.6.1 索引存储 1.6.2 页 1.6.3 B 树 1.6.4 B 树层高问题 1.6.5 自增 id 1.7 innod…...

MATLAB中矩阵和数组的区别

文章目录 前言环境配置1. 数据结构本质2. 运算规则&#xff08;1&#xff09;基本运算&#xff08;2&#xff09;特殊运算 3. 函数与操作4. 高维支持5. 创建方式 前言 在 MATLAB 中&#xff0c;矩阵&#xff08;Matrix&#xff09; 和 数组&#xff08;Array&#xff09; 的概…...

Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写C#示例源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bYhsS9c&ftt&id917152255720 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using S…...

MySQL核心内容【完结】

MySQL核心内容 文章目录 MySQL核心内容1.MySQL核心内容目录2.MySQL知识面扩展3.MySQL安装4.MySQL配置目录介绍Mysql配置远程ip连接 5.MySQL基础1.MySQL数据类型1.数值类型2.字符串类型3.日期和时间类型4.enum和set 2.MySQL运算符1.算数运算符2.逻辑运算符3.比较运算符 3.MySQL完…...

C++类和对象进阶 —— 与数据结构的结合

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 […...

Django之账号登录及权限管理

账号登录及权限管理 目录 1.登录功能 2.退出登录 3.权限管理 4.代码展示合集 这篇文章, 会讲到如何实现账号登录。账号就是我们上一篇文章写的账号管理功能, 就使用那里面已经创建好的账号。这一次登录, 我们分为三种角色, 分别是员工, 领导, 管理员。不同的角色, 登录进去…...

从一城一云到AI CITY,智慧城市进入新阶段

AI将如何改变城市面貌&#xff1f;AI能否为城市创造新的商业价值&#xff1f;AI的落地应用将对日常生活有什么样的影响&#xff1f; 几乎在每一场和城市发展相关的论坛上&#xff0c;都会出现以上几个问题。城市既是AI技术创新融合应用的综合性载体&#xff0c;普罗大众对AI产…...

Oracle数据库DBF文件收缩

这两天新部署了一套系统&#xff0c;数据库结构保持不变&#xff0c;牵扯导出表结构还有函数&#xff0c;图省事就直接新建用户&#xff0c;还原数据库了。然后咔咔咔&#xff0c;一顿删除delete&#xff0c;truncate&#xff0c;发现要不就是表删了&#xff0c;还有num_rows&a…...

EXCEL中嵌入其他表格等文件

在EXCEL中嵌入其他表格 先放链接&#xff1a;https://jingyan.baidu.com/article/295430f11708c34d7e00509a.html 步骤如下&#xff1a; 1、打开一个需要嵌入新表格的excel表。 2、切换至“插入”菜单中&#xff0c;单击选择“对象”。 3、如下图所示&#xff0c;会弹出“对象…...

21. LangChain金融领域:合同审查与风险预警自动化

引言&#xff1a;当AI成为24小时不眠的法律顾问 2025年某商业银行的智能合同系统&#xff0c;将百万级合同审查时间从平均3周缩短至9分钟&#xff0c;风险条款识别准确率达98.7%。本文将基于LangChain的金融法律框架&#xff0c;详解如何构建合规、精准、可追溯的智能风控体系…...

Springboot使用事件流调用大模型接口

什么是事件流 事件流&#xff08;Event Stream&#xff09; 是一种处理和传递事件的方式&#xff0c;通常用于系统中的异步消息传递或实时数据流。在事件驱动架构&#xff08;Event-Driven Architecture&#xff09;中&#xff0c;事件流扮演着至关重要的角色。 事件流的概念…...

计算机网络--2

TCP三次握手 TCP连接为什么需要三次握手 1. 由于网络情况复杂,可能会出现丢包现象,如果第二次握手的时候服务器就认为这个端口可用,然后一直开启,但是如果客户端未收到服务器发送的回复,那么就会重新发送请求,服务器就会重新开启一个端口连接,这样就会浪费一个端口。 三…...

【已解决】WORD域相关问题;错误 未找到引用源;复制域出错;交叉引用域到底是个啥

&#xff08;微软赶紧倒闭 所有交叉引用域&#xff0c;有两个状态&#xff1a;1.锁定。2.手动。可通过编辑->链接查看。 “锁定”状态域的能力&#xff1a; 1. 导出PDF格式稳定&#xff08;【已解决】WORD导出PDF时&#xff0c;参考文献上标自动被取消/变为正常文本_word…...

尤雨溪宣布:Vue 生态正式引入 AI

在前端开发领域,Vue 框架一直以其易用性和灵活性受到广大开发者的喜爱。 而如今,Vue 生态在人工智能(AI)领域的应用上又迈出了重要的一步。 尤雨溪近日宣布,Vue、Vite 和 Rolldown 的文档网站均已添加了llms.txt文件,这一举措旨在让大型语言模型(LLM)更方便地理解这些…...

蓝桥杯第十六届c组c++题目及个人理解

本篇文章只是部分题目的理解&#xff0c;代码和思路仅供参考&#xff0c;切勿当成正确答案&#xff0c;欢迎各位小伙伴在评论区与博主交流&#xff01; 题目&#xff1a;2025 题目解析 核心提取 要求的数中至少有1个0、2个2、1个5 代码展示 #include<iostream> #incl…...

【MVCP】基于解纠缠表示学习和跨模态-上下文关联挖掘的多模态情感分析

多处可看出与同专栏下的DCCMCI很像 abstract 多模态情感分析旨在从多模态数据中提取用户表达的情感信息,包括语言、声学和视觉线索。 然而,多模态数据的异质性导致了模态分布的差异,从而影响了模型有效整合多模态互补性和冗余性的能力。此外,现有的方法通常在获得表征后直…...

Go语言--语法基础4--基本数据类型--类型转换

Go 编程语言中 if 条件语句的语法如下&#xff1a; 1 、基本形式 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } If 在布尔表达式为 true 时&#xff0c;其后紧跟的语句块执行&#xff0c;如果为 false 则 不执行。 package main import "fmt"…...

硬件工程师笔记——电子器件汇总大全

目录 1、电阻 工作原理 欧姆定律 电阻的物理本质 一、限制电流 二、分压作用 三、消耗电能&#xff08;将电能转化为热能&#xff09; 2、压敏电阻 伏安特性 1. 过压保护 2. 电压调节 3. 浪涌吸收 4. 消噪与消火花 5. 高频应用 3、电容 工作原理 &#xff08;…...

微软推动智能体协同运作:支持 A2A、MCP 协议

今日凌晨&#xff0c;微软宣布 Azure AI Foundry 和 Microsoft Copilot Studio 两大开发平台支持最新 Agent 开发协议 A2A&#xff0c;并与谷歌合作开发扩大该协议&#xff0c;这一举措对智能体赛道意义重大。 现状与变革意义 当前智能体领域类似战国时代&#xff0c;各家技术…...

Qt模块化架构设计教程 -- 轻松上手插件开发

概述 在软件开发领域,随着项目的增长和需求的变化,保持代码的可维护性和扩展性变得尤为重要。一个有效的解决方案是采用模块化架构,尤其是利用插件系统来增强应用的功能性和灵活性。Qt框架提供了一套强大的插件机制,可以帮助开发者轻松实现这种架构。 模块化与插件系统 模…...

Linxu实验五——NFS服务器

一.NFS服务器介绍 NFS服务器&#xff08;Network File System&#xff09;是一种基于网络的分布式文件系统协议&#xff0c;允许不同操作系统的主机通过网络共享文件和目录3。其核心作用在于实现跨平台的资源透明访问&#xff0c;例如在Linux和Unix系统之间共享静态数据&#…...

RV1126 ROS2环境交叉编译及部署(基于官方Docker)

RV1126 ROS2环境交叉编译及部署(基于官方Docker) 0 前言1 SDK源码更新1.1 启动Docker容器1.2 更新SDK源码1.3 SDK更新问题2 ROS2编译配置3 Buildroot rootfs编译ROS2的依赖包3.1 编译问题解决4 使用Docker交叉编译ROS24.1 准备Linux(Ubuntu) PC机的依赖环境4.1.1 Ubuntu PC机…...

20242817李臻《Linux⾼级编程实践》第9周

20242817李臻《Linux⾼级编程实践》第9周 一、AI对学习内容的总结 第十章 Linux下的数据库编程 10.1 MySQL数据库简介 MySQL概述&#xff1a;MySQL是一个开源的关系型数据库管理系统&#xff0c;最初由瑞典MySQL AB公司开发&#xff0c;后经SUN公司收购&#xff0c;现属于O…...