PaddleFluid编译Paddle-Lite子图

(1)编译PaddlePaddle子图

编译命令:

# 先git clone paddlepaddle工程
cd Paddle
mkdir build && cd build
cmake .. -DWITH_CONTRIB=OFF -DWITH_MKL=ON -DWITH_MKLDNN=ON -DWITH_AVX=ON  -DWITH_LITE=ON -DWITH_PYTHON=OFF -DON_INFER=ON -DWITH_GPU=OFF -DCUDNN_ROOT=/usr/local/cudnn/ -DCMAKE_CXX_FLAGS="-Wno-error -w" -DWITH_INFERENCE_API_TEST=ON -DWITH_TESTING=ON  -ON_INFER=ON 
make -j4

编译结果:

在`build_install_inference_lib`中。

(2)运行paddlepaddle子图

运行示例demo: C++预测库样例编译测试

Paddle-Lite作为第三方库被PaddlePaddle调用(打开enable_lite_engine开关),PaddlePaddle预测时会实际将模型的图结构和数据复制到Paddle-LIte中,Paddle-Lite实际执行预测。

调用顺序是:

模型与数据-->通过PaddlePaddle接口读入Paddle预测库---->如果enable_lite_engine,数据被复制到Paddle-Lite预测库-->Paddle-Lite执行预测----->Paddle-Lite执行预测的结果反馈到PaddlePaddle

程序的结构数据:

Paddle-Lite的预测库作为PaddlePaddle的第三方库被调用。

    编译时:先编译 Paddle/third-party/Lite  (实际是Paddle-Lite 的repo代码)

    运行时:同时需要Paddle的预测库(.so)和Paddle-Lite的预测库(.so) 。当调用子图是Paddle预测库引用Paddle-Lite的预测库

 

(3)子图是什么: 以第三方库的形式引用其他的预测引擎,将神经网络模型的全部或部分拓扑结构放入到 这个第三方预测引擎中执行。  (称之为子图)

为什么用子图:加快运行速度。对于部分结构,某些预测引擎会比较快(但该引擎可能不能支持所有的图结构)。例如调用NPU子图、XPU子图 将神经网络的图结构分开执行,加快运行速度。

 

 

 

你可能感兴趣的:(PaddlePaddle开发)