懶人區:想直接安裝的能夠點這個連接。
---------------------------------分割線---------------
原因:
在官方的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