@H_403_1@ 在Ubuntu14.04 上安装TensorRT2.1有两种方法:(1)、通过.deb直接安装;(2)、通过Tar文件安装。这里通过Tar文件安装。
@H_403_1@ 安装步骤:
@H_403_1@ 1. 安装CUDA 8.0,可参考:http://www.jb51.cc/article/p-yikgclcf-vc.html;
@H_403_1@ 2. 从 https://developer.nvidia.com/nvidia-tensorrt-download下载 TensorRT-2.1.2.x86_64.cuda-8.0-14-04.tar.bz2 ;
@H_403_1@ 3. 从 https://developer.nvidia.com/rdp/cudnn-download下载 cudnn-8.0-linux-x64-v6.0.tgz;
@H_403_1@ 4.通过以下命令解压缩cudnn,会下当前路径生成一个cuda目录,包含cudnn.h头文件和cudnn动态库、静态库;并通过 sudo cp -a 命令将cuda目录下的内容copy到/usr/local/cudnn/cudnn8.0_v6.0目录下;
tar -xvzf cudnn-8.0-linux-x64-v6.0.tgz@H_403_1@ 5. 通过以下命令解压缩TensorRT2.1,会在当前路径生成一个TensorRT-2.1.2目录,里面包括bin、data、doc、include、lib、samples、targets目录,存放着TensorRT2.1的头文件、动态库、doc、sample、测试数据等内容;在TensorRt-2.1.2/targets/x86_64-linux-gun/samples目录下,执行make命令,正常情况下会在TensorRt-2.1.2/targets/x86_64-linux-gun/bin目录下生成所有samples的执行文件,可说明本机是满足TensorRT运行要求的。并将TensorRT-2.1.2/include 和TensorRT-2.1.2/targets/x86_64-linux-gun/lib目录通过 sudo cp -a 命令将其copy到/usr/local/tensorrt/tensorrt2.1_v6.0目录下;
tar xf TensorRT-2.1.2.x86_64.cuda-8.0-14-04.tar.bz2@H_403_1@ 6. 为了验证其正确性,通过CMakeLists.txt对samples中的sampleMNIST.cpp文件进行编译,结果可以正常生成执行文件,CMakeLists.txt内容如下:
# CMake file for TensorRt_Test # 设定依赖的CMake版本 CMAKE_MINIMUM_required(VERSION 3.2) # 指定项目名称 PROJECT(TensorRT_Test) # 搜索指定的OpenCV外部依赖库头文件和库文件位置 FIND_PACKAGE(OpenCV 2) # 搜索指定的CUDA外部依赖库头文件和库文件位置 FIND_PACKAGE(CUDA) # 打印相关信息,CMAKE_CURRENT_SOURCE_DIR指的是当前处理的CMakeLists.txt所在的路径 MESSAGE(STATUS "current path: ${CMAKE_CURRENT_SOURCE_DIR}") # 定义用户自定义变量 SET(PATH_CPP_FILES ./../../demo/TensorRT_Test) #MESSAGE(STATUS "cpp files path: ${PATH_CPP_FILES}") SET(PATH_CU_FILES ./../../demo/TensorRT_Test) # 递归查询所有匹配的文件:*.cpp和*.cu FILE(GLOB_RECURSE CPP_LIST ${PATH_CPP_FILES}/*.cpp) FILE(GLOB_RECURSE CU_LIST ${PATH_CU_FILES}/*.cu) #MESSAGE(STATUS "cpp list: ${CPP_LIST}") #MESSAGE(STATUS "cu list: ${CU_LIST}") # 使CMake支持C++11特性 SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu++0x") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") # 指定CUDA头文件的搜索路径 INCLUDE_DIRECTORIES(/usr/local/cuda-8.0/include) # 指定TensorRT头文件的搜索路径 INCLUDE_DIRECTORIES(/usr/local/tensorrt/tensorrt2.1_v6.0/include) # 指定cudnn头文件的搜索路径 INCLUDE_DIRECTORIES(/usr/local/cudnn/cudnn8.0_v6.0/include) # 指定OpenCV头文件搜索路径 INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) #MESSAGE(STATUS "opencv include directory: ${OpenCV_INCLUDE_DIRS}") # 指定TensorRT动态库搜索路径 LINK_DIRECTORIES(/usr/local/tensorrt/tensorrt2.1_v6.0/lib) # 指定cudnn动态库搜索路径 LINK_DIRECTORIES(/usr/local/cudnn/cudnn8.0_v6.0/lib64) # 使CUDA NVCC 编译器支持C++11特性 LIST(APPEND CUDA_NVCC_FLAGS -std=c++11;-O2) LIST(APPEND CUDA_NVCC_FLAGS -Xcompiler;-fPIC) SET(CUDA_PROPAGATE_HOST_FLAGS OFF) LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_50,code=sm_50) LIST(APPEND CUDA_NVCC_FLAGS -gencode arch=compute_60,code=sm_60) # 编译可执行程序,即生成可执行文件TensorRT_Test #ADD_EXECUTABLE(TensorRT_Test ${CPP_LIST} ${CU_LIST}) # 不包括编译*.cu文件,需要使用CUDA_ADD_EXECUTABLE命令 CUDA_ADD_EXECUTABLE(TensorRT_Test ${CPP_LIST} ${CU_LIST}) # 用来为target添加需要链接的共享库,指定工程所用的依赖库,包括动态库和静态库 TARGET_LINK_LIBRARIES(TensorRT_Test ${OpenCV_LIBS} nvcaffe_parser nvinfer cudnn) #MESSAGE(STATUS "opencv libs: ${OpenCV_LIBS}") MESSAGE(STATUS "**************************************")
@H_403_1@ 以下内容翻译于: http://docs.nvidia.com/deeplearning/sdk/tensorrt-user-guide/index.html
@H_403_1@ 1. TensorRT 2.1支持的layer包括:Convolution,ReLU,Sigmoid,TanH,Pooling,Power,BatchNorm,ElementWise(Eltwise),LRN,InnerProduct(FullyConnected),SoftMax,Scale,and Deconvolution layers.
@H_403_1@ 2. TensorRT 2.1不支持的layer包括:Deconvolution groups, Dilated convolutions,PReLU,Leaky ReLU,other than per-channel scaling,ElementWise (Eltwise) with more than two inputs.
@H_403_1@ 3. TensorRT的NvCaffeParser实现从Caffe的layer到TensorRT的layer,NvCaffeParser不支持Caffe prototxt的传统格式。
@H_403_1@ 4. TensorRT关键概念:
@H_403_1@ 网络定义:一个网络是由一系列layer和一组tensor组成。
@H_403_1@ 层(layer): 每一个layer从一组输入tensor计算一组输出tensor,layer是有参数的,如Convolution size,stride等。
@H_403_1@ tensor: tensor既可以是网络的输入,也可以是layer的输出. tensor具有指定精度的数据类型,如16位/36位浮点数,及维度,如3维度,通道数、宽度、高度.输入tensor的尺寸由应用程序定义,输出tensor的尺寸由builder推理出来。
@H_403_1@ 每个layer和tensor都有一个名称。使用NvCaffeParser时,tensor和layer的名称将从Caffe的prototxt文件中获取。
@H_403_1@ 5. TensorRT工作流:用户通过神经网络训练生成一个model --> 导入已训练的model进TensorRT --> 优化网络产生一个Plan --> 执行推理。
@H_403_1@ Plan也可以被序列化存储到磁盘,后面可以重新load Plan进TensorRT,可省去再次执行优化网络的操作。
@H_403_1@ 6. 构建阶段:在构建阶段,工具包通过网络定义,执行优化,并产生推理引擎(inference engine). 构建阶段很占用时间,尤其在嵌入式平台时,因此,一个典型的应用程序将构建一次推理引擎,然后将其序列化以备后用。
@H_403_1@ 构建阶段在layer上执行的优化包括:消除没有用到的输出层; convolutions,bias,ReLU layer的融合(fusion)操作; 相似的参数和相同的源tensor执行聚合(aggregation)操作;通过将layer的输出引导到最终目的地,省略(elision)连接层;运行layers以从其内核目录中选择最快的;内存优化。
@H_403_1@ 7. 执行阶段:执行已优化的引擎; 在GPU上,使用引擎执行推理任务。
@H_403_1@ GitHub:https://github.com/fengbingchun/CUDA_Test