乐趣区

PaddlePaddle踩坑指北系列——Linux安装(一)

本周我们精选出社区问答进行整理汇总,开发者在使用 PaddlePaddle 过程中遇到任何技术难题,都可以到 PaddlePaddle 公众号 FAQ 专栏上寻求解决方案,希望能帮助新用户在 Linux 安装过程中解答疑惑。
 
1. 问题:cuda9.0 需要安装哪一个版本的 paddle,安装包在哪?
关键字:cuda 9.0 问题描述:cuda9.0 需要安装哪一个版本的 paddle,安装包在哪,希望安装 Fluid 版本的 Paddle,而不是旧版的 Paddle 问题解答:paddlepaddle-gpu 使用 CUDA 9.0 和 cuDNN 7 编译的 0.14.0 版本因此,pip install paddlepaddle-gpu 即可。
可以参考安装说明文档:http://paddlepaddle.org/docum…
 2. 问题:pip install paddlepaddle-gpu 安装 fluid 版本报错
关键字:GPU 问题描述:使用 pip install paddlepaddle-gpu 命令在公司内部开发 GPU 机器上安装 PaddlePaddle,安装信息如下:
机器的 CUDA 信息如下:
按照官网安装:pip install paddlepaddle-gpu 执行 import paddle.fluid as fluid 失败
奇怪的是,同样的环境下,上周运行成功,这周确运行失败,求解答
解决方法:这通常是 GPU 显存不足导致的,请检查一下机器的显存,确保显存足够后再尝试 import paddle.fluid3. 问题:CUDA driver version is insufficient
关键字:CUDA insufficient 问题描述:在使用 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 即可。更多请参考:https://github.com/NVIDIA/nvi…4. 问题:安装 CPU 版本后训练主动 abort,gdb 显示 Illegal instruction
关键字:CPU 版本 Illegal instruction 问题描述:成功安装了 PaddlePaddle CPU 版本后,使用 Paddle 训练模型,训练过程中,Paddle 会自动退出,gdb 显示 Illegal instruction 报错输出:
Aborted at 1539697466 (unix time) try “date -d @1539697466” if you are using GNU date
PC: @               0x0 (unknown)
SIGILL (@0x7fe3a27b7912) received by PID 13005 (TID 0x7fe4059d8700) from PID 18446744072140585234; stack trace:
    @       0x318b20f500 (unknown)
    @     0x7fe3a27b7912 paddle::framework::VisitDataType<>()
    @     0x7fe3a279f84f paddle::operators::math::set_constant_with_place<>()
    @     0x7fe3a1e50c21 paddle::operators::FillConstantOp::RunImpl()
    @     0x7fe3a27526bf paddle::framework::OperatorBase::Run()
    @     0x7fe3a1ca31ea paddle::framework::Executor::RunPreparedContext()
    @     0x7fe3a1ca3be0 paddle::framework::Executor::Run()
    @     0x7fe3a1bc9e7d ZZN8pybind1112cpp_function10initializeIZN6paddle6pybindL13pybind11_initEvEUlRNS2_9framework8ExecutorERKNS4_11ProgramDescEPNS4_5ScopeEibbE63_vIS6_S9_SB_ibbEINS_4nameENS_9is_methodENS_7siblingEEEEvOT_PFT0_DpT1_EDpRKT2_ENUlRNS_6detail13function_callEE1_4_FUNEST
    @     0x7fe3a1c14c24 pybind11::cpp_function::dispatcher()
    @     0x7fe405acf3e4 PyEval_EvalFrameEx
    @     0x7fe405ad0130 PyEval_EvalCodeEx
    @     0x7fe405ace4a1 PyEval_EvalFrameEx
    @     0x7fe405ad0130 PyEval_EvalCodeEx
    @     0x7fe405ace4a1 PyEval_EvalFrameEx
    @    0x7fe405ad0130 PyEval_EvalCodeEx
    @     0x7fe405a5c181 function_call
    @     0x7fe405a340f3 PyObject_Call
    @     0x7fe405accde7 PyEval_EvalFrameEx
    @     0x7fe405acec56 PyEval_EvalFrameEx
    @     0x7fe405ad0130 PyEval_EvalCodeEx
    @     0x7fe405a5c27d function_call
    @     0x7fe405a340f3 PyObject_Call
    @     0x7fe405accde7 PyEval_EvalFrameEx
    @     0x7fe405ad0130 PyEval_EvalCodeEx
    @     0x7fe405a5c181 function_call
    @     0x7fe405a340f3 PyObject_Call
    @     0x7fe405a46f7f instancemethod_call
    @     0x7fe405a340f3 PyObject_Call
    @     0x7fe405a8abd4 slot_tp_call
    @     0x7fe405a340f3 PyObject_Call
    @     0x7fe405acd887 PyEval_EvalFrameEx
    @     0x7fe405acec56 PyEval_EvalFrameEx 
问题解答:CPU 版本 PaddlePaddle 自动退出的原因通常是因为所在机器不支持 AVX2 指令集而主动 abort。简单的判断方法:用 gdb-7.9 以上版本(因编译 C ++ 文件用的工具集是 gcc-4.8.2,目前只知道 gdb-7.9 这个版本可以 debug gcc4 编译出来的目标文件):$ /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 界面:
(gdb) disas
找到箭头所指的指令,例如:
 0x00007f381ae4b90d <+3101>: test   %r8,%r8
=> 0x00007f381ae4b912 <+3106>:  vbroadcastss %xmm0,%ymm1
  0x00007f381ae4b917 <+3111>: lea    (%r12,%rdx,4),%rdi 然后 google 一下这个指令需要的指令集。上面例子中的带 xmm 和 ymm 操作数的 vbroadcastss 指令只在 AVX2 中支持
然后看下自己的 CPU 是否支持该指令集
cat /proc/cpuinfo | grep flags | uniq | grep avx –color 如果没有 AVX2,就表示确实是指令集不支持引起的主动 abort
解决方法:如果没有 AVX2 指令集,就需要要安装不支持 AVX2 指令集版本的 PaddlePaddle,默认安装的 PaddlePaddle 是支持 AVX2 指令集的,因为 AVX2 可以加速模型训练的过程,更多细节可以参考安装文档 http://www.paddlepaddle.org/d…
5. 问题:nvidia-docker 运行镜像 latest-gpu-cuda8.0-cudnn7: SIGILL
关键字:nvidia-docker cuda8.0 cudnn7 问题描述:使用 sudo nvidia-docker run –name Paddle -it -v $PWD:/work hub.baidubce.com/paddlepaddle/paddle:latest-gpu-cuda8.0-cudnn7 /bin/bash,安装成功后,出现如下问题 
import paddle.fluid Aborted at 1539682149 (unix time) try “date -d @1539682149” if you are using GNU date
PC: @ 0x0 (unknown)
SIGILL (@0x7f6ac6ea9436) received by PID 16 (TID 0x7f6b07bc7700) from PID 18446744072751846454; stack trace:  
解决方法:请先确定一下机器是否支持 AVX2 指令集,如果不支持,请按照相应的不支持 AVX2 指令集的 PaddlePaddle,可以解决该问题。
如果在这篇文章中没有得到您所遇到问题的解答时,请不要着急。我们将即可推出后续问题解答报道,敬请期待。

退出移动版