ubuntu:nvidia-smi报错:Failed to initialize NVML: Driver/library version mismatch
前言:
我首先是因为想要编译一个关于cuda的程序,发现找不到helper_cuda.h头文件,查找网上解决办法,无果。然后使用简单的cuda程序检测,发现有的能编译通过,有的不可以,出现no device,等错误提示,故查看英伟大驱动,nvidia-smi出现标题报错
问题:
查看显卡:
$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch
分析
- 查看显卡驱动使用的内核版本(515)
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 515.65.01 Wed Jul 20 14:00:58 UTC 2022
GCC version: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
显卡内核 515.65.01,系统内核18.04
- 查看所有nvidia驱动程序(510)
sudo dpkg --list | grep nvidia-*
[sudo] mj 的密码:
ii libnvidia-compute-510-server:amd64 510.65.01-0ubuntu0.18.04.1 amd64 NVIDIA libcompute package
原因
两个版本不一致(515和510),说明版本自动更新了
Ubuntu 的 unattended-upgrades 自动更新了 Nvidia 驱动后未重启生效。
解决1
- 1.关闭自动更新
同时更新 /etc/apt/apt.conf.d/10periodic 和 /etc/apt/apt.conf.d/20auto-upgrades
- APT::Periodic::Update-Package-Lists "1";
- APT::Periodic::Unattended-Upgrade "1";
- APT::Periodic::Update-Package-Lists "0";
- APT::Periodic::Unattended-Upgrade "0";
解决2
内核版本和目前使用驱动版本不一致,需要卸载原来的,安装新版本
- 1、卸载nvidia驱动
//安装时使用.run文件安装
sudo sh NVIDIA-Linux-x86_64-390.116.run --uninstall
//或
sudo /usr/bin/nvidia-uninstall
//安装时使用命令安装
//卸载驱动
sudo apt-get purge nvidia*
//To remove CUDA Toolkit:
sudo apt-get --purge remove "*cublas*" "cuda*"
//To remove NVIDIA Drivers:
sudo apt-get --purge remove "*nvidia*"
最后,输入
nvidia-smi
出现
Command 'nvidia-smi' not found, but can be installed with:
说明卸载完成了
- 2、卸载cuda
// cuda10.1及以上的卸载
cd /usr/local/cuda-xx.x/bin/
sudo ./cuda-uninstaller
sudo rm -rf /usr/local/cuda-xx.x
//cuda10.0及以下的卸载
cd /usr/local/cuda-xx.x/bin/
sudo ./uninstall_cuda_xx.x.pl
sudo rm -rf /usr/local/cuda-xx.x
- 3、重新安装(参考)