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

ExperimentConfig — полный справочник

Источник: cnn_neat/experiment.py. Менять поля только через dataclasses.replace / replace_experiment_config. Пустые пути заполняются в __post_init__.

JSON-файл (все дефолты — пример): configs/experiment.defaults.json. Загрузка: cnn_neat.experiment_io.load_experiment_config. Отсутствующие ключи оставляют дефолты библиотеки.

python -m cnn_neat write-defaults              # перезаписать пример
python -m cnn_neat write-defaults my_run.json  # копия для правок
python -m cnn_neat validate my_run.json
python -m cnn_neat run --config my_run.json

Новые группы 2026 года отдельно: API ExperimentConfig.

Воспроизводимость и задача

Параметр Default Описание
seed 42 RNG (индексы, эволюция)
positive_class 0 Класс CIFAR-10 как label 1
task_mode binary binary | multiclass (multi-tip head)
fitness_resample_each_generation False Пересэмплировать val каждое поколение (multiclass)

Топология

Параметр Default Описание
input_image_size (32, 32) Вход
output_image_size (1, 1) Выходной feature map
num_input_views 1 Число видов
max_hidden_layers 10**9 \(L_{\max}\) (sentinel = без капа)
max_neurons_per_layer 10**9 \(N_{\max}\) (sentinel = без капа)
minimal_connections True Стартовый минимальный DAG
activation None Стартовая / fallback σ (None / relu / gelu / tanh / leaky_relu)
evolve_node_activations False Opt-in: split берёт σ из пула; в рулетку добавляется mutate_activation
allowed_new_activations None Пул для split / mutate. None + флаг off → [activation]; флаг on и пустой пул → все 5 σ
output_readout mean_minus_median mean | mean_minus_median
input_channels 3 RGB
allow_variable_channels False Hidden \(C \in\) allowed
allowed_channels None → {3,8,16} Набор ширин
edge_weights False Softmax-merge скаляры

Эволюция и cone

Параметр Default Описание
population_size 100 \(P\)
num_generations 30 <=0 = until stagnation
elite_percent 0.2 \(\rho\)
offspring_queue_recent_fraction 0.5 Recent vs older
offspring_queue_breed_mode recent_split recent_split | top_fitness
offspring_queue_max_size 1000 Cap очереди
breeding_cone_enabled False Спекулятивное дерево
breeding_cone_ram_fraction 0.50 Доля RAM
breeding_cone_ram_reserve_bytes 8 GiB Резерв
breeding_cone_workers 0 Expand workers (0 = авто, все CPU через runtime_cpu)
breeding_cone_multiprocess True Process pool (реальные процессы, обход GIL)
breeding_cone_max_depth 1 Глубина
breeding_cone_prefetch_generations 1 Горизонт
breeding_cone_stockpile_factor 8.0 Oversample на last keepers; cover floor на остальных корнях
breeding_cone_warmup_timeout_sec 120 Timeout warmup
breeding_cone_fill_timeout_sec 30 Catch-up на host, если eval короче expand
mutation_propose_parallel 0 ProcessPool-мутации родителей (0 = все CPU)
mutation_propose_max_children 8 Максимум детей на родителя за предложение

Уточнение элиты

Параметр Default Описание
elite_refinement_enabled False val top \(\rho\cdot 2\) → GD → test
elite_refinement_every 1 Каждые N gen (всегда на последнем)
elite_refinement_pre_multiplier 2.0 Pre-filter
elite_refinement_train_epochs 10 Эпохи Adam
elite_refinement_train_batch_size 128 Batch
elite_refinement_lr 1e-3 LR

Периодическое дообучение и два трека

Параметр Default Описание
periodic_gd_enabled False Вкл.
periodic_gd_every 5 Каждые N gen
periodic_gd_epochs 3 Эпох на геном
periodic_gd_batch_size 256 Batch
periodic_gd_max_batches_per_epoch None Cap
periodic_gd_targets offspring_queue queue | population | elites
periodic_gd_lr 1e-3 Adam LR
periodic_gd_parallel 1 Параллельные геномы
periodic_gd_cv_enabled False K-fold
periodic_gd_cv_folds 5 \(K\)
periodic_gd_cv_train_one_fold True Учить на 1/K
periodic_gd_device None Device только для GD
gd_lineage_track_enabled False Два пула
gd_lineage_expand_slots 0 \(\Delta\) GD-слотов
periodic_gd_max_applies 0 Кап принятых GD (0 = безлимит)

