젯슨 나노로 딥러닝 모델을 학습하거나 추론 할 때 온도가 상승해 성능이 저하되는 경우가 있다.
이를 방지하기 위해 팬을 구매했으며 주기적으로 온도를 확인해 팬의 동작 속도를 제어하는 셸 스크립트를 작성했다.
먼저 PWM 동작을 확인한다.
$sudo jetson_clocks
$sudo sh -c 'echo 255 > /sys/devices/pwm-fan/target_pwm'
제어값의 범위는 0 ~ 255 이며 값이 클 수록 팬이 빠르게 돌아간다.
#!/bin/bash
# /home/user/tempCheck.sh
thr1=60000
thr2=50000
thr3=40000
curState=0
while :
do
tempStr=`cat /sys/class/thermal/thermal_zone0/temp`
echo 'Temperature: '$tempStr
temp=$((tempStr))
state=0
if [ "$temp" -gt "$thr1" ]
then
state=1
elif [ "$temp" -gt "$thr2" ]
then
state=2
elif [ "$temp" -gt "$thr3" ]
then
state=3
else
state=4
fi
if [ "$curState" -eq "$state" ]
then
echo 'Same before. No need to change PWM.'
else
if [ "$state" -eq "1" ]
then
echo `sudo sh -c 'echo 250 > /sys/devices/pwm-fan/target_pwm'`
echo 'PWM SET 250'
elif [ "$state" -eq "2" ]
then
echo `sudo sh -c 'echo 200 > /sys/devices/pwm-fan/target_pwm'`
echo 'PWM SET 200'
elif [ "$state" -eq "3" ]
then
echo `sudo sh -c 'echo 150 > /sys/devices/pwm-fan/target_pwm'`
echo 'PWM SET 150'
else
echo 'Fine'
fi
fi
curState=$state
sleep 5
done
온도를 단계별로 구분하고 threshold 값을 지정한다.
이전과 비교하여 threshold 값을 넘지 않으면 팬을 제어하지 않는다.
한 번 온도를 체크하고 5초 동안 sleep 한다.
셸 스크립트의 권환을 변경한다.
$chmod 700 /home/user/tempCheck.sh
작성한 셸 스크립트를 서비스로 동작하기위해 systemd 경로에 pwm.service를 작성한다.
# /etc/systemd/system/pwm.service
[Unit]
Description=Control PWM By Temperature
[Service]
ExecStart=/home/user/tempCheck.sh
Restart=always
[Install]
WantedBy=multi-user.target
systemd에 서비스를 등록한다.
$sudo systemctl daemon-reload
$sudo systemctl enable pwm.service
pwm.service를 실행한다.
$sudo systemctl start pwm.service
pwm.service의 동작 상태를 확인한다.
$sudo systemctl status pwm.service