build_from_source_cn.rst 5.5 KB
Newer Older
武毅 已提交
1
从源码编译
T
typhoonzero 已提交
2 3 4 5 6 7 8 9
======================

.. _build_step:

编译方法
----------------

PaddlePaddle主要使用 `CMake <https://cmake.org>`_ 以及GCC, G++作为编译工具。
武毅 已提交
10
我们推荐您使用PaddlePaddle Docker编译环境镜像完成编译,这样可以免去单独安装编译依赖的步骤,可选的不同编译环境Docker镜像
T
typhoonzero 已提交
11
可以在 `这里 <https://hub.docker.com/r/paddlepaddle/paddle_manylinux_devel/tags/>`_ 找到。
武毅 已提交
12 13 14

如果您选择不使用Docker镜像,则需要在本机安装下面章节列出的 `编译依赖`_ 之后才能开始编译的步骤。

T
typhoonzero 已提交
15 16 17 18 19 20
编译PaddlePaddle,需要执行:

.. code-block:: bash

   git clone https://github.com/PaddlePaddle/Paddle.git
   cd Paddle
T
typhoonzero 已提交
21
   # 如果使用Docker编译环境,执行下面的命令编译CPU-Only的二进制
22
   docker run -it -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 bash -x /paddle/paddle/scripts/docker/build.sh
T
typhoonzero 已提交
23 24 25
   # 如果不使用Docker编译环境,执行下面的命令
   mkdir build
   cd build
T
typhoonzero 已提交
26
   cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF ..
T
typhoonzero 已提交
27 28 29 30 31 32
   make

编译完成后会在build/python/dist目录下生成输出的whl包,可以选在在当前机器安装也可以拷贝到目标机器安装:

.. code-block:: bash

