如何在無頭節點上調整 NVIDIA GPU 風扇速度?

如何在無頭節點上調整 NVIDIA GPU 風扇速度?

如何在運行 Linux 的無頭節點上控制多個消費性 NVIDIA GPU(例如 Titan 和 1080 Ti)的風扇速度?

答案1

以下是一個簡單的方法,不需要編寫腳本、連接假顯示器或擺弄,可以透過 SSH 執行來控制多個 NVIDIA GPU 的風扇。它已經在 Arch Linux 上進行了測試。

創建 xorg.conf

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

這將為/etc/X11/xorg.conf每個 GPU 建立一個條目,類似於手動方法。

筆記:一些發行版(Fedora、CentOS、Manjaro)有額外的設定檔(例如 in/etc/X11/xorg.conf.d//usr/share/X11/xorg.conf.d/),它們覆蓋xorg.conf並設定AllowNVIDIAGPUScreens.此選項與本指南不相容。應修改或刪除額外的設定檔。 X11 日誌檔案顯示已載入哪些設定檔。

替代方案:手動建立 xorg.conf

識別您的卡片的 PCI ID:

nvidia-xconfig --query-gpu-info

找到PCI BusID字段。請注意,這些與核心中報告的總線 ID 不同。

或者,執行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

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與我們在上一個步驟中識別的總線 ID 相符。即使沒有連接顯示器,該選項AllowEmptyInitialConfiguration也允許 X 啟動。該選項Coolbits允許控制風扇。它還可以允許超頻。

筆記:一些發行版(Fedora、CentOS、Manjaro)有額外的設定檔(例如 in/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讓它們超頻。如果給定 150W,我的 1080 Ti 運行頻率為 1480 MHz;如果給定 300W,則運行頻率超過 1800 MHz,但這取決於工作負載。您可以監控他們的時鐘速度,nvidia-smi -q或者更具體地說,watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

返回自動風扇管理。

重啟。我還沒有找到其他方法讓風扇自動運轉。

答案2

我編寫了一個可安裝 pip 的 Python 腳本來執行類似於 @AlexsandrDubinsky 的建議的操作

當您執行 fans.py 時,它會為每個 GPU 設定一個臨時 X 伺服器,並附加一個假顯示器。然後,它每隔幾秒鐘循環一次 GPU,並根據溫度設定風扇速度。當腳本終止時,它將風扇的控制權傳回給驅動程式並清理 X 伺服器。

答案3

根據這個問題和類似的 StackExchange 問題的答案,我編寫了一個 shell 腳本,它將風扇速度設定為100(或任何你想要的值)全部你的粉絲數量全部機器上 GPU 的數量。

該腳本假設您的電腦安裝了 X11,但您沒有使用它為使用者提供 GUI。

/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

相關內容