懒人区:想直接安装的能够点这个连接。
---------------------------------分割线---------------
原因:
在官方的Paddle-Inference-Demo中,建议Paddle版本>=1.7。
而我的能找到的资源最高的版本是Nvidia论坛的1.6.3版本的paddlepaddle-gpu。以及文档中提供的0.0.0版本(连接)。
https://forums.developer.nvidia.com/t/paddlepadd-gpu-1-6-3-for-jetson-nano-now-available/111655
在跑Demo的过程当中,发现文档中给出的版本没有Paddle-TensorRT的功能,虽然能够使用GPU加速。可是总感受有TensorRT但却用不上很膈应。
另外,Nvidia论坛放出的版本虽然支持TensorRT,可是版本低于Paddle-Inference-Demo要求的1.7以上。在查阅1.6和1.7的文档后,发现API有很大的不一样。
我根据1.6.3支持的API对yolov3的demo修改后,**发现推理的结果有很大出入。**参见我在Github提的issue。固然,在运行过程当中也会报model和lib版本不一致的错误。*推测是不一样版本支持的算子可能不同(或者实现)? *
html
并且,已有能搜到的教程彻底没有说起TensorRT的功能如何添加,我来填坑
python
在Jetson 上编译Paddle(带TensorRT):
1. Jetson nano环境
JetPack4.3 Found Paddle host system: ubuntu, version: 18.04.3 -- Found Paddle host system's CPU: 4 cores -- CXX compiler: /usr/bin/c++, version: GNU 7.5.0 -- C compiler: /usr/bin/cc, version: GNU 7.5.0
2. 编译前的准备
安装所需的依赖:linux
sudo pip install virtualenv sudo apt-get install python3.6-dev liblapack-dev gfortran libfreetype6-dev libpng-dev libjpeg-dev zlib1g-dev patchelf python3-opencv
对nano的设置c++
sudo nvpmodel -m 0 && sudo jetson_clocks #打开性能模式
#增长swap空间,防止爆内存 swapoff -a sudo fallocate -l 15G /swapfile sudo chmod 600 /var/swapfile sudo mkswap /swapfile sudo swapon /swapfile swapon -a sudo swapon --show#用来查看结果
ulimit -n 2048 #最大的文件打开数量
上方的设置必定要打开
,swap空间的大小能够根据本身存储卡的大小设置,建议8G及以上。 (稳妥一点,我用6G的时候爆过)git
更改文件:在NvInferRuntime.h中Class IPluginFactory里添加虚析构函数。若是还有报没有virtual的析构函数时改法是一致的。github
virtual ~IPluginFactory() {}
3. 编译流程
首先克隆Paddle的Github(慢的本身想办法 )。ubuntu
git clone https://github.com/paddlepaddle/paddle
查看可用的版本:bash
git tag
切换版本:ide
git checkout v2.0.0-alpha0 #我使用的是2.0.0,由于不是稳定版,名称不一样
安装NCCL函数
git clone https://github.com/NVIDIA/nccl.git make -j4 make install
创建虚拟python环境
这里有些说法:由于JetPack4.3的nano自带相应的cv2模块,不须要安装,只须要连接便可。所以我使用的是能够找到文件夹的方式去建立虚拟环境:
python3 -m venv name-of-env #在一个你能够记住的位置建立
连接cv2模块: 部份内容须要修改
ln -s /usr/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-aarch64-linux-gnu.so(本机cv2) path-to-venv/name-of-venv/lib/python3.6/site-packages/cv2.so
使TensorRT对虚拟环境python可见
参见下方连接:
https://docs.donkeycar.com/guide/robot_sbc/tensorrt_jetson_nano/
(注意你须要作的包括使CUDA、TensorRT都设为环境变量)
进入虚拟环境并测试cv2
source pd_env/bin/activate #test cv2 in the following lines ...
安装必要的包:
包括cython、wheel、numpy(版本啥的目前我没遇到不兼容的)
进入克隆的Paddle,安装依赖:
cd Paddle #安装运行Python Paddle须要的依赖(numpy,scipy etc) #此处安装会比较慢 pip install -r python/requirements.txt
Cmake设置:
这里须要说明如下:Paddle的编译中若是使用TensorRT的话须要按照要求把库整理成必定的格式(打包的方式我再写一篇博客),而且添加环境变量。在编译子图功能的时候会用到。固然也能够修改cmake文件夹中的tensorrt.cmake,但不保证必定能成。(我试过,但最后用的是建议的方式,见issue。**稳妥点的方法是适应源代码的配置修改本地配置。**整理成以下格式。
mkdir build cd build/
其余配置能够看文档:连接
cmake .. \ -DWITH_CONTRIB=OFF \ -DWITH_MKL=OFF \ -DWITH_MKLDNN=OFF \ -DWITH_TESTING=OFF \ -DCMAKE_BUILD_TYPE=Release \ -DON_INFER=ON \ -DWITH_PYTHON=ON \ -DWITH_XBYAK=OFF \ -DWITH_NV_JETSON=ON \ -DPY_VERSION=3.6 \ -DTENSORRT_ROOT=/home/dlinano/Paddle/TensorRT \ -DCUDA_ARCH_NAME=Auto
开始编译:
make -j4 # 生成预测lib,生成fluid_inference_install_dir 即C++预测库目录 make inference_lib_dist
4. 安装paddlepaddle-gpu
# 安装python 库 pip install -U python/dist/*.whl #仍是在build文件夹
5.跑通Demo
详情请见Paddle-Inference-Demo的GitHub,不抢别人的饭碗了 连接
效果:有兴趣的能够测测快了多少
中间使用到TRT的优化部分很是慢,请耐心等待。
Trouble Shooting
1.缺乏虚析构函数的问题(上面已经说起)
2.编译中没有错误提示挂了
paddle/fluid/operators/CMakeFiles/edit_distance_op.dir/edit_distance_op_generated_edit_distance_op.cu.o nvcc error : 'cicc' died due to signal 9 (Kill signal)
问题在于swap区不够,内存爆了。
3.Too many files
这个问题上面的设置中提到过,须要开启最大能打开的文件数。
To be continued.
References:
https://www.jianshu.com/p/a352f538e4a1 https://paddle-inference.readthedocs.io/en/latest/user_guides/source_compile.html https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html https://github.com/PaddlePaddle/Paddle-Inference-Demo/tree/master/python/yolov3