跳转至内容

NVIDIA

来自 ArchWiki
(重定向自 Nvidia)

本文档涵盖了官方 NVIDIA 显卡驱动。有关社区开源驱动,请参阅 Nouveau。如果您使用的是带有混合显卡的笔记本电脑,请也参阅 NVIDIA Optimus

安装

警告 避免通过 NVIDIA 官网提供的软件包安装 NVIDIA 驱动。通过 pacman 安装可以使驱动与系统其余部分一同升级。
注意 在具有 混合显卡的系统上双启动时,启用 Windows 或第三方应用程序的节能模式(如 ASUS 节能模式)可能会完全禁用 NVIDIA 独立 GPU,使其无法被检测到。

首先,在 nouveau wiki 的代号页面上找到您显卡的系列(例如 NV110、NVC0 等),该系列对应您使用以下命令获取的模型/官方名称:

$ lspci -k -d ::03xx

然后,为您自己的显卡安装合适的驱动程序

GPU系列 驱动程序 状态
Turing (NV160/TUXXX)及更新型号 nvidia-open 用于 linux
nvidia-open-lts 用于 linux-lts
nvidia-open-dkms 用于任何内核
上游推荐
当前,支持1
Turing 上无 RTD3 电源管理2
导致一些笔记本电脑崩溃2
Maxwell (NV110/GMXXX)
Ada Lovelace (NV190/ADXXX)
nvidia-580xx-dkmsAUR 旧版,支持
Kepler (NVE0/GKXXX) nvidia-470xx-dkmsAUR 旧版,不支持3,4
Fermi (NVC0/GF1XX) nvidia-390xx-dkmsAUR
Tesla (NV50/G80-90-GT2XX) nvidia-340xx-dkmsAUR
Curie (NV40/G70) 及更早版本 已不再打包
  1. 如果这些软件包不起作用(通常是由于新硬件发布),nvidia-open-betaAUR 可能有一个更新的版本提供支持。
  2. NVIDIA 的 GSP 固件已知会导致问题,从 Turing GPU 的次优电源管理在某些包含 Ampere GPU 的笔记本电脑上完全失败。如果受到影响,请使用专有驱动(例如 nvidia-580xx-dkmsAUR)并配合 模块参数 NVreg_EnableGpuFirmware=0
  3. 在 5.18(或更高版本)的 Linux 上,由于与 间接分支跟踪的不兼容性,在具有 Intel CPU 的系统上(11 代及更新版本)可能无法正常运行。您可以通过在 引导加载程序中设置 ibt=off 内核参数来禁用它。请注意,此安全功能负责 缓解一类漏洞利用技术
  4. NVIDIA 不再积极支持这些卡,它们的驱动 可能不正式支持当前的 Xorg 版本。使用 nouveau 驱动可能更容易;但是,NVIDIA 的旧版驱动仍然可用,并且可能提供更好的 3D 性能/稳定性。

对于 32 位应用程序支持,还请从 multilib 仓库安装相应的 _lib32_ 包(例如 lib32-nvidia-utils)。

软件包 nvidia-utils 包含一个文件,该文件会在您重启后黑名单 _nouveau_ 模块。您也可以选择从 /etc/mkinitcpio.conf 中的 HOOKS 数组中移除 kms重新生成 initramfs。这将防止 initramfs 包含 _nouveau_ 模块,确保内核在早期启动时无法加载它。

注意 如果您正在使用 Wayland,在完成 #DRM 内核模式设置之前不应重启,否则可能会导致黑屏。

驱动安装完成后,请继续进行 #Xorg 配置#Wayland 配置

自定义内核

确保您的内核已启用 CONFIG_DRM_SIMPLEDRM=y,并且如果您使用 CONFIG_DEBUG_INFO_BTF,那么在 PKGBUILD 中也需要它(自内核 5.16 起)

install -Dt "$builddir/tools/bpf/resolve_btfids" tools/bpf/resolve_btfids/resolve_btfids

