Goal
A driver to run HypoSVI absolute location over a whole KMA catalog (~15,000 events), not just a per-cluster run. GPU now makes this tractable (#5: ~3.5 s/event → ~15 h for 15k), but PocketQuake's flow is per-cluster, and HypoSVI currently locates one event at a time.
Why the current path isn't enough
run_hyposvi (pipeline/core/hyposvi_backend.py) is scoped to a cluster: it gathers events from one waveforms_dir, seeds the SVGD box from a single region_bounds, and writes one .sum.
HypoSVI.LocateEvents loops per-event (location.py:191), so the GPU sits mostly idle on a 96 GB card — the per-event ~3.5 s is dominated by Python/kernel-launch overhead, not compute. Batching events would cut this substantially.
Design questions to resolve
- SVGD init box at catalog scale. The per-cluster fix re-seeds particles to the cluster region; a single all-Korea box (~600×700 km) breaks SVGD convergence (the documented ±20–30 km failure mode). Options: per-event local box from each catalog entry, or spatial sub-binning of the catalog.
- Batching. Locate events in batches (vectorized particle clouds) to use the GPU — biggest throughput lever.
- Memory/throughput. Profile batch size vs the 96 GB budget; checkpoint/resume for a multi-hour run.
- I/O + parallelism. Picks for 15k events (catalog → waveforms → PhaseNet+), output layout, restartability.
- Outputs. One catalog-wide
.sum (+ optional per-region relocation), bootstrap uncertainties strategy at scale.
Scope
New batch entry point (e.g. pipeline.cli.locate_catalog) reusing hyposvi_backend internals (_events_dict, _resolve_eikonet_paths, _load_eikonet, run_hyposvi's box-seeding). Out of scope: the relative-relocation step (separate concern).
Prereqs: #5 (GPU) — done.
— filed via Claude Code
Goal
A driver to run HypoSVI absolute location over a whole KMA catalog (~15,000 events), not just a per-cluster run. GPU now makes this tractable (#5: ~3.5 s/event → ~15 h for 15k), but PocketQuake's flow is per-cluster, and HypoSVI currently locates one event at a time.
Why the current path isn't enough
run_hyposvi(pipeline/core/hyposvi_backend.py) is scoped to a cluster: it gathers events from onewaveforms_dir, seeds the SVGD box from a singleregion_bounds, and writes one.sum.HypoSVI.LocateEventsloops per-event (location.py:191), so the GPU sits mostly idle on a 96 GB card — the per-event ~3.5 s is dominated by Python/kernel-launch overhead, not compute. Batching events would cut this substantially.Design questions to resolve
.sum(+ optional per-region relocation), bootstrap uncertainties strategy at scale.Scope
New batch entry point (e.g.
pipeline.cli.locate_catalog) reusinghyposvi_backendinternals (_events_dict,_resolve_eikonet_paths,_load_eikonet,run_hyposvi's box-seeding). Out of scope: the relative-relocation step (separate concern).Prereqs: #5 (GPU) — done.
— filed via Claude Code