没有屏幕的 NVIDIA 卡上的 X 服务器

Stu*_*ham 6 xorg nvidia-graphics-card

我有一个相当独特的情况,我有一台安装了 NVIDIA 显卡的服务器,我们需要运行 X 服务器,但是服务器位于没有显示器的机架上。让 X 运行的原因是为了使用 Qt 的程序进行渲染操作。使用 GPU 渲染而不是 CPU 在效率上有巨大的好处。每当 i startx,X 无法启动,因为没有附加屏幕。使用假显示器启动 x 的最佳方法是什么?操作系统是 RHEL 6

and*_*ers 9

我不知道这是否是“最好的方法”,但我就是这样做的。

使用 nvidia-settings GUI 为屏幕制作 edid 文件

然后在您选择的终端中粘贴或写入:

sudo nvidia-xconfig -a --allow-empty-initial-configuration \
--use-display-device="DFP-0" --connected-monitor="DFP-0" \
--custom-edid="DFP-0:/home/$USER/edid.txt" 

sudo reboot
Run Code Online (Sandbox Code Playgroud)

将 GPU 和屏幕添加到 xorg.conf。

如果您还希望能够超频和控制风扇,请将“--cool-bits=12”(或任何 NVIDIA 文档说明适用于您的驱动程序)添加到最佳。

如果您没有制作 edid 文件的方法,或者在这里找不到,那么我使用的是:

00 ff ff ff ff ff ff 00 1e 6d f5 56 71 ca 04 00 05 14 01 03 80 35 1e 78 0a ae c5 a2 57 4a 9c 25 12 50 54 21 08 00 b3 00 81 80 81 40 01 01 01 01 01 01 01 01 01 01 1a 36 80 a0 70 38 1f 40 30 20 35 00 13 2b 21 00 00 1a 02 3a 80 18 71 38 2d 40 58 2c 45 00 13 2b 21 00 00 1e 00 00 00 fd 00 38 3d 1e 53 0f 00 0a 20 20 20 20 20 20 00 00 00 fc 00 57 32 34 35 33 0a 20 20 20 20 20 20 20 01 3d 02 03 21 f1 4e 90 04 03 01 14 12 05 1f 10 13 00 00 00 00 23 09 07 07 83 01 00 00 65 03 0c 00 10 00 02 3a 80 18 71 38 2d 40 58 2c 45 00 13 2b 21 00 00 1e 01 1d 80 18 71 1c 16 20 58 2c 25 00 13 2b 21 00 00 9e 01 1d 00 72 51 d0 1e 20 6e 28 55 00 13 2b 21 00 00 1e 8c 0a d0 8a 20 e0 2d 10 10 3e 96 00 13 2b 21 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26
Run Code Online (Sandbox Code Playgroud)

保存到用户主目录中的 edid.txt,或更改配置行中的位置。

如果您启用超频并希望在主 GPU 上使用屏幕:

sudo nano /etc/X11/xorg.conf
Run Code Online (Sandbox Code Playgroud)

删除行:

Option         "UseDisplayDevice" "DFP-0"
Option         "CustomEDID" "DFP-0:/home/nv/edid.bin"
Option         "ConnectedMonitor" "DFP-0"
Run Code Online (Sandbox Code Playgroud)

从“屏幕”部分,您的 GPUID 与屏幕连接并分配给它。

超频!

功率限制:

sudo nvidia-smi -i GPUID -pl WATTLIMIT
Run Code Online (Sandbox Code Playgroud)

核心时钟:

nvidia-settings -c :0 -a [gpu:GPUID]/GPUGraphicsClockOffset[3]=16
Run Code Online (Sandbox Code Playgroud)

:0 是分配给 GPU 的 X 屏幕,GPUID 是猜测的 GPU 编号(从 0 开始计数)。

16 == 偏移。

使用负数来降频。

内存时钟:

nvidia-settings -c :0 -a [gpu:GPUID]/GPUMemoryTransferRateOffset[3]=1200
Run Code Online (Sandbox Code Playgroud)

如果您习惯于 Afterburner 等,则必须将 Linux(大约)中的偏移值加倍。

我总是在 Linux 系统上从我的卡中获得更多的汁液(供我使用

手动启用和控制风扇:

nvidia-settings -c :0 -a [gpu:GPUID]/GPUFanControlState=1
nvidia-settings -c :0 -a [fan:GPUID]/GPUTargetFanSpeed=85
Run Code Online (Sandbox Code Playgroud)

将 GPUFanControlState 设置回 0 以禁用手动控制。

GPUTargetFanSpeed 以 0 到 100 之间的整数作为输入。

检查温度、用电量等:

nvidia-smi
Run Code Online (Sandbox Code Playgroud)

如果进程被 GPU 锁定在低功耗状态,我发现的唯一解决方法是创建应用程序配置文件,没有/无法控制 P 状态。至少在消费卡上。

这是过程:

cd ~/.nv
cat > nvidia-application-profiles-rc
Run Code Online (Sandbox Code Playgroud)

粘贴此模板:

{
"rules": [
    {
        "pattern": {
            "feature": "procname",
            "matches": "NameOfRunningProcessThatWantsMorePriority"
        },
        "profile": "ProfileNameWhatever"
    }
],
"profiles": [
    {
        "name": "ProfileNameWhatever",
        "settings": []
    }
]
}
Run Code Online (Sandbox Code Playgroud)

在使用适合您口味的任何内容进行编辑之前,先按 Enter 然后按 CTRL + C。

启动您的进程并键入 nvidia-smi 以获取要在应用程序配置文件中使用的进程名称。

或者,如果您可以访问 GUI,则可以在那里创建应用程序配置文件。

要在重新启动时保持自定义功率限制,必须启用“持久模式”。

要在所有 GPU 上启用它:

sudo nvidia-smi -pm 1
Run Code Online (Sandbox Code Playgroud)

要在特定 GPU 上启用它:

sudo nvidia-smi -i GPUID -pm 1
Run Code Online (Sandbox Code Playgroud)

如果无头运行并依次运行多个小进程,持久性模式将有助于提高速度,因为 GPU 不会在作业之间进入睡眠状态,这将大大减少处理许多小任务的时间!
激活时会增加空闲消耗!

使用 lightdm 时的附加信息!
常规方法会在较新的 Ubuntu 系统上产生问题

像其他所有实际配置的东西一样,使用 root 帐户或 sudo

风扇控制:

# DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUFanControlState=1
# DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [fan:GPUID]/GPUTargetFanSpeed=70
Run Code Online (Sandbox Code Playgroud)

超频/超频:

# DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUGraphicsClockOffset[3]=64
# DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUMemoryTransferRateOffset[3]=1100
Run Code Online (Sandbox Code Playgroud)

# == 根,或 sudo

如果一切都在运行(或不运行)时出现问题,NVIDIA 发布了一些很好的故障排除查询:

有用的 nvidia-smi 查询

其他;

ArchLinux Wiki 关于 NVIDIA 的提示和技巧

xconfig 附录 NVIDIA 驱动程序 384.98

只需将 URL 中的驱动程序版本更改为您的驱动程序版本,您就会走上正轨。