如果您的内核启用了 CONFIG_NOVA_CORE,则可能需要阻止新的 NVIDIA GPU 驱动 Nova 加载。nvidia-utils 默认将其添加到黑名单。您可以通过 运行 systemd-analyze 来检查这一点。如果您安装了不同版本的驱动程序,您可能需要手动 黑名单 nova_corenova_drm 模块。

DRM 内核模式设置

由于 NVIDIA 不支持 自动 KMS 延迟加载,因此需要启用 DRM(Direct Rendering Manager内核模式设置才能使 Wayland 合成器正常工作。对于双 GPU 设置,KMS 也需要用于 NVIDIA dGPU 的原生 Wayland 渲染。

nvidia-utils 560.35.03-5 开始,DRM 默认启用。[1] 对于旧版驱动,请为 nvidia_drm 模块设置 modeset=1 内核模块参数

要验证 DRM 是否已实际启用,请执行以下操作:

# cat /sys/module/nvidia_drm/parameters/modeset

现在应该返回 _Y_ 而不是 _N_。

注意 Arch 官方支持的内核会启用 simpledrm,而 NVIDIA 驱动在 nvidia_drm.fbdev 被禁用/不可用时(版本 < 545)需要 efifbvesafb

早期加载

为了基本功能,仅添加内核参数就足够了。如果您想确保它尽早加载,或者您注意到启动问题(例如 nvidia 内核模块在 显示管理器之后加载),您可以将 nvidianvidia_modesetnvidia_uvmnvidia_drm 添加到 initramfs 中。有关如何配置 initramfs 生成器的信息,请参阅 Kernel module#Early module loading。_mkinitcpio_ 用户(v40 版本之后)不需要执行手动 initramfs 重新生成,因为内置的 hook 会自动完成此操作。

硬件加速视频解码

GeForce 8 系列及更新的显卡支持使用 VDPAU 进行硬件加速视频解码。Fermi(~400 系列)及更新的显卡支持使用 NVDEC 进行硬件加速视频解码。详情请参阅 Hardware video acceleration

使用 NVENC 进行硬件加速视频编码

NVENC 需要 nvidia_uvm 模块并在 _/dev_ 下创建相关的设备节点。

最新的驱动程序包提供了一个 udev 规则,该规则会自动创建设备节点,因此无需进一步操作。

如果您使用的是旧版驱动程序(例如 nvidia-340xx-dkmsAUR),则需要创建设备节点。调用 nvidia-modprobe 工具会自动创建它们。您可以创建 /etc/udev/rules.d/70-nvidia.rules 来自动运行它。

/etc/udev/rules.d/70-nvidia.rules
ACTION=="add", DEVPATH=="/bus/pci/drivers/nvidia", RUN+="/usr/bin/nvidia-modprobe -c 0 -u"

Wayland 配置

关于 Xwayland,请参阅 Wayland#Xwayland

有关更多配置选项,请查阅相应 合成器的 wiki 页面或文档。

注意 在 555.xx 驱动版本之前,或者在使用不支持通过 _linux-drm-syncobj-v1_ 协议进行显式同步的 Wayland 合成器时,NVIDIA 驱动可能会出现主要问题,表现为在原生 Wayland 和 Xwayland 应用程序中出现闪烁、帧序错乱等问题。

基本支持

对于 nvidia_drm 模块,有两个内核参数需要考虑:modesetfbdev。当使用 nvidia-utils 软件包时,这两个参数 默认启用。NVIDIA 还 计划在未来的版本中默认启用它们

modeset

启用 modeset 对于所有 Wayland 配置的正常运行都是必需的。

对于需要手动启用 modeset 的不受支持的驱动程序,请参阅 #DRM 内核模式设置,有关更多信息,请参阅 Wayland#Requirements

fbdev

对于不再受支持的旧版驱动程序,启用 fbdev 可能对某些 Wayland 配置是必需的。

它在 Linux 6.11 及更高版本上是硬性要求,但目前尚不清楚这是预期行为还是错误,有关详细信息,请参阅 [2]

可以以与 modesetting 参数相同的方式设置它,区别在于执行

# cat /sys/module/nvidia_drm/parameters/fbdev

如果根本没有设置,将返回一个文件不存在的错误,而不是 _N_。

挂起支持

与 X 相比,Wayland 挂起可能比 X 更容易受到默认设置的影响,有关详细信息,请参阅 /Tips and tricks#Preserve video memory after suspend

如果您使用 GDM,也请参阅 GDM#Wayland and the proprietary NVIDIA driver

nvidia-application-profiles-rc.d

如果未将 GLVidHeapReuseRatio 应用程序配置文件键 应用于其进程名称,那么一些 Wayland 合成器将默认消耗大量 VRAM。例如,niri 用户可以使用以下方法释放高达约 2.5GiB 的空闲 VRAM 消耗:

/etc/nvidia/nvidia-application-profiles-rc.d/50-limit-free-buffer-pool-in-wayland-compositors.json
{
    "rules": [
        {
            "pattern": {
                "feature": "procname",
                "matches": "niri"
            },
            "profile": "Limit free buffer pool on Wayland compositors"
        }
    ],
    "profiles": [
        {
            "name": "Limit free buffer pool on Wayland compositors",
            "settings": [
                {
                    "key": "GLVidHeapReuseRatio",
                    "value": 0
                }
            ]
        }
    ]
}

Xorg配置

专有的 NVIDIA 显卡驱动程序不需要任何 Xorg 服务器配置文件。您可以 启动 X 来查看 Xorg 服务器是否能在没有配置文件的情况下正常运行。但是,为了调整各种设置,可能需要创建一个配置文件(优选 /etc/X11/xorg.conf.d/20-nvidia.conf 而不是 /etc/X11/xorg.conf)。此配置可以由 NVIDIA Xorg 配置工具生成,也可以手动创建。如果手动创建,它可以是最小化配置(在这种意义上,它只会将基本选项传递给 Xorg 服务器),或者它可以包含许多可以绕过 Xorg 自动检测或预配置选项的设置。

提示 有关更多配置选项,请参阅 NVIDIA/Troubleshooting

自动配置

NVIDIA 软件包包含一个自动配置工具,用于创建 Xorg 服务器配置文件(xorg.conf),可以通过以下方式运行:

# nvidia-xconfig

此命令将根据现有硬件自动检测并创建(或编辑,如果已存在)/etc/X11/xorg.conf 配置。

仔细检查您的 /etc/X11/xorg.conf,确保您的默认深度、水平同步、垂直刷新率和分辨率都可以接受。

nvidia-settings

nvidia-settings 工具允许您通过 CLI 或 GUI 配置许多选项。运行 nvidia-settings 时不带任何选项会启动 GUI,有关 CLI 选项,请参阅 nvidia-settings(1)

您可以以非 root 用户运行 CLI/GUI,并通过“nvidia-settings 配置”选项卡下的“保存当前配置”将设置保存到 ~/.nvidia-settings-rc

要为当前用户加载 ~/.nvidia-settings-rc

$ nvidia-settings --load-config-only

请参阅 Autostarting 以便每次启动时运行此命令。

注意 保存 nvidia-settings 更改后,Xorg 可能无法启动或在启动时崩溃。调整或删除生成的 ~/.nvidia-settings-rc 和/或 Xorg 文件应该可以恢复正常启动。

手动配置

通过编辑配置文件可以进行一些调整(这些调整无法 自动 或使用 nvidia-settings 进行)。在应用任何更改之前,需要重新启动 Xorg 服务器。

有关其他详细信息和选项,请参阅 NVIDIA 驱动的 README 和安装指南

最小化配置

20-nvidia.conf(或已弃用的 xorg.conf)中的基本配置块如下所示:

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
        Identifier "NVIDIA Card"
        Driver "nvidia"
        VendorName "NVIDIA Corporation"
        BoardName "GeForce GTX 1050 Ti"
EndSection

禁用启动时的 Logo

如果您使用的是旧版驱动程序(nvidia-340xx-dkmsAUR),您可能想禁用 X 启动时显示的 NVIDIA Logo 启动画面。在 Device 部分添加 "NoLogo" 选项:

Option "NoLogo" "1"

覆盖显示器检测

Device 部分的 "ConnectedMonitor" 选项允许在 X 服务器启动时覆盖显示器检测,这可以大大节省启动时间。可用选项为:"CRT" 用于模拟连接,"DFP" 用于数字显示器,"TV" 用于电视。

以下语句强制 NVIDIA 驱动绕过启动检查并将显示器识别为 DFP:

Option "ConnectedMonitor" "DFP"
注意 对于所有 15 针 VGA 模拟连接,请使用“CRT”,即使显示器是平板显示器。“DFP”仅用于 DVI、HDMI 或 DisplayPort 数字连接。

启用亮度控制

本文或本章节已过时。

原因:可能已过时[3],上游软件包似乎也很陈旧。(在 Talk:NVIDIA 中讨论)

添加到内核参数

nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1

或者,在 Device 部分添加以下内容:

Option "RegistryDwords" "EnableBrightnessControl=1"

如果使用此选项后亮度控制仍不起作用,请尝试安装 nvidia-bl-dkmsAUR

注意 安装 nvidia-bl-dkmsAUR 将提供一个用于背光亮度控制的 /sys/class/backlight/nvidia_backlight/ 接口,但您的系统可能继续在 /sys/class/backlight/acpi_video0/ 上发出背光控制更改。在这种情况下,一种解决方案是使用 _inotifywait_ 监视 acpi_video0/brightness 等的变化,然后相应地将其转换为并写入 nvidia_backlight/brightness。请参阅 Backlight#sysfs modified but no brightness change

启用 SLI

本文或本章节已过时。

原因:从 455.23.04 版本开始,不再支持某些 SLI 模式。(在 Talk:NVIDIA 中讨论)
警告 自 GTX 10xx 系列(1080、1070、1060 等)起,仅支持 2 路 SLI。3 路和 4 路 SLI 可能适用于 CUDA/OpenCL 应用程序,但很可能会破坏所有 OpenGL 应用程序。

摘自 NVIDIA 驱动程序的 README 附录 B:此选项控制支持配置中的 SLI 渲染配置。 “支持的配置”是配备了 SLI 认证主板和 2 或 3 个 SLI 认证 GeForce GPU 的计算机。

使用 lspci 找到第一个 GPU 的 PCI 总线 ID

# lspci -d ::03xx
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller (rev 09)
03:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
08:00.0 3D controller: NVIDIA Corporation GM108GLM [Quadro K620M / Quadro M500M] (rev a2)

Device 部分添加总线 ID(上例中的 3)

BusID "PCI:3:0:0"
注意 格式很重要。BusID 值必须指定为 "PCI:<BusID>:0:0"

Screen 部分添加所需的 SLI 渲染模式值

Option "SLI" "AA"

下表列出了可用的渲染模式。

行为
0, no, off, false, Single 渲染时仅使用一个 GPU。
1, yes, on, true, Auto 启用 SLI 并允许驱动程序自动选择合适的渲染模式。
AFR 启用 SLI 并使用交替帧渲染模式。
SFR 启用 SLI 并使用分割帧渲染模式。
AA 启用 SLI 并使用 SLI 抗锯齿。将其与全场景抗锯齿结合使用以提高视觉质量。

或者,您也可以使用 nvidia-xconfig 工具通过一个命令将这些更改插入 xorg.conf

# nvidia-xconfig --busid=PCI:3:0:0 --sli=AA

要从 shell 验证 SLI 模式是否已启用

$ nvidia-settings -q all | grep SLIMode
  Attribute 'SLIMode' (arch:0.0): AA
    'SLIMode' is a string attribute.
    'SLIMode' is a read-only attribute.
    'SLIMode' can use the following target types: X Screen.
警告 启用 SLI 后,启动 xorg 时您的系统可能会冻结/无响应。建议在重启前禁用您的显示管理器。

如果此配置不起作用,您可能需要使用 nvidia-settings 提供的 PCI 总线 ID,

$ nvidia-settings -q all | grep -i pcibus
Attribute 'PCIBus' (host:0[gpu:0]): 101.
  'PCIBus' is an integer attribute.
  'PCIBus' is a read-only attribute.
  'PCIBus' can use the following target types: GPU, SDI Input Device.
Attribute 'PCIBus' (host:0[gpu:1]): 23.
  'PCIBus' is an integer attribute.
  'PCIBus' is a read-only attribute.
  'PCIBus' can use the following target types: GPU, SDI Input Device.

并在 xorg.d 配置中注释掉 PrimaryGPU 选项,

/usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
...

Section "OutputClass"
...
    # Option "PrimaryGPU" "yes"
...

使用此配置也可能解决任何图形启动问题。

多显示器

有关更通用的信息,请参阅 Multihead

使用 nvidia-settings

nvidia-settings 工具可以配置多个显示器。

对于 CLI 配置,首先通过运行以下命令获取 CurrentMetaMode

$ nvidia-settings -q CurrentMetaMode
Attribute 'CurrentMetaMode' (hostnmae:0.0): id=50, switchable=no, source=nv-control :: DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0}

