¿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?
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 startxabrir /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.confAquí 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 BusIDdebe coincidir con el ID PCI hemos identificado en el paso anterior. La opción AllowEmptyInitialConfigurationpermite que X se inicie incluso si no hay un monitor conectado. La opción Coolbitspermite controlar los ventiladores. También puede permitir el overclocking, pero esto no ha sido probado por mí.
/root/.xinitrcnvidia-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 catcomando 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-smise 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 150para limitar el robo de poder y mantener las cartas frías, o usar sudo nvidia-smi -pl 300para 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 -qo 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 fansmuestra? (Puede ejecutarlo dentro de .xinitrc) Tal vez pueda ajustar todos los ventiladores si los aborda correctamente.AllowEmptyInitialConfigurationconfigurado 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-screensnvidia-smi -pl 120. Esto limitará el consumo de energía de cada GPU a 120W. También puede hacer overclock / underclock core y mem usandonvidia-smionvidia-settings. Hay un ejemplo de overclocking en elnvidia-smidocumento aquí: devblogs.nvidia.com/… Si lo hanvidia-settingsinstalado, puede aplicar un desplazamiento de reloj sin tener que usar un reloj específico:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100He escrito un script Python instalable por pip para hacer algo similar a la sugerencia de @ AlexsandrDubinsky .
fuente
nvidia-settings