Приспособленность, отсев и кэш хэшей

Параметр Default Описание
fitness_val_size 25000 Val
fitness_tiered_enabled False Screen → full
fitness_screen_size 2048 Screen n
fitness_screen_survivor_fraction 0.5 Доля на full val
fitness_screen_cache_enabled True RAM кэш отсева (screen-cache)
fitness_screen_cache_max_entries 1000 LRU
fitness_screen_cache_max_bytes 50e9 Бюджет RAM
fitness_cache_full_structure_max_copies 1 Full-hash copies
fitness_cache_effective_structure_max_copies 0 Effective copies (0=off)
fitness_forward_hash_cache_enabled False Merkle
fitness_forward_hash_cache_streaming_elite False Top-K commit
fitness_forward_hash_cache_gpu_resident False Без host spill
fitness_forward_hash_cache_preserve_protected_parents False Не evict protected
fitness_forward_hash_cache_evict_covered_parents True Covered как жертвы
fitness_forward_hash_cache_strict_capacity False Fail on overflow
fitness_forward_hash_cache_flush_after_periodic_gd False Invalidate changed
fitness_forward_hash_cache_planned False Unique-miss
fitness_forward_hash_cache_planned_from_generation 0 С какого gen
fitness_discard_screen_rejects False Rejects → −∞
stagnation_patience None Early stop
stagnation_unit generations generations | genomes
stagnation_min_delta 0 Мин. Δ для сброса patience
dynamic_population_enabled False Pop из occupancy кэша/VRAM
dynamic_population_target_occupancy 0.70 Цель заполнения
dynamic_population_cache_min 10 Cache-viable pop не держит N после успешного гена → naive + jump; seed < N оставляем; OOM сначала режет pop
dynamic_population_naive_size 100 Совместимость; после drop pop не прыгает
dynamic_population_naive_max 0 Потолок sequential (0 = max(max, naive_size))
fitness_metric balanced_accuracy Целевая метрика
eval_batch_size 45000 \(B_{\mathrm{cap}}\)
eval_batch_size_min 256 Floor shrink
adaptive_eval_batch_size True Halve при VRAM pressure
gpu_vram_cap_bytes 16e9 Только лог
vram_usage_threshold 0.80 Порог shrink
empty_cuda_cache_each_generation True empty_cache
fitness_eval_parallel 1 Параллельный eval
decision_rule score score | probability | quantile
decision_threshold 0.0 Порог
positive_prior None Для quantile

Исполнение на GPU и видеопамять популяции

Параметр Default Описание
gpu_memory_fraction 0.85 Доля устройства
cuda_graph_memory_reserve_bytes 600e6 Резерв graphs
forward_runtime eager eager | compile | cuda_graph
torch_compile_mode reduce-overhead compile
cuda_graph_warmup_iters 3 Warmup
use_amp True AMP
cudnn_benchmark False cuDNN
release_intermediate_activations True Drop slots
offload_genome_after_eval False CPU после eval
keep_population_on_gpu_within_generation True Держать pop на GPU
adaptive_population_vram True Host-stage при >50%
population_vram_resident_threshold 0.50 Порог staging
population_gpu_batch_frac_min/max 0.40 / 0.50 Чанк VRAM
population_gpu_chunk_bytes None Cap весов чанка
cuda_memory_release_every_n_genomes 0 empty_cache каждые N

Данные и spill

Параметр Default Описание
num_workers / pin_memory 0 / True DataLoader
cifar_root, val_indices_file, … "" Пути (auto)
cache_val_on_gpu True Val на CUDA
cache_refinement_test_on_gpu True Test cache
cache_refinement_train_on_gpu True Train cache
periodic_gd_spill_refinement_train True Train→host между GD
periodic_gd_fold_only_gpu True Только активный fold
periodic_gd_park_forward_hash_cache True Park Merkle перед GD
cache_mode val_only val_only | full_train

Артефакты

Параметр Default Описание
save_run_path "" Auto runs/...
save_format archive archive | legacy
archive_weights_policy top_k full | top_k | none; default champion-only tensors
archive_weights_top_k 1 Если top_k
archive_weight_stats_enabled False JSON агрегатов весов (epoch_*_weight_stats.json)
runtime_checkpoint_enabled False evolution_checkpoint.pt (полная популяция; exact resume)
archive_restore_mode strict strict | auto
live_dashboard_* 5 / 100 / 1 HTML refresh
async_artifact_writes True Фон I/O