:: 之后的所有内容(在本例中为:DPY-1: 2880x1620 @2880x1620 +0+0 {ViewPortIn=2880x1620, ViewPortOut=2880x1620+0+0})保存下来,并使用 nvidia-settings --assign "CurrentMetaMode=your_meta_mode" 来重新配置您的显示器。

提示 您可以为使用的不同显示器和分辨率配置创建 shell 别名。

ConnectedMonitor

本文或本章节已过时。

原因:Option "TwinView" 在 302.07 中已被移除,且 TwinView 始终启用,此配置需要重写。(在 Talk:NVIDIA 中讨论)

如果驱动程序未正确检测到第二个显示器,您可以使用 ConnectedMonitor 强制它这样做。

/etc/X11/xorg.conf
Section "Monitor"
    Identifier     "Monitor1"
    VendorName     "Panasonic"
    ModelName      "Panasonic MICRON 2100Ex"
    HorizSync       30.0 - 121.0 # this monitor has incorrect EDID, hence Option "UseEDIDFreqs" "false"
    VertRefresh     50.0 - 160.0
    Option         "DPMS"
EndSection

Section "Monitor"
    Identifier     "Monitor2"
    VendorName     "Gateway"
    ModelName      "GatewayVX1120"
    HorizSync       30.0 - 121.0
    VertRefresh     50.0 - 160.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    Option         "NoLogo"
    Option         "UseEDIDFreqs" "false"
    Option         "ConnectedMonitor" "CRT,CRT"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 6200 LE"
    BusID          "PCI:3:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device2"
    Driver         "nvidia"
    Option         "NoLogo"
    Option         "UseEDIDFreqs" "false"
    Option         "ConnectedMonitor" "CRT,CRT"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 6200 LE"
    BusID          "PCI:3:0:0"
    Screen          1
