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就没有提示信息了。