LIRO Stage 1 results

Snapshot published 2026-10-13 01:29 UTC; the campaign is still running, so numbers and videos of later snapshots differ. Campaign directory generated/liro_stage1_20261011, first run started 2026-10-11 20:04 UTC, code aa1e901e0, seed 73, 2273402 parameters in the base network. All ten arms train on this machine (ankac-dgxc-4gpu); the OSMO wave ordered on 2026-10-11 has not started because the dispatcher stopped reporting at 20:15 UTC that day.

1. The ten arms

Every arm is the base configuration with one change. The selection metric is the mean final residual of the full-horizon validation (4 held-out worlds, 8 queries per step, the horizon of the growth stage); lower is better and the trainer keeps the checkpoint of the best eligible epoch. "rho after 8" is the cheap validation's pose error ratio against the float64 reference after 8 queries on one step (1 = the predictor pose, mean over 8 worlds). Momentum drift is relative to the gravity impulse over the rollout. Resets count training worlds that tripped a guard and were replaced; the figure in brackets splits them by guard. Wall-clock is the sum of the epoch times; three or four trainers shared one GPU.

armablationchange against basestatusepochsbest metricbest epoch (K x H)last metricrho after 8 (last)momentum drift (last)survivors (last)resets (by guard)hoursbench
basedesignjoint edges, per-body token frame, formula translation, energy-only losscompleted36 / 360.0397936 (8 x 128)0.039790.5864.38e-054 / 42258 (anchor_gap 2251, non_finite 7)3.56not yet
learned_tr6translation: learned read-out query per articulation instead of the formulacompleted36 / 360.0933826 (8 x 128)0.11740.770.07374 / 42899 (anchor_gap 2887, non_finite 12)3.39not yet
no_tr6translation: no rigid shift after a querycompleted36 / 360.058733 (8 x 128)0.067470.6510.3584 / 42670 (anchor_gap 2656, non_finite 14)3.35not yet
art_frame7token frame: one shared articulation frame instead of per-body framesrunning21 / 360.147719 (8 x 128)0.20882.024.18e-054 / 41454 (anchor_gap 1446, non_finite 8)2.72not yet
all_pair8edges on every pair of bodies instead of joints onlyrunning21 / 360.185120 (8 x 128)0.20622.082.44e-054 / 41665 (anchor_gap 1655, non_finite 10)2.74not yet
gn_input3the body's local 6x6 Gauss-Newton step as an input featurerunning20 / 360.116320 (8 x 128)0.11630.8677.39e-054 / 41387 (anchor_gap 1372, non_finite 15)2.53not yet
gn_anchor4output anchored to the local Gauss-Newton step, scale starts at 0.5running20 / 360.16918 (8 x 128)0.26041.84.34e-054 / 41710 (anchor_gap 1696, non_finite 14)2.69not yet
teacher5teacher loss from 8 damped Gauss-Seidel sweeps, every second updaterunning18 / 360.153615 (8 x 128)0.36272.023.31e-054 / 41244 (anchor_gap 1237, non_finite 7)2.39not yet
ik_fk2reduced route: inverse then forward kinematics projection, no parametersrunning23 / 360.0301821 (8 x 128)0.1061.120.9534 / 40 (none)3.01not yet
reduced_learned1reduced route: learned head gives hinge increments, then forward kinematicsrunning22 / 360.0279822 (8 x 128)0.027980.7410.3264 / 40 (none)2.56not yet

2. Training curves

Dashed lines are runs still training. The grey bands and the labels above each panel are the growth stages of the regime (the largest iteration count K and horizon H a training job can have); the validation horizon grows with the stage, so a metric is comparable with another only inside one band.

