Gonka GitHub Mirror · Discussion #816

Gonka Node Manager — автоматическое развёртывание, обновления и мониторинг нод

Отдельная страница дискуссии с русским переводом и параллельным режимом RU / Original с точным сопоставлением предложений.

Как пользоваться: включите RU / Original и кликните по предложению — соответствующее предложение в другой колонке доскроллится и подсветится.
Discussion #816

Gonka Node Manager — автоматическое развёртывание, обновления и мониторинг нод

Оригинал: Gonka Node Manager — Automated Node Deployment, Updates, and Monitoring

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorАвтор
2026-02-26

Резюме

Для работы узлов Gonka в настоящее время требуется ручная установка, настройка и постоянное обслуживание на основе CLI. У опытных операторов первоначальная настройка обычно занимает несколько часов на каждый узел. Для менее опытных участников процесс часто растягивается на один или два дня — или приводит к отказу еще до запуска узла.

Эти трения активно отфильтровывают потенциальных операторов, концентрируя власть среди технически продвинутых пользователей и замедляя органическую децентрализацию.

Gonka Node Manager запрашивает эквивалент 80 000 долларов США из пула сообщества для создания готового к эксплуатации MVP, который автоматизирует развертывание узлов, обновления и мониторинг.

Примечание. Голосование по управлению в сети (расходы пула сообщества) будет представлено как отдельная транзакция после развертывания контракта. В этом выпуске отслеживается техническое предложение и план реализации.

Постановка задачи

Текущая работа узла требует:

Ручная настройка CLI занимает от нескольких часов до нескольких дней на каждый узел

  • Доступ по SSH и настройка на уровне сервера для каждого обновления.
  • Нет автоматического мониторинга или видимости состояния здоровья.
  • Нет оптимизированного процесса подключения узлов ML к сетевым узлам.

Это фактически ограничивает участие узкой группы технически продвинутых пользователей, концентрируя операционную власть и замедляя органическую децентрализацию.

Предлагаемое решение

Gonka Node Manager — унифицированный инструмент, который позволяет операторам узлов:

  • Развертывайте сеть и узлы машинного обучения согласованным и автоматизированным способом.

Поддерживайте актуальность узлов без ручного вмешательства

  • Подключайте и управляйте узлами ML вместе с сетевыми узлами.
  • Наблюдайте за базовым состоянием и работоспособностью узла без входа на серверы.

Система работает поверх предоставленной пользователем инфраструктуры (физической или виртуальной) и естественным образом вписывается в модель децентрализованной сети.

Обзор архитектуры

Компоненты

Основные пользовательские потоки

  • Начальная загрузка узла — пользователь добавляет узел в пользовательский интерфейс → агент устанавливается один раз на сервере → узел доступен
  • Развертывание и обновления — автоматизированы с помощью заранее настроенного пути стабильного выпуска, без вмешательства пользователя.
  • Присоединение к сети/ML — узел ML подключен к сетевому узлу, правила брандмауэра применяются автоматически, подключение проверено.
  • Рабочий процесс с теплым ключом — теплый ключ генерируется локально на узле, доступен только открытый ключ, подпись холодным ключом остается за оператором

Модель безопасности

  • Доступ по SSH остается полностью под контролем оператора — плоскость управления никогда не сохраняет учетные данные и не использует SSH.

На узлах не требуются входящие порты управления

  • Агент выполняет только утвержденные, заранее определенные операции — никаких произвольных удаленных команд.

Пакеты стека проверяются перед применением

Холодные клавиши никогда не покидают устройство оператора

Это сохраняет суверенитет узла и соответствует принципам децентрализации Gonka.

Объем MVP

Включено

Агент узла уровня хоста

Развертывание сети и узлов машинного обучения

  • Автоматические обновления через предварительно настроенный путь стабильного выпуска.

Подключение к сети/ML с автоматизацией брандмауэра

Рабочий процесс генерации теплых ключей и привязки

Базовая отчетность о состоянии и состоянии здоровья

Явно вне области видимости

Расширенные стеки метрик и наблюдаемости

Произвольное удаленное выполнение команд

Выбор версии вручную или несколько каналов обновления

Управление доступом на основе ролей

Автоматизированные механизмы отката (кроме рекомендованных разработчиками Gonka)

Обеспечение обновлений внутри сети

Удаленный административный доступ

План реализации

Этап 1. Установка MVP (45–50 % бюджета)

Результат: узлы сети и машинного обучения могут быть развернуты и работать непрерывно.

  • Агент узла: развертывание, подключение, работоспособность — 160–200 часов.
  • Основные API плоскости управления — 80–100 часов.
  • Архитектура и основной дизайн — 40–60 часов.
  • Минимальный интерфейс — 40–60 часов.

Интеграционное тестирование — 40–60 часов

Этап 2. Автоматические обновления MVP (20–25 % бюджета)

Результат: работающие узлы обновляются автоматически.

  • Версионирование и подписи пакета — 40–60 часов.
  • Логика обновления агента — 40–60 часов.
  • Координация обновления плоскости управления — 20–30 часов.
  • Тестирование обновлений — 20–30 часов.

Этап 3 — Мониторинг MVP (15–20 % бюджета)

Результат: операторы могут наблюдать за состоянием и работоспособностью узла.

  • Отчет о состоянии агента — 30–40 часов.

Агрегация статуса бэкенда — 20–30 часов

  • Просмотр статуса пользовательского интерфейса — 40–50 часов.

Этап 4 — Стабилизация и технический долг (10–15% бюджета)

Результат: стабильный, документированный, готовый к производству MVP.

Исправления ошибок и крайние случаи

Усиление безопасности

Документация

Финальное тестирование

Общие предполагаемые трудозатраты: 650–880 инженерно-часов.

Бюджет

Запрошено: эквивалент 80 000 долларов США (единовременно, из пула сообщества)

Финансирование выделяется поэтапно, в зависимости от завершения этапа. Перерасход средств команда покрывает за свой счет — никаких запросов на компенсацию обратной силы не подается.

Подотчетность

  • Весь прогресс отслеживается в одном общедоступном репозитории GitHub.
  • Progress.md обновляется после каждого этапа с письменным резюме, результатами и ссылками на артефакты.

Код, документация, примечания к выпуску и демонстрационные материалы, зафиксированные на каждом этапе

  • URL-адрес репозитория объявляется сразу после утверждения предложения.

Ожидаемый результат

Упрощенная регистрация для новых операторов узлов

Увеличенное количество независимых узлов

Сокращение времени простоя, вызванного ручной настройкой

  • Более сильная и устойчивая децентрализация сети Gonka.
Aktum1 avatar
Aktum1CollaboratorCollaborator
2026-02-27

Эй! Вы проверили, что уже построили эти ребята в этом направлении? https://gonka.gg/node-setup

Что вы думаете об их реализации?

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Наше предложение фокусируется на другом наборе эксплуатационных требований:

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

Централизованная видимость. Цель состоит в том, чтобы предоставить панель мониторинга, на которой состояние сети и узлов ML можно отслеживать в одном месте, а не проверять журналы отдельных серверов.

Логика оркестровки: мы автоматизируем правила подключения и брандмауэра, необходимые для присоединения узлов ML к сетевым узлам, что в настоящее время включает несколько шагов вручную.

По сути, в то время как сценарий управляет процессом развертывания, наш инструмент предназначен для автоматического управления долгосрочной работой узла и его подключением.

Aktum1 avatar
2026-02-27

Также обратите внимание на бота Telegram для мониторинга узлов: @GonkaHubBot.

Aktum1 avatar
2026-02-27

Я уже месяц пытаюсь настроить свой узел.

Это не совсем простая установка — 8 × A100 40 ГБ. После одного из недавних изменений кода использование этих графических процессоров было практически ограничено. Но я уже оплатил сервер на месяц, поэтому теперь использую его для полного тестирования и доводки процесса развертывания ноды.

Специально для этого я даже оформил платную подписку на Cursor. Очень надеюсь, что мне удастся заставить все работать правильно.

Если мне это удастся, я обязательно поделюсь всем опытом с другими.

Тем не менее, я не совсем уверен, можно ли реально превратить настройку узла в «услугу в один клик». Существует так много крайних случаев и нюансов — может ли сервис действительно учитывать все это?

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

Но я могу ошибаться.

В конце концов, мы, по сути, пытаемся решить одну и ту же проблему, просто используя разные инструменты.

Кстати, весь свой путь я документирую в Базе знаний: https://gonka-data-base.gitbook.io/gonka-data-base-en/hosts/node.-testing

Возможно, что-то из этого может быть полезно для вашего проекта.

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Задача «одного щелчка» — это именно то, почему наше предложение переходит от простых сценариев к архитектуре Node Agent.

Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для управления средой, стеками Docker и подключением. Цель этой архитектуры — предоставить систему, учитывающую нюансы инфраструктуры и поддерживающую работу узлов посредством обновлений, а не просто выполняющую первоначальную установку.

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

Mayveskii avatar
2026-03-05
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов.

