- 作者:
- 分类:知识&开发->AI->工具
- 阅读:5892
- 点赞:18
- 版权:CC BY-SA 4.0
- 创建:2020-03-10
- 更新:2022-06-21
原文链接(持续更新):https://neucrack.com/p/252
查看显卡是否检测到
> lspci | grep -i nvidia
81:00.0 VGA compatible controller: NVIDIA Corporation GP102 [GeForce GTX 1080 Ti] (rev a1)
81:00.1 Audio device: NVIDIA Corporation GP102 HDMI Audio Controller (rev a1)
先试试以下命令看是否已经可以直接使用, 如果不报错就可以
dpkg -l |grep nvidia
nvidia-smi
安装
Manjaro
对于 Manjaro, 直接在 设置->硬件设定里面选择,右键选择合适的版本安装,然后重启即可。
或者使用mhwd
命令在终端安装卸载, 具体使用sudo mhwd -h
查看
如果安装 Tensorflow 是使用 docker 的方式,安装的版本无所谓,尽量新一点的驱动就可以,或者比最新的老一个版本;
如果不是使用 docker 安装,则需要注意,不同版本的驱动带的cuda版本不同,这个需要去官网了解,比如这里 440 会安装 10.02 的驱动,而 tensorflow 现在(2020.5.1)最高只支持 10.01,所以如果装了这个驱动,自己还需要手动去安装一个 10.01 版本的 cuda,如果事 435 版本则直接是 10.01。 以后出新版了情况应该也类似
Ubuntu
其它(Ubuntu deepin)如下:
官网有很多文档: https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile
- 查看源里面的驱动版本
sudo apt search "nvidia-driver"
sudo apt search "nvidia-dkms"
➜ ~ sudo apt search "nvidia-driver"
正在排序... 完成
全文搜索... 完成
nvidia-384/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
Transitional package for nvidia-driver-390
nvidia-384-dev/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
Transitional package for nvidia-driver-390
nvidia-driver-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
NVIDIA driver metapackage
nvidia-driver-418/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
Transitional package for nvidia-driver-430
nvidia-driver-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
NVIDIA driver metapackage
nvidia-driver-435/bionic-updates,now 435.21-0ubuntu0.18.04.2 amd64 [已安装]
NVIDIA driver metapackage
nvidia-headless-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
NVIDIA headless metapackage
nvidia-headless-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
NVIDIA headless metapackage
nvidia-headless-435/bionic-updates 435.21-0ubuntu0.18.04.2 amd64
NVIDIA headless metapackage
nvidia-headless-no-dkms-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
NVIDIA headless metapackage - no DKMS
nvidia-headless-no-dkms-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
NVIDIA headless metapackage - no DKMS
nvidia-headless-no-dkms-435/bionic-updates 435.21-0ubuntu0.18.04.2 amd64
NVIDIA headless metapackage - no DKMS
xserver-xorg-video-nvidia-390/bionic-updates 390.116-0ubuntu0.18.04.3 amd64
NVIDIA binary Xorg driver
xserver-xorg-video-nvidia-430/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
NVIDIA binary Xorg driver
xserver-xorg-video-nvidia-435/bionic-updates,now 435.21-0ubuntu0.18.04.2 amd64 [已安装,自动]
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驱动冲突,所以需要讲该驱动禁用
$ sudo gedit /etc/modprobe.d/blacklist.conf
在blacklist.conf中添加:
blacklist nouveau
options nouveau modeset=0
然后
sudo update-initramfs -u
或者
sudo reboot
确认系统里面没有其它版本的驱动了
如果之前是安装包(.run)安装的,可以使用安装包sudo ./NVIDIA_....run --uninstall
来卸载,或者sudo /usr/bin/nvidia-uninstall
; 如果dkms status
有驱动,则使用dkms remove nvidia/418.102.04 --all
卸载,注意这里版本号要与dkms staus
中的一样
可以通过这些命令查看,应该都提示找不到或者没有 nvidia 就算卸载好了(cuda这里没有提,有或没有不影响,可以一起卸载了,反正docker的方式 不会用到)cat /proc/driver/nvidia/version
nvidia-smi
dkms status
lsmod | grep nvidia
如果卸载了所有驱动
proc/driver
目录下还是有nvidia的东西,可以尝试重启就会没有了重启后可能就没有图形界面了,按ctrl+alt+F2 进入终端进行操作;ubuntu需要在grun进入recover模式,选择root用户操作
如果还能进图形界面说明之前就是使用的专有驱动,打开终端输入
sudo init 3
进入到命令行模式前面我们确认了源里面有的驱动版本,选择最新的下载,比如我这里选择了
435
版本apt install nvidia-driver-435
apt install nvidia-dkms-435
apt list -i|grep nvidia-driver
# 看下具体的驱动版本,比如 nvidia-driver-450/bionic-updates,bionic-security,now 450.102.04-0ubuntu0.18.04.2 amd64 [installed] 就是 450.102.04
dkms install nvidia/450.102.04
这里在安装的时候,如果要安装老版本的驱动需要注意,使用
apt search nvidia-driver
可能会出现比如418
版本驱动后面的介绍实际上指向了430
版本,430
又指向了440
,440
又指向了450
,所以导致执行安装418
版本最后实际安装的是450
版本!!!nvidia-driver-418/bionic-updates 430.50-0ubuntu0.18.04.2 amd64
Transitional package for nvidia-driver-430
解决办法暂时没有深究,仔细看一下你需要的版本和它实际的版本,如果实在不能找到你需要的版本,也许需要使用安装包安装了
安装完成后确认安装是否正确,输入
nvidia-smi
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.
先尝试:
nvidia-modprobe
如果还不行, 可以尝试重启
如果仍然有问题:
sudo apt install nvidia-prime
sudo prime-select nvidia
ls /lib/modprobe.d
cat blacklist-nvidia.conf
或者
ls /etc/modprobe.d
cat blacklist-nvidia.conf
cat blacklist.conf
找blacklist-nvidia.conf
文件:
# Do not modify
# This file was generated by nvidia-prime
blacklist nvidia
blacklist nvidia-drm
blacklist nvidia-modeset
alias nvidia off
alias nvidia-drm off
alias nvidia-modeset off
可以看到这里被加入黑名单了,屏蔽或者删掉即可。如果没有就不用管
然后
sudo update-initramfs -u
sudo modprobe nvidia # nvidia-modprobe
如果
sudo modprobe nvidia
提示找不到这个 模块, 说明驱动没装好或者不够新, 重新装一下, 比如ubuntu
sudo apt install nvidia-driver-440
就会有了
另外如果要使用系统附加系统推荐的驱动时, ubuntu 附加驱动变成了手动选择的驱动,其它选项是灰色的
ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
其实附加驱动里面的驱动版本比较低,普通使用可以用,但是给 tensorflow 就不太行,版本太久了跟新的 cuda 的版本不兼容,最后使用cuda时还是会提示需要更新驱动,所以装官网下载的最新驱动才是最好的
NVIDIA DKMS 版本不正确 (NVRM: API mismatch)
NVRM: API mismatch: the client has the version 418.113, but
NVRM: this kernel module has the version 390.116. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.
如果使用官网下载的二进制包安装,可能会提示错误,如果忽略错误继续使用可能会提示这个,我的解决办法是使用源里面的而不是NVIDIA官方的就好了,安装源里面的版本相同的nvidia-driver 和 nvidia-dkms 即可
Failed to initialize NVML: Driver/library version mismatch
看系统已经加载了的驱动版本
cat /proc/driver/nvidia/version
再看最新装的驱动版本
apt list -i |grep -i nvidia-driver
# cat /var/log/dpkg.log|grep nvidia
不一样就卸载装成一样的就好了,或者保证所有的驱动卸载干净再装; 也有可能是旧的文件没有清理干净,比如之前430然后卸载了,这些文件还在,安装了新的就会提示版本冲突了,可以重启解决,重启了旧的文件也会被自动清理掉
另外一种情况就是 驱动自动更新了, 使用dkms status
和apt list --installed|grep -i nvidia
查看显卡版本可能一致为新版本,但是cat /proc/driver/nvidia/version
版本依然是旧版本,最简单的方法直接重启机器就好了,如果不能重启机器,可以尝试重载驱动即可, 首先按ctrl+alt+f2
切换到终端,然后
sudo systemctl isolate multi-user.target
lsmod | grep nvidia
杀死所有相关进程
sudo lsof /dev/nvidia* | grep -v PID | grep -v lsof | awk '{print $2}' | xargs sudo kill -9
然后
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo lsof /dev/nvidia*
lsmod | grep nvidia
就没有相关进程了
然后运行
nvidia-smi
就会自动装载驱动了
如果需要启动图形界面:
sudo systemctl start graphical.target
也可以设置关闭驱动自动更新,这样就不会遇到这种烦恼了:
sudo apt-mark hold nvidia-driver-415
/usr/bin/nvidia-modprobe: unrecognized option: “-s”
nvidia-modprobe 版本太低, apt update
然后再装一遍,如果源里面没有新的可以手动下载和驱动版本一样的 nvidia-modprobe 安装
然后
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo lsof /dev/nvidia*
lsmod | grep nvidia
就没有相关进程了
然后运行
nvidia-smi
如果重启了 docker 还是用不了 stderr: nvidia-container-cli: mount error: mount operation failed: /var/lib/docker/overlay2/7f807def5df421ec07411cb10db4c5cd3edcc7271e96669807bff18ef4a9db14/merged/proc/driver/nvidia/params/version/registry: no such file or directory\\\\n\\\"\"": unknown
重启 docker 可以解决
sudo systemctl restart docker
Unable to determine the device handle for GPU 0000:05:00.0: Unknown Error
nvidia-container-cli: detection error: nvml error: unknown error: unknown.
可以先按照前面的错误解决方法
cat /proc/driver/nvidia/version
apt list -i |grep -i nvidia-driver
# cat /var/log/dpkg.log|grep nvidia
sudo systemctl isolate multi-user.target
lsmod | grep nvidia
sudo lsof /dev/nvidia* | grep -v PID | grep -v lsof | awk '{print $2}' | xargs sudo kill -9
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo lsof /dev/nvidia*
lsmod | grep nvidia
nvidia-smi
再不行就重启试试