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

时间:2014-04-14 18:19:58

标签: linux cuda

我最近安装了cuda toolkit 5.5和驱动程序331.67(我有一个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

我在安装驱动程序文件之前安装了来自repos的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 个答案:

答案 0 :(得分:13)

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

1)降级驱动程序让我看到nvidia-smi -a抱怨驱动程序组件不匹配。我不确定这本来是个问题。我只是按照CUDA工具包设置指南,没有提到这是一个问题。

2)从repos安装了内核模块后,我选择了正确版本的相应驱动程序组件。如果您不知道已安装的内核模块的版本,可以使用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
  ...
  ...