SyncWorld exp-b7, in-context retrieval comparison, method D (random), update 8000
One of the four runs of SyncWorld-dev's retrieval comparison (in-context branch, wm_ttt/retrieval/README.md, upstream
commit 827ab2a). Full-attention in_context layout, no TTT memory: a query is one anchor frame plus its own 16 future
commanded actions, and the model generates the next 16 frames. Before the query, K observed 16-transition video/action
chunks (K uniform over 1..8, one K per update for all GPUs) sit in the same attention window as clean conditioning
items. Every stream applies one random action-axis relabel to its recording, so the anchor-only query can learn the
relabelled convention only from the chunks. The four runs differ only in which K - 1 chunks lead the query:
| Method | Repo | |
|---|---|---|
| A | recent8 | yyuncong/SyncWorld-b7-incontext-A-recent8-step8000 |
| B | nearest | yyuncong/SyncWorld-b7-incontext-B-nearest-step8000 |
| C | library | yyuncong/SyncWorld-b7-incontext-C-library-step8000 |
| D | random | yyuncong/SyncWorld-b7-incontext-D-random-step8000 |
This repo: D, random. Its chunks: the adjacent chunk plus K - 1 chunks drawn uniformly from the same library as C (same exclusions and cap; the control for C). Recipe wm_ttt/retrieval/recipe_qctx_incontext_D_random_8gpu.toml
(training/recipe.toml); run qctx_incontext_D_random_8gpu_main.
Training
- Shared by the four runs: exp-b7 initialization (MAST run
gripperhead-nocalib-droidmix-ax06-hist25-512-4x8, iter 76000); trainsmoe_gen, the time embedder and the VAE/action projections (B/C/D also their context-gap embedding); AdamW, LR 5e-5 after a 400-update linear warm-up, then constant; weight decay 0.05; the backbone's default noise schedule and an unweighted video loss; 8 GPUs x 1 stream = 8 streams per update; 8000 updates; seed 42, so all four runs drew the same queries, K values and noise levels. - Data: formal_2 (the reference two-camera index, 10,478 setups), robomimic v2 and DROID pairs
(
droid_fdm_2cam_wide_pairs_shards, train split, recorded at 15 Hz), both third-person cameras of every dataset, mixed 1:1:1: 110,562 recordings with eight full chunks before an anchor. The training mixture (SHA-256a1e74e73...,training/mixture.json) was derived on every node from ourqctx_v1bundle: camera 2 on the recording's own directory (as upstream'sprepare_formal2_views.py), DROID's manifestfps20 withrecorded_fps15 (frames are never resampled; conditioning is 15 fps), DROID camera poses from its extrinsics. - Library (
training/library_summary.json): 2,588,638 16-frame chunks of 142,012 recordings (formal_2 20,956, robomimic 31,032, DROID 90,024; both cameras), DINOv2-base CLS features, median scales 49.83 cm / 89.96 deg / image 0.709,library.jsonSHA-256e0849267514d0f66..., built from this run's mixture. - Compute: 1 node x 8 B200 on MAST (spatial_ai_research), about 1.7 s per update, no restarts, finished 2026-10-22 09:19 PDT.
Training loss
train@2/loss (the query's video flow-matching loss) averaged over the 500 updates before each mark:
| run | 500 | 1000 | 2000 | 4000 | 6000 | 8000 |
|---|---|---|---|---|---|---|
| A recent8 | 0.0530 | 0.0595 | 0.0598 | 0.0630 | 0.0611 | 0.0627 |
| B nearest | 0.0527 | 0.0593 | 0.0596 | 0.0625 | 0.0611 | 0.0625 |
| C library | 0.0539 | 0.0596 | 0.0597 | 0.0622 | 0.0605 | 0.0625 |
| D random | 0.0561 | 0.0622 | 0.0631 | 0.0652 | 0.0638 | 0.0654 |
Note: the loss is lowest during the warm-up, while the model is still essentially exp-b7, and settles about 15-20% higher once the LR reaches 5e-5 (around update 1000), after which it is flat. Controlled for noise level and K this holds in all four runs, for every K, and it is not a sampling or logging artifact. Every query is drawn fresh (no epochs), so this is effectively a held-out loss on the training distribution. The cause is most likely the LR of 5e-5 with only 8 streams per update. Compare these checkpoints with exp-b7 on held-out data before relying on them. D's random library chunks cost about 4% (more at larger K) relative to A from the start.
Files
| path | content |
|---|---|
model/ |
weights at update 8000, as a DCP checkpoint (.metadata + shards), bf16 |
config.yaml, config.pkl |
the resolved training config |
resume.json |
trainer state summary of the iteration |
metrics.jsonl |
training metrics every 2 updates |
training/ |
recipe.toml, launch.txt, preflight.log, mixture.json/summary.json, ttt_steps.rank*.jsonl (per update and rank: K, the query's noise level and loss), train_log_rank0.txt.gz (rank 0 training log), library_summary.json |
The trainer kept FP32 master weights (60.7 GB); this copy is cast to bf16, the model's compute precision. The FP32 weights
and the full training state (optimizer, scheduler, data loader) of updates 2000, 4000, 6000, 7000 and 8000 are on
Manifold: samworlds_mast/tree/users/yuncongyang/syncworld_ttt/outputs/qctx_incontext_D_random_8gpu_main/checkpoints/.
Loading (SyncWorld-dev, in-context branch)
hf download yyuncong/SyncWorld-b7-incontext-D-random-step8000 --local-dir ./SyncWorld-b7-incontext-D-random-step8000
python examples/eval_gripperhead_fdm_rollout.py --checkpoint ./SyncWorld-b7-incontext-D-random-step8000 ... # repo dir = iter dir
As a warm start, point checkpoint.load_path (or train_query_context.sh --init-checkpoint) at the repo directory.
- Downloads last month
- 17