NVIDIA-SMI因无法与NVIDIA驱动程序通信而失败。

56

我正在运行一个带有Ubuntu 14.04 LTS的AWS EC2 g2.2xlarge实例。 在训练TensorFlow模型时,我想观察GPU利用率。 尝试运行“nvidia-smi”时出现错误。

ubuntu@ip-10-0-1-213:/etc/alternatives$ cd /usr/lib/nvidia-375/bin
ubuntu@ip-10-0-1-213:/usr/lib/nvidia-375/bin$ ls
nvidia-bug-report.sh     nvidia-debugdump     nvidia-xconfig
nvidia-cuda-mps-control  nvidia-persistenced
nvidia-cuda-mps-server   nvidia-smi
ubuntu@ip-10-0-1-213:/usr/lib/nvidia-375/bin$ ./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.


ubuntu@ip-10-0-1-213:/usr/lib/nvidia-375/bin$ dpkg -l | grep nvidia 
ii  nvidia-346                                            352.63-0ubuntu0.14.04.1                             amd64        Transitional package for nvidia-346
ii  nvidia-346-dev                                        346.46-0ubuntu1                                     amd64        NVIDIA binary Xorg driver development files
ii  nvidia-346-uvm                                        346.96-0ubuntu0.0.1                                 amd64        Transitional package for nvidia-346
ii  nvidia-352                                            375.26-0ubuntu1                                     amd64        Transitional package for nvidia-375
ii  nvidia-375                                            375.39-0ubuntu0.14.04.1                             amd64        NVIDIA binary driver - version 375.39
ii  nvidia-375-dev                                        375.39-0ubuntu0.14.04.1                             amd64        NVIDIA binary Xorg driver development files
ii  nvidia-modprobe                                       375.26-0ubuntu1                                     amd64        Load the NVIDIA kernel driver and create device files
ii  nvidia-opencl-icd-346                                 352.63-0ubuntu0.14.04.1                             amd64        Transitional package for nvidia-opencl-icd-352
ii  nvidia-opencl-icd-352                                 375.26-0ubuntu1                                     amd64        Transitional package for nvidia-opencl-icd-375
ii  nvidia-opencl-icd-375                                 375.39-0ubuntu0.14.04.1                             amd64        NVIDIA OpenCL ICD
ii  nvidia-prime                                          0.6.2.1                                             amd64        Tools to enable NVIDIA's Prime
ii  nvidia-settings                                       375.26-0ubuntu1                                     amd64        Tool for configuring the NVIDIA graphics driver
ubuntu@ip-10-0-1-213:/usr/lib/nvidia-375/bin$ lspci | grep -i nvidia
00:03.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
ubuntu@ip-10-0-1-213:/usr/lib/nvidia-375/bin$ 

$ inxi -G
Graphics:  Card-1: Cirrus Logic GD 5446 
           Card-2: NVIDIA GK104GL [GRID K520] 
           X.org: 1.15.1 driver: N/A tty size: 80x24 Advanced Data: N/A out of X

$  lspci -k | grep -A 2 -E "(VGA|3D)"
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
    Subsystem: XenSource, Inc. Device 0001
    Kernel driver in use: cirrus
00:03.0 VGA compatible controller: NVIDIA Corporation GK104GL [GRID K520] (rev a1)
    Subsystem: NVIDIA Corporation Device 1014
00:1f.0 Unassigned class [ff80]: XenSource, Inc. Xen Platform Device (rev 01)

我按照以下步骤安装了CUDA 7和cuDNN:

$sudo apt-get -q2 update
$sudo apt-get upgrade
$sudo reboot

=======================================================================

重启后,运行“$sudo update-initramfs -u”命令更新initramfs。

现在,请编辑/etc/modprobe.d/blacklist.conf文件以屏蔽nouveau驱动。在编辑器中打开该文件,并在文件末尾插入以下行:

blacklist nouveau blacklist lbm-nouveau options nouveau modeset=0 alias nouveau off alias lbm-nouveau off

保存并退出文件。

现在安装构建基本工具,然后按以下步骤更新initramfs并再次重启:

$sudo apt-get install linux-{headers,image,image-extra}-$(uname -r) build-essential
$sudo update-initramfs -u
$sudo reboot

重新启动后,运行以下命令安装Nvidia。

