NVIDIA-SMI失败了,因为它无法与NVIDIA驱动程序通信。请确保安装并运行最新的NVIDIA驱动程序。

我刚刚在笔记本电脑上安装了CUDA:
sudo apt-get install cuda

就像 这里所说。

编译工作正常,但是当我尝试运行时出现了以下问题: CUDA错误在file.cu中:128 code=35(cudaErrorInsufficientDriver) "cudaStreamCreate(&(stream[i]))"

我的nvcc版本:

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

显卡信息:
lspci | egrep 'VGA|3D'
00:02.0 VGA compatible controller: Intel Corporation Skylake Integrated Graphics (rev 06)
02:00.0 3D controller: NVIDIA Corporation GM107M [GeForce GTX 960M] (rev a2)

我还安装了VirtualGL、bumblebee-nvidia、primus和freeglut3-dev。 按照this的指示进行操作。
当我尝试在bumblebee上运行某些东西时,出现了以下错误: optirun glxspheres64
[   41.413478] [ERROR]Cannot access secondary GPU - error: Could not load GPU driver
[   41.413520] [ERROR]Aborting because fallback start is disabled.

NVIDIA驱动程序无法正常工作。
nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

看起来nvidia 375版本已经安装了,但是我无法让它工作。
whereis nvidia
nvidia: /usr/lib/nvidia /usr/share/nvidia /usr/src/nvidia-375-375.66/nvidia

一些驾驶员信息。
modinfo nvidia_375
filename:       /lib/modules/4.8.0-54-generic/updates/dkms/nvidia_375.ko
alias:          char-major-195-*
version:        375.66
supported:      external
license:        NVIDIA
srcversion:     68751AFD79A210CEFFB8758
alias:          pci:v000010DEd00000E00sv*sd*bc04sc80i00*
alias:          pci:v000010DEd*sv*sd*bc03sc02i00*
alias:          pci:v000010DEd*sv*sd*bc03sc00i00*
depends:        
vermagic:       4.8.0-54-generic SMP mod_unload modversions 
parm:           NVreg_Mobile:int
parm:           NVreg_ResmanDebugLevel:int
parm:           NVreg_RmLogonRC:int
parm:           NVreg_ModifyDeviceFiles:int
parm:           NVreg_DeviceFileUID:int
parm:           NVreg_DeviceFileGID:int
parm:           NVreg_DeviceFileMode:int
parm:           NVreg_UpdateMemoryTypes:int
parm:           NVreg_InitializeSystemMemoryAllocations:int
parm:           NVreg_UsePageAttributeTable:int
parm:           NVreg_MapRegistersEarly:int
parm:           NVreg_RegisterForACPIEvents:int
parm:           NVreg_CheckPCIConfigSpace:int
parm:           NVreg_EnablePCIeGen3:int
parm:           NVreg_EnableMSI:int
parm:           NVreg_TCEBypassMode:int
parm:           NVreg_UseThreadedInterrupts:int
parm:           NVreg_MemoryPoolSize:int
parm:           NVreg_RegistryDwords:charp
parm:           NVreg_RmMsg:charp
parm:           NVreg_AssignGpus:charp

我认为这可能是一些驱动程序版本的问题:

dpkg -l | grep nvidia
ii  bumblebee-nvidia                            3.2.1-10                                      amd64        NVIDIA Optimus support using the proprietary NVIDIA driver
ii  nvidia-375                                  375.66-0ubuntu0.16.04.1                       amd64        NVIDIA binary driver - version 375.66
ii  nvidia-375-dev                              375.66-0ubuntu0.16.04.1                       amd64        NVIDIA binary Xorg driver development files
ii  nvidia-modprobe                             375.51-0ubuntu1                               amd64        Load the NVIDIA kernel driver and create device files
ii  nvidia-opencl-icd-375                       375.66-0ubuntu0.16.04.1                       amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                                0.8.2                                         amd64        Tools to enable NVIDIA's Prime

我错过了什么?

如何安装驱动程序? - Charlie Parker
面对同样的错误,没有任何答案奏效。能够奏效的是一个简单的命令:$ reboot now - darthbhyrava
@darthbhyrava 那不起作用。 - KansaiRobot
9个回答

你可能想要安装CUDA工具包。使用以下命令来进行安装。
sudo apt install nvidia-cuda-toolkit

安装完成后,重新启动机器。 nvidia-smi 应该可以正常工作。

