强制图形在特定 GPU 上运行

强制图形在特定 GPU 上运行

我的电脑有 1 个集成显卡和 2 个 Nvidia RTX 3070 GPU。我正在使用 Ubuntu 20.04 和nvidia-driver-530.

lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation AlderLake-S GT1 (rev 0c)
01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070 Lite Hash Rate] (rev a1)
05:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070 Lite Hash Rate] (rev a1)

我目前正在尝试使用 Phoronix 测试套件测试我的 3070 显卡。

我正在使用nvidia-primeprime-select: on-demand在 Nvidia 3070 上的 intel iGPU 和 phoronix 测试上运行终端:prime-run phoronix-test-suite run unigine-heaven

开始工作时遇到了一些问题nvidia-prime,因此我遵循了本文中的建议:https://askubuntu.com/questions/1364762/prime-run-command-not-found

cat /usr/bin/prime-run
#!/bin/bash
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia
export __VK_LAYER_NV_optimus=NVIDIA_only
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json
exec "$@"

通过使用,prime-run我能够成功地在具有总线 id 01:00.0/的 GPU 0 上运行 phoronix 测试套件PCI:1:0:0

05:00.0但是,我似乎无法使用具有总线 id /的 GPU 1 运行任何测试PCI:5:0:0

/etc/X11/xorg.conf按照以下链接的建议,通过更改总线号并重新启动进行修改似乎没有执行任何操作,并且仍然在 GPU 0 上运行。

cat /etc/X11/xorg.conf
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 530.41.03

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
#    BusID          "PCI:1:0:0"
    BusID          "PCI:5:0:0"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

事实上,我删除etc/X11/xorg.conf并能够在 GPU 0 上运行 phoronix 测试,而无需配置文件。我猜测我运行的驱动程序或程序之一会自动选择总线 ID 最低的 nvidia 卡。

我想知道应该在哪里更改设置或任何配置文件,以便选择具有总线 id 的第二个 RTX 3070 gpu 05:00.0。我非常乐意提供任何进一步的信息。

答案1

prime-run脚本中,我还需要设置变量

__NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G{CARD#}

使用在 中找到的卡标识符xrandr --listproviders

下面列出的 Nvidia 官方指南提供了此问题的解决方案,但我没有仔细阅读该指南,因此在第一次阅读时错过了它。

https://download.nvidia.com/XFree86/Linux-x86_64/495.44/README/primerenderoffload.html

/etc/X11/xorg.conf对于这个解决方案来说是不必要的。

我错过了有关的部分,OFFLOAD_PROVIDER因为我从客户端远程访问无头服务器,没有任何 Xsession 或图形显示。

机器必须运行某种类型的 GUI,而不仅仅是无头终端环境。就我而言,我安装lightdm到我的服务器上,然后一切正常。

我相信图形需要使用x11/xorg而不是wayland。对于gdm3,xorg可以通过取消注释来设置运行

#WaylandEnable=false

/etc/gdm3/custom.conf重新启动。

相关内容