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

本文档详细介绍了如何通过配置特定选项来编译PaddlePaddle C-API预测库,并提供了三种链接库的方法,适用于不同场景的需求。
部署运行你感兴趣的模型镜像

导语

本周起将推送【使用指南—进阶篇】推文。在进阶篇,我们将向您介绍PaddlePaddle的使用说明、开发标准、模型配置等内容。在使用进阶篇推文之前,请参考安装与编译部分推文完成PaddlePaddle的安装

本周推文目录如下:

周一:【进阶篇】命令行参数细节描述

周二:【进阶篇】命令行参数使用案例

周三:【进阶篇】在不同的集群框架下完成分布式训练

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

周五:【进阶篇】C-API 使用流程

编写|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同样方法显示地进行链接

*原创贴,版权所有,未经许可,禁止转载

*值班小Paddle:wangp

*欢迎在留言区分享您的观点

您可能感兴趣的与本文相关的镜像

PaddlePaddle-v3.3

PaddlePaddle-v3.3

PaddlePaddle

PaddlePaddle是由百度自主研发的深度学习平台,自 2016 年开源以来已广泛应用于工业界。作为一个全面的深度学习生态系统,它提供了核心框架、模型库、开发工具包等完整解决方案。目前已服务超过 2185 万开发者,67 万企业,产生了 110 万个模型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值