30这里不起作用 - Bill Kotsias
18如果你的CUDA版本大于等于10,请不要这样做。这将会使你的CUDA版本降级为9,而目前在Ubuntu上是有可用的,而无需使用CUDA PPA。 - loretoparisi
2之前执行了sudo apt-get purge nvidia-*,然后上述命令解决了与CUDA相关的所有问题,成功安装了带有CUDA 10.1的430驱动程序。 - Dinari
3没有任何区别 - Florin Andrei
重启解决了问题 - SKT
我先执行了这个命令:“sudo reboot”。然后执行了“sudo prime-select nvidia”和“sudo reboot”。 - Rexcirus
我按照你说的做了,结果是:ubuntu@ip-172-30-0-111:~$ nvidia-smi 找不到命令'nvidia-smi',但可通过以下方式安装: sudo apt install nvidia-utils-390 # 版本 390.157-0ubuntu0.22.04.1,或者 sudo apt install nvidia-utils-450-server # 版本 450.216.04-0ubuntu0.22.04.1 sudo apt install nvidia-utils-470 # 版本 470.161.03-0ubuntu0.22.04.1 sudo apt install nvidia-utils-470-server # 版本 470.161.03-0ubuntu0.22.04.1 sudo apt install nvidia-utils-510 # 版本 510.108.03-0ubuntu0.22.04.1 sudo apt install nvidia-utils-515 - Nathan B
@loretoparisi 那么应该怎么做呢? - jsibs

如果您的 nvidia-smi 无法通信,但您已经安装了驱动程序很多次,请检查 prime-select
  1. 运行 prime-select query 获取所有可能的选项。您应该至少看到 nvidia | intel
  2. 选择 prime-select nvidia
  3. 如果它说 nvidia 已经被选择,选择另一个,例如 prime-select intel,然后再切换回 nvidia prime-select nvidia
  4. 重新启动并检查 nvidia-smi

39哎呀,prime-select query 连 Intel 都没有列出来,看来我现在有两个问题了... - Inspi
2查询不列出所有可能的选项。从脚本中:'query: 检查当前活动的版本,并将 "nvidia"、"intel" 或 "unknown" 写入标准输出。' - TheMechanic
4不起作用。同样的问题仍然存在。 - metsburg
6消息说“NVIDIA配置文件已经设置好了”(我已经重新启动过了,所以它不起作用) - KansaiRobot
@KansaiRobot你解决了吗? - sam
prime-select nvidia 提供的结果是:Traceback (most recent call last): File "/usr/bin/prime-select", line 458, in <module> switcher.enable_profile(arg) File "/usr/bin/prime-select", line 223, in enable_profile if not self._has_integrated_gpu(): File "/usr/bin/prime-select", line 198, in _has_integrated_gpu if t.find('8086') != -1 or t.lower().find('1002') != -1: UnboundLocalError: local variable 't' referenced before assignment - Michael
我收到:错误:未检测到集成GPU。 - Nathan B

我禁用了安全启动,效果非常好。
@rod-smith回答了另一个问题,更详细地解释了如何操作,基本上是设置配置,但他还写了一篇关于如何进行操作的好文章,可以在这里找到:here

2它还帮我解决了NVIDIA 390驱动的问题!我从来没想到可能是因为安全启动,谢谢 :) - samu
2UEFI模式下禁用安全启动已经在这里完成了。=)不幸的是,看起来它并不适用于每个人。 - R. W. Prado
2安全启动是个不错的东西,但没必要禁用它!在激活Nvidia驱动程序时,你需要输入一个安全启动密码;然后重新启动并在安全启动设置中使用该密码导入新的ROK密钥。现在驱动程序已经激活了。 - w-sky
1我的前门卡在门框里了。我拆下锁,现在它运转得相当顺畅。 - Unknown artist
那个方法对我有效。我更换了主板的CMOS电池,重新启动后出现了“糟糕”的图形和没有CUDA。在禁用安全启动后,一切恢复正常。虽然还没有尝试@w-sky的建议,也许它更好。 - gui11aume
那也是我的情况。而且,我的名字也叫罗多尔福。 - RodolfoAP

Markus的解决方案给了我一个更好的解决方案。所以这与Secure Boot有关,但不需要禁用它。
要解决问题,只需执行3个步骤:通过选择X.Org和附加驱动程序工具来禁用Nvidia驱动程序,重新启动,然后激活Nvidia驱动程序,重新启动并在Secure Boot中注册密钥。
通常,在使用附加驱动程序工具激活Nvidia驱动程序时,会要求您为Secure Boot设置(新)密码。重新启动后,计算机将进入Secure Boot设置,并要求您注册一个新的MOK密钥,必须使用相同的密码确认。之后,驱动程序将获得对Nvidia显卡的访问权限,并正常工作。

