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个回答

2
尝试正确地重新安装Nvidia驱动程序,如果您使用的是Ubuntu。
首先删除与Nvidia和Cuda有关的所有内容。
sudo apt-get remove --purge '^nvidia-.*'
sudo apt-get remove --purge '^libnvidia-.*'
sudo apt-get remove --purge '^cuda-.*'

然后执行下一行。
sudo apt-get install linux-headers-$(uname -r)

之后,根据您的目标平台、架构等从Nvidia网站下载latestrun文件,如下所示:(网站的样式可能会发生变化)

enter image description here

然后该网站将给您安装Nvidia驱动程序的命令,就像这样。

enter image description here

在我的情况下是:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda

运行这些命令来安装Nvidia驱动程序,如果需要升级当前版本或者从头安装,请接受。然后错误应该就会被修复。
我希望这能对你有所帮助,祝你好运!
参考资料:https://forums.developer.nvidia.com/t/nvidia-smi-has-failed-because-it-couldnt-communicate-with-the-nvidia-driver-make-sure-that-the-latest-nvidia-driver-is-installed-and-running/197141

2
"最初的回答":我想感谢@Heapify提供了实用的答案,并更新他的答案,因为附带的链接已经过时。
步骤1: 检查您的Ubuntu Linux现有内核:
uname -a

步骤2: Ubuntu维护了一个网站,用于发布所有已发布的内核版本。在撰写本文时,最新的稳定版Ubuntu内核为4.15。如果您访问此链接:http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/,您将看到多个下载链接。
步骤3: 根据您所使用的操作系统类型下载相应的文件。对于64位系统,我会下载以下deb文件:
// UP-TO-DATE 2019-03-18
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-headers-4.15.0-041500_4.15.0-041500.201802011154_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v4.15/linux-headers-4.15.0-041500-generic_4.15.0-041500.201802011154_amd64.deb
wget https://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

步骤五:

重启机器,并检查是否更新了内核,方法如下:

最初的回答
uname -aenter code here

2

我遇到了GE Force-920 M Nvidia芯片相同的问题。最初安装的nvidia驱动版本是510,而这个版本与ubuntu 18不兼容。因此,我删除了它并安装了470版本,现在一切都正常工作。

sudo apt-get purge nvidia-driver-510

sudo apt-get install nvidia-driver-470


1

1

对于所有遇到相同问题且其他解决方案都无效的人,这是我的解决方法:只需禁用安全启动,然后重新安装驱动程序。


1

0

我在这个问题上苦苦挣扎了两天,现在在这里分享我的解决方案,以防有人需要。

我使用的是Azure平台上带有2张K80卡的标准N系列GPU服务器,并安装了Ubuntu 18.04操作系统。

显然,在我遇到这个问题的几天前,Linux内核进行了更新,更新后驱动程序停止工作。

起初,我按照上面的回复建议进行了清除和重新安装。但是什么都没有用。突然间(我不记得为什么要这样做),我在其中一台虚拟机上更新了默认的gcc和g++版本,如下所示。

sudo apt install software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 90
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 90

然后我按照官方文档的指示卸载了Nvidia软件,并重新安装它(请根据您的系统选择正确的版本:https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal)。

sudo apt-get purge nvidia-*

然后nvidia-smi命令终于又可以正常工作了。

PS:

如果您像我一样使用Azure Linux VM,则推荐安装CUDA的方法实际上是通过在Azure门户中启用“NVIDIA GPU Driver Extension”(当然,在配置正确的gcc版本之后)。

我已经在我的另一个VM上尝试过这种方式,它也可以正常工作。


0
关于NVIDIA驱动程序的一个重要事实并不是很广为人知,那就是它的构建是通过DKMS完成的。这允许在内核升级时进行自动重建,这发生在系统启动时。由于这个原因,错过错误消息相当容易,特别是如果你正在使用云VM或没有附加IPMI/管理界面的服务器上工作。但是,在安装软件包后,可以通过执行dkms autoinstall来触发DKMS构建。如果失败,则会有一个有意义的错误消息,指出缺少依赖项或其他问题。如果dkms autoinstall正确构建模块,则可以通过modprobe简单地加载它-没有必要重新启动系统(这经常被用作触发DKMS重建的方法)。 您可以在此处查看示例。

0
通过重新安装CUDA解决了这个问题:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb
echo "md5sum: $(md5sum cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb)"
echo "correct: 056de5e03444cce506202f50967b0016"
dpkg -i cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb
apt-key add /var/cuda-repo-ubuntu1804-11-1-local/7fa2af80.pub
apt-get -qq update
apt-get -qq -y install cuda
rm cuda-repo-ubuntu1804-11-1-local_11.1.0-455.23.05-1_amd64.deb

0

我不是Linux专家,但我做了以下几件事情,对我来说效果很好:

  1. 前往https://www.nvidia.com/download/index.aspx下载适当的驱动程序。
  2. 将.run文件传输到EC2系统中(我使用FileZilla进行文件传输)
  3. 进入.run文件路径
  4. 执行chmod +x NVIDIA-Linux-x86_64-XXX.XXX.XX.run
  5. 执行./NVIDIA-Linux-x86_64-XXX.XXX.XX.run
  6. 执行sudo reboot

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