Jump to content

Recommended Posts

Posted (edited)
Решил поделиться самописанным скриптиком для контроля температуры карт и 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
Edited by 19alexrus71

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Topics

    • Moonone — мониторинг асиков и управление майнингом с автоматизацией

      Что такое Moonone?   Moonone — профессиональная платформа для мониторинга асиков,  автоматизации и управления майнингом, позволяющая в реальном времени контролировать десятки тысяч ASIC-майнеров, автоматически устранять сбои, выполнять массовые операции и управлять сотрудниками и клиентами в едином удобном интерфейсе с полной прозрачностью, аналитикой и высоким уровнем безопасности.       Управляйте питанием майнеров по расписанию  Если у ва

      in Мониторинг

    • Злоумышленник попытался захватить управление протоколом Moonwell

      Неизвестный приобрел около 40 млн токенов управления MFAM кредитного протокола Moonwell, потратив примерно $1800. Это позволило ему собрать кворум и вынести на голосование предложение по управлению протоколом, сообщает издание The Block. Решения в таком случае принимаются держателями токенов. Если предложение будет одобрено, административный контроль над рядом компонентов протокола, включая рынки кредитования, контракт контроллера и ценовой оракул, может перейти к контракту, связанному с ин

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

    • Виталик Бутерин выступил против передачи криптокошельков под управление ИИ

      Доверять искусственному интеллекту контроль над крупными транзакциями или криптокошельками, особенно с большим объемом средств, опасно, заявил сооснователь Эфириума Виталик Бутерин. Так он ответил на пост криптоинвестора, показавшего, как ИИ регистрирует криптокошелек в блокчейне. По мнению Бутерина, следующее поколение криптокошельков действительно будет тесно связано с искусственным интеллектом — что окажется сопряжено с большими рисками. Программист предложил концепцию, которая могла бы

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

    • CryptoQuant: Управление биткоин-рынком перешло к «новым китам»

      Биткоин-рынок перешел под контроль новых крупных инвесторов, владевших более 1000 монет каждый на протяжении последних нескольких месяцев. Эти «новые киты» сильнее всего реагируют на колебания курса первой криптовалюты, заявили эксперты платформы CryptoQuant. Именно эти «новые киты» во время недавних спадов рынка фиксировали максимальные потери. Они оказались вынуждены продавать на падении курса и использовать кратковременные подъемы, чтобы выйти из позиций. У таких инвесторов отсутствует у

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

    • Управление Whatsminer через Телеграм

      Ищу тестеровщиков нового продукта для управления Whatsminer. 3 месяца Premium подписки за обратную связь 🤝 Привет, коллеги!  Я разработчик и сам держу небольшой парк асиков. Решил создать простой и удобный инструмент для управления ватсами, сочетающий функционал Whatsminer tool и удобство Телеграм бота.  Это не просто уведомлялка, а полноценная система управления через Телеграм с Автопилотом (сама рулит режимами питания Low/Normal в зависимости от температуры и вольтажа), монитори

      in Работа

×
×
  • Create New...