如何修改xorg.conf文件以强制X服务器在特定GPU上运行?(我使用多个GPU)

use*_*877 6 cuda gpu nvidia xserver

我正在运行2个GPU,我正试图强制X服务器在一个GPU上运行.根据这个网站:http://nvidia.custhelp.com/app/answers/detail/a_id/3029/~/using-cuda-and-x,这是我应该如何进行:

应使用xorg.conf文件的相关"显示"部分中的BusID参数将X显示强制到单个GPU上.此外,应删除任何其他"显示"部分.例如:BusID"PCI:34:0:0"

这是我的xorg.conf文件:

# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig:  version 304.64  (buildmeister@swio-display-x86-rhel47-12)  Tue Oct 30 12:04:46 PDT 2012

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"
    HorizSync       28.0 - 33.0
    VertRefresh     43.0 - 72.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
Run Code Online (Sandbox Code Playgroud)

所以我尝试用正确的BusID修改子部分显示,但它仍然不起作用,我也尝试将它放在Device部分.

谁知道我怎么能这样做?

Rob*_*lla 7

如果您有2个NVIDIA GPU,请获取两者的BusID参数.您链接的文档解释了几种方法,但nvidia-smi -a很容易.

您需要确定要保留哪个GPU以供显示,以及要为CUDA保留哪个GPU.再次,这应该是非常明显的nvidia-smi -a

我们假设您nvidia-smi -a包含以下部分:

PCI
    Bus                     : 0x02
    Device                  : 0x00
    Domain                  : 0x0000
    Device Id               : 0x06D910DE
    Bus Id                  : 0000:02:00.0
Run Code Online (Sandbox Code Playgroud)

然后像这样修改设备部分:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:2:0:0"
EndSection
Run Code Online (Sandbox Code Playgroud)

然后重启.确保您要显示的那个是附有显示屏电缆的那个!

您可能还有兴趣阅读nvidia驱动程序自述文件并在"BusID"上搜索其他提示.

您链接的文档引用了"显示"部分,但应该是"设备"部分.

  • 一项非常重要的注解;如果安装了许多GPU,您会从`lspci`或`nvidia-smi`获得十六进制值,如“ 0000:0A:00.0”。您必须像`10:00:0`这样将其转换为十进制,或者像`A:00:0`这样跳过前导零(注意`0A现在只是`A`)。信誉归功于Freenode上#ethereum-mining的* ossifrage *。 (2认同)

ccj*_*351 6

由于无法对上面的答案添加评论,由于声誉限制,我只是将我的解决方案留在这里。

我遵循@Robert Crovella 提供的解决方案。但它仍然对我不起作用,直到我将 BusID 更改为十进制格式

让我写更多细节。

  • 两个 GPU:GTX 1080Ti(设备 0)和 GTX 960(设备 1)。所以我想将GTX 1080Ti(device0)设置为计算卡,将GTX 960(device1)设置为xorg显示。

  • 查找它们的 BusID:您可以通过命令“lspci |”找到 BusID。grep VGA',这将给出以下内容:

03:00.0 VGA 兼容控制器:NVIDIA Corporation 设备 1b06(rev a1)

82:00.0 VGA 兼容控制器:NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1)

03:00.0因此,我们获得了device0 和82:00.0device1 的BusId ,但它们都是十六进制数字。因此将0x03和分别 转换0x82为十进制数 和3130

  • 将以下内容添加BusID到文件Device中的部分xorg.conf

    “设备”部分

       Identifier     "Device1"
       Driver         "nvidia"   
       VendorName     "NVIDIA Corporation"
       BusID          "PCI:130:0:0"
    
    Run Code Online (Sandbox Code Playgroud)

    结束部分

请注意 BusID 格式,例如“0:0”(而不是“0.0”)。并且还在“屏幕”部分中使用相同的设备:

“屏幕”部分

   Identifier     "Screen0"
   Device         "Device1"   
   ...
Run Code Online (Sandbox Code Playgroud)

结束部分