设置PaddlePaddle的编译选项¶
PaddlePaddle的编译选项可以在调用cmake的时候设置。cmake是一个跨平台的编译脚本,调用 cmake可以将cmake项目文件,生成各个平台的makefile。详细的cmake使用方法可以参考 cmake的官方文档 。
PaddlePaddle的编译选项是可以控制PaddlePaddle生成CPU/GPU版本二进制,链接何种blas等等。所有的 编译选项列表如下
PaddlePaddle的编译选项¶
bool型的编译选项¶
设置下列编译选项时,可以在cmake的命令行设置。使用 -D命令即可。例如
cmake -D WITH_GPU=OFF
选项 | 说明 | 默认值 |
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相关的编译选项¶
Paddle可以使用 MKL , Atlas , OpenBlas 和 refference Blas ,任意一种cblas实现。 通过编译时指定路径来实现引用各种blas。
cmake编译时会首先在系统路径(/usr/lib:/usr/local/lib)中寻找这些blas的实现。同时 也会读取相关路径变量来进行搜索。路径变量为:
编译选项 | 描述 |
---|---|
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相关的编译选项¶
Paddle可以使用 cudnn v2之后的任何一个cudnn版本来编译运行。但需要注意的是编译和 运行使用的cudnn尽量是同一个版本。推荐使用最新版本的cudnn v5.1。
在cmake配置时可以使用 CUDNN_ROOT
来配置CUDNN的安装路径。使用的命令也是
-D,例如 cmake -D CUDNN_ROOT=/opt/cudnnv5
。
需要注意的是,这些变量只在第一次cmake的时候有效。如果在第一次cmake之后想要重新设
置这些变量,推荐清理( rm -rf
)掉编译目录后,再指定。