kguy-v1 — throughput-fixed, breadth-widened generator
A cascade data generator. It keeps a curated, eval-calibrated TempoPFN-derived
prior wholesale and makes two changes aimed at the score lever the base design
was leaving on the table: generation rate is the compute ceiling
(stream_cpu — the trainer consumes the generator synchronously and stops at
tokens >= budget OR deadline, so realized training compute is ∝ generation
speed).
What changed vs. the base generator
Vectorised ForecastPFN evaluation (the decisive fix).
forecast_pfn_generator.py::_get_freq_componentevaluated its Fourier sum on a pandasIndexin a scalar loop — ~40 pandasIndexops per component per series, ~74% of the family's runtime spent inIndex.__new__/_arith_method. It is now a batched numpy matmul. The RNG draw order is untouched, so the sampled prior is identical to ~1e-12 — only the overhead is removed. Measured at L=4096:forecast_pfn24.0 → 8.1 ms/series,forecast_pfn_h33.1 → 10.3 ms/series (~3.0–3.2×). Because these two families carried 67% of the base corpus and were 10–60× slower than every other family, they alone set the base wall clock.Widened the prior with near-free orthogonal families + a rebalance. Three structural-axes families already implemented in
kguy_v1_families/axes.pybut never wired up are now given mass — all numpy/FFT-cheap at L=4096 and covering regimes fpfn/classical/signature never reach:fgn(3.9M pts/s) — fractional Gaussian noise / fBm, long-range dependence.fractal_multi(5.9M pts/s) — multifractal random walk: volatility clustering + fat tails.chaotic(2.1M pts/s) — Lorenz/Rössler/Mackey–Glass/logistic/Hénon under observation noise. pluscounts(zero-inflated negative-binomial) bumped in. ForecastPFN stays the plurality (0.52 combined) since it is the highest-signal family; the freed mass went to these fast, high-diversity, eval-shaped families.
Deliberately excluded (O(L³) at L=4096 — throughput killers in this regime):
ksynth_cal(1,235 pts/s),tsmixup(66k), and the vendored GP/KernelSynth/CauKer families.
Measured effect
| base | kguy-v1 | |
|---|---|---|
| end-to-end throughput | ~74k pts/s | ~141k pts/s (≈1.9×) |
| flat series (std<1e-6) | ~0.5% | 0% |
| corpus families | 9 | 13 |
cascade verify |
— | OK, [deterministic] |
Throughput ≈1.9× ⇒ the trainer spends ≈1.9× the token budget at the same wall clock (linear under the anti-trickler bound). Absolute pts/s vary with the box; the per-family 3× on forecast_pfn is the invariant driver.
Determinism / layout
Corpus is a pure function of (seed, n_series); lazy per-family imports keep
module import numpy-only (so the generation sandbox's 4096 MB rlimit is never hit
by torch); length band [64, 4096] matches [training] context_length = 4096.
Custom families live in kguy_v1_families/.
Verify / deploy
cascade verify ./kguy-v1 --chain-toml chain.toml
cascade deploy ./kguy-v1 --hub-repo kguy/cascade-2 \
--wallet-name poker --wallet-hotkey hot1