如何修改 xorg.conf 文件以强制 X 服务器在特定 GPU 上运行? (我正在使用多个 GPU)[关闭]
Posted
技术标签:
【中文标题】如何修改 xorg.conf 文件以强制 X 服务器在特定 GPU 上运行? (我正在使用多个 GPU)[关闭]【英文标题】:How can I modify xorg.conf file to force X server to run on a specific GPU? (I am using multiple GPUs) [closed] 【发布时间】:2013-08-25 06:59:50 【问题描述】:我正在运行 2 个 GPU,并试图强制 X 服务器在一个 GPU 上运行。 根据这个网站:http://nvidia.custhelp.com/app/answers/detail/a_id/3029/~/using-cuda-and-x,我应该这样做:
应使用 BusID 将 X 显示器强制到单个 GPU 上 xorg.conf 文件的相关“显示”部分中的参数。在 此外,应删除任何其他“显示”部分。例如: 总线 ID "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
所以我尝试用正确的 BusID 修改小节显示,但它仍然不起作用,我也尝试将它放在 Device 部分。
有谁知道我是怎么做到的?
【问题讨论】:
【参考方案1】:如果您有 2 个 NVIDIA GPU,请获取两者的 BusID 参数。您链接的文档解释了几种方法,但nvidia-smi -a
非常简单。
您需要确定要保留哪个 GPU 用于显示,以及您要保留哪个 GPU 用于 CUDA。同样,这从nvidia-smi -a
应该很明显@
假设您的nvidia-smi -a
包含这样的部分:
PCI
Bus : 0x02
Device : 0x00
Domain : 0x0000
Device Id : 0x06D910DE
Bus Id : 0000:02:00.0
然后像这样修改设备部分:
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BusID "PCI:2:0:0"
EndSection
然后重启。 确保您保留用于展示的那个是连接了显示电缆的那个!
您可能也有兴趣阅读nvidia driver readme 并搜索“BusID”以获取更多提示。
您链接的文档引用了“显示”部分,但应该是“设备”部分。
【讨论】:
最后的问题是第二个GPU有缺陷。已检测到但无法显示。尽管谢谢,但您的回答很有帮助! 一个非常的重要提示;如果安装了许多 GPU,您将从lspci
或 nvidia-smi
获得十六进制值,例如 0000:0A:00.0
。您必须像 10:00:0
这样将其转换为十进制,或者像 A:00:0
这样跳过前导零(注意 0A
现在只是 A
)。归功于 Freenode 上#ethereum-mining 的 ossifrage。【参考方案2】:
由于无法将 cmets 添加到上述答案中,由于声誉限制,我将解决方案留在这里。
我遵循@Robert Crovella 提供的解决方案。但它仍然对我不起作用,直到我将 BusID 更改为 十进制格式。
让我写更多细节。
两个 GPU:GTX 1080Ti(device0) 和 GTX 960(device1)。所以我想将GTX 1080Ti(device0)设置为计算卡,将GTX 960(device1)设置为xorg显示。
查找他们的 BusID:您可以通过命令 'lspci | 查找 BusID' grep VGA',它将给出以下内容:
03:00.0 VGA 兼容控制器:NVIDIA Corporation Device 1b06 (rev a1)
82:00.0 VGA 兼容控制器:NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1)
所以我们得到了 device0 的 BusId 03:00.0
和 device1 的 82:00.0
,但是它们
都是十六进制数。所以将0x03
和0x82
转换为十进制数
分别为3
和130
。
将BusID
添加到xorg.conf
文件中的Device
部分:
“设备”部分
Identifier "Device1" Driver "nvidia" VendorName "NVIDIA Corporation" BusID "PCI:130:0:0"
结束部分
注意 BusID 格式,例如“0:0”(不是“0.0”)。并在“屏幕”部分使用相同的设备:
将显示器连接到显示 GPU,然后重新启动计算机。 当我阅读@Piotr Dobrogost 的上述评论时,我找到了这个解决方案,并仔细检查了 xorg.conf 文件中使用的十进制格式 BusID,与当我发现这个 article 时提供的 vis 命令“屏幕”部分
Identifier "Screen0" Device "Device1" ...
结束部分
lspci
不同的 BusID .
【讨论】:
以上是关于如何修改 xorg.conf 文件以强制 X 服务器在特定 GPU 上运行? (我正在使用多个 GPU)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
ini RAT5鼠标的XConf(/usr/share/X11/xorg.conf.d/rat5-quirks.conf)