compile_paddle_lib_cn.html 15.2 KB
Newer Older
1 2 3 4 5 6 7 8 9 10


<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
11
  <title>安装与编译C-API预测库 &mdash; PaddlePaddle  文档</title>
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
  

  
  

  

  
  
    

  

  
  
27
    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
28 29 30
  

  
31

32 33
  
        <link rel="index" title="索引"
34 35 36 37
              href="../../genindex.html"/>
        <link rel="search" title="搜索" href="../../search.html"/>
    <link rel="top" title="PaddlePaddle  文档" href="../../index.html"/>
        <link rel="up" title="C-API预测库" href="index_cn.html"/>
38
        <link rel="next" title="输入/输出数据组织" href="organization_of_the_inputs_cn.html"/>
39
        <link rel="prev" title="C-API预测库" href="index_cn.html"/> 
40 41

  
42
  <script src="../../_static/js/modernizr.min.js"></script>
43 44 45 46 47

</head>

<body class="wy-body-for-nav" role="document">

48 49 50 51 52 53 54 55 56 57 58 59 60
  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-scroll">
        <div class="wy-side-nav-search">
          

          
            <a href="../../index_cn.html" class="icon icon-home"> PaddlePaddle
          

          
61 62
          </a>

63 64 65 66 67 68
          
            
            
          

          
69
<div role="search">
70
  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
71 72 73 74
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
75
</div>
76 77

          
78 79 80 81 82 83 84 85 86
        </div>

        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
          
            
            
                <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../getstarted/index_cn.html">新手入门</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../build_and_install/index_cn.html">安装与编译</a></li>
87
<li class="toctree-l1 current"><a class="reference internal" href="../index_cn.html">进阶使用</a><ul class="current">
88 89 90 91 92 93
<li class="toctree-l2"><a class="reference internal" href="../cmd_parameter/index_cn.html">命令行参数设置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../cluster/index_cn.html">分布式训练</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="index_cn.html">C-API预测库</a><ul class="current">
<li class="toctree-l3 current"><a class="current reference internal" href="#">安装与编译C-API预测库</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#">概述</a></li>
<li class="toctree-l4"><a class="reference internal" href="#">链接说明</a></li>
94 95
</ul>
</li>
96
<li class="toctree-l3"><a class="reference internal" href="organization_of_the_inputs_cn.html">输入/输出数据组织</a></li>
97
<li class="toctree-l3"><a class="reference internal" href="workflow_of_capi_cn.html">C-API使用流程</a></li>
98 99
</ul>
</li>
100
<li class="toctree-l2"><a class="reference internal" href="../rnn/index_cn.html">RNN模型</a></li>
101 102 103
<li class="toctree-l2"><a class="reference internal" href="../optimization/gpu_profiling_cn.html">GPU性能调优</a></li>
</ul>
</li>
104 105
<li class="toctree-l1"><a class="reference internal" href="../../dev/index_cn.html">开发标准</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index_cn.html">FAQ</a></li>
106 107
</ul>

108 109 110 111
            
          
        </div>
      </div>
112 113
    </nav>

114
    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
115

116 117 118 119 120
      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
        <a href="../../index_cn.html">PaddlePaddle</a>
      </nav>
121 122


123 124 125 126
      
      <div class="wy-nav-content">
        <div class="rst-content">
          
127

128
 
129 130 131 132 133



<div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
134
    <li><a href="../../index_cn.html">Docs</a> &raquo;</li>
135
      
136
          <li><a href="../index_cn.html">进阶使用</a> &raquo;</li>
137
      
138
          <li><a href="index_cn.html">C-API预测库</a> &raquo;</li>
139
      
140
    <li>安装与编译C-API预测库</li>
141 142 143 144 145 146 147
      <li class="wy-breadcrumbs-aside">
        
          
            <a href="../../_sources/howto/capi/compile_paddle_lib_cn.md.txt" rel="nofollow"> View page source</a>
          
        
      </li>
148
  </ul>
149
  <hr/>
150 151 152 153
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
           <div itemprop="articleBody">
            
154 155
  <div class="section" id="c-api">
