设置PaddlePaddle的编译选项

PaddlePaddle的编译选项可以在调用cmake的时候设置。cmake是一个跨平台的编译脚本,调用 cmake可以将cmake项目文件,生成各个平台的makefile。详细的cmake使用方法可以参考 cmake的官方文档

PaddlePaddle的编译选项是可以控制PaddlePaddle生成CPU/GPU版本二进制,链接何种blas等等。所有的 编译选项列表如下

PaddlePaddle的编译选项

bool型的编译选项

设置下列编译选项时,可以在cmake的命令行设置。使用 -D命令即可。例如 cmake -D WITH_GPU=OFF

PaddlePaddle的bool型编译选项
选项 说明 默认值
WITH_GPU 是否编译GPU支持。 是否寻找到cuda工具链
WITH_DOUBLE 是否使用双精度浮点数。
WITH_DSO 是否使用运行时动态加载cuda动态库,而非静态加载cuda动态库。
WITH_AVX 是否编译含有AVX指令集的PaddlePaddle二进制
WITH_PYTHON 是否内嵌python解释器。可以方便嵌入式工作。
WITH_STYLE_CHECK 是否编译时进行代码风格检查
WITH_RDMA 是否开启RDMA支持
WITH_GLOG 是否使用GLOG,如果不使用则会使用一个简化版的日志实现。可以方便嵌入式工作。 取决于是否寻找到GLOG
WITH_GFLAGS 是否使用GFLAGS,如果不使用则会使用一个简化版的命令行参数解析。可以方便嵌入式工作。 取决于是否寻找到GFLAGS
WITH_TIMER 是否开启计时功能开启计时功能会导致运行略慢,打印的日志变多。但是方便调试和benchmark
WITH_TESTING 是否开启单元测试 取决于是否寻找到gtest
WITH_DOC 是否编译英文文档
WITH_DOC_CN 是否编译中文文档
WITH_SWIG_PY 是否编译python的swig接口,python的swig接口可以方便进行预测和定制化训练 取决于是否找到swig

blas相关的编译选项

PaddlePaddle可以使用 MKLAtlas , OpenBlasrefference Blas ,任意一种cblas实现。 通过编译时指定路径来实现引用各种blas。

cmake编译时会首先在系统路径(/usr/lib:/usr/local/lib)中寻找这些blas的实现。同时 也会读取相关路径变量来进行搜索。路径变量为:

PaddlePaddle的cblas编译选项
编译选项 描述
MKL_ROOT mkl的路径,在${MKL_ROOT}/include下需要包含mkl.h,在${MKL_ROOT}/lib目录下需要包含 mkl_core,mkl_sequential和mkl_intel_lp64三个库
ATLAS_ROOT ATLAS库的路径,在${ATLAS_ROOT}/include下需要包含cblas.h,而在${ATLAS_ROOT}/lib下需要包含cblas和atlas两个库
OPENBLAS_ROOT 在${OPENBLAS_ROOT}/include下需要包含cblas.h,而在${OPENBLAS_ROOT}/lib下需要包含openblas库
REFERENCE_CBLAS_ROOT 在${REFERENCE_CBLAS_ROOT}/include下需要包含cblas.h,在${REFERENCE_CBLAS_ROOT}/lib下需要包含cblas库

这些变量均可以使用 -D命令指定。例如 cmake -D MKL_ROOT=/opt/mkl/。这些变 量也可以通过调用cmake命令前通过环境变量指定。例如

export MKL_ROOT=/opt/mkl
cmake

需要注意的是,这些变量只在第一次cmake的时候有效。如果在第一次cmake之后想要重新设 置这些变量,推荐清理( rm -rf )掉编译目录后,再指定。

cuda/cudnn相关的编译选项

PaddlePaddle可以使用 cudnn v2之后的任何一个cudnn版本来编译运行。但需要注意的是编译和 运行使用的cudnn尽量是同一个版本。推荐使用最新版本的cudnn v5.1。

在cmake配置时可以使用 CUDNN_ROOT 来配置CUDNN的安装路径。使用的命令也是 -D,例如 cmake -D CUDNN_ROOT=/opt/cudnnv5

需要注意的是,这些变量只在第一次cmake的时候有效。如果在第一次cmake之后想要重新设 置这些变量,推荐清理( rm -rf )掉编译目录后,再指定。