¿Cómo es posible controlar la velocidad del ventilador de múltiples GPU NVIDIA de consumo como Titan y 1080 Ti en un nodo sin cabeza que ejecuta Linux?
¿Cómo es posible controlar la velocidad del ventilador de múltiples GPU NVIDIA de consumo como Titan y 1080 Ti en un nodo sin cabeza que ejecuta Linux?
Respuestas:
El siguiente es un método simple que no requiere secuencias de comandos, conectar monitores falsos o tocar el violín y puede ejecutarse a través de SSH para controlar múltiples ventiladores de GPU NVIDIA. Ha sido probado en Arch Linux.
Editar : ahora no estoy seguro de cuál es el mejor método. Anteriormente, sugerí lspci -k | grep -A 2 -E "(VGA|3D)"
. Sin embargo, esto no proporciona las ID correctas en mi nuevo sistema Threadripper.
Lo que funcionó fue sudo startx
abrir /var/log/Xorg.0.log
(o cualquier ubicación que startX enumere en su salida bajo la línea "Archivo de registro:") y buscar la línea NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>
.
/etc/X11/xorg.conf
Aquí hay un ejemplo para una máquina de tres 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
El BusID
debe coincidir con el ID PCI hemos identificado en el paso anterior. La opción AllowEmptyInitialConfiguration
permite que X se inicie incluso si no hay un monitor conectado. La opción Coolbits
permite controlar los ventiladores. También puede permitir el overclocking, pero esto no ha sido probado por mí.
/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 para ejecutar nvidia-settings por conveniencia, aunque probablemente haya otras formas. Aquí, puse a los fanáticos al 75%. Evito que el servidor X se cierre con el cat
comando vacío . Esto no es estrictamente necesario, pero encuentro que a veces tengo problemas con las tarjetas que se niegan a abandonar el estado de baja potencia P8 si X se cierra. La primera línea imprimirá cada ventilador de GPU en el sistema.
sudo startx -- :0
Puede ejecutar este comando desde SSH. El resultado será:
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
se puede usar para observar temperaturas y consumo de energía. Las temperaturas más bajas permitirán que la tarjeta registre más y aumente su consumo de energía. Puedes usar sudo nvidia-smi -pl 150
para limitar el robo de poder y mantener las cartas frías, o usar sudo nvidia-smi -pl 300
para dejar que overclockeen. Mi 1080 Ti funciona a 1480 MHz si recibe 150 W, y más de 1800 MHz si recibe 300 W, pero esto depende de la carga de trabajo. Puede controlar su velocidad de reloj con nvidia-smi -q
o más específicamente,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'
Reiniciar. No he encontrado otra forma de hacer que los ventiladores sean automáticos.
nvidia-settings -q fans
muestra? (Puede ejecutarlo dentro de .xinitrc) Tal vez pueda ajustar todos los ventiladores si los aborda correctamente.
AllowEmptyInitialConfiguration
configurado correctamente para la ID PCI correcta en xorg.conf? Ese archivo puede ser complicado.
nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
nvidia-smi -pl 120
. Esto limitará el consumo de energía de cada GPU a 120W. También puede hacer overclock / underclock core y mem usando nvidia-smi
o nvidia-settings
. Hay un ejemplo de overclocking en el nvidia-smi
documento aquí: devblogs.nvidia.com/… Si lo ha nvidia-settings
instalado, puede aplicar un desplazamiento de reloj sin tener que usar un reloj específico:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Cuando ejecuta fans.py, configura un servidor X temporal para cada GPU con una pantalla falsa adjunta. Luego, recorre las GPU cada pocos segundos y establece la velocidad del ventilador de acuerdo con su temperatura. Cuando el script muere, devuelve el control de los ventiladores a los controladores y limpia los servidores X.
nvidia-settings