You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The surveillance the compile-axis arc exists for. The persistent cache and
--xla_gpu_autotune_level=0 are SETTINGS, so a config drift or an XLA_FLAGS
clobber (the PyAutoNerves#127 failure that went undetected for two months)
puts the worst case back with nothing failing.
Reads the workspace's jax_compile/pins.json and reports warm rows that are
unpinned or have drifted. Every comparison happens strictly inside one
(hardware, hostname, jax_version, mixed_precision, cache_state); cross-key
pairs are never a regression. A jax_version bump recompiles ONCE BY DESIGN, so
it surfaces as a new unpinned key rather than as drift.
Two corrections found by running it against the real corpus rather than
trusting the design:
1. Rows PREDATING their pin are not drift. The first run flagged four, all of
them July-16 measurements the July-28 pin had been chosen over -- i.e. it
reported the improvement that set the pin as though it were a regression.
Drift now requires a row newer than its pin.
2. That exposed the deeper flaw, fixed in autolens_profiling#104: pins must be
sticky. With "most recent wins", re-deriving pins after a cache regression
would have quietly baked the regression in and the surveillance would
report all-clear forever.
Thresholds are deliberately generous and require BOTH gates -- >= 2.0x the pin
AND >= 1.0s absolute. The ratio alone screams about sub-second cells where
100ms of jitter is 3x; the floor alone misses a cheap cell degrading by an
order of magnitude. Host load alone has produced 7x errors in this corpus, and
an alarm that cries wolf gets ignored.
Against the real corpus: 25 pins, 0 drifted, 0 unpinned.
11 more tests, including a synthetic warm-reverting-to-cold row proving the
alarm fires, each comparability field proving it does not fire across the key,
and a guard that the Brain's mirrored key definition matches the workspace's
pins.py (mirrored rather than imported, since importing would drag the JAX
stack into the Brain).
Phase 2 of 3, Brain side. Pairs with autolens_profiling#104.
Prompt: PyAutoMind active/compile_warm_baseline_dashboard.md.
|`campaign`| Which grid runs are done / CPU-unusable / missing on this tier, and how do I dispatch the rest? | dispatch plan (local sweep flags incl. the per-run timeout; A100 submit list) |
23
23
|`ingest`| Which probe JSONs aren't in the vram tables yet, and which results have no pin? | table-update rows, pin list, baseline + dashboard steps |
24
+
|`ingest --axis compile`| Which warm compile rows are unpinned, and which have drifted from their pin? | drifted rows (with pinned vs observed), unpinned keys, confirm/classify/re-pin steps |
24
25
|`triage`| What do the pinned-drift findings mean? | per-finding classification: stale pin → re-pin here; library regression → `bug/` via intake |
25
26
26
27
```
@@ -41,9 +42,24 @@ bucketed by **hardware**, with `mixed_precision` a separate field. The two
41
42
vocabularies do not interchange, so the compile axis maps tiers itself rather
42
43
than reusing `TIER_CONFIGS`.
43
44
44
-
`--axis compile` currently serves `campaign` (coverage); `ingest` and `triage`
45
-
reject it with exit 5 until the compile pins land, so a compile flag can never
46
-
silently return a runtime answer.
45
+
`--axis compile` serves `campaign` (coverage) and `ingest` (warm-pin drift);
46
+
`triage` rejects it with exit 5 until drift classification lands, so a compile
47
+
flag can never silently return a runtime answer.
48
+
49
+
**Drift is deliberately hard to trigger.** A row counts only if it is *newer*
50
+
than its pin, at least `2.0x` the pinned value, **and** at least `1.0 s` above it
51
+
in absolute terms. Rows predating the pin are the history the pin was chosen
52
+
over — flagging them would report the improvement that set the pin as a
53
+
regression. The ratio alone screams about sub-second cells where 100 ms of
54
+
jitter is 3x; the absolute floor alone misses a cheap cell degrading by an order
55
+
of magnitude. Both gates, generous, because host load alone has produced 7x
56
+
errors in this corpus and an alarm that cries wolf gets ignored.
57
+
58
+
Pins live in the workspace (`jax_compile/pins.json`) and are **sticky** — the
59
+
workspace's `update_pins.py` will not move an existing pin without `--repin`. If
60
+
pins auto-followed the newest measurement, re-deriving them after a cache
61
+
regression would bake the regression in and the surveillance would report
62
+
all-clear forever.
47
63
48
64
**Compile timings are host-load-sensitive** — the first measurements in
49
65
`jax_compile/README.md` were wrong by up to **7×** (851 s vs 117 s for the same
0 commit comments