Островная эволюция: K популяций одним GPU-батчем + миграция по кольцу
GPU на маленьких батчах упирается в накладные на запуск ядер (1070: батч 4000 = 306/с, 32000 = 1211/с при 99МБ видеопамяти из 8ГБ). Вместо одной гигантской популяции — 8 независимых островов по 4000: их поколения оцениваются одним жирным батчем 32к, а изоляция островов + миграция лучших по кольцу раз в 10 поколений дают разнообразие против скатывания в один локальный оптимум. На более мощной карте достаточно поднять islands. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -79,3 +79,17 @@ def test_run_evolution_gpu_batch_mode(tmp_path):
|
||||
assert count_runs(conn) >= 120
|
||||
rows = fetch_runs(conn, limit=5)
|
||||
assert all(r.search_mode.startswith("evolve-gpu") for r in rows)
|
||||
|
||||
|
||||
def test_run_evolution_islands(tmp_path):
|
||||
"""Островная модель: K популяций одним батчем + миграция по кольцу."""
|
||||
from gausse.storage.database import count_runs, open_connection
|
||||
|
||||
db_path = tmp_path / "evo_isl.sqlite3"
|
||||
summary = run_evolution(
|
||||
db_path, n_generations=4, population_size=15, seed=7, polish=False,
|
||||
use_gpu=True, islands=3, migrate_every=2,
|
||||
)
|
||||
assert summary["n_evaluated"] == 4 * 15 * 3
|
||||
conn = open_connection(db_path)
|
||||
assert count_runs(conn) == 4 * 15 * 3
|
||||
|
||||
Reference in New Issue
Block a user