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

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

我将这篇文章从 Stack Overflow 上移出,因为我觉得它很有用

我最近安装了带有驱动程序 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 nvidia

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

答案1

此答案已从 stack overflow 迁移

因此,我遇到的主要错误是由于 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 是从 repos (软件包 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
  ...
  ...

相关内容