环境
- CUDA 10.2
- cudnn 7.6.5
- Ubuntu18.04
1. libtorch安装
1.1 针对Jetson平台
使用Nvidia官方给出的.whl安装方式:
- 安装配置以及Cmakelists的编写参考在Jetson NANO上使用libtorch进行C++模型推理以及编译OpenCV。
- 直接下载已经为Jetson系列编译好的torch Jetson forums
1.1.1 踩过的坑:pytoch源码方式 (不推荐)
1.1.1.1 pytoch官方github
1.1.2.2. 升级CMAKE方法,使之不低于3.18
, $ cmake --version
查看版本
Issue 1
Nvidia平台`ARM64`,那么`libtorch`必须如上面所示安装,不能直接使用下面提到的直接使用编译好libtorch。不然会出现错误. `/home/nvidia/3rdParty/libtorch/lib/libtorch.so: error adding symbols: File in wrong format`
1.2 以下内容针对x86平台
使用编译好的libtorch
注意下载Linux版本的(不是windows版本),且与自己的torch相对应的版本,与自己cuda版本相对应。我torch是1.10.0版本,cuda-10.2
转载这篇文章附有下载地址
对于最新版本建议直接去官网下载Stable->Linux->LibTorch->C++/Java->Cuda11.x
# cuda10.2版本 且 C++11以后
https://download.pytorch.org/libtorch/cu102/libtorch-cxx11-abi-shared-with-deps-1.10.0%2Bcu102.zip
# 下载后直接解压
unzip libtorch-cxx11-abi-shared-with-deps-1.10.0+cu102.zip
TensorRT安装最简单方式(推荐方式!)
官网deb方式安装指南
NVIDIA TensorRT8.x
以下是旧的安装方式
TensorRT-7.1.3.4安装
- 到tensorRT官网选择自己电脑合适的版本
使用源码下载TensorRT-7.1.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz
,不要使用deb方式,为后续方便写CmakeLists.txt
。 - 直接解压
TensorRT-8.4.1.5安装,下载tar包很麻烦
我也尝试了类似TensorRT-7.1.3.4的下载tar包,然后将路径指向TensorRT-8.4.1.5的方式。但发现无法依旧出现无法链接到库文件的问题,也就是如下报错
/usr/bin/ld: cannot find -lnvinfer
/usr/bin/ld: cannot find -lnvonnxparser
然后两种方法使能路径,
- 一个是直接指定
export LD_LIBRARY_PATH=~/3rdParty/TensorRT-8.4.1.5/lib:$LD_LIBRARY_PATH export LIBRARY_PATH=~/3rdParty/TensorRT-8.4.1.5/lib::$LIBRARY_PATH
- 另一种是把lib和头文件拷进系统目录
cd ~/3rdParty/TensorRT-8.4.1.5 sudo cp -r lib/* /usr/local/lib/ sudo cp -r include/* /usr/local/include/
此处参考了ubuntu18.04+cuda10.2+tensorrt8.4.1.5配置安装。关于python在TensorRT的使用,也可参照此教程。
最后采用deb安装方式
- download
nv-tensorrt-repo-ubuntu1804-cuda11.6-trt8.4.1.5-ga-20220604_1-1_amd64.deb
from nvidia official - sudo dpkg- i nv-tensorrt-repo-ubuntu1804-cuda11.6-trt8.4.1.5-ga-20220604_1-1_amd64.deb
- sudo apt-key add /var/nv-tensorrt-repo-ubuntu1804-cuda11.6-trt8.4.1.5-ga-20220604/9a60d8bf.pub
- sudo apt-get update
- sudo apt-get install tensorrt=8.4.1.5-1+cuda11.6
另一种解决链接不到的方案是,需要将变量值写入/etc/ld.so.conf.d
目录中,可以新增一个.conf
文件,然后
sudo ldconfig /etc/ld.so.conf
issue 1
发现使用deb安装的TensorRT8.4.1.5-1
对于https://github.com/yuefanhao/SuperPoint-SuperGlue-TensorRT
的程序会报错,
/home/zph/projects/SuperPoint-SuperGlue-TensorRT-CIUS/src/super_point.cpp:86:112: required from here
/usr/include/c++/7/bits/shared_ptr_base.h:588:8: error: ‘virtual nvinfer1::ICudaEngine::~ICudaEngine()’ is protected within this context
delete __p;
^~~~~~
In file included from /usr/local/include/NvInfer.h:53:0,
from /home/zph/projects/SuperPoint-SuperGlue-TensorRT-CIUS/include/super_point.h:11,
from /home/zph/projects/SuperPoint-SuperGlue-TensorRT-CIUS/src/super_point.cpp:4:
/usr/local/include/NvInferRuntime.h:1297:13: note: declared protected here
都是delete protect member
的C++报错。但是下载源码tensorrt-8.4.1.5.linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz,然后在cmakelists.txt指向这个包就不会报错了。如下
set(TENSORRT_ROOT $ENV{HOME}/3rdParty/TensorRT-8.4.1.5)
include_directories(
${TENSORRT_ROOT}/include # wzy
)
libtorch和TensorRT-7.1.3.4使用
把港科大Omni-swarm
的示例CmakeLists.txt
代码贴出来,这里已经改成我的电脑路径。
cmake_minimum_required(VERSION 2.8.3)
project(swarm_loop)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_BUILD_TYPE "Release")
set(CMAKE_CXX_FLAGS_RELEASE "-g -O3 -Wall -Wno-deprecated-declarations -Wno-format")
set(USE_TENSORRT on)
find_package(catkin REQUIRED COMPONENTS
roscpp
rosmsg
rospy
std_msgs
cv_bridge
swarm_msgs
message_generation
camera_models
message_filters
vins
)
SET("OpenCV_DIR" "/usr/local/share/OpenCV/")
find_package(OpenCV 3.4 REQUIRED)
find_package(Eigen3 REQUIRED)
find_package(lcm REQUIRED)
# find_package(Backward)
set(TENSORRT_ROOT $ENV{HOME}/3rdParty/TensorRT-7.1.3.4)
if (USE_TENSORRT)
set(Torch_DIR "$ENV{HOME}/3rdParty/libtorch/share/cmake/Torch")
find_package(Torch REQUIRED)
include_directories("$ENV{HOME}/3rdParty/yolo-tensorrt/modules/")
include_directories("$ENV{HOME}/3rdParty/TensorRT-7.1.3.4/include")
link_directories(${TENSORRT_ROOT}/lib)
link_directories("$ENV{HOME}/3rdParty/yolo-tensorrt/build/")
find_package(CUDA)
include_directories(${CUDA_INCLUDE_DIRS} ${TORCH_INCLUDE_DIRS})
add_definitions("-D USE_TENSORRT")
endif()
catkin_package(
INCLUDE_DIRS include
LIBRARIES loop_cnn
CATKIN_DEPENDS std_msgs cv_bridge roscpp rosmsg rospy swarm_msgs
#DEPENDS system_lib
)
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
/usr/local/include/
include
${catkin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
)
add_library(libswarm_loop
src/loop_cam.cpp
src/loop_detector.cpp
src/loop_net.cpp
src/loop_params.cpp
src/swarm_loop.cpp
src/loop_utils.cpp
)
add_library(${PROJECT_NAME}_nodelet
src/swarm_loop_nodelet.cpp
)
add_executable(${PROJECT_NAME}_node
src/swarm_loop_node.cpp
)
add_executable(${PROJECT_NAME}_spy
src/swarm_loop_spy.cpp
)
add_executable(${PROJECT_NAME}_net_tester
src/loop_network_tester.cpp
)
set_property(TARGET ${PROJECT_NAME}_nodelet PROPERTY CXX_STANDARD 14)
set_property(TARGET ${PROJECT_NAME}_node PROPERTY CXX_STANDARD 14)
set_property(TARGET libswarm_loop PROPERTY CXX_STANDARD 14)
if (USE_TENSORRT)
cuda_add_library(loop_cnn
src/superpoint_tensorrt.cpp
src/tensorrt_generic.cpp
src/mobilenetvlad_tensorrt.cpp
)
target_link_libraries(loop_cnn nvinfer nvinfer_plugin detector opencv_dnn)
add_executable(loop_tensorrt_test
src/loop_tensorrt_test.cpp
)
target_link_libraries(loop_tensorrt_test
loop_cnn
dw
${TORCH_LIBRARIES}
${OpenCV_LIBRARIES}
${catkin_LIBRARIES}
)
set_property(TARGET loop_cnn PROPERTY CXX_STANDARD 14)
endif()
add_dependencies(${PROJECT_NAME}_nodelet
${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_dependencies(${PROJECT_NAME}_spy
${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
if (USE_TENSORRT)
target_link_libraries(libswarm_loop
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${TORCH_LIBRARIES}
lcm
faiss
dw
loop_cnn
)
else()
target_link_libraries(libswarm_loop
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${TORCH_LIBRARIES}
lcm
faiss
dw
loop_cnn
)
endif()
target_link_libraries(${PROJECT_NAME}_nodelet
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${TORCH_LIBRARIES}
lcm
faiss
dw
libswarm_loop
)
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${TORCH_LIBRARIES}
lcm
dw
libswarm_loop
)
target_link_libraries(${PROJECT_NAME}_net_tester
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
${TORCH_LIBRARIES}
lcm
dw
libswarm_loop
)
target_link_libraries(${PROJECT_NAME}_spy
${catkin_LIBRARIES}
${OpenCV_LIBRARIES}
lcm
dw
libswarm_loop
)