跳转至内容

NVIDIA

来自 ArchWiki

本文档介绍官方 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)并带有 模块参数 NV_EnableGpuFirmware=0
  3. 在 Linux 5.18(或更高版本)上,对于带有 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_core` 和 `nova_drm` 模块加入黑名单。

DRM 内核模式设置

由于 NVIDIA 不支持自动 KMS 延迟加载,启用 DRM(Direct Rendering Manager内核模式设置是使 Wayland 合成器正常工作的必要条件。KMS 也对于双 GPU 设置中 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)需要 `efifb` 或 `vesafb`。

早期加载

对于基本功能,只需添加内核参数即可。如果您想确保它尽可能早地加载,或者您注意到启动问题(例如 `nvidia` 内核模块在 显示管理器之后加载),您可以将 `nvidia`、`nvidia_modeset`、`nvidia_uvm` 和 `nvidia_drm` 添加到 initramfs 中。请参阅 Kernel module#Early module loading 了解如何配置您的 initramfs 生成器。mkinitcpio 用户(v40 版本之后)不需要执行手动 initramfs 重新生成,因为内置钩子将自动完成此操作。

硬件加速视频解码

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` 模块,有两个内核参数需要考虑:`modeset` 和 `fbdev`。在使用 nvidia-utils 软件包时,两者默认启用。NVIDIA 还计划在未来的版本中默认启用它们

modeset

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

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

fbdev

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

对于 Linux 6.11 及更高版本,它是一个硬性要求,但目前尚不清楚这是预期行为还是 bug,有关更多详细信息,请参阅 [2]

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

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

如果根本没有设置,将返回文件丢失的错误,而不是 `N`。

挂起支持

与 X 相比,Wayland 挂起可能更容易受到默认设置的影响,有关详细信息,请参阅 /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 Accelerated Linux Graphics Driver README and Installation Guide

最小化配置

在 `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* 监视 `/sys/class/backlight/acpi_video0/brightness` 等文件上的更改,并相应地翻译并写入 `/sys/class/backlight/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

本文或本章节已过时。

原因: 302.07 版本移除了 `Option "TwinView"`,并且 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` 的重复设备是如何在不使用 `TwinView` 的情况下让 X 使用两个显示器的。请注意 `nvidia-settings` 会删除您添加的任何 `ConnectedMonitor` 选项。

TwinView

本文或本章节已过时。

原因: 302.07 版本移除了 `Option "TwinView"`,并且 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,在 xorg.conf 的 `Device` 部分添加适当的 Metamodes 并重启 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 配置下的示例,每个 DFP 运行在 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

参见