【TensorRT】自定义层插件plugin的使用
官网中给了几个关于插件plugin的使用,只有现成的教程,比如:
TensorRT&Sample&Python[fc_plugin_caffe_mnist]
TensorRT学习笔记5 - 运行fc_plugin_caffe_mnist
但是,总有你预想不到的情况发生。
接下来将结合官网例子:samples/tensorRT_sample/samples/python/fc_plugin_caffe_mnist
来实操一下。
(文件中有README文件,有详细说明的哦)
推荐参考阅读:
pybind11的官方手册
cmake官方手册
安装依赖
我们先看.h,一般需要这些库在你装好tensorrt之后都会有装的,楼主缺了一个pybind11的库需要安装详细看这:pybind11使用
安装完之后,我们就可以进行下一步了
编译链接pyFullyConnected.cpp
我们先执行下面的步骤:
cd /your/TensorRT/path/samples/python/fc_plugin_caffe_mnist
mkdir build & pushd build
cmake ..
make
popd
sudo python3 sample.py -d /home/user/tensorrt_tar/TensorRT/data/
一般来说是没问题的,但是报错他真的就是说来就来了。。。
错误汇总
-
cmake:补不到库: 一般先会是说找不到各种各样的库,我们就不直接cmake,而是选择带参数的cmake
cmake .. -DPYBIND11_DIR=/usr/local/pybind11/
-DCUDA_ROOT=/usr/local/cuda-9.2/
-DPYTHON3_INC_DIR=/usr/include/python3.6/
-DNVINFER_LIB=/path/to/libnvinfer.so -DTRT_INC_DIR=/path/to/tensorrt/include/
-
cmake:No SOURCES given to target: 怎么可能没有源文件呢,肯定是路径出问题啦,我们进入cmakelist.txt文件修改下
将原先的${CMAKE_SOURCE_DIR}路径注释掉,修改为我们的相对路径,如下:
# file(GLOB_RECURSE SOURCE_FILES ${CMAKE_SOURCE_DIR}/plugin/*.cpp)
file(GLOB_RECURSE SOURCE_FILES ./*.cpp)
-
cmake成功!奥利给
-
/usr/bin/ld: cannot find /usr/local/cuda-10.0/lib64: File format not recognized
/usr/bin/ld: cannot find /home/winner/TensorRT-6.0.1.5/lib: File format not recognized
error: ld returned 1 exit status
很简单,看报错信息,查看一下是哪里的路径,原来是这里:
我们cmake的时候没有指定是哪一个库,所以在cmake的时候带上指定路径的参数就行了(修改后指定文件的cmake结果)
康康我的,把有问题的库全部指定出来:cmake .. -DCUDA_ROOT=/usr/local/cuda-10.0 -DNVINFER_LIB=/home/winner/TensorRT-6.0.1.5/lib/libnvinfer.so -D_NVINFER_PLUGIN_LIB=/home/winner/TensorRT-6.0.1.5/lib/libnvinfer_plugin.so -D_NVPARSERS_LIB=/home/winner/TensorRT-6.0.1.5/lib/ -D_TRT_INC_DIR=/home/winner/TensorRT-6.0.1.5/include/NvInfer.h -DNVPARSERS_LIB=/home/winner/TensorRT-6.0.1.5/lib/libnvparsers.so -D_CUDNN_LIB=/usr/local/cuda-10.0/lib64/libcudnn.so -D_CUDNN_INC_DIR=/usr/local/cuda-10.0/include/
make
-
from build import fcplugin,ImportError: generic_type: type “FCPluginFactory” referenced unknown base type "nvcaffeparser1::IPluginFactoryExt"
这个应该是最大的坑了!!!!文件都生成好了,但是就是import不了,nmd为什么???
然后,果然还是在官网的论坛找到解决的方法,pybind11版本问题!!!为什么这些人都不喜欢把版本写明,让我们一个个去摸索????????????????????????????????????????
[error] deserialize_cuda_engine(): incompatible funtion arguments in sample fc_plugin_caffe_mnist
坑又来了,要是用cmake就会遇到pytest检测不到的问题,这时候就直接用他自带的工具安装,还要把你之前build不成功的文件删除掉。
sudo git clone -b v2.2.3 https://github.com/pybind/pybind11.git
sudo python3 setup.py build
sudo python3 setup.py install
之后在build文件夹生成两个.so二进制文件
ok!收工,接下来楼主打算搞prelu的python-api,坚持就是胜利!