这个没显示器调节风扇真的让人疯掉,网上的教程基本上是错的,都是改什么”Coolbits”。事实上改完之后,开机黑屏,而且改的位置都是错的。😡😡
0️⃣ 问题
一般在
Ubuntu
上搭建完深度学习环境后,很多人习惯把Ubuntu
的X
桌面服务禁用掉;或者这个Ubuntu
本身就是在虚拟机中运行的,没有显示器,也就没有桌面服务了。然后通过另一台windows
系统的电脑通过ssh
来连接GPU
机器使用。这个时候X server
已经被禁用掉,开机也自动启动命令行模式,那就无法通过设置nvidia-settings
来调节风扇。原因是,nvidia-settings
只能在X
桌面环境下运行,若你想强行使用这个设置就会报错。修改方法就是骗过系统,让它觉得你有显示器,这就是常说的
headless
模式。
1️⃣ 解决方案一:智能调节
- 这个方法需要每次开机都要运行一下
1 | cd /opt |
- 若出错
1 | ps -ef |grep X |
找到对应的pid
1 | kill -9 pid |
2️⃣ 解决方案二:手动调节
- 在安装完
nvidia
驱动后,在没有插上显示器的情况下会发现后台无“/usr/lib/xorg/Xorg”
运行。此时我们使用nvidia-setting
控制风扇速度时会提示一些无法连接GUI的错误。解决这个问题的一个方法那就是使用虚拟屏幕来让后台运行Xorg
。
2️⃣. 1️⃣ 生成edid.txt
文件
1 | sudo vim edid.txt |
- 写入:
1 | 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
1 | sudo nvidia-xconfig -a --allow-empty-initial-configuration \ |
- 重启以后我们会发现
nvidia-smi
命令下Xorg
运行了起来,占用了极小的显存。现在就可以使用nvidia-setting
控制风扇与超频了。
2️⃣. 3️⃣ 风扇控制
1 | sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUFanControlState=1 |
GPUID
改成你对应的0 1 2 3 4之类的显卡序号。
2️⃣. 4️⃣ 超频
1 | sudo DISPLAY=:0 XAUTHORITY=/var/run/lightdm/root/:0 nvidia-settings -c :0 -a [gpu:GPUID]/GPUGraphicsClockOffset[3]=64 |
20
系显卡的话一般把[3]改成[4]。
2️⃣. 5️⃣ 重新定义显卡风扇转速曲线
1 | sudo vim fan.sh |
- 写入
1 |
|
如果你的风扇是多控制器的,那么你还需要进行相应的修改,一般来说公版单风扇无论多少GPU都可以直接使用。
执行风扇程序:
1 | sudo ./fan.sh |