【libtorch】pytorch源码编译生成c++ 17 libtorch记录

news/2024/12/13 17:42:41/

文章目录

      • 1. 问题描述
      • 2. 编译安装前准备
      • 3. 编译安装
      • 4. 编译好之后使用

1. 问题描述

ubuntu20.04 ros2 humble使用1.8.0 libtorch出现coredump,提示加载模型失败:

在这里插入图片描述

原因: ros2 humble项目使用c++17编译,c++11的libtorch的库文件版本不配套导致

解决: 使用pytorch源码编译c++17 libtorch使用后解决

2. 编译安装前准备

(1)确认要编译生成的libtorch版本

如 1.12.0 版本

(2)下载pytorch源码

git clone https://github.com/pytorch/pytorch.git

(4)切换到libtorch版本对应tag

cd pytorch
git tag -l *1.12.0*		// git tag查看版本,git tag -l搜索特定版本的tag
git checkout v1.12.0	// 切换到特定tag的代码	

(5)更新所有显示modified的submodule

git submodule sync
git submodule update --init --recursive

在这里插入图片描述

注释:

  1. 最好有VPN,pytorch github官网时好时不好,有梯子更方便;
  2. 下载失败不要紧,反复尝试即可,但总体是比较耗时的;
  3. 有的博客提到,可以将 .gitmodules 文件中github.com替换为github加速插件的地址 github.com.cnpmjs.org,再执行submodule更新命令
  4. submodule完整更新非常关键,否则可能中途编译失败
    在这里插入图片描述

3. 编译安装

(1)编译方式选择

目前看到三种编译安装方式:
python setup.py install
python xxx/build_libtorch.py
cmake完整编译方式

python的编译方式都使用了cmake工具编译项目,还可以设置是否使用ninja,生成库文件后还能将项目打包成python包;

考虑到cmake完整编译方式更为熟悉,方便设置c++17编译选项,以及能够生成直接使用的libtorch工程(bin/lib/include/share)等,采用cmake进行完整编译

(2)编译选项设置

CMAKE_INSTALL_PREFIX:设置安装路径,如/libtorch,/opt/libtorch等
CMAKE_BUILD_TYPE:设置编译类型,debug/release,此处设置为release
CMAKE_CXX_STANDARD:c++标准编译选项
CMAKE_CXX_STANDARD_REQUIRED:设置为ON表示必须对c++标准进行指定
USE_CUDA:是否使用cuda,看模型选择,此处设置为ON
USE_CUDNN:与cuda一致
USE_OPENCV:没有用到opencv,可设置为OFF
…

(3)编译安装

cd pytorch
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opt/libtorch -D CMAKE_CXX_STANDARD=17 -D CMAKE_CXX_STANDARD_REQUIRED=ON -D USE_CUDA=ON -D USE_CUDNN=ON -D USE_OPENCV=OFF -D BUILD_CAFFE2_MOBILE=OFF -D BUILD_PYTHON=OFF -D BUILD_CAFFE2_OPS=OFF -D BUILD_TEST=OFF -D USE_TBB=OFF ..
make -j4
make install

注释:

  1. CMAKE_INSTALL_PREFIX就是项目中使用libtorch的目录
  2. make -j4,千万注意不要直接写成make -j,默认使用所有核的话,编译到8x%占用的内存会陡增导致编译卡住甚至死机
  3. make install成功之后
    在这里插入图片描述

4. 编译好之后使用

(1)proto

通过上述方式编译生成的libtorch会默认安装一个protoc,可能和已安装版本不一致;
会导致proto编译生成失败,比如报错
xxx.pb.h: #error this file was generated by an older version of protoc …

在这里插入图片描述

需要删除其中一个版本,删除方式参考文章 
https://blog.csdn.net/baidu_35692628/article/details/121526178

(2)CMakeLists.txt使用

set(CMAKE_PREFIX_PATH /opt/libtorch) 设置libtorch路径
include_directories( 包含libtorch头文件等

 


【参考文章】
libtorch编译c++版本
pytorch c++17重编libtorch
linux下源码编译生成libtorch
python setup.py install方式尝试
设置c++17编译选项

created by shuaixio, 2023.06.01


http://www.ppmy.cn/news/156691.html

相关文章

浅谈React.memo函数

背景 在React中,组件渲染的是最常有的事情。但是,有部分的渲染是不必要的,是可以避免的。 在react的一般规则中,只有父组件的某一个状态改变,父组件下面所有的子组件不论是否使用了该状态,都会进行重新渲…

acc 蓝牙_蓝牙耳机acc什么意思

大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答。 蓝牙耳机acc是杜比实验室为音乐社区提供的技术,是一种高压缩比的编码算法。 蓝牙耳机就是将蓝牙技术应用在免持耳机上,让使用者可以免除恼人电线的牵绊&…

蓝牙耳机连接macbook无声音

现象:蓝牙耳机连接Macbook,耳机没有声音。注意:是可以连接成功,但是声音仍是通过mac的外放输出的。 解决方案: 拔掉所有mac上的外设,无论是u盘还是雷电口。然后重启。尝试是否可以正常。 如果上面的方法不行。请关机&a…

E450连接蓝牙耳机

**1.正常情况下,右下角托盘有蓝牙的图标**2.如果没有这个蓝牙图标,那就要安装蓝牙驱动,驱动下载地址 https://think.lenovo.com.cn/support/driver/newdriversdownlist.aspx?ytpt&categoryid11942&CODENameThinkPadE450 安装 Intel …

电脑蓝牙耳机,蓝牙耳机能连笔记本吗_笔记本电脑怎么接蓝牙耳机吗-win7之家

近日有笔记本电脑用户想要连接蓝牙耳机来使用,可是却不知道蓝牙耳机能连笔记本吗?现在的很多笔记本电脑都自带蓝牙功能,所以无需额外硬件就可连接蓝牙耳机,如果你电脑中有自带蓝牙模块的话是可以连接的,下面就教大家笔…

蓝牙怎么调声音大小_苹果蓝牙耳机

摘要 腾兴网为您分享:湖北教育云app,贝才,网易云音乐格式转换器,买菜么,010editor,壹化网,延边百姓信息,联合平台,女生标准身高体重表图,党员责任岗,智慧大学&#xff0c…

蓝牙耳机降噪知识

蓝牙耳机上的降噪,根据原理可以分为以下几种。 1、被动降噪。 这个是指入耳式耳塞,由于耳塞是通过一个硅胶套塞入人耳的耳道的。所以有较好的隔离外界声音的作用。而且这个降噪是全频的,就是对从20赫兹到20K赫兹的声音都有效,而且…

蓝牙耳机最优秀的保养方法,别再担心你的蓝牙耳机寿命短了~

随着数码产品的不断更新换代,人们对于蓝牙耳机的需求也在不断的变化。首先就是对于耳机外观颜值的要求很高,其次就是保证音质的同时续航还要持久。市面上无线蓝牙耳机的款式也是层出不穷,很多人买到喜欢的蓝牙耳机最开始都是满心欢喜&#xf…