206. Linux中显卡相关

Tips:

  1. 请在 bash Shell上执行以下命令, zsh 可能达不到预期结果

安装

安装步骤

  1. 添加源

    如果需要安装新版本的驱动可以先添加源:

    1
    2
    sudo add-apt-repository ppa:graphics-drivers/ppa
    sudo apt update
  2. 禁用开源驱动nouveau

    前面提到,Ubuntu默认是使用开源驱动nouveau的。因此在安装NVIDIA驱动前需要禁用nouveau,方法如下:

    1. 连续执行以下两条命令

      1
      2
      sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
      sudo bash -c "echo options nouveau modeset=0 >> /etc/modprobe.d/blacklist-nvidia-nouveau.conf"

      这两条命令将在文件/etc/modprobe.d/blacklist-nvidia-nouveau.conf中写入禁用nouveau的配置,当然也可以直接找到这个文件用编辑器(vim或者gedit)把配置写进去。

    2. 然后可以执行以下命令验证以上的指令输入到/etc/modprobe.d/blacklist-nvidia-nouveau.conf这个文件中:

      1
      cat /etc/modprobe.d/blacklist-nvidia-nouveau.conf

      如果显示以下信息就表示已经成功禁用了:

      1
      2
      blacklist nouveau
      options nouveau modeset=0
  3. 执行 ubuntu-drivers devices, 如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
    modalias : pci:v000010DEd00001C8Csv00001028sd00000798bc03sc00i00
    vendor : NVIDIA Corporation
    model : GP107M [GeForce GTX 1050 Ti Mobile]
    driver : nvidia-driver-390 - third-party free
    driver : nvidia-driver-430 - distro non-free
    driver : nvidia-driver-415 - third-party free
    driver : nvidia-driver-435 - distro non-free
    driver : nvidia-driver-440 - third-party free recommended
    driver : nvidia-driver-410 - third-party free
    driver : xserver-xorg-video-nouveau - distro free builtin
  4. 选择 recommended (推荐的) 安装

    1
    sudo apt install -y alsa nvidia-driver-440
  5. 可使用下面命令,查看是否安装成

    • lshw -numeric -C display

      输出:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      WARNING: you should run this program as super-user.
      *-display
      description: VGA compatible controller
      product: GP107M [GeForce GTX 1050 Ti Mobile] [10DE:1C8C]
      vendor: NVIDIA Corporation [10DE]
      physical id: 0
      bus info: pci@0000:01:00.0
      version: a1
      width: 64 bits
      clock: 33MHz
      capabilities: vga_controller bus_master cap_list rom
      configuration: driver=nvidia latency=0
      resources: irq:128 memory:de000000-deffffff memory:c0000000-cfffffff memory:d0000000-d1ffffff ioport:e000(size=128) memory:df000000-df07ffff
      *-display
      description: VGA compatible controller
      product: Intel Corporation [8086:591B]
      vendor: Intel Corporation [8086]
      physical id: 2
      bus info: pci@0000:00:02.0
      version: 04
      width: 64 bits
      clock: 33MHz
      capabilities: vga_controller bus_master cap_list rom
      configuration: driver=i915 latency=0
      resources: irq:127 memory:dd000000-ddffffff memory:b0000000-bfffffff ioport:f000(size=64) memory:c0000-dffff
      WARNING: output may be incomplete or inaccurate, you should run this program as super-user.
    • lspci -vnn | grep VGA

      输出:

      1
      2
      00:02.0 VGA compatible controller [0300]: Intel Corporation Device [8086:591b] (rev 04) (prog-if 00 [VGA controller])
      01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107M [GeFor

手动安装

使用官方的 NVIDIA 驱动进行手动安装

下载 NVIDIA 官方驱动,https://www.nvidia.cn/Download/index.aspx?lang=cn

停止可视化桌面:sudo telinit 3

在相应路径下安装 NVIDIA 驱动:

1
$ sudo bash ./NVIDIA-Linux-x86_64-440.31.run

按提示安装即可,重启完成!

QAs

Failed to initialize NVML: Driver/library version mismatch

问题描述

用户执行nvidia-smi命令时遇到报错:Failed to initialize NVML: Driver/library version mismatch。

可能原因

  1. 用户在升级或者降级NVIDIA驱动时如果未按照升级或降级NVIDIA驱动进行操作,导致之前加载的旧的驱动未卸载干净,并与新的驱动冲突,引发驱动未正常加载。

  2. NVIDIA驱动库版本与系统内核模块不一致。要修复此问题,我们只需删除当前的 nvidia 驱动程序并重新安装正确的 NVIDIA 驱动程序版本即可。我们可以参考以下步骤来修复这个错误。

解决方案

方案1

  1. 步骤1:检查内核版本

    使用命令行查询当前显卡驱动使用的内核版本

    1
    2
    3
    $ cat /proc/driver/nvidia/version
    NVRM version: NVIDIA UNIX x86_64 Kernel Module 535.129.03 Thu Oct 19 18:56:32 UTC 2023
    GCC version: gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

    NVRM版本内核模块为535.129.03,系统内核为22.04。

  2. 步骤2:删除 Nvidia 驱动程序

让我们清除包括 nvidia-common 在内的所有 NVIDIA 软件包,运行以下命令。

1
2
$ sudo apt purge nvidia-* 
$ sudo apt purge libnvidia-*

如果相关包已被清除,则以下命令的输出将为空。

1
$ dpkg -l | grep -i nvidia
  1. 步骤3:查找可用的驱动程序版本

    我们可以使用Ubuntu自带的驱动管理工具ubuntu-drivers devices来查询当前版本Ubuntu推荐的驱动。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ ubuntu-drivers devices
    == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:08.0/0000:03:00.0 ==
    modalias : pci:v000010DEd000013BBsv000010DEsd00001098bc03sc00i00
    vendor : NVIDIA Corporation
    model : GM107GL [Quadro K620]
    driver : nvidia-driver-535 - distro non-free recommended
    driver : nvidia-driver-450-server - distro non-free
    driver : nvidia-driver-390 - distro non-free
    driver : nvidia-driver-525 - distro non-free
    driver : nvidia-driver-525-server - distro non-free
    driver : nvidia-driver-470-server - distro non-free
    driver : nvidia-driver-470 - distro non-free
    driver : nvidia-driver-535-server - distro non-free
    driver : nvidia-driver-418-server - distro non-free
    driver : xserver-xorg-video-nouveau - distro free builtin

    输出结果如上,有一行出现了“recommended”,说明系统推荐了这个驱动,即nvidia-driver-535。

  2. 步骤 4:重新安装正确的驱动程序

    要安装推荐的驱动程序,请运行以下命令。

    1
    $ sudo apt install nvidia-driver-535

    另外,您还可以执行以下命令来自动安装推荐版本的驱动程序。此时,机器上会自动安装上述推荐版本的驱动程序。

    1
    $ sudo ubuntu-drivers autoinstall
  3. 步骤5:重新启动系统

    重新启动计算机以使更改生效。

    1
    $ sudo reboot
  4. 步骤6:验证问题是否已修复

    最后,在我们重新启动机器后,请输入以下命令测试驱动安装。如下图所示,可以看到推荐版本的驱动安装成功。

    1
    $ nvidia-smi

方案2 (没试过)

此问题原因是NVIDIA 内核驱动版本与系统驱动不一致,可参考以下步骤解决。

  1. 查看内核加载了哪些涉及GPU的模块。

    1
    lsmod | grep nvidia
  2. 查看下有哪些进程使用了 nvidia*。

    1
    sudo lsof -n -w /dev/nvidia*
  3. 卸载对应的GPU在内核中的模块或者启动的进程。

    1
    2
    3
    4
    5
    6
    7
    rmmod nvidia_drm

    rmmod nvidia_modeset

    rmmod nvidia

    kill -9 xxx
  4. 重启nvidia-smi。

    1
    nvidia-smi

connection timed out Could not connect to ppa.launchpad.net:80

When I experience this (occasionally with no network changes), I find that using apt-get instead of apt works.