ヘッドレスノードで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/など)があります。追加の構成ファイルを変更または削除する必要があります。 X11ログファイルは、ロードされた構成ファイルを示しています。/usr/share/X11/xorg.conf.d/xorg.confAllowNVIDIAGPUScreens

代替案:xorg.confを手動で作成

カードのPCI IDを確認してください。

nvidia-xconfig --query-gpu-info

PCI BusID分野を見つけてください。これはカーネルに報告されたバスIDとは異なります。

またはを実行して開きsudo startx/var/log/Xorg.0.logまたはstartXが出力の「Logfile:」行の下にリストされているすべての場所)、行を見つけます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と一致する必要があります。このオプションを使用すると、モニターが接続されていなくてもAllowEmptyInitialConfigurationXを起動できます。このオプションをCoolbits使用すると、ファンを制御できます。オーバークロックも可能です。

メモ:一部のディストリビューション(Fedora、CentOS、Manjaro)には、このオプションをオーバーライドして設定する追加の設定ファイル(inまたは/etc/X11/xorg.conf.d/など)があります。追加の構成ファイルを変更または削除する必要があります。 X11ログファイルは、ロードされた構成ファイルを示しています。/usr/share/X11/xorg.conf.d/xorg.confAllowNVIDIAGPUScreens

編集する/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設定を実行していますが、他の方法もあります。最初の行はシステムの各GPUファンを印刷します。ここではファンを75%に設定しました。

LaunchX

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は、150Wが提供されている場合は1480MHzで動作し、300Wが提供されている場合は1800MHz以上で動作しますが、ワークロードによって異なります。クロック速度を監視できますnvidia-smi -q。具体的に言うとwatch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'

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

再起動。ファンを自動的に操作する他の方法が見つかりませんでした。

答え2

@AlexsandrDubinskyが提案したものと同様のことをするためにpipをインストールするPythonスクリプトを書いた。

Fans.pyを実行すると、GPUごとに一時Xサーバーが設定され、偽のモニターが接続されます。その後、数秒ごとにGPUを循環し、温度に応じてファン速度を設定します。スクリプトが終了したら、ファンコントロールをドライバに返し、Xサーバーをクリーンアップします。

答え3

これに似たStackExchangeの質問に対する回答に基づいて、ファンの速度を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

これらのファン速度の変更は再起動後も持続しないため、起動するたびに上記のスクリプトを実行するためにシステムデバイスファイルを作成しました。

/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

関連情報