Come regolare la velocità della ventola della GPU NVIDIA su un nodo senza testa?


9

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:


5

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.

Identifica gli ID PCI delle tue carte:

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>.

modificare /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 BusIDdeve corrispondere all'ID PCI abbiamo identificato nel passaggio precedente. L'opzione AllowEmptyInitialConfigurationconsente a X di avviarsi anche se nessun monitor è collegato. L'opzione Coolbitsconsente ai fan di essere controllati. Può anche consentire l'overclocking, ma questo non è stato testato da me.

modificare /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 catcomando 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.

Avvia X

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.

Monitorare temperature e velocità di clock

nvidia-smipuò 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 150per limitare l'assorbimento di potenza e mantenere fresche le carte, oppure usare sudo nvidia-smi -pl 300per 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 -qo più specificamente,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

Ritorno alla gestione automatica della ventola.

Reboot. Non ho trovato un altro modo per rendere automatici i fan.


Sei in grado di controllare individualmente i fan su ogni GPU in questo modo? Ho visto che le schede EVGA 1080 Ti che usano questo metodo cambiano solo il numero 1 (di 3 fan). Qualche consiglio per i marchi compatibili con Linux che non usano metodi di configurazione non standard (come fa EVGA)?
ehiller,

@ehiller Ho solo le carte della Founder's Edition che hanno un singolo fan in stile soffiante. Tale dispositivo di raffreddamento funziona meglio quando più schede sono in un sistema. Cosa nvidia-settings -q fansmostra? (Puoi eseguirlo all'interno di .xinitrc) Forse puoi regolare tutti i fan se li indirizzi correttamente.
Aleksandr Dubinsky,

1
@Arin Non sei sicuro, ma è AllowEmptyInitialConfigurationimpostato correttamente per l'ID PCI corretto in xorg.conf? Quel file può essere complicato.
Aleksandr Dubinsky,

1
C'è uno strumento fornito da NVIDIA per generare automaticamente il file xorg.conf e funziona abbastanza bene:nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
Hubert Perron,

1
Inoltre, non puoi sottovalutare le GPU NVIDIA senza fare confusione con il BIOS personalizzato. Invece sto impostando un valore limite di potenza del software in watt: 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-smio nvidia-settings. C'è un esempio di overclocking nel nvidia-smidocumento qui: devblogs.nvidia.com/… Se hai nvidia-settingsinstallato puoi applicare un offset di clock senza dover usare un clock specifico:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Hubert Perron

2

Ho scritto uno script Python installabile su pip per fare qualcosa di simile al suggerimento di @ AlexsandrDubinsky .

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.


Grazie! Qualcosa che ho provato a capire ma non ci sono riuscito è come fare tutto questo all'interno di Docker ed evitare l'installazione di X server. Hai provato questo?
Aleksandr Dubinsky,

Non l'ho provato, temo, e non riesco a pensare a un modo per farlo senza X server accessibile. Dovrebbe impostare la velocità della ventola in un altro modo rispetto anvidia-settings
Andy Jones,

Bene, il driver nvidia è accessibile all'interno dei container e può essere usato per esempio CUDA. Penso che dovrebbe essere possibile avviare X server e farlo parlare con il driver nvidia, ma finora non ho avuto fortuna.
Aleksandr Dubinsky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.