【问题标题】:CUDA Runtime API error 38: no CUDA-capable device is detectedCUDA 运行时 API 错误 38:未检测到支持 CUDA 的设备
【发布时间】:2012-10-14 18:59:04
【问题描述】:

情况

我有一个 2 gpu 服务器(Ubuntu 12.04),我在其中将 Tesla C1060 与 GTX 670 切换。比我在 4.2 上安装了 CUDA 5.0。之后,我为 simpleMPI 编译了所有示例 execpt,没有错误。但是当我运行./devicequery 时,我收到以下错误消息:

foo@bar-serv2:~/NVIDIA_CUDA-5.0_Samples/bin/linux/release$ ./deviceQuery
./deviceQuery Starting...

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

cudaGetDeviceCount returned 38
-> no CUDA-capable device is detected

我的尝试

为了解决这个问题,我尝试了CUDA-capable device 推荐的所有想法,但无济于事:

  • /dev/nvidia* 在那里并且权限是 666 (crw-rw-rw-) 和所有者 root:root

     foo@bar-serv2:/dev$ ls -l nvidia*
     crw-rw-rw- 1 root root 195,   0 Oct 24 18:51 nvidia0
     crw-rw-rw- 1 root root 195,   1 Oct 24 18:51 nvidia1
     crw-rw-rw- 1 root root 195, 255 Oct 24 18:50 nvidiactl
    
  • 我尝试使用 sudo 执行代码

  • CUDA 5.0 同时安装驱动和库

PS 这里是 lspci | grep -i 英伟达:

foo@bar-serv2:/dev$ lspci | grep -i nvidia
03:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 670] (rev a1)
03:00.1 Audio device: NVIDIA Corporation GK104 HDMI Audio Controller (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation G94 [Quadro FX 1800] (rev a1)

[更新]

foo@bar-serv2:~/NVIDIA_CUDA-5.0_Samples/bin/linux/release$  nvidia-smi -a
NVIDIA: API mismatch: the NVIDIA kernel module has version 295.59,
but this NVIDIA driver component has version 304.54.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.
Failed to initialize NVML: Unknown Error

如果我使用 CUDA 5.0 安装程序同时安装驱动程序和库,那怎么可能。旧的 4.2 版本会不会乱七八糟?

【问题讨论】:

  • 如果你运行 nvidia-smi -a 会发生什么?
  • @RobertCrovella,感谢您的意见。我试过了,它给出了一个错误。顺便说一句:你从哪里知道这个工具的?
  • 请说明您标记关闭的原因。谢谢!
  • 没有将 Ubuntu 12.04 列为支持的 CUDA 5.0 软件包。您可以查看release notes 以获取支持的操作系统列表。有关您的系统配置的某些内容妨碍了成功的驱动程序升级。您可能想查看nvidia driver readme 尤其是第 8 节或在线搜索有关在 ubuntu 上安装驱动程序失败的文章。
  • 您的内核驱动模块已过期。如果驱动程序安装期间出现的内核源与正在运行的内核不匹配,如果在安装 Nvidia 驱动程序后更新内核,或者根本没有安装驱动程序,通常会发生这种情况。检查您安装的最新内核源是否与正在运行的内核匹配并再次运行驱动程序安装。

标签: cuda nvidia


【解决方案1】:

我遇到了这个问题,正在运行

nvidia-smi

通知我 API 不匹配。问题是我的 Linux 发行版安装了需要重新启动系统的更新,因此重新启动解决了这个问题。

【讨论】:

    【解决方案2】:

    查看这个堆栈溢出问题Installing cuda 5 samples in Ubuntu 12.10

    1. Ubuntu 12 还不是受支持的 Linux 发行版。参考见CUDA 5.0 Toolkit Release Notes And Errata

      ** 当前支持的发行版

      Distribution       32 64  Kernel                 GCC         GLIBC        
      -----------------  -- --  ---------------------  ----------  -------------
      Fedora 16          X  X   3.1.0-7.fc16           4.6.2       2.14.90      
      ICC Compiler 12.1     X                                                   
      OpenSUSE 12.1         X   3.1.0-1.2-desktop      4.6.2       2.14.1       
      Red Hat RHEL 6.x      X   2.6.32-131.0.15.el6    4.4.5       2.12         
      Red Hat RHEL 5.5+     X   2.6.18-238.el5         4.1.2       2.5          
      SUSE SLES 11 SP2      X   3.0.13-0.27-pae        4.3.4       2.11.3       
      SUSE SLES 11.1     X  X   2.6.32.12-0.7-pae      4.3.4       2.11.1       
      Ubuntu 11.10       X  X   3.0.0-19-generic-pae   4.6.1       2.13         
      Ubuntu 10.04       X  X   2.6.35-23-generic      4.4.5       2.12.1    
      
    2. 如果您想在 Ubuntu 12 上运行它,请查看rpardo 的答案。看起来这个发行版不是将 64 位库安装到 /usr/lib64 而是将它们安装到 /usr/lib/x86_64-linux-gnu/

    我建议在系统上搜索libcuda.solibnvidia-ml.so 的所有实例。由于驱动程序不支持此发行版,它可能已将库安装到LD_LIBRARY_PATH 未指向的路径。然后移动库和/或更改LD_LIBRARY_PATH 以指向此位置(它应该是左侧的第一条路径)。然后重试nvidia-smideviceQuery

    祝你好运

    【讨论】:

    • 感谢您的回答。确实,我没有注意到 CUDA 5.0 没有在 12.04 上运行这一事实。原因是 CUDA 4.2 在 12.04 上运行良好。此外,我在第一次安装驱动程序时做了 rpardo 推荐的操作。
    • +!: 搜索 libcuda.so 的实例以不同的方式为我解决了这个问题:当我想要的版本与 CUDA Toolkit 7.0 捆绑在一起时,我有一个剩余的 libcuda.346.47 346.46。由于它是最近的,它会被拾起,谁知道它当时确实这样做了。删除它解决了我的问题。
    【解决方案3】:

    我在带有 GTX980 GPU 的 Windows 机器上遇到 cudaGetDeviceCount 错误 38。 在我从 NVIDIA 网站下载 GTX 980 的最新驱动程序后,安装并重新启动,一切都很好。 CUDA 安装程序似乎没有安装最新的驱动程序。

    【讨论】:

    • 您使用的是哪个版本的 cuda? CUDA 7.0?
    【解决方案4】:

    尝试使用 sudo 运行示例(或者,您可以执行“sudo su”,将 LD_LIBRARY_PATH 设置为 cuda 库的路径并以 root 身份运行示例)。显然,由于您可能已经使用 sudo 安装了 CUDA 5.0,因此示例无法使用普通用户运行。但是,如果您使用 root 运行示例,那么您也可以使用普通用户运行示例!我还没有重新启动系统,以查看即使在重新启动后示例是否可以与普通用户一起使用,或者每次您应该使用 root 运行至少一个 CUDA 应用程序时。

    如果您在不使用 sudo 的情况下安装 CUDA TakeKit,问题可能会完全消失。

    【讨论】:

    • 我建议返回并再次阅读完整的问题。这与问题无关。
    【解决方案5】:

    我在 Debian 上遇到了非常相似的问题,结果发现加载的 nvidia 模块的版本与 libcuda1 不同。

    要检查已安装的nvidia 模块,您应该这样做:

      $ sudo modinfo nvidia-current | grep version
      version:        319.82
    

    如果它与libcuda1 的版本不匹配,这就是问题的根源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      相关资源
      最近更新 更多