Перейти к содержанию

WatchDog и Управление кулерами карт в одном флаконе. Nvidia под Linux


19alexrus71

Рекомендуемые сообщения

Решил поделиться самописанным скриптиком для контроля температуры карт и watchdog в одном флаконе для ферм на картах Nvidia под управлением любого linux
Для гуру линукса данный скрипт скорее всего будет неинтересен.
А вот новичкам - вполне может быть в тему. Кроме прямого назначения, возможно подтолкнет к пониманию создания скриптов на shell (что крайне полезно при использовании linux)
 
Предупреждаю сразу. Я не программист. Скрипт писал исключительно для себя. Возможно профессиональным кодерам он покажется оверстремным. Но тем не менее, работает у меня уже давно и исправно. Функции свои исполняет вполне уверенно. Поэтому ногами за корявый стиль программирования прошу не пинать.
 
Функционал контроля температуры:
Задается коридор температур (по умолчанию 58-60) в котором скрипт будет пытаться держать карты.
  • При снижении температуры ниже нижнего порога - происходит плавное снижение оборотов кулера.
  • При достижении верхнего порога - плавное увеличение оборотов.
  • При достижении второго порога (по умолчанию 65)- сразу включается турборежим кулера (по умолчанию 70), и после этого плавное увеличение вплоть до максимальных оборотов, пока температура не снизится.
  • При снижении оборотов ниже минимальных (по умолчанию 35) - происходит переключение на автоматическое управление кулерами. Полезно при зимнем балконном майнинге, чтобы не крутить вентиля, когда картам и так холодно. (на многих картах вентиля просто отключаются ниже определенной температуры)
 
Функционал WatchDog (можно отключить):
  • Считываются значения загрузки карт.
  • В случае ошибки получения данных (отвал карты). Или в случае снижения загрузки карты ниже установленного порога (не работает майнер), начинается обратный отсчет. Если по прошествии заданного количества циклов - загрузка карт не восстанавливается - происходит перезагрузка с одновременной записью  даты ребута и его причины в ~/watchdog.log
 

Входные переменные для настройки задаются в начале скрипта. В скрипте есть описание переменных. Запускать желательно в отдельном окне терминала.

Скрипт под спойлером

Скрытый текст

 

#!/bin/bash
#######################
#Script created by 19alexrus71
#For donate - LTC: LaeSwaV5mnXJb6DgccCdHiZNKUCvbfDMFT
#############################################################
 
 
 
#Температура при достижении которой обороты начинают плавно повышаться
high_level=60
 
#Температура при которой обороты начинают плавно понижаться
low_level=58
 
#Температура при которой обороты сразу повышаются до very_high_fan
very_high_level=65
 
#Скорость кулера при достижении very_high_level
very_high_fan=70
 
#Скорость кулера ниже которой обороты уже не регулируются и переключаются в авторежим
min_fan=35
 
#Максимальная скорость кулера
max_fan=100
 
#Пауза циклов проверки
PAUSE=10
 
#Минимальный порог загрузки карт. Если меньше - считается, что майнинг не работает
min_using=50
 
#Количество циклов с ошибкой (или низкой загрузкой карт), при достижении которого происходит reboot
error_level=10
 
#Включение/выключение watchdog. Отключить: watchdog=0. Мониторинг будет происходить, но перезагрузка отключена
watch_dog=1
 
 
 
#########################################################################
count=$(sudo nvidia-smi -i 1 --query-gpu=count --format=csv,noheader,nounits)
error_flag=0
error_count=0
 
while (true)
do
clear
 
    if [ $error_flag -ne 0 ]
    then
        error_count=$(( $error_count + 1 ))
    else
        error_count=0
    fi
 
    if [ $error_count -ne 0 ]
    then
        echo "WARNING!!! Lost Card or using Card low."
        if [ $watch_dog -eq 1 ]
        then
            remain_in_cicle=$(( $error_level - $error_count ))
            remain_in_sec=$(( $remain_in_cicle * $PAUSE ))
            if [ $remain_in_cicle -le 0 ]
                then
                    echo "Reboot NOW!"
                    echo $(date +%d-%m-%Y\ %H:%M:%S) $error_msg >> ~/watchdog.log
                    sudo reboot
                else   
                    echo "Reboot in "$remain_in_sec" sec!"
            fi
        else
            echo "WatchDog disabled"
        fi
    else
        if [ $watch_dog -eq 1 ]
        then
            echo "WatchDog enabled. All OK"
        else
            echo "WatchDog disabled"
        fi
    fi
 
error_flag=0
 
