文章目录
- 1、安装TensorRT
 - 1.1、下载TensorRT压缩包
 - 1.2、配置环境变量
 
- 2、测试
 - 2.1、测试源码
 - 2.2、编译源码
 
1、安装TensorRT
TensorRT是针对NVIDIA显卡设备的加速方案,你要使用TensorRT则证明你有一定的深度学习基础,那么在你的Ubuntu上配置好显卡驱动、CUDA以及cuDNN一定是小菜一碟。
现在假设你已经配置好显卡驱动、CUDA以及cuDNN了,现在让我们来配置TensorRT。其实步骤也很简单:1)下载TensorRT压缩包并解压;2)配置环境变量;
1.1、下载TensorRT压缩包
在NVIDIA TensorRT Download
 可以看到很多版本,我们选择最新的8.x的版本。点击进入后勾选I Agree To The ...后就会显示所有的8.x版本。EA即early access抢先体验版,GA是general availability即通用稳定版本。很明显我们优先选择GA版本。
 
 我们选择TAR包安装方式,可以看到针对Ubuntu(Linux x86_64)有两种选择,区别在于不同的CUDA版本。找到适配自己CUDA版本的TAR Package下载。然后找一个长期存放TensorRT解压文件的地方解压(解压命令:tar -zxvf TensorRT.tar.gz)。
 
1.2、配置环境变量
在上文的TensorRT文件夹中,提供了库文件供开发者直接使用,所以我们将其库文件的路径加入到环境变量,方便开发时使用。
解压后的目录结构如下,我们需要设置环境变量指向lib文件夹(其中python是whl文件,可以通过pip安装后在python使用tensorrt):
vim ~/.bashrc
# 在最后添加:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your_tensorrt_path/lib
# 保存退出后
source ~/.bash
 
或者对当前终端临时变量设置:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:your_tensorrt_path/lib
 
2、测试
2.1、测试源码
在测试环节,我们将尝试使用TensorRT的IBuilder创建一个builder,如果能够创建成功不报错,说明环境配置上没有问题。
 代码内容如下:
#include <iostream>
#include "NvInfer.h"
// 实现一个简单的Logger类
class Logger : public nvinfer1::ILogger {
    void log(Severity severity, const char* msg) noexcept override {
        if(severity<=Severity::kWARNING){
            std::cout<<msg<<std::endl;
        }
    }
} gLogger;
int main() {
    // 通过创建一个builder验证TensorRT是否配置成功
    nvinfer1::IBuilder* builder = nvinfer1::createInferBuilder(gLogger);
    if (!builder) {    // 如果builder没有被成功创建
        std::cerr << "Failed to create TensorRT builder" << std::endl;
        return 1;
    }
    // 释放资源
    builder->destroy();
    return 0;
}
 
2.2、编译源码
编译上面的源码有两种方式:g++或者CMakeLists.txt
- g++方式
编译命令如下:g++ -o main TensorRT_test.cpp -I/usr/local/cuda/include -L/usr/local/cuda/lib64 -I/home/aistudio/TensorRT-8.6.1.6/include -L/home/aistudio/TensorRT-8.6.1.6/lib -lnvinfer- -o:上面源码的名称为
TensorRT_test.cpp,编译后的文件为main - -I/usr/local/cuda/include:指定了cuda的头文件所在
 - -L/usr/local/cuda/lib64:指定了cuda的库文件所在
 - -I/home/aistudio/TensorRT-8.6.1.6/include:指定了TensorRT的头文件所在(指向你解压TensorRT的路径)
 - -L/home/aistudio/TensorRT-8.6.1.6/lib:指定了TensorRT的库文件所在
 - -lnvinfer:在TensorRT_test.cpp使用了lnvinfer这样的库
 
 - -o:上面源码的名称为
 - CMakeLists.txt方式
CMakeLists.txt的内容如下:cmake_minimum_required(VERSION 3.5) project(tensorrt_test) # 指定CUDA的头文件和库文件 include_directories(/usr/local/cuda/include) link_directories(/usr/local/cuda/lib64) # 指定TensorRT的头文件和库文件 include_directories(/home/aistudio/TensorRT-8.6.1.6/include) link_directories(/home/aistudio/TensorRT-8.6.1.6/lib) # 添加可执行文件 add_executable(main TensorRT_test.cpp) # 链接TensorRT库 target_link_libraries(main nvinfer) 
编译成功后会产生main文件,通过./main执行后会出现:
 
 红色框不是报错,而是提示信息:Lazy Loading。TensorRT中提供了很多模块,而我们的程序一般只用到部分,所以没有必要一次性全部加载所有模块。Lazy Loading帮助我们仅加载需要使用到的模块,每个模块将在首次使用该模块中的变量或内核时加载,即延迟加载。上面的信息是告诉我们没有启用Lazy Loading,我们可以通过 export CUDA_MODULE_LOADING=LAZY为当前的终端启用Lazy Loading,后续再执行main就没有提示信息了。



