selection metric per epoch
The selection metric. In the last stage (K up to 32, H up to 128) the validation runs 8 queries per step over 128 steps.
error ratio after 8 queries per epoch
Pose error against the float64 fixed point of the step energy after 8 queries, relative to the predictor's error. Below 1 the network moves the bodies towards the reference.
error ratio against the number of queries
Convergence over queries at the best epoch of each arm. A flat curve means the network stops improving the pose after a few queries.
residual per step of the rollout
How the step residual behaves along the full-horizon rollout at the best epoch. A flat trace means a stable solver; a rising trace means the errors build up over the steps.
anchor gap per step of the rollout
The largest joint anchor gap (in units of the reference length) along the same rollouts.
momentum drift per epoch
Momentum drift of the free (unanchored) articulations over the validation rollout. The formula translation (base) is the exact minimiser of the step energy over a rigid shift, which keeps the momentum error small; the learned and the missing translation do not have that property.
training loss per epoch
Training loss. The loss is normalised per world, so its level depends on the job mix of the stage.
resets per epoch
Guard trips during training. Each trip replaces the world and the job continues on a fresh one.
step cap fraction per epoch
The step cap ramp. The cap starts at 10 percent of the full value and rises over 8 epochs while the selection metric improves; it resets at a growth-stage change.

3. Benchmark

Held-out sets, best checkpoint of each arm: tier A is the error ratio against the float64 reference after K queries, the SolverVBD rows are the same ratio after n iterations of the Newton solver (compliant ALM and legacy variants; n = 512 shows the formulation floor), tier B is the rollout survival and energy. The benchmark runs on GPU 1 with no training on it, one arm after another.

No benchmark has finished yet. The queue on GPU 1 writes <run>/bench/summary.md per arm; this page picks them up when it is rebuilt.

4. Videos

Left: the network with K queries per physical step. Middle: SolverVBD (compliant ALM) at the same number of iterations. Right: SolverVBD at many iterations, the converged reference. All three start from the same state and see the same prescribed base motion. One video frame per physical step, so the playback is slow motion.

