linux - 未检测到支持 CUDA 的设备(使用 ubuntu 12.04.4 服务器)

标签 linux cuda

<分区>

我最近安装了带有驱动程序 331.67 的 cuda 工具包 5.5(我有一个 GeForce GTX 680)。出于某种原因,我无法运行任何测试脚本:

$./NVIDIA_CUDA-5.5_Samples/1_Utilities/deviceQuery/deviceQuery 
./NVIDIA_CUDA-5.5_Samples/1_Utilities/deviceQuery/deviceQuery Starting...

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

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

我按照此处“入门指南”中的步骤操作

http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/

并制作了一个脚本来在启动时创建字符设备文件(因为我正在运行 Ubuntu 的服务器版本,因此默认情况下不会创建此类图形文件):

$ls -l /dev/nvidia*
crw-rw-rw- 1 root root 195,   0 Apr 11 17:29 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Apr 11 17:29 /dev/nvidiactl

执行命令 nvidia-smi -a 的输出是(对于普通用户和 root 用户):

Failed to initialize NVML: Unknown Error

这里是一些关于nvidia模块的信息

$ lsmod | grep nvidia
nvidia              11335080  0 
$ modinfo nvidia
filename:       /lib/modules/3.11.0-17-generic/updates/dkms/nvidia.ko
alias:          char-major-195-*
version:        331.67
supported:      external
license:        NVIDIA
...
...

有什么建议吗?谢谢。

编辑#1 我尝试降级到驱动程序 319.76:

$ modinfo nvidia
filename:       /lib/modules/3.11.0-17-generic/updates/dkms/nvidia.ko
alias:          char-major-195-*
version:        319.76
supported:      external
...

现在,当我运行 nvidia-smi -a 时,我得到以下信息:

NVIDIA: API mismatch: the NVIDIA kernel module has version 304.116,
but this NVIDIA driver component has version 319.76.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.
Failed to initialize NVML: Unknown Error

在安装驱动程序文件之前,我从存储库安装了 nvidia-current-updatesnvidia-settings-updates 包,我想这就是冲突发生的地方。我还没有找到解决方案,但我认为这更近了一步。这是 modprobe -l | 的结果grep 英伟达

kernel/drivers/video/nvidia/nvidiafb.ko
kernel/drivers/net/ethernet/nvidia/forcedeth.ko
updates/dkms/nvidia.ko
updates/dkms/nvidia_304_updates.k

最佳答案

原来我遇到的主要错误是由于 nvidia 内核模块和驱动程序组件之间的版本不匹配。以下是我采取的帮助我找到解决方案的步骤。

1) 降级驱动程序让我看到 nvidia-smi -a 提示驱动程序组件不匹配。我不确定这最初会是一个问题。我只是在遵循 CUDA 工具包设置指南,其中没有提到这是一个问题。

2) 从存储库安装内核模块后,我只选择了正确版本的相应驱动程序组件。如果您不知道安装的内核模块的版本,您可以使用 modprobe 和 modinfo。例如,在我的系统上

$ modprobe -l | grep nvidia
kernel/drivers/video/nvidia/nvidiafb.ko
kernel/drivers/net/ethernet/nvidia/forcedeth.ko
updates/dkms/nvidia.ko
updates/dkms/nvidia_304_updates.ko

模块 nvidia_304_updates 是从存储库(包 nvidia-updates-current)安装的。它的确切版本可以通过 modinfo 找到

$ modinfo /lib/modules/3.11.0-17-generic/updates/dkms/nvidia_304_updates.ko 
filename:       /lib/modules/3.11.0-17-generic/updates/dkms/nvidia_304_updates.ko
alias:          char-major-195-*
version:        304.116
supported:      external

从nvidia网站上的存档下载并安装相应的驱动组件后,

http://www.nvidia.com/Download/Find.aspx?lang=en-us

,我能够运行命令

$ nvidia-smi -a

==============NVSMI LOG==============

Timestamp                       : Mon Apr 14 15:17:44 2014
Driver Version                  : 304.116

Attached GPUs                   : 1
GPU 0000:04:00.0
    Product Name                : GeForce GTX 680
...
...

以及我尝试执行的原始脚本

$ ./deviceQuery 
./deviceQuery Starting...

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

Detected 1 CUDA Capable device(s)

Device 0: "GeForce GTX 680"
  CUDA Driver Version / Runtime Version          5.0 / 5.0
  CUDA Capability Major/Minor version number:    3.0
  Total amount of global memory:                 2047 MBytes (2146762752 bytes)
  ( 8) Multiprocessors x (192) CUDA Cores/MP:    1536 CUDA Cores
  ...
  ...

关于linux - 未检测到支持 CUDA 的设备(使用 ubuntu 12.04.4 服务器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23067320/

相关文章:

linux - 无法通过 Ansible ping 我的远程计算机

linux - 64 位操作系统中的 Linaro ARM 工具链预构建二进制文件

cuda - double 的纹理对象

cuda - CUDA 代码会损坏 GPU 吗?

linux - 使用 Perl 在 linux(和 windows)上读取密码保护的 XLSX

linux - 如何等到文件关闭

c++ - 使用特定输入的 cuda/cublas 简单内核中的数值错误

c++ - 优化具有不规则内存访问的 CUDA 内核

c++ - 如何在cuda中生成伪随机数

java - 制作 :/bin/javac: Command not found