提交 1e116208 编写于 作者: T Travis CI

Deploy to GitHub Pages: d3b07a6e

上级 2eae3616
...@@ -44,7 +44,7 @@ cmake -DCMAKE_SYSTEM_NAME=RPi \ ...@@ -44,7 +44,7 @@ cmake -DCMAKE_SYSTEM_NAME=RPi \
.. ..
``` ```
To build the inference library, please set the argument WITH_API to ON: `WITH_C_API=ON`. To build the inference library, please set the argument WITH\_C\_API to ON: `WITH_C_API=ON`.
You can add more arguments. For example, to minimize the size of the generated inference library, you may use `CMAKE_BUILD_TYPE=MinSizeRel`. For performance optimization, you may use `CMAKE_BUILD_TYPE=Release`. You can add more arguments. For example, to minimize the size of the generated inference library, you may use `CMAKE_BUILD_TYPE=MinSizeRel`. For performance optimization, you may use `CMAKE_BUILD_TYPE=Release`.
......
...@@ -214,7 +214,7 @@ ...@@ -214,7 +214,7 @@
<span class="o">..</span> <span class="o">..</span>
</pre></div> </pre></div>
</div> </div>
<p>To build the inference library, please set the argument WITH_API to ON: <code class="docutils literal"><span class="pre">WITH_C_API=ON</span></code>.</p> <p>To build the inference library, please set the argument WITH_C_API to ON: <code class="docutils literal"><span class="pre">WITH_C_API=ON</span></code>.</p>
<p>You can add more arguments. For example, to minimize the size of the generated inference library, you may use <code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE=MinSizeRel</span></code>. For performance optimization, you may use <code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE=Release</span></code>.</p> <p>You can add more arguments. For example, to minimize the size of the generated inference library, you may use <code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE=MinSizeRel</span></code>. For performance optimization, you may use <code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE=Release</span></code>.</p>
</div> </div>
<div class="section" id="build-and-install"> <div class="section" id="build-and-install">
......
# 构建iOS平台上的PaddlePaddle库
交叉编译iOS平台上适用的PaddlePaddle库,需要在MacOS系统上进行。本文的将介绍在MacOS上,从源码交叉编译iOS平台上适用的PaddlePaddle库。
## 准备交叉编译环境
Apple官方为iOS开发提供了完整的交叉编译工具和集成开发环境,用户从App Store下载安装Xcode即可。也可自行前往官网下载,[Xcode](https://developer.apple.com/cn/xcode/)。安装完成之后,可在命令行执行`xcodebuild -version`,判断是否安装成功。
```bash
$ xcodebuild -version
Xcode 9.0
Build version 9A235
```
## 配置交叉编译参数
PaddlePaddle为交叉编译提供了工具链配置文档[cmake/cross_compiling/ios.cmake](https://github.com/PaddlePaddle/Paddle/blob/develop/cmake/cross_compiling/ios.cmake),以提供一些默认的编译器和编译参数配置。
交叉编译iOS版本的PaddlePaddle库时,有一些必须配置的参数:
- `CMAKE_SYSTEM_NAME`,CMake编译的目标平台,必须设置为`iOS`。在设置`CMAKE_SYSTEM_NAME=iOS`后,PaddlePaddle的CMake系统会自动编译所有的第三方依赖库,并且强制设置一些PaddlePaddle参数的值(`WITH_C_API=ON`、`WITH_GPU=OFF`、`WITH_AVX=OFF`、`WITH_PYTHON=OFF`、`WITH_RDMA=OFF`)。
- `WITH_C_API`,是否编译C-API预测库,必须设置为ON。在iOS平台上只支持使用C-API来预测。
- `WITH_SWIG_PY`,必须设置为ON。在iOS平台上不支持通过swig调用来训练或者预测。
iOS平台可选配置参数:
- `IOS_PLATFORM`,可设置为`OS/SIMULATOR`,默认值为`OS`。
- `OS`,构建目标为`arm`架构的iPhone或者iPad等物理设备。
- `SIMULATOR`,构建目标为`x86`架构的模拟器平台。
- `IOS_ARCH`,目标架构。针对不同的`IOS_PLATFORM`,可设置的目标架构如下表所示:
| IOS_PLATFORM | IOS_ARCH |
|--------------|----------------------|
| OS | armv7, armv7s, arm64 (默认) |
| SIMULATOR | i386, x86_64 (默认) |
- `IOS_DEPLOYMENT_TARGET`,最小的iOS部署版本,默认值为`7.0`。
- `IOS_ENABLE_BITCODE`,是否使能[Bitcode](https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35-SW3),可设置`ON/OFF`,默认值为`ON`。
- `IOS_USE_VECLIB_FOR_BLAS`,是否使用[vecLib](https://developer.apple.com/documentation/accelerate/veclib)框架进行BLAS矩阵计算,可设置`ON/OFF`,默认值为`OFF`。
- `IOS_DEVELOPMENT_ROOT`,`Developer`目录,可显式指定为`/path/to/platform/Developer`。若未显式指定,PaddlePaddle将会根据`IOS_PLATFORM`自动选择`Xcode`对应`platform`的`Developer`目录。
- `IOS_SDK_ROOT`,所使用`SDK`的根目录,可显式指定为`/path/to/platform/Developer/SDKs/SDK`。若未显式指定,PaddlePaddle将会自动选择`IOS_DEVELOPMENT_ROOT`目录下最新的`SDK`版本。
其他配置参数:
- `USE_EIGEN_FOR_BLAS`,是否使用Eigen库进行矩阵计算,在`IOS_USE_VECLIB_FOR_BLAS=OFF`时有效。可设置`ON/OFF`,默认值为`OFF`。
- `HOST_C/CXX_COMPILER`,宿主机的C/C++编译器。默认值为环境变量`CC/CXX`的值;若环境变量`CC/CXX`未设置,则使用`cc/c++`编译器。
常用的cmake配置如下:
```bash
cmake -DCMAKE_SYSTEM_NAME=iOS \
-DIOS_PLATFORM=OS \
-DIOS_ARCH="arm64" \
-DIOS_ENABLE_BITCODE=ON \
-DIOS_USE_VECLIB_FOR_BLAS=ON \
-DCMAKE_INSTALL_PREFIX=your/path/to/install \
-DWITH_C_API=ON \
-DWITH_TESTING=OFF \
-DWITH_SWIG_PY=OFF \
..
```
```bash
cmake -DCMAKE_SYSTEM_NAME=iOS \
-DIOS_PLATFORM=SIMULATOR \
-DIOS_ARCH="x86_64" \
-DIOS_USE_VECLIB_FOR_BLAS=ON \
-DCMAKE_INSTALL_PREFIX=your/path/to/install \
-DWITH_C_API=ON \
-DWITH_TESTING=OFF \
-DWITH_SWIG_PY=OFF \
..
```
用户还可根据自己的需求设置其他编译参数。比如希望最小化生成库的大小,可以设置`CMAKE_BUILD_TYPE`为`MinSizeRel`;若希望得到最快的执行速度,则可设置`CMAKE_BUILD_TYPE`为`Release`。亦可以通过手动设置`CMAKE_C/CXX_FLAGS`来影响PaddlePaddle的编译过程。
**性能TIPS**,为了达到最快的计算速度,在CMake参数配置上,有以下建议:
- 设置`CMAKE_BUILD_TYPE`为`Release`
- 设置`IOS_USE_VECLIB_FOR_BLAS=ON`,调用`vecLib`框架提供的BLAS函数进行矩阵计算。
## 编译和安装
CMake配置完成后,执行以下命令,PaddlePaddle将自动下载和编译所有第三方依赖库、编译和安装PaddlePaddle预测库。
```
$ make
$ make install
```
注意:如果你曾在源码目录下编译过其他平台的PaddlePaddle库,请先使用`rm -rf`命令删除`third_party`目录和`build`目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。
执行完安装命令后,`your/path/to/install`目录中会包含以下内容:
- `include`目录,其中包含所有C-API的头文件
- `lib`目录,其中包含PaddlePaddle的C-API静态库
- `third_party`目录,其中包含所依赖的所有第三方库
注意,不同架构的PaddlePaddle库建议安装到不同的目录下,然后使用`lipo`工具将多个静态库合并成一个支持多个架构的fat库。
自此,PaddlePaddle库已经安装完成,用户可将合成的fat库用于深度学习相关的iOS App中,调用方法见C-API文档。
...@@ -59,4 +59,4 @@ make install ...@@ -59,4 +59,4 @@ make install
注意:如果你曾经在源码目录下编译过其他平台的PaddlePaddle库,请先使用`rm -rf`命令删除`third_party`目录和`build`目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。 注意:如果你曾经在源码目录下编译过其他平台的PaddlePaddle库,请先使用`rm -rf`命令删除`third_party`目录和`build`目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。
执行完安装命令后,`your/path/to/install`目录中会包含`include`和`lib`目录,其中`include`中包含C-API的头文件,`lib`中包含一个Raspberry Pi版本的库。 执行完安装命令后,`your/path/to/install`目录中会包含`include`和`lib`目录,其中`include`中包含C-API的头文件,`lib`中包含一个Raspberry Pi版本的库。
<!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">
<title>构建iOS平台上的PaddlePaddle库 &mdash; PaddlePaddle 文档</title>
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<link rel="index" title="索引"
href="../../genindex.html"/>
<link rel="search" title="搜索" href="../../search.html"/>
<link rel="top" title="PaddlePaddle 文档" href="../../index.html"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/perfect-scrollbar/0.6.14/css/perfect-scrollbar.min.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/override.css" type="text/css" />
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "//hm.baidu.com/hm.js?b9a314ab40d04d805655aab1deee08ba";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script src="../../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<header class="site-header">
<div class="site-logo">
<a href="/"><img src="../../_static/images/PP_w.png"></a>
</div>
<div class="site-nav-links">
<div class="site-menu">
<a class="fork-on-github" href="https://github.com/PaddlePaddle/Paddle" target="_blank"><i class="fa fa-github"></i>Fork me on Github</a>
<div class="language-switcher dropdown">
<a type="button" data-toggle="dropdown">
<span>English</span>
<i class="fa fa-angle-up"></i>
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu">
<li><a href="/doc_cn">中文</a></li>
<li><a href="/doc">English</a></li>
</ul>
</div>
<ul class="site-page-links">
<li><a href="/">Home</a></li>
</ul>
</div>
<div class="doc-module">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../getstarted/index_cn.html">新手入门</a></li>
<li class="toctree-l1"><a class="reference internal" href="../index_cn.html">进阶指南</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../api/index_cn.html">API</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index_cn.html">FAQ</a></li>
</ul>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
</div>
</header>
<div class="main-content-wrap">
<nav class="doc-menu-vertical" role="navigation">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../getstarted/index_cn.html">新手入门</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../getstarted/build_and_install/index_cn.html">安装与编译</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../getstarted/build_and_install/docker_install_cn.html">PaddlePaddle的Docker容器使用方式</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../getstarted/build_and_install/cmake/build_from_source_cn.html">PaddlePaddle的编译选项</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../getstarted/concepts/use_concepts_cn.html">基本使用概念</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../index_cn.html">进阶指南</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../usage/cmd_parameter/index_cn.html">设置命令行参数</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../usage/cmd_parameter/use_case_cn.html">使用案例</a></li>
<li class="toctree-l3"><a class="reference internal" href="../usage/cmd_parameter/arguments_cn.html">参数概述</a></li>
<li class="toctree-l3"><a class="reference internal" href="../usage/cmd_parameter/detail_introduction_cn.html">细节描述</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../usage/cluster/cluster_train_cn.html">PaddlePaddle分布式训练</a></li>
<li class="toctree-l2"><a class="reference internal" href="../usage/k8s/k8s_basis_cn.html">Kubernetes 简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="../usage/k8s/k8s_cn.html">Kubernetes单机训练</a></li>
<li class="toctree-l2"><a class="reference internal" href="../usage/k8s/k8s_distributed_cn.html">Kubernetes分布式训练</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/build_cn.html">编译PaddlePaddle和运行单元测试</a></li>
<li class="toctree-l2"><a class="reference internal" href="../dev/write_docs_cn.html">如何贡献/修改文档</a></li>
<li class="toctree-l2"><a class="reference internal" href="../deep_model/rnn/index_cn.html">RNN相关模型</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../deep_model/rnn/rnn_config_cn.html">RNN配置</a></li>
<li class="toctree-l3"><a class="reference internal" href="../deep_model/rnn/recurrent_group_cn.html">Recurrent Group教程</a></li>
<li class="toctree-l3"><a class="reference internal" href="../deep_model/rnn/hierarchical_layer_cn.html">支持双层序列作为输入的Layer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../deep_model/rnn/hrnn_rnn_api_compare_cn.html">单双层RNN API对比介绍</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../optimization/gpu_profiling_cn.html">GPU性能分析与调优</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../api/index_cn.html">API</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../api/v2/model_configs.html">模型配置</a><ul>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/activation.html">Activation</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/layer.html">Layers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/evaluators.html">Evaluators</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/optimizer.html">Optimizer</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/pooling.html">Pooling</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/networks.html">Networks</a></li>
<li class="toctree-l3"><a class="reference internal" href="../../api/v2/config/attr.html">Parameter Attribute</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../api/v2/data.html">数据访问</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../api/v2/run_logic.html">训练与应用</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../faq/index_cn.html">FAQ</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../../faq/build_and_install/index_cn.html">编译安装与单元测试</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq/model/index_cn.html">模型配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq/parameter/index_cn.html">参数设置</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq/local/index_cn.html">本地训练与预测</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../faq/cluster/index_cn.html">集群训练与预测</a></li>
</ul>
</li>
</ul>
</nav>
<section class="doc-content-wrap">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li>构建iOS平台上的PaddlePaddle库</li>
</ul>
</div>
<div class="wy-nav-content" id="doc-content">
<div class="rst-content">
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="iospaddlepaddle">
<span id="iospaddlepaddle"></span><h1>构建iOS平台上的PaddlePaddle库<a class="headerlink" href="#iospaddlepaddle" title="永久链接至标题"></a></h1>
<p>交叉编译iOS平台上适用的PaddlePaddle库,需要在MacOS系统上进行。本文的将介绍在MacOS上,从源码交叉编译iOS平台上适用的PaddlePaddle库。</p>
<div class="section" id="">
<span id="id1"></span><h2>准备交叉编译环境<a class="headerlink" href="#" title="永久链接至标题"></a></h2>
<p>Apple官方为iOS开发提供了完整的交叉编译工具和集成开发环境,用户从App Store下载安装Xcode即可。也可自行前往官网下载,<a class="reference external" href="https://developer.apple.com/cn/xcode/">Xcode</a>。安装完成之后,可在命令行执行<code class="docutils literal"><span class="pre">xcodebuild</span> <span class="pre">-version</span></code>,判断是否安装成功。</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>$ xcodebuild -version
Xcode <span class="m">9</span>.0
Build version 9A235
</pre></div>
</div>
</div>
<div class="section" id="">
<span id="id2"></span><h2>配置交叉编译参数<a class="headerlink" href="#" title="永久链接至标题"></a></h2>
<p>PaddlePaddle为交叉编译提供了工具链配置文档<a class="reference external" href="https://github.com/PaddlePaddle/Paddle/blob/develop/cmake/cross_compiling/ios.cmake">cmake/cross_compiling/ios.cmake</a>,以提供一些默认的编译器和编译参数配置。</p>
<p>交叉编译iOS版本的PaddlePaddle库时,有一些必须配置的参数:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">CMAKE_SYSTEM_NAME</span></code>,CMake编译的目标平台,必须设置为<code class="docutils literal"><span class="pre">iOS</span></code>。在设置<code class="docutils literal"><span class="pre">CMAKE_SYSTEM_NAME=iOS</span></code>后,PaddlePaddle的CMake系统会自动编译所有的第三方依赖库,并且强制设置一些PaddlePaddle参数的值(<code class="docutils literal"><span class="pre">WITH_C_API=ON</span></code><code class="docutils literal"><span class="pre">WITH_GPU=OFF</span></code><code class="docutils literal"><span class="pre">WITH_AVX=OFF</span></code><code class="docutils literal"><span class="pre">WITH_PYTHON=OFF</span></code><code class="docutils literal"><span class="pre">WITH_RDMA=OFF</span></code>)。</li>
<li><code class="docutils literal"><span class="pre">WITH_C_API</span></code>,是否编译C-API预测库,必须设置为ON。在iOS平台上只支持使用C-API来预测。</li>
<li><code class="docutils literal"><span class="pre">WITH_SWIG_PY</span></code>,必须设置为ON。在iOS平台上不支持通过swig调用来训练或者预测。</li>
</ul>
<p>iOS平台可选配置参数:</p>
<ul>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_PLATFORM</span></code>,可设置为<code class="docutils literal"><span class="pre">OS/SIMULATOR</span></code>,默认值为<code class="docutils literal"><span class="pre">OS</span></code></p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">OS</span></code>,构建目标为<code class="docutils literal"><span class="pre">arm</span></code>架构的iPhone或者iPad等物理设备。</li>
<li><code class="docutils literal"><span class="pre">SIMULATOR</span></code>,构建目标为<code class="docutils literal"><span class="pre">x86</span></code>架构的模拟器平台。</li>
</ul>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_ARCH</span></code>,目标架构。针对不同的<code class="docutils literal"><span class="pre">IOS_PLATFORM</span></code>,可设置的目标架构如下表所示:</p>
<p>| IOS_PLATFORM | IOS_ARCH |
|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|
| OS | armv7, armv7s, arm64 (默认) |
| SIMULATOR | i386, x86_64 (默认) |</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_DEPLOYMENT_TARGET</span></code>,最小的iOS部署版本,默认值为<code class="docutils literal"><span class="pre">7.0</span></code></p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_ENABLE_BITCODE</span></code>,是否使能<a class="reference external" href="https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AppThinning/AppThinning.html#//apple_ref/doc/uid/TP40012582-CH35-SW3">Bitcode</a>,可设置<code class="docutils literal"><span class="pre">ON/OFF</span></code>,默认值为<code class="docutils literal"><span class="pre">ON</span></code></p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_USE_VECLIB_FOR_BLAS</span></code>,是否使用<a class="reference external" href="https://developer.apple.com/documentation/accelerate/veclib">vecLib</a>框架进行BLAS矩阵计算,可设置<code class="docutils literal"><span class="pre">ON/OFF</span></code>,默认值为<code class="docutils literal"><span class="pre">OFF</span></code></p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_DEVELOPMENT_ROOT</span></code><code class="docutils literal"><span class="pre">Developer</span></code>目录,可显式指定为<code class="docutils literal"><span class="pre">/path/to/platform/Developer</span></code>。若未显式指定,PaddlePaddle将会根据<code class="docutils literal"><span class="pre">IOS_PLATFORM</span></code>自动选择<code class="docutils literal"><span class="pre">Xcode</span></code>对应<code class="docutils literal"><span class="pre">platform</span></code><code class="docutils literal"><span class="pre">Developer</span></code>目录。</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">IOS_SDK_ROOT</span></code>,所使用<code class="docutils literal"><span class="pre">SDK</span></code>的根目录,可显式指定为<code class="docutils literal"><span class="pre">/path/to/platform/Developer/SDKs/SDK</span></code>。若未显式指定,PaddlePaddle将会自动选择<code class="docutils literal"><span class="pre">IOS_DEVELOPMENT_ROOT</span></code>目录下最新的<code class="docutils literal"><span class="pre">SDK</span></code>版本。</p>
</li>
</ul>
<p>其他配置参数:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">USE_EIGEN_FOR_BLAS</span></code>,是否使用Eigen库进行矩阵计算,在<code class="docutils literal"><span class="pre">IOS_USE_VECLIB_FOR_BLAS=OFF</span></code>时有效。可设置<code class="docutils literal"><span class="pre">ON/OFF</span></code>,默认值为<code class="docutils literal"><span class="pre">OFF</span></code></li>
<li><code class="docutils literal"><span class="pre">HOST_C/CXX_COMPILER</span></code>,宿主机的C/C++编译器。默认值为环境变量<code class="docutils literal"><span class="pre">CC/CXX</span></code>的值;若环境变量<code class="docutils literal"><span class="pre">CC/CXX</span></code>未设置,则使用<code class="docutils literal"><span class="pre">cc/c++</span></code>编译器。</li>
</ul>
<p>常用的cmake配置如下:</p>
<div class="highlight-bash"><div class="highlight"><pre><span></span>cmake -DCMAKE_SYSTEM_NAME<span class="o">=</span>iOS <span class="se">\</span>
-DIOS_PLATFORM<span class="o">=</span>OS <span class="se">\</span>
-DIOS_ARCH<span class="o">=</span><span class="s2">&quot;arm64&quot;</span> <span class="se">\</span>
-DIOS_ENABLE_BITCODE<span class="o">=</span>ON <span class="se">\</span>
-DIOS_USE_VECLIB_FOR_BLAS<span class="o">=</span>ON <span class="se">\</span>
-DCMAKE_INSTALL_PREFIX<span class="o">=</span>your/path/to/install <span class="se">\</span>
-DWITH_C_API<span class="o">=</span>ON <span class="se">\</span>
-DWITH_TESTING<span class="o">=</span>OFF <span class="se">\</span>
-DWITH_SWIG_PY<span class="o">=</span>OFF <span class="se">\</span>
..
</pre></div>
</div>
<div class="highlight-bash"><div class="highlight"><pre><span></span>cmake -DCMAKE_SYSTEM_NAME<span class="o">=</span>iOS <span class="se">\</span>
-DIOS_PLATFORM<span class="o">=</span>SIMULATOR <span class="se">\</span>
-DIOS_ARCH<span class="o">=</span><span class="s2">&quot;x86_64&quot;</span> <span class="se">\</span>
-DIOS_USE_VECLIB_FOR_BLAS<span class="o">=</span>ON <span class="se">\</span>
-DCMAKE_INSTALL_PREFIX<span class="o">=</span>your/path/to/install <span class="se">\</span>
-DWITH_C_API<span class="o">=</span>ON <span class="se">\</span>
-DWITH_TESTING<span class="o">=</span>OFF <span class="se">\</span>
-DWITH_SWIG_PY<span class="o">=</span>OFF <span class="se">\</span>
..
</pre></div>
</div>
<p>用户还可根据自己的需求设置其他编译参数。比如希望最小化生成库的大小,可以设置<code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE</span></code><code class="docutils literal"><span class="pre">MinSizeRel</span></code>;若希望得到最快的执行速度,则可设置<code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE</span></code><code class="docutils literal"><span class="pre">Release</span></code>。亦可以通过手动设置<code class="docutils literal"><span class="pre">CMAKE_C/CXX_FLAGS</span></code>来影响PaddlePaddle的编译过程。</p>
<p><strong>性能TIPS</strong>,为了达到最快的计算速度,在CMake参数配置上,有以下建议:</p>
<ul class="simple">
<li>设置<code class="docutils literal"><span class="pre">CMAKE_BUILD_TYPE</span></code><code class="docutils literal"><span class="pre">Release</span></code></li>
<li>设置<code class="docutils literal"><span class="pre">IOS_USE_VECLIB_FOR_BLAS=ON</span></code>,调用<code class="docutils literal"><span class="pre">vecLib</span></code>框架提供的BLAS函数进行矩阵计算。</li>
</ul>
</div>
<div class="section" id="">
<span id="id3"></span><h2>编译和安装<a class="headerlink" href="#" title="永久链接至标题"></a></h2>
<p>CMake配置完成后,执行以下命令,PaddlePaddle将自动下载和编译所有第三方依赖库、编译和安装PaddlePaddle预测库。</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$ make
$ make install
</pre></div>
</div>
<p>注意:如果你曾在源码目录下编译过其他平台的PaddlePaddle库,请先使用<code class="docutils literal"><span class="pre">rm</span> <span class="pre">-rf</span></code>命令删除<code class="docutils literal"><span class="pre">third_party</span></code>目录和<code class="docutils literal"><span class="pre">build</span></code>目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。</p>
<p>执行完安装命令后,<code class="docutils literal"><span class="pre">your/path/to/install</span></code>目录中会包含以下内容:</p>
<ul class="simple">
<li><code class="docutils literal"><span class="pre">include</span></code>目录,其中包含所有C-API的头文件</li>
<li><code class="docutils literal"><span class="pre">lib</span></code>目录,其中包含PaddlePaddle的C-API静态库</li>
<li><code class="docutils literal"><span class="pre">third_party</span></code>目录,其中包含所依赖的所有第三方库</li>
</ul>
<p>注意,不同架构的PaddlePaddle库建议安装到不同的目录下,然后使用<code class="docutils literal"><span class="pre">lipo</span></code>工具将多个静态库合并成一个支持多个架构的fat库。</p>
<p>自此,PaddlePaddle库已经安装完成,用户可将合成的fat库用于深度学习相关的iOS App中,调用方法见C-API文档。</p>
</div>
</div>
</div>
</div>
<footer>
<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 = {
URL_ROOT:'../../',
VERSION:'',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: ".txt",
};
</script>
<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>
<script type="text/javascript" src="https://cdn.bootcss.com/mathjax/2.7.0/MathJax.js"></script>
<script type="text/javascript" src="../../_static/js/theme.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/perfect-scrollbar/0.6.14/js/perfect-scrollbar.jquery.min.js"></script>
<script src="../../_static/js/paddle_doc_init.js"></script>
</body>
</html>
\ No newline at end of file
...@@ -238,7 +238,7 @@ make install ...@@ -238,7 +238,7 @@ make install
</pre></div> </pre></div>
</div> </div>
<p>注意:如果你曾经在源码目录下编译过其他平台的PaddlePaddle库,请先使用<code class="docutils literal"><span class="pre">rm</span> <span class="pre">-rf</span></code>命令删除<code class="docutils literal"><span class="pre">third_party</span></code>目录和<code class="docutils literal"><span class="pre">build</span></code>目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。</p> <p>注意:如果你曾经在源码目录下编译过其他平台的PaddlePaddle库,请先使用<code class="docutils literal"><span class="pre">rm</span> <span class="pre">-rf</span></code>命令删除<code class="docutils literal"><span class="pre">third_party</span></code>目录和<code class="docutils literal"><span class="pre">build</span></code>目录,以确保所有的第三方依赖库和PaddlePaddle代码都是针对新的CMake配置重新编译的。</p>
<p>执行完安装命令后,<code class="docutils literal"><span class="pre">your/path/to/install</span></code>目录中会包含<code class="docutils literal"><span class="pre">include</span></code><code class="docutils literal"><span class="pre">lib</span></code>目录,其中<code class="docutils literal"><span class="pre">include</span></code>中包含C-API的头文件,<code class="docutils literal"><span class="pre">lib</span></code>中包含一个Raspberry Pi版本的库。</p> <p>执行完安装命令后,<code class="docutils literal"><span class="pre">your/path/to/install</span></code>目录中会包含<code class="docutils literal"><span class="pre">include</span></code><code class="docutils literal"><span class="pre">lib</span></code>目录,其中<code class="docutils literal"><span class="pre">include</span></code>中包含C-API的头文件,<code class="docutils literal"><span class="pre">lib</span></code>中包含一个Raspberry Pi版本的库。</p>
</div> </div>
</div> </div>
......
因为 它太大了无法显示 source diff 。你可以改为 查看blob
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册