for (( i=0; i < $count; i++ ))
do
    echo
    res_req=0
    fan=$(sudo nvidia-smi -i $i --query-gpu=fan.speed --format=csv,noheader,nounits)
    res_req=$?
    if [ $res_req -ne 0 ]
    then
        echo "Error get data from card "$i
        error_flag=1
        error_msg="Error get data from card "$i
        continue
    fi
    res_req=0
    temp=$(sudo nvidia-smi -i $i --query-gpu=temperature.gpu --format=csv,noheader,nounits)
    res_req=$?
    if [ $res_req -ne 0 ]
    then
        echo "Error get data from card "$i
        error_flag=1
        error_msg="Error get data from card "$i
        continue
    fi
    res_req=0
    using=$(sudo nvidia-smi -i $i --query-gpu=utilization.gpu --format=csv,noheader,nounits)
 
    if [ $res_req -ne 0 ]
    then
        echo "Error get data from card "$i
        error_flag=1
        error_msg="Error get data from card "$i
        continue
    fi
    if [ $using -lt $min_using ]
    then
        error_flag=1
        error_msg="Using card "$using"%"
    fi
 
 
    echo "Using Card "$i": "$using"%."
    control=$(nvidia-settings -q "[gpu:"$i"]/GPUFanControlState" -t)
 
    if [ $temp -ge $high_level ]
    then
        if [ $fan -ge $max_fan ]
        then
            echo "Fan speed "$i": "$fan".Temperature "$i": "$temp" !!!!!!!"
            continue
        fi
        speed=$(( $fan + 2 ))
        if [ $speed -gt $max_fan ]
        then
            speed=$max_fan
        fi
 
        if [ $temp -ge $very_high_level ]
        then
            if [ $fan -lt $very_high_fan ]
            then
                speed=$very_high_fan
            fi
        fi
        echo "Fan "$i": "$fan"   Temperature "$i": "$temp ". Is very high! Increase fan speed to "$speed
        nvidia-settings -a "[gpu:"$i"]/GPUFanControlState=1" > /dev/null 2>&1
        nvidia-settings -a "[fan:"$i"]/GPUTargetFanSpeed="$speed > /dev/null 2>&1
        continue
    fi
 
    if [ $temp -lt $low_level ]
    then
        if [ $fan -le $min_fan ]
                then
            nvidia-settings -a "[gpu:"$i"]/GPUFanControlState=0" > /dev/null 2>&1
            echo "Fan "$i": "$fan"   Temperature "$i": "$temp
            continue
                else
            if [ $control -ne 0 ]
            then
                    speed=$(( $fan - 1 ))
                nvidia-settings -a "[gpu:"$i"]/GPUFanControlState=1" > /dev/null 2>&1
                    nvidia-settings -a "[fan:"$i"]/GPUTargetFanSpeed="$speed > /dev/null 2>&1
                    echo "Fan "$i": "$fan"   Temperature "$i": "$temp ". Is very low! Decrease fan speed to "$speed
                    continue
            fi
        fi
    fi
 
    echo "Fan "$i": "$fan"   Temperature "$i": "$temp
 
done
 
sleep $PAUSE
done

 

 

 

 

 
И вот как это выглядит вживую. На первом скрине - все в порядке. На втором - намеренно выключен майнер и скрипт запустил обратный отсчет до ребута
watch1.thumb.JPG.64d859a1bbdc1dd3577c95062421f8e6.JPGwatch2.thumb.JPG.b276de4c3686b03c0976953b51bcadf5.JPG
 
PS: Теоретически nvidia-smi и nvidia-setting должны работать и без sudo. Однако я делал через sudo, во избежании лишних вопросов со стороны линукса. Поэтому нужно добавить эти команды в файл sudoers
Изменено пользователем 19alexrus71
Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Similar Topics

    • Валютное управление Гонконга объявило о запуске оптовой цифровой валюты

      Валютное управление Гонконга (HKMA) объявило о запуске Project Ensemble, нового проекта цифровой валюты центрального банка для оптовых расчетов (wCBDC), которая призвана оказать поддержку местному рынку токенизации. «Project Ensemble направлен на формирование инновационной инфраструктуры финансового рынка (FMI) Гонконга, которая будет способствовать беспрепятственным межбанковским расчетам на базе токенизированных депозитов в wCBDC», - говорится в анонсе HKMA.   HKMA намерено проте

      в Новости криптовалют

    • Управление энергетической информации США пообещало уничтожить все записи о майнерах

      Совет Техаса по блокчейну (TBC) и майнинговая компания Riot Platform уведомили окружной суд штата, что достигли соглашения с Министерством энергетики США (DOE) и Управлением энергетической информации США (EIA). Управление энергетической информации, по условиям соглашения, прекратило сбор информации о компаниях, занимающихся добычей криптовалют. О новом сборе данных компании будут предупреждены заранее.   В январе Министерство энергетики приступило к сбору данных о майнерах биткоина

      в Новости криптовалют

    • Управление энергетической информации США будет собирать данные о майнинге биткоинов

      Административно-бюджетное управление США (OMB) разрешило Управлению энергетической информации (EIA) требовать от майнинговых компаний подробные данные о расходе и использовании электроэнергии. EIA оформило разрешение OMB в экстренном порядке после того как стало понятно, что сочетание сильного похолодания и возросшей активности майнеров, вызванной ростом цен на биткоины, может вызвать «повышенную неопределенность на рынках электроэнергии». Энергетики утверждают, что «неподконтрольная майнин

      в Новости криптовалют

    • Управление финансового надзора Великобритании мешает Binance вернуться на рынок

      Криптобиржа Binance пытается снова вернуться на рынок Великобритании. Однако ей препятствует Управление финансового надзора (FCA), говорят источники агентства Bloomberg. Крупнейшая криптобиржа мира обращалась к нескольким компаниям, имеющим разрешение британского регулятора на продвижение услуг в сфере криптовалют. Однако пока компании отказываются сотрудничать с Binance.   По информации источников Bloomberg, поводом для отказа стала обеспокоенность, которую выразило ведомство относит

      в Новости криптовалют

    • Регулятор штата Невада собрался ввести внешнее управление в компании Prime Trust

      Отдел финансовых учреждений администрации штата Невада подал прошение в Восьмой судебный окружной суд о назначении временной администрации для проблемного криптокастодианта Prime Trust. В судебном прошении регулятор утверждает, что компания Prime Trust столкнулась с существенными технологическими и финансовыми проблемами. В частности, Prime Trust не имеет достаточных средств для возмещения депозитов клиентов, а также потеряла доступ к активам цифровых кошельков, размещенным у стороннего хра

      в Новости криптовалют

×
×
  • Создать...