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?
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:
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.
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>
.
/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 BusID
muss mit der PCI-ID übereinstimmen, die wir im vorherigen Schritt identifiziert haben. Mit dieser Option AllowEmptyInitialConfiguration
kann X auch dann gestartet werden, wenn kein Monitor angeschlossen ist. Mit dieser Option Coolbits
können die Lüfter gesteuert werden. Es kann auch Übertakten zulassen, dies wurde jedoch von mir nicht getestet.
/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 cat
Befehl 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.
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.
nvidia-smi
kann 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 150
den Stromverbrauch begrenzen und die Karten kühl halten oder sudo nvidia-smi -pl 300
sie ü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 -q
oder genauer überwachen ,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'
Starten Sie neu. Ich habe keinen anderen Weg gefunden, um die Lüfter automatisch zu machen.
nvidia-settings -q fans
zeigt? (Sie können es in .xinitrc ausführen.) Möglicherweise können Sie alle Lüfter anpassen, wenn Sie sie richtig ansprechen.
AllowEmptyInitialConfiguration
für die richtige PCI-ID in xorg.conf richtig eingestellt? Diese Datei kann schwierig sein.
nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
nvidia-smi -pl 120
. Dadurch wird der Stromverbrauch jeder GPU auf 120 W begrenzt. Sie können Core und Mem auch mit nvidia-smi
oder übertakten nvidia-settings
. Es gibt ein Übertaktungsbeispiel im nvidia-smi
Dokument hier: devblogs.nvidia.com/… Wenn Sie nvidia-settings
installiert haben, können Sie einen Taktversatz anwenden, ohne eine bestimmte Uhr verwenden zu müssen:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
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.
nvidia-settings