build_from_source_en.rst 5.3 KB
Newer Older
武毅 已提交
1
Build from Sources
T
typhoonzero 已提交
2 3 4 5 6 7 8 9 10 11
==========================

.. _build_step:

How To Build
----------------

PaddlePaddle mainly uses `CMake <https://cmake.org>`_ and GCC, G++ as compile
tools. We recommend you to use our pre-built Docker image to run the build
to avoid installing dependencies by yourself. We have several build environment
武毅 已提交
12 13 14 15 16
Docker images `here <https://hub.docker.com/r/paddlepaddle/paddle_manylinux_devel/tags/>`_ .

If you choose not to use Docker image for your build, you need to install the
below `Compile Dependencies`_ before run the build.

T
typhoonzero 已提交
17 18 19 20 21 22
Then run:

.. code-block:: bash

   git clone https://github.com/PaddlePaddle/Paddle.git
   cd Paddle
武毅 已提交
23
   # run the following command to build a CPU-Only binaries if you are using docker
24
   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 已提交
25 26 27
   # else run these commands
   mkdir build
   cd build
T
typhoonzero 已提交
28
   cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF ..
T
typhoonzero 已提交
29 30 31 32 33 34 35 36
   make

When the compile finishes, you can get the output whl package under
build/python/dist, then you can choose to install the whl on local
machine or copy it to the target machine.

.. code-block:: bash

37
   pip install build/python/dist/*.whl
T
typhoonzero 已提交
38

L
Luo Tao 已提交
39
If the machine has installed PaddlePaddle before, there are two methods:
40 41 42

.. code-block:: bash

L
Luo Tao 已提交
43 44 45 46 47
   1. uninstall and reinstall
   pip uninstall paddlepaddle
   pip install build/python/dist/*.whl

   2. upgrade directly
48
   pip install build/python/dist/*.whl -U
武毅 已提交
49 50 51 52 53 54 55 56 57 58 59 60 61

.. _run_test:

Run Tests
----------------

If you wish to run the tests, you may follow the below steps:

When using Docker, set :code:`RUN_TEST=ON` and :code:`WITH_TESTING=ON` will run test immediately after the build.
Set :code:`WITH_GPU=ON` Can also run tests on GPU.

.. code-block:: bash

62
   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
武毅 已提交
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

If you don't use Docker, just run ctest will start the tests:

.. code-block:: bash

   mkdir build
   cd build
   cmake -DWITH_GPU=OFF -DWITH_TESTING=ON ..
   make
   ctest
   # run a single test like test_mul_op
   ctest -R test_mul_op


.. _compile_deps:
T
typhoonzero 已提交
78 79 80 81 82 83 84 85 86 87 88

Compile Dependencies
----------------

PaddlePaddle need the following dependencies when compiling, other dependencies
will be downloaded automatically.

.. csv-table:: PaddlePaddle Compile Dependencies
   :header: "Dependency", "Version", "Description"
   :widths: 10, 15, 30

T
typhoonzero 已提交
89
   "CMake", ">=3.2", ""
T
typhoonzero 已提交
90
   "GCC", "4.8.2", "Recommend devtools2 for CentOS"
T
update  
typhoonzero 已提交
91 92 93
   "Python", "2.7.x", "Need libpython2.7.so"
   "pip", ">=9.0", ""
   "numpy", "", ""
T
typhoonzero 已提交
94
   "SWIG", ">=2.0", ""
T
update  
typhoonzero 已提交
95
   "Go", ">=1.8", "Optional"
T
typhoonzero 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122


.. _build_options:

Build Options
----------------

Build options include whether build binaries for CPU or GPU, which BLAS
library to use etc. You may pass these settings when running cmake.
For detailed cmake tutorial please refer to `here <https://cmake.org/cmake-tutorial>`_ 。

.. _build_options_bool:

Bool Type Options
----------------

You can add :code:`-D` argument to pass such options, like:

..  code-block:: bash

    cmake .. -DWITH_GPU=OFF

..  csv-table:: Bool Type Options
    :header: "Option", "Description", "Default"
    :widths: 1, 7, 2

    "WITH_GPU", "Build with GPU support", "ON"
T
typhoonzero 已提交
123
    "WITH_C_API", "Build only CAPI", "OFF"
T
typhoonzero 已提交
124 125 126 127 128 129
    "WITH_DOUBLE", "Build with double precision", "OFF"
    "WITH_DSO", "Dynamically load CUDA libraries", "ON"
    "WITH_AVX", "Build with AVX support", "ON"
    "WITH_PYTHON", "Build with integrated Python interpreter", "ON"
    "WITH_STYLE_CHECK", "Check code style when building", "ON"
    "WITH_TESTING", "Build unit tests", "ON"
130
    "WITH_DOC", "Build documentations", "OFF"
T
typhoonzero 已提交
131 132
    "WITH_SWIG_PY", "Build Python SWIG interface for V2 API", "Auto"
    "WITH_GOLANG", "Build fault-tolerant parameter server written in go", "ON"
T
typhoonzero 已提交
133
    "WITH_MKL", "Use MKL as BLAS library, else use OpenBLAS", "ON"
T
typhoonzero 已提交
134 135 136 137 138


BLAS
+++++

T
typhoonzero 已提交
139 140 141 142 143 144 145 146
PaddlePaddle supports `MKL <https://software.intel.com/en-us/intel-mkl>`_ and
`OpenBlAS <http://www.openblas.net/>`_ as BLAS library。By default it uses MKL.
If you are using MKL and your machine supports AVX2, MKL-DNN will also be downloaded
and used, for more `details <https://github.com/PaddlePaddle/Paddle/tree/develop/doc/design/mkldnn#cmake>`_ .

If you choose not to use MKL, then OpenBlAS will be used.

CUDA/cuDNN
T
typhoonzero 已提交
147 148
+++++++++++

T
typhoonzero 已提交
149
PaddlePaddle will automatically find CUDA and cuDNN when compiling and running.
T
typhoonzero 已提交
150 151
parameter :code:`-DCUDA_ARCH_NAME=Auto` can be used to detect SM architecture
automatically in order to speed up the build.
T
typhoonzero 已提交
152 153 154

PaddlePaddle can build with any version later than cuDNN v5.1, and we intend to
keep on with latest cuDNN versions. Be sure to run with the same version of cuDNN
T
typhoonzero 已提交
155 156 157 158 159 160 161
you built.

Pass Compile Options
++++++++++++++

You can pass compile options to use intended BLAS/CUDA/Cudnn libraries.
When running cmake command, it will search system paths like
T
typhoonzero 已提交
162
:code:`/usr/lib:/usr/local/lib` and then search paths that you
T
typhoonzero 已提交
163 164 165 166
passed to cmake, i.e.

..  code-block:: bash

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

T
typhoonzero 已提交
169
**NOTE: These options only take effect when running cmake for the first time, you need to clean the cmake cache or clean the build directory (** :code:`rm -rf` **) if you want to change it.**