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

原创
2018/12/29 12:30
阅读数 198

本周我们在社区问答中精选出开发者在使用Linux安装时遇到的技术难题,可以到PaddlePaddle公众号【常见问答】专栏上寻求解决方案,更好的帮助新用户在安装过程中答疑解惑。


问题1:CUDA driver version is insufficient


关键字CUDA insufficient

问题描述:在使用PaddlePaddle GPUDocker镜像的时候,出现 Cuda Error: CUDA driver version is insufficient for CUDA runtime version

问题解答 通常出现 Cuda Error: CUDA driver version is insufficient for CUDA runtime version, 原因在于没有把机器上CUDA相关的驱动和库映射到容器内部。

解决方法:

1. 将显卡驱动升级到最新

2. 使用nvidia-docker, 命令只需要将docker换为nvidia-docker即可。 

更多请参考:https://github.com/NVIDIA/nvidia-docker



问题2:安装CPU版本后训练主动abort,gdb显示Illegal instruction


关键字CPU版本 Illegal instruction


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

报错输出

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


问题解答: 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.xxxauto-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),%rdi3101>:  test   %r8,%r8
=> 0x00007f381ae4b912 <+3106>:  vbroadcastss %xmm0,%ymm1
   0x00007f381ae4b917 <+3111>:  lea    (%r12,%rdx,4),%rdi

然后google一下这个指令需要的指令集。上面例子中的带xmmymm操作数的vbroadcastss指令只在AVX2中支持

然后看下自己的CPU是否支持该指令集

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

如果没有AVX就表示确实是指令集不支持引起的主动abort

解决方法: 如果没有AVX2指令集,就需要要安装不支持AVX2指令集版本的PaddlePaddle,默认安装的PaddlePaddle是支持AVX2指令集的,因为AVX2可以加速模型训练的过程,更多细节可以参考安装文档

http://www.paddlepaddle.org/documentation/docs/zh/1.0/beginners_guide/install/Start.html#paddlepaddle    




问题3:安装 paddlepaddle fluid版本后import paddle.fluid 后出现CUBLAS: not initialized


关键字import error

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

在命令行下

import paddleimport paddle.v2
import paddle.v2

都没问题,唯独

import paddle.fluid

报错,为何只有fluid版本import时会有问题?

报错输出

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png



解决方法: 请先查看您系统GPU环境适配关系,应该选择和您的系统已经安装的CUDA版本相同的whl包,您的系统是cuda 8.0, cudnn 6 应该使用cuda8.0_cudnn7_avx_mkl才可以适配。

然后尝试如下命令看看是否报错

>>> import paddle.v2>>> paddle.v2.init(use_gpu=True)
>>> paddle.v2.init(use_gpu=True)


如果报错,则可能是GPU 和CUDA环境没有正确配置

如果没有报错,请判断是否有给所有相关文件sudo权限




问题4:安装完了 PaddlePaddle后,发现python相关的单元测试过不了


关键字单元测试

问题描述

如果出现以下python相关的单元测试都过不了的情况:

    24 - test_PyDataProvider (Failed)

    26 - test_RecurrentGradientMachine (Failed)

    27 - test_NetworkCompare (Failed)

    28 - test_PyDataProvider2 (Failed)

    32 - test_Prediction (Failed)

    33 - test_Compare (Failed)

    34 - test_Trainer (Failed)

    35 - test_TrainerOnePass (Failed)

    36 - test_CompareTwoNets (Failed)

    37 - test_CompareTwoOpts (Failed)

    38 - test_CompareSparse (Failed)

    39 - test_recurrent_machine_generation (Failed)

    40 - test_PyDataProviderWrapper (Failed)

    41 - test_config_parser (Failed)

    42 - test_swig_api (Failed)

    43 - layers_test (Failed)

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

    paddle package is already in your PYTHONPATH. But unittest need a clean environment.

    Please uninstall paddle package before start unittest. Try to 'pip uninstall paddle'.


解决方法: 卸载PaddlePaddlepip uninstall paddle, 清理掉老旧的PaddlePaddle安装包,使得单元测试有一个干净的环境。如果PaddlePaddle包已经在pythonsite-packages里面,单元测试会引用site-packages里面的python包,而不是源码目录里 /python 目录下的python包。同时,即便设置 PYTHONPATH /python 也没用,因为python的搜索路径是优先已经安装的python包




问题5:GPU版本的 PaddlePaddle运行结果报错


关键字GPU 运行报错

问题描述Docker镜像上,成功安装PaddlePaddle,但一运行就报错

报错截图

640?wx_fmt=png

640?wx_fmt=png


问题分析 使用如下命令,创建的docker容器仅能支持运行CPU版本的PaddlePaddle 


sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bashpaddle:latest-dev /bin/bash


解决方法: 使用如下命令重新开启支持GPU运行的docker容器:

sudo nvidia-docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bashICES} --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/bashpaddle:latest-dev /bin/bashICES} --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

或者

export CUDA_SO="$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')  sudo docker run ${CUDA_SO} ${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"$(\ls /usr/lib64/libcuda* | xargs -I{} echo '-v {}:{}') $(\ls /usr/lib64/libnvidia* | xargs -I{} echo '-v {}:{}')"
export DEVICES=$(\ls /dev/nvidia* | xargs -I{} echo '--device {}:{}')  
sudo docker run ${CUDA_SO} ${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的安装及测试运行:

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




问题6:源码编译 paddle时显示 PaddlePaddle版本号为0.0.0


关键字CMake 版本号0.0.0

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


问题解答

如果运行 paddle version, 出现PaddlePaddle 0.0.0;或者运行 cmake ..,出现

CMake Warning at cmake/version.cmake:20 (message):Cannot add paddle version from git tag
Cannot add paddle version from git tag


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




问题7: paddlepaddle*.whl is not a supported wheel on this platform


关键字wheel platform

问题描述:安装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安装包支持ubuntu14.04/16.04/18.04Centos 6Centos7MacOS 10.11及以上操作系统,并需要在环境中安装python 2.7pip 9.0.1PaddlePaddle详细环境支持情况请参见官网文档:http://www.paddlepaddle.org/documentation/docs/zh/1.2/beginners_guide/install/index_cn.html


解决方法:请先尝试安装最新的pip,方法如下:

pip install --upgrade pip


如果还不行,可以执行

 python -c "import pip; print(pip.pep425tags.get_supported())" -c "import pipprint(pip.pep425tags.get_supported())" 

获取当前系统支持的python包的后缀, 并对比是否和正在安装的后缀一致。

如果系统支持的是 linux_x86_64 而安装包是 manylinux1_x86_64 ,需要升级pip版本到最新; 如果系统支持 manylinux1_x86_64 而安装包(本地)是 linux_x86_64 ,可以重命名这个whl包为 manylinux1_x86_64 再安装。



如果在这篇文章中没有得到您所遇到问题的解答,请不要着急。我们将即可推出后续问题解答报道,敬请期待。


640?wx_fmt=jpeg

本文分享 CSDN - 飞桨PaddlePaddle。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部