EndSection

重复的 Screen 设备是如何让 X 在单卡上使用两个显示器而无需 TwinView 的。请注意,nvidia-settings 会删除您添加的任何 ConnectedMonitor 选项。

TwinView

本文或本章节已过时。

原因:Option "TwinView" 在 302.07 中已被移除,且 TwinView 始终启用。(在 Talk:NVIDIA 中讨论)

您想要一个大屏幕而不是两个。将 TwinView 参数设置为 1。如果您希望进行合成,则应使用此选项。TwinView 仅在每张卡上工作,并且所有参与的显示器都连接到同一张卡。

Option "TwinView" "1"

示例配置

/etc/X11/xorg.conf.d/10-monitor.conf
Section "ServerLayout"
    Identifier     "TwinLayout"
    Screen         0 "metaScreen" 0 0
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    Option         "Enable" "true"
EndSection

Section "Monitor"
    Identifier     "Monitor1"
    Option         "Enable" "true"
EndSection

Section "Device"
    Identifier     "Card0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"

    #refer to the link below for more information on each of the following options.
    Option         "HorizSync"          "DFP-0: 28-33; DFP-1: 28-33"
    Option         "VertRefresh"        "DFP-0: 43-73; DFP-1: 43-73"
    Option         "MetaModes"          "1920x1080, 1920x1080"
    Option         "ConnectedMonitor"   "DFP-0, DFP-1"
    Option         "MetaModeOrientation" "DFP-1 LeftOf DFP-0"
