Skip to content

Releases: Huy-Quang-Dao/instantTrack

InstantTrack v1.2.0: Muon, CUDA-graph updates, 0.12 h to target

Choose a tag to compare

@Huy-Quang-Dao Huy-Quang-Dao released this 31 Oct 18:11

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.

SuperMimic + EMA, InstantTrack v1.1 and v1.2 after 6 minutes of training

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, with match_rms_adamw scaling 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.1 preset (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 instanttrack preset 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.py compares 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_subject2 then 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.75

To train v1.2:

git pull && uv sync
scripts/train.sh instanttrack it_s0 --seed 0 --max_hours 0.5

Assets

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

Choose a tag to compare

@Huy-Quang-Dao Huy-Quang-Dao released this 30 Oct 11:47

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.

SuperMimic + EMA, InstantTrack v1.0 and v1.1 after 9 minutes of training

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.0 preset (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 instanttrack preset is now v1.1 (v1.0 + --ref_residual 1.0).
  • eval_batch.py, eval_metrics.py, instanttrack.evaluate and export_onnx.py read ref_residual and pi_experts from the checkpoint's args.

Fixed

  • tools/queue.sh never marked RUN:<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.75

To train v1.1:

git pull && uv sync
scripts/train.sh instanttrack it_s0 --seed 0 --max_hours 0.75

Assets

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

Choose a tag to compare

@Huy-Quang-Dao Huy-Quang-Dao released this 30 Oct 11:47

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.compile coverage, 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