PaddlePaddle / Paddle

PArallel Distributed Deep LEarning: Machine Learning Framework from Industrial Practice (『飞桨』核心框架,深度学习&机器学习高性能单机、分布式训练和跨平台部署)
http://www.paddlepaddle.org/
Apache License 2.0
21.66k stars 5.44k forks source link

从源码编译速度慢的问题 #3614

Closed caijinlong closed 6 years ago

caijinlong commented 6 years ago

hi paddle 开发人员,我 git clone 完 paddle 源码,根据网上的步骤: http://doc.paddlepaddle.org/release/0.10.0/doc/getstarted/build_and_install/build_from_source_en.html 进行编译,当 make -j 20的时候,一会就卡在了: [ 29%] Built target uniform_random_op

编译起来的速度很慢,想问下是怎么回事。

gangliao commented 6 years ago

可以make VERBOSE=1 -j8 打印详细信息看一下是hang住了还是其他说明原因?

caijinlong commented 6 years ago

敲 make VERBOSE=1 -j8 ,并没有看到更多有用的信息,就停留在了 [ 29%] Built target uniform_random_op

caijinlong commented 6 years ago

make[2]: Leaving directory `/data1/home/img/paddle/build' [ 29%] Built target uniform_random_op

gzip: stdin: unexpected end of file tar: Unexpected EOF in archive tar: Unexpected EOF in archive tar: Error is not recoverable: exiting now make[2]: [third_party/mklml/src/extern_mklml-stamp/extern_mklml-download] Error 2 make[2]: Leaving directory `/data1/home/img/paddle/build' make[1]: [CMakeFiles/extern_mklml.dir/all] Error 2 make[1]: Leaving directory `/data1/home/img/paddle/build' make: *** [all] Error 2

这个 make 的时候,还会去下载东西啊?可以提前下载吗

qingqing01 commented 6 years ago

mklml, mkldnn这些暂时还没开发完全吧,用户可以先关掉这些选项吧:

cmake .. -DWITH_MKLDNN=OFF -DWITH_MKLML=OFF
caijinlong commented 6 years ago

那求更新 wiki 上编译的步骤。。http://doc.paddlepaddle.org/release/0.10.0/doc/getstarted/build_and_install/build_from_source_en.html

luotao1 commented 6 years ago

mklml这些是由于网速原因导致下载不下来。 但这些和编译速度慢是没有关系的。我们teamcity服务器上从头编译+单测时间不超过15分钟。

caijinlong commented 6 years ago

另外一个问题: option(WITH_GPU "Compile PaddlePaddle with NVIDIA GPU" ${CUDA_FOUND}), 这个CUDA_FOUND是哪个文件去找的。我手动设置了 WITH_GPU ON,貌似会出问题吧,比如它会去找 cuda的bin的路径还有library。

caijinlong commented 6 years ago

这种是什么编译问题呀: /home/img/paddle/build/third_party/eigen3/src/extern_eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h(195): error: expected a ")"

/home/img/paddle/build/third_party/eigen3/src/extern_eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h(199): error: expected a ")"

/home/img/paddle/build/third_party/eigen3/src/extern_eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h(50): error: expected a ")"

我的 cmake命令: cmake3 .. -DWITH_MKLDNN=OFF -DWITH_MKLML=OFF -DCMAKE_INSTALL_PREFIX=~/paddle_install/

qingqing01 commented 6 years ago

这个CUDA_FOUND是哪个文件去找的

CUDA_FOUND 是系统的: https://cmake.org/cmake/help/v3.0/module/FindCUDA.html

gangliao commented 6 years ago

cmake3 .. -DWITH_MKLDNN=OFF -DWITH_MKLML=OFF -DCMAKE_INSTALL_PREFIX=~/paddle_install/ -DWITH_GPU=OFF

关闭GPU,编译有问题吗??@caijinlong

caijinlong commented 6 years ago

我在试,那个每次更改了 cmake3 的命令之后,都需要删掉 build 目录下的文件吗 @gangliao

caijinlong commented 6 years ago

关闭 GPU 也不行,

/home/img/paddle/build/third_party/eigen3/src/extern_eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h:245:22: error: expected ‘)’ before ‘extension’ template<std::size_t I, class T, std::size_t N> constexpr inline T& array_get(std::array<T,N>& a) { return (T&) STD_GET_ARR_HACK; } ^
/home/img/paddle/build/third_party/eigen3/src/extern_eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h:245:22: error: expected ‘>’ before ‘extension’ /home/img/paddle/build/third_party/eigen3/src/extern_eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h:245:22: error: expected unqualified-id before ‘)’ token template<std::size_t I, class T, std::size_t N> constexpr inline T& array_get(std::array<T,N>& a) { return (T&) STD_GET_ARR_HACK; }

