CUDA:找不到库nvvm

27

我试图运行以下代码,但是报告了一个错误:

NvvmSupportError: 找不到 libNVVM。请执行 conda install cudatoolkit:未找到库 nvvm。

我的开发环境是:Ubuntu 17.04,Spyder/Python3.5,并且我已通过 conda 安装了 numba 和 cudatoolkit。Nvidia 显卡 (GTX 1070 和 GTX 1060)。

import numpy as np
from timeit import default_timer as timer
from numba import vectorize

@vectorize(["float32(float32, float32)"], target='cuda')     
def VecADD(a,b):
    return a+b        

n = 32000000
a = np.ones (n, dtype=np.float32) 
b = np.ones (n, dtype=np.float32)     
c = np.zeros(n, dtype=np.float32) 

start = timer()
C = VecADD(a,b)
print (timer() - start)

有人知道如何解决这个问题吗?


1
听起来好像GPU驱动程序或CUDA工具包没有正确安装。在安装CUDA工具包后,您是否正确设置了PATH和LD_LIBRARY_PATH环境变量?您是否验证了CUDA工具包的安装?/usr/local/cuda/nvvm/lib64目录下是否有任何libnvvm库? - Robert Crovella
我怀疑(如果我没记错的话),你不需要先指定使用哪个GPU吗? - stucash
1
@stucash:不需要。按照发布的代码,我可以直接使用。 - talonmies
@talonmies 对,我猜我错了 :) - stucash
1
我进行了几次测试,我认为这是一个路径问题,但我仍然无法解决它。不管怎样,我在jupyter-notebook上测试过了,它完美地工作,我现在会使用它。谢谢! - Helton Maia
我也有这个问题,到目前为止似乎无法解决。我尝试了许多.bashrc下面的方法,但是都没有成功。是否有一个确定的解决方案? - thecpaptain
9个回答

21

在完全相同的情况下,对我起作用的是在 .bashrc 中包含以下内容(我目前正在使用 cuda-9.0)。不要被变量名称中的 NUMBAPRO 所困惑 - 它适用于 numba(至少对我而言):

export NUMBAPRO_NVVM=/usr/local/cuda-9.0/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda-9.0/nvvm/libdevice/

更新:这对我也起作用了。由于我使用的是Cuda 10.1,我已经替换为以下行:

export NUMBAPRO_NVVM=/usr/local/cuda-10.1/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda-10.1/nvvm/libdevice/

1
对我而言,将这些环境变量添加到PyCharm中的Debug配置环境变量列表中是有效的。 - JEM_Mosig
1
@JEM_Mosig 注意,或者其他任何希望从终端访问的人,你可以将这些行添加到你的~/.bashrc文件中。它是你主目录下的一个隐藏文件。 - mur
谢谢。您的解决方案在我们的HPC系统上成功运行(尽管路径不同)。 - upendra
1
miniconda3 安装时,我必须使用以下路径: export NUMBAPRO_NVVM=/opt/miniconda3/lib/; export NUMBAPRO_LIBDEVICE=/opt/miniconda3/lib/ 另请参阅:http://numba.pydata.org/numba-doc/latest/cuda/overview.html#cudatoolkit-lookup - elig
这个答案是错误的。它已经过期了。在上面的例子中,正确的答案是将CUDA_HOME设置为/usr/local/cuda-10.1 - rjurney

2

一种解决方案是:

import os

os.environ['NUMBAPRO_NVVM']      = r'C:\Program Files\NVIDIA GPU Computing 
Toolkit\CUDA\v8.0\nvvm\bin\nvvm64_31_0.dll'

os.environ['NUMBAPRO_LIBDEVICE'] = r'C:\Program Files\NVIDIA GPU Computing 
Toolkit\CUDA\v8.0\nvvm\libdevice'

如果你正在使用PyCharm,可以前往RUN > Edit Configuration进行设置。

export NUMBAPRO_NVVM=/usr/local/cuda-{cuda version}/nvvm/lib64/libnvvm.so
export NUMBAPRO_LIBDEVICE=/usr/local/cuda-{cuda version}/nvvm/libdevice/

