> 技术文档 > ubuntu 安装nvidia显卡驱动,提示no device were found(爆肝两天找到适合不同人的解决办法)_nvidia-smi no devices were found

ubuntu 安装nvidia显卡驱动,提示no device were found(爆肝两天找到适合不同人的解决办法)_nvidia-smi no devices were found

  

 本文只是解决问题,不教安装,安装的话我推荐两个链接,你看他俩就完全够了:

Ubuntu20.04系统配置Pytorch环境(GPU版)_ubuntu20.04 pytorch-CSDN博客

Ubuntu22.04安装显卡驱动(高速、避错版)-CSDN博客

 本文以下内容属于排查问题,不影响你的安装使用,当你完全找到问题所在,再具体操作即可

sudo apt remove --purge \'nvidia-*\'sudo apt autoremovesudo apt update

这里放一个完全删除驱动的办法,如果你找到问题了,可以用这个

检查内核模块是否加载

  1. 打开终端,运行以下命令查看是否存在 NVIDIA 模块:
lsmod | grep nvidia
  •  
    • 如果没有输出,说明 NVIDIA 内核模块未加载。
  • 若模块未加载,尝试手动加载:
sudo modprobe nvidiasudo modprobe nvidia_uvmsudo modprobe nvidia_drm
  • 再次运行 lsmod | grep nvidia,查看模块是否成功加载。若仍未加载成功,继续以下步骤排查。
  • smod | grep nvidia nvidia_uvm 2084864 0 nvidia_drm 131072 0 nvidia_modeset 1548288 1 nvidia_drm nvidia 89858048 2 nvidia_uvm,nvidia_modeset drm_ttm_helper 16384 2 nvidia_drm,xe video 77824 4 asus_wmi,xe,i915,nvidia_modeset这就是成功加载了

安装 DKMS 及相关工具(上一步骤没问题跳过此步骤)

DKMS(Dynamic Kernel Module Support)可用于自动构建和管理内核模块。

  1. 安装 DKMS 和内核开发工具:
sudo apt install dkms build-essential linux-headers-$(uname -r)
sudo dkms install -m nvidia -v 570.124.04 -k $(uname -r)
sudo ln -sf /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.570.124.04 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so

/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1 /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.570.124.04输出这个就没问题的

sudo nano /etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveauoptions nouveau modeset=0
sudo update-initramfs -u
sudo reboot
  • build-essential 提供编译内核模块所需的基本工具。
  • linux-headers-$(uname -r) 安装与当前内核版本对应的内核头文件,确保驱动模块能正确编译。

    检查驱动模块是不是在

  • 检查驱动模块源文件是否存在(找你的驱动版本哈,附加驱动安装不知道版本往下看,有个查内核日志,里面告诉你安的具体版本):
  • ls /usr/src/nvidia-570.124.04
  •  
    • 如果不存在该目录,可能驱动安装时未正确放置源文件,需重新安装驱动。
    • ommon dkms.conf Makefile nvidia-modeset patches conftest.sh header-presence-tests.mk nvidia nvidia-peermem count-lines.mk Kbuild nvidia-drm nvidia-uvm输出这个就是成功加载了
  • 重新安装驱动模块:
  • 此命令会为当前内核版本重新安装指定版本的 NVIDIA 驱动模块。
  • 检查 NVIDIA 管理库文件是否存在:

    bash

    ls /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.*
  • 若输出类似 libnvidia-ml.so.570.124.04,说明库文件已安装;若无,需重新安装驱动。
  • 尝试更新 nvidia-smi 的符号链接:
  • 检查 Nouveau 驱动冲突

  • 1. 确认 Nouveau 驱动是否已禁用:
  • lsmod | grep nouveau

     

    • 若有输出,说明 Nouveau 驱动仍在加载,需禁用。
  • 2. 编辑配置文件禁用 Nouveau 驱动:
  • 3. 在文件中添加以下内容:
    • 保存并关闭文件。
  • 4. 更新初始内存盘:
  • 5. 重启系统:

检查安全启动

查看安全启动状态:

  • mokutil --sb-state

     

    • 如果输出显示 SecureBoot enabled,表示安全启动已启用。由于 NVIDIA 驱动模块未经过微软签名,在安全启动开启时可能无法加载。
  • 进入主板 BIOS/UEFI 界面(通常在开机时按 Del、F2 等按键),找到 SecurityBoot 相关选项,将 Secure Boot 设为 Disabled(关闭)。
  • 这里每个人的bios都是不一样的,具体怎么关网上也是各抒己见,建议去bios多试一试,然回来查看一下状态是不是关了,反正也不会影响其他
  • 保存设置并重启系统。

查看内核日志(最最最最关键的一步!!!能让你找到具体原因!!!)

通过查看内核日志,定位驱动加载失败的具体原因:

sudo journalctl -k | grep -i \'nvidia|drm\'

根据日志中的错误信息进一步排查和解决问题。例如:

如果提示缺少依赖库,安装相应的依赖库。 如果是模块签名相关问题,确保安全启动已关闭。

找到日志,打开会吧,然后复制里面内容给豆包,问她哪里有问题

下面是我问了豆包之后告诉我的错误,你就按照我上面的步骤来吧!!!!

错误信息分析

  1. 内核污染问题
[ 60.791610] nvidia: loading out-of-tree module taints kernel.[ 60.791619] nvidia: module license \'NVIDIA\' taints kernel.[ 60.791621] nvidia: module verification failed: signature and/or required key missing - tainting kernel

这表明内核检测到加载的 NVIDIA 模块没有经过签名认证,属于 “外部模块”,从而对内核造成了污染。通常,这是因为系统开启了安全启动(Secure Boot),而 NVIDIA 驱动模块没有微软的签名,所以无法通过验证。

  1. GPU 需使用开源内核模块
[ 62.139677] NVRM: The NVIDIA GPU 0000:02:00.0 (PCI ID: 10de:2c02)  NVRM: installed in this system requires use of the NVIDIA open kernel modules.

此信息显示你的 GPU 需要使用 NVIDIA 的开源内核模块,但当前加载的可能并非这类模块,这或许是驱动版本和内核不兼容所致。

  1. 设备注册失败
[ 62.141414] [drm:nv_drm_load [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000200] Failed to allocate NvKmsKapiDevice[ 62.141947] [drm:nv_drm_register_drm_device [nvidia_drm]] *ERROR* [nvidia-drm] [GPU ID 0x00000200] Failed to register device

这意味着 NVIDIA DRM(Direct Rendering Manager)设备注册失败,无法正常分配相关资源,这和前面提到的驱动不兼容以及内核污染问题存在关联。

以上三个问题我主要是第一个,安全boot没关,第二个是要装开源的那个版本(我之前装的专有的,因为网上推荐和使用终端查询,都是告诉你别装那个开源的)

解决以上问题

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.124.04             Driver Version: 570.124.04     CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 5080        Off |   00000000:02:00.0 Off |                  N/A |
|  0%   32C    P8             12W /  360W |      15MiB /  16303MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
                                                                                         
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            1830      G   /usr/lib/xorg/Xorg                        4MiB |
+-----------------------------------------------------------------------------------------+

我的nvidia-smi也能输出了没问题了

完成上述步骤后,再次打开终端运行 nvidia-smi,查看是否能正常识别显卡设备。