Ubuntu 20.04 解决 nvidia-smi 出错问题

目录

一、初始问题

二、解决方法

[2.1 法一](#2.1 法一)

[2.2 法二](#2.2 法二)

三、新的问题

[3.1 解决方案](#3.1 解决方案)

[3.2 进一步解决](#3.2 进一步解决)

[3.3 最后解决](#3.3 最后解决)


一、初始问题

今天要在本机上装个环境时,运行了一下 nvidia-smi突然遇到一个问题:

Failed to initialize NVML: Driver/library version mismatch

然后查找解决方案,找到这个博主的方法:

已解决【nvidia-smi】Failed to initialize NVML: Driver/library version mismatch解决方法_nvidia-smi version mismatch-CSDN博客

输入:

bash 复制代码
dpkg -l | grep nvidia

可以看到对应的nvidia驱动的版本号

然后查看内核的版本:

bash 复制代码
cat /proc/driver/nvidia/version

看到我的是 535.183.01,可能是和 nvidia 驱动版本号不一致的问题,后面查找时一些博主说是由于 ubuntu 20.04 自动更新导致,所以最后可以关掉自动更新,这里先不赘述。

二、解决方法

2.1 法一

上面的博客中说到一个简单直接的方法,即重启,reboot,重启后系统会自动更新内核使得版本一致。然后就可以解决

但我因为在用服务器跑代码,在看,就想着不用重启的方法。。。后悔!

不过重启的方法我没试过,不知道是不是能解决。

2.2 法二

采用指令退出当前内核使用的显卡模块,然后重新加载升级后版本的显卡驱动作为内核模块。

bash 复制代码
sudo rmmod nvidia
sudo nvidia-smi

sudo rmmod nvidia 就遇到问题:

bash 复制代码
$ sudo rmmod nvidia
rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm

说明我们正在使用,所以需要手动退出nvidia_uvm, nvidia_modeset服务。

查看nvidia模块使用情况:

bash 复制代码
$lsmod | grep nvidia
nvidia_uvm            94718    0
nvidia_drm             531248  0
nvidia_modeset        79588287  1 nvidia_drm
nvidia               121440  132 nvidia_modeset,nvidia_uvm            12899044640  132 nvidia_modeset,nvidia_uvm

kill -9 PID终止进程,但我一直显示找不到进程,就强制终止:

bash 复制代码
sudo -f rmmod nvidia_uvm
sudo -f rmmod nvidia_drm
sudo -f rmmod nvidia_modeset
sudo rmmod nvidia

再输入:

bash 复制代码
sudo 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.

三、新的问题

3.1 解决方案

根据这篇博客:nvidia-smi报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver 原因及避坑解决方案_nvidia-smi has failed because it couldn't communic-CSDN博客

说到还是驱动的问题。

(1)安装 dkms

bash 复制代码
 sudo apt-get install dkms

(2)查看本机连接不上的驱动版本:

bash 复制代码
    ls -l /usr/src/

可以看到我的版本是 nvidia-535.183.01

如果没有 nvidia-535.183.01 这类文件,可以打开 ubuntu 的软件与更新,手动安装

安装完成后在 /usr/src/ 目录下就会有 nvidia-535.183.01文件。

(3)使用dkms重新安装适合驱动:

bash 复制代码
  sudo dkms install -m nvidia -v 535.183.01

如果安装成功,那么恭喜,已经可以 nvidia-smi

3.2 进一步解决

如果和我一样,安装失败,那么继续吧!

还是这个博主的文章:nvidia-smi报错:NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver 原因及避坑解决方案_nvidia-smi has failed because it couldn't communic-CSDN博客

输入:

bash 复制代码
  gcc --version

查看 gcc 版本。

如果你的gcc(尽量大于7.3版本)版本过低,那么上述命令sudo dkms install -m nvidia -v 470.103.01失败的原因就找到了。

(注意,这里up安装时层层报错,如果不按这个安装,可以直接跳转到 3.3 ,另一种方法安装,一步解决)

下面安装gcc7.5版本:

(1)下载gcc,输入命令:

bash 复制代码
    cd /usr/local/src/
    wget http://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.xz tar xvf
    gcc-7.5.0.tar.xz

(2)安装gcc的依赖软件,gcc的软件包内提供了自动下载需要软件的脚本,命令如下:

bash 复制代码
    cd gcc-7.5.0/
    ./contrib/download_prerequisites

这里也可能出现问题,大概是如下的错误,因为小编这里的错误当时没保存,所以参考这篇文章:Ubuntu 16.04系统中GCC 9.1编译器安装方法及C++17标准测试示例-CSDN博客

configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify

their locations. Source code for these libraries can be found at

their respective hosting sites as well as at

ftp://gcc.gnu.org/pub/gcc/infrastructure/. See also

http://gcc.gnu.org/install/prerequisites.html for additional info. If

you obtained GMP, MPFR and/or MPC from a vendor distribution package,

make sure that you have installed both the libraries and the header

files. They may be located in separate packages.

使用vi编辑器打开依赖包下载脚本文件:contrib/download_prerequisites

将该文件里的 base_url='ftp://gcc.gnu.org/pub/gcc/infrastructure/'**替换为:**base_url='http://mirror.linux-ia64.org/gnu/gcc/infrastructure/',即将不存在的服务器地址替换为镜像服务器地址。

然后再

bash 复制代码
./contrib/download_prerequisites

如果提示如下信息,则代表下载并解压成功:

2018-03-24 21:01:37 URL:http://mirror.linux-ia64.org/gnu/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "./gmp-6.1.0.tar.bz2" [1]

2018-03-24 21:01:46 URL:http://mirror.linux-ia64.org/gnu/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284/1279284] -> "./mpfr-3.1.4.tar.bz2" [1]

2018-03-24 21:01:51 URL:http://mirror.linux-ia64.org/gnu/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]

2018-03-24 21:01:58 URL:http://mirror.linux-ia64.org/gnu/gcc/infrastructure/isl-0.16.1.tar.bz2 [1626446/1626446] -> "./isl-0.16.1.tar.bz2" [1]

gmp-6.1.0.tar.bz2: 确定

mpfr-3.1.4.tar.bz2: 确定

mpc-1.0.3.tar.gz: 确定

isl-0.16.1.tar.bz2: 确定

All prerequisites downloaded successfully.

如果出现如下信息,则表示包:gmp-6.1.0.tar.bz2没有下载成功:

2018-03-24 20:54:39 URL:http://gcc.parentingamerica.com/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]

2018-03-24 20:56:16 URL:http://gcc.parentingamerica.com/infrastructure/isl-0.16.1.tar.bz2 [1626446/1626446] -> "./isl-0.16.1.tar.bz2" [1]

gmp-6.1.0.tar.bz2: 失败

sha512sum: 警告:1 个校验和不匹配

error: Cannot verify integrity of possibly corrupted file gmp-6.1.0.tar.bz2

这是因为网络连接不正常造成的,解决方案是,进入目录 "/home/davidhopper/code/gcc/gcc-7.3.0" ,手动将已下载的"mpc-1.0.3.tar.gz "、"isl-0.16.1.tar.bz2"文件删除,重新执行

bash 复制代码
./ contrib/download_prerequisites 

命令下载。如果仍然提示失败,则应使用vi编辑器修改 contrib/download_prerequisites

文件里的 **base_ur=...**换为另一个能够正常连接并下载的镜像服务器地址。

或者使用笨方法:

进入镜像服务器网址:Index of /gnu/gcc/infrastructure,手动下载,并建立链接

bash 复制代码
cd ~/code/gcc/gcc-7.3.0
tar zxvf gmp-6.1.0.tar.gz
tar zxvf mpfr-3.1.4.tar.gz
tar zxvf mpc-1.0.3.tar.gz
ln -s  gmp-6.1.0 gmp
ln -s  mpfr-3.1.4 mpfr
ln -s  mpc-1.0.3 mpc

随后即可

(3)生成Makefile文件,输入命令:

bash 复制代码
    ./configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

可能会出现如下的问题:

configure: error: in `/root/dev_env/ffmpeg-static/build/libpng-1.2.58':

configure: error: C compiler cannot create executables

See `config.log' for more details

查看 config.log ,发现:

collect2: ld returned 1 exit status

可能是要安装 openssl-devel,但up又失败了!!!

3.3 最后解决

这是一个师兄提供的方法,另一种方式安装 gcc

到这里:GitHub - gaoxiang12/slam_in_autonomous_driving: 《自动驾驶中的SLAM技术》对应开源代码

bash 复制代码
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo update-alternatives --remove-all gcc
sudo update-alternatives --remove-all g++

#命令最后的1和10是优先级,如果使用auto选择模式,系统将默认使用优先级高的
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 10

注意:

这里:sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 1

好像最好一行一行的输入

然后重启,即可 nvidia-smi

最后还可以关闭自动更新

相关推荐
凯哥是个大帅比10 分钟前
ubuntu20.04 GLIBC从2.35降级到2.31
linux
iHero12 分钟前
【Ubuntu】在 Ubuntu 22.04.3 LTS 安装 davfs2 通过 Nextcloud WebDAV 挂载到 Ubuntu 的目录上
linux·ubuntu·nextcloud
清园暖歌14 分钟前
Ubuntu 不重装系统增加交换空间大小
linux·运维·ubuntu·交换空间
黎相思15 分钟前
操作系统迁移(CentOs -> Ubuntu)
linux·ubuntu·gitee·centos
写bug如流水18 分钟前
在Ubuntu 20.04上安装pgAdmin 4
linux·运维·ubuntu
冰红茶兑滴水25 分钟前
Linux 线程控制
linux·c++·算法
IT良37 分钟前
while循环及简单案例
linux·服务器
码哝小鱼1 小时前
iptables限制网速
linux·服务器·网络
Persistence is gold1 小时前
cassandra指定配置文件的docker启动方法
运维·docker·容器
leaoleao沄1 小时前
linux-IO-进程-线程(相关函数)
linux·运维·服务器