$sudo wget http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.28_linux.run
$sudo chmod 700 ./cuda_7.0.28_linux.run
$sudo ./cuda_7.0.28_linux.run
$sudo update-initramfs -u
$sudo reboot

现在系统已经启动,通过运行以下命令来验证安装。
$sudo modprobe nvidia
$sudo nvidia-smi -q | head`enter code here`

你应该看到输出类似于“nvidia.png”。
现在运行以下命令。 $
cd ~/NVIDIA_CUDA-7.0_Samples/1_Utilities/deviceQuery
$make
$./deviceQuery

然而,在Tensorflow训练模型时,“nvidia-smi”仍然不显示GPU活动:
ubuntu@ip-10-0-1-48:~$ ipython
Python 2.7.11 |Anaconda custom (64-bit)| (default, Dec  6 2015, 18:08:32) 
Type "copyright", "credits" or "license" for more information.

IPython 4.1.2 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import tensorflow as tf 
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.7.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.7.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.7.5 locally



ubuntu@ip-10-0-1-48:~$ nvidia-smi
Thu Mar 30 05:45:26 2017       
+------------------------------------------------------+                       
| NVIDIA-SMI 346.46     Driver Version: 346.46         |                       
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GRID K520           Off  | 0000:00:03.0     Off |                  N/A |
| N/A   35C    P0    38W / 125W |     10MiB /  4095MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

1
对我有效的方法是运行:nvidia-settings,然后选择NVIDIA GPU(根据您的喜好选择Performance/On-Demand)。它之前被设置为Intel。 - Akhil
27个回答

57

我通过从BIOS禁用“安全启动控制”来解决在ASUS笔记本电脑上使用GTX 950m和Ubuntu 18.04时遇到的“NVIDIA-SMI失败,因为它无法与NVIDIA驱动程序通信”的问题。


2
可以了,现在我又可以使用CUDA了。 - 1cedsoda
禁用安全启动对于搭载Geforce-950M的Acer Aspire VN7起作用。 - Plutoz
1
我认为禁用安全启动不是一个好主意。你可以注册MOK(机器所有者密钥),然后就不需要禁用安全启动了。 - Vishal Gupta
1
在安装驱动程序时,我确实登记了MOK。使用我的机器一周后,不知何故它停止工作了。不确定原因。有人知道另一种解决方法,或者至少可以调查一下为什么会发生这种情况吗? - Eduardo Reis
禁用安全启动控制并没有解决问题。我现在就卡在这里了。 - Eduardo Reis
显示剩余5条评论

24

运行以下命令以获取正确的NVIDIA驱动程序:

sudo ubuntu-drivers devices

然后选择正确的<代码>并运行:

sudo apt install <version>

1
在5.17.3上对我没用。 - Raymond
对我有用!安装了驱动程序nvidia-driver-515(显示为发行版非自由推荐)。 - Soma Siddhartha
1
对我没有起作用。 - jsibs
1
对我来说没有起作用 - undefined

16

2
我的电脑在更新后突然不显示NVIDIA显卡了。这个方法帮助我解决了问题。谢谢。 - gak4u
1
对我有用!谢谢! - zangsir
对我没用。 - Raymond
谢谢,它也适用于我的工作站,而不是任何云实例。 - Saki Osive

11

我正在使用 AWS 的 DeepAMI P2 实例时,突然发现 Nvidia-driver 命令失效了且无法在 torch 或 tensorflow 库中找到 GPU。接下来我通过以下方法解决了这个问题:

运行 nvcc --version 命令,如果无法运行,则执行以下命令:

apt install nvidia-cuda-toolkit

希望以上步骤能够解决该问题。


4
这对我有用。在我的情况下,需要重新启动才能使nvidia-smi再次正常工作。 - Jack Chan
那如果它确实起作用呢? - gareththegeek

9

请仔细检查您是否具有访问/dev/nvidiactl设备的正确权限,或者该设备是否存在。

$ strace nvidia-smi
...
openat(AT_FDCWD, "/dev/nvidiactl", O_RDONLY) = -1 ENOENT (No such file or directory)

请确保 nvidia-persistenced 服务已安装、启动且正在运行:

