Nvidia autofan script mod2|Автоуправление вентиляторами Nvidia mod 2

@Bio можете выложить результат команды cat /run/hive/gpu-detect.json пожалуйста?

All rigs are with this config:
[spoiler]

TARGET_TEMP=68
MIN_FAN=40
CRITICAL_TEMP=85
NO_AMD=0

[/spoiler]

Another log of the 10 gpu nvidia rig. Notice the jumping fan % on GPU0, 6, 7.

[spoiler]

2018-06-18 23:09:16
GPU 0 Nvidia [01:00.0]: 64°C 44%
GPU 1 Nvidia [02:00.0]: 66°C 50%
GPU 2 Nvidia [03:00.0]: 63°C 45%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 62°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 64°C 48%
GPU 7 Nvidia [10:00.0]: 64°C 44%
GPU 8 Nvidia [11:00.0]: 64°C 48%
GPU 9 Nvidia [12:00.0]: 65°C 49%

2018-06-18 23:09:57
GPU 0 Nvidia [01:00.0]: 65°C 47%
GPU 1 Nvidia [02:00.0]: 66°C 50%
GPU 2 Nvidia [03:00.0]: 63°C 45%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 62°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 65°C 47%
GPU 7 Nvidia [10:00.0]: 65°C 47%
GPU 8 Nvidia [11:00.0]: 64°C 48%
GPU 9 Nvidia [12:00.0]: 65°C 49%

2018-06-18 23:10:59
GPU 0 Nvidia [01:00.0]: 65°C 47%
GPU 1 Nvidia [02:00.0]: 65°C 49%
GPU 2 Nvidia [03:00.0]: 63°C 45%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 62°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 65°C 47%
GPU 7 Nvidia [10:00.0]: 64°C 46%
GPU 8 Nvidia [11:00.0]: 64°C 48%
GPU 9 Nvidia [12:00.0]: 65°C 49%

2018-06-18 23:11:40
GPU 0 Nvidia [01:00.0]: 64°C 46%
GPU 1 Nvidia [02:00.0]: 66°C 50%
GPU 2 Nvidia [03:00.0]: 64°C 44%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 62°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 65°C 47%
GPU 7 Nvidia [10:00.0]: 63°C 45%
GPU 8 Nvidia [11:00.0]: 64°C 48%
GPU 9 Nvidia [12:00.0]: 65°C 49%

2018-06-18 23:12:21
GPU 0 Nvidia [01:00.0]: 64°C 46%
GPU 1 Nvidia [02:00.0]: 66°C 50%
GPU 2 Nvidia [03:00.0]: 63°C 43%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 62°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 66°C 50%
GPU 7 Nvidia [10:00.0]: 62°C 40%
GPU 8 Nvidia [11:00.0]: 64°C 48%
GPU 9 Nvidia [12:00.0]: 65°C 49%

2018-06-18 23:13:17
GPU 0 Nvidia [01:00.0]: 62°C 40%
GPU 1 Nvidia [02:00.0]: 65°C 49%
GPU 2 Nvidia [03:00.0]: 63°C 43%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 61°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 66°C 50%
GPU 7 Nvidia [10:00.0]: 62°C 40%
GPU 8 Nvidia [11:00.0]: 65°C 47%
GPU 9 Nvidia [12:00.0]: 65°C 49%

2018-06-18 23:14:58
GPU 0 Nvidia [01:00.0]: 61°C 40%
GPU 1 Nvidia [02:00.0]: 65°C 49%
GPU 2 Nvidia [03:00.0]: 63°C 43%
GPU 3 Nvidia [09:00.0]: 65°C 47%
GPU 4 Nvidia [0a:00.0]: 61°C 40%
GPU 5 Nvidia [0b:00.0]: 63°C 45%
GPU 6 Nvidia [0c:00.0]: 65°C 49%
GPU 7 Nvidia [10:00.0]: 64°C 44%
GPU 8 Nvidia [11:00.0]: 65°C 47%
GPU 9 Nvidia [12:00.0]: 65°C 49%

