Ubuntu 22.04,无法使用外部 nvidia GPU 来渲染应用程序,在具有集成 + 专用 nvidia GPU 的笔记本电脑上

Ubuntu 22.04,无法使用外部 nvidia GPU 来渲染应用程序,在具有集成 + 专用 nvidia GPU 的笔记本电脑上

我有一台运行 Ubuntu 22.04 的笔记本电脑,里面有英特尔高清显卡和独立 nvidia(Quadro M2000M)卡,我正在尝试使用外部 GPU 设置(RTX 3060),但是我找不到如何配置我的系统以允许选择 eGPU 设置来启动应用程序:使用switcherooctl launch__GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1选择不同的卡将始终导致系统使用专用的 M2000M 而不是外部 RTX 3060。

我也尝试过使用 egpu-switcher 工具,但是任何在 /etc/X11/ 中创建 xorg.conf 文件的解决方案都会阻止操作系统加载 X,直到删除该 xorg.conf 文件。

lspci |grep VGA正确检测卡

00:02.0 VGA compatible controller: Intel Corporation HD Graphics 530 (rev 06)
01:00.0 VGA compatible controller: NVIDIA Corporation GM107GLM [Quadro M2000M] (rev a2)
0a:00.0 VGA compatible controller: NVIDIA Corporation GA106 [GeForce RTX 3060 Lite Hash Rate] (rev a1)

nvidia-smi -l 1也能正确显示卡片

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.73.05    Driver Version: 510.73.05    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| 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  Quadro M2000M       Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   44C    P8    N/A /  N/A |    259MiB /  4096MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce ...  Off  | 00000000:0A:00.0 Off |                  N/A |
|  0%   44C    P8    18W / 170W |      1MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

与 switcherooctl 的结果类似

Device: 0
  Name:        Intel® HD Graphics 530
  Default:     yes
  Environment: DRI_PRIME=pci-0000_00_02_0

Device: 1
  Name:        NVIDIA Corporation GM107GLM [Quadro M2000M]
  Default:     no
  Environment: __GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1

Device: 2
  Name:        NVIDIA Corporation GA106 [GeForce RTX 3060 Lite Hash Rate]
  Default:     no
  Environment: __GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1

但是,例如运行switcherooctl launch -g 2 glxgears将在专用 gpu 上运行命令,而不是在外部 gpu 上运行命令。

我还可以成功地使用外部卡作为搅拌机上的渲染设备,但无法用它运行任何其他应用程序。

有人找到了配置系统以便能够使用外部 GPU 来运行应用程序的方法吗?

答案1

我花了很长时间才找到解决方案,但实际上几乎不需要花费什么力气:

我必须修改 /usr/share/X11/xorg.conf.d/10-nvidia.conf 以添加

Option "AllowExternalGpus" "true"

这样它看起来就像这样:

Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
    Driver "nvidia"
    Option "AllowEmptyInitialConfiguration"
    Option "AllowExternalGpus" "true"
    ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection

重新启动后,该设备将出现在 nvidia x 服务器设置实用程序中,并且在xrandr --listproviders

Providers: number : 3
Provider 0: id: 0x42 cap: 0x9, Source Output, Sink Offload crtcs: 3 outputs: 1 associated providers: 2 name:modesetting
Provider 1: id: 0x41f cap: 0x2, Sink Output crtcs: 4 outputs: 7 associated providers: 1 name:NVIDIA-G1
Provider 2: id: 0x29d cap: 0x2, Sink Output crtcs: 4 outputs: 6 associated providers: 1 name:NVIDIA-G0

尽管 switcherooctl 仍然无法指定 gpu,但可以通过指定卸载提供程序手动执行此操作:

__NV_PRIME_RENDER_OFFLOAD=1 __NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears

...其中 NVIDIA-G1 被您希望使用的 GPU 的名称替换。

希望这对未来的 egpu 信息清道夫有用。

相关内容