33
   pip install build/python/dist/*.whl
T
typhoonzero 已提交
34

35 36 37 38 39
如果机器中已经安装过PaddlePaddle,请卸载再安装:

.. code-block:: bash

   pip install build/python/dist/*.whl -U
T
typhoonzero 已提交
40

武毅 已提交
41 42 43 44 45 46 47 48 49 50 51 52
.. _run_test:

执行单元测试
----------------

如果您期望在编译完成后立即执行所有的单元测试,可以按照下面的方法:

使用Docker的情况下,设置 :code:`RUN_TEST=ON` 和 :code:`WITH_TESTING=ON` 就会在完成编译之后,立即执行单元测试。
开启 :code:`WITH_GPU=ON` 可以指定同时执行GPU上的单元测试。

.. code-block:: bash

53
   docker run -it -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=ON" -e "RUN_TEST=ON" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 bash -x /paddle/paddle/scripts/docker/build.sh
武毅 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67

如果不使用Docker,可以执行ctest命令即可:

.. code-block:: bash

   mkdir build
   cd build
   cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF ..
   make
   ctest
   # 指定执行其中一个单元测试 test_mul_op
   ctest -R test_mul_op

.. _compile_deps:
T
typhoonzero 已提交
68 69 70 71 72 73 74 75 76 77

编译依赖
----------------

PaddlePaddle编译需要使用到下面的依赖(包含但不限于),其他的依赖软件,会自动在编译时下载。

.. csv-table:: PaddlePaddle编译依赖
   :header: "依赖", "版本", "说明"
   :widths: 10, 15, 30

T
typhoonzero 已提交
78
   "CMake", ">=3.2", ""
T
typhoonzero 已提交
79
   "GCC", "4.8.2", "推荐使用CentOS的devtools2"
T
update  
typhoonzero 已提交
80 81 82
   "Python", "2.7.x", "依赖libpython2.7.so"
   "pip", ">=9.0", ""
   "numpy", "", ""
T
typhoonzero 已提交
83
   "SWIG", ">=2.0", ""
T
update  
typhoonzero 已提交
84
   "Go", ">=1.8", "可选"
T
typhoonzero 已提交
85 86 87 88 89 90 91


.. _build_options:

编译选项
----------------

T
typhoonzero 已提交
92 93 94
PaddlePaddle的编译选项,包括生成CPU/GPU二进制文件、链接何种BLAS库等。
用户可在调用cmake的时候设置它们,详细的cmake使用方法可以参考
`官方文档 <https://cmake.org/cmake-tutorial>`_ 。
T
typhoonzero 已提交
95

T
typhoonzero 已提交
96
在cmake的命令行中,通过使用 ``-D`` 命令设置该类编译选项,例如:
T
typhoonzero 已提交
97 98 99 100 101

..  code-block:: bash

    cmake .. -DWITH_GPU=OFF

T
typhoonzero 已提交
102
..  csv-table:: 编译选项说明
T
typhoonzero 已提交
103 104 105
    :header: "选项", "说明", "默认值"
    :widths: 1, 7, 2

T
typhoonzero 已提交
106 107 108 109 110 111 112 113 114 115 116 117 118
    "WITH_GPU", "是否支持GPU", "ON"
    "WITH_C_API", "是否仅编译CAPI", "OFF"
    "WITH_DOUBLE", "是否使用双精度浮点数", "OFF"
    "WITH_DSO", "是否运行时动态加载CUDA动态库,而非静态加载CUDA动态库。", "ON"
    "WITH_AVX", "是否编译含有AVX指令集的PaddlePaddle二进制文件", "ON"
    "WITH_PYTHON", "是否内嵌PYTHON解释器", "ON"
    "WITH_STYLE_CHECK", "是否编译时进行代码风格检查", "ON"
    "WITH_TESTING", "是否开启单元测试", "ON"
    "WITH_DOC", "是否编译中英文文档", "OFF"
    "WITH_SWIG_PY", "是否编译PYTHON的SWIG接口,该接口可用于预测和定制化训练", "Auto"
    "WITH_GOLANG", "是否编译go语言的可容错parameter server", "ON"
    "WITH_MKL", "是否使用MKL数学库,如果为否则是用OpenBLAS", "ON"

T
typhoonzero 已提交
119 120 121
BLAS
+++++

T
typhoonzero 已提交
122 123 124
PaddlePaddle支持 `MKL <https://software.intel.com/en-us/intel-mkl>`_ 和
`OpenBlAS <http://www.openblas.net/>`_ 两种BLAS库。默认使用MKL。如果使用MKL并且机器含有AVX2指令集,
还会下载MKL-DNN数学库,详细参考 `这里 <https://github.com/PaddlePaddle/Paddle/tree/develop/doc/design/mkldnn#cmake>`_ 。
T
typhoonzero 已提交
125

T
typhoonzero 已提交
126
如果关闭MKL,则会使用OpenBLAS作为BLAS库。
T
typhoonzero 已提交
127

T
typhoonzero 已提交
128
CUDA/cuDNN
T
typhoonzero 已提交
129 130
+++++++++++

T
typhoonzero 已提交
131
PaddlePaddle在编译时/运行时会自动找到系统中安装的CUDA和cuDNN库进行编译和执行。
T
typhoonzero 已提交
132
使用参数 :code:`-DCUDA_ARCH_NAME=Auto` 可以指定开启自动检测SM架构,加速编译。
T
typhoonzero 已提交
133 134 135

PaddlePaddle可以使用cuDNN v5.1之后的任何一个版本来编译运行,但尽量请保持编译和运行使用的cuDNN是同一个版本。
我们推荐使用最新版本的cuDNN。
T
typhoonzero 已提交
136 137 138 139

编译选项的设置
++++++++++++++

T
typhoonzero 已提交
140
PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。cmake编译时,首先在系统路径( :code:`/usr/lib:/usr/local/lib` )中搜索这几个库,同时也会读取相关路径变量来进行搜索。 通过使用 ``-D`` 命令可以设置,例如 
T
typhoonzero 已提交
141 142 143

..  code-block:: bash

T
typhoonzero 已提交
144
    cmake .. -DWITH_GPU=ON -DWITH_TESTING=OFF -DCUDNN_ROOT=/opt/cudnnv5
T
typhoonzero 已提交
145

T
typhoonzero 已提交
146
**注意:这几个编译选项的设置,只在第一次cmake的时候有效。如果之后想要重新设置,推荐清理整个编译目录(** :code:`rm -rf` )**后,再指定。**