Унифицированный стек операторов: доставка, контроль, воспроизводимость. Сочетание Node Manager (#816 (https://github.com/gonka-ai/gonka/discussions/816)) и экспортера Prometheus (#840 (https://github.com/gonka-ai/gonka/discussions/840)) с тонким слоем оркестрации (например, Воздушный поток, опционально n8n) образует единый стек, который не такой тяжелый, но удовлетворяет основные потребности оператора: доставка, контроль и воспроизводимость. Доставка: развертывание и обновление узлов через Node Manager; нет необходимости держать каждый хост в руках. Контроль: одинаковые метрики (высота блока, вес POC, статус) для всех через экспортер + Prometheus + Grafana — хосты видят то, что видим мы. Воспроизводимость: Airflow превращает процедуры в группы обеспечения доступности баз данных: проверки работоспособности, окна обновления, создание отчетов, очистка и даже шаги в стиле билетов/рабочих процессов (например, «после оповещения → создать задачу → запустить исправление»). Любой сценарий, который вы можете написать, становится повторяемым и контролируемым. Таким образом, вы получаете одно место для «как мы развертываем», «как мы отслеживаем» и «как мы реагируем и перезапускаем». Стек модульный: минимальный — экспортер + Прометей + Графана; Node Manager и Airflow (и опционально n8n для битов, управляемых событиями) добавляются сверху для тех, кому нужна автоматизация и воспроизводимость. Стоит делать? Да. Он напрямую решает проблему «хосты не могут легко настраивать и контролировать, как мы»: те же инструменты, та же видимость и та же возможность кодировать и воспроизводить сценарии вместо специальных SSH и одноразовых сценариев. Если сообщество хочет инвестировать в опыт операторов и воспроизводимость, это конкретный способ добиться этого.

Mayveskii avatar
2026-03-06
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов. Унифицированный стек операторов: доставка, контроль, воспроизводимость. Сочетание Node Manager (#816 (https://github.com/gonka-ai/gonka/discussions/816)) и экспортера Prometheus (#840 (https://github.com/gonka-ai/gonka/discussions/840)) с тонким слоем оркестрации (например, Воздушный поток, опционально n8n) образует единый стек, который не такой тяжелый, но удовлетворяет основные потребности оператора: доставка, контроль и воспроизводимость. Доставка: развертывание и обновление узлов через Node Manager; нет необходимости держать каждый хост в руках. Контроль: одинаковые метрики (высота блока, вес POC, статус) для всех через экспортер + Prometheus + Grafana — хосты видят то, что видим мы. Воспроизводимость: Airflow превращает процедуры в группы обеспечения доступности баз данных: проверки работоспособности, окна обновления, создание отчетов, очистка и даже шаги в стиле билетов/рабочих процессов (например, «после оповещения → создать задачу → запустить исправление»). Любой сценарий, который вы можете написать, становится повторяемым и контролируемым. Таким образом, вы получаете одно место для «как мы развертываем», «как мы отслеживаем» и «как мы реагируем и перезапускаем». Стек модульный: минимальный — экспортер + Прометей + Графана; Node Manager и Airflow (и опционально n8n для битов, управляемых событиями) добавляются сверху для тех, кому нужна автоматизация и воспроизводимость. Стоит делать? Да. Он напрямую решает проблему «хосты не могут легко настраивать и контролировать, как мы»: те же инструменты, та же видимость и та же возможность кодировать и воспроизводить сценарии вместо специальных SSH и одноразовых сценариев. Если сообщество хочет инвестировать в опыт операторов и воспроизводимость, это конкретный способ добиться этого.
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов.

Одна конкретная цифра, объясняющая, почему развертывание специализации модели имеет значение для уровня кэша в PR № 859 (https://github.com/gonka-ai/gonka/pull/859):

hit_rate = повторная_фракция × (1/M) × (1 — потоковая_фракция)

M=571 (Qwen3-32B, общий для 571 узла): hit_rate = 0,000473 M=1 (уникальная модель для каждого узла через диспетчер узлов): hit_rate = 0,270

Множитель специализации: улучшение скорости попадания в кэш в 571 раз. При M=1 достигается ограничение MaxWeightFractionBps (+30 % веса эпохи).

Схема развертывания Node Manager «одна модель на узел» является необходимым условием инфраструктуры для того, чтобы экономика кэша работала в масштабе сети. Эти два предложения дополняют друг друга: менеджер узлов создает условия, семантический кеш фиксирует вознаграждение.

Источник данных: топология живой сети, gonka.gg/api/public (1282 узла ML, измерено 5 моделей, эпоха 190).

andrey055 avatar
andrey055CollaboratorCollaborator
2026-03-01

В обсуждении Telegram некоторые люди говорят, что это улучшение, возможно, сейчас не очень актуально. Кажется, сейчас есть более насущные задачи, тем более, что альтернативные решения уже существуют. Однако нам бы очень не хотелось потерять ваше желание строить проекты для Гонки.

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

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Вы упомянули существующий список задач. Мы были бы рады взглянуть — не могли бы вы указать нам, где его можно найти?

tcharchian avatar
tcharchianMaintainerMaintainer
Вы упомянули существующий список задач. Мы были бы рады взглянуть — не могли бы вы указать нам, где его можно найти?

Недавно мы опубликовали три новых предложения в обсуждениях GitHub и будем рады любым отзывам.

Масштабирование вывода № 801 (https://github.com/gonka-ai/gonka/discussions/801)

Многомодельный PoC № 800 (https://github.com/gonka-ai/gonka/discussions/800)

Если у вас есть мысли, проблемы или идеи по улучшению, поделитесь ими прямо в комментариях.

Кроме того, я открыл дополнительное обсуждение, чтобы выделить три ключевые области, где необходима помощь #817 (https://github.com/gonka-ai/gonka/discussions/817). Они еще не сформулированы как отдельные задачи, но указывают на три проблемы, в которых ваше участие, точка зрения и предложения будут чрезвычайно ценны.

Исследование медленных узлов № 818 (https://github.com/gonka-ai/gonka/issues/818)

рост/обрезка application.db #819 (https://github.com/gonka-ai/gonka/issues/819)

Кроме того, вы можете отфильтровать проблемы с помощью метки «доступно» https://github.com/gonka-ai/gonka/issues?q=is%3Aissue%20state%3Aopen%20label%3Aup-for-grabs и посмотреть, есть ли какие-либо открытые задачи, у которых нет правопреемника.

Подробнее о баунти-программе: https://gonka.ai/FAQ/#bounty-program

SegovChik avatar

Итак, вот рабочее решение с некоторыми ограничениями (все еще в разработке, поэтому текущий функционал ограничен предоставлением сети + mlnode на одном сервере) https://github.com/inc4/gonka-nop/releases/tag/v0.1.8-rc1. Загрузите двоичный файл, выполните настройку ./gonka-nop и вот мы здесь.

SegovChik avatar

и вот наша дорожная карта того, что было сделано.

Этапы реализации

Этап 1: Базовая платформа CLI ✅ ЗАВЕРШЕНО

1.1 Строительные леса проекта

Инициализируйте go.mod с зависимостями

  • Создайте точку входа cmd/gonka-nop/main.go.
  • Создайте внутренний/cmd/root.go с помощью команды Cobra root.

Добавить версию, статус, сброс, заглушки команд gpu-info

Создайте внутренний/cmd/setup.go (команда установки с флагами)

1.2 Утилиты пользовательского интерфейса (необходимы для этапов)

Создайте внутренний/ui/output.go (цветные сообщения: Информация, Успех, Предупреждение, Ошибка)

Создайте внутренний/ui/spinner.go (обертку счетчика прогресса)

  • Создайте внутренний/ui/prompt.go (оболочку опроса для интерактивных подсказок).

1.3 Управление состоянием

Создайте внутренний/config/state.go (структуру состояния)

  • Реализуйте методы Save() и Load().

1.4 Фазовая система

Создайте внутренний/фазы/phase.go (интерфейс фазы + бегун)

  • Создайте макеты фаз для демонстрации: 01_prequires.go (Docker, проверка CUDA — макет) 02_gpu_detection.go (обнаружение графического процессора — макет) 03_network_select.go (подсказка выбора сети) 04_key_management.go (ключевой рабочий процесс — макет) 05_config_generation.go (создание конфигураций — макет) 06_deploy.go (составление докера) - посмеялся)

01_prequires.go (Docker, проверка CUDA — высмеивается)

02_gpu_detection.go (обнаружение графического процессора — высмеивается)

03_network_select.go (подсказка выбора сети)

04_key_management.go (ключевой рабочий процесс — высмеивается)

05_config_generation.go (генерация конфигов — высмеивается)

06_deploy.go (составление докера — высмеивается)

1.5 Интеграция и демонстрация

Команда настройки проводки к фазовращателю

Проверьте полную компиляцию CLI (перейдите к сборке ./...)

Запустите демо: настройка gonka-nop (показывает полный процесс)

1.6 Команда состояния

Создайте внутренний/status/status.go (структура NodeStatus, функции выборки)

Создайте внутренний/status/display.go (форматированный вывод)

  • Внедрить 3 раздела: Обзор, Блокчейн, MLNode.

Поддержка флага --mocked для демо-версии

Реализуйте команду gpu-info с помощью --mocked

Этап 2: Покрытие тестированием (сначала тесты) 🔄 В ПРОГРЕССЕ

Напишите тесты для существующего кода перед добавлением новых функций. Цель: охват 70%+.

2.1 Тестирование пакетов конфигурации (цель: 90%+)

state_test.go — NewState, Save, Load, Reset, MarkPhaseComplete

Добавить тесты крайних случаев (неверный JSON, ошибки разрешений)

2.2 Пакетные испытания этапов (цель: 80%+)

gpu_detection_test.go — рекомендацияConfig, FormatGPUSummary

preреквизиты_test.go — имитация проверок Docker/Nvidia

config_generation_test.go — проверка вывода шаблона

Phase_runner_test.go — поток выполнения фазы

2.3 Тестирование статусных пакетов (цель: 70%+)

status_test.go — имитация HTTP-ответов, проверка синтаксического анализа

display_test.go — форматирование вывода

2.4 Тестирование пакетов пользовательского интерфейса (цель: 50%+)

output_test.go — форматирование цвета

spinner_test.go — базовый функционал

Prompt_test.go — имитация ответов на опрос (сложнее протестировать)

2.5 Интеграционные тесты

интеграционный тест cmd/setup с имитацией фаз

Сквозной тест на сохранение состояния

Этап 3: графический процессор и необходимые условия (РАСШИРЯЕТСЯ в зависимости от анализа чата) ✅ ПРАКТИЧЕСКИ ЗАВЕРШЕНО

Реальное обнаружение системы заменяет ложные реализации. Проверено в основной сети (8x A100 SXM4 80 ГБ).

3.1 Обнаружение графического процессора (настоящая nvidia-smi) ✅ ЗАВЕРШЕНО

Разобрать nvidia-smi --query-gpu=index,name,memory.total,driver_version,pci.bus_id --format=csv

  • Определить архитектуру графического процессора (sm_80=A100, sm_86=A40/RTX3090, sm_89=L40/RTX4090, sm_90=H100/H200, sm_100=B200/B300, sm_120=RTX5090) — GPUArchFromName() в gpu_parser.go
  • Обнаружение топологии NVLink/PCIe — на основе имени (H100/H200/A100 = NVLink, другие = PCIe). Полная версия nvidia-smi topo -m еще не реализована.

Предупреждение о пропускной способности PCIe для установок с несколькими графическими процессорами без NVLink

Автоматический выбор тега изображения MLNode на основе архитектуры (стандартный/блэквелл) — selectMLNodeImage()

3.2 Проверка Docker и среды выполнения ✅ ЗАВЕРШЕНО

Проверка доступности и версии Docker — ParseDockerVersion() в gpu_parser.go

Обнаружение NVIDIA Container Toolkit ( nvidia-ctk --version )

  • Проверка CUDA внутри контейнера Docker (docker run --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi) — checkCUDAInDocker()

Проверка Docker Compose v2 (версия docker Compose) — ParseDockerComposeVersion()

3.3 Установка и проверка драйвера NVIDIA ✅ ПОЛЬЗОВАТЕЛЬНО ЗАВЕРШЕНА

Определить состояние драйвера: не установлен/установлен/несоответствие версии — checkNVIDIADriver()

  • Предварительная проверка безопасности: состояние безопасной загрузки, доступные заголовки ядра, совместимость с дистрибутивом.
  • Предлагайте автоматическую установку с подтверждением пользователя — installNVIDIADriver() через apt.
  • Установите Fabric Manager ( nvidia-fabricmanager-570 ), если обнаружен многопроцессорный NVLink — проверьтеFabricManager() с автоматическим запуском + приглашение на установку.
  • Сравните версию библиотеки пользовательского пространства с версией модуля ядра и версией Fabric Manager — трехсторонняя проверка согласованности в checkDriverConsistency()
  • Обнаружение пакета автоматических обновлений и предупреждение об автоматических обновлениях драйверов NVIDIA — предлагает удерживать apt-mark nvidia-driver-*
  • Проверьте совместимость версии CUDA с обнаруженным драйвером.
  • Предупреждать о необходимости перезагрузки после установки/обновления модуля ядра.

3.4 Предварительные требования к системе ✅ ПРАКТИЧЕСКИ ПОЛНАЯ

Обнаружение дистрибутива Linux (Ubuntu, Debian, CentOS, Amazon Linux) — ParseOSRelease() в gpu_parser.go

  • Предварительная проверка дискового пространства (предупреждение, если свободно < 250 ГБ) — ParseDiskFreeGB() , ParseLsblkJSON()

Автоматическая установка NVIDIA Container Toolkit (с подтверждением пользователя)

Конфигурация среды выполнения Docker (nvidia-ctk runtime configure --runtime=docker)

Проверка доступности портов (5000, 8000, 26657 внешние; 5050, 8080, 9100, 9200 внутренние)

Этап 4: Конфигурация (РАСШИРЯЕТСЯ для каждого анализа чата) ✅ ПРАКТИЧЕСКИ ЗАВЕРШЕНА

Создавайте готовые к использованию конфигурации с настройками безопасности и производительности по умолчанию, полученными от валидаторов. Проверено при развертывании в основной сети.

4.1 Алгоритм рекомендации TP/PP ✅ ЗАВЕРШЕНО

Расчет TP/PP с учетом модели (Qwen3-235B, Qwen3-32B, QwQ-32B) — рекомендуется Config() с 4-уровневой логикой VRAM

Рекомендация по использованию памяти gpu: 0,88–0,94 на основе запаса видеопамяти (НЕ 0,99)

расчет max-model-len на основе оставшейся видеопамяти после загрузки модели

  • Автоматическое добавление --kv-cache-dtype fp8 для конфигураций с ограниченным объемом видеопамяти (например, 8x A100 40 ГБ с 235 ГБ)
  • PP не установлен в аргументах vLLM — бегун MLNode автоматически рассчитывает на основе графических процессоров/TP. Нет --quantization fp8 (вызывает ошибки выравнивания MoE)

4.2 Генерация node-config.json ✅ ЗАВЕРШЕНО

Генерация на основе шаблона с помощью go:embed

проверка поля хоста (без префикса http:// – распространенная ошибка в чате)

Поле оборудования заполняется автоматически при обнаружении графического процессора

Рекомендация max_concurrent на основе конфигурации графического процессора

Выбор модели с явным объявлением (требуется для PoC v2)

4.3 Генерация config.env ✅ ЗАВЕРШЕНО

На основе шаблона с проверенными полями

Переменная среды MODEL_NAME (обязательна после версии 0.2.8)

VLLM_ATTENTION_BACKEND = FLASHINFER для ВСЕХ архитектур (стандарт 3.0.12+, старое правило FLASH_ATTN устарело)

4.4 Генерация docker-compose.yml ✅ ЗАВЕРШЕНО

На основе шаблона с помощью go:embed

  • Безопасность портов: привяжите внутренние порты к 127.0.0.1 (5050, 8080, 9100, 9200).

Публичные порты: 5000 (P2P), 8000 (API через прокси), 26657 (RPC — через прокси только после защиты от DDoS)

Выбор тега изображения MLNode на основе определения архитектуры графического процессора

4.5 Настройки защиты от DDoS по умолчанию ✅ ЗАВЕРШЕНО

Конфигурация прокси-сервиса: GONKA_API_BLOCKED_ROUTES=обучение poc-пакетов

Конфигурация прокси-сервиса: GONKA_API_EXEMPT_ROUTES=вывод чата

  • По умолчанию: DISABLE_CHAIN_API=true, DISABLE_CHAIN_RPC=true, DISABLE_CHAIN_GRPC=true.

Порт RPC (26657), доступный только через прокси, не доступный напрямую

4.6 Настройка синхронизации и сокращения ✅ ЗАВЕРШЕНО

  • Автоматическая настройка persist_peers в config.toml с заведомо исправными узлами.
  • Создайте app.toml с обрезкой: custom, Keep-recent=1000, интервал=100.
  • Установите GENESIS_SEEDS и SEED_API_URL для надежных конечных точек.

Включить синхронизацию состояния по умолчанию ( SYNC_WITH_SNAPSHOTS=true )

Этап 5: Развертывание (РАСШИРЯЕТСЯ в зависимости от анализа чата) ✅ ПРАКТИЧЕСКИ ЗАВЕРШЕНО

Развертывайте контейнеры с реальной оркестровкой, усилением безопасности и мониторингом синхронизации. Проверено в основной сети + тестовой сети.

5.1 Оркестровка Docker Compose ✅ ЗАВЕРШЕНО

Обработка нескольких файлов (прозрачный -f docker-compose.yml -f docker-compose.mlnode.yml )

  • Автоматический источник config.env + sudo -E для распространения переменных среды — внутренний/docker/env.go + compose.go

Получение изображения с отображением прогресса — получение файла Docker Compose

Запуск контейнера с упорядоченными зависимостями — сначала сетевой узел, затем узел ML

5.2 Настройка брандмауэра ⚠️ (из чата: Docker обходит UFW)

Обнаружение поведения iptables Docker

  • Настройте правила цепочки DOCKER-USER: Разрешить установленные соединения. Разрешить общедоступные порты (5000, 8000). Занести в белый список известные исходные узлы Gonka. УДАЛИТЬ все остальные входящие соединения в контейнеры Docker.

Разрешить установленные соединения

Разрешить общедоступные порты (5000, 8000)

Белый список известных аналогов семян Gonka

  • УДАЛИТЕ все остальные входящие контейнеры Docker.
  • Предложите интеграцию iptables-persistent для сохранения правил.

Проверка разрешения IPv4/IPv6 для конечной точки работоспособности vLLM (предотвращение цикла перезапуска)

5.3 Управление ключами (оба рабочих процесса) ✅ ЗАВЕРШЕНО

Быстрый рабочий процесс: сгенерируйте все ключи на сервере — 04_key_management.go

  • Безопасный рабочий процесс: принять публичный ключ учетной записи, сгенерировать консенсус + ключи ML — флаг --account-pubkey

автоматизация предоставления грантов-ml-ops-permissions — 07_registration.go

Руководство по резервному копированию ключей

5.4 Загрузка веса модели ✅ ЗАВЕРШЕНО

Загрузка модели HuggingFace с индикатором выполнения — отдельная команда загрузки модели gonka-nop + этап развертывания

  • Возобновить поддержку прерванных загрузок — использует запуск Docker с монтированием HF_HOME.

Проверка SHA256 после загрузки

  • Предварительная загрузка в HF_HOME перед запуском контейнера.

5.5 Проверка работоспособности и мониторинг синхронизации ✅ ЗАВЕРШЕНО

Проверка работоспособности контейнера (все работающие службы) — опросы /admin/v1/setup/report

  • Ход синхронизации блокчейна с отображением задержки блока — опрашивает Tendermint RPC /status, показывает прогресс высоты блока, тайм-аут 30 минут

Дождитесь завершения синхронизации перед регистрацией (настраиваемый тайм-аут)

Проверка доступности порта (доступны внешние порты) — запланирована проверка доступности PUBLIC_URL

Этап 6: Операции ⚠️ НОВИНКА (из чата: день-2 — 90 % времени оператора)

Команды после развертывания для текущего управления узлами. Весь этот этап отсутствовал в первоначальном плане и основан на анализе чата валидатора, который показывает, что операторы тратят большую часть времени на операции, а не на настройку.

Статус 6.1 гонка-ноп (реальная реализация) ✅ ЗАВЕРШЕНО

  • Блокчейн: высота блока, статус синхронизации, блоки позади, флаг catch_up.
  • Эпоха: текущая эпоха, статус участия, вес, процент промахов.
  • Эпоха: вес PoC, распределение временных интервалов, количество выводов, предстоящая эпоха, статус заявки на вознаграждение.
  • MLNode: загруженная модель, загрузка графического процессора, статус PoC, предполагаемое и текущее несоответствие, актуальность статуса.
  • Конфигурация узла: общедоступный URL-адрес, URL-адрес обратного вызова PoC, начальный API, версия API, задержка по высоте, план обновления.
  • Безопасность: холодный ключ, теплый ключ, разрешения ML.
  • Контейнеры: работающее/остановленное/неработоспособное состояние, полученное на основе проверок настройки/отчетов.
  • Проверка доступности PUBLIC_URL — HTTP GET <public_url>/health , отчет PASS/FAIL с подробностями об ошибке. Критично: несоответствие порта или неправильный зарегистрированный URL = валидаторы не могут проверить доказательства PoC = узел никогда не набирает вес. Узнал из отладки тестовой сети (11 февраля 2026 г.).
  • Сеть: количество одноранговых узлов (заблокировано — Tendermint RPC 26657 не доступен хосту при стандартных развертываниях)

Временная шкала частоты промахов (визуализация зелеными/красными точками)

Обновление 6.2 gonka-nop (безопасное развертывание) ✅ ЗАВЕРШЕНО (реализовано как M9.2)

  • Проверьте timeslot_allocation через API администратора, чтобы найти безопасное окно.

Отключить узел ML через POST /admin/v1/nodes/:id/disable

Извлеките новый образ контейнера с прогрессом

Обновить тег изображения в файле docker-compose

Воссоздать контейнер ( --no-deps --force-recreate )

Дождитесь завершения загрузки модели (отслеживайте журналы)

  • Повторно включите узел ML через POST /admin/v1/nodes/:id/enable.

Проверка работоспособности после обновления

Отличить автоматическое обновление (Космовизор: node, api) от ручного (mlnode, proxy)

6.3 сброс gonka-nop (очистка данных блокчейна)

  • Сохраняйте ключи (tmkms, учетную запись, ML) и файлы конфигурации.

Запустите выведенный тендерминт unsafe-reset-all --keep-addr-book внутри контейнера

  • Удалите каталог update-info.json и космовизор/.

Перезапустить контейнер узла

Отслеживание хода синхронизации после сброса

6.4 очистка gonka-nop (восстановление дискового пространства)

Рассчитать текущее использование диска (.inference/data/, резервные копии космовизора)

  • Удалите старые каталоги резервных копий Космовизора.

Сообщить об освобожденном месте

  • Рекомендовать настройки обрезки, если они не настроены.

6.5 gonka-nop ml-node (обертка API администратора) 🔄 ЧАСТИЧНАЯ

Список ml-узлов — GET /admin/v1/nodes (статус, распределение, модель, оборудование, вес PoC)

Добавление ml-узла — POST /admin/v1/nodes (интерактивно или из конфигурации)

Обновление ml-узла — PUT /admin/v1/nodes/:id (модель, TP/PP, max_concurrent)

ml-node включить/отключить - POST /admin/v1/nodes/:id/enable|disable

  • Статус ml-узла — подробная информация: хост, порты, модель+аргументы, оборудование, статус/предполагаемое несоответствие, распределение эпохи, вес PoC, временные интервалы, актуальность статуса.

6.6 модель гонка-ноп (управление моделью)

Переключение модели через API администратора (PUT /admin/v1/nodes/:id)

Показать текущую модель и модель следующей эпохи

  • Предупреждать, что изменения модели применяются только в следующую эпоху.

Проверка совместимости модели с конфигурацией графического процессора

6.7 Загрузка двоичного файла перед обновлением

  • Загрузите двоичные файлы выведенных и децентрализованных API из выпусков GitHub.

SHA256-проверка

  • Поместить в правильный каталог обновления Космовизора.

Проверьте разрешения (chmod +x)

Этап 7: Регистрация и ончейн

7.1 Процесс регистрации ✅ ЗАВЕРШЕНО

submit-new-участник с правильными флагами (ключ валидатора, идентификатор цепочки, URL-адрес узла)

Автоматическое получение консенсуса_pubkey из API отчета о настройке

Grant-ml-ops-permissions для ключа ML

  • Проверьте формат PUBLIC_URL (без префикса http://).

7.2 Проверка PoC

Тестировать конечную точку PoC ( /api/v1/pow/init/generate )

Убедитесь, что модель загружена и отвечает

Проверьте участие в эпохе после регистрации

7.3 Управление вознаграждениями

gonka-nop претензии-вознаграждения - Упрощенный поток заявок

Получить начальное значение из конфигурации API администратора

Принудительное требование через /admin/v1/claim-reward/recover для пропущенных эпох

Показать историю невостребованных наград

7.4 Управление

gonka-nop voice — упрощенное управление голосованием

Показать активные предложения

Голосуйте с помощью ключа учетной записи

Этап 8: Продвинутый уровень и полировка 🔄 В ПРОГРЕССЕ

Пакетное управление несколькими узлами (обновление/статус на более чем 10 узлах)

Визуализация временной шкалы частоты промахов (точечное отображение ОК/пропущенных ошибок)

Совместимость с облачными провайдерами (переназначение портов Vast.ai, голое железо GCore)

  • Поддержка русского языка для сообщений об ошибках и подсказок.
  • Интеграция мониторинга (экспортер Prometheus + централизованная архитектура push-уведомлений) — см. M8.1.

Интеграция сравнительного анализа производительности (compressa-perf)

Механизм самообновления двоичного файла gonka-nop

Автоматизация документирования и выпуска

8.1 Централизованный мониторинг (Ansible) ✅ ЗАВЕРШЕНО

Включенный push-мониторинг для валидаторов Gonka. Развертывание на основе Ansible в подкаталоге ansible/.

Архитектура: Exporter + Prometheus на валидаторе → push_write → Central Prometheus + Grafana (управляется inc4). На узлах валидатора не открыты входящие порты.

Компоненты построены:

  • роль gonka-exporter — объединяет экспортер votkon (28 метрик из 5 конечных точек API), локально создает образ Docker, развертывает через компоновку
  • роль prometheus — Prometheus с условным удаленным_записью, правилами оповещений (11 правил в 2 группах), --web.enable-remote-write-receiver для центрального сервера

роль alertmanager — условные уведомления Telegram/Discord/Slack, серьезность на основе маршрута

  • роль grafana — автоматически предоставляемые источники данных + 2 панели мониторинга (обзор парка, глубокое погружение в узел)

playbooks/deploy-all.yml — полный стек для центрального сервера (экспортер + prometheus + alertmanager + grafana)

playbooks/add-node.yml — добавить внутренний валидатор с помощью Remote_write в центральный

  • playbooks/client-deploy.yml — автономный для внешних валидаторов (жестко закодированный центральный URL-адрес, проверяет предварительные условия, проверяет работу удаленной записи)

playbooks/client-teardown.yml — чистое удаление мониторинга из валидатора

инвентарь/client.yml.example — шаблон для внешних операторов

  • README.md — ориентированная на оператора документация со схемой архитектуры, таблицей метрик, правилами оповещений, гарантиями безопасности.
  • .gitignore — защищает файлы инвентаризации клиента от случайных коммитов.

Панели мониторинга:

  • Обзор флота ( gonka-fleet-overview ) — обзор нескольких узлов со статусом, задержкой блока, частотой промахов, весом PoC, графическим процессором, доходом.
  • Глубокое погружение узла ( gonka-node-deep-dive ) — подробности по каждому узлу с помощью переменной шаблона $instance.

Правила оповещения (11):

  • Критические: GonkaMissRateHigh (>20%), GonkaNodeFailed, GonkaBlockLagCritical (>200 блоков), GonkaNodeStopped, GonkaExporterDown.
  • Предупреждение: GonkaBlockLag (>50), GonkaCatchingUp, GonkaGPUUtilizationHigh (>95%), GonkaZeroWeight, GonkaZeroInferences, GonkaStatusMismatch.

Этап 9: Управление версиями ✅ ЗАВЕРШЕНО (3/4 задачи, предварительная раздача отложена)

Динамические версии образов и безопасная обработка обновлений. Решает проблему «курицы и яйца», когда NOP жестко закодирует версии образа, которые устаревают после обновлений цепочки.

Источник истины: репозиторий GitHub gonka-ai/gonka.

Основная сеть: основная ветка → Deploy/join/docker-compose.yml + docker-compose.mlnode.yml

Тестовая сеть: тестовая сеть/основная ветка → те же пути

9.1 Получение версии динамического изображения ✅ ЗАВЕРШЕНО

Структура ImageVersions с тегами для каждой службы (узел, API, tmkms, прокси, мост, mlnode, nginx)

  • FetchImageVersions() извлекает необработанные URL-адреса GitHub во время установки.
  • ParseComposeImageVersions() извлекает теги из YAML-файла (обрабатывает комментарии, выводы мостового дайджеста, прокси против прокси-ssl)
  • Откат к жестко запрограммированным версиям, когда GitHub недоступен.

Фаза выбора сети извлекает и заполняет состояние

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

Обновление 9.2 gonka-nop (обновление безопасной версии) ✅ ЗАВЕРШЕНО

  • Загрузите последние версии с GitHub и сравните с текущими файлами компоновки.

Показывать разницу изменений версий перед применением

  • Для служб обновления вручную (прокси, мост, mlnode): обновите теги изображений в файлах компоновки.
  • Безопасное развертывание MLNode: проверьте распределение временных интервалов → отключить → извлечь → воссоздать → дождаться загрузки модели → включить.
  • Для сервисов, управляемых Cosmovisor (узел, API): сообщите пользователю об этих автоматических обновлениях в блоке обновления цепочки.

--check флаг, чтобы показывать только доступные обновления без применения

9.3 Предварительная раздача обновления «Космовизора» (во время развертывания)

  • Предложения по управлению цепочкой запросов через REST API (/cosmos/gov/v1/proposals).

Обнаружение ожидающих или примененных планов обновления

  • Предварительная загрузка выведенных и децентрализованных двоичных файлов API в каталоги обновления Cosmovisor.

Проверка SHA256 из поля plan.info предложения

  • Предотвращает зависание узла в цикле перезапуска, если он находится в автономном режиме во время блокировки обновления.

9.4 ремонт гонка-нопа (обнаружение и исправление застрявших узлов) ✅ ЗАВЕРШЕНО

  • Обнаружение цикла перезапуска «обработчик обновления отсутствует» в журналах контейнера узлов.
  • Разобрать информационное поле update-info.json на наличие двоичных URL-адресов в цепочке (источник истины для репозиториев основной сети и тестовой сети)
  • Загрузите и поместите двоичные файлы в правильный каталог обновления Космовизора (с проверкой SHA256).
  • Обновите текущую символическую ссылку, чтобы она указывала на каталог обновления.

Перезапустить контейнер узла

  • Исправлено: предпочтение URL-адресов update-info.json вместо поиска релизов GitHub (предотвращает неправильный двоичный файл в тестовой сети).

Этап 10: Поддержка нескольких MLNode (отдельные серверы) — ПЛАНИРУЕТСЯ

10.1 Команды добавления/обновления/удаления ml-узла

Добавление ml-узла — POST /admin/v1/nodes (интерактивный режим + режим флагов)

обновление ml-узла <id> — PUT /admin/v1/nodes/:id

ml-node delete <id> — УДАЛИТЬ /admin/v1/nodes/:id

10.2 Флаг типа установки (--type full|network|mlnode)

--type network — только узел цепочки + API, пропустить этапы GPU/mlnode

--type mlnode --network-node URL — только сервер GPU, новые этапы, специфичные для mlnode

--type full (по умолчанию) — текущее поведение не изменилось

10.3 Этапы настройки только MLNode

08_mlnode_config.go — генерировать только mlnode Compose + nginx

09_mlnode_deploy.go — создание докера + регистрация на сетевом узле через API администратора

Предупреждение об URL-адресе обратного вызова PoC для настроек с несколькими серверами

Русский перевод
ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorАвтор
2026-02-26

Резюме

Для работы узлов Gonka в настоящее время требуется ручная установка, настройка и постоянное обслуживание на основе CLI. У опытных операторов первоначальная настройка обычно занимает несколько часов на каждый узел. Для менее опытных участников процесс часто растягивается на один или два дня — или приводит к отказу еще до запуска узла.

Эти трения активно отфильтровывают потенциальных операторов, концентрируя власть среди технически продвинутых пользователей и замедляя органическую децентрализацию.

Gonka Node Manager запрашивает эквивалент 80 000 долларов США из пула сообщества для создания готового к эксплуатации MVP, который автоматизирует развертывание узлов, обновления и мониторинг.

Примечание. Голосование по управлению в сети (расходы пула сообщества) будет представлено как отдельная транзакция после развертывания контракта. В этом выпуске отслеживается техническое предложение и план реализации.

Постановка задачи

Текущая работа узла требует:

Ручная настройка CLI занимает от нескольких часов до нескольких дней на каждый узел

  • Доступ по SSH и настройка на уровне сервера для каждого обновления.
  • Нет автоматического мониторинга или видимости состояния здоровья.
  • Нет оптимизированного процесса подключения узлов ML к сетевым узлам.

Это фактически ограничивает участие узкой группы технически продвинутых пользователей, концентрируя операционную власть и замедляя органическую децентрализацию.

Предлагаемое решение

Gonka Node Manager — унифицированный инструмент, который позволяет операторам узлов:

  • Развертывайте сеть и узлы машинного обучения согласованным и автоматизированным способом.

Поддерживайте актуальность узлов без ручного вмешательства

  • Подключайте и управляйте узлами ML вместе с сетевыми узлами.
  • Наблюдайте за базовым состоянием и работоспособностью узла без входа на серверы.

Система работает поверх предоставленной пользователем инфраструктуры (физической или виртуальной) и естественным образом вписывается в модель децентрализованной сети.

Обзор архитектуры

Компоненты

Основные пользовательские потоки

  • Начальная загрузка узла — пользователь добавляет узел в пользовательский интерфейс → агент устанавливается один раз на сервере → узел доступен
  • Развертывание и обновления — автоматизированы с помощью заранее настроенного пути стабильного выпуска, без вмешательства пользователя.
  • Присоединение к сети/ML — узел ML подключен к сетевому узлу, правила брандмауэра применяются автоматически, подключение проверено.
  • Рабочий процесс с теплым ключом — теплый ключ генерируется локально на узле, доступен только открытый ключ, подпись холодным ключом остается за оператором

Модель безопасности

  • Доступ по SSH остается полностью под контролем оператора — плоскость управления никогда не сохраняет учетные данные и не использует SSH.

На узлах не требуются входящие порты управления

  • Агент выполняет только утвержденные, заранее определенные операции — никаких произвольных удаленных команд.

Пакеты стека проверяются перед применением

Холодные клавиши никогда не покидают устройство оператора

Это сохраняет суверенитет узла и соответствует принципам децентрализации Gonka.

Объем MVP

Включено

Агент узла уровня хоста

Развертывание сети и узлов машинного обучения

  • Автоматические обновления через предварительно настроенный путь стабильного выпуска.

Подключение к сети/ML с автоматизацией брандмауэра

Рабочий процесс генерации теплых ключей и привязки

Базовая отчетность о состоянии и состоянии здоровья

Явно вне области видимости

Расширенные стеки метрик и наблюдаемости

Произвольное удаленное выполнение команд

Выбор версии вручную или несколько каналов обновления

Управление доступом на основе ролей

Автоматизированные механизмы отката (кроме рекомендованных разработчиками Gonka)

Обеспечение обновлений внутри сети

Удаленный административный доступ

План реализации

Этап 1. Установка MVP (45–50 % бюджета)

Результат: узлы сети и машинного обучения могут быть развернуты и работать непрерывно.

  • Агент узла: развертывание, подключение, работоспособность — 160–200 часов.
  • Основные API плоскости управления — 80–100 часов.
  • Архитектура и основной дизайн — 40–60 часов.
  • Минимальный интерфейс — 40–60 часов.

Интеграционное тестирование — 40–60 часов

Этап 2. Автоматические обновления MVP (20–25 % бюджета)

Результат: работающие узлы обновляются автоматически.

  • Версионирование и подписи пакета — 40–60 часов.
  • Логика обновления агента — 40–60 часов.
  • Координация обновления плоскости управления — 20–30 часов.
  • Тестирование обновлений — 20–30 часов.

Этап 3 — Мониторинг MVP (15–20 % бюджета)

Результат: операторы могут наблюдать за состоянием и работоспособностью узла.

  • Отчет о состоянии агента — 30–40 часов.

Агрегация статуса бэкенда — 20–30 часов

  • Просмотр статуса пользовательского интерфейса — 40–50 часов.

Этап 4 — Стабилизация и технический долг (10–15% бюджета)

Результат: стабильный, документированный, готовый к производству MVP.

Исправления ошибок и крайние случаи

Усиление безопасности

Документация

Финальное тестирование

Общие предполагаемые трудозатраты: 650–880 инженерно-часов.

Бюджет

Запрошено: эквивалент 80 000 долларов США (единовременно, из пула сообщества)

Финансирование выделяется поэтапно, в зависимости от завершения этапа. Перерасход средств команда покрывает за свой счет — никаких запросов на компенсацию обратной силы не подается.

Подотчетность

  • Весь прогресс отслеживается в одном общедоступном репозитории GitHub.
  • Progress.md обновляется после каждого этапа с письменным резюме, результатами и ссылками на артефакты.

Код, документация, примечания к выпуску и демонстрационные материалы, зафиксированные на каждом этапе

  • URL-адрес репозитория объявляется сразу после утверждения предложения.

Ожидаемый результат

Упрощенная регистрация для новых операторов узлов

Увеличенное количество независимых узлов

Сокращение времени простоя, вызванного ручной настройкой

  • Более сильная и устойчивая децентрализация сети Gonka.
Aktum1 avatar
Aktum1CollaboratorCollaborator
2026-02-27

Эй! Вы проверили, что уже построили эти ребята в этом направлении? https://gonka.gg/node-setup

Что вы думаете об их реализации?

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Наше предложение фокусируется на другом наборе эксплуатационных требований:

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

Централизованная видимость. Цель состоит в том, чтобы предоставить панель мониторинга, на которой состояние сети и узлов ML можно отслеживать в одном месте, а не проверять журналы отдельных серверов.

Логика оркестровки: мы автоматизируем правила подключения и брандмауэра, необходимые для присоединения узлов ML к сетевым узлам, что в настоящее время включает несколько шагов вручную.

По сути, в то время как сценарий управляет процессом развертывания, наш инструмент предназначен для автоматического управления долгосрочной работой узла и его подключением.

Aktum1 avatar
2026-02-27

Также обратите внимание на бота Telegram для мониторинга узлов: @GonkaHubBot.

Aktum1 avatar
2026-02-27

Я уже месяц пытаюсь настроить свой узел.

Это не совсем простая установка — 8 × A100 40 ГБ. После одного из недавних изменений кода использование этих графических процессоров было практически ограничено. Но я уже оплатил сервер на месяц, поэтому теперь использую его для полного тестирования и доводки процесса развертывания ноды.

Специально для этого я даже оформил платную подписку на Cursor. Очень надеюсь, что мне удастся заставить все работать правильно.

Если мне это удастся, я обязательно поделюсь всем опытом с другими.

Тем не менее, я не совсем уверен, можно ли реально превратить настройку узла в «услугу в один клик». Существует так много крайних случаев и нюансов — может ли сервис действительно учитывать все это?

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

Но я могу ошибаться.

В конце концов, мы, по сути, пытаемся решить одну и ту же проблему, просто используя разные инструменты.

Кстати, весь свой путь я документирую в Базе знаний: https://gonka-data-base.gitbook.io/gonka-data-base-en/hosts/node.-testing

Возможно, что-то из этого может быть полезно для вашего проекта.

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Задача «одного щелчка» — это именно то, почему наше предложение переходит от простых сценариев к архитектуре Node Agent.

Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для управления средой, стеками Docker и подключением. Цель этой архитектуры — предоставить систему, учитывающую нюансы инфраструктуры и поддерживающую работу узлов посредством обновлений, а не просто выполняющую первоначальную установку.

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

Mayveskii avatar
2026-03-05
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов.

Унифицированный стек операторов: доставка, контроль, воспроизводимость. Сочетание Node Manager (#816 (https://github.com/gonka-ai/gonka/discussions/816)) и экспортера Prometheus (#840 (https://github.com/gonka-ai/gonka/discussions/840)) с тонким слоем оркестрации (например, Воздушный поток, опционально n8n) образует единый стек, который не такой тяжелый, но удовлетворяет основные потребности оператора: доставка, контроль и воспроизводимость. Доставка: развертывание и обновление узлов через Node Manager; нет необходимости держать каждый хост в руках. Контроль: одинаковые метрики (высота блока, вес POC, статус) для всех через экспортер + Prometheus + Grafana — хосты видят то, что видим мы. Воспроизводимость: Airflow превращает процедуры в группы обеспечения доступности баз данных: проверки работоспособности, окна обновления, создание отчетов, очистка и даже шаги в стиле билетов/рабочих процессов (например, «после оповещения → создать задачу → запустить исправление»). Любой сценарий, который вы можете написать, становится повторяемым и контролируемым. Таким образом, вы получаете одно место для «как мы развертываем», «как мы отслеживаем» и «как мы реагируем и перезапускаем». Стек модульный: минимальный — экспортер + Прометей + Графана; Node Manager и Airflow (и опционально n8n для битов, управляемых событиями) добавляются сверху для тех, кому нужна автоматизация и воспроизводимость. Стоит делать? Да. Он напрямую решает проблему «хосты не могут легко настраивать и контролировать, как мы»: те же инструменты, та же видимость и та же возможность кодировать и воспроизводить сценарии вместо специальных SSH и одноразовых сценариев. Если сообщество хочет инвестировать в опыт операторов и воспроизводимость, это конкретный способ добиться этого.

Mayveskii avatar
2026-03-06
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов. Унифицированный стек операторов: доставка, контроль, воспроизводимость. Сочетание Node Manager (#816 (https://github.com/gonka-ai/gonka/discussions/816)) и экспортера Prometheus (#840 (https://github.com/gonka-ai/gonka/discussions/840)) с тонким слоем оркестрации (например, Воздушный поток, опционально n8n) образует единый стек, который не такой тяжелый, но удовлетворяет основные потребности оператора: доставка, контроль и воспроизводимость. Доставка: развертывание и обновление узлов через Node Manager; нет необходимости держать каждый хост в руках. Контроль: одинаковые метрики (высота блока, вес POC, статус) для всех через экспортер + Prometheus + Grafana — хосты видят то, что видим мы. Воспроизводимость: Airflow превращает процедуры в группы обеспечения доступности баз данных: проверки работоспособности, окна обновления, создание отчетов, очистка и даже шаги в стиле билетов/рабочих процессов (например, «после оповещения → создать задачу → запустить исправление»). Любой сценарий, который вы можете написать, становится повторяемым и контролируемым. Таким образом, вы получаете одно место для «как мы развертываем», «как мы отслеживаем» и «как мы реагируем и перезапускаем». Стек модульный: минимальный — экспортер + Прометей + Графана; Node Manager и Airflow (и опционально n8n для битов, управляемых событиями) добавляются сверху для тех, кому нужна автоматизация и воспроизводимость. Стоит делать? Да. Он напрямую решает проблему «хосты не могут легко настраивать и контролировать, как мы»: те же инструменты, та же видимость и та же возможность кодировать и воспроизводить сценарии вместо специальных SSH и одноразовых сценариев. Если сообщество хочет инвестировать в опыт операторов и воспроизводимость, это конкретный способ добиться этого.
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов.

Одна конкретная цифра, объясняющая, почему развертывание специализации модели имеет значение для уровня кэша в PR № 859 (https://github.com/gonka-ai/gonka/pull/859):

hit_rate = повторная_фракция × (1/M) × (1 — потоковая_фракция)

M=571 (Qwen3-32B, общий для 571 узла): hit_rate = 0,000473 M=1 (уникальная модель для каждого узла через диспетчер узлов): hit_rate = 0,270

Множитель специализации: улучшение скорости попадания в кэш в 571 раз. При M=1 достигается ограничение MaxWeightFractionBps (+30 % веса эпохи).

Схема развертывания Node Manager «одна модель на узел» является необходимым условием инфраструктуры для того, чтобы экономика кэша работала в масштабе сети. Эти два предложения дополняют друг друга: менеджер узлов создает условия, семантический кеш фиксирует вознаграждение.

Источник данных: топология живой сети, gonka.gg/api/public (1282 узла ML, измерено 5 моделей, эпоха 190).

andrey055 avatar
andrey055CollaboratorCollaborator
2026-03-01

В обсуждении Telegram некоторые люди говорят, что это улучшение, возможно, сейчас не очень актуально. Кажется, сейчас есть более насущные задачи, тем более, что альтернативные решения уже существуют. Однако нам бы очень не хотелось потерять ваше желание строить проекты для Гонки.

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

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Вы упомянули существующий список задач. Мы были бы рады взглянуть — не могли бы вы указать нам, где его можно найти?

tcharchian avatar
tcharchianMaintainerMaintainer
Вы упомянули существующий список задач. Мы были бы рады взглянуть — не могли бы вы указать нам, где его можно найти?

Недавно мы опубликовали три новых предложения в обсуждениях GitHub и будем рады любым отзывам.

Масштабирование вывода № 801 (https://github.com/gonka-ai/gonka/discussions/801)

Многомодельный PoC № 800 (https://github.com/gonka-ai/gonka/discussions/800)

Если у вас есть мысли, проблемы или идеи по улучшению, поделитесь ими прямо в комментариях.

Кроме того, я открыл дополнительное обсуждение, чтобы выделить три ключевые области, где необходима помощь #817 (https://github.com/gonka-ai/gonka/discussions/817). Они еще не сформулированы как отдельные задачи, но указывают на три проблемы, в которых ваше участие, точка зрения и предложения будут чрезвычайно ценны.

Исследование медленных узлов № 818 (https://github.com/gonka-ai/gonka/issues/818)

рост/обрезка application.db #819 (https://github.com/gonka-ai/gonka/issues/819)

Кроме того, вы можете отфильтровать проблемы с помощью метки «доступно» https://github.com/gonka-ai/gonka/issues?q=is%3Aissue%20state%3Aopen%20label%3Aup-for-grabs и посмотреть, есть ли какие-либо открытые задачи, у которых нет правопреемника.

Подробнее о баунти-программе: https://gonka.ai/FAQ/#bounty-program

SegovChik avatar

Итак, вот рабочее решение с некоторыми ограничениями (все еще в разработке, поэтому текущий функционал ограничен предоставлением сети + mlnode на одном сервере) https://github.com/inc4/gonka-nop/releases/tag/v0.1.8-rc1. Загрузите двоичный файл, выполните настройку ./gonka-nop и вот мы здесь.

SegovChik avatar

и вот наша дорожная карта того, что было сделано.

Этапы реализации

Этап 1: Базовая платформа CLI ✅ ЗАВЕРШЕНО

1.1 Строительные леса проекта

Инициализируйте go.mod с зависимостями

  • Создайте точку входа cmd/gonka-nop/main.go.
  • Создайте внутренний/cmd/root.go с помощью команды Cobra root.

Добавить версию, статус, сброс, заглушки команд gpu-info

Создайте внутренний/cmd/setup.go (команда установки с флагами)

1.2 Утилиты пользовательского интерфейса (необходимы для этапов)

Создайте внутренний/ui/output.go (цветные сообщения: Информация, Успех, Предупреждение, Ошибка)

Создайте внутренний/ui/spinner.go (обертку счетчика прогресса)

  • Создайте внутренний/ui/prompt.go (оболочку опроса для интерактивных подсказок).

1.3 Управление состоянием

Создайте внутренний/config/state.go (структуру состояния)

  • Реализуйте методы Save() и Load().

1.4 Фазовая система

Создайте внутренний/фазы/phase.go (интерфейс фазы + бегун)

  • Создайте макеты фаз для демонстрации: 01_prequires.go (Docker, проверка CUDA — макет) 02_gpu_detection.go (обнаружение графического процессора — макет) 03_network_select.go (подсказка выбора сети) 04_key_management.go (ключевой рабочий процесс — макет) 05_config_generation.go (создание конфигураций — макет) 06_deploy.go (составление докера) - посмеялся)

01_prequires.go (Docker, проверка CUDA — высмеивается)

02_gpu_detection.go (обнаружение графического процессора — высмеивается)

03_network_select.go (подсказка выбора сети)

04_key_management.go (ключевой рабочий процесс — высмеивается)

05_config_generation.go (генерация конфигов — высмеивается)

06_deploy.go (составление докера — высмеивается)

1.5 Интеграция и демонстрация

Команда настройки проводки к фазовращателю

Проверьте полную компиляцию CLI (перейдите к сборке ./...)

Запустите демо: настройка gonka-nop (показывает полный процесс)

1.6 Команда состояния

Создайте внутренний/status/status.go (структура NodeStatus, функции выборки)

Создайте внутренний/status/display.go (форматированный вывод)

  • Внедрить 3 раздела: Обзор, Блокчейн, MLNode.

Поддержка флага --mocked для демо-версии

Реализуйте команду gpu-info с помощью --mocked

Этап 2: Покрытие тестированием (сначала тесты) 🔄 В ПРОГРЕССЕ

Напишите тесты для существующего кода перед добавлением новых функций. Цель: охват 70%+.

2.1 Тестирование пакетов конфигурации (цель: 90%+)

state_test.go — NewState, Save, Load, Reset, MarkPhaseComplete

Добавить тесты крайних случаев (неверный JSON, ошибки разрешений)

2.2 Пакетные испытания этапов (цель: 80%+)

gpu_detection_test.go — рекомендацияConfig, FormatGPUSummary

preреквизиты_test.go — имитация проверок Docker/Nvidia

config_generation_test.go — проверка вывода шаблона

Phase_runner_test.go — поток выполнения фазы

2.3 Тестирование статусных пакетов (цель: 70%+)

status_test.go — имитация HTTP-ответов, проверка синтаксического анализа

display_test.go — форматирование вывода

2.4 Тестирование пакетов пользовательского интерфейса (цель: 50%+)

output_test.go — форматирование цвета

spinner_test.go — базовый функционал

Prompt_test.go — имитация ответов на опрос (сложнее протестировать)

2.5 Интеграционные тесты

интеграционный тест cmd/setup с имитацией фаз

Сквозной тест на сохранение состояния

Этап 3: графический процессор и необходимые условия (РАСШИРЯЕТСЯ в зависимости от анализа чата) ✅ ПРАКТИЧЕСКИ ЗАВЕРШЕНО

Реальное обнаружение системы заменяет ложные реализации. Проверено в основной сети (8x A100 SXM4 80 ГБ).

3.1 Обнаружение графического процессора (настоящая nvidia-smi) ✅ ЗАВЕРШЕНО

Разобрать nvidia-smi --query-gpu=index,name,memory.total,driver_version,pci.bus_id --format=csv

  • Определить архитектуру графического процессора (sm_80=A100, sm_86=A40/RTX3090, sm_89=L40/RTX4090, sm_90=H100/H200, sm_100=B200/B300, sm_120=RTX5090) — GPUArchFromName() в gpu_parser.go
  • Обнаружение топологии NVLink/PCIe — на основе имени (H100/H200/A100 = NVLink, другие = PCIe). Полная версия nvidia-smi topo -m еще не реализована.

Предупреждение о пропускной способности PCIe для установок с несколькими графическими процессорами без NVLink

Автоматический выбор тега изображения MLNode на основе архитектуры (стандартный/блэквелл) — selectMLNodeImage()

3.2 Проверка Docker и среды выполнения ✅ ЗАВЕРШЕНО

Проверка доступности и версии Docker — ParseDockerVersion() в gpu_parser.go

Обнаружение NVIDIA Container Toolkit ( nvidia-ctk --version )

  • Проверка CUDA внутри контейнера Docker (docker run --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi) — checkCUDAInDocker()

Проверка Docker Compose v2 (версия docker Compose) — ParseDockerComposeVersion()

3.3 Установка и проверка драйвера NVIDIA ✅ ПОЛЬЗОВАТЕЛЬНО ЗАВЕРШЕНА

Определить состояние драйвера: не установлен/установлен/несоответствие версии — checkNVIDIADriver()

  • Предварительная проверка безопасности: состояние безопасной загрузки, доступные заголовки ядра, совместимость с дистрибутивом.
  • Предлагайте автоматическую установку с подтверждением пользователя — installNVIDIADriver() через apt.
  • Установите Fabric Manager ( nvidia-fabricmanager-570 ), если обнаружен многопроцессорный NVLink — проверьтеFabricManager() с автоматическим запуском + приглашение на установку.
  • Сравните версию библиотеки пользовательского пространства с версией модуля ядра и версией Fabric Manager — трехсторонняя проверка согласованности в checkDriverConsistency()
  • Обнаружение пакета автоматических обновлений и предупреждение об автоматических обновлениях драйверов NVIDIA — предлагает удерживать apt-mark nvidia-driver-*
  • Проверьте совместимость версии CUDA с обнаруженным драйвером.
  • Предупреждать о необходимости перезагрузки после установки/обновления модуля ядра.

3.4 Предварительные требования к системе ✅ ПРАКТИЧЕСКИ ПОЛНАЯ

Обнаружение дистрибутива Linux (Ubuntu, Debian, CentOS, Amazon Linux) — ParseOSRelease() в gpu_parser.go

  • Предварительная проверка дискового пространства (предупреждение, если свободно < 250 ГБ) — ParseDiskFreeGB() , ParseLsblkJSON()

Автоматическая установка NVIDIA Container Toolkit (с подтверждением пользователя)

Конфигурация среды выполнения Docker (nvidia-ctk runtime configure --runtime=docker)

Проверка доступности портов (5000, 8000, 26657 внешние; 5050, 8080, 9100, 9200 внутренние)

Этап 4: Конфигурация (РАСШИРЯЕТСЯ для каждого анализа чата) ✅ ПРАКТИЧЕСКИ ЗАВЕРШЕНА

Создавайте готовые к использованию конфигурации с настройками безопасности и производительности по умолчанию, полученными от валидаторов. Проверено при развертывании в основной сети.

4.1 Алгоритм рекомендации TP/PP ✅ ЗАВЕРШЕНО

Расчет TP/PP с учетом модели (Qwen3-235B, Qwen3-32B, QwQ-32B) — рекомендуется Config() с 4-уровневой логикой VRAM

Рекомендация по использованию памяти gpu: 0,88–0,94 на основе запаса видеопамяти (НЕ 0,99)

расчет max-model-len на основе оставшейся видеопамяти после загрузки модели

  • Автоматическое добавление --kv-cache-dtype fp8 для конфигураций с ограниченным объемом видеопамяти (например, 8x A100 40 ГБ с 235 ГБ)
  • PP не установлен в аргументах vLLM — бегун MLNode автоматически рассчитывает на основе графических процессоров/TP. Нет --quantization fp8 (вызывает ошибки выравнивания MoE)

4.2 Генерация node-config.json ✅ ЗАВЕРШЕНО

Генерация на основе шаблона с помощью go:embed

проверка поля хоста (без префикса http:// – распространенная ошибка в чате)

Поле оборудования заполняется автоматически при обнаружении графического процессора

Рекомендация max_concurrent на основе конфигурации графического процессора

Выбор модели с явным объявлением (требуется для PoC v2)

4.3 Генерация config.env ✅ ЗАВЕРШЕНО

На основе шаблона с проверенными полями

Переменная среды MODEL_NAME (обязательна после версии 0.2.8)

VLLM_ATTENTION_BACKEND = FLASHINFER для ВСЕХ архитектур (стандарт 3.0.12+, старое правило FLASH_ATTN устарело)

4.4 Генерация docker-compose.yml ✅ ЗАВЕРШЕНО

На основе шаблона с помощью go:embed

  • Безопасность портов: привяжите внутренние порты к 127.0.0.1 (5050, 8080, 9100, 9200).

Публичные порты: 5000 (P2P), 8000 (API через прокси), 26657 (RPC — через прокси только после защиты от DDoS)

Выбор тега изображения MLNode на основе определения архитектуры графического процессора

4.5 Настройки защиты от DDoS по умолчанию ✅ ЗАВЕРШЕНО

Конфигурация прокси-сервиса: GONKA_API_BLOCKED_ROUTES=обучение poc-пакетов

Конфигурация прокси-сервиса: GONKA_API_EXEMPT_ROUTES=вывод чата

  • По умолчанию: DISABLE_CHAIN_API=true, DISABLE_CHAIN_RPC=true, DISABLE_CHAIN_GRPC=true.

Порт RPC (26657), доступный только через прокси, не доступный напрямую

4.6 Настройка синхронизации и сокращения ✅ ЗАВЕРШЕНО

  • Автоматическая настройка persist_peers в config.toml с заведомо исправными узлами.
  • Создайте app.toml с обрезкой: custom, Keep-recent=1000, интервал=100.
  • Установите GENESIS_SEEDS и SEED_API_URL для надежных конечных точек.

Включить синхронизацию состояния по умолчанию ( SYNC_WITH_SNAPSHOTS=true )

Этап 5: Развертывание (РАСШИРЯЕТСЯ в зависимости от анализа чата) ✅ ПРАКТИЧЕСКИ ЗАВЕРШЕНО

Развертывайте контейнеры с реальной оркестровкой, усилением безопасности и мониторингом синхронизации. Проверено в основной сети + тестовой сети.

5.1 Оркестровка Docker Compose ✅ ЗАВЕРШЕНО

Обработка нескольких файлов (прозрачный -f docker-compose.yml -f docker-compose.mlnode.yml )

  • Автоматический источник config.env + sudo -E для распространения переменных среды — внутренний/docker/env.go + compose.go

Получение изображения с отображением прогресса — получение файла Docker Compose

Запуск контейнера с упорядоченными зависимостями — сначала сетевой узел, затем узел ML

5.2 Настройка брандмауэра ⚠️ (из чата: Docker обходит UFW)

Обнаружение поведения iptables Docker

  • Настройте правила цепочки DOCKER-USER: Разрешить установленные соединения. Разрешить общедоступные порты (5000, 8000). Занести в белый список известные исходные узлы Gonka. УДАЛИТЬ все остальные входящие соединения в контейнеры Docker.

Разрешить установленные соединения

Разрешить общедоступные порты (5000, 8000)

Белый список известных аналогов семян Gonka

  • УДАЛИТЕ все остальные входящие контейнеры Docker.
  • Предложите интеграцию iptables-persistent для сохранения правил.

Проверка разрешения IPv4/IPv6 для конечной точки работоспособности vLLM (предотвращение цикла перезапуска)

5.3 Управление ключами (оба рабочих процесса) ✅ ЗАВЕРШЕНО

Быстрый рабочий процесс: сгенерируйте все ключи на сервере — 04_key_management.go

  • Безопасный рабочий процесс: принять публичный ключ учетной записи, сгенерировать консенсус + ключи ML — флаг --account-pubkey

автоматизация предоставления грантов-ml-ops-permissions — 07_registration.go

Руководство по резервному копированию ключей

5.4 Загрузка веса модели ✅ ЗАВЕРШЕНО

Загрузка модели HuggingFace с индикатором выполнения — отдельная команда загрузки модели gonka-nop + этап развертывания

  • Возобновить поддержку прерванных загрузок — использует запуск Docker с монтированием HF_HOME.

Проверка SHA256 после загрузки

  • Предварительная загрузка в HF_HOME перед запуском контейнера.

5.5 Проверка работоспособности и мониторинг синхронизации ✅ ЗАВЕРШЕНО

Проверка работоспособности контейнера (все работающие службы) — опросы /admin/v1/setup/report

  • Ход синхронизации блокчейна с отображением задержки блока — опрашивает Tendermint RPC /status, показывает прогресс высоты блока, тайм-аут 30 минут

Дождитесь завершения синхронизации перед регистрацией (настраиваемый тайм-аут)

Проверка доступности порта (доступны внешние порты) — запланирована проверка доступности PUBLIC_URL

Этап 6: Операции ⚠️ НОВИНКА (из чата: день-2 — 90 % времени оператора)

Команды после развертывания для текущего управления узлами. Весь этот этап отсутствовал в первоначальном плане и основан на анализе чата валидатора, который показывает, что операторы тратят большую часть времени на операции, а не на настройку.

Статус 6.1 гонка-ноп (реальная реализация) ✅ ЗАВЕРШЕНО

  • Блокчейн: высота блока, статус синхронизации, блоки позади, флаг catch_up.
  • Эпоха: текущая эпоха, статус участия, вес, процент промахов.
  • Эпоха: вес PoC, распределение временных интервалов, количество выводов, предстоящая эпоха, статус заявки на вознаграждение.
  • MLNode: загруженная модель, загрузка графического процессора, статус PoC, предполагаемое и текущее несоответствие, актуальность статуса.
  • Конфигурация узла: общедоступный URL-адрес, URL-адрес обратного вызова PoC, начальный API, версия API, задержка по высоте, план обновления.
  • Безопасность: холодный ключ, теплый ключ, разрешения ML.
  • Контейнеры: работающее/остановленное/неработоспособное состояние, полученное на основе проверок настройки/отчетов.
  • Проверка доступности PUBLIC_URL — HTTP GET <public_url>/health , отчет PASS/FAIL с подробностями об ошибке. Критично: несоответствие порта или неправильный зарегистрированный URL = валидаторы не могут проверить доказательства PoC = узел никогда не набирает вес. Узнал из отладки тестовой сети (11 февраля 2026 г.).
  • Сеть: количество одноранговых узлов (заблокировано — Tendermint RPC 26657 не доступен хосту при стандартных развертываниях)

Временная шкала частоты промахов (визуализация зелеными/красными точками)

Обновление 6.2 gonka-nop (безопасное развертывание) ✅ ЗАВЕРШЕНО (реализовано как M9.2)

  • Проверьте timeslot_allocation через API администратора, чтобы найти безопасное окно.

Отключить узел ML через POST /admin/v1/nodes/:id/disable

Извлеките новый образ контейнера с прогрессом

Обновить тег изображения в файле docker-compose

Воссоздать контейнер ( --no-deps --force-recreate )

Дождитесь завершения загрузки модели (отслеживайте журналы)

  • Повторно включите узел ML через POST /admin/v1/nodes/:id/enable.

Проверка работоспособности после обновления

Отличить автоматическое обновление (Космовизор: node, api) от ручного (mlnode, proxy)

6.3 сброс gonka-nop (очистка данных блокчейна)

  • Сохраняйте ключи (tmkms, учетную запись, ML) и файлы конфигурации.

Запустите выведенный тендерминт unsafe-reset-all --keep-addr-book внутри контейнера

  • Удалите каталог update-info.json и космовизор/.

Перезапустить контейнер узла

Отслеживание хода синхронизации после сброса

6.4 очистка gonka-nop (восстановление дискового пространства)

Рассчитать текущее использование диска (.inference/data/, резервные копии космовизора)

  • Удалите старые каталоги резервных копий Космовизора.

Сообщить об освобожденном месте

  • Рекомендовать настройки обрезки, если они не настроены.

6.5 gonka-nop ml-node (обертка API администратора) 🔄 ЧАСТИЧНАЯ

Список ml-узлов — GET /admin/v1/nodes (статус, распределение, модель, оборудование, вес PoC)

Добавление ml-узла — POST /admin/v1/nodes (интерактивно или из конфигурации)

Обновление ml-узла — PUT /admin/v1/nodes/:id (модель, TP/PP, max_concurrent)

ml-node включить/отключить - POST /admin/v1/nodes/:id/enable|disable

  • Статус ml-узла — подробная информация: хост, порты, модель+аргументы, оборудование, статус/предполагаемое несоответствие, распределение эпохи, вес PoC, временные интервалы, актуальность статуса.

6.6 модель гонка-ноп (управление моделью)

Переключение модели через API администратора (PUT /admin/v1/nodes/:id)

Показать текущую модель и модель следующей эпохи

  • Предупреждать, что изменения модели применяются только в следующую эпоху.

Проверка совместимости модели с конфигурацией графического процессора

6.7 Загрузка двоичного файла перед обновлением

  • Загрузите двоичные файлы выведенных и децентрализованных API из выпусков GitHub.

SHA256-проверка

  • Поместить в правильный каталог обновления Космовизора.

Проверьте разрешения (chmod +x)

Этап 7: Регистрация и ончейн

7.1 Процесс регистрации ✅ ЗАВЕРШЕНО

submit-new-участник с правильными флагами (ключ валидатора, идентификатор цепочки, URL-адрес узла)

Автоматическое получение консенсуса_pubkey из API отчета о настройке

Grant-ml-ops-permissions для ключа ML

  • Проверьте формат PUBLIC_URL (без префикса http://).

7.2 Проверка PoC

Тестировать конечную точку PoC ( /api/v1/pow/init/generate )

Убедитесь, что модель загружена и отвечает

Проверьте участие в эпохе после регистрации

7.3 Управление вознаграждениями

gonka-nop претензии-вознаграждения - Упрощенный поток заявок

Получить начальное значение из конфигурации API администратора

Принудительное требование через /admin/v1/claim-reward/recover для пропущенных эпох

Показать историю невостребованных наград

7.4 Управление

gonka-nop voice — упрощенное управление голосованием

Показать активные предложения

Голосуйте с помощью ключа учетной записи

Этап 8: Продвинутый уровень и полировка 🔄 В ПРОГРЕССЕ

Пакетное управление несколькими узлами (обновление/статус на более чем 10 узлах)

Визуализация временной шкалы частоты промахов (точечное отображение ОК/пропущенных ошибок)

Совместимость с облачными провайдерами (переназначение портов Vast.ai, голое железо GCore)

  • Поддержка русского языка для сообщений об ошибках и подсказок.
  • Интеграция мониторинга (экспортер Prometheus + централизованная архитектура push-уведомлений) — см. M8.1.

Интеграция сравнительного анализа производительности (compressa-perf)

Механизм самообновления двоичного файла gonka-nop

Автоматизация документирования и выпуска

8.1 Централизованный мониторинг (Ansible) ✅ ЗАВЕРШЕНО

Включенный push-мониторинг для валидаторов Gonka. Развертывание на основе Ansible в подкаталоге ansible/.

Архитектура: Exporter + Prometheus на валидаторе → push_write → Central Prometheus + Grafana (управляется inc4). На узлах валидатора не открыты входящие порты.

Компоненты построены:

  • роль gonka-exporter — объединяет экспортер votkon (28 метрик из 5 конечных точек API), локально создает образ Docker, развертывает через компоновку
  • роль prometheus — Prometheus с условным удаленным_записью, правилами оповещений (11 правил в 2 группах), --web.enable-remote-write-receiver для центрального сервера

роль alertmanager — условные уведомления Telegram/Discord/Slack, серьезность на основе маршрута

  • роль grafana — автоматически предоставляемые источники данных + 2 панели мониторинга (обзор парка, глубокое погружение в узел)

playbooks/deploy-all.yml — полный стек для центрального сервера (экспортер + prometheus + alertmanager + grafana)

playbooks/add-node.yml — добавить внутренний валидатор с помощью Remote_write в центральный

  • playbooks/client-deploy.yml — автономный для внешних валидаторов (жестко закодированный центральный URL-адрес, проверяет предварительные условия, проверяет работу удаленной записи)

playbooks/client-teardown.yml — чистое удаление мониторинга из валидатора

инвентарь/client.yml.example — шаблон для внешних операторов

  • README.md — ориентированная на оператора документация со схемой архитектуры, таблицей метрик, правилами оповещений, гарантиями безопасности.
  • .gitignore — защищает файлы инвентаризации клиента от случайных коммитов.

Панели мониторинга:

  • Обзор флота ( gonka-fleet-overview ) — обзор нескольких узлов со статусом, задержкой блока, частотой промахов, весом PoC, графическим процессором, доходом.
  • Глубокое погружение узла ( gonka-node-deep-dive ) — подробности по каждому узлу с помощью переменной шаблона $instance.

Правила оповещения (11):

  • Критические: GonkaMissRateHigh (>20%), GonkaNodeFailed, GonkaBlockLagCritical (>200 блоков), GonkaNodeStopped, GonkaExporterDown.
  • Предупреждение: GonkaBlockLag (>50), GonkaCatchingUp, GonkaGPUUtilizationHigh (>95%), GonkaZeroWeight, GonkaZeroInferences, GonkaStatusMismatch.

Этап 9: Управление версиями ✅ ЗАВЕРШЕНО (3/4 задачи, предварительная раздача отложена)

Динамические версии образов и безопасная обработка обновлений. Решает проблему «курицы и яйца», когда NOP жестко закодирует версии образа, которые устаревают после обновлений цепочки.

Источник истины: репозиторий GitHub gonka-ai/gonka.

Основная сеть: основная ветка → Deploy/join/docker-compose.yml + docker-compose.mlnode.yml

Тестовая сеть: тестовая сеть/основная ветка → те же пути

9.1 Получение версии динамического изображения ✅ ЗАВЕРШЕНО

Структура ImageVersions с тегами для каждой службы (узел, API, tmkms, прокси, мост, mlnode, nginx)

  • FetchImageVersions() извлекает необработанные URL-адреса GitHub во время установки.
  • ParseComposeImageVersions() извлекает теги из YAML-файла (обрабатывает комментарии, выводы мостового дайджеста, прокси против прокси-ssl)
  • Откат к жестко запрограммированным версиям, когда GitHub недоступен.

Фаза выбора сети извлекает и заполняет состояние

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

Обновление 9.2 gonka-nop (обновление безопасной версии) ✅ ЗАВЕРШЕНО

  • Загрузите последние версии с GitHub и сравните с текущими файлами компоновки.

Показывать разницу изменений версий перед применением

  • Для служб обновления вручную (прокси, мост, mlnode): обновите теги изображений в файлах компоновки.
  • Безопасное развертывание MLNode: проверьте распределение временных интервалов → отключить → извлечь → воссоздать → дождаться загрузки модели → включить.
  • Для сервисов, управляемых Cosmovisor (узел, API): сообщите пользователю об этих автоматических обновлениях в блоке обновления цепочки.

--check флаг, чтобы показывать только доступные обновления без применения

9.3 Предварительная раздача обновления «Космовизора» (во время развертывания)

  • Предложения по управлению цепочкой запросов через REST API (/cosmos/gov/v1/proposals).

Обнаружение ожидающих или примененных планов обновления

  • Предварительная загрузка выведенных и децентрализованных двоичных файлов API в каталоги обновления Cosmovisor.

Проверка SHA256 из поля plan.info предложения

  • Предотвращает зависание узла в цикле перезапуска, если он находится в автономном режиме во время блокировки обновления.

9.4 ремонт гонка-нопа (обнаружение и исправление застрявших узлов) ✅ ЗАВЕРШЕНО

  • Обнаружение цикла перезапуска «обработчик обновления отсутствует» в журналах контейнера узлов.
  • Разобрать информационное поле update-info.json на наличие двоичных URL-адресов в цепочке (источник истины для репозиториев основной сети и тестовой сети)
  • Загрузите и поместите двоичные файлы в правильный каталог обновления Космовизора (с проверкой SHA256).
  • Обновите текущую символическую ссылку, чтобы она указывала на каталог обновления.

Перезапустить контейнер узла

  • Исправлено: предпочтение URL-адресов update-info.json вместо поиска релизов GitHub (предотвращает неправильный двоичный файл в тестовой сети).

Этап 10: Поддержка нескольких MLNode (отдельные серверы) — ПЛАНИРУЕТСЯ

10.1 Команды добавления/обновления/удаления ml-узла

Добавление ml-узла — POST /admin/v1/nodes (интерактивный режим + режим флагов)

обновление ml-узла <id> — PUT /admin/v1/nodes/:id

ml-node delete <id> — УДАЛИТЬ /admin/v1/nodes/:id

10.2 Флаг типа установки (--type full|network|mlnode)

--type network — только узел цепочки + API, пропустить этапы GPU/mlnode

--type mlnode --network-node URL — только сервер GPU, новые этапы, специфичные для mlnode

--type full (по умолчанию) — текущее поведение не изменилось

10.3 Этапы настройки только MLNode

08_mlnode_config.go — генерировать только mlnode Compose + nginx

09_mlnode_deploy.go — создание докера + регистрация на сетевом узле через API администратора

Предупреждение об URL-адресе обратного вызова PoC для настроек с несколькими серверами

Оригинал
ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorАвтор
2026-02-26

Executive Summary

Running Gonka nodes currently requires manual CLI-based installation, configuration, and ongoing maintenance. For experienced operators, initial setup typically takes several hours per node. For less experienced participants, the process often stretches to one or two days — or results in abandonment before a node is ever launched.

This friction actively filters out potential operators, concentrating power among technically advanced users and slowing organic decentralization.

Gonka Node Manager requests $80,000 USD equivalent from the Community Pool to build a production-ready MVP that automates node deployment, updates, and monitoring.

Note: On-chain governance vote (Community Pool spend) will be submitted as a separate transaction once the contract is deployed. This issue tracks the technical proposal and implementation plan.

Problem Statement

Current node operation requires:

Manual CLI setup taking hours to days per node

SSH access and server-level configuration for every update

No automated monitoring or health visibility

No streamlined process for attaching ML nodes to network nodes

This effectively limits participation to a narrow group of technically advanced users, concentrating operational power and slowing organic decentralization.

Proposed Solution

Gonka Node Manager — a unified tool that allows node operators to:

Deploy network and ML nodes in a consistent, automated way

Keep nodes up to date without manual intervention

Attach and operate ML nodes alongside network nodes

Observe basic node status and health without logging into servers

The system operates on top of user-provided infrastructure (physical or virtual) and fits naturally into a decentralized network model.

Architecture Overview

Components

Core User Flows

Node bootstrap — user adds node in UI → agent installed once on server → node available

Deployment & updates — automated via preconfigured stable release path, no user intervention

Network/ML attachment — ML node attached to network node, firewall rules applied automatically, connectivity validated

Warm key workflow — warm key generated locally on node, only public key exposed, cold-key signing stays with operator

Security Model

SSH access stays entirely under operator control — Control Plane never stores credentials or uses SSH

No inbound management ports required on nodes

Agent executes only approved, predefined operations — no arbitrary remote commands

Stack bundles verified before application

Cold keys never leave the operator's device

This preserves node sovereignty and aligns with Gonka's decentralization principles.

MVP Scope

Included

Host-level node agent

Deployment of network and ML nodes

Automatic updates via preconfigured stable release path

Network/ML attachment with firewall automation

Warm key generation and binding workflow

Basic status and health reporting

Explicitly Out of Scope

Advanced metrics and observability stacks

Arbitrary remote command execution

Manual version selection or multiple update channels

Role-based access control

Automated rollback mechanisms (except those recommended by Gonka developers)

On-chain enforcement of updates

Remote administrative access

Implementation Plan

Phase 1 — MVP Installation (45–50% of budget)

Outcome: Network and ML nodes can be deployed and operate end-to-end

Node agent: deploy, attach, health — 160–200h

Control Plane core APIs — 80–100h

Architecture & core design — 40–60h

Minimal UI — 40–60h

Integration testing — 40–60h

Phase 2 — MVP Auto-Updates (20–25% of budget)

Outcome: Running nodes update themselves automatically

Bundle versioning & signatures — 40–60h

Agent update logic — 40–60h

Control Plane update coordination — 20–30h

Update testing — 20–30h

Phase 3 — MVP Monitoring (15–20% of budget)

Outcome: Operators can observe node status and health

Agent health reporting — 30–40h

Backend status aggregation — 20–30h

UI status views — 40–50h

Phase 4 — Stabilization & Technical Debt (10–15% of budget)

Outcome: Stable, documented, production-ready MVP

Bug fixes and edge cases

Security hardening

Documentation

Final testing

Total estimated effort: 650–880 engineering hours

Budget

Requested: $80,000 USD equivalent (one-time, from Community Pool)

Funding released in stages tied to phase completion. Cost overruns covered by the team at its own expense — no retroactive compensation requests will be made.

Accountability

All progress tracked in a single public GitHub repository

progress.md updated after each phase with written summary, deliverables, and artifact links

Code, docs, release notes, and demo materials committed per phase

Repository URL announced immediately after proposal approval

Expected Outcome

Easier onboarding for new node operators

Increased number of independent nodes

Reduced downtime caused by manual configuration

Stronger and more sustainable decentralization of the Gonka network

Aktum1 avatar
Aktum1CollaboratorCollaborator
2026-02-27

Hey! Have you checked out what these guys have already built in this direction? https://gonka.gg/node-setup

What do you think about their implementation?

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

Our proposal focuses on a different set of operational requirements:

Lifecycle Management: Beyond the initial install, we are building a system for automated updates and configuration changes without requiring manual SSH sessions for every release.

Centralized Visibility: The goal is to provide a dashboard where the status of both Network and ML nodes can be monitored in one place, rather than checking individual server logs.

Orchestration Logic: We are automating the connectivity and firewall rules needed to attach ML nodes to Network nodes, which currently involves several manual steps.

Essentially, while a script handles the deployment process, our tool is designed to manage the node's long-term operation and connectivity automatically.

Aktum1 avatar
2026-02-27

Also, take a look at this node monitoring Telegram bot: @GonkaHubBot.

Aktum1 avatar
2026-02-27

I’ve been trying to set up my node for a month now.

It’s not exactly a simple setup — 8× A100 40GB. After one of the recent code changes, these GPUs were practically restricted. But I’ve already paid for the server for a month, so now I’m using it to fully test and fine-tune the node deployment process.

I even got a paid Cursor subscription specifically for this. Really hoping I’ll manage to get everything running properly.

If I succeed, I’ll definitely share the full experience with others.

That said, I’m not entirely sure whether node setup can realistically be turned into a “one-click service.” There are so many edge cases and нюances — can a service really account for all of that?

To me, a model based on an AI agent that deeply understands the infrastructure and has access to all up-to-date documentation sounds more scalable than building a rigid setup service.

But I could be wrong.

At the end of the day, we’re basically trying to solve the same problem — just using different tools.

By the way, I’m documenting my entire journey in the Knowledge Base: https://gonka-data-base.gitbook.io/gonka-data-base-en/hosts/node.-testing

Maybe some of it could be useful for your project.

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

The 'one-click' challenge is exactly why our proposal moves away from simple scripts toward a Node Agent architecture.

A static setup often fails when hardware or dependencies change. Our approach uses the Agent as a local management layer to handle the environment, Docker stacks, and connectivity. The goal of this architecture is to provide a system that accounts for infrastructure nuances and maintains node operation through updates, rather than just performing an initial installation.

The project is designed to automate these manual processes and handle the edge cases that typically arise during long-term node maintenance.

Mayveskii avatar
2026-03-05
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов.

Unified operator stack: delivery, control, reproducibility Combining Node Manager ( #816 (https://github.com/gonka-ai/gonka/discussions/816) ) and Prometheus exporter ( #840 (https://github.com/gonka-ai/gonka/discussions/840) ) with a thin orchestration layer (e.g. Airflow, optionally n8n) gives a single stack that is not that heavy but covers the main operator needs: delivery, control, and reproducibility. Delivery: Deploy and update nodes via Node Manager; no need to hand-hold each host. Control: Same metrics (block height, POC weight, status) for everyone via the exporter + Prometheus + Grafana — hosts see what we see. Reproducibility: Airflow turns procedures into DAGs: health checks, update windows, report generation, cleanup, even ticket/workflow-style steps (e.g. “after alert → create task → run remediation”). Any scenario you can script becomes repeatable and auditable. So you get one place for “how we deploy”, “how we monitor”, and “how we react and rerun”. The stack is modular: minimal is exporter + Prometheus + Grafana; Node Manager and Airflow (and optionally n8n for event-driven bits) add on top for those who want automation and reproducibility. Worth doing? Yes. It directly tackles “hosts can’t easily configure and monitor like we do”: same tooling, same visibility, and the same ability to encode and replay scenarios instead of ad‑hoc SSH and one-off scripts. If the community wants to invest in operator experience and reproducibility, this is a concrete way to get there.

Mayveskii avatar
2026-03-06
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов. Unified operator stack: delivery, control, reproducibility Combining Node Manager ( #816 (https://github.com/gonka-ai/gonka/discussions/816) ) and Prometheus exporter ( #840 (https://github.com/gonka-ai/gonka/discussions/840) ) with a thin orchestration layer (e.g. Airflow, optionally n8n) gives a single stack that is not that heavy but covers the main operator needs: delivery, control, and reproducibility. Delivery: Deploy and update nodes via Node Manager; no need to hand-hold each host. Control: Same metrics (block height, POC weight, status) for everyone via the exporter + Prometheus + Grafana — hosts see what we see. Reproducibility: Airflow turns procedures into DAGs: health checks, update windows, report generation, cleanup, even ticket/workflow-style steps (e.g. “after alert → create task → run remediation”). Any scenario you can script becomes repeatable and auditable. So you get one place for “how we deploy”, “how we monitor”, and “how we react and rerun”. The stack is modular: minimal is exporter + Prometheus + Grafana; Node Manager and Airflow (and optionally n8n for event-driven bits) add on top for those who want automation and reproducibility. Worth doing? Yes. It directly tackles “hosts can’t easily configure and monitor like we do”: same tooling, same visibility, and the same ability to encode and replay scenarios instead of ad‑hoc SSH and one-off scripts. If the community wants to invest in operator experience and reproducibility, this is a concrete way to get there.
Проблема "работы в один клик" — именно поэтому в нашем предложении мы отходим от простых скриптов в пользу архитектуры Node Agent. Статическая настройка часто дает сбой при изменении оборудования или зависимостей. Наш подход использует агент в качестве локального уровня управления для обработки среды, стеков Docker и подключения. Цель этой архитектуры — предоставить систему, которая учитывает нюансы инфраструктуры и поддерживает работу узлов при обновлениях, а не просто выполняет первоначальную установку. Проект призван автоматизировать эти ручные процессы и обрабатывать нестандартные ситуации, которые обычно возникают при длительном обслуживании узлов.

One concrete number for why model-specialization deployment matters for the cache layer in PR #859 (https://github.com/gonka-ai/gonka/pull/859) :

hit_rate = repeat_fraction × (1/M) × (1 − stream_fraction)

M=571 (Qwen3-32B, shared across 571 nodes): hit_rate = 0.000473 M=1 (unique model per node via Node Manager): hit_rate = 0.270

Specialization multiplier: 571× improvement in cache hit rate. At M=1, MaxWeightFractionBps cap (+30% epoch weight) is reached.

Node Manager's "one model per node" deployment pattern is the infrastructure prerequisite for the cache economics to work at network scale. The two proposals are complementary: Node Manager creates the conditions, semantic cache captures the reward.

Data source: live network topology, gonka.gg/api/public (1,282 ML nodes, 5 models measured, epoch 190).

andrey055 avatar
andrey055CollaboratorCollaborator
2026-03-01

In the Telegram discussion, some people are saying that this improvement may not be very relevant right now. It seems there are more pressing tasks at the moment, especially since alternative solutions already exist. However, we truly wouldn’t like to lose your willingness to build projects for Gonka.

Perhaps you could consider taking a look at a more relevant task?

ochenUmnayaKatyshka avatar
ochenUmnayaKatyshkaCollaboratorCollaborator
2026-03-04

You mentioned an existing list of tasks. We would be happy to take a look — could you please point us to where we can find it?

tcharchian avatar
tcharchianMaintainerMaintainer
You mentioned an existing list of tasks. We would be happy to take a look — could you please point us to where we can find it?

We’ve recently published three new proposals on GitHub Discussions, and we’d really any feedback

Inference Scaling #801 (https://github.com/gonka-ai/gonka/discussions/801)

Multi-Model PoC #800 (https://github.com/gonka-ai/gonka/discussions/800)

If you have thoughts, concerns, or improvement ideas, please share them directly in the comments

Also, I opened an additional discussion to highlight three key areas where help is needed #817 (https://github.com/gonka-ai/gonka/discussions/817) . These are not yet framed as standalone tasks, but they point to three problems where your involvement, perspective, and suggestions would be extremely valuable.

Slow nodes investigation #818 (https://github.com/gonka-ai/gonka/issues/818)

application.db growth / pruning #819 (https://github.com/gonka-ai/gonka/issues/819)

Also, you can filter issues with "up-for-grabs" label https://github.com/gonka-ai/gonka/issues?q=is%3Aissue%20state%3Aopen%20label%3Aup-for-grabs and see if there are any open tasks that have no assignee.

More on bounty program: https://gonka.ai/FAQ/#bounty-program

SegovChik avatar

So here is working solution with some limitations(Still in development, so current functional is limited to provision network+mlnode on the same server) https://github.com/inc4/gonka-nop/releases/tag/v0.1.8-rc1 . Download binary, execute ./gonka-nop setup and here we are.

SegovChik avatar

and here is our roadmap of what was done.

Implementation Milestones

Milestone 1: Core CLI Framework ✅ COMPLETE

1.1 Project Scaffolding

Initialize go.mod with dependencies

Create cmd/gonka-nop/main.go entry point

Create internal/cmd/root.go with cobra root command

Add version, status, reset, gpu-info command stubs

Create internal/cmd/setup.go (setup command with flags)

1.2 UI Utilities (needed for phases)

Create internal/ui/output.go (colored messages: Info, Success, Warn, Error)

Create internal/ui/spinner.go (progress spinner wrapper)

Create internal/ui/prompt.go (survey wrapper for interactive prompts)

1.3 State Management

Create internal/config/state.go (State struct)

Implement Save() and Load() methods

1.4 Phase System

Create internal/phases/phase.go (Phase interface + runner)

  • Create mocked phases for demo: 01_prerequisites.go (Docker, CUDA check - mocked) 02_gpu_detection.go (GPU detection - mocked) 03_network_select.go (network selection prompt) 04_key_management.go (key workflow - mocked) 05_config_generation.go (generate configs - mocked) 06_deploy.go (docker compose - mocked)

01_prerequisites.go (Docker, CUDA check - mocked)

02_gpu_detection.go (GPU detection - mocked)

03_network_select.go (network selection prompt)

04_key_management.go (key workflow - mocked)

05_config_generation.go (generate configs - mocked)

06_deploy.go (docker compose - mocked)

1.5 Integration & Demo

Wire setup command to phase runner

Test full CLI compilation (go build ./...)

Run demo: gonka-nop setup (shows full mocked flow)

1.6 Status Command

Create internal/status/status.go (NodeStatus struct, fetch functions)

Create internal/status/display.go (formatted output)

Implement 3 sections: Overview, Blockchain, MLNode

Support --mocked flag for demo

Implement gpu-info command with --mocked

Milestone 2: Test Coverage (Tests First) 🔄 IN PROGRESS

Write tests for existing code before adding new features. Target: 70%+ coverage.

2.1 Config Package Tests (target: 90%+)

state_test.go - NewState, Save, Load, Reset, MarkPhaseComplete

Add edge case tests (invalid JSON, permission errors)

2.2 Phases Package Tests (target: 80%+)

gpu_detection_test.go - recommendConfig, FormatGPUSummary

prerequisites_test.go - Mock docker/nvidia checks

config_generation_test.go - Template output validation

phase_runner_test.go - Phase execution flow

2.3 Status Package Tests (target: 70%+)

status_test.go - Mock HTTP responses, parse validation

display_test.go - Output formatting

2.4 UI Package Tests (target: 50%+)

output_test.go - Color formatting

spinner_test.go - Basic functionality

prompt_test.go - Mock survey responses (harder to test)

2.5 Integration Tests

cmd/setup integration test with mocked phases

End-to-end state persistence test

Milestone 3: GPU & Prerequisites (EXPANDED per chat analysis) ✅ MOSTLY COMPLETE

Real system detection replacing mocked implementations. Validated on mainnet (8x A100 SXM4 80GB).

3.1 GPU Detection (real nvidia-smi) ✅ COMPLETE

Parse nvidia-smi --query-gpu=index,name,memory.total,driver_version,pci.bus_id --format=csv

  • Detect GPU architecture (sm_80=A100, sm_86=A40/RTX3090, sm_89=L40/RTX4090, sm_90=H100/H200, sm_100=B200/B300, sm_120=RTX5090) — GPUArchFromName() in gpu_parser.go
  • NVLink/PCIe topology detection — name-based (H100/H200/A100 = NVLink, others = PCIe). Full nvidia-smi topo -m not yet implemented.

PCIe bandwidth warning for multi-GPU setups without NVLink

Auto-select MLNode image tag based on architecture (standard / blackwell) — selectMLNodeImage()

3.2 Docker & Runtime Checks ✅ COMPLETE

Docker availability and version check — ParseDockerVersion() in gpu_parser.go

NVIDIA Container Toolkit detection ( nvidia-ctk --version )

  • CUDA verification inside Docker container ( docker run --gpus all nvidia/cuda:12.6.0-base-ubuntu22.04 nvidia-smi ) — checkCUDAInDocker()

Docker Compose v2 check ( docker compose version ) — ParseDockerComposeVersion()

3.3 NVIDIA Driver Installation & Validation ✅ MOSTLY COMPLETE

Detect driver state: not installed / installed / version mismatch — checkNVIDIADriver()

Pre-check safety: Secure Boot status, kernel headers available, distro compatibility

Offer auto-install with user confirmation — installNVIDIADriver() via apt

  • Install Fabric Manager ( nvidia-fabricmanager-570 ) if multi-GPU NVLink detected — checkFabricManager() with auto-start + install prompt
  • Compare userspace lib version vs kernel module version vs Fabric Manager version — 3-way consistency check in checkDriverConsistency()

Detect unattended-upgrades package and warn about NVIDIA driver auto-updates — suggests apt-mark hold nvidia-driver-*

Verify CUDA version compatibility with detected driver

Warn about reboot requirement after kernel module install/update

3.4 System Prerequisites ✅ MOSTLY COMPLETE

Linux distro detection (Ubuntu, Debian, CentOS, Amazon Linux) — ParseOSRelease() in gpu_parser.go

Disk space pre-check (warn if < 250 GB free) — ParseDiskFreeGB() , ParseLsblkJSON()

NVIDIA Container Toolkit auto-installation (with user confirmation)

Docker runtime configuration ( nvidia-ctk runtime configure --runtime=docker )

Port availability check (5000, 8000, 26657 external; 5050, 8080, 9100, 9200 internal)

Milestone 4: Configuration (EXPANDED per chat analysis) ✅ MOSTLY COMPLETE

Generate production-ready configs with security and performance defaults learned from validators. Validated on mainnet deploy.

4.1 TP/PP Recommendation Algorithm ✅ COMPLETE

Model-aware TP/PP calculation (Qwen3-235B, Qwen3-32B, QwQ-32B) — recommendConfig() with 4-tier VRAM logic

gpu-memory-utilization recommendation: 0.88-0.94 based on VRAM headroom (NOT 0.99)

max-model-len calculation based on remaining VRAM after model loading

Auto-add --kv-cache-dtype fp8 for tight VRAM configs (e.g., 8x A100 40GB with 235B)

  • PP not set in vLLM args — MLNode runner auto-calculates from GPUs/TP. No --quantization fp8 either (causes MoE alignment errors)

4.2 node-config.json Generation ✅ COMPLETE

Template-based generation with go:embed

host field validation (no http:// prefix -- common mistake from chat)

hardware field auto-populated from GPU detection

max_concurrent recommendation based on GPU config

Model selection with explicit declaration (required for PoC v2)

4.3 config.env Generation ✅ COMPLETE

Template-based with validated fields

MODEL_NAME environment variable (mandatory after v0.2.8)

VLLM_ATTENTION_BACKEND = FLASHINFER for ALL architectures (3.0.12+ standard, old FLASH_ATTN rule obsolete)

4.4 docker-compose.yml Generation ✅ COMPLETE

Template-based with go:embed

Port security: bind internal ports to 127.0.0.1 (5050, 8080, 9100, 9200)

Public ports: 5000 (P2P), 8000 (API via proxy), 26657 (RPC -- via proxy only after DDoS hardening)

MLNode image tag selection based on GPU architecture detection

4.5 DDoS Protection Defaults ✅ COMPLETE

Proxy service config: GONKA_API_BLOCKED_ROUTES=poc-batches training

Proxy service config: GONKA_API_EXEMPT_ROUTES=chat inference

Default: DISABLE_CHAIN_API=true , DISABLE_CHAIN_RPC=true , DISABLE_CHAIN_GRPC=true

RPC port (26657) accessible only via proxy, not directly exposed

4.6 Sync & Pruning Configuration ✅ COMPLETE

Auto-configure persistent_peers in config.toml with known-good peers

Generate app.toml with pruning: custom , keep-recent=1000 , interval=100

Set GENESIS_SEEDS and SEED_API_URL to reliable endpoints

Enable state sync by default ( SYNC_WITH_SNAPSHOTS=true )

Milestone 5: Deployment (EXPANDED per chat analysis) ✅ MOSTLY COMPLETE

Deploy containers with real orchestration, security hardening, and sync monitoring. Validated on mainnet + testnet.

5.1 Docker Compose Orchestration ✅ COMPLETE

Multi-compose file handling (transparent -f docker-compose.yml -f docker-compose.mlnode.yml )

Automatic source config.env + sudo -E for environment variable propagation — internal/docker/env.go + compose.go

Image pull with progress display — docker compose pull

Container startup with ordered dependencies — network node first, then ML node

5.2 Firewall Configuration ⚠️ (from chat: Docker bypasses UFW)

Detect Docker's iptables behavior

  • Configure DOCKER-USER chain rules: Allow established connections Allow public ports (5000, 8000) Whitelist known Gonka seed peers DROP all other inbound to Docker containers

Allow established connections

Allow public ports (5000, 8000)

Whitelist known Gonka seed peers

DROP all other inbound to Docker containers

Offer iptables-persistent integration for rule persistence

IPv4/IPv6 resolution check for vLLM health endpoint (prevent restart loop)

5.3 Key Management (both workflows) ✅ COMPLETE

Quick workflow: generate all keys on server — 04_key_management.go

Secure workflow: accept account pubkey, generate consensus + ML keys — --account-pubkey flag

grant-ml-ops-permissions automation — 07_registration.go

Key backup guidance

5.4 Model Weight Download ✅ COMPLETE

HuggingFace model download with progress bar — standalone gonka-nop download-model command + deploy phase

Resume support for interrupted downloads — uses docker run with HF_HOME mount

SHA256 verification after download

Pre-download into HF_HOME before container startup

5.5 Health Checks & Sync Monitoring ✅ COMPLETE

Container health verification (all services running) — polls /admin/v1/setup/report

  • Blockchain sync progress with block lag display — polls Tendermint RPC /status , shows block height progress, 30min timeout

Wait for sync completion before registration (configurable timeout)

Port accessibility check (external ports reachable) — PUBLIC_URL reachability check planned

Milestone 6: Operations ⚠️ NEW (from chat: day-2 is 90% of operator time)

Post-deployment commands for ongoing node management. This entire milestone was missing from the original plan and is driven by validator chat analysis showing operators spend most time on operations, not setup.

6.1 gonka-nop status (real implementation) ✅ COMPLETE

Blockchain: block height, sync status, blocks behind, catching_up flag

Epoch: current epoch, participation status, weight, miss rate

Epoch: PoC weight, timeslot allocation, inference count, upcoming epoch, reward claim status

MLNode: model loaded, GPU utilization, PoC status, intended vs current mismatch, status freshness

Node Config: public URL, PoC callback URL, seed API, API version, height lag, upgrade plan

Security: cold key, warm key, ML permissions

Containers: running/stopped/unhealthy state inferred from setup/report checks

  • PUBLIC_URL reachability check — HTTP GET <public_url>/health , report PASS/FAIL with error details. Critical: port mismatch or wrong registered URL = validators can't verify PoC proofs = node never gains weight. Learned from testnet debugging (2026-02-11).

Network: peer count (blocked — Tendermint RPC 26657 not exposed to host on standard deployments)

Miss rate timeline (green/red dot visualization)

6.2 gonka-nop update (safe rollout) ✅ COMPLETE (implemented as M9.2)

Check timeslot_allocation via Admin API to find safe window

Disable ML node via POST /admin/v1/nodes/:id/disable

Pull new container image with progress

Update image tag in docker-compose file

Recreate container ( --no-deps --force-recreate )

Wait for model load completion (monitor logs)

Re-enable ML node via POST /admin/v1/nodes/:id/enable

Verify health after update

Distinguish auto-update (Cosmovisor: node, api) vs manual (mlnode, proxy)

6.3 gonka-nop reset (blockchain data cleanup)

Preserve keys (tmkms, account, ML) and config files

Run inferenced tendermint unsafe-reset-all --keep-addr-book inside container

Remove upgrade-info.json and cosmovisor/ directory

Restart node container

Monitor sync progress after reset

6.4 gonka-nop cleanup (disk space recovery)

Calculate current disk usage ( .inference/data/ , cosmovisor backups)

Remove old Cosmovisor backup directories

Report freed space

Recommend pruning settings if not configured

6.5 gonka-nop ml-node (Admin API wrapper) 🔄 PARTIAL

ml-node list - GET /admin/v1/nodes (status, allocation, model, hardware, PoC weight)

ml-node add - POST /admin/v1/nodes (interactive or from config)

ml-node update - PUT /admin/v1/nodes/:id (model, TP/PP, max_concurrent)

ml-node enable/disable - POST /admin/v1/nodes/:id/enable|disable

  • ml-node status - Detailed: host, ports, model+args, hardware, status/intended mismatch, epoch allocation, PoC weight, timeslots, status freshness

6.6 gonka-nop model (model management)

Switch model via Admin API (PUT /admin/v1/nodes/:id)

Show current model and next-epoch model

Warn that model changes apply next epoch only

Validate model compatibility with GPU config

6.7 Pre-upgrade Binary Download

Download inferenced and decentralized-api binaries from GitHub releases

SHA256 verification

Place in correct Cosmovisor upgrade directory

Verify permissions (chmod +x)

Milestone 7: Registration & On-chain

7.1 Registration Flow ✅ COMPLETE

submit-new-participant with correct flags (validator-key, chain-id, node URL)

Auto-fetch consensus_pubkey from setup report API

grant-ml-ops-permissions for ML key

Validate PUBLIC_URL format (no http:// prefix)

7.2 PoC Verification

Test PoC endpoint ( /api/v1/pow/init/generate )

Verify model loaded and responding

Check epoch participation after registration

7.3 Reward Management

gonka-nop claim-rewards - Simplified claim flow

Fetch seed from Admin API config

Force-claim via /admin/v1/claim-reward/recover for missed epochs

Show unclaimed reward history

7.4 Governance

gonka-nop vote - Simplified governance voting

Show active proposals

Vote with account key

Milestone 8: Advanced & Polish 🔄 IN PROGRESS

Multi-node batch management (update/status across 10+ nodes)

Miss rate timeline visualization (dot-based OK/missed display)

Cloud provider compatibility (Vast.ai port remapping, GCore bare metal)

Russian language support for error messages and prompts

Monitoring integration (Prometheus exporter + centralized push architecture) — see M8.1

Performance benchmarking integration (compressa-perf)

Self-update mechanism for gonka-nop binary

Documentation & release automation

8.1 Centralized Monitoring (Ansible) ✅ COMPLETE

Opt-in push-based monitoring for Gonka validators. Ansible-based deployment in ansible/ subdirectory.

Architecture: Exporter + Prometheus on validator → remote_write push → Central Prometheus + Grafana (operated by inc4). No inbound ports opened on validator nodes.

Components built:

  • gonka-exporter role — bundles votkon's exporter (28 metrics from 5 API endpoints), builds Docker image locally, deploys via compose
  • prometheus role — Prometheus with conditional remote_write , alert rules (11 rules in 2 groups), --web.enable-remote-write-receiver for central server

alertmanager role — conditional Telegram/Discord/Slack notifications, route-based severity

grafana role — auto-provisioned datasources + 2 dashboards (Fleet Overview, Node Deep Dive)

playbooks/deploy-all.yml — full stack for central server (exporter + prometheus + alertmanager + grafana)

playbooks/add-node.yml — add internal validator with remote_write to central

  • playbooks/client-deploy.yml — self-contained for external validators (hardcoded central URL, validates prerequisites, verifies remote_write works)

playbooks/client-teardown.yml — clean removal of monitoring from validator

inventory/client.yml.example — template for external operators

README.md — operator-focused documentation with architecture diagram, metrics table, alert rules, security guarantees

.gitignore — protects client inventory files from accidental commits

Dashboards:

  • Fleet Overview ( gonka-fleet-overview ) — multi-node overview with status, block lag, miss rate, PoC weight, GPU, earnings

Node Deep Dive ( gonka-node-deep-dive ) — per-node detail with $instance template variable

Alert rules (11):

  • Critical: GonkaMissRateHigh (>20%), GonkaNodeFailed, GonkaBlockLagCritical (>200 blocks), GonkaNodeStopped, GonkaExporterDown
  • Warning: GonkaBlockLag (>50), GonkaCatchingUp, GonkaGPUUtilizationHigh (>95%), GonkaZeroWeight, GonkaZeroInferences, GonkaStatusMismatch

Milestone 9: Version Management ✅ COMPLETE (3/4 tasks, pre-seeding deferred)

Dynamic image versions and safe upgrade handling. Addresses the "chicken and egg" problem where NOP hardcodes image versions that become stale after chain upgrades.

Source of truth: gonka-ai/gonka GitHub repository

Mainnet: main branch → deploy/join/docker-compose.yml + docker-compose.mlnode.yml

Testnet: testnet/main branch → same paths

9.1 Dynamic Image Version Fetching ✅ COMPLETE

ImageVersions struct with per-service tags (node, api, tmkms, proxy, bridge, mlnode, nginx)

FetchImageVersions() fetches from GitHub raw URLs at setup time

ParseComposeImageVersions() extracts tags from compose YAML (handles comments, bridge digest pins, proxy vs proxy-ssl)

Fallback to hardcoded versions when GitHub unreachable

Network select phase fetches and populates state

Config generation uses per-service versions

12 tests covering parsing, fallback, disambiguation

9.2 gonka-nop update (safe version update) ✅ COMPLETE

Fetch latest versions from GitHub and compare with current compose files

Show diff of version changes before applying

For manual-update services (proxy, bridge, mlnode): update image tags in compose files

Safe MLNode rollout: check timeslot_allocation → disable → pull → recreate → wait model load → enable

For Cosmovisor-managed services (node, api): inform user these auto-update at chain upgrade block

--check flag to only show available updates without applying

9.3 Cosmovisor Upgrade Pre-seeding (during deploy)

Query chain governance proposals via REST API ( /cosmos/gov/v1/proposals )

Detect pending or applied upgrade plans

Pre-download inferenced and decentralized-api binaries to Cosmovisor upgrade dirs

SHA256 verification from proposal plan.info field

Prevents node stuck in restart loop if offline during upgrade block

9.4 gonka-nop repair (detect and fix stuck nodes) ✅ COMPLETE

Detect "upgrade handler is missing" restart loop in node container logs

Parse upgrade-info.json info field for on-chain binary URLs (source of truth for mainnet vs testnet repos)

Download and place binaries in correct Cosmovisor upgrade directory (with SHA256 verification)

Update current symlink to point to upgrade directory

Restart node container

Fix: prefer upgrade-info.json URLs over GitHub release search (prevents wrong binary on testnet)

Milestone 10: Multi-MLNode Support (Separate Servers) — PLANNED

10.1 ml-node add/update/delete commands

ml-node add — POST /admin/v1/nodes (interactive + flag modes)

ml-node update <id> — PUT /admin/v1/nodes/:id

ml-node delete <id> — DELETE /admin/v1/nodes/:id

10.2 Setup type flag (--type full|network|mlnode)

--type network — chain node + API only, skip GPU/mlnode phases

--type mlnode --network-node URL — GPU server only, new mlnode-specific phases

--type full (default) — current behavior unchanged

10.3 MLNode-only setup phases

08_mlnode_config.go — generate mlnode compose + nginx only

09_mlnode_deploy.go — docker compose up + register with network node via Admin API

PoC callback URL warning for multi-server setups