Нода. Тестирование

Тесты, которые вы можете сделать для проверки правильности настройки.

Общая информация

Очень обидно, когда вроде все сделал правильно, и все равно не получилось войти в эпоху.

Лучше все проверить несколько раз.

circle-info

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

Проверьте правильность установки ключей

Бывает такое, что в результате того, что несколько человек настраивало ноды или вы перепутали команду по назначению Consensus Public Key в результате чего у вас получились разные ключи на Ноде и в Сети.

Так вы точно в эпоху не попадете. Проверяйте!

Проверка Consensus Key

🔎 ШАГ 1. Узнать Consensus Public Key на ноде

circle-info

Внимание! Проверка происходит на сервере где находится ML Node (или Network Node, я еще сам не разобрался, т.к. у меня пока обе эти ноды находятся на одном сервере).

docker exec node wget -qO- "http://127.0.0.1:26657/status" | jq -r '.result.validator_info.pub_key.value'

ты получишь примерно:

{
  "value": "AD+NQncKPBzqw0u8KcSmlIMqogg7i4nhDfLIgIkGYiY="
}

👉 Скопируй поле "value".+

🔎 ШАГ 2. Узнать Consensus Public Key в сети

circle-info

Внимание! Проверка происходит на том сервере, где вы создавали ключи. Т.е. не на Network Node и не на ML Node.

Теперь смотрим, что сеть считает твоим ключом:

curl -s http://node2.gonka.ai:8000/chain-api/productscience/inference/inference/participant/gonka1yplcem8kfe6vm06t4sl8fskm0we2zslxxu90ta | jq

circle-info

Внимание! Замени то, что выделено жирным на адрес своего Горячего ключа.

Ты получишь:

В результате вы получите такой ответ:

{ "participant": { "index": "gonka1yplcem8kfe6vm06t4sl8fskm0we2zslxxu90ta", "address": "gonka1yplcem8kfe6vm06t4sl8fskm0we2zslxxu90ta", "weight": -1, "join_time": "1771876365572", "join_height": "2792955", "last_inference_time": "0", "inference_url": "http://203.168.252.195:8000", "status": "ACTIVE", "coin_balance": "0", "validator_key": "7GEr4jV5GjCv+C+jKOq3Eh4bwxMVs7kafm7tcWP0EOo=", "consecutive_invalid_inferences": "0", "worker_public_key": "", "epochs_completed": 0, "current_epoch_stats": { "inference_count": "0", "missed_requests": "0", "earned_coins": "0", "rewarded_coins": "0", "burned_coins": "0", "validated_inferences": "0", "invalidated_inferences": "0", "invalidLLR": { "value": "0", "exponent": 0 }, "inactiveLLR": { "value": "0", "exponent": 0 }, "confirmationPoCRatio": null }

Нас интересует значение "validator_key".

🔎 ШАГ 3. Сравни их. Они должны быть одинаковыми

Они должны совпадать. А у нас - не совпадают. Ничего удивительного нет в том, что мы не попадаем в эпоху ))

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

Как исправить: Думаю, сами разберетесь. Там не сложно.

---------------------------------------------------------------------------

Узнайте модель на вашей ноде

Внимание! Если у вас ничего не отобразилось, то, возможно, у вас ML Node находится на другом порту. Возможные варианты:

  • 5000

  • 8000

  • 8080

  • 9200

т.е. просто замените эту цифру в коде.

Ожидаемый ответ:

root@mlnode-308:/app# curl http://localhost:5000/v1/models {"object":"list","data":[{"id":"Qwen/Qwen3-235B-A22B-Instruct-2507-FP8","object":"model","created":1772106402,"owned_by":"vllm","root":"/root/models/Qwen3-235B-A22B-Instruct-2507-FP8","parent":null,"max_model_len":240000,"permission":[{"id":"modelperm-f9056e19f4b1494c9854c8df9887394b","object":"model_permission","created":1772106402,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}root@mlnode-308:/app#

circle-info

