NV Jetson 硬件編譯PaddlePaddle
**如果你的機(jī)器是用的NV Jetpack 4.2刷的機(jī)赞草,可以直接訪問(wèn)這個(gè)鏈接進(jìn)行下載預(yù)編譯lib https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_guide/inference_deployment/inference/build_and_install_lib_cn.html
**
此教程要給大家介紹如何在NV Jetson 硬件上使用Paddle inference 進(jìn)行預(yù)測(cè)德澈。本節(jié)中,主要介紹如何在Jetson硬件上編譯Paddle Inference 庫(kù)驮樊。
在開(kāi)始以下的操作前請(qǐng)確保你的Jetson 硬件已經(jīng)通過(guò)NV的SDKManager刷過(guò)機(jī),并安裝必要的依賴庫(kù)(CUDA片酝, CUDNN囚衔,TRT)。
一: 下載paddle代碼
git clone https://github.com/paddlepaddle/paddle
# 切換到1.7.0穩(wěn)定版本
git checkout v1.7.0
二: 準(zhǔn)備
- 安裝NCCL
git clone https://github.com/NVIDIA/nccl.git
make -j4
make install
Note: 后續(xù)Paddle預(yù)測(cè)會(huì)考慮將此依賴去除(因?yàn)閱慰ㄓ貌坏絅CCL)雕沿。
- 準(zhǔn)備Python環(huán)境
Note:如果只使用C++來(lái)進(jìn)行預(yù)測(cè)练湿,可以跳過(guò)這一步
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
#建立基于Python3.6的虛擬環(huán)境
virtualenv pd_env --no-site-packages --python=python3.6
#進(jìn)入Python虛擬環(huán)境
source pd_env/bin/activate
#進(jìn)入Paddle 源碼目錄
cd Paddle
#安裝運(yùn)行Python Paddle需要的依賴(numpy,scipy etc)
#此處安裝會(huì)比較慢审轮,請(qǐng)耐心等待
pip install -r python/requirements.txt
- 開(kāi)啟硬件性能模式
sudo nvpmodel -m 0 && sudo jetson_clocks
- 如果硬件為Nano肥哎,增加swap空間
#增加DDR可用空間辽俗,Xavier默認(rèn)內(nèi)存為16G,所以內(nèi)存足夠篡诽,如想在Nano上嘗試崖飘,請(qǐng)執(zhí)行如上操作。
sudo fallocate -l 5G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
三:編譯paddle
cd Paddle
mkdir build
cd build
- 編譯C++預(yù)測(cè)lib杈女。(帶Python安裝包)
Note: 如果只需要C++lib朱浴,參照2中cmake命令
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
make -j4
# 生成預(yù)測(cè)lib,生成fluid_inference_install_dir 即C++預(yù)測(cè)庫(kù)目錄
make inference_lib_dist
# 安裝python 庫(kù)
pip install -U python/dist/*.whl
- 編譯C++的預(yù)測(cè)lib(不帶Python lib)
cmake .. \
-DWITH_CONTRIB=OFF \
-DWITH_MKL=OFF \
-DWITH_MKLDNN=OFF \
-DWITH_TESTING=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DON_INFER=ON \
-DWITH_PYTHON=OFF \
-DWITH_XBYAK=OFF \
-DWITH_NV_JETSON=ON
make -j4
# 生成預(yù)測(cè)lib达椰, 生成fluid_inference_install_dir 即C++預(yù)測(cè)庫(kù)目錄
make inference_lib_dist -j4
四:樣例測(cè)試
請(qǐng)參照官網(wǎng):https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_usage/deploy/inference/paddle_tensorrt_infer.html#id2
五:可能會(huì)遇到的問(wèn)題
- ERROR: ../aarch64-linux-gpn/crtn.o: Too many open files.
#系統(tǒng)默認(rèn)1024翰蠢, 增大同一時(shí)間最多可開(kāi)啟的文件數(shù)為2048
ulimit -n 2048
- 編譯卡住
可能是第三方庫(kù)下載比較慢,kill掉重新編譯或者耐心等一會(huì)兒啰劲。
- error: class nvinfer1::IPluginFactory has accessible no-virtual destructor.
# 找到NvInfer.h
# 然后給IPluginFactory 類添加虛析構(gòu)函數(shù)
virtual ~I(xiàn)PluginFactory() {}