未能编译cuda_ndarray.cu:libcublas.so.7.5:无法打开共享对象fi

2024-05-16 02:06:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在aws实例中导入ano库以使用GPU。我已经使用boto编写了一个python脚本来自动安装aws,这实际上是从本地机器对实例执行ssh,然后启动bash脚本,在这里我执行“python-c'import theano'”来启动GPU。但我得到以下错误:

ERROR (theano.sandbox.cuda): Failed to compile cuda_ndarray.cu: libcublas.so.7.5: cannot open shared object file: No such file or directory

当我试图直接在instance命令shell中导入ano模块时,它会自动使用GPU启动。

Using gpu device 0: GRID K520 (CNMeM is disabled)

我想我遗漏了一些其他的导入,这些导入必须在通过我的自动化python脚本导入时进行。可能的解决办法是什么?


Tags: 实例import脚本bash机器awsgpu错误
3条回答

我最近也遇到了类似的问题,花了很长时间才弄清楚出了什么问题(以至于我破坏了我的Linux安装,不得不重新安装)。

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

sudo rm -rf ~/.theano

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

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

我在Ubuntu16.04和Cuda7.5上遇到了同样的错误,找到了解决方案here

  1. CUDA7.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错误-在主目录中创建.theanoc:

    [global]
    device=gpu
    floatX=float32
    
    [nvcc]
    flags=-D_FORCE_INLINES
    

不要忘记检查环境变量: 路径应包含cuda bin文件夹位置,cuda_HOME应包含cuda HOME位置

我已将其添加到.bashrc文件中,方法如下:

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

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

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

LD_LIBRARY_PATH=/usr/local/cuda/

或者在bashrc中:

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

这个解决方案不是unix专家推荐的(我不是刚刚在互联网上读到的,我遵循的是linux专家)。所以我找到的解决方案很简单,修改linux ld软件默认搜索库的路径。要做到这一点,只需做(您必须以根用户的身份):

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那样),并且不熟悉编译,linkig。。。

相关问题 更多 >