dobri420 commited on
Commit
f6ed49d
Β·
verified Β·
1 Parent(s): 2bfcb0c

Update to iter-16300 (default) + iter-6200 best-val; new planning eval, training chart

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ cac-combined-16k.png filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -22,45 +22,71 @@ Meta's exact `src.models.ac_predictor.vit_ac_predictor` (from
22
  layers, 1024 dim, 16 heads, ~305M params, RoPE, frame-causal block attention,
23
  action + state token conditioning (7-dim each). Identical to the shipped AC.
24
 
25
- ## Training (this snapshot)
26
-
27
- - **5,800 iterations** (toward Meta's 94,500-iter recipe; a training snapshot,
28
- not the finished run), effective batch 256, LR 7.5e-5 β†’ 4.25e-4 β†’ 0 (WSD,
29
- scheduled over the full 94.5k horizon), AdamW wd 0.04, bf16, `torch.compile`.
30
- - Loss: L1 teacher-forcing + 2-step autoregressive rollout (faithful port of
31
- Meta's `app/vjepa_droid/train.py`).
32
- - Data: ~51,000 DROID left-cam episodes (~58 h footage β€” essentially the full
33
- DROID 1.0.1 raw corpus), 8 frames @ 4 fps, 256 px; first 240 held out for eval.
34
- - Hardware: 1Γ— H100 80GB to iter 2,800, then resumed 2,800 β†’ 5,800 on **2Γ— H100
35
- DDP** (5.82 s/iter, 1.98Γ— single-GPU β€” near-linear over NVLink). Resume was
36
- seamless: no loss spike across the boundary, the WSD LR schedule continued on
37
- the 94.5k horizon, and val cosine ticked 0.818 β†’ 0.823.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  ## Evaluation (240 held-out DROID episodes, frozen ViT-g)
40
 
41
- Two metrics, vs Meta's shipped V-JEPA 2-AC on the same set:
 
 
 
 
 
 
 
42
 
43
- | metric | CAC (this) | V-JEPA 2-AC |
44
- |---|---|---|
45
- | prediction cosine | **0.789** | 0.766 |
46
- | CEM plan L2 β†’ true action | 0.048 | **0.043** |
47
- | cos(plan, true action) | +0.54 | **+0.66** |
48
- | CEM beats random | 85% | **94%** |
 
49
 
50
- CAC **beats** AC on prediction cosine (the encoder-dominated metric, where the
51
- ~51k-episode data scale helps). On planning, CAC's plan L2 (0.048) is now **on
52
- par** with AC (0.043); direction still lags (+0.54 vs +0.66) β€” the axis bound by
53
- iter count, and Meta trained ~16Γ— longer. Open-loop L1 prediction now **beats a
54
- static baseline at every horizon** (the undertrained iter-2,750 snapshot could
55
- not), CAC points the right direction on 82% of episodes, and its CEM plan beats
56
- a random action on 85%. Prediction cosine is a lenient metric; planning quality
57
- is the real test.
58
 
59
- ## File
 
 
60
 
61
- `cac_fp32.safetensors` β€” predictor state_dict, fp32, 305M params, 300 tensors.
62
- Safetensors metadata: `iter`, `architecture`. Loads `strict=True` into
63
- `vit_ac_predictor(...)`.
64
 
65
  ## Load
66
 
@@ -78,6 +104,9 @@ predictor.load_state_dict(sd, strict=True)
78
 
79
  ## Caveats
80
 
 
 
 
81
  - Train/eval split is index-based on DROID's deterministic institution ordering
82
  (first 240 held out), so the eval set is institution-concentrated, not random.
83
  - Trained on public DROID data using Meta's published recipe; independent
 
22
  layers, 1024 dim, 16 heads, ~305M params, RoPE, frame-causal block attention,
23
  action + state token conditioning (7-dim each). Identical to the shipped AC.
24
 
25
+ ## Checkpoints
26
+
27
+ **Two** checkpoints are published from one continued run toward Meta's
28
+ 94,500-iter recipe (still a snapshot, not the finished run):
29
+
30
+ | file | iter | held-out val cosine | note |
31
+ |---|---|---|---|
32
+ | `cac_fp32.safetensors` | **16,300** | 0.818 | default β€” the most-trained checkpoint |
33
+ | `cac_bestval_fp32.safetensors` | 6,200 | **0.824** | peak held-out val cosine of the run |
34
+
35
+ `--predictor cac` / `download_cac()` resolve to `cac_fp32.safetensors` (the
36
+ iter-16,300 model). Why both are published: see the val-cosine decline below.
37
+
38
+ ## Training
39
+
40
+ Effective batch 256, LR 7.5e-5 β†’ 4.25e-4 β†’ 0 (WSD, scheduled over the full 94.5k
41
+ horizon), AdamW wd 0.04, bf16, `torch.compile`. Loss: L1 teacher-forcing + 2-step
42
+ autoregressive rollout (faithful port of Meta's `app/vjepa_droid/train.py`).
43
+ Data: ~51,000 DROID left-cam episodes (~58 h footage β€” essentially the full DROID
44
+ 1.0.1 raw corpus), 8 frames @ 4 fps, 256 px; first 240 held out for eval.
45
+
46
+ Trained across three seamless resume segments: **1Γ—H100 to iter 2,800**, then
47
+ **2Γ—H100 DDP** to 5,800 and on to 16,300 (5.82 s/iter, ~1.98Γ— single-GPU β€” near
48
+ linear over NVLink). No loss spike across either resume boundary; the WSD LR
49
+ schedule continued on the 94.5k horizon throughout.
50
+
51
+ ### The val-cosine decline (why two checkpoints)
52
+
53
+ ![CAC combined training across 3 resume runs](cac-combined-16k.png)
54
+
55
+ Training L1 (teacher-forced + rollout) falls smoothly **1.02 β†’ ~0.28** across all
56
+ three runs. But held-out val cosine **peaks ~0.823 around iter 6,000 then slowly
57
+ declines to ~0.818 by iter 16,300**, while val held-out L1 drifts *up* β€” mild
58
+ overfitting on the encoder-dominated cosine metric. Cosine is a lenient proxy,
59
+ though; planning is the real test, and there the iter-6,200 and iter-16,300
60
+ checkpoints are **statistically indistinguishable** (see below). So the extra
61
+ ~10k iters regressed the cheap metric at **no measurable planning cost** β€” hence
62
+ both checkpoints are shipped, for anyone who wants to probe the trade-off.
63
 
64
  ## Evaluation (240 held-out DROID episodes, frozen ViT-g)
65
 
66
+ Offline CEM planning gate (`plan --random-step`: CEM-planned action vs the true
67
+ logged action `a_t` from a random step), identical protocol for all three:
68
+
69
+ | model | plan L2 β†’ true ↓ | cos(plan, true) ↑ | beats random | points right |
70
+ |---|---|---|---|---|
71
+ | V-JEPA 2-AC (Meta) | **0.0396** | +0.650 | 93% | 90% |
72
+ | CAC iter 16,300 (this, default) | 0.0418 | +0.644 | 94% | 88% |
73
+ | CAC iter 6,200 (best-val) | 0.0446 | +0.648 | 92% | 87% |
74
 
75
+ - **CAC 16,300 vs 6,200**: paired Wilcoxon *p*=0.065 (L2), *p*=0.40 (cosine) over
76
+ 238 paired episodes β€” a statistical tie. CEM's own sampling noise (~0.0003 on
77
+ L2 run-to-run) is a meaningful fraction of the gap.
78
+ - **vs Meta's AC** (trained ~16Γ— longer): AC still leads on plan L2, but the gap
79
+ is small and CAC matches it on direction cosine.
80
+ - Open-loop **prediction** cosine is β‰ˆ0.79 for CAC (mean over horizons) β€” it
81
+ plateaus early and, as the chart shows, is *not* a reliable planning proxy.
82
 
83
+ ## Files
 
 
 
 
 
 
 
84
 
85
+ - `cac_fp32.safetensors` β€” predictor state_dict, fp32, 305M params, 300 tensors,
86
+ iter 16,300 (default). Safetensors metadata: `iter`, `architecture`.
87
+ - `cac_bestval_fp32.safetensors` β€” same format, iter 6,200 (peak val cosine).
88
 
89
+ Both load `strict=True` into `vit_ac_predictor(...)`.
 
 
90
 
91
  ## Load
92
 
 
104
 
105
  ## Caveats
106
 
107
+ - Planning numbers are from a `--random-step` CEM gate on 240 held-out episodes;
108
+ they are a custom intermediate probe, not Meta's downstream real-robot success
109
+ metric.
110
  - Train/eval split is index-based on DROID's deterministic institution ordering
111
  (first 240 held out), so the eval set is institution-concentrated, not random.
112
  - Trained on public DROID data using Meta's published recipe; independent
cac-combined-16k.png ADDED

Git LFS Details

  • SHA256: 7cde764dddff2d2d5c829f6db9d793037dc25bdfdca563d11b171ebd3b1fd912
  • Pointer size: 131 Bytes
  • Size of remote file: 135 kB
cac_bestval_fp32.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:94fe9843ec6f911eec7bce9e15214e35c2e67735e00bda5e793b2dee89698f5b
3
+ size 1220915504
cac_fp32.safetensors CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:a9f57670b150d06f53cccd3a98b69435212f4f949a4ddfaeb1729a8a5c716845
3
  size 1220915504
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6850759a1e1d08564bef8690118a4c54cfebe1568fea0a2ae6ec9fc91fee8968
3
  size 1220915504