Come è possibile controllare la velocità della ventola di più GPU NVIDIA consumer come Titan e 1080 Ti su un nodo senza testa con Linux?
Come è possibile controllare la velocità della ventola di più GPU NVIDIA consumer come Titan e 1080 Ti su un nodo senza testa con Linux?
Risposte:
Di seguito è riportato un metodo semplice che non richiede scripting, collegamento di falsi monitor o manipolazione e può essere eseguito su SSH per controllare più fan di GPU NVIDIA. È stato testato su Arch Linux.
Modifica : ora non sono sicuro di quale sia il metodo migliore. In precedenza, ho suggerito lspci -k | grep -A 2 -E "(VGA|3D)"
. Tuttavia, questo non fornisce gli ID corretti sul mio nuovo sistema Threadripper.
Ciò che ha funzionato è stato sudo startx
, aprire /var/log/Xorg.0.log
(o qualunque posizione startX elenchi nel suo output sotto la riga "File di registro:") e cercare la riga NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>
.
/etc/X11/xorg.conf
Ecco un esempio per una macchina a tre GPU:
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
Il BusID
deve corrispondere all'ID PCI abbiamo identificato nel passaggio precedente. L'opzione AllowEmptyInitialConfiguration
consente a X di avviarsi anche se nessun monitor è collegato. L'opzione Coolbits
consente ai fan di essere controllati. Può anche consentire l'overclocking, ma questo non è stato testato da me.
/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
Uso .xinitrc per eseguire le impostazioni nvidia per comodità, anche se probabilmente ci sono altri modi. Qui, ho impostato i fan al 75%. Impedisco la chiusura del server X con il cat
comando vuoto . Questo non è strettamente necessario, ma a volte trovo problemi con le carte che si rifiutano di lasciare lo stato a basso consumo P8 se X si chiude. La prima riga stamperà tutte le ventole GPU nel sistema.
sudo startx -- :0
È possibile eseguire questo comando da SSH. L'output sarà:
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
può essere utilizzato per osservare temperature e assorbimento di potenza. Temperature più basse consentiranno alla scheda di aumentare il clock e aumentare il suo assorbimento di potenza. Puoi usare sudo nvidia-smi -pl 150
per limitare l'assorbimento di potenza e mantenere fresche le carte, oppure usare sudo nvidia-smi -pl 300
per farle overcloccare. Il mio 1080 Ti funziona a 1480 MHz se fornito di 150 W e oltre 1800 MHz se fornito di 300 W, ma questo dipende dal carico di lavoro. Puoi monitorare la loro velocità di clock con nvidia-smi -q
o più specificamente,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'
Reboot. Non ho trovato un altro modo per rendere automatici i fan.
nvidia-settings -q fans
mostra? (Puoi eseguirlo all'interno di .xinitrc) Forse puoi regolare tutti i fan se li indirizzi correttamente.
AllowEmptyInitialConfiguration
impostato correttamente per l'ID PCI corretto in xorg.conf? Quel file può essere complicato.
nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
nvidia-smi -pl 120
. Ciò limiterà il consumo di energia di ogni GPU a 120 W. Puoi anche overcloccare / underclockare core e mem usando nvidia-smi
o nvidia-settings
. C'è un esempio di overclocking nel nvidia-smi
documento qui: devblogs.nvidia.com/… Se hai nvidia-settings
installato puoi applicare un offset di clock senza dover usare un clock specifico:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Quando esegui fans.py, imposta un server X temporaneo per ogni GPU con un display falso collegato. Quindi, circola sulle GPU ogni pochi secondi e imposta la velocità della ventola in base alla loro temperatura. Quando lo script muore, restituisce il controllo dei fan ai driver e pulisce gli X server.
nvidia-settings