base on uniform_K [1]: anchored 5-body, anchored 6-body; base rotate, translate / dt 5.4 ms; joint K 2.83e+05 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.0139 L_ref, final residual 0.0253
base on uniform_K [3]: free 8-body / dt 3.9 ms; joint K 8.28e+06 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.00042 L_ref, final residual 0.0521
base on uniform_K [4]: anchored 3-body; base translate / dt 4.7 ms; joint K 7.58e+03 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.017 L_ref, final residual 9.05e-05
base on uniform_K [8]: free 7-body, free 3-body / dt 7.0 ms; joint K 3.75e+06 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.000823 L_ref, final residual 0.203
base on uniform_K [12]: anchored 4-body, anchored 8-body; base held, translate / dt 7.7 ms; joint K 2.31e+05 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.0332 L_ref, final residual 0.0183
base on uniform_K [15]: anchored 6-body, free 4-body; base rotate / dt 5.0 ms; joint K 1.77e+05 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.0189 L_ref, final residual 0.00168
base on long_chains [0]: anchored 16-body; base rotate / dt 14.4 ms; joint K 323 to 8.72e+05 N/m. 600 steps, 8 queries per step. network failed: anchor_gap at step 7; final anchor gap 2.7 L_ref, final residual 0.454
base on long_chains [3]: free 13-body / dt 3.9 ms; joint K 1.24e+05 to 2.65e+07 N/m. 600 steps, 8 queries per step. final anchor gap 0.00167 L_ref, final residual 0.0219
base on trees [0]: free 7-body / dt 1.9 ms; joint K 3.2e+05 to 1.05e+08 N/m. 600 steps, 8 queries per step. final anchor gap 0.00986 L_ref, final residual 0.276
base on trees [2]: anchored 7-body; base held / dt 1.7 ms; joint K 1.55e+04 to 1.72e+07 N/m. 600 steps, 8 queries per step. final anchor gap 0.748 L_ref, final residual 0.206
base on four_bar [1]: free 4-body / dt 5.2 ms; joint K 8.21e+05 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.00122 L_ref, final residual 0.0581
base on stiff [3]: free 8-body / dt 3.9 ms; joint K 4.92e+07 to 2.42e+08 N/m. 600 steps, 8 queries per step. SolverVBD panels skipped: the joints do not share one stiffness; final anchor gap 0.0025 L_ref, final residual 4.69
base on fast_dt [0]: anchored 5-body, anchored 5-body; base held, held / dt 1.4 ms; joint K 1.08e+04 to 4.1e+07 N/m. 600 steps, 8 queries per step. SolverVBD panels skipped: the joints do not share one stiffness; final anchor gap 0.0303 L_ref, final residual 0.0231
base on long_chains [0]: anchored 16-body; base rotate / dt 14.4 ms; joint K 9.68e+03 N/m (uniform-stiffness twin). 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.186 L_ref, final residual 0.0113
base on long_chains [3]: free 13-body / dt 3.9 ms; joint K 1.24e+05 N/m (uniform-stiffness twin). 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.042 L_ref, final residual 0.0324
base on trees [0]: free 7-body / dt 1.9 ms; joint K 5.41e+05 N/m (uniform-stiffness twin). 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.000486 L_ref, final residual 0.000269
learned_tr on uniform_K [1]: anchored 5-body, anchored 6-body; base rotate, translate / dt 5.4 ms; joint K 2.83e+05 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.0258 L_ref, final residual 0.0251
learned_tr on uniform_K [8]: free 7-body, free 3-body / dt 7.0 ms; joint K 3.75e+06 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.00116 L_ref, final residual 0.282
learned_tr on trees [0]: free 7-body / dt 1.9 ms; joint K 3.2e+05 to 1.05e+08 N/m. 600 steps, 8 queries per step. SolverVBD panels skipped: non-uniform joint stiffness; final anchor gap 0.115 L_ref, final residual 0.039
no_tr on uniform_K [1]: anchored 5-body, anchored 6-body; base rotate, translate / dt 5.4 ms; joint K 2.83e+05 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.0233 L_ref, final residual 0.0119
no_tr on uniform_K [8]: free 7-body, free 3-body / dt 7.0 ms; joint K 3.75e+06 N/m. 600 steps, 8 queries per step, SolverVBD at 8 and 64 iterations. final anchor gap 0.000604 L_ref, final residual 0.165
no_tr on trees [0]: free 7-body / dt 1.9 ms; joint K 3.2e+05 to 1.05e+08 N/m. 600 steps, 8 queries per step. SolverVBD panels skipped: non-uniform joint stiffness; final anchor gap 0.0016 L_ref, final residual 0.00549

5. Anchor gap over the rollouts, network against SolverVBD

From the rollouts of section 4: the largest joint anchor gap of the world after every physical step, measured with the same joint geometry for every solver (the distance between the two anchor points of a joint, in units of the reference length L_ref; the trainer fails a world above 3 L_ref). An anchored chain under load has a physical gap, the stretch of its soft joints, so the question is whether the network reproduces the gap of the converged solver, not whether it reaches zero.

