Перейти к содержанию

Studio I/O и контроль run

Несколько процессов (Studio UI, worker эволюции, antivirus на Windows) пишут в один каталог run. Поэтому все критичные файлы идут через atomic replace.

Атомарная и асинхронная запись

  • atomic_write_text / atomic_write_json — temp file + os.replace
  • replace_with_retry — до 12 попыток на WinError 5/32
  • interprocess_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.