TensorRT入门(Windows上安装与VisualStudio项目配置)

安装

TensorRT的Document这里有,可以按照这个实现Getting Start。这里将在Windows上安装的主要步骤记录下来。

  • 下载地址:NVIDIA TensorRT 8.x Download,选择对应的版本下载下来

  • 解压出来得到TensorRT-8.x.x.x,并放置到一个目录下作为安装目录

  • /lib写入PATH变量,如D:\deploy_tools\TensorRT-8.4.0.6\lib

  • 打开/python目录,里面有很多whl文件,选择python对应版本的whl使用pip进行安装

    cd /d D:\deploy_tools\TensorRT-8.4.0.6\python
    pip install tensorrt-8.4.0.6-cp37-none-win_amd64.whl
    

    这里安装了python3.7版本的,如果是使用其他的python版本应当替换文件名。

完成以上步骤安装就可以了。这个时候可以使用/sample/sampleMNIST这个项目试验一下,打开文件夹下面的.sln文件,使用Visual Studio生成一下文件即可。生成得到的可执行文件放在了/bin文件夹下。可以尝试执行一下,得到类似如下的信息就表示安装成功了。

&&&& RUNNING TensorRT.sample_mnist [TensorRT v8400] # sample_mnist.exe
[03/02/2022-16:35:11] [I] Building and running a GPU inference engine for MNIST
[03/02/2022-16:35:11] [I] [TRT] [MemUsageChange] Init CUDA: CPU +246, GPU +0, now: CPU 3815, GPU 2013 (MiB)
[03/02/2022-16:35:12] [I] [TRT] [MemUsageSnapshot] Begin constructing builder kernel library: CPU 3877 MiB, GPU 2013 MiB
[03/02/2022-16:35:12] [I] [TRT] [MemUsageSnapshot] End constructing builder kernel library: CPU 3890 MiB, GPU 2013 MiB
[03/02/2022-16:35:12] [W] [TRT] TensorRT was linked against cuBLAS/cuBLAS LT 10.2.2 but loaded cuBLAS/cuBLAS LT 10.0.0
[03/02/2022-16:35:12] [I] [TRT] [MemUsageChange] Init cuBLAS/cuBLASLt: CPU +113, GPU +34, now: CPU 3957, GPU 2047 (MiB)
[03/02/2022-16:35:12] [I] [TRT] [MemUsageChange] Init cuDNN: CPU +206, GPU +68, now: CPU 4163, GPU 2115 (MiB)
[03/02/2022-16:35:12] [W] [TRT] TensorRT was linked against cuDNN 8.3.2 but loaded cuDNN 8.0.5
[03/02/2022-16:35:12] [I] [TRT] Local timing cache in use. Profiling results in this builder pass will not be stored.
[03/02/2022-16:35:13] [I] [TRT] Detected 1 inputs and 1 output network tensors.
[03/02/2022-16:35:13] [I] [TRT] Total Host Persistent Memory: 10784
[03/02/2022-16:35:13] [I] [TRT] Total Device Persistent Memory: 1024
[03/02/2022-16:35:13] [I] [TRT] Total Scratch Memory: 0
[03/02/2022-16:35:13] [I] [TRT] [MemUsageStats] Peak memory usage of TRT CPU/GPU memory allocators: CPU 1 MiB, GPU 886 MiB
[03/02/2022-16:35:13] [I] [TRT] [BlockAssignment] Algorithm ShiftNTopDown took 0.0757ms to assign 3 blocks to 11 nodes requiring 57860 bytes.
[03/02/2022-16:35:13] [I] [TRT] Total Activation Memory: 57860
[03/02/2022-16:35:13] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in building engine: CPU +0, GPU +4, now: CPU 0, GPU 4 (MiB)
[03/02/2022-16:35:13] [I] [TRT] [MemUsageChange] Init CUDA: CPU +0, GPU +0, now: CPU 4238, GPU 2121 (MiB)
[03/02/2022-16:35:13] [I] [TRT] Loaded engine size: 1 MiB
[03/02/2022-16:35:13] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in engine deserialization: CPU +0, GPU +1, now: CPU 0, GPU 1 (MiB)
[03/02/2022-16:35:13] [I] [TRT] [MemUsageChange] TensorRT-managed allocation in IExecutionContext creation: CPU +0, GPU +0, now: CPU 0, GPU 1 (MiB)
[03/02/2022-16:35:13] [I] Input:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@=   ++++#++=*@@@@@
@@@@@@@@#.            *@@@@@
@@@@@@@@=             *@@@@@
@@@@@@@@.   .. ...****%@@@@@
@@@@@@@@: .%@@#@@@@@@@@@@@@@
@@@@@@@%  -@@@@@@@@@@@@@@@@@
@@@@@@@%  -@@*@@@*@@@@@@@@@@
@@@@@@@#  :#- ::. ::=@@@@@@@
@@@@@@@-             -@@@@@@
@@@@@@%.              *@@@@@
@@@@@@#     :==*+==   *@@@@@
@@@@@@%---%%@@@@@@@.  *@@@@@
@@@@@@@@@@@@@@@@@@@+  *@@@@@
@@@@@@@@@@@@@@@@@@@=  *@@@@@
@@@@@@@@@@@@@@@@@@*   *@@@@@
@@@@@%+%@@@@@@@@%.   .%@@@@@
@@@@@*  .******=    -@@@@@@@
@@@@@*             .#@@@@@@@
@@@@@*            =%@@@@@@@@
@@@@@@%#+++=     =@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@

