libtorch与tensorRT安装指南

环境

  • CUDA 10.2
  • cudnn 7.6.5
  • Ubuntu18.04

1. libtorch安装

1.1 针对Jetson平台使用Nvidia官方给出的.whl安装方式:

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安装

  1. tensorRT官网选择自己电脑合适的版本
    使用源码下载TensorRT-7.1.3.4.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz,不要使用deb方式,为后续方便写CmakeLists.txt
  2. 直接解压

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
)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值