Repository navigation
Releases: Huy-Quang-Dao/instantTrack
Release list
InstantTrack v1.2.0: Muon, CUDA-graph updates, 0.12 h to target
Overview
InstantTrack 1.2.0 makes training both need fewer iterations and run more iterations per second. It adds the Muon optimizer for the hidden layers of the world model and the policy, captures the two update phases as CUDA graphs, encodes the goals of each imagined rollout in one batch, and uses a smaller policy. On the same RTX 5090, simulator, MDP and evaluator as before, the time to reach an evaluation normalized return of 0.82 with 0 of 40 LAFAN1 clips failed (held for 3 consecutive checkpoints) drops from 0.19 h to 0.12 h (mean of 5 seeds; four seeds reach it at 0.10 h). Over SuperMimic + EMA (0.55 h) the speed-up goes from 2.8× to 4.7×. Return, body pose error and contact agreement improve at equal training time.
All three policies after 6 minutes (0.10 h) of training. Across all 40 clips at this checkpoint (seed 0), SuperMimic + EMA fails 15, v1.1 fails 6 and v1.2 fails 0.
Highlights
| 1× RTX 5090, 40 LAFAN1 clips | SuperMimic + EMA | v1.1.0 | v1.2.0 |
|---|---|---|---|
| seeds | 3 | 5 | 5 |
| time to target, held ×3 (mean) | 0.55 h | 0.19 h | 0.12 h |
| per seed | 0.50 / 0.54 / 0.60 | 0.15 / 0.16 / 0.25 / 0.20 / 0.20 | 0.10 / 0.10 / 0.10 / 0.10 / 0.18 |
| iterations to target | 5.7k–7.0k | 3.7k–5.8k | 3.3k–3.4k (seed 4: 6.0k) |
| iterations per second | 3.08 | 6.28 | 8.74 |
| return / failed clips at 0.15 h (mean) | 0.540 / 12.3 | 0.822 / 0.2 | 0.855 / 0.2 |
| return at 0.5 h (seeds 0–2) | 0.819 | 0.862 | 0.876 |
| body position / orientation error, 0.5 h | — | 3.44 cm / 7.2° | 3.24 cm / 6.7° |
| contact agreement / foot slip, 0.5 h | — | 0.804 / 6.76 cm/s | 0.818 / 6.63 cm/s |
| root drift, 0.5 h | — | 69 cm | 60 cm |
| return at 1.5 h (one run each, same session) | 0.879 | 0.880 | 0.886 |
The 0.5 h accuracy rows compare v1.1 and v1.2 on seeds 0–2, evaluated in the same session. The v1.2 runs were checkpointed every 1.5 minutes. All tables use only the checkpoints on the 3-minute schedule of earlier releases, and using every checkpoint gives the same times. Every number is regenerated from the logs in results/runs/ by tools/make_report.py; the README has the full tables.
What changed
Added
--muon(optimizer): Muon (torch.optim.Muon, Newton–Schulz-orthogonalized momentum; Jordan et al. 2024, Liu et al. 2025) for the hidden weight matrices of the world model and the policy, withmatch_rms_adamwscaling so the existing lr and schedule apply. Input and output layers, biases, norms and the critic stay on Adam.--cuda_graph(systems): one world-model update and one policy + critic update (forward, BPTT through the 32-step imagination, optimizer, EMA) are each captured once as a CUDA graph and replayed every iteration. Requires--no_sync --fused_adam.--batch_goal_enc(systems): the motion encoder runs once per imagined rollout on all of its goals, which depend only on the reference.- Smaller policy: encoder and decoder 1024-512-256 instead of 2048-1024-512-256 (
--enc_hidden,--dec_hidden). This is a network-size choice; see "Where the gain comes from". instanttrack_v1.1preset (the exact v1.1 configuration).- Experimental flags, kept so that the negative results below can be reproduced. No preset uses them:
--muon_on,--pi_simba,--wm_specnorm. - Run logs, commands and metrics for all 33 runs of this round (
e81–e113), and new videos in the README and on the project page.
Changed
- The
instanttrackpreset is now v1.2 (v1.1 +--muon --cuda_graph --batch_goal_enc --enc_hidden 1024,512,256 --dec_hidden 1024,512,256). tools/make_report.pycompares every method on the same 3-minute checkpoint schedule and extends the ablation ladder with the v1.2 steps.
Where the gain comes from
Cumulative, on seeds 0–2, against v1.1 re-run with the same 0.5 h, 1.5-minute-checkpoint protocol:
| held ×3 | it/s | |
|---|---|---|
| v1.1 | 0.15 / 0.15 / 0.16 h | 6.29 |
| + Muon | 0.10 / 0.15 / 0.17 h | 6.13 |
| + CUDA-graph updates, batched goal encoding | 0.10 / 0.15 / 0.10 h | 6.98 |
| + policy 1024-512-256 = v1.2 | 0.10 / 0.10 / 0.10 h | 8.74 |
- Muon reduces the iterations needed and needs both networks. Muon on only the policy gives 0.15 h, and on only the world model 0.20 h (seed 0). The world model's error at the end of its 8-step training window (iteration 3000, seed 0) is 0.53 with Adam, 0.32 with Muon on the world model only and 0.20 with Muon on both. Spectral normalization of the world model gives 0.20 h, so the gain does not come from a smoother model alone.
- CUDA graphs remove the launch overhead of the two update phases. Before, the GPU was idle about 30 % of each iteration. On v1.1 alone they raise throughput from 6.29 to 6.95 it/s.
- The smaller policy adds 25 % iterations per second. Without Muon it needs as many extra iterations as it saves (0.15 / 0.15 h); with Muon it does not.
The smaller policy is a network-size choice, i.e. a hyperparameter, not a method contribution. Larger problems may need a larger policy. With SuperMimic's policy size (2048-1024-512-256), the general changes alone (Muon, CUDA-graph updates, batched goal encoding) already give:
| seeds 0 / 1 / 2 | policy | held ×3 | mean | it/s |
|---|---|---|---|---|
| v1.1 | 2048-1024-512-256 | 0.15 / 0.15 / 0.16 h | 0.15 h | 6.29 |
| + Muon, CUDA graphs, batched goal encoding | 2048-1024-512-256 | 0.10 / 0.15 / 0.10 h | 0.12 h | 6.98 |
| v1.2 (+ smaller policy) | 1024-512-256 | 0.10 / 0.10 / 0.10 h | 0.10 h | 8.74 |
The larger-policy configuration is measured on 3 seeds only. To train it, add --enc_hidden 2048,1024,512,256 --dec_hidden 2048,1024,512,256 to the instanttrack preset.
Tried and not adopted
Compared with the same seed of v1.1 re-run for 0.5 h with 1.5-minute checkpoints (seeds 0 / 1 / 2: 0.15 / 0.15 / 0.16 h). Single seed unless stated. The flags remain in the code, and the logs are in results/runs/.
| change | held ×3 | why not |
|---|---|---|
| Muon on the policy only / world model only | 0.15 / 0.20 h | the gain needs both |
| spectral norm on the world model | 0.20 h | slower |
| SimBa residual policy 512×2 (2 seeds) | 0.20 / 0.15 h | no gain, 6.07 it/s |
| CUDA-graph updates + small policy without Muon (2 seeds) | 0.15 / 0.15 h | faster iterations, but more of them |
| horizon 24 / 16 | 0.15 / 0.20 h | no gain |
| 200 world-model-only warm-up iterations | 0.15 h | no gain |
| lr 6e-4 (3 seeds) | 0.15 / 0.30 / 0.15 h | hyperparameter tuning, not consistent |
| EMA 0.997 (seed 2, 0.75 h run; v1.1: 0.25 h) | 0.40 h | slower |
| failure-focused resets 0.5 (seed 2, same protocol) | 0.15 h | tuning on one seed; not confirmed |
Known limitations
- The smaller policy is a hyperparameter choice. With the original policy size, the other changes give 0.10 / 0.15 / 0.10 h on seeds 0–2 (3 seeds only).
- Seed 4 holds the target only at 0.18 h. It first meets the target at 0.12 h, but
jumps1_subject2then fails at the 0.15 h and 0.175 h checkpoints. Three re-evaluations of each of those checkpoints again had one failed clip, so this is a real regression on a hard clip, not evaluation noise. - At 1.5 h (one run each), v1.1 keeps slightly lower pose errors: body position 2.96 vs 3.01 cm, orientation 5.8° vs 6.0°, joints 3.76° vs 3.96°.
- Global root drift at 1.5 h is 52 cm, against 50 cm for SuperMimic + EMA (one run each).
- Under
--cuda_graph, Muon's learning rate is a Python float fixed at capture, so it does not follow the cosine schedule. In a 1.5 h run that puts it at most 8 % above the schedule. - v1.2 was assembled on seeds 0–2 and then run on seeds 3 and 4. Accuracy at 0.5 h is measured on 3 seeds, and the 1.5 h comparison is a single run.
- The baseline is our reimplementation of SuperMimic (the mjlab port of
supermimic_vibed), not the authors' code. Muon and the smaller policy are not specific to InstantTrack and could help SuperMimic too; we have not measured that. - Simulation only (Unitree G1, LAFAN1). There is no sim-to-real experiment.
Compatibility and upgrade
No breaking changes. v1.0 and v1.1 checkpoints and logs load and evaluate unchanged. --cuda_graph needs a CUDA GPU. To reproduce v1.1 exactly:
scripts/train.sh instanttrack_v1.1 it_v11_s0 --seed 0 --max_hours 0.75To train v1.2:
git pull && uv sync
scripts/train.sh instanttrack it_s0 --seed 0 --max_hours 0.5Assets
The videos attached to this release show motions derived from LAFAN1 (Ubisoft La Forge, CC BY-NC-ND 4.0). They are provided for non-commercial research and illustration only and are not covered by the repository's MIT license.
v1.2_equal_time_6min.mp4: SuperMimic + EMA, v1.1 and v1.2 side by side after 6 minutes of training, on 4 hard clips.v1.2_highlights_6min.mp4: the v1.2 policy after 6 minutes of training, on 6 clips.v1.2_vs_supermimic_1.5h.mp4: SuperMimic + EMA and v1.2 side by side after 1.5 h of training.
Full changelog: CHANGELOG.md · v1.1.0...v1.2.0
InstantTrack 1.1.0: reference-residual policy, 0.19 h to target
Overview
InstantTrack 1.1.0 changes one thing in the policy: the decoder now outputs a correction on top of the next reference joint pose instead of an offset from the robot's standing pose. On the same RTX 5090, simulator, MDP and evaluator as v1.0, the time to reach an evaluation normalized return of 0.82 with 0 of 40 LAFAN1 clips failed (held for 3 consecutive checkpoints) drops from 0.25 h to 0.19 h (mean of 5 seeds). Over SuperMimic + EMA (0.55 h) the speed-up goes from 2.2× to 2.8×. Pose accuracy improves as well, and iterations per second are unchanged.
All three policies after 9 minutes (0.15 h) of training. Across all 40 clips at this checkpoint (seed 0), SuperMimic + EMA fails 12, v1.0 fails 2 and v1.1 fails 0.
Highlights
| 1× RTX 5090, 40 LAFAN1 clips | SuperMimic + EMA | v1.0.0 | v1.1.0 |
|---|---|---|---|
| seeds | 3 | 3 | 5 |
| time to target, held ×3 (mean) | 0.55 h | 0.25 h | 0.19 h |
| per seed | 0.50 / 0.54 / 0.60 | 0.25 / 0.25 / 0.25 | 0.15 / 0.16 / 0.25 / 0.20 / 0.20 |
| first checkpoint meeting the target | 0.50 / 0.54 / 0.60 | 0.25 / 0.25 / 0.25 | 0.15 / 0.16 / 0.15 / 0.15 / 0.15 |
| iterations to target | 5.7k–7.0k | 5.9k–6.0k | 3.7k–5.8k |
| iterations per second | 3.08 | 6.32 | 6.28 |
| failed clips at 0.15 h (range over seeds) | 12–13 | 0–2 | 0–1 |
| body position / orientation error, 0.75 h | 4.60 cm / 11.1° | 3.53 cm / 7.5° | 3.20 cm / 6.5° |
| joint error, 0.75 h | 5.61° | 4.56° | 4.12° |
| contact agreement / foot slip, 0.75 h | 0.719 / 8.00 cm/s | 0.812 / 6.62 cm/s | 0.817 / 6.59 cm/s |
| penetration, 0.75 h | 0.063 mm | 0.052 mm | 0.055 mm |
| root drift, 0.75 h | 54 cm | 61 cm | 61 cm |
| normalized return at 1.5 h (one run) | 0.879–0.880 | 0.877 | 0.881 |
0.75 h metrics are mean over 3 seeds (seeds 0–2 for v1.1). Every number is regenerated from the logs in results/runs/ by tools/make_report.py; the README has the full tables.
What changed
Added
--ref_residual β: a = decoder(z, o) + β · (q_ref(t+1) − q_default) / α, with q_ref(t+1) read from the goal the policy already receives. With β = 1 the joint targets are q_ref(t+1) + α·decoder(z, o). No new policy input is needed, and the extra cost is one addition per step. q_default and α are saved as buffers in the checkpoint.instanttrack_v1.0preset (the exact v1.0 configuration).- Experimental flags, kept so that the negative results below can be reproduced. No preset uses them:
--root_reward,--root_reward_std,--wm_ens,--wm_ens_pen,--pi_experts. - Run logs, commands and metrics for all 13 runs of this round (
e68–e80),CHANGELOG.md, and new videos in the README and on the project page.
Changed
- The
instanttrackpreset is now v1.1 (v1.0 +--ref_residual 1.0). eval_batch.py,eval_metrics.py,instanttrack.evaluateandexport_onnx.pyreadref_residualandpi_expertsfrom the checkpoint'sargs.
Fixed
tools/queue.shnever markedRUN:<tag>lines as done, so it ran them again on every pass.
Tried and not adopted
All single seed, compared with the same seed of the configuration they modify. The flags remain in the code, and the logs are in results/runs/.
| change | on top of | held ×3 | why not |
|---|---|---|---|
| wide-kernel root reward in imagination (3 settings) | v1.0 (0.25 h) | 0.28 / 0.35 / 0.25 h | root drift 56–60 cm vs 53 cm, so no improvement |
| reference residual β = 0.5 | v1.0 (0.25 h) | 0.17 h | β = 1 is faster (0.15 h) |
| world-model ensemble (4 heads) + disagreement penalty 100 / 300 | v1.1 (0.15 h) | 0.25 / 0.35 h | head disagreement collapses to ~1e-4, and the penalty slows learning |
| mixture-of-experts policy, 2 decoders | v1.1 (0.15 h) | 0.20 h | 18 % fewer iterations per second |
Known limitations
- Global root drift is still larger than SuperMimic + EMA (55–64 cm vs 49–54 cm).
- In 3 of 5 seeds, one or two hard clips (
fallAndGetUp*,jumps1_subject2) fail at a single checkpoint after the target is first met. This delays "held ×3" by 0.05–0.10 h. - v1.1 was chosen as the best of eight variants on seed 0, then confirmed on four more seeds. Accuracy at 0.75 h is measured on 3 seeds, and the 1.5 h comparison is a single run.
- Re-evaluating the same checkpoint moves return by about ±0.001 and root drift by a few cm, because MuJoCo Warp on the GPU is not bit-deterministic.
- The baseline is our reimplementation of SuperMimic (the mjlab port of
supermimic_vibed), not the authors' code. The reference-residual policy is not specific to InstantTrack and would likely help SuperMimic too; we have not measured that. - Simulation only (Unitree G1, LAFAN1). There is no sim-to-real experiment.
Compatibility and upgrade
No breaking changes. v1.0 checkpoints and logs load and evaluate unchanged. To reproduce v1.0 exactly:
scripts/train.sh instanttrack_v1.0 it_v10_s0 --seed 0 --max_hours 0.75To train v1.1:
git pull && uv sync
scripts/train.sh instanttrack it_s0 --seed 0 --max_hours 0.75Assets
The videos attached to this release show motions derived from LAFAN1 (Ubisoft La Forge, CC BY-NC-ND 4.0). They are provided for non-commercial research and illustration only and are not covered by the repository's MIT license.
v1.1_equal_time_9min.mp4: SuperMimic + EMA, v1.0 and v1.1 side by side after 9 minutes of training, on 4 hard clips.v1.1_vs_supermimic_1.5h.mp4: SuperMimic + EMA and v1.1 side by side after 1.5 h of training.v1.1_highlights_9min.mp4: the v1.1 policy after 9 minutes of training, on 6 clips.
Full changelog: CHANGELOG.md · v1.0.0...v1.1.0
InstantTrack 1.0.0
First public release of InstantTrack. This tag was added retroactively on 2026-10-30 and points to the last commit of the v1.0 series.
- Returns ≥ 0.82 with 0/40 LAFAN1 clips failed (held for 3 checkpoints) in 0.25 h on one RTX 5090, mean of 3 seeds. On the same machine, SuperMimic + EMA needs 0.55 h (2.2×) and SuperMimic 1.50 h (6×).
- Changes over SuperMimic: policy EMA, no host syncs, fused Adam, fused 3×3 rotations, extra
torch.compilecoverage, lr 4e-4 with 5 world-model batches, a 1024³ world model, failure-focused resets, and a contact reward in imagination. - Includes logs of all runs, the report generator, presets, a reproduction script and the project page.
The README of this tag has the full v1.0 results: https://github.com/Huy-Quang-Dao/instantTrack/tree/v1.0.0