[/spoiler]

В ченджлоге есть строка “Autofans preview release, can be used with manual configuration in autofan.conf”. На гитхабе “The script was integrated into HiveOS release 0.5-59”. Я обновил все риги, но в папке из инструкции на гите и ютубе ничего нет.

Что-то нигде не наблюдаю файлов с названием “autofun.sh”, “autofan.conf”. Я даже искал через mc по всему диску - ни одного результата. Так что значит теперь встроено, может быть использовано? Как? Где? Или нужно самому скопировать из гитхаба?

@SammoLove он в папке хайва. чтоб заработал автофан, нужно создать файл конфига “/hive-config/autofan.conf”
и добавить в него значения
#settings (autofan.conf file content), default values
#target GPU temperature
TARGET_TEMP=65
#minimal fan speed
MIN_FAN=30
#temperature of stop miner
CRITICAL_TEMP=85
#AMD fan control (AMD control enable-0/AMD control disable-1)
NO_AMD=0

затем сохранить. запустить командой autofan или перезагрузкой.

кстати, скрипт можно гонять пореже раза в 2. и шаг уменьшения скорости вращения тоже можно уменьшить. попробую завтра

да, конечно.

[spoiler]
[
{
“busid”: “00:02.0”,
“name”: “Intel Corporation Device 5902 (rev 04)”,
“brand”: “cpu”
},
{
“busid”: “01:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “02:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “03:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “04:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “05:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “06:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “09:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “0a:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “0b:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “0c:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “0d:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “0e:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
},
{
“busid”: “0f:00.0”,
“name”: “P106-100”,
“brand”: “nvidia”,
“mem”: “6080 MiB”,
“vbios”: “86.06.58.00.3d”,
“plim_min”: “60.00 W”,
“plim_def”: “120.00 W”,
“plim_max”: “140.00 W”
}
]
[/spoiler]

@Bio вся трабла из-за встроенной карты скорее всего

как бы да. но если будут вперемешку стоять радики, то индексы карт будут идти по порядку. а в настройки должны уходить от 0 до (кол-во ндвидий)-1.
и в радики кстати тоже от 0 до (кол-во радиков)-1. там скорее такой же фикс нужен.

да, верно. там конструкция условия не правильная.

он в папке хайва. чтоб заработал автофан, нужно создать файл конфига “/hive-config/autofan.conf”
Не понимаю, правда, как я должен был до этого сам догадаться. Но спасибо вам, что делаете то, что не удосужились сделать разработчики HiveOS за год или сколько там. Они не считают, что эта функция важна. А что тогда вообще важно, если не это? Кошельки, профили разгонов без привязки к конкретной карте - это всё лишний функционал, который только усложняет работу, достаточно было просто дать редактировать батник. А вот регулировка температур - это именно то, что освободит майнера от ежедневного захода два-три раза в день в панель, чтобы исправить настройки вентиляторов с 25-40% до 40-86, в моём случае, и наоборот вечером )))

Итак, первый отзыв - да, скрипт работает, целевая темпатура не превышена, но при этом занижена на некоторых картах. Я пока не понял ваш алгоритм. Там можно было бы снизить обороты. Например, после 20 минут майнинга:
57° 32% - я бы ставил здесь 29% (минимум в конфиг вписал 25).
60° 67% - ОК, установилась целевая температура.
58° 40% - я бы ставил здесь 36%.
54° 53% - я бы ставил здесь 45%.
55° 40% - я бы ставил здесь 30%.
60° 62% - ОК, установилась целевая температура.

по идее нужны две целевые температуры - попав между которыми, обороты кулера перестают меняться. и должно быть некоторое значение оборотов по умолчанию, которые устанавливаются, если агент перестает получать данные.
( /run/hive/gpu-detect.json: No such file or directory )