nvidia-persistenced --version
sudo systemctl start nvidia-persistenced
sudo systemctl status nvidia-persistenced
tail /var/log/syslog # When failed.
journalctl -xeu nvidia-persistenced.service

参见:谁创建/dev/nvidia0和/dev/nvidiactl?

您可以尝试手动创建设备:

sudo modprobe -abq nvidia
sudo nvidia-modprobe -c 0 -u
nvidia-smi -L

在我的情况下,在重新启动 nvidia-persistenced 服务之后,我的 syslog 中出现了以下错误:

NVRM: 对于 X 设备未调用 NVIDIA 探针例程。 这可能发生在加载并获取 NVIDIA 设备所有权的驱动程序(例如:nouveau、rivafb、nvidiafb 或 rivatv)存在冲突的情况下。 尝试卸载冲突的内核模块(和/或重新配置内核以避免使用存在冲突的驱动程序)。

解决方法是将 nouveau 驱动程序黑名单加入到 /etc/modprobe.d/blacklist.conf 文件中:

# Blacklist nouveau.
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

然后重启系统。

参见:如何移除Nouveau内核驱动程序(修复Nvidia安装错误)


9

我在使用Google Compute Engine上的Ubuntu 16.04(Linux 4.14内核)时也遇到了相同的错误,使用K80 GPU。我将内核从4.14升级到4.15,问题得以解决。以下是我如何升级Linux内核从4.14到4.15的方法:

Step 1:
Check the existing kernel of your Ubuntu Linux:

uname -a

Step 2:

Ubuntu maintains a website for all the versions of kernel that have 
been released. At the time of this writing, the latest stable release 
of Ubuntu kernel is 4.15. If you go to this 
link: http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/, you will 
see several links for download.

Step 3:

Download the appropriate files based on the type of OS you have. For 64 
bit, I would download the following deb files:

wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-headers-
4.15.0-041500_4.15.0-041500.201802011154_all.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-headers-
4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-image-
4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb

Step 4:

Install all the downloaded deb files:

sudo dpkg -i *.deb

Step 5:
Reboot your machine and check if the kernel has been updated by:
uname -a

您应该看到您的内核已经升级,希望nvidia-smi可以正常工作。


这对我和nvidia-390驱动程序有效,现在它可以modprobe,我从内核4.4.0更新到4.15.0。 - Herbert
浪费了4个多小时,这个解决了我的问题。谢谢。 - aerin
1
你是升级到了4.14(如文本中所述)还是4.15(如代码所示)?我正在运行4.15并且遇到了相同的问题。 - MrMartin
抱歉造成困惑,看起来有一些打字错误。我刚刚编辑了它。 - Heapify
这对我在亚马逊服务器16.04上很有帮助。nvidia-driver = 410,cuda 10.0。 - MrKhan

5

我的系统版本:Ubuntu 20.04 LTS。

  • I solved this by generate a new MOK and enroll it into shim.

  • Without disable of Secure Boot, although it also really works for me.

  • Simply execute this command and follow what it suggests:

    sudo update-secureboot-policy --enroll-key
    
根据Ubuntu的维基页面:如何进行非自动化驱动程序签名

2
未找到任何 MOK。 - Stepan Yakovenko
@Stepan Yakovenko 我严格按照链接所建议的做法操作,一切都进展顺利。但是现在我不再使用Ubuntu了,因为在其上开发软件对我来说不太舒适。我也尝试过Manjaro,但现在我又回到了Win10系统。也许以后我会再次使用Linux。很抱歉无法为您提供帮助。 - Kason

4
我发现无论内核版本如何,解决问题的方法是使用WGET选项并让apt安装它们。
sudo apt-get install --reinstall linux-headers-$(uname -r)

驱动版本:390.138,运行在Ubuntu服务器18.04.4上。


这个评论应该排得更靠前。 - Bipin Lekhak

4

1
这对我解决了问题。我的问题是在从21升级到22之后,由于某种原因nvidia驱动程序没有随之升级。 - Randall Coding
不要这样做!这让我的系统无法使用(而且之后我意识到它已经被弃用了)。 - diramazioni
尝试了不同的方法在Ubuntu虚拟机上安装驱动程序,但这种方法效果最好。已在Ubuntu 22.04上测试过。 - Ebin Zacharias

2
$ sudo apt update
$ sudo apt upgrade

只需要使用这些命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接