Ubuntu下无显示器(服务器)手动调节Nvidia显卡风扇转速

0️⃣ 问题

  • 一般在Ubuntu上搭建完深度学习环境后,很多人习惯把UbuntuX桌面服务禁用掉;或者这个Ubuntu本身就是在虚拟机中运行的,没有显示器,也就没有桌面服务了。然后通过另一台windows系统的电脑通过ssh来连接GPU机器使用。这个时候X server已经被禁用掉,开机也自动启动命令行模式,那就无法通过设置nvidia-settings来调节风扇。原因是,nvidia-settings只能在X桌面环境下运行,若你想强行使用这个设置就会报错。

  • 修改方法就是骗过系统,让它觉得你有显示器,这就是常说的headless模式。

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️⃣ 解决方案二:手动调节

  • 在安装完nvidia驱动后,在没有插上显示器的情况下会发现后台无“/usr/lib/xorg/Xorg”运行。此时我们使用nvidia-setting控制风扇速度时会提示一些无法连接GUI的错误。解决这个问题的一个方法那就是使用虚拟屏幕来让后台运行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️⃣ 重新定义显卡风扇转速曲线

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
  • 如果你的风扇是多控制器的,那么你还需要进行相应的修改,一般来说公版单风扇无论多少GPU都可以直接使用。

  • 执行风扇程序:

sudo ./fan.sh
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
好的,下面是在Ubuntu 20.04上安装NVIDIA显卡驱动的完整步骤: 1. 检查你的NVIDIA显卡型号 首先,我们需要检查你的NVIDIA显卡型号。打开终端,并输入以下命令: ``` lspci | grep -i nvidia ``` 如果你的电脑上有NVIDIA显卡,你将会看到一行类似于“NVIDIA Corporation GP108 [GeForce GT 1030]”的输出。 2. 更新系统 接下来,我们需要更新系统。打开终端,并输入以下命令: ``` sudo apt update && sudo apt upgrade ``` 这个命令将会更新系统包和软件到最新版本。 3. 添加NVIDIA官方仓库 为了安装最新的NVIDIA显卡驱动,我们需要添加NVIDIA官方仓库。打开终端,并输入以下命令: ``` sudo apt install software-properties-common sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt update ``` 这些命令将会添加PPA(Personal Package Archives)仓库并更新软件包列表。 4. 安装NVIDIA显卡驱动 现在,我们可以安装最新的NVIDIA显卡驱动了。打开终端,并输入以下命令: ``` sudo apt install nvidia-driver-460 ``` 请注意,这里的“460”是当前最新的NVIDIA显卡驱动版本。如果你要安装其他版本,请将“460”替换成你想要安装的版本号。 5. 重启电脑 安装完成后,请重启你的电脑。 6. 验证NVIDIA显卡驱动 重启电脑后,我们需要验证NVIDIA显卡驱动是否已经成功安装。打开终端,并输入以下命令: ``` nvidia-smi ``` 如果你看到了类似于以下输出的信息,那么恭喜你,NVIDIA显卡驱动已经成功安装了! ``` +-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.39 Driver Version: 460.39 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 GeForce GT 1030 Off | 00000000:01:00.0 On | N/A | | 40% 37C P8 3W / 30W | 176MiB / 1994MiB | 3% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值