【问题标题】:Failed to compile cuda_ndarray.cu: libcublas.so.7.5: cannot open shared object file编译 cuda_ndarray.cu 失败:libcublas.so.7.5:无法打开共享对象文件
【发布时间】:2016-06-07 19:03:34
【问题描述】:

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

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

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

使用 gpu 设备 0:GRID K520(CNMeM 已禁用)

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

【问题讨论】:

  • 可能是环境问题。尝试 python "import os; print(os.eviron["PATH"])" 看看 "/usr/local/cuda/bin" 是否在 PATH 中。
  • 还要检查 LD_LIBRARY_PATH 以确保可以在运行时找到 CUDA 库。
  • 就我而言,这是由我的 CUDA 安装策略引起的问题。当我尝试安装 libcublas.so.10 时,它正在创建 libcublas.so.11。在我的安装脚本中使用DEBIAN_FRONTEND=noninteractive apt -y install cuda-10-1 解决了这个问题。

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


【解决方案1】:

我会尽量简洁明了地解决这个问题,因为我发现对于开始使用 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 一样)并且不熟悉编译、linkig...

【讨论】:

    【解决方案2】:

    我在使用 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
      

    别忘了检查环境变量: PATH 应包含您的 cuda bin 文件夹位置,CUDA_HOME 应包含 cuda home 位置

    我以这种方式将它添加到我的 .bashrc 文件中:

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

    【讨论】:

      【解决方案3】:

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

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

      sudo rm -rf ~/.theano
      

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

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

      【讨论】:

        【解决方案4】:

        在 Kumar here 的建议下,我做到了

        sudo ldconfig /usr/local/cuda/lib64
        

        它神奇地开始工作了。谢谢库马尔!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-26
          • 2011-12-23
          • 1970-01-01
          • 2013-04-21
          • 2013-05-05
          • 2019-01-12
          相关资源
          最近更新 更多