Ubuntuモニタなし(サーバ)手動でNvidiaグラフィックスファンの回転数を調整
文書ディレクトリ
0️⃣ に質問
Ubuntu
に深い学習環境を構築した後、多くの人がUbuntu
のX
デスクトップサービスを無効にすることに慣れている.あるいは、このUbuntu
自体が仮想マシンで実行され、ディスプレイがなく、デスクトップサービスもありません.その後、別のwindows
システムのコンピュータを介してssh
を介してGPU
マシンに接続して使用される.この時点でX server
は無効になっており、電源を入れてもコマンドラインモードが自動的に起動し、nvidia-settings
を設定することでファンを調整することはできません.なぜなら、nvidia-settings
はX
デスクトップ環境でしか実行できないため、この設定を強制的に使用したい場合はエラーが発生します.headless
モードです.1️⃣ ソリューション1:インテリジェントな調整
cd /opt
git clone https://github.com/boris-dimitrov/set_gpu_fans_public
#
sudo mv set_gpu_fans_public set-gpu-fans
#
ln -sf ~/set-gpu-fans /opt/set-gpu-fans
#
cd /opt/set-gpu-fans
sudo tcsh
./cool_gpu >& controller.log &
tail -f controller.log
ps -ef |grep X
対応する
pid
が見つかりましたkill -9 pid
2️⃣ ソリューション2:手動調整
nvidia
の駆動がインストールされた後、ディスプレイが挿入されていない場合、バックグラウンドに“/usr/lib/xorg/Xorg”
が動作していないことを発見します.nvidia-setting
を使用してファンの速度を制御すると、GUIに接続できないエラーが表示されます.この問題を解決する方法の1つは、仮想スクリーンを使用してバックグラウンドをXorg
実行することである.2️⃣. 1️⃣ edidを生成する.txtファイル
sudo vim edid.txt
00 ff ff ff ff ff ff 00 1e 6d f5 56 71 ca 04 00 05 14 01 03 80 35 1e 78 0a ae c5 a2 57 4a 9c 25 12 50 54 21 08 00 b3 00 81 80 81 40 01 01 01 01 01 01 01 01 01 01 1a 36 80 a0 70 38 1f 40 30 20 35 00 13 2b 21 00 00 1a 02 3a 80 18 71 38 2d 40 58 2c 45 00 13 2b 21 00 00 1e 00 00 00 fd 00 38 3d 1e 53 0f 00 0a 20 20 20 20 20 20 00 00 00 fc 00 57 32 34 35 33 0a 20 20 20 20 20 20 20 01 3d 02 03 21 f1 4e 90 04 03 01 14 12 05 1f 10 13 00 00 00 00 23 09 07 07 83 01 00 00 65 03 0c 00 10 00 02 3a 80 18 71 38 2d 40 58 2c 45 00 13 2b 21 00 00 1e 01 1d 80 18 71 1c 16 20 58 2c 25 00 13 2b 21 00 00 9e 01 1d 00 72 51 d0 1e 20 6e 28 55 00 13 2b 21 00 00 1e 8c 0a d0 8a 20 e0 2d 10 10 3e 96 00 13 2b 21 00 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26
2️⃣. 2️⃣ xorgを構成する.conf
sudo nvidia-xconfig -a --allow-empty-initial-configuration \
--use-display-device="DFP-0" --connected-monitor="DFP-0" \
--custom-edid="DFP-0:/home/$USER/edid.txt" --cool-bits=28
sudo reboot
nvidia-smi
コマンドの下でXorg
が実行され、極めて小さなメモリを占有していることがわかります.nvidia-setting
を使用してファンとオーバークロックを制御できます.2️⃣. 3️ファン制御
sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUFanControlState=1
sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [fan:GPUID]/GPUTargetFanSpeed=70
GPUID
を対応する0 1 2 3 4などのグラフィックス番号に変更し、後の70はファン回転数70%を表します.2️⃣. 4️超周波数
sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUGraphicsClockOffset[3]=64
sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUMemoryTransferRateOffset[3]=500
20
系グラフィックスなら[3]を[4]に変更するのが一般的です.2️⃣. 5 11.グラフィックスファン回転速度曲線の再定義
sudo vim fan.sh
#!/bin/bash
headless=true
verbose=false
if [ "$headless" = true ] ; then
export DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0
fi
#Enable user defined fancontrol for all gpu
nvidia-settings -a "GPUFanControlState=1"
while true
do
#gpu index
i=0
#Get GPU temperature of all cards
for gputemp in $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader);do
if [ "$verbose" = true ] ; then
echo "gpu ${i} temp ${gputemp}";
fi
#Note: you need to set the minimum fan speed to a non-zero value, or it won't work
#This fan profile is being used in my GTX580 (Fermi). Change it as necessary
#If temperature is between X to Y degrees, set fanspeed to Z value
case "${gputemp}" in
0[0-9])
newfanspeed="40"
;;
1[0-9])
newfanspeed="40"
;;
2[0-9])
newfanspeed="40"
;;
3[0-9])
newfanspeed="40"
;;
4[0-9])
newfanspeed="40"
;;
5[0-4])
newfanspeed="50"
;;
5[5-6])
newfanspeed="60"
;;
5[7-9])
newfanspeed="70"
;;
6[0-5])
newfanspeed="80"
;;
6[6-9])
newfanspeed="90"
;;
7[0-5])
newfanspeed="95"
;;
7[6-9])
newfanspeed="98"
;;
*)
newfanspeed="98"
;;
esac
nvidia-settings -a "[fan-${i}]/GPUTargetFanSpeed=${newfanspeed}" 2>&1 >/dev/null
if [ "$verbose" = true ] ; then
echo "gpu ${i} new fanspeed ${newfanspeed}";
fi
sleep 3s
#increment gpu index
i=$(($i+1))
done
done
sudo ./fan.sh