问题

问题

问题

我刚刚安装cuda官方安装说明通过.deb文件。当涉及到第 6.2.2.3 节(运行deviceQuery)我收到消息称未找到支持 CUDA 的设备,尽管我很确定所有设置均正确:

$ ./bin/x86_64/linux/release/deviceQuery
./bin/x86_64/linux/release/deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected
Result = FAIL

系统信息

以下是有关我的系统的一些信息:

$ uname -m && cat /etc/*release
x86_64
DISTRIB_RELEASE=16.04
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
VERSION="16.04.2 LTS (Xenial Xerus)"

$ uname -r
4.4.0-64-generic

$ lspci | grep -i nvidia
08:00.0 3D controller: NVIDIA Corporation GK208M [GeForce 920M] (rev a1)

$ gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

我还验证了内核头文件已经安装:

$ sudo apt-get install linux-headers-$(uname -r)
linux-headers-4.4.0-64-generic is already the newest version (4.4.0-64.85).

安装 CUDA

因此我的系统满足所有先决条件。然后我按照通过 apt-get 安装(我安装了cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb)。

PATHLD_LIBRARY_PATH设置为指向所需位置:

$ echo $PATH
/usr/local/cuda-8.0/bin:[...]

$ echo $LD_LIBRARY_PATH 
/usr/local/cuda-8.0/lib64

请注意,我确实进行了手动设置,LD_LIBRARY_PATH尽管据说这只对运行文件安装是必要的。然而,重置时错误仍然存​​在LD_LIBRARY_PATH

NVIDIA 驱动程序似乎也是最新的:

$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module  367.57  Mon Oct  3 20:37:01 PDT 2016
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)

cuda编译器驱动相关信息:

$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2016 NVIDIA Corporation
Built on Tue_Jan_10_13:22:03_CST_2017
Cuda compilation tools, release 8.0, V8.0.61

说明中提到,这可能是文件权限的问题:

如果安装了支持 CUDA 的设备和 CUDA 驱动程序,但 deviceQuery 报告没有支持 CUDA 的设备,则很可能意味着 /dev/nvidia* 文件丢失或具有错误的权限。

这些文件没有执行标志,然后我添加了:

$ ls -al /dev/nvidia*
crwxrwxrwx 1 root root 195,   0 Feb 27 13:17 /dev/nvidia0
crwxrwxrwx 1 root root 195, 255 Feb 27 13:17 /dev/nvidiactl
crwxrwxrwx 1 root root 195, 254 Feb 27 13:17 /dev/nvidia-modeset
crwxrwxrwx 1 root root 243,   0 Feb 27 13:17 /dev/nvidia-uvm
crwxrwxrwx 1 root root 243,   1 Feb 27 18:24 /dev/nvidia-uvm-tools

然而运行之后deviceQuery(仍然失败)一些权限被重置:

$ ls -al /dev/nvidia*
crwxrwxrwx 1 root root 195,   0 Feb 27 13:17 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Feb 27 13:17 /dev/nvidiactl
crwxrwxrwx 1 root root 195, 254 Feb 27 13:17 /dev/nvidia-modeset
crw-rw-rw- 1 root root 243,   0 Feb 27 13:17 /dev/nvidia-uvm
crw-rw-rw- 1 root root 243,   1 Feb 27 18:24 /dev/nvidia-uvm-tools

这有点令人费解,尤其是因为我正在跑步deviceQuery没有运行sudo

可能相关

示例构建失败

当我尝试通过它构建 cuda 示例时,make其中一个示例失败并显示以下消息

/usr/bin/ld: cannot find -lnvcuvid
collect2: error: ld returned 1 exit status
Makefile:381: recipe for target 'cudaDecodeGL' failed
make[1]: *** [cudaDecodeGL] Error 1

但确实似乎缺少了一点:

$ ls /usr/local/cuda-8.0/lib64/libnvcuvid
ls: cannot access '/usr/local/cuda-8.0/lib64/libnvcuvid': No such file or directory

虽然有相应的头文件:

$ ls /usr/local/cuda-8.0/targets/x86_64-linux/include/nvcuvid.h 
/usr/local/cuda-8.0/targets/x86_64-linux/include/nvcuvid.h

静态链接问题

引发的错误deviceQuery表明静态链接存在问题:

CUDA Device Query (Runtime API) version (CUDART static linking)

AFAIKLD_LIBRARY_PATH所知,它只负责动态链接。我发现这个问题建议将其包含/usr/lib/nvidia-current在链接器路径中。但是我的安装中不存在此目录:

$ ls /usr/lib/nvidia-current
ls: cannot access '/usr/lib/nvidia-current': No such file or directory

答案1

看起来你正在使用 Nvidia Optimus 的笔记本电脑,你是否已经切换到 nvidia 使用prime-select nvidia

答案2

还应注意,这种行为的另一个潜在原因是CUDA_VISIBLE_DEVICES环境变量已设置为空。

我遇到了类似的问题,结果发现这是在我的 bash 环境文件中意外设置的。

相关内容