|
1 |
| -## 安装与编译C-API预测库 |
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 |
| -对推荐配置中的选项建议按照设置,以避免链接不必要的库。其它可选编译选项按需进行设定。 |
| 1 | +## 安装、编译与链接C-API预测库 |
| 2 | + |
| 3 | +### 直接下载安装 |
| 4 | + |
| 5 | +从CI系统中下载最新的C-API开发包进行安装,用户可以从下面的表格中找到需要的版本: |
| 6 | + |
| 7 | +<table> |
| 8 | +<thead> |
| 9 | +<tr> |
| 10 | +<th>版本说明</th> |
| 11 | +<th>C-API</th> |
| 12 | +</tr> |
| 13 | +</thead> |
| 14 | +<tbody> |
| 15 | +<tr> |
| 16 | +<td>cpu_avx_mkl</td> |
| 17 | +<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_CpuAvxCp27cp27mu/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td> |
| 18 | +</tr> |
| 19 | +<tr> |
| 20 | +<td>cpu_avx_openblas</td> |
| 21 | +<td>暂无</td> |
| 22 | +</tr> |
| 23 | +<tr> |
| 24 | +<td>cpu_noavx_openblas</td> |
| 25 | +<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_CpuNoavxOpenblas/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td> |
| 26 | +</tr> |
| 27 | +<tr> |
| 28 | +<td>cuda7.5_cudnn5_avx_mkl</td> |
| 29 | +<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda75cudnn5cp27cp27mu/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td> |
| 30 | +</tr> |
| 31 | +<tr> |
| 32 | +<td>cuda8.0_cudnn5_avx_mkl</td> |
| 33 | +<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda80cudnn5cp27cp27mu/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td> |
| 34 | +</tr> |
| 35 | +<tr> |
| 36 | +<td>cuda8.0_cudnn7_avx_mkl</td> |
| 37 | +<td><a href="https://guest:@paddleci.ngrok.io/repository/download/Manylinux1_Cuda8cudnn7cp27cp27mu/.lastSuccessful/paddle.tgz" rel="nofollow">paddle.tgz</a></td> |
| 38 | +</tr></tbody></table> |
| 39 | + |
| 40 | +### 从源码编译 |
| 41 | + |
| 42 | +用户也可以从 PaddlePaddle 核心代码编译C-API链接库,只需在编译时配制下面这些编译选项: |
| 43 | + |
| 44 | +<table> |
| 45 | +<thead> |
| 46 | +<tr> |
| 47 | +<th>选项</th> |
| 48 | +<th>值</th> |
| 49 | +</tr> |
| 50 | +</thead> |
| 51 | +<tbody> |
| 52 | +<tr> |
| 53 | +<td>WITH_C_API</td> |
| 54 | +<td>ON</td> |
| 55 | +</tr> |
| 56 | +<tr> |
| 57 | +<td>WITH_PYTHON</td> |
| 58 | +<td>OFF(推荐)</td> |
| 59 | +</tr> |
| 60 | +<tr> |
| 61 | +<td>WITH_SWIG_PY</td> |
| 62 | +<td>OFF(推荐)</td> |
| 63 | +</tr> |
| 64 | +<tr> |
| 65 | +<td>WITH_GOLANG</td> |
| 66 | +<td>OFF(推荐)</td> |
| 67 | +</tr> |
| 68 | +<tr> |
| 69 | +<td>WITH_GPU</td> |
| 70 | +<td>ON/OFF</td> |
| 71 | +</tr> |
| 72 | +<tr> |
| 73 | +<td>WITH_MKL</td> |
| 74 | +<td>ON/OFF</td> |
| 75 | +</tr></tbody></table> |
| 76 | + |
| 77 | +建议按照推荐值设置,以避免链接不必要的库。其它可选编译选项按需进行设定。 |
20 | 78 |
|
21 | 79 | 下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径):
|
22 | 80 |
|
@@ -100,23 +158,19 @@ cmake -DCMAKE_INSTALL_PREFIX=$PADDLE_ROOT \
|
100 | 158 |
|
101 | 159 | 目前提供三种链接方式:
|
102 | 160 |
|
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同样方法显示地进行链接。 |
| 161 | +1. 链接`libpaddle_capi_shared.so` 动态库(这种方式最为简便,链接相对容易,**在无特殊需求情况下,推荐使用此方式**),需注意: |
| 162 | + 1. 如果编译时指定编译CPU版本,且使用`OpenBLAS`数学库,在使用C-API开发预测程序时,只需要链接`libpaddle_capi_shared.so`这一个库。 |
| 163 | + 1. 如果是用编译时指定CPU版本,且使用`MKL`数学库,由于`MKL`库有自己独立的动态库文件,在使用PaddlePaddle C-API开发预测程序时,需要自己链接MKL链接库。 |
| 164 | + 1. 如果编译时指定编译GPU版本,CUDA相关库会在预测程序运行时动态装载,需要将CUDA相关的库设置到`LD_LIBRARY_PATH`环境变量中。 |
| 165 | + |
| 166 | +2. 链接静态库 `libpaddle_capi_whole.a`,需注意: |
| 167 | + 1. 需要指定`-Wl,--whole-archive`链接选项。 |
| 168 | + 1. 需要显式地链接 `gflags`、`glog`、`libz`、`protobuf` 等第三方库,可在`PADDLE_ROOT/third_party`下找到。 |
| 169 | + 1. 如果在编译 C-API 时使用OpenBLAS数学库,需要显示地链接`libopenblas.a`。 |
| 170 | + 1. 如果在编译 C-API 是使用MKL数学库,需要显示地链接MKL的动态库。 |
| 171 | + |
| 172 | +3. 链接静态库 `libpaddle_capi_layers.a`和`libpaddle_capi_engine.a`,需注意: |
| 173 | + 1. 这种链接方式主要用于移动端预测。 |
| 174 | + 1. 为了减少生成链接库的大小把`libpaddle_capi_whole.a`拆成以上两个静态链接库。 |
| 175 | + 1. 需指定`-Wl,--whole-archive -lpaddle_capi_layers` 和 `-Wl,--no-whole-archive -lpaddle_capi_engine` 进行链接。 |
| 176 | + 1. 第三方依赖库需要按照与方式2同样方法显示地进行链接。 |
0 commit comments