Wie kann ich die NVIDIA GPU-Lüftergeschwindigkeit auf einem Headless-Knoten anpassen?


9

Wie ist es möglich, die Lüftergeschwindigkeit mehrerer NVIDIA-GPUs für Endverbraucher wie Titan und 1080 Ti auf einem Headless-Knoten unter Linux zu steuern?

Antworten:


5

Das Folgende ist eine einfache Methode, die kein Scripting, Anschließen gefälschter Monitore oder Fummeln erfordert und über SSH ausgeführt werden kann, um die Lüfter mehrerer NVIDIA-GPUs zu steuern. Es wurde unter Arch Linux getestet.

Identifizieren Sie die PCI-IDs Ihrer Karten:

Edit : Ich bin mir jetzt nicht sicher, was die beste Methode ist. Zuvor schlug ich vor lspci -k | grep -A 2 -E "(VGA|3D)". Dies gibt jedoch keine korrekten IDs auf meinem neuen Threadripper-System.

Was funktionierte war sudo startx, zu öffnen /var/log/Xorg.0.log(oder welche Position startX in seiner Ausgabe unter der Zeile "Log file:" auflistet) und nach der Zeile zu suchen NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>.

Bearbeiten /etc/X11/xorg.conf

Hier ist ein Beispiel für eine Maschine mit drei GPUs:

Section "ServerLayout"
        Identifier "dual"
        Screen 0 "Screen0"
        Screen 1 "Screen1" RightOf "Screen0"
        Screen 1 "Screen2" RightOf "Screen1"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:5:0:0"
    Option         "Coolbits"       "7"
    Option         "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:6:0:0"
    Option         "Coolbits"       "7"
    Option         "AllowEmptyInitialConfiguration"
EndSection

Section "Device"
    Identifier     "Device2"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:9:0:0"
    Option         "Coolbits"       "7"
    Option         "AllowEmptyInitialConfiguration"
EndSection

Section "Screen"
        Identifier     "Screen0"
        Device         "Device0"
EndSection

Section "Screen"
        Identifier     "Screen1"
        Device         "Device1"
EndSection

Section "Screen"
        Identifier     "Screen2"
        Device         "Device2"
EndSection

Das BusIDmuss mit der PCI-ID übereinstimmen, die wir im vorherigen Schritt identifiziert haben. Mit dieser Option AllowEmptyInitialConfigurationkann X auch dann gestartet werden, wenn kein Monitor angeschlossen ist. Mit dieser Option Coolbitskönnen die Lüfter gesteuert werden. Es kann auch Übertakten zulassen, dies wurde jedoch von mir nicht getestet.

Bearbeiten /root/.xinitrc

nvidia-settings -q fans
nvidia-settings -a [gpu:0]/GPUFanControlState=1 -a [fan:0]/GPUTargetFanSpeed=75
nvidia-settings -a [gpu:1]/GPUFanControlState=1 -a [fan:1]/GPUTargetFanSpeed=75
nvidia-settings -a [gpu:2]/GPUFanControlState=1 -a [fan:2]/GPUTargetFanSpeed=75

cat

Ich benutze .xinitrc, um nvidia-Einstellungen der Einfachheit halber auszuführen, obwohl es wahrscheinlich andere Möglichkeiten gibt. Hier habe ich die Lüfter auf 75% eingestellt. Ich verhindere, dass der X-Server mit dem leeren catBefehl geschlossen wird. Dies ist nicht unbedingt erforderlich, aber ich habe manchmal Probleme mit Karten, die sich weigern, den P8-Energiesparmodus zu verlassen, wenn X geschlossen wird. In der ersten Zeile wird jeder GPU-Lüfter im System ausgedruckt.

Starten Sie X.

sudo startx -- :0

Sie können diesen Befehl von SSH aus ausführen. Die Ausgabe wird sein:

