Конфигурация
Майнер держит настройки в одном файле TOML. Здесь перечислены все поля, которые разбирает демон, переменные окружения, которые он читает на старте, и то, что реально делает каждое значение сети. Заканчивается страница самым практичным: какие настройки можно крутить свободно, а какие решают, пройдёт ваша работа проверку или нет.
Где лежит конфиг
Путь по умолчанию - ~/.aetron-miner/config.toml. Демон разрешает его от $HOME, поэтому HOME обязан быть в окружении, под которым он работает. В том же каталоге лежат хранилище ключей, локальная база состояния и файл лога, если вы не увели их в другое место.
Файл пишет мастер init, и он же перезаписывается всякий раз, когда демон сохраняет настройки, поэтому правки руками живут до следующего сохранения. Старые конфиги по-прежнему читаются: ключ wallet из прежней раскладки принимается и игнорируется, а отсутствующие необязательные ключи откатываются к значениям по умолчанию, а не валят разбор.
Поля конфигурации
| Поле | Тип | По умолчанию | Что задаёт |
|---|---|---|---|
neuronet_id | целое | обязательно | Идентификатор Нейронета в цепи, в который входит майнер. |
model_path | путь | обязательно | Путь к весам модели, которые грузит раннер. |
keystore_dir | путь | ~/.aetron-miner/keystore/ | Каталог с зашифрованным горячим ключом. |
coldkey_ss58 | строка | не задано | Адрес SS58 холодного ключа для отображения и запросов в цепь. |
cache_dir | путь | ~/.aetron-miner/cache/ | Куда кэшируются модели и датасеты. |
max_cache_gb | целое | не задано | Мягкий потолок размера кэша в гигабайтах. |
resource_limit_pct | целое 0-100 | не задано | Потолок использования GPU. Не задано означает без лимита. |
network | mainnet, testnet, local | testnet | В какую сеть AETRON целится майнер. |
node_url | строка | по сети | Эндпоинт ноды Substrate. Перебивает дефолт сети. |
registry_url | строка | по сети | Каталог моделей, через который резолвятся веса. |
task_id | целое | 0 | Задача в цепи, на которую регистрируется майнер. |
mesh_listen | multiaddr | не задано | Адрес libp2p для приёма заданий от шлюза. |
witness_validate | булево | false | Согласие перепроверять шаги обучения других майнеров. |
runner_binary | путь | не задано | Путь к подписанному релизному бинарю раннера. |
fake_chain | таблица | не задано | Параметры симуляции, см. ниже. |
Нескольким полям строки таблицы мало.
keystore_dir содержит hotkey.json (зашифрованный) и meta.json, где лежит публичный адрес SS58, чтобы интерфейс мог показать вашу личность до разблокировки ключа. Если поля в файле нет вообще, serde откатывается на относительный путь .aetron-keystore, а не на путь от $HOME, и это стоит знать тем, кто пишет конфиг руками.
coldkey_ss58 - только адрес. Приватный ключ остаётся в вашем кошельке, и демон его не держит никогда.
cache_dir может указывать на другой том, например на второй SSD, когда веса моделей не влезают на системный диск. Тот же откат serde работает и здесь: отсутствующий ключ превращается в относительный .aetron-cache.
max_cache_gb - порог предупреждения, а не жёсткая квота. Демон предупреждает при загрузке, когда кэш вышел за него, и продолжает работать. Мастер init предлагает примерно половину свободного места на томе с cache_dir.
resource_limit_pct принимает значения от 0 до 100. Слишком низкое значение - это риск для проверки, а не настройка комфорта, потому что придушенная машина может не уложиться в тайминги задачи.
runner_binary указывает на скомпилированный релизный раннер. Когда поле задано, демон проверяет подпись бинаря против соседних файлов .digest, .sig и .pub перед запуском и отказывается стартовать при провале проверки. Молча откатываться на путь разработки он не будет. Когда поле не задано, демон запускает раннер из исходников Python в режиме разработки.
mesh_listen принимает multiaddr libp2p вроде /ip4/0.0.0.0/tcp/4101. Если оставить пустым, слушатель mesh не поднимается и единственным источником заданий остаётся цепь. Как складывается сетевой слой, описано в статье Одноранговая сеть.
witness_validate по умолчанию выключен, потому что тратит ваш GPU на чужую работу. Ответы на челленджи по вашим собственным прогонам обучения происходят всегда и этим флагом не управляются. Для проверки других майнеров нужно настоящее соединение с цепью, потому что на симулированной читать нечего.
registry_url указывает на каталог моделей, через который клиент резолвит веса. Если не задан, testnet и mainnet используют https://app.aetron.io/registry/models.json, а local не использует ничего, поэтому dev-стенду каталог кладут руками или задают явный URL здесь.
Выбор сети
network принимает mainnet, testnet или local, по умолчанию testnet. Разбор игнорирует регистр и пробелы по краям.
Каждое значение резолвится в эндпоинт ноды по умолчанию, который перебивается полем node_url, если оно задано:
network | Эндпоинт по умолчанию |
|---|---|
mainnet | wss://entrypoint-mainnet.aetron.ai |
testnet | wss://entrypoint-test.aetron.ai |
local | ws://127.0.0.1:9944 |
Во всех трёх случаях майнер подключается через subxt и отправляет настоящие экстринзики. Более ранние сборки для testnet и mainnet не возвращали ничего и тихо симулировали работу; этого больше нет, потому что обе сети задеплоены, а клиент, который до них не дотягивается, обязан сказать об этом, а не изображать деятельность.
Провал подключения к публичной сети тоже не уводит майнера в симуляцию. Незарегистрированный или недоступный майнер показывается офлайновым, и это честное состояние, вместо надписи «Mining» при отсутствии чего бы то ни было, что увидит цепь.
Ещё network выбирает адреса bootstrap и relay для libp2p и пространство имён Kademlia, поэтому майнеры из разных сетей не найдут друг друга по случайности.
Соединению с цепью нужен пароль горячего ключа в AETRON_WALLET_PASSWORD. Без него демон не может подписывать экстринзики и сообщает об этом в логе.
Переменные окружения
Переменные окружения перебивают значения конфигурации там, где есть и то, и другое.
| Переменная | Что делает |
|---|---|
AETRON_HOME | Заменяет $HOME/.aetron-miner рабочим каталогом демона. |
AETRON_WALLET_PASSWORD | Пароль горячего ключа. Нужен для соединения с цепью. |
AETRON_STATE_DB | Путь к базе состояния. По умолчанию ~/.aetron-miner/state.db. |
AETRON_MESH_LISTEN | Multiaddr для mesh. Имеет приоритет над mesh_listen в конфиге. |
AETRON_RUNNER_BINARY | Путь к релизному раннеру. Имеет приоритет над runner_binary. |
AETRON_RELEASE_PUBKEY | Путь к прибитому публичному ключу для проверки релиза вместо доверия соседнему .pub. |
AETRON_RUNNER_TOKEN | Токен, который демон передаёт раннеру для канала IPC. |
AETRON_MODEL_PATH | Путь к модели, передаваемый процессу раннера. |
AETRON_CANONICAL_DTYPE | Точность, в которой раннер грузит модель. На настоящей цепи ставится автоматически из канонической спецификации задачи, а заданное вручную не трогается. |
AETRON_CHECKPOINT_ROOT | Корневой каталог чекпоинтов обучения. |
AETRON_WEIGHTS_REGISTRY_BASE | Базовый URL для резолва весов модели. |
AETRON_BOOTSTRAP_ADDRS | Seed-пиры для первого входа в DHT. |
AETRON_RELAY_ADDRS | Адреса relay для пиров за NAT. |
AETRON_PEER_CACHE_PATH | Файл кэша пиров. Пустое значение использует aetron_miner_peer_cache.json в рабочем каталоге. Пустая строка или off отключают кэш. |
AETRON_NETWORK_ID | Суффикс имени протокола Kademlia, разделяющий пространства имён DHT. |
AETRON_LANG | Язык интерфейса CLI. Откатывается к локали ОС, затем к английскому. |
Кэш пиров - это дисковая копия недавно виденных пиров. Он держит до 256 пиров с восемью адресами у каждого, игнорирует записи старше семи дней и на старте набирает 8 самых свежих. Как только он заполнился, адреса bootstrap важны только для самого первого запуска узла.
С AETRON_NETWORK_ID стоит быть аккуратным: два майнера с разными значениями оказываются на разных именах протокола DHT и друг друга не найдут.
Параметры фиктивной цепи
Таблица fake_chain настраивает симуляцию и скрыта и от мастера, и от экрана настройки. Она применяется только тогда, когда майнер не подключён к настоящей цепи. Значения по умолчанию: job_rate_per_sec = 0.5, epoch_length_blocks = 100, emission_per_block_aet = 1.5, block_time_secs = 12, pulse_cycle_secs = 600 и first_pulse_delay_secs = 60. Задержка первого Pulse обрезается до длины цикла, если задать её больше. Ни одно из этих чисел ничего не значит в настоящей сети.
Что можно менять безопасно
Часть настроек - локальный операционный выбор. Другие кормят исполнение, которое сеть перепроверяет, и ошибка в них проявится не сообщением об ошибке, а проваленной проверкой.
Можно менять когда угодно:
cache_dirиmax_cache_gb: закэшированные файлы можно скачать заново, а потолок только предупреждает.keystore_dir, если файлы ключей переезжают вместе с ним.coldkey_ss58, это метаданные для отображения и запросов.AETRON_LANG,AETRON_STATE_DBи расположение лога.- Значения
fake_chain, они никогда не касаются настоящей сети.
Менять с осторожностью:
resource_limit_pct. Придушив машину настолько, что она не укладывается в тайминги задачи, вы теряете награду, хотя сами результаты верны.mesh_listenи переменные обнаружения пиров. Ошибка отрезает вас от доставки заданий, а несовпадающийAETRON_NETWORK_IDвообще отделяет от DHT.witness_validate. Включение отдаёт ваш GPU на проверку других майнеров; это оплачиваемая работа, но она конкурирует с вашими собственными заданиями.
Прямо влияет на проверку:
model_path. Сеть сверяет с моделью, объявленной задачей. Указание на другие веса, другое квантование или другую ревизию даёт результат, который не сойдётся при пересчёте.AETRON_CANONICAL_DTYPE. Каноническая спецификация задачи фиксирует точность. Переопределив её руками, вы получите раннер, который грузит модель не в той точности, которую ждут проверяющие, и честная работа будет помечена как расхождение. Оставьте автоматику, если только не занимаетесь отладкой.neuronet_idиtask_id. Они решают, против какой канонической спецификации проверяется ваша работа. Несовпадение означает, что вы работаете по настройкам одной задачи, а проверяют вас по другой.runner_binaryиAETRON_RELEASE_PUBKEY. Они управляют тем, какой код раннера исполняется и как проверяется его подпись. Здесь демон намеренно падает в отказ.
Общее правило простое: всё, что меняет способ загрузки модели или ход вычисления, входит в то, что сеть проверяет, и задаётся задачей, а не вашими предпочтениями. Параметры, от которых зависит пересчёт, описаны в Спецификации исполнения, а как проводится сравнение - в статье Проверка инференса.
Куда идти дальше
- Справочник CLI: команды, которые читают и пишут эти настройки.
- С чего начать майнить: что нужно до первого запуска.
- Диагностика: частые сбои и на что они указывают.
- Одноранговая сеть: как работают доставка заданий через mesh и обнаружение пиров.