|
| 1 | +从源码编译PaddlePaddle |
| 2 | +====================== |
| 3 | + |
| 4 | +.. _build_step: |
| 5 | + |
| 6 | +编译方法 |
| 7 | +---------------- |
| 8 | + |
| 9 | +PaddlePaddle主要使用 `CMake <https://cmake.org>`_ 以及GCC, G++作为编译工具。 |
| 10 | +我们推荐您使用PaddlePaddle编译环境镜像完成编译,这样可以免去单独安装编译依赖的步骤,可选的不同编译环境 |
| 11 | +可以在 `这里 <https://hub.docker.com/r/paddlepaddle/paddle_manylinux_devel/tags/>`_ 找到。 |
| 12 | +编译PaddlePaddle,需要执行: |
| 13 | + |
| 14 | +.. code-block:: bash |
| 15 | +
|
| 16 | + git clone https://github.com/PaddlePaddle/Paddle.git |
| 17 | + cd Paddle |
| 18 | + # 如果使用Docker编译环境,执行下面的命令编译CPU-Only的二进制 |
| 19 | + docker run -it -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddlepaddle/paddle_manylinux_devel:cuda8.0_cudnn5 bash -x paddle/scripts/docker/build.sh |
| 20 | + # 如果不使用Docker编译环境,执行下面的命令 |
| 21 | + mkdir build |
| 22 | + cd build |
| 23 | + cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF .. |
| 24 | + make |
| 25 | + |
| 26 | +
|
| 27 | +编译完成后会在build/python/dist目录下生成输出的whl包,可以选在在当前机器安装也可以拷贝到目标机器安装: |
| 28 | + |
| 29 | +.. code-block:: bash |
| 30 | +
|
| 31 | + pip install python/dist/*.whl |
| 32 | +
|
| 33 | +
|
| 34 | +.. _build_step: |
| 35 | + |
| 36 | +编译依赖 |
| 37 | +---------------- |
| 38 | + |
| 39 | +PaddlePaddle编译需要使用到下面的依赖(包含但不限于),其他的依赖软件,会自动在编译时下载。 |
| 40 | + |
| 41 | +.. csv-table:: PaddlePaddle编译依赖 |
| 42 | + :header: "依赖", "版本", "说明" |
| 43 | + :widths: 10, 15, 30 |
| 44 | + |
| 45 | + "CMake", ">=3.5", "" |
| 46 | + "GCC", "4.8.2", "推荐使用CentOS的devtools2" |
| 47 | + "Python", "2.7.x", "依赖libpython2.7.so" |
| 48 | + "pip", ">=9.0", "" |
| 49 | + "numpy", "", "" |
| 50 | + "SWIG", ">=2.0", "" |
| 51 | + "Go", ">=1.8", "可选" |
| 52 | + |
| 53 | + |
| 54 | +.. _build_options: |
| 55 | + |
| 56 | +编译选项 |
| 57 | +---------------- |
| 58 | + |
| 59 | +PaddlePaddle的编译选项,包括生成CPU/GPU二进制文件、链接何种BLAS库等。 |
| 60 | +用户可在调用cmake的时候设置它们,详细的cmake使用方法可以参考 |
| 61 | +`官方文档 <https://cmake.org/cmake-tutorial>`_ 。 |
| 62 | + |
| 63 | +在cmake的命令行中,通过使用 ``-D`` 命令设置该类编译选项,例如: |
| 64 | + |
| 65 | +.. code-block:: bash |
| 66 | +
|
| 67 | + cmake .. -DWITH_GPU=OFF |
| 68 | +
|
| 69 | +.. csv-table:: 编译选项说明 |
| 70 | + :header: "选项", "说明", "默认值" |
| 71 | + :widths: 1, 7, 2 |
| 72 | + |
| 73 | + "WITH_GPU", "是否支持GPU", "ON" |
| 74 | + "WITH_C_API", "是否仅编译CAPI", "OFF" |
| 75 | + "WITH_DOUBLE", "是否使用双精度浮点数", "OFF" |
| 76 | + "WITH_DSO", "是否运行时动态加载CUDA动态库,而非静态加载CUDA动态库。", "ON" |
| 77 | + "WITH_AVX", "是否编译含有AVX指令集的PaddlePaddle二进制文件", "ON" |
| 78 | + "WITH_PYTHON", "是否内嵌PYTHON解释器", "ON" |
| 79 | + "WITH_STYLE_CHECK", "是否编译时进行代码风格检查", "ON" |
| 80 | + "WITH_TESTING", "是否开启单元测试", "ON" |
| 81 | + "WITH_DOC", "是否编译中英文文档", "OFF" |
| 82 | + "WITH_SWIG_PY", "是否编译PYTHON的SWIG接口,该接口可用于预测和定制化训练", "Auto" |
| 83 | + "WITH_GOLANG", "是否编译go语言的可容错parameter server", "ON" |
| 84 | + "WITH_MKL", "是否使用MKL数学库,如果为否则是用OpenBLAS", "ON" |
| 85 | + |
| 86 | +BLAS |
| 87 | ++++++ |
| 88 | + |
| 89 | +PaddlePaddle支持 `MKL <https://software.intel.com/en-us/intel-mkl>`_ 和 |
| 90 | +`OpenBlAS <http://www.openblas.net/>`_ 两种BLAS库。默认使用MKL。如果使用MKL并且机器含有AVX2指令集, |
| 91 | +还会下载MKL-DNN数学库,详细参考 `这里 <https://github.com/PaddlePaddle/Paddle/tree/develop/doc/design/mkldnn#cmake>`_ 。 |
| 92 | + |
| 93 | +如果关闭MKL,则会使用OpenBLAS作为BLAS库。 |
| 94 | + |
| 95 | +CUDA/cuDNN |
| 96 | ++++++++++++ |
| 97 | + |
| 98 | +PaddlePaddle在编译时/运行时会自动找到系统中安装的CUDA和cuDNN库进行编译和执行。 |
| 99 | +使用参数 :code:`-DCUDA_ARCH_NAME=Auto` 可以指定开启自动检测SM架构,加速编译。 |
| 100 | + |
| 101 | +PaddlePaddle可以使用cuDNN v5.1之后的任何一个版本来编译运行,但尽量请保持编译和运行使用的cuDNN是同一个版本。 |
| 102 | +我们推荐使用最新版本的cuDNN。 |
| 103 | + |
| 104 | +编译选项的设置 |
| 105 | +++++++++++++++ |
| 106 | + |
| 107 | +PaddePaddle通过编译时指定路径来实现引用各种BLAS/CUDA/cuDNN库。cmake编译时,首先在系统路径( :code:`/usr/lib:/usr/local/lib` )中搜索这几个库,同时也会读取相关路径变量来进行搜索。 通过使用 ``-D`` 命令可以设置,例如 |
| 108 | + |
| 109 | +.. code-block:: bash |
| 110 | +
|
| 111 | + cmake .. -DWITH_GPU=ON -DWITH_TESTING=OFF -DCUDNN_ROOT=/opt/cudnnv5 |
| 112 | +
|
| 113 | +**注意:这几个编译选项的设置,只在第一次cmake的时候有效。如果之后想要重新设置,推荐清理整个编译目录(** :code:`rm -rf` )**后,再指定。** |
0 commit comments