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

9

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

Александр Дубинский
источник

Ответы:

5

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

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

Изменить : я сейчас не уверен, что лучший метод. Ранее я предложил lspci -k | grep -A 2 -E "(VGA|3D)". Тем не менее, это не дает правильные идентификаторы в моей новой системе Threadripper.

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

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

Вот пример для машины с тремя графическими процессорами:

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Должен соответствовать PCI ID , мы определили в предыдущем шаге. Опция AllowEmptyInitialConfigurationпозволяет запускать X, даже если монитор не подключен. Опция Coolbitsпозволяет контролировать вентиляторы. Это также может разрешить разгон, но это не было проверено мной.

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

Я использую .xinitrc для удобства выполнения nvidia-settings, хотя, возможно, есть и другие способы. Здесь я установил поклонникам 75%. Я запрещаю закрытие X-сервера с помощью пустой catкоманды. Это не является строго необходимым, но я обнаружил, что иногда у меня возникают проблемы с картами, отказывающимися выходить из режима низкого энергопотребления P8, если X закрывается. В первой строке будет распечатан каждый вентилятор графического процессора в системе.

Запустить 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может использоваться для наблюдения за температурой и потреблением энергии. Более низкие температуры позволят карте работать выше и увеличат энергопотребление. Вы можете использовать, 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"'

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

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

Александр Дубинский
источник
Вы можете индивидуально управлять вентиляторами на каждом графическом процессоре? Я видел, что карты EVGA 1080 Ti, использующие этот метод, меняют только № 1 (из 3 вентиляторов). Какие-нибудь рекомендации для Linux-дружественных брендов, которые не используют нестандартные методы настройки (такие как EVGA)?
ehiller
@ehiller У меня есть только карты Founder's Edition, в которых есть один вентилятор. Такой кулер работает лучше, когда в системе несколько карт. Что nvidia-settings -q fansпоказывает? (Вы можете выполнить это внутри .xinitrc) Может быть, вы можете настроить все вентиляторы, если вы правильно их адресуете.
Александр Дубинский,
1
@Arin Не уверен, но AllowEmptyInitialConfigurationправильно ли указан правильный PCI ID в xorg.conf? Этот файл может быть хитрым.
Александр Дубинский
1
Существует инструмент, предоставленный NVIDIA для автоматической генерации файла xorg.conf, и он прекрасно работает:nvidia-xconfig --allow-empty-initial-configuration --enable-all-gpus --cool-bits=28 --separate-x-screens
Hubert Perron
1
На самом деле, вы не можете понизить напряжение графических процессоров NVIDIA, не вмешиваясь в пользовательский BIOS. Вместо этого я устанавливаю ограничение мощности программного обеспечения в ваттах nvidia-smi -pl 120. Это ограничит энергопотребление каждого графического процессора до 120 Вт. Вы также можете разогнать / разогнать ядро ​​и память с помощью nvidia-smiили nvidia-settings. Вот пример разгона в nvidia-smiдокументе: devblogs.nvidia.com/… Если вы nvidia-settingsустановили, вы можете применить смещение часов без необходимости использовать определенные часы:nvidia-settings -a [gpu]/GPUGraphicsClockOffset[3]=100
Hubert Perron
2

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

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

Энди Джонс
источник
Спасибо! Что-то, что я пытался выяснить, но не смог, это как сделать все это внутри Docker и избежать установки X-сервера. Вы пробовали это?
Александр Дубинский
Боюсь, я не пробовал, и я не могу придумать, как это сделать без доступности X-сервера. Пришлось бы установить скорость вентилятора другим способом, чемnvidia-settings
Энди Джонс
Что ж, драйвер nvidia доступен в контейнерах и может быть использован для запуска, например, CUDA. Я думаю, что можно запустить X-сервер и поговорить с драйвером nvidia, но пока мне не повезло.
Александр Дубинский