安装与编译 Linux 预测库

直接下载安装

版本说明 预测库(1.7.2版本) 预测库(develop版本)
ubuntu14.04_cpu_avx_mkl fluid_inference.tgz fluid_inference.tgz
ubuntu14.04_cpu_avx_openblas fluid_inference.tgz fluid_inference.tgz
ubuntu14.04_cpu_noavx_openblas fluid_inference.tgz fluid_inference.tgz
ubuntu14.04_cuda9.0_cudnn7_avx_mkl fluid_inference.tgz fluid_inference.tgz
ubuntu14.04_cuda10.0_cudnn7_avx_mkl fluid_inference.tgz fluid_inference.tgz
ubuntu14.04_cuda10.1_cudnn7.6_avx_mkl_trt6 fluid_inference.tgz
nv-jetson-cuda10-cudnn7.5-trt5 fluid_inference.tar.gz

从源码编译

用户也可以从 PaddlePaddle 核心代码编译C++预测库,只需在编译时配制下面这些编译选项:

选项 说明
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拉取最新代码并安装nccl

  1. git clone https://github.com/paddlepaddle/paddle
  2. # 建议使用git checkout切换到Paddle稳定的版本,如:
  3. git checkout v1.6.2
  4.  
  5. git clone https://github.com/NVIDIA/nccl.git
  6. make -j4
  7. make install

note: 单卡机器上不会用到nccl但仍存在依赖, 后续会考虑将此依赖去除。

Server端预测库源码编译

下面的代码片段配制编译选项并进行编译(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径):

  1. PADDLE_ROOT=/path/of/paddle
  2. cd Paddle
  3. mkdir build
  4. cd build
  5. cmake -DFLUID_INFERENCE_INSTALL_DIR=$PADDLE_ROOT \
  6. -DCMAKE_BUILD_TYPE=Release \
  7. -DWITH_PYTHON=OFF \
  8. -DWITH_MKL=OFF \
  9. -DWITH_GPU=OFF \
  10. -DON_INFER=ON \
  11. ..
  12. make
  13. make inference_lib_dist

NVIDIA Jetson嵌入式硬件预测库源码编译

NVIDIA Jetson是NVIDIA推出的嵌入式AI平台,Paddle Inference支持在 NVIDIA Jetson平台上编译预测库。具体步骤如下:

  1. 准备环境

开启硬件性能模式

  1. sudo nvpmodel -m 0 && sudo jetson_clocks

如果硬件为Nano,增加swap空间

  1. #增加DDR可用空间,Xavier默认内存为16G,所以内存足够,如想在Nano上尝试,请执行如下操作。
  2. sudo fallocate -l 5G /var/swapfile
  3. sudo chmod 600 /var/swapfile
  4. sudo mkswap /var/swapfile
  5. sudo swapon /var/swapfile
  6. sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'
  1. 编译Paddle Inference预测库
  1. cd Paddle
  2. mkdir build
  3. cd build
  4. cmake .. \
  5. -DWITH_CONTRIB=OFF \
  6. -DWITH_MKL=OFF \
  7. -DWITH_MKLDNN=OFF \
  8. -DWITH_TESTING=OFF \
  9. -DCMAKE_BUILD_TYPE=Release \
  10. -DON_INFER=ON \
  11. -DWITH_PYTHON=OFF \
  12. -DWITH_XBYAK=OFF \
  13. -DWITH_NV_JETSON=ON
  14. make -j4
  15. # 生成预测lib
  16. make inference_lib_dist -j4
  1. 样例测试

FAQ

  1. 报错:
  1. ERROR: ../aarch64-linux-gpn/crtn.o: Too many open files.

则增加系统同一时间最多可开启的文件数至2048

  1. ulimit -n 2048
  1. 编译卡住
可能是下载第三方库较慢的原因,耐心等待或kill掉编译进程重新编译
  1. 使用TensorRT报错IPluginFactory或IGpuAllocator缺少虚析构函数

下载安装TensorRT后,在NvInfer.h文件中为class IPluginFactory和class IGpuAllocator分别添加虚析构函数:

  1. virtual ~IPluginFactory() {};
  2. virtual ~IGpuAllocator() {};

成功编译后,使用C++预测库所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件;(3)版本信息与编译选项信息) 均会存放于PADDLE_ROOT目录中。目录结构如下:

  1. PaddleRoot/
  2. ├── CMakeCache.txt
  3. ├── paddle
  4. ├── include
  5. ├── paddle_anakin_config.h
  6. ├── paddle_analysis_config.h
  7. ├── paddle_api.h
  8. ├── paddle_inference_api.h
  9. ├── paddle_mkldnn_quantizer_config.h
  10. └── paddle_pass_builder.h
  11. └── lib
  12. ├── libpaddle_fluid.a
  13. └── libpaddle_fluid.so
  14. ├── third_party
  15. ├── boost
  16. └── boost
  17. ├── eigen3
  18. ├── Eigen
  19. └── unsupported
  20. └── install
  21. ├── gflags
  22. ├── glog
  23. ├── mkldnn
  24. ├── mklml
  25. ├── protobuf
  26. ├── xxhash
  27. └── zlib
  28. └── version.txt

version.txt 中记录了该预测库的版本信息,包括Git Commit ID、使用OpenBlas或MKL数学库、CUDA/CUDNN版本号,如:

  1. GIT COMMIT ID: cc9028b90ef50a825a722c55e5fda4b7cd26b0d6
  2. WITH_MKL: ON
  3. WITH_MKLDNN: ON
  4. WITH_GPU: ON
  5. CUDA version: 8.0
  6. CUDNN version: v7