安装与编译

Linux安装PaddlePaddle

Q:Ubuntu18.10、CPU版本、Python3.6编译错误如何解决?

  • 版本、环境信息1)PaddlePaddle版本:Github develop版本 2)CPU:vmware14 3)GPU:非GPU4)系统环境:Ubuntu18.10 64位 Python3.6
  • 安装方式信息:本地编译中本机编译第十步make 命令
  • 错误信息
  1. [100%] Built target warpctc
  2. Install the project...
  3. -- Install configuration: "Release"
  4. -- Installing: /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/install/warpctc/lib/libwarpctc.so
  5. -- Installing: /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/install/warpctc/include/ctc.h
  6. [ 5%] Completed 'extern_warpctc'
  7. [ 5%] Built target extern_warpctc
  8. Scanning dependencies of target extern_gzstream
  9. [ 5%] Creating directories for 'extern_gzstream'
  10. [ 5%] Performing download step (git clone) for 'extern_gzstream'
  11. Cloning into 'extern_gzstream'...
  12. Already on 'master'
  13. Your branch is up to date with 'origin/master'.
  14. [ 5%] No patch step for 'extern_gzstream'
  15. [ 5%] No update step for 'extern_gzstream'
  16. [ 5%] No configure step for 'extern_gzstream'
  17. [ 5%] Performing build step for 'extern_gzstream'
  18. CPPFLAGS: "-I/home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/install/zlib/include" -I. -fPIC -O
  19. LDFLAGS: "-L/home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/install/zlib/lib" -L. -lgzstream -lz
  20. [ 5%] Performing install step for 'extern_gzstream'
  21. [ 5%] Completed 'extern_gzstream'
  22. [ 5%] Built target extern_gzstream
  23. Scanning dependencies of target place
  24. [ 5%] Building CXX object paddle/fluid/platform/CMakeFiles/place.dir/place.cc.o
  25. In file included from /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/mpl/aux_/na_assert.hpp:23,
  26. from /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/mpl/arg.hpp:25,
  27. from /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/variant/variant_fwd.hpp:19,
  28. from /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/variant/variant.hpp:27,
  29. from /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/variant.hpp:17,
  30. from /home/eason/main/source/ai/alg/Paddle/Paddle/paddle/fluid/platform/variant.h:45,
  31. from /home/eason/main/source/ai/alg/Paddle/Paddle/paddle/fluid/platform/place.h:21,
  32. from /home/eason/main/source/ai/alg/Paddle/Paddle/paddle/fluid/platform/place.cc:15:
  33. /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/mpl/assert.hpp:154:21: error: unnecessary parentheses in declaration of assert_arg [-Werror=parentheses]
  34. failed ************ (Pred::************
  35. ^
  36. /home/eason/main/source/ai/alg/Paddle/Paddle/build/third_party/boost/src/extern_boost/boost/mpl/assert.hpp:159:21: error: unnecessary parentheses in declaration of assert_not_arg [-Werror=parentheses]
  37. failed ************ (boost::mpl::not_::************
  38. ^
  39. cc1plus: all warnings being treated as errors
  40. make[2]: *** [paddle/fluid/platform/CMakeFiles/place.dir/build.make:63: paddle/fluid/platform/CMakeFiles/place.dir/place.cc.o] Error 1
  41. make[1]: *** [CMakeFiles/Makefile2:2670: paddle/fluid/platform/CMakeFiles/place.dir/all] Error 2
  42. make: *** [Makefile:152: all] Error 2
  • 问题解答自行编译建议的GCC版本:4.8、5.4以及更高。

Q:遇到如下cuDNN报错如何解决?

  1. CUDNN_STATUS_NOT_INITIALIZED at [/paddle/paddle/fluid/platform/device_context.cc:216]
  • 问题解答cuDNN与CUDA版本不一致导致。PIP安装的GPU版本默认使用CUDA 9.0和cuDNN 7编译,请根据您的环境配置选择在官网首页选择对应的安装包进行安装,例如paddlepaddle-gpu==1.2.0.post87 代表使用CUDA 8.0和cuDNN 7编译的1.2.0版本。

Q:cuda9.0需要安装哪一个版本的paddle,安装包在哪?

  • 问题解答pip install paddlepaddle-gpu 命令将安装支持CUDA 9.0 cuDNN v7的PaddlePaddle,可以参考安装说明文档

Q:使用 pip install paddlepaddle-gpu==0.14.0.post87命令在公司内部开发GPU机器上安装PaddlePaddle,安装信息如下:

安装与编译 - 图1机器的CUDA信息如下:安装与编译 - 图2按照官网安装:pip install paddlepaddle-gpu==0.14.0.post87执行 import paddle.fluid as fluid 失败安装与编译 - 图3奇怪的是,同样的环境下,上周运行成功,这周确运行失败,求解答?

  • 问题解答这通常是GPU显存不足导致的,请检查一下机器的显存,确保显存足够后再尝试import paddle.fluid

Q:在使用PaddlePaddle GPU的Docker镜像的时候,出现 Cuda Error: CUDA driver version is insufficient for CUDA runtime version?

  • 问题解答通常出现 Cuda Error: CUDA driver version is insufficient for CUDA runtime version, 原因在于没有把机器上CUDA相关的驱动和库映射到容器内部。使用nvidia-docker, 命令只需要将docker换为nvidia-docker即可。更多请参考nvidia-docker

Q:安成功安装了PaddlePaddle CPU版本后,使用Paddle训练模型,训练过程中,Paddle会自动退出,gdb显示Illegal instruction?

  • 报错信息
  1. *** Aborted at 1539697466 (unix time) try "date -d @1539697466" if you are using GNU date ***
  2. PC: @ 0x0 (unknown)
  3. *** SIGILL (@0x7fe3a27b7912) received by PID 13005 (TID 0x7fe4059d8700) from PID 18446744072140585234; stack trace: ***
  4. @ 0x318b20f500 (unknown)
  5. @ 0x7fe3a27b7912 paddle::framework::VisitDataType<>()
  6. @ 0x7fe3a279f84f paddle::operators::math::set_constant_with_place<>()
  7. @ 0x7fe3a1e50c21 paddle::operators::FillConstantOp::RunImpl()
  8. @ 0x7fe3a27526bf paddle::framework::OperatorBase::Run()
  9. @ 0x7fe3a1ca31ea paddle::framework::Executor::RunPreparedContext()
  10. @ 0x7fe3a1ca3be0 paddle::framework::Executor::Run()
  11. @ 0x7fe3a1bc9e7d _ZZN8pybind1112cpp_function10initializeIZN6paddle6pybindL13pybind11_initEvEUlRNS2_9framework8ExecutorERKNS4_11ProgramDescEPNS4_5ScopeEibbE63_vIS6_S9_SB_ibbEINS_4nameENS_9is_methodENS_7siblingEEEEvOT_PFT0_DpT1_EDpRKT2_ENUlRNS_6detail13function_callEE1_4_FUNEST_
  12. @ 0x7fe3a1c14c24 pybind11::cpp_function::dispatcher()
  13. @ 0x7fe405acf3e4 PyEval_EvalFrameEx
  14. @ 0x7fe405ad0130 PyEval_EvalCodeEx
  15. @ 0x7fe405ace4a1 PyEval_EvalFrameEx
  16. @ 0x7fe405ad0130 PyEval_EvalCodeEx
  17. @ 0x7fe405ace4a1 PyEval_EvalFrameEx
  18. @ 0x7fe405ad0130 PyEval_EvalCodeEx
  19. @ 0x7fe405a5c181 function_call
  20. @ 0x7fe405a340f3 PyObject_Call
  21. @ 0x7fe405accde7 PyEval_EvalFrameEx
  22. @ 0x7fe405acec56 PyEval_EvalFrameEx
  23. @ 0x7fe405ad0130 PyEval_EvalCodeEx
  24. @ 0x7fe405a5c27d function_call
  25. @ 0x7fe405a340f3 PyObject_Call
  26. @ 0x7fe405accde7 PyEval_EvalFrameEx
  27. @ 0x7fe405ad0130 PyEval_EvalCodeEx
  28. @ 0x7fe405a5c181 function_call
  29. @ 0x7fe405a340f3 PyObject_Call
  30. @ 0x7fe405a46f7f instancemethod_call
  31. @ 0x7fe405a340f3 PyObject_Call
  32. @ 0x7fe405a8abd4 slot_tp_call
  33. @ 0x7fe405a340f3 PyObject_Call
  34. @ 0x7fe405acd887 PyEval_EvalFrameEx
  35. @ 0x7fe405acec56 PyEval_EvalFrameEx
  • 问题解答CPU版本PaddlePaddle自动退出的原因通常是因为所在机器不支持AVX2指令集而主动abort。简单的判断方法:用gdb-7.9以上版本(因编译C++文件用的工具集是gcc-4.8.2,目前只知道gdb-7.9这个版本可以debug gcc4编译出来的目标文件):
  1. $ /path/to/gdb -iex "set auto-load safe-path /" -iex "set solib-search-path /path/to/gcc-4/lib" /path/to/python -c core.xxx

在gdb界面:

  1. (gdb) disas

找到箭头所指的指令,例如:

  1. 0x00007f381ae4b90d <+3101>: test %r8,%r8
  2. => 0x00007f381ae4b912 <+3106>: vbroadcastss %xmm0,%ymm1
  3. 0x00007f381ae4b917 <+3111>: lea (%r12,%rdx,4),%rdi

然后google一下这个指令需要的指令集。上面例子中的带xmm和ymm操作数的vbroadcastss指令只在AVX2中支持然后看下自己的CPU是否支持该指令集

  1. cat /proc/cpuinfo | grep flags | uniq | grep avx --color

如果没有AVX2,就表示确实是指令集不支持引起的主动abort如果没有AVX2指令集,就需要要安装不支持AVX2指令集版本的PaddlePaddle,默认安装的PaddlePaddle是支持AVX2指令集的,因为AVX2可以加速模型训练的过程,更多细节可以参考安装文档

Q:使用sudo nvidia-docker run —name Paddle -it -v $PWD:/work hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda8.0-cudnn7 /bin/bash,安装成功后,出现如下问题

  1. import paddle.fluid
  2. *** Aborted at 1539682149 (unix time) try "date -d @1539682149" if you are using GNU date ***
  3. PC: @ 0x0 (unknown)
  4. *** SIGILL (@0x7f6ac6ea9436) received by PID 16 (TID 0x7f6b07bc7700) from PID 18446744072751846454; stack trace: ***
  • 问题解答请先确定一下机器是否支持AVX2指令集,如果不支持,请按照相应的不支持AVX2指令集的PaddlePaddle,可以解决该问题。

Q:使用的系统是Ubuntu 16.04,GPU相关环境:cuda8.0, cudnn 6.0, 安装最新版的paddlepaddle fluid 后,import paddle.fluid时问题如下:

  • 报错信息
  1. Traceback (most recent call last):
  2. File "", line 1, in
  3. File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/init.py", line 132, in
  4. bootstrap()
  5. File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/init.py", line 126, in bootstrap
  6. core.init_devices(not in_test)
  7. paddle.fluid.core.EnforceNotMet: CUBLAS: not initialized, at [/paddle/paddle/fluid/platform/device_context.cc:153]
  8. PaddlePaddle Call Stacks:
  9. 0 0x7f0238da06f6p paddle::platform::EnforceNotMet::EnforceNotMet(std::exception_ptr::exception_ptr, char const*, int) + 486
  10. 1 0x7f0239b1ee54p paddle::platform::CUDADeviceContext::CUDADeviceContext(paddle::platform::CUDAPlace) + 1684
  11. 2 0x7f0239b1feb0p paddle::platform::DeviceContextPool::DeviceContextPool(std::vector<boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void, boost::detail::variant::void, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, std::allocator<boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> > > const&) + 752
  12. 3 0x7f0238e368bcp paddle::framework::InitDevices(bool, std::vector<int, std::allocator >) + 588
  13. 4 0x7f0238e36addp paddle::framework::InitDevices(bool) + 285
  14. 5 0x7f0238d865bap
  15. 6 0x7f0238db1804p pybind11::cpp_function::dispatcher(_object*, _object*, _object*) + 2596
  16. 7 0x4bc3fap PyEval_EvalFrameEx + 1482
  17. 8 0x4b9ab6p PyEval_EvalCodeEx + 774
  18. 9 0x4c1e6fp PyEval_EvalFrameEx + 24639
  19. 10 0x4b9ab6p PyEval_EvalCodeEx + 774
  20. 11 0x4b97a6p PyEval_EvalCode + 22
  21. 12 0x4b96dfp PyImport_ExecCodeModuleEx + 191
  22. 13 0x4b2b06p
  23. 14 0x4b402cp
  24. 15 0x4a4ae1p
  25. 16 0x4a4513p PyImport_ImportModuleLevel + 2259
  26. 17 0x4a59e4p
  27. 18 0x4a577ep PyObject_Call + 62
  28. 19 0x4c5e10p PyEval_CallObjectWithKeywords + 48
  29. 20 0x4be6d7p PyEval_EvalFrameEx + 10407
  30. 21 0x4b9ab6p PyEval_EvalCodeEx + 774
  31. 22 0x4eb30fp
  32. 23 0x44a7a2p PyRun_InteractiveOneFlags + 400
  33. 24 0x44a56dp PyRun_InteractiveLoopFlags + 186
  34. 25 0x43092ep
  35. 26 0x493ae2p Py_Main + 1554
  36. 27 0x7f026bfa1830p __libc_start_main + 240
  37. 28 0x4933e9p _start + 41
  • 问题解答请先查看您系统GPU环境的适配关系,应该选择和您的系统已经安装的CUDA版本相同的whl包,您的系统是cuda 8.0, cudnn 6 应该使用cuda8.0_cudnn7_avx_mkl才可以适配。然后尝试import paddle.fluid命令看看是否报错。如果报错,则可能是GPU 和CUDA环境没有正确配置。如果没有报错,请判断是否有给所有相关文件sudo权限

Q:安装的是cuda9.0和cudnn7.0,默认安装的是0.14.0.post87,训练一个手写数据那个例子的时候报错?

  • 报错信息:
  1. Traceback (most recent call last):
  2. File "train.py", line 240, in <module>
  3. main()
  4. File "train.py", line 236, in main
  5. train(args)
  6. File "train.py", line 147, in train
  7. exe.run(fluid.default_startup_program())
  8. File "/usr/local/lib/python2.7/dist-packages/paddle/fluid/executor.py", line 443, in run
  9. self.executor.run(program.desc, scope, 0, True, True)
  10. paddle.fluid.core.EnforceNotMet: enforce allocating <= available failed, 1827927622 > 1359806208
  11. at [/paddle/paddle/fluid/platform/gpu_info.cc:119]
  12. PaddlePaddle Call Stacks:
  13. 0 0x7f1bac5312f6p paddle::platform::EnforceNotMet::EnforceNotMet(std::__exception_ptr::exception_ptr, char const*, int) + 486
  14. 1 0x7f1bad3a95bep paddle::platform::GpuMaxChunkSize() + 766
  15. 2 0x7f1bad2d92ddp paddle::memory::GetGPUBuddyAllocator(int) + 141
  16. 3 0x7f1bad2d94ecp void* paddle::memory::Alloc<paddle::platform::CUDAPlace>(paddle::platform::CUDAPlace, unsigned long) + 28
  17. 4 0x7f1bad2ced42p paddle::framework::Tensor::mutable_data(boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_>, std::type_index) + 866
  18. 5 0x7f1bac7a0cbfp paddle::operators::FillConstantOp::RunImpl(paddle::framework::Scope const&, boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) const + 1007
  19. 6 0x7f1bad261ebdp paddle::framework::OperatorBase::Run(paddle::framework::Scope const&, boost::variant<paddle::platform::CUDAPlace, paddle::platform::CPUPlace, paddle::platform::CUDAPinnedPlace, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_, boost::detail::variant::void_> const&) + 205
  20. 7 0x7f1bac5cd06fp paddle::framework::Executor::RunPreparedContext(paddle::framework::ExecutorPrepareContext*, paddle::framework::Scope*, bool, bool, bool) + 255
  21. 8 0x7f1bac5ce0c0p paddle::framework::Executor::Run(paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool) + 128
  22. 9 0x7f1bac548cbbp void pybind11::cpp_function::initialize<pybind11::cpp_function::initialize<void, paddle::framework::Executor, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool, pybind11::name, pybind11::is_method, pybind11::sibling>(void (paddle::framework::Executor::*)(paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool), pybind11::name const&, pybind11::is_method const&, pybind11::sibling const&)::{lambda(paddle::framework::Executor*, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool)#1}, void, paddle::framework::Executor*, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool, pybind11::name, pybind11::is_method, pybind11::sibling>(pybind11::cpp_function::initialize<void, paddle::framework::Executor, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool, pybind11::name, pybind11::is_method, pybind11::sibling>(void (paddle::framework::Executor::*)(paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool), pybind11::name const&, pybind11::is_method const&, pybind11::sibling const&)::{lambda(paddle::framework::Executor*, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool)#1}&&, void (*)(paddle::framework::Executor*, paddle::framework::ProgramDesc const&, paddle::framework::Scope*, int, bool, bool), pybind11::name const&, pybind11::is_method const&, pybind11::sibling const&)::{lambda(pybind11::detail::function_call&)#3}::_FUN(pybind11::detail::function_call) + 555
  23. 10 0x7f1bac5411c4p pybind11::cpp_function::dispatcher(_object*, _object*, _object*) + 2596
  24. 11 0x4c37edp PyEval_EvalFrameEx + 31165
  25. 12 0x4b9ab6p PyEval_EvalCodeEx + 774
  26. 13 0x4c16e7p PyEval_EvalFrameEx + 22711
  27. 14 0x4b9ab6p PyEval_EvalCodeEx + 774
  28. 15 0x4c1e6fp PyEval_EvalFrameEx + 24639
  29. 16 0x4c136fp PyEval_EvalFrameEx + 21823
  30. 17 0x4b9ab6p PyEval_EvalCodeEx + 774
  31. 18 0x4eb30fp
  32. 19 0x4e5422p PyRun_FileExFlags + 130
  33. 20 0x4e3cd6p PyRun_SimpleFileExFlags + 390
  34. 21 0x493ae2p Py_Main + 1554
  35. 22 0x7f1bd6ae9830p __libc_start_main + 240
  36. 23 0x4933e9p _start + 41
  • 问题解答该问题通常是GPU显存不足造成的,请在显存充足的GPU服务器上再次尝试则可。可以检查一下机器的显存使用情况。方法如下:
  1. test@test:~$ nvidia-smi
  2. Tue Jul 24 08:24:22 2018
  3. +-----------------------------------------------------------------------------+
  4. | NVIDIA-SMI 384.130 Driver Version: 384.130 |
  5. |-------------------------------+----------------------+----------------------+
  6. | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
  7. | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
  8. |===============================+======================+======================|
  9. | 0 GeForce GTX 960 Off | 00000000:01:00.0 On | N/A |
  10. | 22% 52C P2 100W / 120W | 1757MiB / 1994MiB | 98% Default |
  11. +-------------------------------+----------------------+----------------------+
  12.  
  13. +-----------------------------------------------------------------------------+
  14. | Processes: GPU Memory |
  15. | GPU PID Type Process name Usage |
  16. |=============================================================================|
  17. | 0 1071 G /usr/lib/xorg/Xorg 314MiB |
  18. | 0 1622 G compiz 149MiB |
  19. | 0 2201 G fcitx-qimpanel 7MiB |
  20. | 0 15304 G ...-token=58D78B2D4A63DAE7ED838021B2136723 74MiB |
  21. | 0 15598 C python 1197MiB |
  22. +-----------------------------------------------------------------------------+

Q:版本为paddlepaddle_gpu-0.14.0.post87-cp27-cp27mu-manylinux1_x86_64.whl,跑一个简单的测试程序,出现Segmentation fault。其中 如果place为cpu,可以正常输出,改成gpu则core。

  • 程序代码
  1. def testpaddle014():
  2. place = fluid.CUDAPlace(0)
  3. #place = fluid.CPUPlace()
  4. print 'version', paddle.__version__, place
  5. input = fluid.layers.data(name='input', shape=[3,50,50], dtype='float32')
  6.  
  7. output = fluid.layers.conv2d(input=input,num_filters=1,filter_size=3,stride=1,padding=1,groups=1,act=None)
  8. #output = fluid.layers.fc(input=input,size=2)
  9.  
  10. fetch_list = [output.name]
  11. data = np.zeros((2,3,50,50), np.float32)
  12. exe = fluid.Executor(place)
  13. exe.run(fluid.default_startup_program())
  14. outputlist = exe.run(
  15. fluid.default_main_program(),
  16. feed={'input': data},
  17. fetch_list=fetch_list
  18. )
  19. print 'output', outputlist[0].shape
  • 问题解答安装版本为paddlepaddle_gpu-0.14.0.post87-cp27-cp27mu-manylinux1_x86_64.whl,其中post87是指在CUDA8.0、cudnn7.0编译的,请确定您机器上是否安装了对应版本的cuDNN。造成问题描述中现象的情况通常可能是环境不匹配导致的。

Q:安装完了PaddlePaddle后,出现以下python相关的单元测试都过不了的情况:

  1. 24 - test_PyDataProvider (Failed)
  2. 26 - test_RecurrentGradientMachine (Failed)
  3. 27 - test_NetworkCompare (Failed)
  4. 28 - test_PyDataProvider2 (Failed)
  5. 32 - test_Prediction (Failed)
  6. 33 - test_Compare (Failed)
  7. 34 - test_Trainer (Failed)
  8. 35 - test_TrainerOnePass (Failed)
  9. 36 - test_CompareTwoNets (Failed)
  10. 37 - test_CompareTwoOpts (Failed)
  11. 38 - test_CompareSparse (Failed)
  12. 39 - test_recurrent_machine_generation (Failed)
  13. 40 - test_PyDataProviderWrapper (Failed)
  14. 41 - test_config_parser (Failed)
  15. 42 - test_swig_api (Failed)
  16. 43 - layers_test (Failed)

并且查询PaddlePaddle单元测试的日志,提示:

  1. paddle package is already in your PYTHONPATH. But unittest need a clean environment.
  2. Please uninstall paddle package before start unittest. Try to 'pip uninstall paddle'.
  • 问题解答卸载PaddlePaddle包 pip uninstall paddle, 清理掉老旧的PaddlePaddle安装包,使得单元测试有一个干净的环境。如果PaddlePaddle包已经在python的site-packages里面,单元测试会引用site-packages里面的python包,而不是源码目录里 /python 目录下的python包。同时,即便设置 PYTHONPATH/python 也没用,因为python的搜索路径是优先已经安装的python包。

Q:根据官方文档中提供的步骤安装Docker,无法下载需要的golang,导致tar: Error is not recoverable: exiting now?

  • 报错截图安装与编译 - 图4

  • 问题解答由上图可知,生成docker镜像时需要下载golang,使用者需要保证电脑可以科学上网。选择下载并使用docker.paddlepaddlehub.com/paddle:latest-devdocker镜像,执行命令如下:

  1. git clone https://github.com/PaddlePaddle/Paddle.git
  2.  
  3. cd Paddle
  4.  
  5. git checkout -b 0.14.0 origin/release/0.14.0
  6.  
  7.  
  8. sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash

进入docker编译GPU版本的PaddlePaddle,执行命令如下:

  1. mkdir build && cd build
  2. # 编译GPU版本的PaddlePaddle
  3. cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=ON -DWITH_TESTING=ON
  4. make -j$(nproc)

通过上面的方式操作后:安装与编译 - 图5接着安装PaddlePaddle并运行线性回归test_fit_a_line.py程序测试一下PaddlePaddle是安装成功则可

  1. pip install build/python/dist/*.whl
  2. python python/paddle/fluid/tests/book/test_fit_a_line.py

Q:在Docker镜像上,GPU版本的PaddlePaddle运行结果报错

安装与编译 - 图6安装与编译 - 图7

  • 问题解答使用sudo docker run —name paddle-test -v $PWD:/paddle —network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash命令创建的docker容器仅能支持运行CPU版本的PaddlePaddle。使用如下命令重新开启支持GPU运行的docker容器:
  1. export CUDA_SO="<span class="markdown-equation" id="equation-0"></span>(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
  2.  
  3. export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')
  4.  
  5. sudo docker run <span class="markdown-equation" id="equation-1"></span>{DEVICES} --rm --name paddle-test-gpu -v /usr/bin/nvidia-smi:/usr/bin/nvidia-smi -v $PWD:/paddle --network=host -it docker.paddlepaddlehub.com/paddle:latest-dev /bin/bash

进入docker之后执行如下命令进行PaddlePaddle的安装及测试运行:

  1. export LD_LIBRARY_PATH=/usr/lib64:/usr/local/lib:$LD_LIBRARY_PATH
  2. pip install build/python/dist/*.whl
  3. python python/paddle/fluid/tests/book/test_fit_a_line.py

Q:在Liunx环境上,通过编译源码的方式安装PaddlePaddle,当安装成功后,运行 paddle version, 出现 PaddlePaddle 0.0.0?

  • 问题解答如果运行 paddle version, 出现PaddlePaddle 0.0.0;或者运行 cmake ..,出现
  1. CMake Warning at cmake/version.cmake:20 (message):
  2. Cannot add paddle version from git tag

在dev分支下这个情况是正常的,在release分支下通过export PADDLE_VERSION=对应版本号 来解决。

Q:安装PaddlePaddle过程中,出现paddlepaddle*.whl is not a supported wheel on this platform?

  • 问题解答paddlepaddle*.whl is not a supported wheel on this platform表示你当前使用的PaddlePaddle不支持你当前使用的系统平台,即没有找到和当前系统匹配的paddlepaddle安装包。最新的paddlepaddle python安装包支持Linux x86_64和MacOS 10.12操作系统,并安装了python 2.7和pip 9.0.1。请先尝试安装最新的pip,方法如下:
  1. pip install --upgrade pip

如果还不行,可以执行 python -c "import pip; print(pip.pep425tags.get_supported())" 获取当前系统支持的python包的后缀,并对比是否和正在安装的后缀一致。如果系统支持的是 linux_x86_64 而安装包是 manylinux1_x86_64 ,需要升级pip版本到最新;如果系统支持 manylinux1_x86_64 而安装包(本地)是 linux_x86_64 ,可以重命名这个whl包为 manylinux1_x86_64 再安装。

MacOS安装PaddlePaddle

Q:PaddlePaddle官方文档中,关于MacOS下安装PaddlePaddle只提及了MacOS中使用Docker环境安装PaddlePaddle的内容,没有Mac本机安装的内容?

  • 问题解答基于Docker容器编译PaddlePaddle与本机上直接编译PaddlePaddle,所使用的编译执行命令是不一样的,但是官网仅仅给出了基于Docker容器编译PaddlePaddle所执行的命令。 1.基于Docker容器编译PaddlePaddle,需要执行:
  1. # 1. 获取源码
  2.  
  3. git clone https://github.com/PaddlePaddle/Paddle.git
  4.  
  5. cd Paddle
  6.  
  7. # 2. 可选步骤:源码中构建用于编译PaddlePaddle的Docker镜像
  8.  
  9. docker build -t paddle:dev .
  10.  
  11. # 3. 执行下面的命令编译CPU-Only的二进制
  12.  
  13. 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
  14.  
  15. # 4. 或者也可以使用为上述可选步骤构建的镜像(必须先执行第2步)
  16.  
  17. docker run -it -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_TESTING=OFF" paddle:dev

2.直接在本机上编译PaddlePaddle,需要执行:

  1. # 1. 使用virtualenvwrapper创建python虚环境并将工作空间切换到虚环境
  2.  
  3. mkvirtualenv paddle-venv
  4.  
  5. workon paddle-venv
  6.  
  7. # 2. 获取源码
  8.  
  9. git clone https://github.com/PaddlePaddle/Paddle.git
  10.  
  11. cd Paddle
  12.  
  13. # 3. 执行下面的命令编译CPU-Only的二进制
  14.  
  15. mkdir build && cd build
  16.  
  17. cmake .. -DWITH_GPU=OFF -DWITH_TESTING=OFF
  18.  
  19. make -j$(nproc)

更详细的内容,请参考官方文档

Q:以源码方式在MacOS上安装时,出现Configuring incomplete, errors occured!?

  • 报错截图安装与编译 - 图8安装与编译 - 图9
  • 问题解答 安装PaddlePaddle编译时需要的各种依赖则可,如下:
  1. pip install wheel
  2. brew install protobuf@3.1
  3. pip install protobuf==3.1.0

如果执行pip install protobuf==3.1.0时报错,输出下图内容:

安装与编译 - 图10

从图中可以获得报错的关键为Cannot uninstall 'six',那么解决方法就是先安装好six,再尝试安装protobuf 3.1.0如下:

  1. easy_install -U six
  2. pip install protobuf==3.1.0

Q:MacOS 10.12下编译PaddlePaddle出现/bin/sh: wget: command not found,如何解决?

安装与编译 - 图11

  • 问题解答报错的原因从报错输出的信息中可以发现,即没有有找到wget命令,安装wget则可,安装命令如下:
  1. brew install wget

Q:官网中只介绍了Mac下使用Docker安装编译PaddlePaddle的方式,因为我对Docker不怎么熟悉,想直接安装到本地的Mac系统中,MacOS版本为10.13,是符合要求的,但尝试了多次后,已经出现No rule to make target错误?

  • 报错截图安装与编译 - 图12

  • 问题解答该问题是有CMake引擎的,修改CMake编译命令,打开WITH_FLUID_ONLY编译选项,修改后编译命令如下:

  1. cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF

Q:MacOS本机直接通过源码编译的方式安装PaddlePaddle出现[paddle/fluid/platform/CMakeFiles/profiler_py_proto.dir/all] Error 2?

  • 报错截图安装与编译 - 图13
  • 问题解答 使用cmake版本为3.4则可

Q:MacOS本地编译PaddlePaddle github上develop分支的代码出现,出现No such file or directory错误?

  • 报错截图安装与编译 - 图14

  • 问题解答因为此时develop分支上Generating build/.timestamp这一步涉及的代码还在进行修改,所以并不能保证稳定,建议切换回稳定分支进行编译安装。 可以通过执行如下命令将分支切换到0.14.0进行编译:

  1. cd Paddle
  2. git checkout -b release/1.1
  3. cd build && rm -rf *
  4. cmake .. -DWITH_FLUID_ONLY=ON -DWITH_GPU=OFF -DWITH_TESTING=OFF
  5. make -j4

编译成功后的结果如图: 安装与编译 - 图15

Q:paddle源码编译(osx)报各种module找不到的问题

从源码编译,最后cmake ..Could NOT find PY_google.protobuf (missing: PY_GOOGLE.PROTOBUF)CMake Error at cmake/FindPythonModule.cmake:27 (message):python module google.protobuf is not found若通过-D设置路径后,又会有其他的如Could not find PY_wheel等其他找不到的情况+ 问题解答安装与编译 - 图16如上,当cmake找到python解释器和python库时,如果安装了许多pythons,它总会找到不同版本的Python。在这种情况下,您应该明确选择应该使用哪个python。通过cmake显式设置python包。只要确保python libs和python解释器是相同的python可以解决所有这些问题。当这个python包有一些原生扩展时,例如numpy,显式set python包可能会失败。

Q:在MacOS下,本地直接编译安装PaddlePaddle遇到collect2: ld terminated with signal 9 [Killed] ?

  • 问题解答该问题是由磁盘空间不足造成的,你的硬盘要有30G+的空余空间,请尝试清理出足够的磁盘空间,重新安装。

Q:因为需要安装numpy等包,但在Mac自带的Python上无法安装,权限错误导致难以将PaddlePaddle正常安装到Mac本地?

  • 问题解答Mac上对自带的Python和包有严格的权限保护,最好不要在自带的Python上安装。建议用virtualenv建立一个新的Python环境来操作。virtualenv的基本原理是将机器上的Python运行所需的运行环境完整地拷贝一份。我们可以在一台机器上制造多份拷贝,并在这多个拷贝之间自由切换,这样就相当于在一台机器上拥有了多个相互隔离、互不干扰的Python环境。

下面使用virtualenv为Paddle生成一个专用的Python环境。 安装virtualenv,virtualenv本身也是Python的一个包,可以用pip进行安装:

  1. sudo -H pip install virtualenv
  1. 由于virtualenv需要安装给系统自带的Python,因此需要使用sudo权限。接着使用安装好的virtualenv创建一个新的Python运行环境:
  2. ```
  3. virtualenv --no-site-packages paddle
  4. ```
  5. --no-site-packages 参数表示不拷贝已有的任何第三方包,创造一个完全干净的新Python环境。后面的paddle是我们为这个新创建的环境取的名字。执行完这一步后,当前目录下应该会出现一个名为paddle(或者你取的其他名字)的目录。这个目录里保存了运行一个Python环境所需要的各种文件。
  6. 启动运行环境:
  7. ```
  8. source paddle/bin/activate
  9. ```
  10. 执行后会发现命令提示符前面增加了(paddle)字样,说明已经成功启动了名为‘paddle’的Python环境。执行which python,可以发现使用的已经是刚刚创建的paddle目录下的Python
  11. 在这个环境中,我们可以自由地进行PaddlePaddle的安装、使用和开发工作,无需担心对系统自带Python的影响。
  12. 如果我们经常使用Paddle这个环境,我们每次打开终端后都需要执行一下source paddle/bin/activate来启动环境,比较繁琐。为了简便,可以修改终端的配置文件,来让终端每次启动后自动启动特定的Python环境。
  13. 执行:
  14. ```
  15. vi ~/.bash_profile
  16. ```
  17. 打开终端配置文件,并在文件的最后添加一行:
  18. ```
  19. source paddle/bin/activate
  20. ```
  21. 这样,每次打开终端时就会自动启动名为‘paddle’的Python环境了。