Comment contrôler la vitesse du ventilateur de plusieurs GPU NVIDIA grand public tels que Titan et 1080 Ti sur un nœud sans tête exécutant Linux?
Comment contrôler la vitesse du ventilateur de plusieurs GPU NVIDIA grand public tels que Titan et 1080 Ti sur un nœud sans tête exécutant Linux?
Réponses:
Ce qui suit est une méthode simple qui ne nécessite pas de script, de connexion de faux moniteurs ou de violon et peut être exécutée via SSH pour contrôler plusieurs fans de GPU NVIDIA. Il a été testé sur Arch Linux.
Edit : je ne sais pas maintenant quelle est la meilleure méthode. Auparavant, je l'ai suggéré lspci -k | grep -A 2 -E "(VGA|3D)"
. Cependant, cela ne donne pas les ID corrects sur mon nouveau système Threadripper.
Ce qui a fonctionné était d' sudo startx
ouvrir, /var/log/Xorg.0.log
(ou n'importe quel emplacement les listes startX dans sa sortie sous la ligne "Fichier journal:"), et de rechercher la ligne NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>
.
/etc/X11/xorg.conf
Voici un exemple pour une machine à trois 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
Le BusID
doit correspondre à l'ID PCI que nous avons identifié à l'étape précédente. L'option AllowEmptyInitialConfiguration
permet à X de démarrer même si aucun moniteur n'est connecté. L'option Coolbits
permet de contrôler les ventilateurs. Il peut également permettre l'overclocking, mais cela n'a pas été testé par moi.
/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
J'utilise .xinitrc pour exécuter les paramètres nvidia pour plus de commodité, bien qu'il existe probablement d'autres façons. Ici, j'ai réglé les fans à 75%. J'empêche le serveur X de se fermer avec la cat
commande vide . Ce n'est pas strictement nécessaire, mais je trouve que j'ai parfois des problèmes avec les cartes qui refusent de quitter l'état de faible puissance du P8 si X se ferme. La première ligne imprimera chaque ventilateur GPU du système.
sudo startx -- :0
Vous pouvez exécuter cette commande à partir de SSH. La sortie sera:
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
peut être utilisé pour observer les températures et la consommation d'énergie. Des températures plus basses permettront à la carte de cadencer plus haut et d'augmenter sa consommation d'énergie. Vous pouvez utiliser sudo nvidia-smi -pl 150
pour limiter la consommation d'énergie et garder les cartes au frais, ou utiliser sudo nvidia-smi -pl 300
pour les laisser overclocker. Mon 1080 Ti fonctionne à 1480 MHz si 150W, et à plus de 1800 MHz si 300W, mais cela dépend de la charge de travail. Vous pouvez surveiller leur vitesse d'horloge avec nvidia-smi -q
ou plus précisément,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'
Redémarrez. Je n'ai pas trouvé d'autre moyen de rendre les fans automatiques.
nvidia-settings -q fans
montre-t-on? (Vous pouvez l'exécuter dans .xinitrc) Peut-être pouvez-vous régler tous les ventilateurs si vous les adressez correctement.
AllowEmptyInitialConfiguration
correctement défini pour l'ID PCI correct dans xorg.conf? Ce fichier peut être délicat.
nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
nvidia-smi -pl 120
. Cela limitera la consommation d'énergie de chaque GPU à 120 W. Vous pouvez également overclocker / sous-cadrer le noyau et mem en utilisant nvidia-smi
ou nvidia-settings
. Il y a un exemple d'overclocking dans le nvidia-smi
doc ici: devblogs.nvidia.com/… Si vous avez nvidia-settings
installé vous pouvez appliquer un décalage d'horloge sans avoir à utiliser d'horloge spécifique:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Lorsque vous exécutez fans.py, il configure un serveur X temporaire pour chaque GPU avec un faux écran attaché. Ensuite, il passe en boucle sur les GPU toutes les quelques secondes et définit la vitesse du ventilateur en fonction de leur température. Lorsque le script meurt, il rend le contrôle des ventilateurs aux pilotes et nettoie les serveurs X.
nvidia-settings