Studio I/O и контроль run¶
Несколько процессов (Studio UI, worker эволюции, antivirus на Windows) пишут в один каталог run. Поэтому все критичные файлы идут через atomic replace.
Атомарная и асинхронная запись¶
atomic_write_text/atomic_write_json— temp file +os.replacereplace_with_retry— до 12 попыток на WinError 5/32interprocess_file_lock— короткая блокировкаArtifactWriter— фон-поток JSON/PT/HTML (async_artifact_writes)
Live статус¶
write_studio_status → studio_status.json: generation, best приспособленность (fitness), RSS, CUDA, cone/cache counters, CNN_NEAT_WORKER_ID.
snapshot_evolver_memory — разложение байт: геномы, очередь, кэш отсева (screen-cache), кэш прямого прохода (forward-cache), cone.
Пауза и продолжение¶
study_control.json: request_pause, resume, checkpoint_pause. Тем же файлом пользуются Telegram-бот и Studio.
Archive v3: индекс + epochs/epoch_XXXX.json + веса; checkpoint evolution_checkpoint.pt для resume.
Статистика весов и отложенная запись¶
cnn_neat/weight_stats.py считает дешёвые O(N) агрегаты по state_dict без forward
и пишет их рядом с весами поколения:
epochs/epoch_XXXX_weight_stats.json(путь —epoch_weight_stats_relpath(gen)).tensor_aggregates(t)— на тензор: numel, mean, std, L2, abs_mean, max_abs, доли знаков, доля нулей/разреженность.summarize_state_dict/summarize_weights_store— пер-ребро (conv_*,.bias,edge_w_*) + популяционный rollup;champion_weight_scalars— плоскиеw_*для панелей.
Запись выполняется через deferred-путь: run_archive.DeferredGenerationArtifacts
собирает артефакты поколения (веса; weight_stats только если
archive_weight_stats_enabled=True). Дефолт: archive_weights_policy=top_k (k=1),
статистика и evolution_checkpoint.pt выключены. SaveManager сбрасывает их
фоново через ArtifactWriter, чтобы breed/eval не ждали диск. Значения питают
панели Lab и heatmaps бота.
См. NEAT Studio, NEAT Lab, study bot.