NVIDIA
本文档涵盖了官方 NVIDIA 显卡驱动。有关社区开源驱动,请参阅 Nouveau。如果您使用的是带有混合显卡的笔记本电脑,请也参阅 NVIDIA Optimus。
安装
首先,在 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) 及更早版本 | 已不再打包 |
- 如果这些软件包不起作用(通常是由于新硬件发布),nvidia-open-betaAUR 可能有一个更新的版本提供支持。
- NVIDIA 的 GSP 固件已知会导致问题,从 Turing GPU 的次优电源管理到 在某些包含 Ampere GPU 的笔记本电脑上完全失败。如果受到影响,请使用专有驱动(例如 nvidia-580xx-dkmsAUR)并配合 模块参数
NVreg_EnableGpuFirmware=0。 - 在 5.18(或更高版本)的 Linux 上,由于与 间接分支跟踪的不兼容性,在具有 Intel CPU 的系统上(11 代及更新版本)可能无法正常运行。您可以通过在 引导加载程序中设置
ibt=off内核参数来禁用它。请注意,此安全功能负责 缓解一类漏洞利用技术。 - NVIDIA 不再积极支持这些卡,它们的驱动 可能不正式支持当前的 Xorg 版本。使用 nouveau 驱动可能更容易;但是,NVIDIA 的旧版驱动仍然可用,并且可能提供更好的 3D 性能/稳定性。
- 注
- 安装 dkms 时,请阅读 Dynamic Kernel Module Support#Installation。
- DKMS 变体不与特定内核绑定,因为它们会为已安装了头文件信息的每个内核重新编译 NVIDIA 内核模块。
对于 32 位应用程序支持,还请从 multilib 仓库安装相应的 _lib32_ 包(例如 lib32-nvidia-utils)。
软件包 nvidia-utils 包含一个文件,该文件会在您重启后黑名单 _nouveau_ 模块。您也可以选择从 /etc/mkinitcpio.conf 中的 HOOKS 数组中移除 kms 并 重新生成 initramfs。这将防止 initramfs 包含 _nouveau_ 模块,确保内核在早期启动时无法加载它。
驱动安装完成后,请继续进行 #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 合成器正常工作。对于双 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_。
早期加载
为了基本功能,仅添加内核参数就足够了。如果您想确保它尽早加载,或者您注意到启动问题(例如 nvidia 内核模块在 显示管理器之后加载),您可以将 nvidia、nvidia_modeset、nvidia_uvm 和 nvidia_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 页面或文档。
基本支持
对于 nvidia_drm 模块,有两个内核参数需要考虑:modeset 和 fbdev。当使用 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 软件包包含一个自动配置工具,用于创建 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 驱动的 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"
启用亮度控制
添加到内核参数
nvidia.NVreg_RegistryDwords=EnableBrightnessControl=1
或者,在 Device 部分添加以下内容:
Option "RegistryDwords" "EnableBrightnessControl=1"
如果使用此选项后亮度控制仍不起作用,请尝试安装 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
摘自 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"
"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.
如果此配置不起作用,您可能需要使用 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" 来重新配置您的显示器。
ConnectedMonitor
如果驱动程序未正确检测到第二个显示器,您可以使用 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
您想要一个大屏幕而不是两个。将 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"
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
对于具有 NVswitch 的系统,例如 AWS 上的 H100x8,需要以下操作。
- 安装 nvidia-fabricmanager
- 安装 fabric manager 所需的匹配内核模块
安装 fabricmanager 后,pytorch 会报告找不到 GPU。
安装 fabric manager
- 从 NVIDIA 下载 tarball。在此处
- 版本 555.42.02 工作良好
- 修改 sbin/fm_run_package_installer.sh 中的安装脚本以修复安装的文件路径
获取匹配的内核驱动
- git clone AUR 中用于 nvidia-beta-dkms 和 nvidia-utils-beta 的包
- 将 PKGBUILD 修改为使用版本 555.42.02
- 构建并安装它们
- 重启
最后,启用 systemctl enable nvidia-fabricmanager 并启动 systemctl start nvidia-fabricmanager,然后 pytorch 应该可以工作。