@SammoLove логика простая - задача держать температуру карты не выше таргета. если температура не изменяется, значит и обороты не меняются. установлен коэффициент, при котором держиться температура всех карт.
имхо на слух определить обороты 29% или 32% не реально, в чем дискомфорт?
рассмотрю ваш пример:
“58° 40% - я бы ставил здесь 36%” - спорно, т.к. потом будет опять кулер сбивать температуру. тут обороты стабильны должны быть и температура не скачет.
“54° 53% - я бы ставил здесь 45%” - по идее должны снижаться, попробуйте уменьшить мин_фан
“55° 40% - я бы ставил здесь 30%” - то же что и в первом случае.
автофан работает у меня на риге и я постоянно мониторю его работу и если возникают корректировки, они вносятся.
на днях будет исправление багов.
по хайву, в целом никто не запрещает редактировать батник и сейчас, система достаточно гибкая и открытая. при наличии желания, все можно изменить под себя.

@Bio обороты перестают меняться при стабилизации температуры карты. до этих пор, коэффициенты подстраиваются под ваши настройки.
к /run/hive/gpu-detect.json обращается только при запуске.
агент получает данные либо из апи майнера, либо из системы. идея в том. чтобы скрипт не дергал нвидиа-сми вместе с агентом, а брал данные полученные агентом т.е. уменьшить нагрузку. на 13 картах нвидиа запросы грузят проц.

@steambot, погонял скрипт несколько часов, пробовал настроить.
Rig2 вручную [b]60’=: 68% 48% 35% 56% 44% 43%. Вот это были бы идеальные установки.[b]
Rig2 со скриптом: Сперва поставил: 69 60 59 60 59 59.
Наблюдение 1: когда на карте температура установилась в 61, то есть на 1’ выше таргета, вместо того, чтобы поднять обороты на 1% (этого было бы вполне достаточно, чтобы вернуть температуру в рамки, знаю по опыту), скрипт сделал +10% больше - с 54% сразу на 64% зачем-то, это даже по звуку было хорошо слышно. После чего температура стала 56’. Нужно регулировать плавнее, сейчас по факту идут бесконечные качели и перелёты.
Через 10 минут:
60° 67%
57° 55%
54° 45%
59° 59%
55° 56%
56° 52%
Наблюдение 2: Скрипт не понижает обороты вентилятолра ниже 55%, из-за чего на некоторых картах температура опускается до 54’ (при заданном минимуме 25%). А это излишний износ вентиляторов и ненужный шум.
Через 20 минут:
62° 74%
57° 55%
54° 55%
58° 63%
56° 54%
56° 56%
Наблюдение 3: На первой карте у меня самая сильная качеля. Вентялятор ежеминутно бросает от 64% и 57’ до 74% и 62’. А установи вы 68% - всё бы устаканилось.

Вопросы:

  1. SLEEP_TIME - это то же, что help называлось DELAY? То есть задержка в секундах. Если да, то ок. Хочу сказать, что для отладки 10 секунд, возможно, норм, но для реальной работы и раз в 30 минут, по идее, должно хватить, температуры не меняются так уже быстро. А то зачем проц загружать, только намайнит меньше )
  2. MIN_TEMP из help, я так понял, упразднён? Я его ставил в 58, но это не подействовало. Если да, то плохо.
  3. “логика простая - задача держать температуру карты не выше таргета”, А я не понимаю вашу логику тоже. Насколько “не выше”? “не выше” понятие слишком растяжимое. А если уже 12’? А он по-прежнему держит 55% оборотов? Условие не выше соблюдено, но можно было бы уже и 25% поставить. И у вас, в конце концов, есть есть одна единственная совершенно опредлённая цель - TARGET_TEMP, только она и должна быть постоянно на всех картах. Это возможно, раз я легко добиваюсь этого вручную.
    Если алгоритм пока “гуляет”, тогда нужно, чтобы было хотя бы как говорит Bio - две предельные температуры, например, ставишь MIN_TEMP = 59, MAX_TEMP = 60, MAX_CRITICAL_TEMP=69, MIN_CRITICAL_TEMP=5, и скрипт держит температуру в предлах желаемых 59-60 пока не выйдет на минимальные или максимальные обороты, вот только тогда уже можно вылезти за эти пределы, и ждать, пока не достигнется CRITICAL_TEMP, после чего временно останавливать майнинг.

