Mac OS系统下直接本机编译PaddlePaddle“踩坑”记录
Created by: wzzju
Mac OS系统下直接本机编译PaddlePaddle“踩坑”记录
文档声明:编译过程参照官网文档(Fluid 0.14.0)。硬件环境为MacBook Pro,操作系统版本为10.13.5 (17F77)。
问题1
基于Docker容器编译PaddlePaddle与本机上直接编译PaddlePaddle,所使用的编译执行命令是不一样的,但是官网仅仅给出了基于Docker容器编译PaddlePaddle所执行的命令。
建议文档对应处修改为如下类似内容:
基于Docker容器编译PaddlePaddle,需要执行:
# 1. 获取源码
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
# 2. 可选步骤:源码中构建用于编译PaddlePaddle的Docker镜像
docker build -t paddle:dev .
# 3. 执行下面的命令编译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/paddle_build.sh build
# 4. 或者也可以使用为上述可选步骤构建的镜像(必须先执行第2步)
docker run -it -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddle:dev
直接在本机上编译PaddlePaddle,需要执行:
# 1. 使用virtualenvwrapper创建python虚环境并将工作空间切换到虚环境
mkvirtualenv paddle-venv
workon paddle-venv
# 2. 获取源码
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
# 3. 执行下面的命令编译CPU-Only的二进制
mkdir build && cd build
cmake .. -DWITH_GPU=OFF -DWITH_TESTING=OFF
make -j$(nproc)
问题2
解决方法:
pip install wheel
brew install protobuf@3.1
pip install protobuf==3.1.0
pip install protobuf==3.1.0
时报错:
执行
解决方法:
easy_install -U six
pip install protobuf==3.1.0
问题3
解决方法:
brew install wget
问题4
解决方法:
修改CMake编译命令,打开WITH_FLUID_ONLY
编译选项,修改后编译命令如下:
cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF
问题5
解决方法一:
修改paddle/fluid/platform/CMakeFiles/profiler_py_proto.dir/build.make
内容的第60行~第62行内容,原内容如下(划线部分为需要修改的地方):
解决方法二:
将CMake版本降级到3.4及以下,故而最终的CMake版本控制范围为:3.2=<CMake<=3.4
。目前,官网文档上只写了CMake版本需要大于等于3.2,还应该强调不能使用CMake太新的版本,即可将CMake使用版本范围声明为:3.2=<CMake<=3.4
。
问题6
解决方法:
# 上面编译的是develop分支,此时Generating build/.timestamp这一步涉及的代码还在修改中。
接下来通过执行如下命令将分支切换到0.14.0
进行编译:
cd Paddle
git checkout -b 0.14.0 origin/release/0.14.0
cd build && rm -rf *
cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF
make -j4
编译成功后结果如下:
问题7——运行PaddlePaddle出错
使用pip install build/python/dist/*.whl
命令安装PaddlePaddle后,
测试运行PaddlePaddle时出错,错误信息如下:
解决方法:
卸载paddlepaddle,安装openblas,重新编译安装。
pip uninstall paddlepaddle
cd Paddle/build && rm -rf *
brew install openblas
cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF
make -j4
问题8——重新编译时报错
解决方法:
执行cmake命令时加上编译选项-DOPENBLAS_INC_DIR=/usr/local/Cellar/openblas/0.3.1/include/
,具体如下:
cd Paddle/build && rm -rf *
cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=ON -DOPENBLAS_INC_DIR=/usr/local/Cellar/openblas/0.3.1/include/
time make -j4
最终编译结果
test_fit_a_line.py
程序:
安装PaddlePaddle并运行pip install build/python/dist/*.whl
python python/paddle/fluid/tests/book/test_fit_a_line.py
运行结果
总结
Mac OS系统下编译PaddlePaddle需要事先安装好wheel
、protobuf
、wget
、openblas
等软件,而一个全新等Mac OS系统上这些软件可能均未安装,因此在官方文档中应该明确指出Mac OS系统下编译PaddlePaddle依赖wheel
、protobuf
、wget
、openblas
等软件,且要指出这些软件在Mac OS下不会自动安装,需要使用者手动安装。对于CMake等要求,目前官网文档上只写了CMake版本需要大于等于3.2,还应该强调不能使用CMake太新的版本,即可将CMake使用版本范围声明为:3.2=<CMake<=3.4
。