Как отрегулировать скорость вращения вентилятора графического процессора NVIDIA на безголовом узле?

Как отрегулировать скорость вращения вентилятора графического процессора NVIDIA на безголовом узле?

Как можно контролировать скорость вращения вентиляторов нескольких потребительских графических процессоров NVIDIA, таких как Titan и 1080 Ti, на автономном узле под управлением Linux?

решение1

Ниже приведен простой метод, который не требует написания скриптов, подключения поддельных мониторов или возни и может быть запущен через SSH для управления вентиляторами нескольких графических процессоров NVIDIA. Он был протестирован на Arch Linux.

Создать xorg.conf

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

Это создаст /etc/X11/xorg.confзапись для каждого графического процессора, аналогично ручному методу.

Примечание:В некоторых дистрибутивах (Fedora, CentOS, Manjaro) есть дополнительные файлы конфигурации (например, в /etc/X11/xorg.conf.d/или /usr/share/X11/xorg.conf.d/), которые переопределяют xorg.confи устанавливают AllowNVIDIAGPUScreens. Эта опция несовместима с данным руководством. Дополнительные файлы конфигурации следует изменить или удалить. Файл журнала X11 показывает, какие файлы конфигурации были загружены.

Альтернатива: создать xorg.conf вручную

Определите идентификаторы PCI ваших карт:

nvidia-xconfig --query-gpu-info

Найдите PCI BusIDполя. Обратите внимание, что они не совпадают с идентификаторами шин, указанными в ядре.

В качестве альтернативы выполните команду sudo startx, open /var/log/Xorg.0.log(или любое другое место, которое startX указывает в своих выходных данных под строкой «Log file:») и найдите строку NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>.

Редактировать/etc/X11/xorg.conf

Вот пример xorg.confдля машины с тремя 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

Должны BusIDсоответствовать идентификаторам шин, которые мы определили на предыдущем шаге. Эта опция AllowEmptyInitialConfigurationпозволяет X запускаться, даже если не подключен монитор. Эта опция Coolbitsпозволяет управлять вентиляторами. Она также может разрешить разгон.

Примечание:В некоторых дистрибутивах (Fedora, CentOS, Manjaro) есть дополнительные файлы конфигурации (например, в /etc/X11/xorg.conf.d/или /usr/share/X11/xorg.conf.d/), которые переопределяют xorg.confи устанавливают AllowNVIDIAGPUScreens. Эта опция несовместима с данным руководством. Дополнительные файлы конфигурации следует изменить или удалить. Файл журнала X11 показывает, какие файлы конфигурации были загружены.

Редактировать/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

Я использую .xinitrc для выполнения nvidia-settings для удобства, хотя, вероятно, есть и другие способы. Первая строка выведет все вентиляторы GPU в системе. Здесь я установил вентиляторы на 75%.

Запуск X

sudo startx -- :0

Эту команду можно выполнить из SSH. Вывод будет следующим:

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и nvtopможет использоваться для наблюдения за температурой и энергопотреблением. Более низкие температуры позволят карте работать на более высоких частотах и ​​увеличить энергопотребление. Вы можете использовать sudo nvidia-smi -pl 150для ограничения энергопотребления и поддержания охлаждения карт или использовать sudo nvidia-smi -pl 300для их разгона. Моя 1080 Ti работает на частоте 1480 МГц при 150 Вт и более 1800 МГц при 300 Вт, но это зависит от рабочей нагрузки. Вы можете контролировать их тактовую частоту с помощью nvidia-smi -qили, более конкретно,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

Возвращаемся к автоматическому управлению вентиляторами.

Перезагрузка. Другого способа сделать вентиляторы автоматическими я не нашел.

решение2

Я написал скрипт Python, устанавливаемый с помощью pip, чтобы сделать что-то похожее на предложение @AlexsandrDubinsky..

При запуске fans.py он устанавливает временный X-сервер для каждого GPU с подключенным фальшивым дисплеем. Затем он проходит по GPU каждые несколько секунд и устанавливает скорость вращения вентилятора в соответствии с их температурой. Когда скрипт умирает, он возвращает управление вентиляторами драйверам и очищает X-серверы.

решение3

Основываясь на ответах на этот вопрос и похожие вопросы StackExchange, я написал скрипт оболочки, который установит скорость вращения вентилятора 100(или любое другое значение, которое вы захотите)всеваших поклонников навсеваших графических процессоров на машине.

Этот скрипт предполагает, что на вашем компьютере установлен X11, но вы не используете его для предоставления графического интерфейса пользователю.

/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

Эти изменения скорости вращения вентилятора не сохраняются при перезагрузках, поэтому я написал файл systemd для запуска вышеуказанного скрипта при каждой загрузке.

/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

После создания вышеуказанного файла выполните следующие команды от имени пользователя root, чтобы включить запуск скрипта при перезагрузке.

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

Связанный контент