ヘッドレス ノードで NVIDIA GPU ファンの速度を調整するにはどうすればいいですか?

ヘッドレス ノードで NVIDIA GPU ファンの速度を調整するにはどうすればいいですか?

Linux を実行するヘッドレス ノードで、Titan や 1080 Ti などの複数のコンシューマー NVIDIA GPU のファンの速度を制御するにはどうすればよいでしょうか?

答え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) には追加の設定ファイル ( または/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、 (または startX が出力の「Log file:」行の下にリストする場所)を開いて/var/log/Xorg.0.log、 行を探しますNVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>

編集/etc/X11/xorg.conf

xorg.conf以下は3 つの 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) には追加の設定ファイル ( または/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消費電力を制限し、カードを冷却したり、オーバークロックしたりできます。私の1080 Tiは、150Wの場合は1480MHzで動作し、300Wの場合は1800MHz以上で動作しますが、これはワークロードによって異なります。またはより具体的にはsudo nvidia-smi -pl 300、を使用してクロック速度を監視できます。nvidia-smi -qwatch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

自動ファン管理に戻ります。

再起動します。ファンを自動化する別の方法は見つかりませんでした。

答え2

@AlexsandrDubinskyの提案に似たことを行うために、pipでインストール可能なPythonスクリプトを作成しました。

fans.py を実行すると、擬似ディスプレイが接続された各 GPU に一時的な X サーバーがセットアップされます。次に、数秒ごとに GPU をループし、温度に応じてファンの速度を設定します。スクリプトが終了すると、ファンの制御がドライバーに返され、X サーバーがクリーンアップされます。

答え3

100この質問と類似のStackExchangeの質問への回答に基づいて、ファン速度を(または任意の値)に設定するシェルスクリプトを作成しました。全てあなたのファンの全てマシン上の GPU の数。

このスクリプトは、マシンに X11 がインストールされているが、ユーザーに GUI を提供するために使用していないことを前提としています。

ファンスピードの設定:

#!/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 ユニット ファイルを作成しました。

gpu ファン速度の設定:

[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

関連情報