使用指南从源码编译PaddlePaddle

Posted 飞桨PaddlePaddle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用指南从源码编译PaddlePaddle相关的知识,希望对你有一定的参考价值。

导语

本周将汇总整理PaddlePaddle的安装编译方法,发布系列推文。推文目录如下:


周一:用pip安装PaddlePaddle

周二:用Docker安装运行PaddlePaddle

周三:用Docker编译和测试PaddlePaddle

周四:从源码编译PaddlePaddle

周五:基本使用概念和安装及编译问题汇总


欢迎大家在留言区分享您在相应环节中遇到的问题,我们会 一 一为您解答,同时也会选择一部分展示在周五汇总贴中;欢迎大家在留言区提出您的反馈,表达您的见解;本周每篇推文点赞数最多的一条留言会被置顶(当日推文统计时间截止次日中午12点)并赠送小礼品一份(PaddlePaddle定制帽衫)


编写|PaddlePaddle

排版|wangp


 1 

编译方法

PaddlePaddle主要使用 CMake (链接:https://cmake.org/)以及GCC, G++作为编译工具。 我们推荐您使用PaddlePaddle Docker编译环境镜像完成编译,这样可以免去单独安装编译依赖的步骤,可选的不同编译环境Docker镜像 可以(链接:https://hub.docker.com/r/paddlepaddle/paddle_manylinux_devel/tags/)找到


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


编译PaddlePaddle,需要执行:

git clone https://github.com/PaddlePaddle/Paddle.git


cd Paddle


# 如果使用Docker编译环境,执行下面的命令编译CPU-Only的二进制

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


# 如果不使用Docker编译环境,执行下面的命令

mkdir build


cd build


cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF ..


make


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

pip install build/python/dist/*.whl


如果机器中已经安装过PaddlePaddle,有两种方法:

1. 先卸载之前的版本,再重新安装

pip uninstall paddlepaddle

pip install build/python/dist/*.whl


2. 直接升级到更新的版本

pip install build/python/dist/*.whl -U


 2 

执行单元测试

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


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

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


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

mkdir build

cd build

cmake -DWITH_GPU=OFF -DWITH_TESTING=OFF ..

make

ctest

# 指定执行其中一个单元测试 test_mul_op

ctest -R test_mul_op


 3 

编译依赖

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

【使用指南】从源码编译PaddlePaddle

PaddlePaddle编译依赖


 4 

编译选项

PaddlePaddle的编译选项,包括生成CPU/GPU二进制文件、链接何种BLAS库等。 用户可在调用cmake的时候设置它们,详细的cmake使用方法可以参考 官方文档 (链接:https://cmake.org/cmake-tutorial/)


在cmake的命令行中,通过使用 -D 命令设置该类编译选项,例如:

cmake .. -DWITH_GPU=OFF


【使用指南】从源码编译PaddlePaddle
【使用指南】从源码编译PaddlePaddle

编译选项说明


BLAS


PaddlePaddle支持 MKL(链接:https://software.intel.com/en-us/mkl)和 OpenBlAS(链接:http://www.openblas.net/) 两种BLAS库。默认使用MKL。如果使用MKL并且机器含有AVX2指令集, 还会下载MKL-DNN数学库


如果关闭MKL,则会使用OpenBLAS作为BLAS库


CUDA/cuDNN


PaddlePaddle在编译时/运行时会自动找到系统中安装的CUDA和cuDNN库进行编译和执行。 使用参数 -DCUDA_ARCH_NAME=Auto 可以指定开启自动检测SM架构,加速编译


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


 5 

编译选项的设置

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

cmake .. -DWITH_GPU=ON -DWITH_TESTING=OFF -DCUDNN_ROOT=/opt/cudnnv5

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


【使用指南】从源码编译PaddlePaddle


*原创贴,版权所有,未经许可,禁止转载

*值班小Paddle:wangp

*欢迎在留言区分享您的观点

以上是关于使用指南从源码编译PaddlePaddle的主要内容,如果未能解决你的问题,请参考以下文章

如何从源码启动和编译IoTSharp

Linux驱动开发笔记:ubuntu系统从源码编译安装gcc7.3.0编译器

#从源码到可执行程序

《从语言编译器源码入手,编译原理该这么学》

从 0 开始编译 Android 系统源码

从 0 开始编译 Android 系统源码