Внимание! После выполнения этой команды вы попадете в Докер Контейнер. Чтобы продолжить работать с Командрой Строкой на сервере, нужно выйти из Контейнера командой: exit

Узнать Конфигурацию Ноды

Ожидаемый ответ:

/usr/bin/python3.12 -m vllm.entrypoints.openai.api_server --model Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 --dtype float16 --port 5001 --host 0.0.0.0 --max-model-len 240000 --enable-auto-tool-choice --tool-call-parser hermes --tensor-parallel-size 4 --pipeline-parallel-size 2 --enable-expert-parallel --quantization fp8 --gpu-memory-utilization 0.846 --kv-cache-dtype fp8 --swap-space 4 --enforce-eager --cpu-offload-gb 4 --model /root/models/Qwen3-235B-A22B-Instruct-2507-FP8 --served-model-name Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 root@ecs-99605001-024:~#

Внимание! Нужно вместо mlnode-308 подставить название вашей ноды. Если вы забыли, то можете это узнать через команду:

Ожидаемый ответ- какое-то из этих:

Можно вывести имена всех контейнеров:

Ожидаемый ответ

Состояние GPU

Ожидаемый ответ:

Проверьте объявленный Конфиг

Проверяем правильность настройки ноды:

Показывает, с какими настройками у вас ML Node. Выполняется, видимо, на сервере ML Node (если у вас они раздельные).

circle-info

Внимание! Данные параметры приведены для примера. Они точно устарели. У вас будет иначе.

Проверка ноды с остановкой

Остановите ноду

Ожидаемый ответ:

{"status":"OK"}

Проверьте состояния (статуса) ноды

Ожидаемый ответ:

{"state":"STOPPED"}root@submodel-sxA100-19-14:~/gonka/deploy/join#

circle-info

Если видите что-то другое - выполните шаг по остановке ноды еще раз.

Запустите Принудительный Тест ноды

Ожидаемый ответ

Смотрите прогресс Теста по логам

Через несколько минут (обычно 5–15) должен появиться окончательный результат. После завершения PoC:

Ожидаемый ответ:

Важно, чтобы CUDA подгрузились на 100%

Чтобы выйти из теста нажмите комбинацию CTRL+C

Включение ноду

Ожидаемый ответ

{"message":"node enabled successfully","node_id":"node1"} root@submodel-sxA100-19-14:~/gonka/deploy/join#

Проверьте состояние вашей ноды:

Ожидаемый ответ:

root@ecs-99605001-024:# curl http://localhost:8080/api/v1/state {"state":"INFERENCE"}root@ecs-99605001-024:#

Узнайте статус PoV вашей ноды:

Не ожидаемый ответ:

"detail":"Cannot run POW because MLNode is currently in ServiceState.INFERENCE mode. Please stop ServiceState.INFERENCE first."}root@ecs-99605001-024:~#

Какой "ожидаемый ответ" я пока не знаю ))

Проверка контейнеров

После запуска в первую очередь надо убедиться что те параметры что ты подобрал для своей node-config.json - заработали в mlnode

Запускаем логи контейнера mlnode

Если видим что модель загрузилась как на скрине, в целом можем выйти из контейнера через комбинацию CTRL+C

Запускаем логи контейнера node

circle-info

Запускается на Network Node.

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

625 - общее кол-во, 160 - последний загруженный

выйти из контейнера через комбинацию CTRL+C

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

Ожидаемый ответ

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

Проверьте актуальный блок сети

Проверить блок на котором наша нода

Пока не знаю как )

И сравните. Должны быть рядом.

Чек-лист попадания в эпоху

Помогает понять в какую сторону искать проблему.

Ожидаемый ответ:

Красной стрелкой отмечено поле проверки, которое FAIL абсолютно у всех. Этот параметр PASS только у мастер-нод Gonka(я так думаю).

Синей стрелкой отвечено поле, которое у тебя может быть FAIL - если ты еще не попадал ни в одну эпоху.

Ссылки

КОНЕЦ

Последнее обновление