EndSection

Section "Screen"
    Identifier     "metaScreen"
    Device         "Card0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "True"
    SubSection "Display"
        Modes          "1920x1080"
    EndSubSection
EndSection

设备选项信息.

如果您有多张支持 SLI 的显卡,可以运行连接到不同显卡上的多个显示器(例如:两张 SLI 卡,每张卡连接一个显示器)。“MetaModes”选项与 SLI Mosaic 模式结合使用可实现此功能。下面是一个适用于上述示例的配置,并且可以完美运行 GNOME

/etc/X11/xorg.conf.d/10-monitor.conf
Section "Device"
        Identifier      "Card A"
        Driver          "nvidia"
        BusID           "PCI:1:00:0"
EndSection

Section "Device"
        Identifier      "Card B"
        Driver          "nvidia"
        BusID           "PCI:2:00:0"
EndSection

Section "Monitor"
        Identifier      "Right Monitor"
EndSection

Section "Monitor"
        Identifier      "Left Monitor"
EndSection

Section "Screen"
        Identifier      "Right Screen"
        Device          "Card A"
        Monitor         "Right Monitor"
        DefaultDepth    24
        Option          "SLI" "Mosaic"
        Option          "Stereo" "0"
        Option          "BaseMosaic" "True"
        Option          "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"
        SubSection      "Display"
                        Depth           24
        EndSubSection