看代码的话,包含unsupported/Eigen/CXX11/src/util/EmulateArray.h 和用不用 gpu 没关系

@gangliao

gangliao commented 6 years ago

你什么系统配置,我这里没有问题。 Eigen Tensor这块确实不太稳定,主要是Eigen官方现在也是experimental状态。

caijinlong commented 6 years ago

gcc 4.8.5 cmake3 3.6.3 centos系统 @gangliao

caijinlong commented 6 years ago

你是在 Paddle 的那个分支上测试的啊?可以写下你的代码版本和cmake3命令吗? @gangliao

gangliao commented 6 years ago

我用的Mac OS, paddle develop分支

cmake .. -DCMAKE_INSTALL_PREFIX=/Users/liaogang/Desktop/paddle/ -DWITH_GPU=ON -DPYTHON_EXECUTABLE=/usr/local/bin/python -DPYTHON_LIBRARY=/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/libpython2.7.dylib -DCMAKE_BUILD_TYPE=Release -DWITH_MKLML=OFF -DWITH_MKLDNN=OFF 
gangliao commented 6 years ago

你如果一定要源码安装,docker其实也可以

caijinlong commented 6 years ago

你可以用 linux 系统编译一下啊。。 这个不应该出问题。。

gangliao commented 6 years ago

我们的CI系统就是linux的,只是是基于ubuntu的,一直没问题

caijinlong commented 6 years ago

什么地方用到了这个,可以注释掉么 0.0

caijinlong commented 6 years ago

不可能连 centos 都编译不过吧 ^_^,这个肯定是那个地方出问题了。

gangliao commented 6 years ago

你centos什么版本,我们内部centos都是可以的

gangliao commented 6 years ago

你也可以 rm -rf third_party 然后,重新编译一次试试。

caijinlong commented 6 years ago

CentOS Linux release 7.2.1511 (Core)

caijinlong commented 6 years ago

我试了哦,直接将 build 下的所有文件都删了,重新编译,效果是一样的 - -

QiJune commented 6 years ago

@caijinlong 快速的解决方案是nvidia-docker,构建一个ubuntu 16.04的环境。 centos paddle官方没有支持,我搞个centos的环境试一下编译过程吧。

caijinlong commented 6 years ago

嗯嗯,可以试下编译过程,应该比较容易重复编译的过程 @QiJune

caijinlong commented 6 years ago

在线等重复过程。。 @QiJune

wangkuiyi commented 6 years ago

我感觉确实需要更新一下我们的wiki——从源码编译的时候用我们的docker image作为编译工具,而不需要用户自己安装和配置那么多的编译工具和库 (gcc, nvcc, clang-format, yapf ...)

caijinlong commented 6 years ago

确实啊,用 docker image 作为编译工具确实方便。但自己配置的环境应该也能编译过啊 @wangkuiyi

QiJune commented 6 years ago

在centos上编译可以复现该问题,代码报错的地方在eigen/unsupport模块;我尝试设置了一些编译选项,暂时没有效果。因为是eigen的代码,所以也不太好直接改eigen的源码。有待进一步跟踪 @caijinlong

caijinlong commented 6 years ago

最好别用那块的代码,unsupport 可能不稳定- -

QiJune commented 6 years ago

@caijinlong 目前paddle重构的代码依赖于eigen unsupport模块,在重构过程中确实会有不稳定的地方。重构的代码跟原有代码是相互隔绝的。我加一个编译选项吧,可以把这部分代码隔离,不影响使用原有paddle。

caijinlong commented 6 years ago

弄好的,hi我下~ 我早点用起来 :-) 感谢 paddle 同事。 @QiJune

luotao1 commented 6 years ago

@wangkuiyi 主要很多用户的开发机没有root权限,无法装docker

gongweibao commented 6 years ago

@caijinlong 在7.2.1511上使用Docker挺方便的,不使用Docker而在Centos上直接搭建PaddlePaddle的编译测试环境的诉求是?

caijinlong commented 6 years ago

宝哥好,一般我都喜欢自己编译环境。。 @gongweibao

QiJune commented 6 years ago

@caijinlong 可以先关注这个pr https://github.com/PaddlePaddle/Paddle/pull/3631/files WITH_REFACTORING=OFF 把重构的代码给隔离

caijinlong commented 6 years ago

就是我自己按照这个修改再来编译哈 @QiJune

QiJune commented 6 years ago

是的 可以自己手动修改 @caijinlong

caijinlong commented 6 years ago

问题已经解决了,感谢 paddle 同学! @QiJune