Como é possível controlar a velocidade do ventilador de várias GPUs NVIDIA de consumidor, como Titan e 1080 Ti, em um nó sem cabeça executando o Linux?
Como é possível controlar a velocidade do ventilador de várias GPUs NVIDIA de consumidor, como Titan e 1080 Ti, em um nó sem cabeça executando o Linux?
Respostas:
A seguir, é apresentado um método simples que não requer scripts, conexão de monitores falsos ou manobras e pode ser executado no SSH para controlar vários fãs das GPUs NVIDIA. Foi testado no Arch Linux.
Edit : agora não tenho certeza qual é o melhor método. Anteriormente, sugeri lspci -k | grep -A 2 -E "(VGA|3D)"
. No entanto, isso não fornece IDs corretos no meu novo sistema Threadripper.
O que funcionou foi sudo startx
abrir /var/log/Xorg.0.log
(ou qualquer local que o startX listar em sua saída na linha "Arquivo de log:") e procurar a linha NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>
.
/etc/X11/xorg.conf
Aqui está um exemplo para uma máquina com três 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
O BusID
deve corresponder ao ID do PCI identificado na etapa anterior. A opção AllowEmptyInitialConfiguration
permite que o X seja iniciado mesmo que nenhum monitor esteja conectado. A opção Coolbits
permite que os fãs sejam controlados. Também pode permitir overclock, mas isso não foi testado por mim.
/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
Eu uso .xinitrc para executar as configurações da nvidia por conveniência, embora provavelmente haja outras maneiras. Aqui, defino os fãs para 75%. Impeço que o servidor X seja fechado com o cat
comando vazio . Isso não é estritamente necessário, mas acho que às vezes tenho problemas com cartões que se recusam a deixar o estado de baixa energia P8 se o X fechar. A primeira linha imprimirá todos os fãs da GPU no sistema.
sudo startx -- :0
Você pode executar este comando no SSH. A saída 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
pode ser usado para observar temperaturas e consumo de energia. Temperaturas mais baixas permitirão que o cartão gire mais alto e aumentem seu consumo de energia. Você pode usar sudo nvidia-smi -pl 150
para limitar o consumo de energia e manter os cartões frios, ou sudo nvidia-smi -pl 300
pode permitir que eles façam overclock. Meu 1080 Ti roda em 1480 MHz, se fornecido em 150W, e acima de 1800 MHz, em caso de 300W, mas isso depende da carga de trabalho. Você pode monitorar a velocidade do relógio com nvidia-smi -q
ou mais especificamente,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'
Reinicie. Não encontrei outra maneira de tornar os fãs automáticos.
nvidia-settings -q fans
mostra? (Você pode executá-lo dentro de .xinitrc) Talvez você possa ajustar todos os ventiladores se os endereçar corretamente.
AllowEmptyInitialConfiguration
definido corretamente para o ID de PCI correto no xorg.conf? Esse arquivo pode ser complicado.
nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
nvidia-smi -pl 120
. Isso limitará o consumo de energia de cada GPU a 120W. Você também pode fazer overclock / underclock core e mem usando nvidia-smi
ou nvidia-settings
. Há um exemplo de overclock no nvidia-smi
documento aqui: devblogs.nvidia.com/… Se você nvidia-settings
instalou, pode aplicar um deslocamento de relógio sem precisar usar um relógio específico:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Quando você executa o fans.py, ele configura um servidor X temporário para cada GPU com um monitor falso anexado. Em seguida, ele percorre as GPUs a cada poucos segundos e define a velocidade do ventilador de acordo com a temperatura. Quando o script morre, ele retorna o controle dos ventiladores para os drivers e limpa os servidores X.
nvidia-settings