From 969cfc1966c37dfa9196d0ce142e485aa90633fd Mon Sep 17 00:00:00 2001 From: Pei Yang Date: Mon, 16 Dec 2019 15:28:31 +0800 Subject: [PATCH] add jetson inference compile doc. (#1665) * add jetson compile doc. test=develop * add jetson compile doc. test=develop, test=document_preview --- .../inference/build_and_install_lib_cn.rst | 120 +++++++++++++++--- 1 file changed, 104 insertions(+), 16 deletions(-) diff --git a/doc/fluid/advanced_usage/deploy/inference/build_and_install_lib_cn.rst b/doc/fluid/advanced_usage/deploy/inference/build_and_install_lib_cn.rst index 1870cc5c6..54e96cc37 100644 --- a/doc/fluid/advanced_usage/deploy/inference/build_and_install_lib_cn.rst +++ b/doc/fluid/advanced_usage/deploy/inference/build_and_install_lib_cn.rst @@ -26,25 +26,43 @@ ---------- 用户也可以从 PaddlePaddle 核心代码编译C++预测库,只需在编译时配制下面这些编译选项: -============================ ============= -选项 值 -============================ ============= -CMAKE_BUILD_TYPE Release -FLUID_INFERENCE_INSTALL_DIR 安装路径 -WITH_PYTHON OFF(推荐) -ON_INFER ON(推荐) -WITH_GPU ON/OFF -WITH_MKL ON/OFF -============================ ============= +============================ ============= ================== +选项 值 说明 +============================ ============= ================== +CMAKE_BUILD_TYPE Release 编译方式,仅使用预测库设为Release即可 +FLUID_INFERENCE_INSTALL_DIR 安装路径 预测库安装路径 +WITH_PYTHON OFF(推荐) 编译python预测库与whl包 +ON_INFER ON(推荐) 预测时使用,必须设为ON +WITH_GPU ON/OFF 编译支持GPU的预测库 +WITH_MKL ON/OFF 编译支持MKL的预测库 +WITH_MKLDNN ON/OFF 编译支持MKLDNN的预测库 +WITH_XBYAK ON 使用XBYAK编译,在jetson硬件上编译需要设置为OFF +WITH_NV_JETSON OFF 在NV Jetson硬件上编译时需要设为ON +============================ ============= ================== 建议按照推荐值设置,以避免链接不必要的库。其它可选编译选项按需进行设定。 -下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径): +首先从github拉取最新代码并安装nccl + +.. code-block:: bash + + git clone https://github.com/paddlepaddle/paddle + # 建议使用git checkout切换到Paddle稳定的版本,如: + git checkout v1.6.2 + + git clone https://github.com/NVIDIA/nccl.git + make -j4 + make install + +**note**: 单卡机器上不会用到nccl但仍存在依赖, 后续会考虑将此依赖去除。 + +**Server端预测库源码编译** + +下面的代码片段配制编译选项并进行编译(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径): .. code-block:: bash - PADDLE_ROOT=/path/of/capi - git clone https://github.com/PaddlePaddle/Paddle.git + PADDLE_ROOT=/path/of/paddle cd Paddle mkdir build cd build @@ -58,7 +76,79 @@ WITH_MKL ON/OFF make make inference_lib_dist -成功编译后,使用C++预测库所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件;(3)版本信息与编译选项信息) +**NVIDIA Jetson嵌入式硬件预测库源码编译** + +NVIDIA Jetson是NVIDIA推出的嵌入式AI平台,Paddle Inference支持在 NVIDIA Jetson平台上编译预测库。具体步骤如下: + + 1. 准备环境 + + 开启硬件性能模式 + + .. code-block:: bash + + sudo nvpmodel -m 0 && sudo jetson_clocks + + 如果硬件为Nano,增加swap空间 + + .. code-block:: bash + + #增加DDR可用空间,Xavier默认内存为16G,所以内存足够,如想在Nano上尝试,请执行如下操作。 + 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' + + 2. 编译Paddle Inference预测库 + .. code-block:: bash + + cd Paddle + 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=OFF \ + -DWITH_XBYAK=OFF \ + -DWITH_NV_JETSON=ON + make -j4 + # 生成预测lib + make inference_lib_dist -j4 + + 3. 样例测试 + 请参照官网样例:https://www.paddlepaddle.org.cn/documentation/docs/zh/advanced_usage/deploy/inference/paddle_tensorrt_infer.html#id2 + + **FAQ** + + 1. 报错: + + .. code-block:: bash + + ERROR: ../aarch64-linux-gpn/crtn.o: Too many open files. + + 则增加系统同一时间最多可开启的文件数至2048 + + .. code-block:: bash + + ulimit -n 2048 + + 2. 编译卡住 + 可能是下载第三方库较慢的原因,耐心等待或kill掉编译进程重新编译 + + 3. 使用TensorRT报错IPluginFactory或IGpuAllocator缺少虚析构函数 + 下载安装TensorRT后,在NvInfer.h文件中为class IPluginFactory和class IGpuAllocator分别添加虚析构函数: + + .. code-block:: bash + + virtual ~IPluginFactory() {}; + virtual ~IGpuAllocator() {}; + + +成功编译后,使用C++预测库所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件;(3)版本信息与编译选项信息) 均会存放于PADDLE_ROOT目录中。目录结构如下: .. code-block:: text @@ -88,8 +178,6 @@ WITH_MKL ON/OFF │   ├── mkldnn │   ├── mklml │   ├── protobuf - │   ├── snappy - │   ├── snappystream │   ├── xxhash │   └── zlib └── version.txt -- GitLab