前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【进阶篇】安装与编译C-API预测库

【进阶篇】安装与编译C-API预测库

作者头像
用户1386409
发布2018-03-15 14:42:54
7960
发布2018-03-15 14:42:54
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle

编写|PaddlePaddle

排版|wangp

1

概述

使用 C-API 进行预测依赖于将 PaddlePaddle 核心代码编译成链接库,只需在编译时需配制下面这些编译选项:

必须配置选项:

WITH_C_API,必须配置为ON

推荐配置选项:

WITH_PYTHON,推荐配置为OFF

WITH_SWIG_PY,推荐配置为OFF

WITH_GOLANG,推荐设置为OFF

可选配置选项:

WITH_GPU,可配置为ON/OFF

WITH_MKL,可配置为ON/OFF

对推荐配置中的选项建议按照设置,以避免链接不必要的库。其它可选编译选项按需进行设定

下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径):

PADDLE_ROOT=/path/of/capi

git clone https://github.com/PaddlePaddle/Paddle.git

cd Paddle

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=$PADDLE_ROOT \

-DCMAKE_BUILD_TYPE=Release \

-DWITH_C_API=ON \

-DWITH_SWIG_PY=OFF \

-DWITH_GOLANG=OFF \

-DWITH_PYTHON=OFF \

-DWITH_MKL=OFF \

-DWITH_GPU=OFF \

..

执行上述代码生成Makefile文件后,执行:make && make install。成功编译后,使用C-API所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件)均会存放于PADDLE_ROOT目录中

编译成功后在 PADDLE_ROOT 下会看到如下目录结构(包括了编译出的PaddlePaddle头文件和链接库,以及第三方依赖链接库和头文件(如果需要,由链接方式决定)):

├── include

│ └── paddle

│ ├── arguments.h

│ ├── capi.h

│ ├── capi_private.h

│ ├── config.h

│ ├── error.h

│ ├── gradient_machine.h

│ ├── main.h

│ ├── matrix.h

│ ├── paddle_capi.map

│ └── vector.h

├── lib

│ ├── libpaddle_capi_engine.a

│ ├── libpaddle_capi_layers.a

│ ├── libpaddle_capi_shared.so

│ └── libpaddle_capi_whole.a

└── third_party

├── gflags

│ ├── include

│ │ └── gflags

│ │ ├── gflags_completions.h

│ │ ├── gflags_declare.h

│ │ ...

│ └── lib

│ └── libgflags.a

├── glog

│ ├── include

│ │ └── glog

│ │ ├── config.h

│ │ ...

│ └── lib

│ └── libglog.a

├── openblas

│ ├── include

│ │ ├── cblas.h

│ │ ...

│ └── lib

│ ...

├── protobuf

│ ├── include

│ │ └── google

│ │ └── protobuf

│ │ ...

│ └── lib

│ └── libprotobuf-lite.a

└── zlib

├── include

│ ...

└── lib

...

2

链接说明

目前提供三种链接方式:

A.链接libpaddle_capi_shared.so 动态库

使用 PaddlePaddle C-API 开发预测程序链接libpaddle_capi_shared.so时,需注意:

  • 如果编译时指定编译CPU版本,且使用OpenBLAS数学库,在使用C-API开发预测程序时,只需要链接libpaddle_capi_shared.so这一个库
  • 如果是用编译时指定CPU版本,且使用MKL数学库,由于MKL库有自己独立的动态库文件,在使用PaddlePaddle C-API开发预测程序时,需要自己链接MKL链接库
  • 如果编译时指定编译GPU版本,CUDA相关库会在预测程序运行时动态装载,需要将CUDA相关的库设置到LD_LIBRARY_PATH环境变量中

上面这种方式最为简便,链接相对容易,在无特殊需求情况下,推荐使用此方式

B.链接静态库 libpaddle_capi_whole.a

使用PaddlePaddle C-API 开发预测程序链接libpaddle_capi_whole.a时,需注意:

  • 需要指定-Wl,--whole-archive链接选项
  • 需要显式地链接 gflags、glog、libz、protobuf 等第三方库,可在PADDLE_ROOT/third_party下找到
  • 如果在编译 C-API 时使用OpenBLAS数学库,需要显示地链接libopenblas.a
  • 如果在编译 C-API 是使用MKL数学库,需要显示地链接MKL的动态库

C.链接静态库 libpaddle_capi_layers.a和libpaddle_capi_engine.a

使用PaddlePaddle C-API 开发预测程序链接libpaddle_capi_whole.a时,需注意:

  • 这种链接方式主要用于移动端预测
  • 为了减少生成链接库的大小把libpaddle_capi_whole.a拆成以上两个静态链接库
  • 需指定-Wl,--whole-archive -lpaddle_capi_layers 和 -Wl,--no-whole-archive -lpaddle_capi_engine 进行链接
  • 第三方依赖库需要按照与方式2同样方法显示地进行链接
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档