Skip to content

Commit 03c858a

Browse files
authored
Merge pull request #6596 from lcy-seso/update_capi_doc
add doc for how to use C-API.
2 parents d954bec + a79a5bd commit 03c858a

File tree

14 files changed

+775
-23
lines changed

14 files changed

+775
-23
lines changed

doc/howto/index_cn.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
usage/cmd_parameter/index_cn.rst
1111
usage/cluster/cluster_train_cn.md
12+
usage/capi/index_cn.rst
1213

1314
开发标准
1415
--------
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
## 编译 PaddlePaddle 预测库
2+
3+
### 概述
4+
5+
使用 C-API 进行预测依赖于将 PaddlePaddle 核心代码编译成链接库,只需在编译时需配制下面这些编译选项:
6+
7+
必须配置选项:
8+
- `WITH_C_API`,必须配置为`ON`
9+
10+
推荐配置选项:
11+
- `WITH_PYTHON`,推荐配置为`OFF`
12+
- `WITH_SWIG_PY`,推荐配置为`OFF`
13+
- `WITH_GOLANG`,推荐设置为`OFF`
14+
15+
可选配置选项:
16+
- `WITH_GPU`,可配置为`ON/OFF`
17+
- `WITH_MKL`,可配置为`ON/OFF`
18+
19+
对推荐配置中的选项建议按照设置,以避免链接不必要的库。其它可选编译选项按需进行设定。
20+
21+
下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径):
22+
23+
```shell
24+
PADDLE_ROOT=/path/of/capi
25+
git clone https://github.com/PaddlePaddle/Paddle.git
26+
cd Paddle
27+
mkdir build
28+
cd build
29+
cmake -DCMAKE_INSTALL_PREFIX=$PADDLE_ROOT \
30+
-DCMAKE_BUILD_TYPE=Release \
31+
-DWITH_C_API=ON \
32+
-DWITH_SWIG_PY=OFF \
33+
-DWITH_GOLANG=OFF \
34+
-DWITH_PYTHON=OFF \
35+
-DWITH_MKL=OFF \
36+
-DWITH_GPU=OFF \
37+
..
38+
```
39+
40+
执行上述代码生成Makefile文件后,执行:`make && make install`。成功编译后,使用C-API所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件)均会存放于`PADDLE_ROOT`目录中。
41+
42+
编译成功后在 `PADDLE_ROOT` 下会看到如下目录结构(包括了编译出的PaddlePaddle头文件和链接库,以及第三方依赖链接库和头文件(如果需要,由链接方式决定)):
43+
44+
```text
45+
├── include
46+
│   └── paddle
47+
│   ├── arguments.h
48+
│   ├── capi.h
49+
│   ├── capi_private.h
50+
│   ├── config.h
51+
│   ├── error.h
52+
│   ├── gradient_machine.h
53+
│   ├── main.h
54+
│   ├── matrix.h
55+
│   ├── paddle_capi.map
56+
│   └── vector.h
57+
├── lib
58+
│   ├── libpaddle_capi_engine.a
59+
│   ├── libpaddle_capi_layers.a
60+
│   ├── libpaddle_capi_shared.so
61+
│   └── libpaddle_capi_whole.a
62+
└── third_party
63+
├── gflags
64+
│   ├── include
65+
│   │   └── gflags
66+
│   │   ├── gflags_completions.h
67+
│   │   ├── gflags_declare.h
68+
│   │   ...
69+
│   └── lib
70+
│   └── libgflags.a
71+
├── glog
72+
│   ├── include
73+
│   │   └── glog
74+
│   │   ├── config.h
75+
│   │   ...
76+
│   └── lib
77+
│   └── libglog.a
78+
├── openblas
79+
│   ├── include
80+
│   │   ├── cblas.h
81+
│   │   ...
82+
│   └── lib
83+
│   ...
84+
├── protobuf
85+
│   ├── include
86+
│   │   └── google
87+
│   │   └── protobuf
88+
│   │   ...
89+
│   └── lib
90+
│   └── libprotobuf-lite.a
91+
└── zlib
92+
├── include
93+
│   ...
94+
└── lib
95+
...
96+
97+
```
98+
99+
### 链接说明
100+
101+
目前提供三种链接方式:
102+
103+
1. 链接`libpaddle_capi_shared.so` 动态库
104+
- 使用 PaddlePaddle C-API 开发预测程序链接`libpaddle_capi_shared.so`时,需注意:
105+
1. 如果编译时指定编译CPU版本,且使用`OpenBLAS`数学库,在使用C-API开发预测程序时,只需要链接`libpaddle_capi_shared.so`这一个库。
106+
1. 如果是用编译时指定CPU版本,且使用`MKL`数学库,由于`MKL`库有自己独立的动态库文件,在使用PaddlePaddle C-API开发预测程序时,需要自己链接MKL链接库。
107+
1. 如果编译时指定编译GPU版本,CUDA相关库会在预测程序运行时动态装载,需要将CUDA相关的库设置到`LD_LIBRARY_PATH`环境变量中。
108+
- 这种方式最为简便,链接相对容易,**在无特殊需求情况下,推荐使用此方式**
109+
110+
2. 链接静态库 `libpaddle_capi_whole.a`
111+
- 使用PaddlePaddle C-API 开发预测程序链接`libpaddle_capi_whole.a`时,需注意:
112+
1. 需要指定`-Wl,--whole-archive`链接选项。
113+
1. 需要显式地链接 `gflags``glog``libz``protobuf` 等第三方库,可在`PADDLE_ROOT/third_party`下找到。
114+
1. 如果在编译 C-API 时使用OpenBLAS数学库,需要显示地链接`libopenblas.a`
115+
1. 如果在编译 C-API 是使用MKL数学库,需要显示地链接MKL的动态库。
116+
117+
3. 链接静态库 `libpaddle_capi_layers.a``libpaddle_capi_engine.a`
118+
- 使用PaddlePaddle C-API 开发预测程序链接`libpaddle_capi_whole.a`时,需注意:
119+
1. 这种链接方式主要用于移动端预测。
120+
1. 为了减少生成链接库的大小把`libpaddle_capi_whole.a`拆成以上两个静态链接库。
121+
1. 需指定`-Wl,--whole-archive -lpaddle_capi_layers` 和 `-Wl,--no-whole-archive -lpaddle_capi_engine` 进行链接。
122+
1. 第三方依赖库需要按照与方式2同样方法显示地进行链接。

doc/howto/usage/capi/images/csr.png

361 KB
Loading
470 KB
Loading
448 KB
Loading

doc/howto/usage/capi/index_cn.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
PaddlePaddle C-API
2+
==================
3+
4+
.. toctree::
5+
:maxdepth: 1
6+
7+
compile_paddle_lib_cn.md
8+
organization_of_the_inputs_cn.md
9+
workflow_of_capi_cn.md

0 commit comments

Comments
 (0)