选中内容(绿色)时除了会搜索文章名,还会搜索文章内容
点击结果中的文章名进入文章界面后可以按Ctrl+F在页面内搜索
  • 版权:CC BY-SA 4.0
  • 创建:2020-03-10
  • 更新:2020-11-07
  • 关键词: Nvidia GPU tensorflow 显卡驱动 安装 linux
Linux 为 Tensorflow 安装 Nvidia 显卡驱动及常见问题解决方法


查看显卡是否检测到

  1. > lspci | grep -i nvidia
  2. 81:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
  3. 81:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)

先试试以下命令看是否已经可以直接使用, 如果不报错就可以

  1. dpkg -l |grep nvidia
  2. nvidia-smi

安装

对于 Manjaro, 直接在 设置->硬件设定里面选择,右键选择合适的版本安装,然后重启即可。
或者使用mhwd 命令在终端安装卸载, 具体使用sudo mhwd -h 查看

manjaro_nvidia_driver

如果安装 Tensorflow 是使用 docker 的方式,安装的版本无所谓,尽量新一点的驱动就可以,或者比最新的老一个版本;

如果不是使用 docker 安装,则需要注意,不同版本的驱动带的cuda版本不同,这个需要去官网了解,比如这里 440 会安装 10.02 的驱动,而 tensorflow 现在(2020.5.1)最高只支持 10.01,所以如果装了这个驱动,自己还需要手动去安装一个 10.01 版本的 cuda,如果事 435 版本则直接是 10.01。 以后出新版了情况应该也类似

其它(Ubuntu deepin)如下:

官网有很多文档: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile

  • 查看源里面的驱动版本
    1. sudo apt search "nvidia-driver"
    2. sudo apt search "nvidia-dkms"
  1. ~ sudo apt search "nvidia-driver"
  2. 正在排序... 完成
  3. 全文搜索... 完成
  4. nvidia-384/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
  5. Transitional package for nvidia-driver-390
  6. nvidia-384-dev/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
  7. Transitional package for nvidia-driver-390
  8. nvidia-driver-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
  9. NVIDIA driver metapackage
  10. nvidia-driver-418/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
  11. Transitional package for nvidia-driver-430
  12. nvidia-driver-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
  13. NVIDIA driver metapackage
  14. nvidia-driver-435/bionic-updates,now 435.21-0ubuntu0.18.04.2 amd64 [已安装]
  15. NVIDIA driver metapackage
  16. nvidia-headless-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
  17. NVIDIA headless metapackage
  18. nvidia-headless-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
  19. NVIDIA headless metapackage
  20. nvidia-headless-435/bionic-updates 435.21-0ubuntu0.18.04.2 amd64
  21. NVIDIA headless metapackage
  22. nvidia-headless-no-dkms-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
  23. NVIDIA headless metapackage - no DKMS
  24. nvidia-headless-no-dkms-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
  25. NVIDIA headless metapackage - no DKMS
  26. nvidia-headless-no-dkms-435/bionic-updates 435.21-0ubuntu0.18.04.2 amd64
  27. NVIDIA headless metapackage - no DKMS
  28. xserver-xorg-video-nvidia-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
  29. NVIDIA binary Xorg driver
  30. xserver-xorg-video-nvidia-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
  31. NVIDIA binary Xorg driver
  32. xserver-xorg-video-nvidia-435/bionic-updates,now 435.21-0ubuntu0.18.04.2 amd64 [已安装,自动]
  33. NVIDIA binary Xorg driver

这里可以看到有435版本的驱动,符合自己的要求;如果版本太低了,可能是源的问题,可以检查一下源的设置,比如设置成官方的然后apt update后再查找,如果是debian系(比如Ubuntu也算)的,一定要在这一步确认有符合自己要求的驱动版本(驱动版本太低tensorflow会提示驱动版本过低,比如tensorflow2.1至少需要418版本,这个在tensorflow官方的安装页有说明)

如果源里面没有,可以添加源sudo add-apt-repository ppa:graphics-drivers/ppa

  • 在官网下载显卡驱动(注意不需要下载和安装cuda)

