Linuxを実行しているヘッドレスノードでTitanや1080 Tiなどの複数のコンシューマNVIDIA GPUのファン速度を制御するにはどうすればよいですか?
以下は、スクリプト、偽のモニターの接続、または操作を必要としないシンプルな方法で、SSHを介して実行して複数のNVIDIA GPUのファンを制御できます。 Arch Linuxでテストされています。
編集:現在、どの方法が最適かわかりません。以前、私はlspci -k | grep -A 2 -E "(VGA|3D)"
を提案しました。ただし、これは私の新しいThreadripperシステムで正しいIDを提供しません。
機能したのは、_Sudo startx
_を開き、_/var/log/Xorg.0.log
_(またはその出力の "Log file:"行の下にあるstartXリストの場所)を開いて、NVIDIA(0): Valid display device(s) on GPU-<GPU number> at PCI:<PCI ID>
行を探します。
/etc/X11/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
は、前のステップで識別した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
コマンドで終了しないようにしています。これは厳密に必要なわけではありませんが、Xが閉じた場合にカードがP8低電力状態を離れることを拒否するという問題が時々発生します。最初の行は、システム内のすべてのGPUファンを出力します。
_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は、150 Wの場合は1480 MHz、300 Wの場合は1800 MHz以上で動作しますが、これはワークロードによって異なります。 _nvidia-smi -q
_または具体的には_watch 'nvidia-smi -q | grep -E "Utilization| Graphics|Power Draw"'
_を使用して、クロック速度を監視できます。
リブート。私はファンを自動化する別の方法を見つけていません。
pip-installable Python @AlexsandrDubinskyの提案に似たスクリプトを記述したスクリプト を記述しました。
Fans.pyを実行すると、偽のディスプレイが接続されたGPUごとに一時的なXサーバーが設定されます。次に、数秒ごとにGPUをループし、温度に応じてファン速度を設定します。スクリプトが停止すると、ファンの制御がドライバーに戻り、Xサーバーがクリーンアップされます。