Current version of pixman: 0.34.0
    Before reporting problems, check http://wiki.x.org
    to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
    (++) from command line, (!!) notice, (II) informational,
    (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat May 27 02:22:08 2017
(==) Using config file: "/etc/X11/xorg.conf"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"

  Attribute 'GPUFanControlState' (pushistik:0[gpu:0]) assigned value 1.

  Attribute 'GPUTargetFanSpeed' (pushistik:0[fan:0]) assigned value 75.


  Attribute 'GPUFanControlState' (pushistik:0[gpu:1]) assigned value 1.

  Attribute 'GPUTargetFanSpeed' (pushistik:0[fan:1]) assigned value 75.


  Attribute 'GPUFanControlState' (pushistik:0[gpu:2]) assigned value 1.

  Attribute 'GPUTargetFanSpeed' (pushistik:0[fan:2]) assigned value 75.

Überwachen Sie Temperaturen und Taktraten

nvidia-smikann verwendet werden, um Temperaturen und Stromverbrauch zu beobachten. Bei niedrigeren Temperaturen kann die Karte höher takten und den Stromverbrauch erhöhen. Sie können sudo nvidia-smi -pl 150den Stromverbrauch begrenzen und die Karten kühl halten oder sudo nvidia-smi -pl 300sie übertakten lassen. Mein 1080 Ti läuft mit 1480 MHz bei 150 W und über 1800 MHz bei 300 W, dies hängt jedoch von der Arbeitslast ab. Sie können ihre Taktrate mit nvidia-smi -qoder genauer überwachen ,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

Zurück zur automatischen Lüfterverwaltung.

Starten Sie neu. Ich habe keinen anderen Weg gefunden, um die Lüfter automatisch zu machen.


Können Sie auf diese Weise die Lüfter jeder GPU individuell steuern? Ich habe gesehen, dass EVGA 1080 Ti-Karten mit dieser Methode nur die Nummer 1 (von 3 Lüftern) ändern. Gibt es Empfehlungen für Linux-freundliche Marken, die keine nicht standardmäßigen Konfigurationsmethoden verwenden (wie dies bei EVGA der Fall ist)?
Ehiller

@ehiller Ich habe nur Founder's Edition-Karten mit einem einzigen Gebläse. Ein solcher Kühler funktioniert besser, wenn sich mehrere Karten in einem System befinden. Was nvidia-settings -q fanszeigt? (Sie können es in .xinitrc ausführen.) Möglicherweise können Sie alle Lüfter anpassen, wenn Sie sie richtig ansprechen.
Aleksandr Dubinsky

1
@Arin Sie sind sich nicht sicher, sind aber AllowEmptyInitialConfigurationfür die richtige PCI-ID in xorg.conf richtig eingestellt? Diese Datei kann schwierig sein.
Aleksandr Dubinsky

1
Es gibt ein Tool von NVIDIA, um die Datei xorg.conf automatisch zu generieren, und es funktioniert ziemlich gut:nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
Hubert Perron

1
Außerdem können Sie NVIDIA-GPUs nicht unterbieten, ohne sich mit dem benutzerdefinierten BIOS herumzuschlagen. Stattdessen setze ich einen Software-Leistungsgrenzwert in Watt : nvidia-smi -pl 120. Dadurch wird der Stromverbrauch jeder GPU auf 120 W begrenzt. Sie können Core und Mem auch mit nvidia-smioder übertakten nvidia-settings. Es gibt ein Übertaktungsbeispiel im nvidia-smiDokument hier: devblogs.nvidia.com/… Wenn Sie nvidia-settingsinstalliert haben, können Sie einen Taktversatz anwenden, ohne eine bestimmte Uhr verwenden zu müssen:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Hubert Perron

2

Ich habe ein pip-installierbares Python-Skript geschrieben, um etwas Ähnliches wie den Vorschlag von @ AlexsandrDubinsky zu tun .

Wenn Sie fan.py ausführen, wird für jede GPU ein temporärer X-Server mit einer gefälschten Anzeige eingerichtet. Anschließend werden alle paar Sekunden die GPUs durchlaufen und die Lüftergeschwindigkeit entsprechend ihrer Temperatur eingestellt. Wenn das Skript stirbt, gibt es die Kontrolle über die Lüfter an die Treiber zurück und bereinigt die X-Server.


Vielen Dank! Was ich herausfinden wollte, aber nicht konnte, ist, wie man das Ganze in Docker macht und die Installation des X-Servers vermeidet. Hast du das versucht?
Aleksandr Dubinsky

Ich fürchte, ich habe es nicht ausprobiert, und ich kann mir keine Möglichkeit vorstellen, dies zu tun, ohne dass auf den X-Server zugegriffen werden kann. Müsste die Lüftergeschwindigkeit auf eine andere Weise einstellen alsnvidia-settings
Andy Jones

Nun, der nvidia-Treiber ist in Containern zugänglich und kann zum Ausführen von z. B. CUDA verwendet werden. Ich denke, es sollte möglich sein, den X-Server zu starten und ihn mit dem NVIDIA-Treiber sprechen zu lassen, aber ich hatte bisher kein Glück.
Aleksandr Dubinsky
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.