1Ubuntu要求输入MOK密码,但奇怪的是,它从来都无法识别密码。 - metsburg
抱歉,我上面打错了 o.O - 是 MOK 而不是 ROK。您需要输入一个新密码,这个密码是您自己想出来的,并且只需要在安全启动设置(在 BIOS 中注册新的 MOK 密钥)时使用一次。 - w-sky
在最后一次重启之前(在切换回NVIDIA驱动程序后),我只需要重启一次。 - Daniel Giger
(+1) 这对我有用。谢谢。如果事先不知道 Secure Boot 密码,我使用 sudo apt-get purge nvidia* 卸载了 NVIDIA 驱动程序,然后在 "软件和更新" Ubuntu 应用程序的 "附加驱动程序" 选项卡中点击 "从 nvidia-driver-515(专有)" 单选按钮重新安装它。在重新安装过程中,它会要求您创建一个 Secure Boot 密码,这个密码与我在重启后的 "Enroll MOK" 步骤中输入的密码相同。 - mhdadk

由于我没有足够的声望来评论@Rodolfo上面的答案,所以我添加了一个新的答案。
在我的机器上,我不得不根据我的操作系统配置安全启动。我有一块运行Ubuntu 18.04的ASUS主板,并尝试使用打包的NVIDIA驱动程序安装NVIDIA CUDA 10.1 Update 2。我遇到了与上述描述相同的问题。事实证明,安全启动被设置为Windows UEFI模式。将其更改为其他操作系统解决了我的问题。

4谢谢,我不得不禁用“安全启动”,这是在Windows/BIOS自动更新期间自动重新启用的!现在Nvidia正常工作了。 - Bill Kotsias
1你介意解释一下你是如何将安全启动更改为“其他操作系统”吗? - Inspi

如果您正在寻找Google Cloud Platform的解决方案,最好遵循Google的建议,并仅使用推荐的Ubuntu版本(截至2020年5月,可以使用16.04或18.04,新的20.04尚未受支持),并按照官方指南在Google Cloud VM上安装CUDA支持这里。这将为您提供与GCP VM兼容的正确版本驱动程序。然后使用sudo reboot或从控制台重新启动实例。
如果您以其他方式为GCP VM安装CUDA,可能仍然会成功,但可能会遇到诸如"NVIDIA-SMI因无法与NVIDIA驱动程序通信而失败"或某些依赖问题的困扰。
附注!我不会在此处复制说明,因为它们可能随时发生变化,请始终参考原始GCP来源获取最新的有效解决方案。

1如果您正在使用深度学习虚拟机,并且之前nvidia-smi命令可以正常工作,那么以下操作可能有助于重新安装默认版本:sudo /opt/deeplearning/install-driver.sh - Gokul NC
上述评论是一个被低估的评论,感谢@GokulNC。 - undefined

很多用户提到他们无法安装Nvidia-toolkit,并且sudo apt install nvidia-cuda-toolkit无效。 请确保您正在使用最新的GCC编译器。使用旧版本的GCC编译器,如4.9,将无法编译Nvidia Cuda toolkit。尝试在使用最新的GCC编译器(例如v9.3)后再进行安装。

未来的读者们:
我正在使用虚拟机实例(Google Cloud Platform),并且按照这个链接(this gist)的指引在我的虚拟机上安装Cuda和CuDNN。
我不得不手动上传CuDNN部分。(只是提一下。)
现在,让我们来看看错误信息:
我遇到了这个问题,但是完全重启实例解决了这个问题。 而所谓的完全重启是指停止实例然后重新启动。
希望对某人有所帮助。

对我来说没有起作用。 - desmond13
5Linus Torvalds曾经说过“F*** You, NVIDIA !!”至今,我想他/这个声明。 - Pramesh Bajracharya

我在Ubuntu 20.04上使用的是470版驱动(撰写时的最新驱动)。
我进入“软件和更新”>“附加驱动程序”,然后降级到nvidia-driver-460,点击应用,然后重新启动。
之后,我再次能够正确地看到nvidia-smi的输出。

对我的Ubuntu 20.04没有帮助。 - mishadr