← Back

LeWorldModel — PushT Baseline Reproduction

Reproducing the official LeWM (JEPA + SIGReg) PushT planning benchmark on Apple Silicon · June 3, 2026

90%
PushT success (45/50)
~2 s
per CEM plan · MPS
4 → 90
% after the version fix

Bottom line. Running the genuine le-wm/eval.py dataset-replay protocol (50 episodes, seed 42, official CEM) against the released quentinll/lewm-pusht checkpoint on an Apple-Silicon laptop (MPS, no CUDA) reproduces the paper's PushT result: 90% (45/50), in line with the paper's 96.0 ± 2.83 and an independent reporter's 98%. Getting there required one decisive fix — pin transformers<5 — without which the checkpoint silently mis-loads and success collapses to 4%.

1 · Task-completion results

PushT success = the T-block reaches within 20 px and π/9 of the goal pose (the env's own terminated signal), over 50 dataset-sampled start/goal pairs at eval seed 42.

Reporter (issue #62)
98%
Paper (reported)
96 ± 2.8
Ours — fixed
90%
Ours — transformers 5.x
4%
RunLoader / envSuccessEval wall-clockStatus
Paperauthors, CUDA96.0 ± 2.83—reference
Reporter (YushenZuo, #62)released ckpt, CUDA98—independent
Ours — brokentransformers 5.9.04.0 (2/50)237 sartifact
Ours — fixedtransformers 4.57.6 · MPS90.0 (45/50)123 sreproduced

Failures were episodes 14, 15, 23, 42, 48. The fixed run is faster than the broken one because successful episodes terminate early once the block reaches the goal.

2 · Visual results — reproduced episodes

Actual rollouts written by eval.py (lewm_data/pusht/env_*.mp4, re-encoded to GIF). Each panel triplet shows current observation · replay · goal; the blue pusher drives the gray T-block toward the green goal pose.

episode 39
Episode 39 · success
episode 10
Episode 10 · success
episode 35
Episode 35 · success
episode 14
Episode 14 · failure

3 · Planning-time benchmark

The paper's headline timing claim — "full planning completing in under one second" — measures one CEM plan. We timed it directly with the official solver (pusht_timing_benchmark.py) and within the full eval.

Per-plan (single env)

Steady-state~2.04 s
Cold first plan~5.4 s
CEM config300 × 30, H=5

Full 50-episode eval

Total wall-clock123 s
Batched plan (50 envs)~20–90 s
DeviceApple MPS

~2× the paper's GPU number — expected for MPS vs. a datacenter GPU. Timing reproduced cleanly; it was never affected by the checkpoint-loading bug (same compute either way).

4 · The decisive fix — transformers < 5

stable_pretraining.vit_hf builds a stock transformers.ViTModel. transformers 5.x renamed the ViT attention parameters, so the rebuilt encoder no longer matches the released weights.pt:

transformersViT attention keyResult
4.x (checkpoint era)encoder.encoder.layer.N.attention.attention.querymatches weights
5.x (installed by default)encoder.layers.N.attention.q_projsilent mismatch → 4%

Neither stable-worldmodel nor stable-pretraining upper-bounds transformers (>=4.50.0), so a fresh install floats to 5.x and breaks every released checkpoint. This is the unresolved le-wm issue #68; our fix is filed as #80.

A second, independent gotcha: the hdf5 dataset format silently fails to register unless hdf5plugin is installed (#76).

5 · Reproduction recipe

cd lewm_env && pip install 'transformers==4.57.6' hdf5plugin   # the two fixes

# real expert dataset: 43 GB decompressed (18,685 eps, 2.34M frames, 7-dim state, 224² pixels)
# from quentinll/lewm-pusht  ·  symlinked into $STABLEWM_HOME

cd le-wm
STABLEWM_HOME=.../lewm_data SWM_DEVICE=mps PYTHONPATH=. \
  python eval.py policy=pusht/lewm solver.device=mps +cache_dir=null eval.num_eval=50
# → {'success_rate': 90.0, ...}   in ~123 s

Local eval.py patches: CUDA→device-aware (SWM_DEVICE); dataset format="h5"→"hdf5" (registry name in this swm build). Model: LeWM JEPA, 18.0M params, ViT-tiny encoder.

6 · Artifacts produced

ArtifactWhat it is
pusht-baseline.htmlThis report
pusht_report_assets/ep_*.gif4 reproduced episodes (3 success + 1 failure)
lewm_data/pusht/env_0..49.mp4All 50 reproduced episode videos
lewm_data/pusht/pusht_results.txtOfficial metrics + evaluation_time
le-wm/eval_fixed.log / eval_full.logFixed (90%) and broken (4%) run logs
pusht_timing_benchmark.pyPlanning-time harness (no dataset needed)
le-wm/eval.py (patched)Device-aware + hdf5 format
lewm_data/pusht_expert_train.h5Symlink → 43 GB dataset on external scratch
lewm_data/checkpoints/pusht/lewm/weights.pt+config.json symlinks for load_pretrained
env: transformers==4.57.6, hdf5pluginThe dependency fixes
le-wm issue #80Upstream writeup of the fix

7 · Caveats

Sources & links: paper (arXiv:2603.19312) · le-wm · stable-worldmodel · checkpoint (HF) · our fix · issue #80
Reproduced on Apple Silicon (MPS) · LeWM JEPA 18.0M params · CEM 300×30, horizon 5 · eval seed 42 · June 3, 2026