[03/02/2022-16:35:13] [I] Output:
0:
1:
2:
3:
4:
5: **********
6:
7:
8:
9:

&&&& PASSED TensorRT.sample_mnist [TensorRT v8400] # sample_mnist.exe

在这里遇到一个问题,我这边电脑是安装了cuda10的,并且cuda的路径是在PATH中的,但是当我第一次执行sample_mnist.exe文件的时候发现报错Unable to load library:cublas64_10.dll。也就是说没有找到cublas64_10.dll,于是我进入了/v10.0/bin目录下,发现有一个cublas64_100.dll文件,应该就是需要的cublas64_10.dll文件,于是复制了一个新的cublas64_100.dll,并且重命名为了cublas64_10.dll。就不报这个错误了。

&&&& RUNNING TensorRT.sample_mnist [TensorRT v8400] # sample_mnist.exe
[03/02/2022-16:40:37] [I] Building and running a GPU inference engine for MNIST
[03/02/2022-16:40:37] [I] [TRT] [MemUsageChange] Init CUDA: CPU +254, GPU +0, now: CPU 5106, GPU 2013 (MiB)
[03/02/2022-16:40:37] [I] [TRT] [MemUsageSnapshot] Begin constructing builder kernel library: CPU 5171 MiB, GPU 2013 MiB
[03/02/2022-16:40:37] [I] [TRT] [MemUsageSnapshot] End constructing builder kernel library: CPU 5175 MiB, GPU 2013 MiB
[03/02/2022-16:40:37] [E] [TRT] 6: [libLoader.h::nvinfer1::rt::DynamicLibrary::DynamicLibrary::49] Error Code 6: Internal Error (Unable to load library: cublas64_10.dll)
[03/02/2022-16:40:37] [E] [TRT] 2: [builder.cpp::nvinfer1::builder::Builder::buildSerializedNetwork::619] Error Code 2: Internal Error (Assertion engine != nullptr failed. )
&&&& FAILED TensorRT.sample_mnist [TensorRT v8400] # sample_mnist.exe

这里的8.4.0.6版本的TensorRT需要cuda10.2+cudnn8的环境。很遗憾我这边电脑之前装的是cuda10.0+cudnn7的环境,还缺cudnn64_8.dll,我发现/v10.0/bin里面有一个cudnn64_7.dll,尝试了一下将cudnn64_7.dll复制一个重命名为cudnn64_8.dll也是可以的,在运行的时候会有信息提醒,但是可以运行下去。

sample_mnist是使用caffe框架模型进行的,配置好以上信息应该是没有问题了,但是如果使用其他框架的模型,如tensorflow,则可能出现无法加载cublasLt64_10.dll的情况。不太清楚是不是由于cuda版本的原因,在网上下载了一个这个文件,也是放到/v10.0/bin就可以了。在这个地址下载就好:dll4free

另外一个小问题是发现这个sampleMNIST项目打了断点也没有调试,还是直接运行完了项目,打开项目项目属性-> 链接器 -> 调试 -> 生成调试信息中的false修改为优化以便于调试(/DEBUG)就好了。这样就可以慢慢研究tensorRT是如何进行的了。

如果需要使用到Tensorflow或者PyTorch框架的话,需要使用到uff,graphsurgeononnx_graphsurgeon的库文件,需要额外安装一下对应的.whl文件:

python3 -m pip install \graphsurgeon\graphsurgeon-0.4.5-py2.py3-none-any.whl
python3 -m pip install \uff\uff-0.6.9-py2.py3-none-any.whl
python3 -m pip install \onnx_graphsurgeon\onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl

在Visual Studio中创建自己的项目

在Visual Studio项目中创建自己的项目可以尝试将samples文件夹下的项目复制一个后来修改,也可以从零开始创建。无非就是将需要的includelib添加进去。

  • /lib$(CUDA_PATH)\lib\x64添加到VC++ Directories > Executable Directories

  • /include 添加到 C/C++ > General > AdditionalDirectories

  • Linker > Input > Additional Dependencies中添加以下所有的库文件:

    • nvinfer.lib
    • nvinfer_plugin.lib
    • nvonnxparser.lib
    • nvparsers.lib
    • cudnn.lib
    • cublas.lib
    • cudart.lib
  • (Optional) 完成以上配置后将sample_mnist.cpp文件内容复制到项目中发现有一些include问题,这个时候如果需要使用到他们的一些函数作为支持的话,还需要在C/C++ > General > AdditionalDirectories中添加:

    • /samples/common
    • /samples/common/windows
    • $(CUDA_PATH)\include
  • (Optional)使用sample_mnist.cpp时候,由于使用到了logger.hgetopt.h中的相关函数实现,需要将logger.cpp以及getopt.c文件添加到项目的源文件中。

  • (Optional)编译sample_mnist.cpp的时候报localtime不安全的问题,在C/C++ > 预处理器 > 预处理器定义中添加_CRT_SECURE_NO_WARNINGS即可

  • (Optional)编译sample_mnist.cpp的时候报无法从const char* 转化为LPCWSTR的问题,将常规 > 字符集修改为<从父级项目或默认设置继承>,点击应用后应该显示一个空的格子,既不要是Unicode,也不要是多字节字符。

你可能感兴趣的:(深度学习,tensorflow,深度学习)