在Linux中自定义N卡的风扇转速曲线
我个人对硬件的温度比较重视,认为是越低越好,显卡这玩意超过70度我觉得就已经是高温了。由于我已经主力使用Linux系统很久了,一直都是在需要给显卡上强度的时候,直接拉满显卡风扇。但是后面发现不是每时每刻都需要跑满的,没有负载的时候风扇还在呼呼吹确实是有点浪费了,于是就想搓一个bash
脚本,用于显卡风扇控制。
脚本本体
没错,又是面向LLM编程!
#!/bin/bash
# 初始化上一次的风扇转速
last_speed=-1
while true; do
# 获取 GPU 温度(单位:摄氏度)
temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits -i 0)
# 判断温度范围并计算风扇转速
if (( $(echo "$temp <= 40" | bc -l) )); then
current_speed=40
elif (( $(echo "$temp >= 70" | bc -l) )); then
current_speed=100
else
# 线性插值:温度在 40~70°C 之间,速度从 40%~100%
current_speed=$(echo "scale=0; 40 + 2 * ($temp - 40)" | bc)
fi
# 如果转速发生变化,才执行设置并输出调试信息
if [ "$current_speed" -ne "$last_speed" ]; then
echo "GPU Temp: $temp°C → Fan Speed: $current_speed%"
nvidia-settings -a "[gpu:0]/GPUFanControlState=1" -a "[fan:0]/GPUTargetFanSpeed=$current_speed" > /dev/null 2>&1
last_speed=$current_speed
fi
# 每秒检测一次
sleep 1
done
脚本说明
- 脚本逻辑:40度以下,转速40%,40度到70度,线性递增,到70度及以上时为100%。至于为什么不是停转?因为我的是涡轮卡,没法停( ,需要的话请自行修改。
- 使用方法:把代码保存为
set_GPU_fan.sh
,赋予执行权限后用root执行。建议配合tmux挂在后台。 - 注意事项:这个脚本只针对单GPU,单风扇的情况,如果你是多GPU或者
nvidia-settings
厘米出现了多个风扇控制,就需要进行脚本的完善和修改。我这个脚本只在有桌面环境的情况下测试过没问题,对于无GUI的情况,我是没有测试过的,据说是要运行X Server
才可以运行nvidia-settings
。
希望这个脚本可以更好的帮助你控制显卡温度。