注意: 这里下载官方驱动只是为了留存备份,下载了先不要进行安装,不一定用得到这个,如果是Dedian 系,不到万不得已,一定不能使用这个安装,使用官方源里面的驱动, 不然可能出现一些问题 (NVIDIA官网下载

  • 禁用nouveau, 并安装驱动

Ubuntu默认内置了Nvidia的第三方jiuhaole开源驱动nouveau,在安装nvidia驱动的时候,会和nouveau驱动冲突,所以需要讲该驱动禁用

  1. $ sudo gedit /etc/modprobe.d/blacklist.conf

在blacklist.conf中添加:

  1. blacklist nouveau
  2. options nouveau modeset=0

然后

  1. sudo update-initramfs -u

或者

  1. sudo reboot
  • 确认系统里面没有其它版本的驱动了
    如果之前是安装包(.run)安装的,可以使用安装包sudo ./NVIDIA_....run --uninstall来卸载,或者sudo /usr/bin/nvidia-uninstall
    可以通过这些命令查看,应该都提示找不到或者没有 nvidia 就算卸载好了(cuda这里没有提,有或没有不影响,可以一起卸载了,反正docker的方式 不会用到)

    1. cat /proc/driver/nvidia/version
    2. nvidia-smi
    3. dkms status

    如果卸载了所有驱动proc/driver目录下还是有nvidia的东西,可以尝试重启就会没有了

  • 重启后可能就没有图形界面了,按ctrl+alt+F2 进入终端进行操作;

  • 如果还能进图形界面说明之前就是使用的专有驱动,打开终端输入sudo init 3进入到命令行模式

  • 前面我们确认了源里面有的驱动版本,选择最新的下载,比如我这里选择了435版本

    1. sudo apt install nvidia-driver-435
  • 安装完成后确认安装是否正确,输入

    1. nvidia-smi
    2. dkms status

    能看到显卡信息和NVIDIA内核模块信息,而且两者版本一致,如果提示错误,可以在下面找找错误解决方法

  • 如果不是用官方源安装,使用安装包安装,也是在这一步执行,可能会遇到一些问题。。。

可能会出现一些问题

有时候装驱动遇到问题,重启也许是个不错的选择, 重启了进不了图形界面也不要慌, 进入安全模式, 或者如 Manjaro 能进入开机处按ctrl+alt+F3

ERROR: NVIDIA driver is not loaded

NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

先尝试:

  1. nvidia-modprobe

如果还不行, 可以尝试重启
如果仍然有问题:

  1. sudo apt install nvidia-prime
  2. sudo prime-select nvidia
  1. ls /lib/modprobe.d
  2. cat blacklist-nvidia.conf

或者

  1. ls /etc/modprobe.d
  2. cat blacklist-nvidia.conf
  3. cat blacklist.conf

blacklist-nvidia.conf文件:

  1. # Do not modify
  2. # This file was generated by nvidia-prime
  3. blacklist nvidia
  4. blacklist nvidia-drm
  5. blacklist nvidia-modeset
  6. alias nvidia off
  7. alias nvidia-drm off
  8. alias nvidia-modeset off

可以看到这里被加入黑名单了,屏蔽或者删掉即可。如果没有就不用管

然后

  1. sudo update-initramfs -u
  2. sudo modprobe nvidia # nvidia-modprobe

如果 sudo modprobe nvidia 提示找不到这个 模块, 说明驱动没装好或者不够新, 重新装一下, 比如ubuntu sudo apt install nvidia-driver-440 就会有了

另外如果要使用系统附加系统推荐的驱动时, ubuntu 附加驱动变成了手动选择的驱动,其它选项是灰色的

  1. ubuntu-drivers devices
  2. sudo ubuntu-drivers autoinstall

其实附加驱动里面的驱动版本比较低,普通使用可以用,但是给 tensorflow 就不太行,版本太久了跟新的 cuda 的版本不兼容,最后使用cuda时还是会提示需要更新驱动,所以装官网下载的最新驱动才是最好的

NVIDIA DKMS 版本不正确 (NVRM: API mismatch)

  1. NVRM: API mismatch: the client has the version 418.113, but
  2. NVRM: this kernel module has the version 390.116. Please
  3. NVRM: make sure that this kernel module and all NVIDIA driver
  4. NVRM: components have the same version.

如果使用官网下载的二进制包安装,可能会提示错误,如果忽略错误继续使用可能会提示这个,我的解决办法是使用源里面的而不是NVIDIA官方的就好了,安装源里面的版本相同的nvidia-driver 和 nvidia-dkms 即可

Failed to initialize NVML: Driver/library version mismatch

看系统的驱动版本

  1. cat /proc/driver/nvidia/version

再看最新装的驱动版本

  1. cat /var/log/dpkg.log|grep nvidia

不一样就卸载装成一样的就好了,或者保证所有的驱动卸载干净再装; 也有可能是旧的文件没有清理干净,比如之前430然后卸载了,这些文件还在,安装了新的就会提示版本冲突了,可以重启解决,重启了旧的文件也会被自动清理掉

文章有误?有想法想讨论?查看或者发起勘误/讨论 主题
(发起评论需要先登录 github)

/wallpaper/wallhaven-vg16k5.jpg