<span id="c-api"></span><h1>安装与编译C-API预测库<a class="headerlink" href="#c-api" title="永久链接至标题"></a></h1>
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295
<div class="section" id="">
<span id="id1"></span><h2>概述<a class="headerlink" href="#" title="永久链接至标题"></a></h2>
<p>使用 C-API 进行预测依赖于将 PaddlePaddle 核心代码编译成链接库,只需在编译时需配制下面这些编译选项:</p>
<p>必须配置选项:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">WITH_C_API</span></code>,必须配置为<code class="docutils literal"><span class="pre">ON</span></code></li>
</ul>
<p>推荐配置选项:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">WITH_PYTHON</span></code>,推荐配置为<code class="docutils literal"><span class="pre">OFF</span></code></li>
<li><code class="docutils literal"><span class="pre">WITH_SWIG_PY</span></code>,推荐配置为<code class="docutils literal"><span class="pre">OFF</span></code></li>
<li><code class="docutils literal"><span class="pre">WITH_GOLANG</span></code>,推荐设置为<code class="docutils literal"><span class="pre">OFF</span></code></li>
</ul>
<p>可选配置选项:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">WITH_GPU</span></code>,可配置为<code class="docutils literal"><span class="pre">ON/OFF</span></code></li>
<li><code class="docutils literal"><span class="pre">WITH_MKL</span></code>,可配置为<code class="docutils literal"><span class="pre">ON/OFF</span></code></li>
</ul>
<p>对推荐配置中的选项建议按照设置,以避免链接不必要的库。其它可选编译选项按需进行设定。</p>
<p>下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径):</p>
<div class="highlight-shell"><div class="highlight"><pre><span></span><span class="nv">PADDLE_ROOT</span><span class="o">=</span>/path/of/capi
git clone https://github.com/PaddlePaddle/Paddle.git
<span class="nb">cd</span> Paddle
mkdir build
<span class="nb">cd</span> build
cmake -DCMAKE_INSTALL_PREFIX<span class="o">=</span><span class="nv">$PADDLE_ROOT</span> <span class="se">\</span>
      -DCMAKE_BUILD_TYPE<span class="o">=</span>Release <span class="se">\</span>
      -DWITH_C_API<span class="o">=</span>ON <span class="se">\</span>
      -DWITH_SWIG_PY<span class="o">=</span>OFF <span class="se">\</span>
      -DWITH_GOLANG<span class="o">=</span>OFF <span class="se">\</span>
      -DWITH_PYTHON<span class="o">=</span>OFF <span class="se">\</span>
      -DWITH_MKL<span class="o">=</span>OFF <span class="se">\</span>
      -DWITH_GPU<span class="o">=</span>OFF  <span class="se">\</span>
      ..
</pre></div>
</div>
<p>执行上述代码生成Makefile文件后,执行:<code class="docutils literal"><span class="pre">make</span> <span class="pre">&amp;&amp;</span> <span class="pre">make</span> <span class="pre">install</span></code>。成功编译后,使用C-API所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件)均会存放于<code class="docutils literal"><span class="pre">PADDLE_ROOT</span></code>目录中。</p>
<p>编译成功后在 <code class="docutils literal"><span class="pre">PADDLE_ROOT</span></code> 下会看到如下目录结构(包括了编译出的PaddlePaddle头文件和链接库,以及第三方依赖链接库和头文件(如果需要,由链接方式决定)):</p>
<div class="highlight-text"><div class="highlight"><pre><span></span>├── 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
            ...