enter image description here


2
在Ubuntu 18.04上,如果你从官方仓库安装了所有库和软件包,你需要在.bashrc中添加两个信息,以便让numba找到你的库和设备:
原始答案:最初的回答
...
export NUMBAPRO_LIBDEVICE=/usr/lib/cuda/nvvm/libdevice
export NUMBAPRO_NVVM=/usr/lib/x86_64-linux-gnu/
...

从该软件包中提取了NUMBAPRO_LIBDEVICE信息:

"Original Answer"翻译成为"最初的回答"

$ dpkg -L nvidia-cuda-toolkit

and NUMBAPRO_NVVM from:

$ dpkg -L libnvvm3

最初的回答。
就是这样。

1
运作良好。谢谢。Python 3.7,Linux Mint,Numba是通过pip安装的。 - Hannnn

1

这是更新后的正确答案。 - rjurney

0

使用CUDA 10.2的Debian“Buster”(以及pip3而非conda)

numba -s
…
CUDA libraries:
Finding cublas
    ERROR: can't locate lib
Finding cusparse
    ERROR: can't locate lib
Finding cufft
    ERROR: can't locate lib
Finding curand
    ERROR: can't locate lib
Finding nvvm
    ERROR: can't locate lib
    finding libdevice for compute_20... ERROR: can't open libdevice for compute_20
    finding libdevice for compute_30... ERROR: can't open libdevice for compute_30
    finding libdevice for compute_35... ERROR: can't open libdevice for compute_35
    finding libdevice for compute_50... ERROR: can't open libdevice for compute_50
…

然后是手册

sudo ln -sv /usr/lib/x86_64-linux-gnu/libcublas.so.10 /usr/local/cuda/lib64/ 
export NUMBAPRO_CUDALIB=/usr/local/cuda/lib64/
export NUMBAPRO_LIBDEVICE=/usr/local/cuda/nvvm/libdevice/ 
export NUMBAPRO_NVVM=/usr/local/cuda/nvvm/lib64/libnvvm.so

然后我们得到

numba -s
…
CUDA libraries:
Finding cublas
    named  libcublas.so.10
    trying to open library...   ok
Finding cusparse
    named  libcusparse.so.10.3.1.89
    trying to open library...   ok
Finding cufft
    named  libcufft.so.10.1.2.89
    trying to open library...   ok
Finding curand
    named  libcurand.so.10.1.2.89
    trying to open library...   ok
Finding nvvm
    named  libnvvm.so
    trying to open library...   ok
    finding libdevice for compute_20... ok
    finding libdevice for compute_30... ok
    finding libdevice for compute_35... ok
    finding libdevice for compute_50... ok
…

0
根据我的经验,如果您使用从https://ngc.nvidia.com/catalog/landing下载的容器,则所有CUDA(和类似驱动程序)问题都会消失。
您必须确保使用nvidia-docker而不是docker启动docker,这将非常有效地启用GPU相关的驱动程序。

0

在Debian Stretch系统中:

ln -s /usr/lib/x86_64-linux-gnu/ /usr/lib/nvidia-cuda-toolkit/bin/nvvm/lib64

ln -s /usr/lib/nvidia-cuda-toolkit/libdevice/ /usr/lib/nvidia-cuda-toolkit/bin/nvvm/libdevice

export CUDA_HOME=/usr/lib/nvidia-cuda-toolkit/bin/


修复了问题。


0
在Windows上,如果CUDA已经正确安装,通常nvvm会在这里。
"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\nvvm\libdevice"
别忘了将其保留在路径中以便程序能够找到它。

0
我使用Anaconda Navigator解决了这个问题。 您可以在此处下载:https://www.anaconda.com/distribution/
  1. 在终端中打开Anaconda Navigator:anaconda-navigator
  2. 在Anaconda Navigator中选择环境
  3. 搜索cudatoolkit
  4. 选择cudatoolkit
  5. 点击应用
这是我的cudatoolkit安装情况。 anaconda navigator 这是选择未安装软件包时要单击的按钮。 button to click apply

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接