EndSection

Section "Screen"
        Identifier      "Left Screen"
        Device          "Card B"
        Monitor         "Left Monitor"
        DefaultDepth    24
        Option          "SLI" "Mosaic"
        Option          "Stereo" "0"
        Option          "BaseMosaic" "True"
        Option          "MetaModes" "GPU-0.DFP-0: 1920x1200+4480+0, GPU-1.DFP-0:1920x1200+0+0"
        SubSection      "Display"
                        Depth           24
        EndSubSection
EndSection

Section "ServerLayout"
        Identifier      "Default"
        Screen 0        "Right Screen" 0 0
        Option          "Xinerama" "0"
EndSection
使用 TwinView 进行垂直同步

如果您正在使用 TwinView 和垂直同步(nvidia-settings 中的 _Sync to VBlank_ 选项),您会注意到只有一个屏幕被正确同步,除非您有两个相同的显示器。尽管 nvidia-settings 提供了一个更改哪个屏幕被同步的选项(_Sync to this display device_ 选项),但这并不总是有效。一种解决方案是在启动时添加以下环境变量,例如追加到 /etc/profile

export __GL_SYNC_TO_VBLANK=1
export __GL_SYNC_DISPLAY_DEVICE=DFP-0
export VDPAU_NVIDIA_SYNC_DISPLAY_DEVICE=DFP-0

