Como ajustar a velocidade do ventilador da GPU NVIDIA em um nó sem cabeça?

Como ajustar a velocidade do ventilador da GPU NVIDIA em um nó sem cabeça?

Como é possível controlar a velocidade do ventilador de várias GPUs NVIDIA de consumo, como Titan e 1080 Ti, em um nó sem cabeça executando Linux?

Responder1

A seguir está um método simples que não requer scripts, conexão de monitores falsos ou manipulação e pode ser executado por SSH para controlar vários ventiladores de GPUs NVIDIA. Foi testado no Arch Linux.

Crie xorg.conf

sudo nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=7

Isso criará um arquivo /etc/X11/xorg.confcom uma entrada para cada GPU, semelhante ao método manual.

Observação:Algumas distribuições (Fedora, CentOS, Manjaro) possuem arquivos de configuração adicionais (por exemplo, in /etc/X11/xorg.conf.d/ou /usr/share/X11/xorg.conf.d/), que substituem xorg.confe definem AllowNVIDIAGPUScreens. Esta opção não é compatível com este guia. Os arquivos de configuração extras devem ser modificados ou excluídos. O arquivo de log do X11 mostra quais arquivos de configuração foram carregados.

Alternativa: Crie xorg.conf manualmente

Identifique os IDs PCI das suas placas:

nvidia-xconfig --query-gpu-info

Encontre os PCI BusIDcampos. Observe que eles não são iguais aos IDs de barramento relatados no kernel.

Alternativamente, faça sudo startx, abra /var/log/Xorg.0.log(ou qualquer local que startX liste em sua saída sob a linha "Arquivo de log:") e procure a linha NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>.

Editar/etc/X11/xorg.conf

Aqui está um exemplo de xorg.confuma 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

Devem BusIDcorresponder aos IDs de barramento que identificamos na etapa anterior. A opção AllowEmptyInitialConfigurationpermite que o X seja iniciado mesmo se nenhum monitor estiver conectado. A opção Coolbitspermite que os ventiladores sejam controlados. Também pode permitir overclock.

Observação:Algumas distribuições (Fedora, CentOS, Manjaro) possuem arquivos de configuração adicionais (por exemplo, in /etc/X11/xorg.conf.d/ou /usr/share/X11/xorg.conf.d/), que substituem xorg.confe definem AllowNVIDIAGPUScreens. Esta opção não é compatível com este guia. Os arquivos de configuração extras devem ser modificados ou excluídos. O arquivo de log do X11 mostra quais arquivos de configuração foram carregados.

Editar/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

Eu uso .xinitrc para executar as configurações da nvidia por conveniência, embora provavelmente existam outras maneiras. A primeira linha imprimirá todos os ventiladores de GPU do sistema. Aqui, configurei os ventiladores para 75%.

Lançar X

sudo startx -- :0

Você pode executar este comando do 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.

Monitore temperaturas e velocidades de clock

nvidia-smie nvtoppode ser usado para observar temperaturas e consumo de energia. Temperaturas mais baixas permitirão que a placa tenha uma freqüência mais alta e aumente seu consumo de energia. Você pode usar sudo nvidia-smi -pl 150para limitar o consumo de energia e manter as placas resfriadas ou para sudo nvidia-smi -pl 300deixá-las fazer overclock. Meu 1080 Ti funciona a 1480 MHz se receber 150W e mais de 1800 MHz se receber 300W, mas isso depende da carga de trabalho. Você pode monitorar a velocidade do clock com nvidia-smi -qou mais especificamente,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

Voltando ao gerenciamento automático de ventiladores.

Reinício. Não encontrei outra maneira de automatizar os ventiladores.

Responder2

Eu escrevi um script Python instalável por pip para fazer algo semelhante à sugestão de @AlexsandrDubinsky.

Quando você executa o fans.py, ele configura um servidor X temporário para cada GPU com um display falso conectado. Em seguida, ele percorre as GPUs a cada poucos segundos e define a velocidade da ventoinha de acordo com a temperatura. Quando o script morre, ele devolve o controle dos ventiladores aos drivers e limpa os servidores X.

Responder3

Com base nas respostas a esta pergunta e em perguntas semelhantes do StackExchange, escrevi um script de shell que definirá a velocidade do ventilador para 100(ou qualquer valor que você desejar) paratodosdos seus fãs emtodosde suas GPUs em uma máquina.

Este script pressupõe que sua máquina tenha o X11 instalado, mas que você não o esteja usando para fornecer uma GUI a um usuário.

/bin/set-gpu-fan-speed.sh:

#!/bin/bash
set -Eeuxo pipefail

# Kill any existing X servers.
killall Xorg || true
sleep 5

# Create a NVIDIA-friendly Xorg config.
nvidia-xconfig -a --cool-bits=28 --allow-empty-initial-configuration --enable-all-gpus

# Start a new X server for nvidia-settings to use.
export XDG_SESSION_TYPE=x11
export DISPLAY=:0
startx -- $DISPLAY &
sleep 5

# Determine the number of GPUs and fans on this machine.
NUM_GPUS=$(nvidia-settings -q gpus | grep -c 'gpu:')
NUM_FANS=$(nvidia-settings -q fans | grep -c 'fan:')

# For each GPU, enable fan control.
for ((i=0; i < NUM_GPUS; i++))
do
    nvidia-settings --verbose=all -a "[gpu:$i]/GPUFanControlState=1"
done

# For each fan, set fan speed to 100%.
for ((i=0; i < NUM_FANS; i++))
do
    nvidia-settings --verbose=all -a "[fan:$i]/GPUTargetFanSpeed=100"
done

# Kill the X server that we started.
killall Xorg || true

Essas alterações na velocidade do ventilador não persistem durante as reinicializações, então escrevi um arquivo de unidade systemd para executar o script acima em cada inicialização.

/etc/systemd/system/set-gpu-fan-speed.service:

[Unit]
Description="Sets the GPU fan speed"

[Service]
Type=oneshot
User=root
ExecStart=/bin/set-gpu-fan-speed.sh

[Install]
WantedBy=multi-user.target

Depois de criar o arquivo acima, execute os seguintes comandos como root para ativar o script em execução na reinicialização.

systemctl enable set-gpu-fan-speed.service
systemctl start set-gpu-fan-speed.service

informação relacionada