Благодарен за старания, но скрипт пока что не практичен.

не все карты умеют держать обороты до 1%. некоторые и на 5% не реагируют.
т.е. 55 и 60 - дают одинаковые обороты на выходе. на каких то радиках так.

sleep_time можно попробовать сделать адаптивным. при старте, когда майнер только запускается, нужно повышать обороты довольно оперативно, а потом раз в несколько минут. например, при температурах близких к целевой, использовать sleep_time*2 или *3

Пожалуйста, не подумайте, что мне лишь бы попридераться. Я просто неравнодушный человек, который не хочет упустить шанс пообщаться с разработчиком в активной фазе отладки программы. Я и сам программист.

Вот ещё два примера того, о чём я говорил выше. Здесь красной рамкой отмечена ещё большая качеля, на другом риге, а сиреневой наоборот - полная стабильность там, где её не должно быть.
“красную” GPU2, как видите, бросает от 69 до 81% из-за несчастного 1’ превышения 60. И это отчётливо слышно в той же комнате. По факту, там достаточно прибавить вентиляторам 1% и температура венулась бы к 60’.
"сиреневая " GPU5, ровно как и GPU3, не регулируется вообще, как будто её 55’ - это и есть TARGET_TEMP или будто 53% - это минимально допустимые обороты в настройках. На самом деле, там нужно было бы поставить 40% и будет точно 60’, и в три раза тише.

@SammoLove “Это возможно, раз я легко добиваюсь этого вручную.” т.е. если сейчас вам дать мой риг вы легко установите все значения нужные с первого раза? не зависимо от алгоритма и окружающей температуры? Откуда знать хватит 1-2% или нет? или начнется перегрев, а вентиляторы тупят? что из этих вариантов хуже?
одно дело когда ты знаешь на ферме все карты, как греются и сколько им надо и выставляешь вручную. а когда несколько ферм по 13 карт, вручную ставить?

по скрину вижу ещё процесс адаптации коэффициентов, они не достигли максимума.

И что странно, когда на моем скрипте была 2 порога температур, многие говорили что нафиг столько параметров, вон в клее тт и всё)))

@Bio идея со слип тайм интересна, но в случае, допустим отвала инет, а потом восстановления, как долго будут восстанавливаться обороты? как адаптировать? тут нужно тестить.

@Bio ну, так усложняя, можно и до PID-регулировки дойти. Это было бы идеально точно, стабильно и своевременно. Но сложноватый алгоритм.
@steambot, почитайте про PID регулировку, и сделайте хотя бы просто P-регулировку. Пропорциональный контроль, это когда чем дальше значение от цели, тем сильнее мы её туда тянем. Например, цель 60’. При 61 нужно дать +1%, а при 65’ нужно дать +8% и т.д. Да, с одного раза я могу не попасть, но программа делает множетсво попыток и всегда перелетает, что вверх, что вниз. Я предложил хотя бы снизить этот размах и сделать его пропорциональным (посмотрите видео про машинку), и она бы начала попадать, а не завывать и затихать каждую минуту.

Несколько интересных пример регулировки систем с обратной связью:


@SammoLove "сиреневая " GPU5, ровно как и GPU3, не регулируется вообще, как будто её 55’ - это и есть TARGET_TEMP или будто 53% - это минимально допустимые обороты в настройках.
так не понятно, стабильность же хорошо? дергается - плохо, не дергается - тоже плохо?)
одни говорят что чем ниже температура тем лучше, другим ферма спать мешает и им надо тише, у третьих вентиляторы изнашиваются. некоторые 65% минимальные обороты ставят в скрипте.
да, идеальный вариант адаптация под каждую карту. но это не так быстро реализовать. тем более без тестов.

но приветствуются все идеи и здравые будут реализованы
просто пришлось переделывать чужой черновик из того что было, поэтому вылазят баги.
@SammoLove если есть строка с текникал инфо - значит идет адаптация.