安装
TensorRT的Document这里有,可以按照这个实现Getting Start。这里将在Windows上安装的主要步骤记录下来。
-
下载地址:NVIDIA TensorRT 8.x Download,选择对应的版本下载下来 -
解压出来得到TensorRT-8.x.x.x ,并放置到一个目录下作为安装目录<install_path> -
将<install_path>/lib 写入PATH 变量,如D:\deploy_tools\TensorRT-8.4.0.6\lib -
打开<install_path>/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版本应当替换文件名。
完成以上步骤安装就可以了。这个时候可以使用<install_path>/sample/sampleMNIST 这个项目试验一下,打开文件夹下面的.sln 文件,使用Visual Studio生成一下文件即可。生成得到的可执行文件放在了<install_path>/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 ,于是我进入了<path_cuda>/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
另外一个小问题是发现这个sampleMNIST 项目打了断点也没有调试,还是直接运行完了项目,打开项目项目属性 -> 链接器 -> 调试 -> 生成调试信息 中的false修改为优化以便于调试(/DEBUG)就好了。这样就可以慢慢研究tensorRT是如何进行的了。
如果需要使用到Tensorflow或者PyTorch框架的话,需要使用到uff ,graphsurgeon 和onnx_graphsurgeon 的库文件,需要额外安装一下对应的.whl 文件:
python3 -m pip install <install_path>\graphsurgeon\graphsurgeon-0.4.5-py2.py3-none-any.whl
python3 -m pip install <install_path>\uff\uff-0.6.9-py2.py3-none-any.whl
python3 -m pip install <install_path>\onnx_graphsurgeon\onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl
在Visual Studio中创建自己的项目
在Visual Studio项目中创建自己的项目可以尝试将samples 文件夹下的项目复制一个后来修改,也可以从零开始创建。无非就是将需要的include 和lib 添加进去。
-
将<install_path>/lib 和$(CUDA_PATH)\lib\x64 添加到VC++ Directories > Executable Directories -
将<install_path>/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中添加:
<install_path>/samples/common <install_path>/samples/common/windows $(CUDA_PATH)\include -
(Optional)使用sample_mnist.cpp 时候,由于使用到了logger.h 和getopt.h 中的相关函数实现,需要将logger.cpp 以及getopt.c 文件添加到项目的源文件 中。 -
(Optional)编译sample_mnist.cpp 的时候报localtime 不安全的问题,在C/C++ > 预处理器 > 预处理器定义中添加_CRT_SECURE_NO_WARNINGS 即可 -
(Optional)编译sample_mnist.cpp 的时候报无法从const char* 转化为LPCWSTR的问题,将常规 > 字符集修改为<从父级项目或默认设置继承> ,点击应用后应该显示一个空的格子,既不要是Unicode,也不要是多字节字符。
|