</pre></div>
</div>
</div>
<div class="section" id="">
<span id="id2"></span><h2>链接说明<a class="headerlink" href="#" title="永久链接至标题"></a></h2>
<p>目前提供三种链接方式:</p>
<ol class="simple">
<li>链接<code class="docutils literal"><span class="pre">libpaddle_capi_shared.so</span></code> 动态库<ul>
<li>使用 PaddlePaddle C-API 开发预测程序链接<code class="docutils literal"><span class="pre">libpaddle_capi_shared.so</span></code>时,需注意:<ol>
<li>如果编译时指定编译CPU版本,且使用<code class="docutils literal"><span class="pre">OpenBLAS</span></code>数学库,在使用C-API开发预测程序时,只需要链接<code class="docutils literal"><span class="pre">libpaddle_capi_shared.so</span></code>这一个库。</li>
<li>如果是用编译时指定CPU版本,且使用<code class="docutils literal"><span class="pre">MKL</span></code>数学库,由于<code class="docutils literal"><span class="pre">MKL</span></code>库有自己独立的动态库文件,在使用PaddlePaddle C-API开发预测程序时,需要自己链接MKL链接库。</li>
<li>如果编译时指定编译GPU版本,CUDA相关库会在预测程序运行时动态装载,需要将CUDA相关的库设置到<code class="docutils literal"><span class="pre">LD_LIBRARY_PATH</span></code>环境变量中。</li>
</ol>
</li>
<li>这种方式最为简便,链接相对容易,<strong>在无特殊需求情况下,推荐使用此方式</strong></li>
</ul>
</li>
<li>链接静态库 <code class="docutils literal"><span class="pre">libpaddle_capi_whole.a</span></code><ul>
<li>使用PaddlePaddle C-API 开发预测程序链接<code class="docutils literal"><span class="pre">libpaddle_capi_whole.a</span></code>时,需注意:<ol>
<li>需要指定<code class="docutils literal"><span class="pre">-Wl,--whole-archive</span></code>链接选项。</li>
<li>需要显式地链接 <code class="docutils literal"><span class="pre">gflags</span></code><code class="docutils literal"><span class="pre">glog</span></code><code class="docutils literal"><span class="pre">libz</span></code><code class="docutils literal"><span class="pre">protobuf</span></code> 等第三方库,可在<code class="docutils literal"><span class="pre">PADDLE_ROOT/third_party</span></code>下找到。</li>
<li>如果在编译 C-API 时使用OpenBLAS数学库,需要显示地链接<code class="docutils literal"><span class="pre">libopenblas.a</span></code></li>
<li>如果在编译 C-API 是使用MKL数学库,需要显示地链接MKL的动态库。</li>
</ol>
</li>
</ul>
</li>
<li>链接静态库 <code class="docutils literal"><span class="pre">libpaddle_capi_layers.a</span></code><code class="docutils literal"><span class="pre">libpaddle_capi_engine.a</span></code><ul>
<li>使用PaddlePaddle C-API 开发预测程序链接<code class="docutils literal"><span class="pre">libpaddle_capi_whole.a</span></code>时,需注意:<ol>
<li>这种链接方式主要用于移动端预测。</li>
<li>为了减少生成链接库的大小把<code class="docutils literal"><span class="pre">libpaddle_capi_whole.a</span></code>拆成以上两个静态链接库。</li>
<li>需指定<code class="docutils literal"><span class="pre">-Wl,--whole-archive</span> <span class="pre">-lpaddle_capi_layers</span></code>&nbsp;<code class="docutils literal"><span class="pre">-Wl,--no-whole-archive</span> <span class="pre">-lpaddle_capi_engine</span></code> 进行链接。</li>
<li>第三方依赖库需要按照与方式2同样方法显示地进行链接。</li>
</ol>
</li>
</ul>
</li>
</ol>
</div>
</div>


           </div>
          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="organization_of_the_inputs_cn.html" class="btn btn-neutral float-right" title="输入/输出数据组织" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
      
      
296
        <a href="index_cn.html" class="btn btn-neutral" title="C-API预测库" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
        &copy; Copyright 2016, PaddlePaddle developers.

    </p>
  </div>
  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 

</footer>

        </div>
      </div>

    </section>

  </div>
  


  

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
326
            URL_ROOT:'../../',
327 328 329
            VERSION:'',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'.html',
330
            HAS_SOURCE:  true
331 332
        };
    </script>
333 334 335 336
      <script type="text/javascript" src="../../_static/jquery.js"></script>
      <script type="text/javascript" src="../../_static/underscore.js"></script>
      <script type="text/javascript" src="../../_static/doctools.js"></script>
      <script type="text/javascript" src="../../_static/translations.js"></script>
337
      <script type="text/javascript" src="https://cdn.bootcss.com/mathjax/2.7.0/MathJax.js"></script>
338

339 340 341 342
  

  
  
343
    <script type="text/javascript" src="../../_static/js/theme.js"></script>
344
  
345

346
  
347 348 349 350 351 352 353
  
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.StickyNav.enable();
      });
  </script>
   
354 355 356

</body>
</html>