您可以将 DFP-0 替换为您首选的屏幕(DFP-0 是 DVI 端口,CRT-0 是 VGA 端口)。您可以在 nvidia-settings 的 _X Server XVideoSettings_ 部分找到您显示器的标识符。

使用 TwinView 进行游戏

如果您想在 TwinView 下玩全屏游戏,您会发现游戏将两个屏幕识别为一个大屏幕。虽然这在技术上是正确的(虚拟 X 屏幕确实是屏幕组合的总大小),但您可能不想同时在两个屏幕上玩游戏。

要为 SDL 1.2 纠正此行为,请尝试:

export SDL_VIDEO_FULLSCREEN_HEAD=1

对于 OpenGL,请在 Device 部分将合适的 Metamodes 添加到您的 xorg.conf 中,然后重启 X:

Option "Metamodes" "1680x1050,1680x1050; 1280x1024,1280x1024; 1680x1050,NULL; 1280x1024,NULL;"

另一种可能单独工作或与上述方法结合使用的方法是 在单独的 X 服务器中启动游戏

Mosaic 模式

Mosaic 模式是在使用合成器时跨多个显卡使用超过 2 个显示器的唯一方法。您的窗口管理器可能识别也可能不识别每个显示器之间的区别。Mosaic 模式需要有效的 SLI 配置。即使在使用没有 SLI 的 Base 模式时,GPU 仍必须是 SLI 兼容/可兼容的。

Base Mosaic

Base Mosaic 模式适用于任何 Geforce 8000 系列或更高版本的 GPU 组合。无法从 nvidia-setting GUI 中启用它。您必须使用 nvidia-xconfig 命令行程序或手动编辑 xorg.conf。必须指定 Metamodes。以下是四个 DFP 在 2x2 配置中,每个运行在 1920x1024,并且两个 DFP 连接到两张显卡的示例:

# nvidia-xconfig --base-mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"
注意 虽然文档列出了 2x2 的显示器配置,但 GeForce 卡在 Base Mosaic 模式下被人为限制为 3 个显示器。Quadro 卡支持超过 3 个显示器。截至 2014 年 9 月,Windows 驱动程序已取消此人为限制,但 Linux 驱动程序仍然存在。
SLI Mosaic

如果您有 SLI 配置,并且每个 GPU 都是 Quadro FX 5800、Quadro Fermi 或更新版本,那么您可以使用 SLI Mosaic 模式。可以从 nvidia-settings GUI 中或使用命令行启用:

# nvidia-xconfig --sli=Mosaic --metamodes="GPU-0.DFP-0: 1920x1024+0+0, GPU-0.DFP-1: 1920x1024+1920+0, GPU-1.DFP-0: 1920x1024+0+1024, GPU-1.DFP-1: 1920x1024+1920+1024"

NVswitch

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:需要进行多项小修复,有关 fabric manager 的说明应制作为 AUR 包。(在 Talk:NVIDIA 中讨论)

对于具有 NVswitch 的系统,例如 AWS 上的 H100x8,需要以下操作。

  • 安装 nvidia-fabricmanager
  • 安装 fabric manager 所需的匹配内核模块

安装 fabricmanager 后,pytorch 会报告找不到 GPU。

安装 fabric manager

  1. 从 NVIDIA 下载 tarball。在此处
  2. 版本 555.42.02 工作良好
  3. 修改 sbin/fm_run_package_installer.sh 中的安装脚本以修复安装的文件路径

获取匹配的内核驱动

  1. git clone AUR 中用于 nvidia-beta-dkms 和 nvidia-utils-beta 的包
  2. 将 PKGBUILD 修改为使用版本 555.42.02
  3. 构建并安装它们
  4. 重启

最后,启用 systemctl enable nvidia-fabricmanager 并启动 systemctl start nvidia-fabricmanager,然后 pytorch 应该可以工作。

技巧与提示

请参阅 NVIDIA/Tips and tricks

故障排除

请参阅 NVIDIA/Troubleshooting

参见