Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ER-init screen CLOSED: Molmo2-ER init wins both legs — er_60k/step_060000 is the new reference trunk

2026-08-11 16:1x–17:xxZ. The consolidated screen-close for fontaine_molmo2_er_60k_ddp4 (pre-reg, owner-steered 2026-08-09 22:14Z). The decision read itself landed 2026-08-11 13:28Z and went to the owner in-channel the same hour; this page is the durable long-form — the full story with the charts, in one place. All numbers below are read from banked artifacts (panel JSONs, the frozen decision JSON, and the salvaged train logs — the 4× box that ran this screen was retired 14:37Z the same day).

Plain words. We train robot-arm models on top of a large vision-language model (“the trunk”). Until now every run started from the stock Molmo2-4B trunk. AllenAI also publishes Molmo2-ER, the same network fine-tuned further on “embodied reasoning” — robot-flavored video understanding. Their paper says starting from ER made their robot much better; this screen asked whether that transfers to our stack. We trained our exact recipe from the ER weights and compared against two anchors we already had: our best 40k-step run from stock Molmo2, and that same run continued to 60k steps so the step counts match. The ER-initialized run ended better than both, by a margin the statistics say is real, and it was never behind after the early noise settled. Every future run now starts from this checkpoint.

The question, and what was at stake

Is allenai/Molmo2-ER — MolmoAct2’s embodied-reasoning specialization of our exact Molmo2-4B trunk — a better starting point than stock Molmo2 for our action-decoder training, holding everything else fixed? The external prior said yes and loudly: MolmoAct2’s own ablation prices the Molmo2 → Molmo2-ER swap at +6.0 LIBERO-Long at fixed everything-else, the largest single lever in their stack (deep dive). But their downstream is an action-token AR head on their data; ours is our own decoder recipe on the community-curated corpus. Priors that size are exactly the ones worth a controlled screen.

The design made the read as clean as our infrastructure allows:

  • Same recipe, verbatim: the 40k AR launcher re-pinned flag for flag (4×H100 DDP, eff-batch 48, FAST v2, same aux/condition fields, same LRs and schedule), deltas named in the pre-reg.
  • Shared shuffle seed 0 (owner call at launch): identical data order removes shuffle variance from the curve comparison — the in-run delta is the init effect.
  • Verified drop-in init: the ER config diff vs stock is RoPE metadata only; safetensors manifests are key-identical. The whole change is --backbone allenai/Molmo2-ER.
  • Rig data at natural share: the owner’s two SO-101 datasets rode along from step 0 at their natural 0.19% of the mix (no oversampling flag existed; ~0.15 expected visits per rig frame over the run). At that share it cannot move the panel — this run is an init screen, and the rig ingredient is a separate, still-open lever.
  • Two anchors, two legs: the banked 40k endpoint (stock init, the fleet reference) and the 40k→60k continuation (stock init, steps-matched). Beating the first says “better than our reference”; beating the second says “not just more steps.”

Read 1 — the in-run probe (record-only)

The 256-frame probe at shared seed: chaotic crossings through the warm-up and mid-run (the two curves swap the lead repeatedly to ~18k), then a clean separation — mean matched-step delta −0.45 from 20k on, er_60k run-best 5.10@44500 vs the baseline’s best 5.91@26500. The continuation’s probe (dashed) actually drifts up over 40k→60k while its panel number improves — the standing house lesson applies in both directions: 256-frame probes kill runs; 17,204-frame panels make claims. The probe was pre-registered record-only and stayed that way.

Read 2 — the panel rung trajectory

Four scheduled panel rungs (identical holdout, plan, and decode settings as the anchors): 7.5284@15k → 6.2892@35k → 5.8269@55k → 5.7782@60k, i.e. deltas vs the 40k endpoint of +1.52 → +0.28 → −0.18 → −0.23. The 55k rung was the first below-baseline panel read of the whole ER arc, and the endpoint extended it rather than regressing — the trajectory crossed both anchor lines between 35k and 55k and kept going.

Read 3 — the decision

The pre-registered decision read: paired per-frame Δ chunk MAE at the endpoint, n = 17,204 core frames, seeded bootstrap CI95, against both banked anchor npz files (state-copy columns byte-match across arms, so the frames are provably the same rows):

legpooledΔ pairedCI95classification
er_60k endpoint5.7782
vs 40k endpoint (6.0079)−0.2297[−0.281, −0.154]BELOW-BASELINE
vs 60k continuation (5.8602)−0.0821[−0.126, −0.025]BELOW-BASELINE

Both legs below baseline with CI excluding zero. The first leg says the ER-initialized run beats our reference trunk; the second — the one more steps alone cannot explain — says it beats stock Molmo2 at matched steps and matched recipe. First-frame MAE mirrors the direction (1.9898 vs 2.1871 / 2.0719). The ER init wins. fontaine_molmo2_er_60k_ddp4/step_060000 is the new reference trunk.

The aux heads across rungs

Panel-side auxiliary-head reads (same JSONs; ~8,987 labeled frames each), against the continuation’s endpoint:

armholding accevent accprogress MAEvisible acc
er @15k0.89890.86220.07520.7037
er @35k0.91510.87550.06550.8226
er @55k0.92000.85780.06040.8222
er @60k0.91480.85820.05950.8221
60k continuation0.89660.88050.05890.8191

At the endpoint: holding is er-better (+1.8pp), event is continuation-better (−2.2pp), progress and visible are ties. The event deficit got its own owner-requested follow-up the same day — the events one-off report found 63% of the model’s event misses are saw-it-under-threshold: in a forced-choice probe with none banned, the model names the ground-truth event class on 428/679 missed frames — the miss mode is calibration, not blindness (idea #23, on ice with a named trigger).

What this screen does NOT say

  • Nothing about the rig data. At 0.19% natural share the rig datasets are a passenger, and the pre-registered rig-holdout read was skipped by its own if-clause (no owner-rig repos in the panel plan). The rig-mixture lever (repeat-factor oversampling) remains unpriced.
  • Nothing about why ER helps — trunk representation probes vs the stock trunk would be a separate screen; the MolmoAct2 paper’s own story (robot-adjacent video pre-training) is prior, not evidence from here.
  • The probe overlay is color, not claim — decision weight sits entirely in the paired panel reads above.

What it re-prices

Every follow-on arm now sits on er_60k/step_060000 by default: the AE-attachment work (the owner’s every-layer-KV action-expert implementation, pre-reg pending the main-branch rebase), any mixture screen, and the eventual rig fine-tune chain. The 40k stock endpoint stays banked as the historical reference; the continuation run has served its purpose as the steps-matched control and closes with this post.

Run record

Launched 2026-08-09 22:53Z (relaunch at seed 0 after the seed-2 false start was stopped pre-step-1), 4×H100 box, 2.23 s/step steady. One infra incident against the run’s window: the 08-10 07:09–08:25Z credits outage stalled ticks, not the run. Train complete @60000 2026-08-11 12:36Z; chained panel_v2 eval rc=0 13:28Z; ~153 GPU-h against the amended 155 gate (the original 65 was a rate-class estimate error, amended at first poll per the pre-reg’s own correction note). Weights (step_060000, weights-only) banked to fontaine-checkpoints before the box retired; train logs salvaged to the local archive and used for the probe chart above.

Artifacts: endpoint panel report · decision JSON · rung reports @15k / @35k / @55k · anchors: 40k endpoint / 60k continuation · charts regenerable via fontaine/scripts/er60k_screen_close_charts.py (reads only banked files).