像 Nvidia P40、P4、P100 或 M40 等服务器计算卡没有内置风扇,一般在无风道的情况下会外加在尾部的风扇以解决散热。对这个风扇的调速,可以看到手动使用调速线、拆开显卡在核心附近安装热电偶获取温度然后用电路控制风扇转速的方案。
然而,系统可以获取显卡的温度,同时也可以控制PWM输出控制风扇转速。因此一定存在软件的解决方案控制风扇转速。解决方案如下。
首先安装 fancontrol,大部分发行版的包管理工具中有此软件。
其控制温度的脚本如下(省略了硬件信息)。FCTEMPS 处是可以填绝对路径的,这里填/home/gputemp
1 2 3 4 5 6 7 8 9 10
| ... FCTEMPS=hwmon4/pwm2=/home/gputemp FCFANS=hwmon4/pwm2=hwmon4/fan2_input MINTEMP=hwmon4/pwm2=35 MAXTEMP=hwmon4/pwm2=65 MINSTART=hwmon4/pwm2=120 MINSTOP=hwmon4/pwm2=20 MINPWM=hwmon4/pwm2=20 MAXPWM=hwmon4/pwm2=255 AVERAGE=hwmon4/pwm2=2
|
我们接下来用一个service 向/home/gputemp 循环写温度。 其systemd 脚本如下。写好后放置到正确位置,并设置enable 开启启动。
1 2 3 4 5 6 7 8 9 10
| [Unit] Description=Write GPU temperature to file
[Service] ExecStart=sh -c 'echo $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | tail -n 1)000 > /home/gputemp' Restart=always RestartSec=10
[Install] WantedBy=multi-user.target
|
另,实际上
1
| <(echo $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | tail -n 1)000)
|
可以将直接转为文件,使用stat 查看其信息如下。但 fancontrol 脚本处并不支持执行命令获得的文件。
1 2 3 4 5 6 7 8 9
| stat <(echo $(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | tail -n 1)000) File: /dev/fd/63 -> pipe:[20209] Size: 64 Blocks: 0 IO Block: 1024 symbolic link Device: 17h/23d Inode: 401811 Links: 1 Access: (0500/lr-x------) Uid: ( 1000/ wwq) Gid: ( 1000/ wwq) Access: 2023-04-02 22:59:46.287394863 +0800 Modify: 2023-04-02 22:59:46.287394863 +0800 Change: 2023-04-02 22:59:46.287394863 +0800 Birth: -
|