anchor gap curves of base
base: the solid line is the network, the dashed line SolverVBD at the same iteration count, the dotted line SolverVBD at many iterations (the converged reference). A dash-dotted vertical line marks the step at which a rollout failed. Worlds without SolverVBD panels have joints of different stiffness or a closed loop.
anchor gap curves of learned_tr
learned_tr: the solid line is the network, the dashed line SolverVBD at the same iteration count, the dotted line SolverVBD at many iterations (the converged reference). A dash-dotted vertical line marks the step at which a rollout failed. Worlds without SolverVBD panels have joints of different stiffness or a closed loop.
anchor gap curves of no_tr
no_tr: the solid line is the network, the dashed line SolverVBD at the same iteration count, the dotted line SolverVBD at many iterations (the converged reference). A dash-dotted vertical line marks the step at which a rollout failed. Worlds without SolverVBD panels have joints of different stiffness or a closed loop.
armworldjointsmean gap, network (L_ref)mean gap, SolverVBD same iterationsmean gap, SolverVBD referencenetwork / referencenetwork rollout
basefast_dt [0]100.0458n/an/an/aall 600 steps
basefour_bar [1]40.001421.98e-051.95e-0572.6all 600 steps
baselong_chains [0]160.984n/an/an/astep 7
baselong_chains [3]120.00815n/an/an/aall 600 steps
basestiff [3]70.00363n/an/an/aall 600 steps
basetrees [0]60.00742n/an/an/aall 600 steps
basetrees [2]70.688n/an/an/aall 600 steps
baseuniform_K [1]110.02730.02810.02780.982all 600 steps
baseuniform_K [12]120.03330.05360.03390.983all 600 steps
baseuniform_K [15]90.0220.02180.02181.01all 600 steps
baseuniform_K [3]72.69e-048.32e-053.52e-057.65all 600 steps
baseuniform_K [4]30.01760.01780.01770.996all 600 steps
baseuniform_K [8]80.001241.77e-048.03e-0515.4all 600 steps
basefast_dt [0] twin100.008860.009030.009070.977all 600 steps
baselong_chains [0] twin160.6150.6340.6160.998all 600 steps
baselong_chains [3] twin120.04030.07740.05630.717all 600 steps
basestiff [3] twin70.003075.68e-052.06e-05149all 600 steps
basetrees [0] twin65.32e-044.25e-044.25e-041.25all 600 steps
basetrees [2] twin70.6730.4070.4071.65all 600 steps
learned_trtrees [0]60.0823n/an/an/aall 600 steps
learned_truniform_K [1]110.02660.02810.02780.955all 600 steps
learned_truniform_K [8]88.21e-041.77e-048.03e-0510.2all 600 steps
no_trtrees [0]60.00251n/an/an/aall 600 steps
no_truniform_K [1]110.02680.02810.02780.964all 600 steps
no_truniform_K [8]89.40e-041.77e-048.03e-0511.7all 600 steps

6. Cluster copies

The same ten configurations and seed ran on the OSMO cluster, one L40 each (dispatcher inbox entry 26, campaign liro1, code aa1e901e0). They are a second sample of every arm: the same code and data, a different GPU and a different order of floating-point sums, so the curves differ from the local runs where training is sensitive. Reports are pulled from the branches osmo/liro/liro1/<arm>_s73.

armablationstatusepochsbest metricbest epoch (K x H)last metricsurvivors (last)hourslocal copy: best metric
basedesigncompleted36 / 360.0339436 (8 x 128)0.033944 / 42.040.03979 (36 epochs)
learned_tr6completed36 / 360.105828 (8 x 128)0.15464 / 41.920.09338 (36 epochs)
no_tr6completed36 / 360.0676431 (8 x 128)0.07674 / 41.850.0587 (36 epochs)
art_frame7completed36 / 360.0145736 (8 x 128)0.014574 / 42.010.1477 (21 epochs)
all_pair8completed36 / 360.0368435 (8 x 128)0.038044 / 42.130.1851 (21 epochs)
gn_input3running33 / 360.0266229 (8 x 128)0.081874 / 41.960.1163 (20 epochs)
gn_anchor4running33 / 360.0552332 (8 x 128)0.058254 / 41.980.169 (20 epochs)
teacher5running24 / 360.0996922 (8 x 128)0.15174 / 42.000.1536 (18 epochs)
ik_fk2running31 / 360.0119831 (8 x 128)0.011984 / 41.990.03018 (23 epochs)
reduced_learned1running29 / 360.0199428 (8 x 128)0.02874 / 41.990.02798 (22 epochs)
cluster selection metric per epoch
Selection metric of the cluster copies. Compare with the first figure of section 2.

7. Notes