无法编译cuda_ndarray.cu:libcublas.so.7.5:无法打开共享对象文件

时间:2016-02-25 06:30:24

标签: python amazon-web-services cuda gpu theano

我正在尝试在aws实例中导入theano库以使用GPU。我已经编写了一个使用boto自动化aws设置的python脚本,它本质上是从我的本地机器执行ssh到实例,然后启动一个bash脚本,我在那里" python -c' import theano& #39;" 启动GPU。但是我收到以下错误:

  

错误(theano.sandbox.cuda):无法编译cuda_ndarray.cu:libcublas.so.7.5:无法打开共享对象文件:没有这样的文件或   目录

当我尝试直接在实例命令shell中导入theano模块时,它会自动开始使用GPU。

  

使用gpu device 0:GRID K520(禁用CNMeM)

我想我错过了通过我的自动化python脚本导入时必须进行的其他一些导入。什么可能是解决方案?

4 个答案:

答案 0 :(得分:6)

我会尝试清楚简洁地解决这个问题,因为我发现对于那些开始使用unix或者不熟悉编译和链接的人来说不是很好的答案。

问题与动态链接有关,可以通过两种方式解决。第一个是通过设置LD_LIBRARY_PATH环境变量。假设cuda安装在/ usr / local / cuda /中,只需在你的环境文件/ etc / enviroment中添加:

LD_LIBRARY_PATH=/usr/local/cuda/

或者只是在你的bashrc中:

export LD_LIBRARY_PATH=/usr/local/cuda/lib64/

这个解决方案不是由unix大师推荐的(我不是我刚刚在互联网上读过的,我跟随linux大师)。所以我发现的解决方案很简单,默认情况下修改linux ld软件搜索库的路径。要做到这一点(你必须以root身份):

cd /etc/ld.so.conf.d/

然后选择例如并编辑:

vi libc.conf 

在此文件中,只需添加lib64根目录的路径,如:

/usr/local/cuda/lib64/

你会在文件中得到这样的东西:

\# libc default configuration

/usr/local/lib

/usr/local/cuda/lib64/

然后运行:

sudo ldconfig

希望这个答案可以帮助那些开始看编程的人,或者使用高级语言,例如python,使用下面的C代码(比如theano),并且不熟悉编译,链接......

答案 1 :(得分:4)

我在使用cuda 7.5的Ubuntu 16.04上遇到了同样的错误并找到了解决方案here

  1. cuda 7.5不支持默认的g ++版本。安装支持的版本并将其设为默认值:

    sudo apt-get install g++-4.9
    
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 20
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 10
    
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 20
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 10
    
    sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
    sudo update-alternatives --set cc /usr/bin/gcc
    
    sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++ 30
    sudo update-alternatives --set c++ /usr/bin/g++
    
  2. 解决glibc错误 - 使用以下设置在主目录中创建.theanorc:

    [global]
    device=gpu
    floatX=float32
    
    [nvcc]
    flags=-D_FORCE_INLINES
    
  3. 不要忘记检查环境变量: PATH应包含您的cuda bin文件夹位置,CUDA_HOME应包含cuda home location

    我已经通过这种方式将它添加到.bashrc文件中了:

    export PATH="/usr/local/cuda/bin:$PATH"
    export CUDA_HOME="/usr/local/cuda:$CUDA_HOME"
    

答案 2 :(得分:3)

我最近遇到了类似的问题,花了很多时间搞清楚出了什么问题(我破坏了我的Linux安装并且不得不重新安装)。

此错误的潜在解决方案删除(可能)位于您主目录中的.theano/目录

sudo rm -rf ~/.theano

要防止再次发生此错误,请不要以root用户身份运行脚本(即没有sudo)。

以root身份运行脚本将创建具有root权限的隐藏目录,使其无法访问其他进程。

答案 3 :(得分:0)

根据库马尔here的建议,我做了

sudo ldconfig /usr/local/cuda/lib64

它神奇地开始工作了。谢谢Kumar!