SeonghoonYu commited on
Commit
c7ca2f1
·
verified ·
1 Parent(s): cd75c28

Add RACE2 ablation A1 timing-only H20 40k EMA (weights, overlay, logs, config, source)

Browse files
.gitattributes CHANGED
@@ -40,3 +40,4 @@ acot_h10_40k/params/ocdbt.process_0/d/508e05f18e9bd423e6b0fa51e86e91b4 filter=lf
40
  acot_h10_40k/params/ocdbt.process_0/d/6717b350a38fef3e1f333634f8ffb1e9 filter=lfs diff=lfs merge=lfs -text
41
  acot_h10_40k/params/ocdbt.process_0/d/873cd1adcf38ed97d5dc1d23fd516e11 filter=lfs diff=lfs merge=lfs -text
42
  acot_h10_40k/params/ocdbt.process_0/d/f1e4a83571097cb44f24769987d96dd0 filter=lfs diff=lfs merge=lfs -text
 
 
40
  acot_h10_40k/params/ocdbt.process_0/d/6717b350a38fef3e1f333634f8ffb1e9 filter=lfs diff=lfs merge=lfs -text
41
  acot_h10_40k/params/ocdbt.process_0/d/873cd1adcf38ed97d5dc1d23fd516e11 filter=lfs diff=lfs merge=lfs -text
42
  acot_h10_40k/params/ocdbt.process_0/d/f1e4a83571097cb44f24769987d96dd0 filter=lfs diff=lfs merge=lfs -text
43
+ abl_timing_only_h20_40k/logs/train.log filter=lfs diff=lfs merge=lfs -text
abl_timing_only_h20_40k/README.md ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # RACE2 ablation A1 — timing loss only, no conditioning (VLABench, H=20, 40k EMA)
2
+
3
+ Config `pi05_vlabench_race2abl_timing_only_h20` (model class `Race2TimingOnlyPI0`), experiment `abl_timing_only_h20_s42`.
4
+ Full RACE2 recipe with `e_trans` / `field_mod` / `tau_gate` removed: training loss = flow-matching (no modulation)
5
+ + 0.05 · timing BCE; no auxiliary base-FM loss, no teacher forcing. Serving is the plain pi0.5 sampler (no auxiliary pass).
6
+
7
+ | | |
8
+ |---|---|
9
+ | Init | official VLABench pi0.5 teacher (`teacher_official/`, SHA256 `f6762a23…`) |
10
+ | Training | 40,000 steps, seed 42, global batch 64 = 4 GPUs × micro 16 (no accumulation), warmup 500 → 5e-5 → cosine → 5e-6, AdamW (0.9, 0.95, wd 1e-10, clip 1.0), EMA 0.999, VLM (PaliGemma + SigLIP) frozen |
11
+ | Data | `SeonghoonYu/vlabench_primitive_ft_lerobot_224` rev `5772f03c…` (5,000 ep), changepoints `vlabench_cps.npz` SHA256 `6e31b274…` |
12
+ | Hardware | 4 × RTX 6000 Ada, 2026-09-14 19:04 → 09-15 13:12 UTC (18 h 08 m, ~1.6 s/step) |
13
+ | Final train metrics (step 39,900) | fm 0.039, bce 0.137, peak±1 0.72, pres_acc 0.81 |
14
+
15
+ ## Evaluation (40k EMA, horizon = replan = 20, seed 7, tracks 1/2/3/4/6, 50 ep/task, 2,460 ep, physics errors excluded: 24)
16
+
17
+ | Model | SR | IS | PS |
18
+ |---|---:|---:|---:|
19
+ | PlainFT H20 | 28.04 | 61.86 | 44.77 |
20
+ | RACE2 full H20 (`h20_40k/`) | 32.86 | 61.48 | 47.84 |
21
+ | **A1 timing-only H20 (this)** | **32.62** | **62.77** | **48.46** |
22
+
23
+ Per track SR (A1): T1 52.41 · T2 28.71 · T3 25.88 · T4 23.56 · T6 32.54. Full details in `logs/eval_summary.json`.
24
+
25
+ ## Files
26
+
27
+ - `model.safetensors` — full serving model: 603 frozen teacher VLM tensors + 225 EMA tensors (action expert, projections, RACE timing head). SHA256 in `SHA256SUMS`.
28
+ - `overlay/ema.safetensors`, `overlay/metadata.pt` — the slim trainable-only EMA checkpoint written by the trainer (exactly what was evaluated).
29
+ - `assets/vlabench/vlabench_ft_primitive/norm_stats.json` — normalization statistics (identical to the teacher's).
30
+ - `training_config.json` — readable copy of the training config from `metadata.pt`.
31
+ - `logs/train.log`, `logs/history.jsonl`, `logs/status.json`, `logs/commands.json`, `logs/launch_validation.json` — training driver records; `logs/eval.log`, `logs/eval_summary.json` — pooled evaluation; `logs/smoke_timing_only_h20.log` — pre-flight smoke.
32
+ - `source/` — the ablation model, config and trainer files used (apply onto the OpenPI fork `Seonghoon-Yu/Libero` @ `43bc120d` with the `h25_support/openpi_overlay` config; also in the VLABench repo `race_eval/code`).
33
+
34
+ Load with `--policy.config pi05_vlabench_race2abl_timing_only_h20 --policy.dir <this dir>` in the matching fork; the horizon comes from the config. Optimizer/resume state is not included.
abl_timing_only_h20_40k/SHA256SUMS ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ 9be111ce1db525928ec24a20fb102ce7632d9e6f81becd1b732328cf42cc9874 /root/vlabench/.cache/hf_stage_abl_timing_only_h20_40k/model.safetensors
2
+ add103644143aa4cf09d8bacdd4ccf5987bedcd9e7fd4e1d68f1c463e62b5155 /root/vlabench/.cache/hf_stage_abl_timing_only_h20_40k/overlay/ema.safetensors
abl_timing_only_h20_40k/assets/vlabench/vlabench_ft_primitive/norm_stats.json ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "norm_stats": {
3
+ "state": {
4
+ "mean": [
5
+ 0.02967369742691517,
6
+ 0.39555251598358154,
7
+ 0.25719010829925537,
8
+ 0.4673101305961609,
9
+ -0.37718722224235535,
10
+ -0.11985507607460022,
11
+ 0.44498270750045776,
12
+ 0.0,
13
+ 0.0,
14
+ 0.0,
15
+ 0.0,
16
+ 0.0,
17
+ 0.0,
18
+ 0.0,
19
+ 0.0,
20
+ 0.0,
21
+ 0.0,
22
+ 0.0,
23
+ 0.0,
24
+ 0.0,
25
+ 0.0,
26
+ 0.0,
27
+ 0.0,
28
+ 0.0,
29
+ 0.0,
30
+ 0.0,
31
+ 0.0,
32
+ 0.0,
33
+ 0.0,
34
+ 0.0,
35
+ 0.0,
36
+ 0.0
37
+ ],
38
+ "std": [
39
+ 0.1581457555294037,
40
+ 0.13765743374824524,
41
+ 0.1370578110218048,
42
+ 2.873211145401001,
43
+ 0.625612199306488,
44
+ 1.7478904724121094,
45
+ 0.49696388840675354,
46
+ 0.0,
47
+ 0.0,
48
+ 0.0,
49
+ 0.0,
50
+ 0.0,
51
+ 0.0,
52
+ 0.0,
53
+ 0.0,
54
+ 0.0,
55
+ 0.0,
56
+ 0.0,
57
+ 0.0,
58
+ 0.0,
59
+ 0.0,
60
+ 0.0,
61
+ 0.0,
62
+ 0.0,
63
+ 0.0,
64
+ 0.0,
65
+ 0.0,
66
+ 0.0,
67
+ 0.0,
68
+ 0.0,
69
+ 0.0,
70
+ 0.0
71
+ ],
72
+ "q01": [
73
+ -0.2880732418596744,
74
+ 0.16642616012468936,
75
+ 0.016219121195189656,
76
+ -3.1415927410125732,
77
+ -1.5606922270774841,
78
+ -3.1378225915908815,
79
+ 0.0,
80
+ 0.0,
81
+ 0.0,
82
+ 0.0,
83
+ 0.0,
84
+ 0.0,
85
+ 0.0,
86
+ 0.0,
87
+ 0.0,
88
+ 0.0,
89
+ 0.0,
90
+ 0.0,
91
+ 0.0,
92
+ 0.0,
93
+ 0.0,
94
+ 0.0,
95
+ 0.0,
96
+ 0.0,
97
+ 0.0,
98
+ 0.0,
99
+ 0.0,
100
+ 0.0,
101
+ 0.0,
102
+ 0.0,
103
+ 0.0,
104
+ 0.0
105
+ ],
106
+ "q99": [
107
+ 0.33706892974972724,
108
+ 0.7168794604014606,
109
+ 0.4705753956319765,
110
+ 3.1403361039161677,
111
+ 0.029222321224212644,
112
+ 3.1353093175888063,
113
+ 0.9998,
114
+ 0.0,
115
+ 0.0,
116
+ 0.0,
117
+ 0.0,
118
+ 0.0,
119
+ 0.0,
120
+ 0.0,
121
+ 0.0,
122
+ 0.0,
123
+ 0.0,
124
+ 0.0,
125
+ 0.0,
126
+ 0.0,
127
+ 0.0,
128
+ 0.0,
129
+ 0.0,
130
+ 0.0,
131
+ 0.0,
132
+ 0.0,
133
+ 0.0,
134
+ 0.0,
135
+ 0.0,
136
+ 0.0,
137
+ 0.0,
138
+ 0.0
139
+ ]
140
+ },
141
+ "actions": {
142
+ "mean": [
143
+ -0.00008998554403660819,
144
+ 0.004090703558176756,
145
+ 0.0006838542176410556,
146
+ 0.5465309023857117,
147
+ -0.004646406974643469,
148
+ -0.019831420853734016,
149
+ 0.5484480857849121,
150
+ 0.0,
151
+ 0.0,
152
+ 0.0,
153
+ 0.0,
154
+ 0.0,
155
+ 0.0,
156
+ 0.0,
157
+ 0.0,
158
+ 0.0,
159
+ 0.0,
160
+ 0.0,
161
+ 0.0,
162
+ 0.0,
163
+ 0.0,
164
+ 0.0,
165
+ 0.0,
166
+ 0.0,
167
+ 0.0,
168
+ 0.0,
169
+ 0.0,
170
+ 0.0,
171
+ 0.0,
172
+ 0.0,
173
+ 0.0,
174
+ 0.0
175
+ ],
176
+ "std": [
177
+ 0.012184085324406624,
178
+ 0.013969186693429947,
179
+ 0.021805619820952415,
180
+ 3.0321147441864014,
181
+ 0.028920045122504234,
182
+ 0.7395531535148621,
183
+ 0.497647225856781,
184
+ 0.0,
185
+ 0.0,
186
+ 0.0,
187
+ 0.0,
188
+ 0.0,
189
+ 0.0,
190
+ 0.0,
191
+ 0.0,
192
+ 0.0,
193
+ 0.0,
194
+ 0.0,
195
+ 0.0,
196
+ 0.0,
197
+ 0.0,
198
+ 0.0,
199
+ 0.0,
200
+ 0.0,
201
+ 0.0,
202
+ 0.0,
203
+ 0.0,
204
+ 0.0,
205
+ 0.0,
206
+ 0.0,
207
+ 0.0,
208
+ 0.0
209
+ ],
210
+ "q01": [
211
+ -0.01572922980785374,
212
+ -0.011965612983703577,
213
+ -0.012324783468246447,
214
+ -6.28066982460022,
215
+ -0.07970612406730648,
216
+ -1.807010852813721,
217
+ 0.0,
218
+ 0.0,
219
+ 0.0,
220
+ 0.0,
221
+ 0.0,
222
+ 0.0,
223
+ 0.0,
224
+ 0.0,
225
+ 0.0,
226
+ 0.0,
227
+ 0.0,
228
+ 0.0,
229
+ 0.0,
230
+ 0.0,
231
+ 0.0,
232
+ 0.0,
233
+ 0.0,
234
+ 0.0,
235
+ 0.0,
236
+ 0.0,
237
+ 0.0,
238
+ 0.0,
239
+ 0.0,
240
+ 0.0,
241
+ 0.0,
242
+ 0.0
243
+ ],
244
+ "q99": [
245
+ 0.014919160246849028,
246
+ 0.016237698739767104,
247
+ 0.020379505300521905,
248
+ 6.280669824600221,
249
+ 0.06261572251319891,
250
+ 1.7844429779052735,
251
+ 0.9998,
252
+ 0.0,
253
+ 0.0,
254
+ 0.0,
255
+ 0.0,
256
+ 0.0,
257
+ 0.0,
258
+ 0.0,
259
+ 0.0,
260
+ 0.0,
261
+ 0.0,
262
+ 0.0,
263
+ 0.0,
264
+ 0.0,
265
+ 0.0,
266
+ 0.0,
267
+ 0.0,
268
+ 0.0,
269
+ 0.0,
270
+ 0.0,
271
+ 0.0,
272
+ 0.0,
273
+ 0.0,
274
+ 0.0,
275
+ 0.0,
276
+ 0.0
277
+ ]
278
+ }
279
+ }
280
+ }
abl_timing_only_h20_40k/logs/commands.json ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "race2abl_timing_only",
3
+ "config": "pi05_vlabench_race2abl_timing_only_h20",
4
+ "exp_name": "abl_timing_only_h20_s42",
5
+ "horizon": 20,
6
+ "micro_batch_size": 16,
7
+ "batch_size": 64,
8
+ "world_size": 4,
9
+ "per_gpu_batch_size": 16,
10
+ "accumulation_steps": 1,
11
+ "gpus": [
12
+ 0,
13
+ 1,
14
+ 2,
15
+ 3
16
+ ],
17
+ "train_command": [
18
+ "/root/vlabench/runtime/openpi/.venv/bin/torchrun",
19
+ "--standalone",
20
+ "--nnodes=1",
21
+ "--nproc_per_node=4",
22
+ "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py",
23
+ "pi05_vlabench_race2abl_timing_only_h20",
24
+ "--exp_name",
25
+ "abl_timing_only_h20_s42",
26
+ "--model.micro-batch-size",
27
+ "16"
28
+ ],
29
+ "eval_command": [
30
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
31
+ "scripts/vlabench/eval_pool.py",
32
+ "--method",
33
+ "race2abl_timing_only",
34
+ "--horizon",
35
+ "20",
36
+ "--exp-name",
37
+ "abl_timing_only_h20_s42",
38
+ "--step",
39
+ "40000",
40
+ "--gpus",
41
+ "0,1,2,3",
42
+ "--jobs-per-gpu",
43
+ "2",
44
+ "--groups-per-job",
45
+ "2",
46
+ "--n-episode",
47
+ "50",
48
+ "--openpi-root",
49
+ "/root/vlabench/runtime/openpi",
50
+ "--vlabench-root",
51
+ "/root/vlabench/VLABench",
52
+ "--sim-python",
53
+ "/root/vlabench/runtime/sim-env/bin/python"
54
+ ],
55
+ "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors",
56
+ "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42",
57
+ "openpi_root": "/root/vlabench/runtime/openpi",
58
+ "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup"
59
+ }
abl_timing_only_h20_40k/logs/eval.log ADDED
@@ -0,0 +1 @@
 
 
1
+ [2026-09-15 16:07:19] POOL_EVALUATION_COMPLETE: /root/vlabench/runtime/openpi/evaluate_results/vlabench_h20/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7/summary.json
abl_timing_only_h20_40k/logs/eval_summary.json ADDED
@@ -0,0 +1,1246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "complete",
3
+ "spec": {
4
+ "config": "pi05_vlabench_race2abl_timing_only_h20",
5
+ "exp_name": "abl_timing_only_h20_s42",
6
+ "step": 40000,
7
+ "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000",
8
+ "ema_sha256": "add103644143aa4cf09d8bacdd4ccf5987bedcd9e7fd4e1d68f1c463e62b5155",
9
+ "horizon": 20,
10
+ "replan_steps": 20,
11
+ "seed": 7,
12
+ "policy_seed": 7,
13
+ "policy_noise_rng": "independent_track_servers",
14
+ "requested_episodes": 50,
15
+ "tracks": {
16
+ "track_1_in_distribution": {
17
+ "select_painting": 50,
18
+ "select_book": 50,
19
+ "select_drink": 50,
20
+ "select_chemistry_tube": 50,
21
+ "select_poker": 50,
22
+ "select_mahjong": 50,
23
+ "select_toy": 50,
24
+ "select_fruit": 50,
25
+ "add_condiment": 50,
26
+ "insert_flower": 50
27
+ },
28
+ "track_2_cross_category": {
29
+ "select_painting": 50,
30
+ "select_fruit": 50,
31
+ "select_toy": 50,
32
+ "select_poker": 50,
33
+ "select_mahjong": 50,
34
+ "insert_flower": 10,
35
+ "select_chemistry_tube": 50,
36
+ "add_condiment": 50,
37
+ "select_drink": 50,
38
+ "select_book": 50
39
+ },
40
+ "track_3_common_sense": {
41
+ "select_painting": 50,
42
+ "select_book": 50,
43
+ "select_drink": 50,
44
+ "select_chemistry_tube": 50,
45
+ "select_toy": 50,
46
+ "select_fruit": 50,
47
+ "add_condiment": 50,
48
+ "insert_flower": 50,
49
+ "select_nth_largest_poker": 50,
50
+ "select_unique_type_mahjong": 50
51
+ },
52
+ "track_4_semantic_instruction": {
53
+ "select_painting": 50,
54
+ "select_book": 50,
55
+ "select_drink": 50,
56
+ "select_chemistry_tube": 50,
57
+ "select_poker": 50,
58
+ "select_mahjong": 50,
59
+ "select_toy": 50,
60
+ "select_fruit": 50,
61
+ "add_condiment": 50,
62
+ "insert_flower": 50
63
+ },
64
+ "track_6_unseen_texture": {
65
+ "select_painting": 50,
66
+ "select_book": 50,
67
+ "select_drink": 50,
68
+ "select_chemistry_tube": 50,
69
+ "select_poker": 50,
70
+ "select_mahjong": 50,
71
+ "select_toy": 50,
72
+ "select_fruit": 50,
73
+ "add_condiment": 50,
74
+ "insert_flower": 50
75
+ }
76
+ },
77
+ "track_sha256": {
78
+ "track_1_in_distribution": "61b07440c6f4272705bea0c8d721bc196e744232f48408075613cc9b6f7c8c04",
79
+ "track_2_cross_category": "cf004383de22d994f83126ca30a315cbfc6a92fd0dbb8d25fa4c185dd75a21fb",
80
+ "track_3_common_sense": "2aaa298580e74bec13555a6950b95241edf6c5264b498eeaf0e919837952ec6d",
81
+ "track_4_semantic_instruction": "9aff9dfc778ae35f299dce4c3aa07afbdc5275847490abd8037f3f5bdd9de411",
82
+ "track_6_unseen_texture": "249c1bca941b13267571b7641a91bcfbaffbc9c2b6b210d9ee2d2513324aa817"
83
+ },
84
+ "vlabench_root": "/root/vlabench/VLABench",
85
+ "execution_mode": "pool",
86
+ "pool_protocol": {
87
+ "name": "track_pool_v1",
88
+ "policy_noise_rng": "independent_track_servers",
89
+ "policy_seed": 7,
90
+ "jobs_per_gpu": 2,
91
+ "groups_per_job": 2,
92
+ "note": "Each track has an independent seed-7 policy server with a shared noise RNG among its task clients. Client ordering and partial resumes can change draws; this is not bit-identical to a single-server or four-shard evaluation."
93
+ },
94
+ "gpus": [
95
+ 0,
96
+ 1,
97
+ 2,
98
+ 3
99
+ ],
100
+ "env_limits": {
101
+ "TORCHINDUCTOR_COMPILE_THREADS": "2",
102
+ "OMP_NUM_THREADS": "1",
103
+ "OPENBLAS_NUM_THREADS": "1",
104
+ "MKL_NUM_THREADS": "1"
105
+ }
106
+ },
107
+ "tracks": {
108
+ "track_1_in_distribution": {
109
+ "status": "complete",
110
+ "track": "track_1_in_distribution",
111
+ "n_tasks": 10,
112
+ "episodes_per_task": {
113
+ "select_painting": 50,
114
+ "select_book": 50,
115
+ "select_drink": 50,
116
+ "select_chemistry_tube": 50,
117
+ "select_poker": 50,
118
+ "select_mahjong": 50,
119
+ "select_toy": 50,
120
+ "select_fruit": 50,
121
+ "add_condiment": 50,
122
+ "insert_flower": 50
123
+ },
124
+ "total_episodes": 500,
125
+ "per_task": {
126
+ "select_painting": {
127
+ "success_rate": 0.28,
128
+ "intention_score": 0.6,
129
+ "progress_score": 0.28
130
+ },
131
+ "select_book": {
132
+ "success_rate": 0.5918367346938775,
133
+ "intention_score": 0.8979591836734694,
134
+ "progress_score": 0.7244897959183674
135
+ },
136
+ "select_drink": {
137
+ "success_rate": 0.58,
138
+ "intention_score": 0.96,
139
+ "progress_score": 0.68
140
+ },
141
+ "select_chemistry_tube": {
142
+ "success_rate": 0.46938775510204084,
143
+ "intention_score": 0.0,
144
+ "progress_score": 0.6938775510204082
145
+ },
146
+ "select_poker": {
147
+ "success_rate": 0.56,
148
+ "intention_score": 0.8,
149
+ "progress_score": 0.7200000000000002
150
+ },
151
+ "select_mahjong": {
152
+ "success_rate": 0.5,
153
+ "intention_score": 0.8333333333333334,
154
+ "progress_score": 0.5
155
+ },
156
+ "select_toy": {
157
+ "success_rate": 0.56,
158
+ "intention_score": 0.22,
159
+ "progress_score": 0.77
160
+ },
161
+ "select_fruit": {
162
+ "success_rate": 0.7,
163
+ "intention_score": 0.98,
164
+ "progress_score": 0.84
165
+ },
166
+ "add_condiment": {
167
+ "success_rate": 0.64,
168
+ "intention_score": 1.0,
169
+ "progress_score": 0.7933333333333336
170
+ },
171
+ "insert_flower": {
172
+ "success_rate": 0.36,
173
+ "intention_score": 0.98,
174
+ "progress_score": 0.67
175
+ }
176
+ },
177
+ "avg_success_rate": 0.5241224489795918,
178
+ "avg_intention_score": 0.7271292517006802,
179
+ "avg_progress_score": 0.6671700680272109,
180
+ "error_policy": "exclude_physics_errors_v1",
181
+ "per_task_episode_accounting": {
182
+ "select_painting": {
183
+ "error_policy": "exclude_physics_errors_v1",
184
+ "attempted_episodes": 50,
185
+ "valid_episodes": 50,
186
+ "excluded_episodes": 0,
187
+ "metric_denominator": 50,
188
+ "excluded_episode_ids": []
189
+ },
190
+ "select_book": {
191
+ "error_policy": "exclude_physics_errors_v1",
192
+ "attempted_episodes": 50,
193
+ "valid_episodes": 49,
194
+ "excluded_episodes": 1,
195
+ "metric_denominator": 49,
196
+ "excluded_episode_ids": [
197
+ 48
198
+ ]
199
+ },
200
+ "select_drink": {
201
+ "error_policy": "exclude_physics_errors_v1",
202
+ "attempted_episodes": 50,
203
+ "valid_episodes": 50,
204
+ "excluded_episodes": 0,
205
+ "metric_denominator": 50,
206
+ "excluded_episode_ids": []
207
+ },
208
+ "select_chemistry_tube": {
209
+ "error_policy": "exclude_physics_errors_v1",
210
+ "attempted_episodes": 50,
211
+ "valid_episodes": 49,
212
+ "excluded_episodes": 1,
213
+ "metric_denominator": 49,
214
+ "excluded_episode_ids": [
215
+ 13
216
+ ]
217
+ },
218
+ "select_poker": {
219
+ "error_policy": "exclude_physics_errors_v1",
220
+ "attempted_episodes": 50,
221
+ "valid_episodes": 50,
222
+ "excluded_episodes": 0,
223
+ "metric_denominator": 50,
224
+ "excluded_episode_ids": []
225
+ },
226
+ "select_mahjong": {
227
+ "error_policy": "exclude_physics_errors_v1",
228
+ "attempted_episodes": 50,
229
+ "valid_episodes": 48,
230
+ "excluded_episodes": 2,
231
+ "metric_denominator": 48,
232
+ "excluded_episode_ids": [
233
+ 11,
234
+ 34
235
+ ]
236
+ },
237
+ "select_toy": {
238
+ "error_policy": "exclude_physics_errors_v1",
239
+ "attempted_episodes": 50,
240
+ "valid_episodes": 50,
241
+ "excluded_episodes": 0,
242
+ "metric_denominator": 50,
243
+ "excluded_episode_ids": []
244
+ },
245
+ "select_fruit": {
246
+ "error_policy": "exclude_physics_errors_v1",
247
+ "attempted_episodes": 50,
248
+ "valid_episodes": 50,
249
+ "excluded_episodes": 0,
250
+ "metric_denominator": 50,
251
+ "excluded_episode_ids": []
252
+ },
253
+ "add_condiment": {
254
+ "error_policy": "exclude_physics_errors_v1",
255
+ "attempted_episodes": 50,
256
+ "valid_episodes": 50,
257
+ "excluded_episodes": 0,
258
+ "metric_denominator": 50,
259
+ "excluded_episode_ids": []
260
+ },
261
+ "insert_flower": {
262
+ "error_policy": "exclude_physics_errors_v1",
263
+ "attempted_episodes": 50,
264
+ "valid_episodes": 50,
265
+ "excluded_episodes": 0,
266
+ "metric_denominator": 50,
267
+ "excluded_episode_ids": []
268
+ }
269
+ },
270
+ "valid_episodes": 496,
271
+ "excluded_episodes": 4
272
+ },
273
+ "track_2_cross_category": {
274
+ "status": "complete",
275
+ "track": "track_2_cross_category",
276
+ "n_tasks": 10,
277
+ "episodes_per_task": {
278
+ "select_painting": 50,
279
+ "select_fruit": 50,
280
+ "select_toy": 50,
281
+ "select_poker": 50,
282
+ "select_mahjong": 50,
283
+ "insert_flower": 10,
284
+ "select_chemistry_tube": 50,
285
+ "add_condiment": 50,
286
+ "select_drink": 50,
287
+ "select_book": 50
288
+ },
289
+ "total_episodes": 460,
290
+ "per_task": {
291
+ "select_painting": {
292
+ "success_rate": 0.24,
293
+ "intention_score": 0.48,
294
+ "progress_score": 0.24
295
+ },
296
+ "select_fruit": {
297
+ "success_rate": 0.8,
298
+ "intention_score": 0.96,
299
+ "progress_score": 0.87
300
+ },
301
+ "select_toy": {
302
+ "success_rate": 0.54,
303
+ "intention_score": 0.2,
304
+ "progress_score": 0.69
305
+ },
306
+ "select_poker": {
307
+ "success_rate": 0.54,
308
+ "intention_score": 0.78,
309
+ "progress_score": 0.68
310
+ },
311
+ "select_mahjong": {
312
+ "success_rate": 0.391304347826087,
313
+ "intention_score": 0.7608695652173914,
314
+ "progress_score": 0.43478260869565216
315
+ },
316
+ "insert_flower": {
317
+ "success_rate": 0.1,
318
+ "intention_score": 1.0,
319
+ "progress_score": 0.45
320
+ },
321
+ "select_chemistry_tube": {
322
+ "success_rate": 0.06,
323
+ "intention_score": 0.02,
324
+ "progress_score": 0.17
325
+ },
326
+ "add_condiment": {
327
+ "success_rate": 0.04,
328
+ "intention_score": 0.32,
329
+ "progress_score": 0.16666666666666663
330
+ },
331
+ "select_drink": {
332
+ "success_rate": 0.1,
333
+ "intention_score": 0.62,
334
+ "progress_score": 0.26
335
+ },
336
+ "select_book": {
337
+ "success_rate": 0.06,
338
+ "intention_score": 0.14,
339
+ "progress_score": 0.09
340
+ }
341
+ },
342
+ "avg_success_rate": 0.28713043478260875,
343
+ "avg_intention_score": 0.5280869565217391,
344
+ "avg_progress_score": 0.4051449275362319,
345
+ "error_policy": "exclude_physics_errors_v1",
346
+ "per_task_episode_accounting": {
347
+ "select_painting": {
348
+ "error_policy": "exclude_physics_errors_v1",
349
+ "attempted_episodes": 50,
350
+ "valid_episodes": 50,
351
+ "excluded_episodes": 0,
352
+ "metric_denominator": 50,
353
+ "excluded_episode_ids": []
354
+ },
355
+ "select_fruit": {
356
+ "error_policy": "exclude_physics_errors_v1",
357
+ "attempted_episodes": 50,
358
+ "valid_episodes": 50,
359
+ "excluded_episodes": 0,
360
+ "metric_denominator": 50,
361
+ "excluded_episode_ids": []
362
+ },
363
+ "select_toy": {
364
+ "error_policy": "exclude_physics_errors_v1",
365
+ "attempted_episodes": 50,
366
+ "valid_episodes": 50,
367
+ "excluded_episodes": 0,
368
+ "metric_denominator": 50,
369
+ "excluded_episode_ids": []
370
+ },
371
+ "select_poker": {
372
+ "error_policy": "exclude_physics_errors_v1",
373
+ "attempted_episodes": 50,
374
+ "valid_episodes": 50,
375
+ "excluded_episodes": 0,
376
+ "metric_denominator": 50,
377
+ "excluded_episode_ids": []
378
+ },
379
+ "select_mahjong": {
380
+ "error_policy": "exclude_physics_errors_v1",
381
+ "attempted_episodes": 50,
382
+ "valid_episodes": 46,
383
+ "excluded_episodes": 4,
384
+ "metric_denominator": 46,
385
+ "excluded_episode_ids": [
386
+ 1,
387
+ 22,
388
+ 25,
389
+ 49
390
+ ]
391
+ },
392
+ "insert_flower": {
393
+ "error_policy": "exclude_physics_errors_v1",
394
+ "attempted_episodes": 10,
395
+ "valid_episodes": 10,
396
+ "excluded_episodes": 0,
397
+ "metric_denominator": 10,
398
+ "excluded_episode_ids": []
399
+ },
400
+ "select_chemistry_tube": {
401
+ "error_policy": "exclude_physics_errors_v1",
402
+ "attempted_episodes": 50,
403
+ "valid_episodes": 50,
404
+ "excluded_episodes": 0,
405
+ "metric_denominator": 50,
406
+ "excluded_episode_ids": []
407
+ },
408
+ "add_condiment": {
409
+ "error_policy": "exclude_physics_errors_v1",
410
+ "attempted_episodes": 50,
411
+ "valid_episodes": 50,
412
+ "excluded_episodes": 0,
413
+ "metric_denominator": 50,
414
+ "excluded_episode_ids": []
415
+ },
416
+ "select_drink": {
417
+ "error_policy": "exclude_physics_errors_v1",
418
+ "attempted_episodes": 50,
419
+ "valid_episodes": 50,
420
+ "excluded_episodes": 0,
421
+ "metric_denominator": 50,
422
+ "excluded_episode_ids": []
423
+ },
424
+ "select_book": {
425
+ "error_policy": "exclude_physics_errors_v1",
426
+ "attempted_episodes": 50,
427
+ "valid_episodes": 50,
428
+ "excluded_episodes": 0,
429
+ "metric_denominator": 50,
430
+ "excluded_episode_ids": []
431
+ }
432
+ },
433
+ "valid_episodes": 456,
434
+ "excluded_episodes": 4
435
+ },
436
+ "track_3_common_sense": {
437
+ "status": "complete",
438
+ "track": "track_3_common_sense",
439
+ "n_tasks": 10,
440
+ "episodes_per_task": {
441
+ "select_painting": 50,
442
+ "select_book": 50,
443
+ "select_drink": 50,
444
+ "select_chemistry_tube": 50,
445
+ "select_toy": 50,
446
+ "select_fruit": 50,
447
+ "add_condiment": 50,
448
+ "insert_flower": 50,
449
+ "select_nth_largest_poker": 50,
450
+ "select_unique_type_mahjong": 50
451
+ },
452
+ "total_episodes": 500,
453
+ "per_task": {
454
+ "select_painting": {
455
+ "success_rate": 0.24,
456
+ "intention_score": 0.5,
457
+ "progress_score": 0.24
458
+ },
459
+ "select_book": {
460
+ "success_rate": 0.3617021276595745,
461
+ "intention_score": 0.7659574468085106,
462
+ "progress_score": 0.5319148936170213
463
+ },
464
+ "select_drink": {
465
+ "success_rate": 0.1,
466
+ "intention_score": 0.78,
467
+ "progress_score": 0.24
468
+ },
469
+ "select_chemistry_tube": {
470
+ "success_rate": 0.54,
471
+ "intention_score": 0.0,
472
+ "progress_score": 0.76
473
+ },
474
+ "select_toy": {
475
+ "success_rate": 0.24,
476
+ "intention_score": 0.28,
477
+ "progress_score": 0.53
478
+ },
479
+ "select_fruit": {
480
+ "success_rate": 0.62,
481
+ "intention_score": 0.94,
482
+ "progress_score": 0.78
483
+ },
484
+ "add_condiment": {
485
+ "success_rate": 0.1,
486
+ "intention_score": 0.7,
487
+ "progress_score": 0.2800000000000001
488
+ },
489
+ "insert_flower": {
490
+ "success_rate": 0.12,
491
+ "intention_score": 0.98,
492
+ "progress_score": 0.55
493
+ },
494
+ "select_nth_largest_poker": {
495
+ "success_rate": 0.1,
496
+ "intention_score": 0.22,
497
+ "progress_score": 0.12666666666666668
498
+ },
499
+ "select_unique_type_mahjong": {
500
+ "success_rate": 0.16666666666666666,
501
+ "intention_score": 0.5416666666666666,
502
+ "progress_score": 0.21875
503
+ }
504
+ },
505
+ "avg_success_rate": 0.2588368794326241,
506
+ "avg_intention_score": 0.5707624113475177,
507
+ "avg_progress_score": 0.42573315602836886,
508
+ "error_policy": "exclude_physics_errors_v1",
509
+ "per_task_episode_accounting": {
510
+ "select_painting": {
511
+ "error_policy": "exclude_physics_errors_v1",
512
+ "attempted_episodes": 50,
513
+ "valid_episodes": 50,
514
+ "excluded_episodes": 0,
515
+ "metric_denominator": 50,
516
+ "excluded_episode_ids": []
517
+ },
518
+ "select_book": {
519
+ "error_policy": "exclude_physics_errors_v1",
520
+ "attempted_episodes": 50,
521
+ "valid_episodes": 47,
522
+ "excluded_episodes": 3,
523
+ "metric_denominator": 47,
524
+ "excluded_episode_ids": [
525
+ 16,
526
+ 30,
527
+ 40
528
+ ]
529
+ },
530
+ "select_drink": {
531
+ "error_policy": "exclude_physics_errors_v1",
532
+ "attempted_episodes": 50,
533
+ "valid_episodes": 50,
534
+ "excluded_episodes": 0,
535
+ "metric_denominator": 50,
536
+ "excluded_episode_ids": []
537
+ },
538
+ "select_chemistry_tube": {
539
+ "error_policy": "exclude_physics_errors_v1",
540
+ "attempted_episodes": 50,
541
+ "valid_episodes": 50,
542
+ "excluded_episodes": 0,
543
+ "metric_denominator": 50,
544
+ "excluded_episode_ids": []
545
+ },
546
+ "select_toy": {
547
+ "error_policy": "exclude_physics_errors_v1",
548
+ "attempted_episodes": 50,
549
+ "valid_episodes": 50,
550
+ "excluded_episodes": 0,
551
+ "metric_denominator": 50,
552
+ "excluded_episode_ids": []
553
+ },
554
+ "select_fruit": {
555
+ "error_policy": "exclude_physics_errors_v1",
556
+ "attempted_episodes": 50,
557
+ "valid_episodes": 50,
558
+ "excluded_episodes": 0,
559
+ "metric_denominator": 50,
560
+ "excluded_episode_ids": []
561
+ },
562
+ "add_condiment": {
563
+ "error_policy": "exclude_physics_errors_v1",
564
+ "attempted_episodes": 50,
565
+ "valid_episodes": 50,
566
+ "excluded_episodes": 0,
567
+ "metric_denominator": 50,
568
+ "excluded_episode_ids": []
569
+ },
570
+ "insert_flower": {
571
+ "error_policy": "exclude_physics_errors_v1",
572
+ "attempted_episodes": 50,
573
+ "valid_episodes": 50,
574
+ "excluded_episodes": 0,
575
+ "metric_denominator": 50,
576
+ "excluded_episode_ids": []
577
+ },
578
+ "select_nth_largest_poker": {
579
+ "error_policy": "exclude_physics_errors_v1",
580
+ "attempted_episodes": 50,
581
+ "valid_episodes": 50,
582
+ "excluded_episodes": 0,
583
+ "metric_denominator": 50,
584
+ "excluded_episode_ids": []
585
+ },
586
+ "select_unique_type_mahjong": {
587
+ "error_policy": "exclude_physics_errors_v1",
588
+ "attempted_episodes": 50,
589
+ "valid_episodes": 48,
590
+ "excluded_episodes": 2,
591
+ "metric_denominator": 48,
592
+ "excluded_episode_ids": [
593
+ 3,
594
+ 28
595
+ ]
596
+ }
597
+ },
598
+ "valid_episodes": 495,
599
+ "excluded_episodes": 5
600
+ },
601
+ "track_4_semantic_instruction": {
602
+ "status": "complete",
603
+ "track": "track_4_semantic_instruction",
604
+ "n_tasks": 10,
605
+ "episodes_per_task": {
606
+ "select_painting": 50,
607
+ "select_book": 50,
608
+ "select_drink": 50,
609
+ "select_chemistry_tube": 50,
610
+ "select_poker": 50,
611
+ "select_mahjong": 50,
612
+ "select_toy": 50,
613
+ "select_fruit": 50,
614
+ "add_condiment": 50,
615
+ "insert_flower": 50
616
+ },
617
+ "total_episodes": 500,
618
+ "per_task": {
619
+ "select_painting": {
620
+ "success_rate": 0.18,
621
+ "intention_score": 0.56,
622
+ "progress_score": 0.18
623
+ },
624
+ "select_book": {
625
+ "success_rate": 0.375,
626
+ "intention_score": 0.7083333333333334,
627
+ "progress_score": 0.4791666666666667
628
+ },
629
+ "select_drink": {
630
+ "success_rate": 0.18,
631
+ "intention_score": 0.86,
632
+ "progress_score": 0.33
633
+ },
634
+ "select_chemistry_tube": {
635
+ "success_rate": 0.24,
636
+ "intention_score": 0.0,
637
+ "progress_score": 0.53
638
+ },
639
+ "select_poker": {
640
+ "success_rate": 0.3,
641
+ "intention_score": 0.78,
642
+ "progress_score": 0.38666666666666666
643
+ },
644
+ "select_mahjong": {
645
+ "success_rate": 0.2608695652173913,
646
+ "intention_score": 0.8043478260869565,
647
+ "progress_score": 0.34782608695652173
648
+ },
649
+ "select_toy": {
650
+ "success_rate": 0.16,
651
+ "intention_score": 0.28,
652
+ "progress_score": 0.5
653
+ },
654
+ "select_fruit": {
655
+ "success_rate": 0.4,
656
+ "intention_score": 0.92,
657
+ "progress_score": 0.65
658
+ },
659
+ "add_condiment": {
660
+ "success_rate": 0.18,
661
+ "intention_score": 0.7,
662
+ "progress_score": 0.33333333333333326
663
+ },
664
+ "insert_flower": {
665
+ "success_rate": 0.08,
666
+ "intention_score": 0.98,
667
+ "progress_score": 0.5
668
+ }
669
+ },
670
+ "avg_success_rate": 0.23558695652173914,
671
+ "avg_intention_score": 0.6592681159420289,
672
+ "avg_progress_score": 0.4236992753623189,
673
+ "error_policy": "exclude_physics_errors_v1",
674
+ "per_task_episode_accounting": {
675
+ "select_painting": {
676
+ "error_policy": "exclude_physics_errors_v1",
677
+ "attempted_episodes": 50,
678
+ "valid_episodes": 50,
679
+ "excluded_episodes": 0,
680
+ "metric_denominator": 50,
681
+ "excluded_episode_ids": []
682
+ },
683
+ "select_book": {
684
+ "error_policy": "exclude_physics_errors_v1",
685
+ "attempted_episodes": 50,
686
+ "valid_episodes": 48,
687
+ "excluded_episodes": 2,
688
+ "metric_denominator": 48,
689
+ "excluded_episode_ids": [
690
+ 2,
691
+ 5
692
+ ]
693
+ },
694
+ "select_drink": {
695
+ "error_policy": "exclude_physics_errors_v1",
696
+ "attempted_episodes": 50,
697
+ "valid_episodes": 50,
698
+ "excluded_episodes": 0,
699
+ "metric_denominator": 50,
700
+ "excluded_episode_ids": []
701
+ },
702
+ "select_chemistry_tube": {
703
+ "error_policy": "exclude_physics_errors_v1",
704
+ "attempted_episodes": 50,
705
+ "valid_episodes": 50,
706
+ "excluded_episodes": 0,
707
+ "metric_denominator": 50,
708
+ "excluded_episode_ids": []
709
+ },
710
+ "select_poker": {
711
+ "error_policy": "exclude_physics_errors_v1",
712
+ "attempted_episodes": 50,
713
+ "valid_episodes": 50,
714
+ "excluded_episodes": 0,
715
+ "metric_denominator": 50,
716
+ "excluded_episode_ids": []
717
+ },
718
+ "select_mahjong": {
719
+ "error_policy": "exclude_physics_errors_v1",
720
+ "attempted_episodes": 50,
721
+ "valid_episodes": 46,
722
+ "excluded_episodes": 4,
723
+ "metric_denominator": 46,
724
+ "excluded_episode_ids": [
725
+ 7,
726
+ 19,
727
+ 20,
728
+ 39
729
+ ]
730
+ },
731
+ "select_toy": {
732
+ "error_policy": "exclude_physics_errors_v1",
733
+ "attempted_episodes": 50,
734
+ "valid_episodes": 50,
735
+ "excluded_episodes": 0,
736
+ "metric_denominator": 50,
737
+ "excluded_episode_ids": []
738
+ },
739
+ "select_fruit": {
740
+ "error_policy": "exclude_physics_errors_v1",
741
+ "attempted_episodes": 50,
742
+ "valid_episodes": 50,
743
+ "excluded_episodes": 0,
744
+ "metric_denominator": 50,
745
+ "excluded_episode_ids": []
746
+ },
747
+ "add_condiment": {
748
+ "error_policy": "exclude_physics_errors_v1",
749
+ "attempted_episodes": 50,
750
+ "valid_episodes": 50,
751
+ "excluded_episodes": 0,
752
+ "metric_denominator": 50,
753
+ "excluded_episode_ids": []
754
+ },
755
+ "insert_flower": {
756
+ "error_policy": "exclude_physics_errors_v1",
757
+ "attempted_episodes": 50,
758
+ "valid_episodes": 50,
759
+ "excluded_episodes": 0,
760
+ "metric_denominator": 50,
761
+ "excluded_episode_ids": []
762
+ }
763
+ },
764
+ "valid_episodes": 494,
765
+ "excluded_episodes": 6
766
+ },
767
+ "track_6_unseen_texture": {
768
+ "status": "complete",
769
+ "track": "track_6_unseen_texture",
770
+ "n_tasks": 10,
771
+ "episodes_per_task": {
772
+ "select_painting": 50,
773
+ "select_book": 50,
774
+ "select_drink": 50,
775
+ "select_chemistry_tube": 50,
776
+ "select_poker": 50,
777
+ "select_mahjong": 50,
778
+ "select_toy": 50,
779
+ "select_fruit": 50,
780
+ "add_condiment": 50,
781
+ "insert_flower": 50
782
+ },
783
+ "total_episodes": 500,
784
+ "per_task": {
785
+ "select_painting": {
786
+ "success_rate": 0.24,
787
+ "intention_score": 0.5,
788
+ "progress_score": 0.24
789
+ },
790
+ "select_book": {
791
+ "success_rate": 0.3333333333333333,
792
+ "intention_score": 0.7083333333333334,
793
+ "progress_score": 0.5
794
+ },
795
+ "select_drink": {
796
+ "success_rate": 0.34,
797
+ "intention_score": 0.92,
798
+ "progress_score": 0.57
799
+ },
800
+ "select_chemistry_tube": {
801
+ "success_rate": 0.4,
802
+ "intention_score": 0.02,
803
+ "progress_score": 0.62
804
+ },
805
+ "select_poker": {
806
+ "success_rate": 0.38,
807
+ "intention_score": 0.64,
808
+ "progress_score": 0.4266666666666667
809
+ },
810
+ "select_mahjong": {
811
+ "success_rate": 0.3404255319148936,
812
+ "intention_score": 0.7659574468085106,
813
+ "progress_score": 0.3829787234042553
814
+ },
815
+ "select_toy": {
816
+ "success_rate": 0.3,
817
+ "intention_score": 0.14,
818
+ "progress_score": 0.6
819
+ },
820
+ "select_fruit": {
821
+ "success_rate": 0.48,
822
+ "intention_score": 0.94,
823
+ "progress_score": 0.66
824
+ },
825
+ "add_condiment": {
826
+ "success_rate": 0.38,
827
+ "intention_score": 0.98,
828
+ "progress_score": 0.6533333333333335
829
+ },
830
+ "insert_flower": {
831
+ "success_rate": 0.06,
832
+ "intention_score": 0.92,
833
+ "progress_score": 0.36
834
+ }
835
+ },
836
+ "avg_success_rate": 0.3253758865248227,
837
+ "avg_intention_score": 0.6534290780141845,
838
+ "avg_progress_score": 0.5012978723404256,
839
+ "error_policy": "exclude_physics_errors_v1",
840
+ "per_task_episode_accounting": {
841
+ "select_painting": {
842
+ "error_policy": "exclude_physics_errors_v1",
843
+ "attempted_episodes": 50,
844
+ "valid_episodes": 50,
845
+ "excluded_episodes": 0,
846
+ "metric_denominator": 50,
847
+ "excluded_episode_ids": []
848
+ },
849
+ "select_book": {
850
+ "error_policy": "exclude_physics_errors_v1",
851
+ "attempted_episodes": 50,
852
+ "valid_episodes": 48,
853
+ "excluded_episodes": 2,
854
+ "metric_denominator": 48,
855
+ "excluded_episode_ids": [
856
+ 8,
857
+ 9
858
+ ]
859
+ },
860
+ "select_drink": {
861
+ "error_policy": "exclude_physics_errors_v1",
862
+ "attempted_episodes": 50,
863
+ "valid_episodes": 50,
864
+ "excluded_episodes": 0,
865
+ "metric_denominator": 50,
866
+ "excluded_episode_ids": []
867
+ },
868
+ "select_chemistry_tube": {
869
+ "error_policy": "exclude_physics_errors_v1",
870
+ "attempted_episodes": 50,
871
+ "valid_episodes": 50,
872
+ "excluded_episodes": 0,
873
+ "metric_denominator": 50,
874
+ "excluded_episode_ids": []
875
+ },
876
+ "select_poker": {
877
+ "error_policy": "exclude_physics_errors_v1",
878
+ "attempted_episodes": 50,
879
+ "valid_episodes": 50,
880
+ "excluded_episodes": 0,
881
+ "metric_denominator": 50,
882
+ "excluded_episode_ids": []
883
+ },
884
+ "select_mahjong": {
885
+ "error_policy": "exclude_physics_errors_v1",
886
+ "attempted_episodes": 50,
887
+ "valid_episodes": 47,
888
+ "excluded_episodes": 3,
889
+ "metric_denominator": 47,
890
+ "excluded_episode_ids": [
891
+ 24,
892
+ 25,
893
+ 41
894
+ ]
895
+ },
896
+ "select_toy": {
897
+ "error_policy": "exclude_physics_errors_v1",
898
+ "attempted_episodes": 50,
899
+ "valid_episodes": 50,
900
+ "excluded_episodes": 0,
901
+ "metric_denominator": 50,
902
+ "excluded_episode_ids": []
903
+ },
904
+ "select_fruit": {
905
+ "error_policy": "exclude_physics_errors_v1",
906
+ "attempted_episodes": 50,
907
+ "valid_episodes": 50,
908
+ "excluded_episodes": 0,
909
+ "metric_denominator": 50,
910
+ "excluded_episode_ids": []
911
+ },
912
+ "add_condiment": {
913
+ "error_policy": "exclude_physics_errors_v1",
914
+ "attempted_episodes": 50,
915
+ "valid_episodes": 50,
916
+ "excluded_episodes": 0,
917
+ "metric_denominator": 50,
918
+ "excluded_episode_ids": []
919
+ },
920
+ "insert_flower": {
921
+ "error_policy": "exclude_physics_errors_v1",
922
+ "attempted_episodes": 50,
923
+ "valid_episodes": 50,
924
+ "excluded_episodes": 0,
925
+ "metric_denominator": 50,
926
+ "excluded_episode_ids": []
927
+ }
928
+ },
929
+ "valid_episodes": 495,
930
+ "excluded_episodes": 5
931
+ }
932
+ },
933
+ "n_tracks": 5,
934
+ "n_tasks": 50,
935
+ "total_episodes": 2460,
936
+ "shards": {
937
+ "track_1_in_distribution": {
938
+ "gpu": 0,
939
+ "output": "shards/track_1/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_9d9b3e45",
940
+ "summary": "shards/track_1/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_9d9b3e45/summary.json",
941
+ "completed_tasks": "shards/track_1/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_9d9b3e45/track_1_in_distribution/completed_tasks",
942
+ "job": {
943
+ "gpu": 0,
944
+ "pid": 713409,
945
+ "command": [
946
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
947
+ "/root/vlabench/runtime/openpi/scripts/vlabench/eval_h25.py",
948
+ "--pool-worker",
949
+ "--method",
950
+ "race2abl_timing_only",
951
+ "--horizon",
952
+ "20",
953
+ "--exp-name",
954
+ "abl_timing_only_h20_s42",
955
+ "--step",
956
+ "40000",
957
+ "--gpu",
958
+ "0",
959
+ "--n-episode",
960
+ "50",
961
+ "--groups",
962
+ "2",
963
+ "--tracks",
964
+ "1",
965
+ "--replan-steps",
966
+ "20",
967
+ "--openpi-root",
968
+ "/root/vlabench/runtime/openpi",
969
+ "--vlabench-root",
970
+ "/root/vlabench/VLABench",
971
+ "--checkpoint-root",
972
+ "/root/vlabench/runtime/openpi/checkpoints",
973
+ "--output-root",
974
+ "/root/vlabench/runtime/openpi/evaluate_results/vlabench_h20/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7/shards/track_1",
975
+ "--policy-python",
976
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
977
+ "--sim-python",
978
+ "/root/vlabench/runtime/sim-env/bin/python",
979
+ "--startup-timeout",
980
+ "1200.0",
981
+ "--warmup-timeout",
982
+ "3600.0",
983
+ "--task-timeout",
984
+ "21600.0"
985
+ ],
986
+ "status": "complete",
987
+ "started_at": 1789477934.447253,
988
+ "env_limits": {
989
+ "TORCHINDUCTOR_COMPILE_THREADS": "2",
990
+ "OMP_NUM_THREADS": "1",
991
+ "OPENBLAS_NUM_THREADS": "1",
992
+ "MKL_NUM_THREADS": "1"
993
+ },
994
+ "finished_at": 1789487279.4960856
995
+ }
996
+ },
997
+ "track_2_cross_category": {
998
+ "gpu": 1,
999
+ "output": "shards/track_2/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_baa99750",
1000
+ "summary": "shards/track_2/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_baa99750/summary.json",
1001
+ "completed_tasks": "shards/track_2/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_baa99750/track_2_cross_category/completed_tasks",
1002
+ "job": {
1003
+ "gpu": 1,
1004
+ "pid": 713410,
1005
+ "command": [
1006
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1007
+ "/root/vlabench/runtime/openpi/scripts/vlabench/eval_h25.py",
1008
+ "--pool-worker",
1009
+ "--method",
1010
+ "race2abl_timing_only",
1011
+ "--horizon",
1012
+ "20",
1013
+ "--exp-name",
1014
+ "abl_timing_only_h20_s42",
1015
+ "--step",
1016
+ "40000",
1017
+ "--gpu",
1018
+ "1",
1019
+ "--n-episode",
1020
+ "50",
1021
+ "--groups",
1022
+ "2",
1023
+ "--tracks",
1024
+ "2",
1025
+ "--replan-steps",
1026
+ "20",
1027
+ "--openpi-root",
1028
+ "/root/vlabench/runtime/openpi",
1029
+ "--vlabench-root",
1030
+ "/root/vlabench/VLABench",
1031
+ "--checkpoint-root",
1032
+ "/root/vlabench/runtime/openpi/checkpoints",
1033
+ "--output-root",
1034
+ "/root/vlabench/runtime/openpi/evaluate_results/vlabench_h20/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7/shards/track_2",
1035
+ "--policy-python",
1036
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1037
+ "--sim-python",
1038
+ "/root/vlabench/runtime/sim-env/bin/python",
1039
+ "--startup-timeout",
1040
+ "1200.0",
1041
+ "--warmup-timeout",
1042
+ "3600.0",
1043
+ "--task-timeout",
1044
+ "21600.0"
1045
+ ],
1046
+ "status": "complete",
1047
+ "started_at": 1789477934.4488165,
1048
+ "env_limits": {
1049
+ "TORCHINDUCTOR_COMPILE_THREADS": "2",
1050
+ "OMP_NUM_THREADS": "1",
1051
+ "OPENBLAS_NUM_THREADS": "1",
1052
+ "MKL_NUM_THREADS": "1"
1053
+ },
1054
+ "finished_at": 1789487215.1072192
1055
+ }
1056
+ },
1057
+ "track_3_common_sense": {
1058
+ "gpu": 2,
1059
+ "output": "shards/track_3/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_21b01caf",
1060
+ "summary": "shards/track_3/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_21b01caf/summary.json",
1061
+ "completed_tasks": "shards/track_3/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_21b01caf/track_3_common_sense/completed_tasks",
1062
+ "job": {
1063
+ "gpu": 2,
1064
+ "pid": 713411,
1065
+ "command": [
1066
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1067
+ "/root/vlabench/runtime/openpi/scripts/vlabench/eval_h25.py",
1068
+ "--pool-worker",
1069
+ "--method",
1070
+ "race2abl_timing_only",
1071
+ "--horizon",
1072
+ "20",
1073
+ "--exp-name",
1074
+ "abl_timing_only_h20_s42",
1075
+ "--step",
1076
+ "40000",
1077
+ "--gpu",
1078
+ "2",
1079
+ "--n-episode",
1080
+ "50",
1081
+ "--groups",
1082
+ "2",
1083
+ "--tracks",
1084
+ "3",
1085
+ "--replan-steps",
1086
+ "20",
1087
+ "--openpi-root",
1088
+ "/root/vlabench/runtime/openpi",
1089
+ "--vlabench-root",
1090
+ "/root/vlabench/VLABench",
1091
+ "--checkpoint-root",
1092
+ "/root/vlabench/runtime/openpi/checkpoints",
1093
+ "--output-root",
1094
+ "/root/vlabench/runtime/openpi/evaluate_results/vlabench_h20/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7/shards/track_3",
1095
+ "--policy-python",
1096
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1097
+ "--sim-python",
1098
+ "/root/vlabench/runtime/sim-env/bin/python",
1099
+ "--startup-timeout",
1100
+ "1200.0",
1101
+ "--warmup-timeout",
1102
+ "3600.0",
1103
+ "--task-timeout",
1104
+ "21600.0"
1105
+ ],
1106
+ "status": "complete",
1107
+ "started_at": 1789477934.450404,
1108
+ "env_limits": {
1109
+ "TORCHINDUCTOR_COMPILE_THREADS": "2",
1110
+ "OMP_NUM_THREADS": "1",
1111
+ "OPENBLAS_NUM_THREADS": "1",
1112
+ "MKL_NUM_THREADS": "1"
1113
+ },
1114
+ "finished_at": 1789488167.2772944
1115
+ }
1116
+ },
1117
+ "track_4_semantic_instruction": {
1118
+ "gpu": 3,
1119
+ "output": "shards/track_4/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_5fae63be",
1120
+ "summary": "shards/track_4/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_5fae63be/summary.json",
1121
+ "completed_tasks": "shards/track_4/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_5fae63be/track_4_semantic_instruction/completed_tasks",
1122
+ "job": {
1123
+ "gpu": 3,
1124
+ "pid": 713412,
1125
+ "command": [
1126
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1127
+ "/root/vlabench/runtime/openpi/scripts/vlabench/eval_h25.py",
1128
+ "--pool-worker",
1129
+ "--method",
1130
+ "race2abl_timing_only",
1131
+ "--horizon",
1132
+ "20",
1133
+ "--exp-name",
1134
+ "abl_timing_only_h20_s42",
1135
+ "--step",
1136
+ "40000",
1137
+ "--gpu",
1138
+ "3",
1139
+ "--n-episode",
1140
+ "50",
1141
+ "--groups",
1142
+ "2",
1143
+ "--tracks",
1144
+ "4",
1145
+ "--replan-steps",
1146
+ "20",
1147
+ "--openpi-root",
1148
+ "/root/vlabench/runtime/openpi",
1149
+ "--vlabench-root",
1150
+ "/root/vlabench/VLABench",
1151
+ "--checkpoint-root",
1152
+ "/root/vlabench/runtime/openpi/checkpoints",
1153
+ "--output-root",
1154
+ "/root/vlabench/runtime/openpi/evaluate_results/vlabench_h20/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7/shards/track_4",
1155
+ "--policy-python",
1156
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1157
+ "--sim-python",
1158
+ "/root/vlabench/runtime/sim-env/bin/python",
1159
+ "--startup-timeout",
1160
+ "1200.0",
1161
+ "--warmup-timeout",
1162
+ "3600.0",
1163
+ "--task-timeout",
1164
+ "21600.0"
1165
+ ],
1166
+ "status": "complete",
1167
+ "started_at": 1789477934.452021,
1168
+ "env_limits": {
1169
+ "TORCHINDUCTOR_COMPILE_THREADS": "2",
1170
+ "OMP_NUM_THREADS": "1",
1171
+ "OPENBLAS_NUM_THREADS": "1",
1172
+ "MKL_NUM_THREADS": "1"
1173
+ },
1174
+ "finished_at": 1789487807.8258038
1175
+ }
1176
+ },
1177
+ "track_6_unseen_texture": {
1178
+ "gpu": 0,
1179
+ "output": "shards/track_6/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_498302e6",
1180
+ "summary": "shards/track_6/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_498302e6/summary.json",
1181
+ "completed_tasks": "shards/track_6/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7_subset_498302e6/track_6_unseen_texture/completed_tasks",
1182
+ "job": {
1183
+ "gpu": 0,
1184
+ "pid": 713413,
1185
+ "command": [
1186
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1187
+ "/root/vlabench/runtime/openpi/scripts/vlabench/eval_h25.py",
1188
+ "--pool-worker",
1189
+ "--method",
1190
+ "race2abl_timing_only",
1191
+ "--horizon",
1192
+ "20",
1193
+ "--exp-name",
1194
+ "abl_timing_only_h20_s42",
1195
+ "--step",
1196
+ "40000",
1197
+ "--gpu",
1198
+ "0",
1199
+ "--n-episode",
1200
+ "50",
1201
+ "--groups",
1202
+ "2",
1203
+ "--tracks",
1204
+ "6",
1205
+ "--replan-steps",
1206
+ "20",
1207
+ "--openpi-root",
1208
+ "/root/vlabench/runtime/openpi",
1209
+ "--vlabench-root",
1210
+ "/root/vlabench/VLABench",
1211
+ "--checkpoint-root",
1212
+ "/root/vlabench/runtime/openpi/checkpoints",
1213
+ "--output-root",
1214
+ "/root/vlabench/runtime/openpi/evaluate_results/vlabench_h20/race2abl_timing_only_h20_abl_timing_only_h20_s42_40000_ema_replan20_n50_seed7/shards/track_6",
1215
+ "--policy-python",
1216
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
1217
+ "--sim-python",
1218
+ "/root/vlabench/runtime/sim-env/bin/python",
1219
+ "--startup-timeout",
1220
+ "1200.0",
1221
+ "--warmup-timeout",
1222
+ "3600.0",
1223
+ "--task-timeout",
1224
+ "21600.0"
1225
+ ],
1226
+ "status": "complete",
1227
+ "started_at": 1789477934.4536605,
1228
+ "env_limits": {
1229
+ "TORCHINDUCTOR_COMPILE_THREADS": "2",
1230
+ "OMP_NUM_THREADS": "1",
1231
+ "OPENBLAS_NUM_THREADS": "1",
1232
+ "MKL_NUM_THREADS": "1"
1233
+ },
1234
+ "finished_at": 1789488436.9035316
1235
+ }
1236
+ }
1237
+ },
1238
+ "pool_manifest": "pool_manifest.json",
1239
+ "error_policy": "exclude_physics_errors_v1",
1240
+ "valid_episodes": 2436,
1241
+ "excluded_episodes": 24,
1242
+ "aggregation": "Equal weight for five tracks; equal task weight within each track. Recorded PhysicsError episodes are excluded from each task's metric denominator; ordinary unsuccessful rollouts remain included.",
1243
+ "avg_success_rate": 0.3262105212482773,
1244
+ "avg_intention_score": 0.62773516270523,
1245
+ "avg_progress_score": 0.4846090598589113
1246
+ }
abl_timing_only_h20_40k/logs/history.jsonl ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {"method": "race2abl_timing_only", "config": "pi05_vlabench_race2abl_timing_only_h20", "exp_name": "abl_timing_only_h20_s42", "horizon": 20, "micro_batch_size": 16, "batch_size": 64, "world_size": 4, "per_gpu_batch_size": 16, "accumulation_steps": 1, "gpus": [0, 1, 2, 3], "train_command": ["/root/vlabench/runtime/openpi/.venv/bin/torchrun", "--standalone", "--nnodes=1", "--nproc_per_node=4", "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py", "pi05_vlabench_race2abl_timing_only_h20", "--exp_name", "abl_timing_only_h20_s42", "--model.micro-batch-size", "16"], "eval_command": ["/root/vlabench/runtime/openpi/.venv/bin/python", "scripts/vlabench/eval_pool.py", "--method", "race2abl_timing_only", "--horizon", "20", "--exp-name", "abl_timing_only_h20_s42", "--step", "40000", "--gpus", "0,1,2,3", "--jobs-per-gpu", "2", "--groups-per-job", "2", "--n-episode", "50", "--openpi-root", "/root/vlabench/runtime/openpi", "--vlabench-root", "/root/vlabench/VLABench", "--sim-python", "/root/vlabench/runtime/sim-env/bin/python"], "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors", "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42", "openpi_root": "/root/vlabench/runtime/openpi", "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup", "stage": "launch_validated", "time": "2026-09-14T19:04:28.566790+00:00", "pid": 659463, "launch_validation": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42/launch_validation.json"}
2
+ {"method": "race2abl_timing_only", "config": "pi05_vlabench_race2abl_timing_only_h20", "exp_name": "abl_timing_only_h20_s42", "horizon": 20, "micro_batch_size": 16, "batch_size": 64, "world_size": 4, "per_gpu_batch_size": 16, "accumulation_steps": 1, "gpus": [0, 1, 2, 3], "train_command": ["/root/vlabench/runtime/openpi/.venv/bin/torchrun", "--standalone", "--nnodes=1", "--nproc_per_node=4", "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py", "pi05_vlabench_race2abl_timing_only_h20", "--exp_name", "abl_timing_only_h20_s42", "--model.micro-batch-size", "16"], "eval_command": ["/root/vlabench/runtime/openpi/.venv/bin/python", "scripts/vlabench/eval_pool.py", "--method", "race2abl_timing_only", "--horizon", "20", "--exp-name", "abl_timing_only_h20_s42", "--step", "40000", "--gpus", "0,1,2,3", "--jobs-per-gpu", "2", "--groups-per-job", "2", "--n-episode", "50", "--openpi-root", "/root/vlabench/runtime/openpi", "--vlabench-root", "/root/vlabench/VLABench", "--sim-python", "/root/vlabench/runtime/sim-env/bin/python"], "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors", "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42", "openpi_root": "/root/vlabench/runtime/openpi", "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup", "stage": "training", "time": "2026-09-14T19:04:28.568297+00:00", "pid": 659463, "child_pid": 659473, "log": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42/train.log"}
3
+ {"method": "race2abl_timing_only", "config": "pi05_vlabench_race2abl_timing_only_h20", "exp_name": "abl_timing_only_h20_s42", "horizon": 20, "micro_batch_size": 16, "batch_size": 64, "world_size": 4, "per_gpu_batch_size": 16, "accumulation_steps": 1, "gpus": [0, 1, 2, 3], "train_command": ["/root/vlabench/runtime/openpi/.venv/bin/torchrun", "--standalone", "--nnodes=1", "--nproc_per_node=4", "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py", "pi05_vlabench_race2abl_timing_only_h20", "--exp_name", "abl_timing_only_h20_s42", "--model.micro-batch-size", "16"], "eval_command": ["/root/vlabench/runtime/openpi/.venv/bin/python", "scripts/vlabench/eval_pool.py", "--method", "race2abl_timing_only", "--horizon", "20", "--exp-name", "abl_timing_only_h20_s42", "--step", "40000", "--gpus", "0,1,2,3", "--jobs-per-gpu", "2", "--groups-per-job", "2", "--n-episode", "50", "--openpi-root", "/root/vlabench/runtime/openpi", "--vlabench-root", "/root/vlabench/VLABench", "--sim-python", "/root/vlabench/runtime/sim-env/bin/python"], "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors", "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42", "openpi_root": "/root/vlabench/runtime/openpi", "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup", "stage": "trained", "time": "2026-09-15T13:12:13.170535+00:00", "pid": 659463, "checkpoint_validation": {"step": 40000, "config": "pi05_vlabench_race2abl_timing_only_h20", "ema": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors", "n_tensors": 225, "horizon": 20, "micro_batch_size": 16}}
4
+ {"method": "race2abl_timing_only", "config": "pi05_vlabench_race2abl_timing_only_h20", "exp_name": "abl_timing_only_h20_s42", "horizon": 20, "micro_batch_size": 16, "batch_size": 64, "world_size": 4, "per_gpu_batch_size": 16, "accumulation_steps": 1, "gpus": [0, 1, 2, 3], "train_command": ["/root/vlabench/runtime/openpi/.venv/bin/torchrun", "--standalone", "--nnodes=1", "--nproc_per_node=4", "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py", "pi05_vlabench_race2abl_timing_only_h20", "--exp_name", "abl_timing_only_h20_s42", "--model.micro-batch-size", "16"], "eval_command": ["/root/vlabench/runtime/openpi/.venv/bin/python", "scripts/vlabench/eval_pool.py", "--method", "race2abl_timing_only", "--horizon", "20", "--exp-name", "abl_timing_only_h20_s42", "--step", "40000", "--gpus", "0,1,2,3", "--jobs-per-gpu", "2", "--groups-per-job", "2", "--n-episode", "50", "--openpi-root", "/root/vlabench/runtime/openpi", "--vlabench-root", "/root/vlabench/VLABench", "--sim-python", "/root/vlabench/runtime/sim-env/bin/python"], "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors", "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42", "openpi_root": "/root/vlabench/runtime/openpi", "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup", "stage": "evaluating", "time": "2026-09-15T13:12:13.175344+00:00", "pid": 659463, "child_pid": 713408, "log": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42/eval.log"}
5
+ {"method": "race2abl_timing_only", "config": "pi05_vlabench_race2abl_timing_only_h20", "exp_name": "abl_timing_only_h20_s42", "horizon": 20, "micro_batch_size": 16, "batch_size": 64, "world_size": 4, "per_gpu_batch_size": 16, "accumulation_steps": 1, "gpus": [0, 1, 2, 3], "train_command": ["/root/vlabench/runtime/openpi/.venv/bin/torchrun", "--standalone", "--nnodes=1", "--nproc_per_node=4", "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py", "pi05_vlabench_race2abl_timing_only_h20", "--exp_name", "abl_timing_only_h20_s42", "--model.micro-batch-size", "16"], "eval_command": ["/root/vlabench/runtime/openpi/.venv/bin/python", "scripts/vlabench/eval_pool.py", "--method", "race2abl_timing_only", "--horizon", "20", "--exp-name", "abl_timing_only_h20_s42", "--step", "40000", "--gpus", "0,1,2,3", "--jobs-per-gpu", "2", "--groups-per-job", "2", "--n-episode", "50", "--openpi-root", "/root/vlabench/runtime/openpi", "--vlabench-root", "/root/vlabench/VLABench", "--sim-python", "/root/vlabench/runtime/sim-env/bin/python"], "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors", "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42", "openpi_root": "/root/vlabench/runtime/openpi", "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup", "stage": "complete", "time": "2026-09-15T16:07:19.098081+00:00", "pid": 659463}
abl_timing_only_h20_40k/logs/launch_validation.json ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "verified",
3
+ "method": "race2abl_timing_only",
4
+ "config": "pi05_vlabench_race2abl_timing_only_h20",
5
+ "exp_name": "abl_timing_only_h20_s42",
6
+ "horizon": 20,
7
+ "micro_batch_size": 16,
8
+ "batch_size": 64,
9
+ "world_size": 4,
10
+ "per_gpu_batch_size": 16,
11
+ "accumulation_steps": 1,
12
+ "gpus": [
13
+ 0,
14
+ 1,
15
+ 2,
16
+ 3
17
+ ],
18
+ "train_command": [
19
+ "/root/vlabench/runtime/openpi/.venv/bin/torchrun",
20
+ "--standalone",
21
+ "--nnodes=1",
22
+ "--nproc_per_node=4",
23
+ "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py",
24
+ "pi05_vlabench_race2abl_timing_only_h20",
25
+ "--exp_name",
26
+ "abl_timing_only_h20_s42",
27
+ "--model.micro-batch-size",
28
+ "16"
29
+ ],
30
+ "eval_command": [
31
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
32
+ "scripts/vlabench/eval_pool.py",
33
+ "--method",
34
+ "race2abl_timing_only",
35
+ "--horizon",
36
+ "20",
37
+ "--exp-name",
38
+ "abl_timing_only_h20_s42",
39
+ "--step",
40
+ "40000",
41
+ "--gpus",
42
+ "0,1,2,3",
43
+ "--jobs-per-gpu",
44
+ "2",
45
+ "--groups-per-job",
46
+ "2",
47
+ "--n-episode",
48
+ "50",
49
+ "--openpi-root",
50
+ "/root/vlabench/runtime/openpi",
51
+ "--vlabench-root",
52
+ "/root/vlabench/VLABench",
53
+ "--sim-python",
54
+ "/root/vlabench/runtime/sim-env/bin/python"
55
+ ],
56
+ "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors",
57
+ "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42",
58
+ "openpi_root": "/root/vlabench/runtime/openpi",
59
+ "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup",
60
+ "setup_reports": {
61
+ "dataset_validation.json": {
62
+ "path": "/root/vlabench/race_eval/logs/h25_g4_setup/dataset_validation.json",
63
+ "sha256": "d3ebe82d7a50cbc0ca22fd6e6360d0fd673700180ec7078a08b59d6c94877838",
64
+ "status": "verified"
65
+ },
66
+ "teacher_validation.json": {
67
+ "path": "/root/vlabench/race_eval/logs/h25_g4_setup/teacher_validation.json",
68
+ "sha256": "09ad2c05835dd5922b84d412bfcb657b6434c8eaa2af70cbc52c46f3860f6be6",
69
+ "status": "verified"
70
+ },
71
+ "cache_ready.json": {
72
+ "path": "/root/vlabench/race_eval/logs/h25_g4_setup/cache_ready.json",
73
+ "sha256": "41d61eb1996d17ba7bba60b0b37fd1c5b9efcb59edc4ee934dea91c8480b2c84",
74
+ "status": "verified"
75
+ }
76
+ },
77
+ "recipe": {
78
+ "name": "pi05_vlabench_race2abl_timing_only_h20",
79
+ "exp_name": "abl_timing_only_h20_s42",
80
+ "pytorch_weight_path": "checkpoints/pi05_vlabench_official/pytorch",
81
+ "seed": 42,
82
+ "batch_size": 64,
83
+ "pytorch_training_precision": "bfloat16",
84
+ "optimizer": {
85
+ "b1": 0.9,
86
+ "b2": 0.95,
87
+ "eps": 1e-08,
88
+ "weight_decay": 1e-10,
89
+ "clip_gradient_norm": 1.0
90
+ },
91
+ "lr_schedule": {
92
+ "warmup_steps": 500,
93
+ "peak_lr": 5e-05,
94
+ "decay_steps": 39500,
95
+ "decay_lr": 5e-06
96
+ },
97
+ "ema_decay": 0.999,
98
+ "model": {
99
+ "action_dim": 32,
100
+ "action_horizon": 20,
101
+ "max_token_len": 200,
102
+ "dtype": "bfloat16",
103
+ "paligemma_variant": "gemma_2b",
104
+ "action_expert_variant": "gemma_300m",
105
+ "pi05": true,
106
+ "discrete_state_input": false,
107
+ "gemma_depth": 18,
108
+ "sigma": 1.0,
109
+ "support": 3.0,
110
+ "jitter_prob": 0.5,
111
+ "lambda_timing": 0.05,
112
+ "lambda_base_fm": 0.0,
113
+ "read_tau": 1.0,
114
+ "n_tau": 10,
115
+ "tau_gate_init": 0.0,
116
+ "tau_gate_lr_mult": 20.0,
117
+ "timing_proj_dim": 256,
118
+ "timing_num_heads": 4,
119
+ "fast_serving": 0,
120
+ "kv_layer": -1
121
+ },
122
+ "data": {
123
+ "repo_id": "SeonghoonYu/vlabench_primitive_ft_lerobot_224",
124
+ "assets": {
125
+ "assets_dir": "./assets/pi05_vlabench",
126
+ "asset_id": "vlabench/vlabench_ft_primitive"
127
+ },
128
+ "phase_labels_path": null,
129
+ "phase_label_horizon": null,
130
+ "cps_path": "assets/gauss_timing/vlabench_cps.npz",
131
+ "gauss_sigma": 1.0,
132
+ "gauss_support": 3.0,
133
+ "base_config": {
134
+ "repo_id": null,
135
+ "asset_id": null,
136
+ "use_quantile_norm": false,
137
+ "action_sequence_keys": [
138
+ "actions"
139
+ ],
140
+ "prompt_from_task": true
141
+ }
142
+ }
143
+ },
144
+ "gpu_uuids": [
145
+ "GPU-4feb92e1-28ff-042a-fea0-1a3883fa3012",
146
+ "GPU-75266c29-c27f-b973-931f-918bed539110",
147
+ "GPU-330794ad-628b-fa4d-a46d-6ca53a33d45d",
148
+ "GPU-cca7b1a0-5e7c-6c6e-e23f-84ff32cca083"
149
+ ],
150
+ "hf_lerobot_home": "/root/vlabench/.cache/huggingface/lerobot",
151
+ "hf_datasets_cache": "/root/vlabench/.cache/huggingface/datasets",
152
+ "openpi_data_home": "/root/vlabench/.cache/openpi"
153
+ }
abl_timing_only_h20_40k/logs/smoke_timing_only_h20.log ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Race2TimingOnlyPI0: conditioning OFF | lambda_base_fm 0.0 lambda_timing 0.05 | head params=790,017 | dtype=bfloat16
2
+ WARNING:root:
3
+ The dataset you requested (SeonghoonYu/vlabench_primitive_ft_lerobot_224) is in 2.0 format.
4
+ While current version of LeRobot is backward-compatible with it, the version of your dataset still uses global
5
+ stats instead of per-episode stats. Update your dataset stats to the new format using this command:
6
+ ```
7
+ python lerobot/common/datasets/v21/convert_dataset_v20_to_v21.py --repo-id=SeonghoonYu/vlabench_primitive_ft_lerobot_224
8
+ ```
9
+
10
+ If you encounter a problem, contact LeRobot maintainers on [Discord](https://discord.com/invite/s3KuuzsPFb)
11
+ or open an [issue on GitHub](https://github.com/huggingface/lerobot/issues/new/choose).
12
+
13
+ WARNING:root:
14
+ The dataset you requested (SeonghoonYu/vlabench_primitive_ft_lerobot_224) is in 2.0 format.
15
+ While current version of LeRobot is backward-compatible with it, the version of your dataset still uses global
16
+ stats instead of per-episode stats. Update your dataset stats to the new format using this command:
17
+ ```
18
+ python lerobot/common/datasets/v21/convert_dataset_v20_to_v21.py --repo-id=SeonghoonYu/vlabench_primitive_ft_lerobot_224
19
+ ```
20
+
21
+ If you encounter a problem, contact LeRobot maintainers on [Discord](https://discord.com/invite/s3KuuzsPFb)
22
+ or open an [issue on GitHub](https://github.com/huggingface/lerobot/issues/new/choose).
23
+
24
+ train: loss 0.4261 fm 0.3879 base_fm 0.00000 bce 0.7641 | grad race_head 1.02e+00 expert 1.31e+01 field 0.00e+00 VLM 0.00e+00
25
+ serve: |a|max 6.812 finite=True | determinism 0.00e+00 | parity vs reference 6.68e-03 | per-call 191 ms (first 246 ms)
26
+ SMOKE_OK
abl_timing_only_h20_40k/logs/status.json ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "race2abl_timing_only",
3
+ "config": "pi05_vlabench_race2abl_timing_only_h20",
4
+ "exp_name": "abl_timing_only_h20_s42",
5
+ "horizon": 20,
6
+ "micro_batch_size": 16,
7
+ "batch_size": 64,
8
+ "world_size": 4,
9
+ "per_gpu_batch_size": 16,
10
+ "accumulation_steps": 1,
11
+ "gpus": [
12
+ 0,
13
+ 1,
14
+ 2,
15
+ 3
16
+ ],
17
+ "train_command": [
18
+ "/root/vlabench/runtime/openpi/.venv/bin/torchrun",
19
+ "--standalone",
20
+ "--nnodes=1",
21
+ "--nproc_per_node=4",
22
+ "scripts/race2_ablation/train_race2abl_timing_only_vlabench.py",
23
+ "pi05_vlabench_race2abl_timing_only_h20",
24
+ "--exp_name",
25
+ "abl_timing_only_h20_s42",
26
+ "--model.micro-batch-size",
27
+ "16"
28
+ ],
29
+ "eval_command": [
30
+ "/root/vlabench/runtime/openpi/.venv/bin/python",
31
+ "scripts/vlabench/eval_pool.py",
32
+ "--method",
33
+ "race2abl_timing_only",
34
+ "--horizon",
35
+ "20",
36
+ "--exp-name",
37
+ "abl_timing_only_h20_s42",
38
+ "--step",
39
+ "40000",
40
+ "--gpus",
41
+ "0,1,2,3",
42
+ "--jobs-per-gpu",
43
+ "2",
44
+ "--groups-per-job",
45
+ "2",
46
+ "--n-episode",
47
+ "50",
48
+ "--openpi-root",
49
+ "/root/vlabench/runtime/openpi",
50
+ "--vlabench-root",
51
+ "/root/vlabench/VLABench",
52
+ "--sim-python",
53
+ "/root/vlabench/runtime/sim-env/bin/python"
54
+ ],
55
+ "checkpoint": "/root/vlabench/runtime/openpi/checkpoints/pi05_vlabench_race2abl_timing_only_h20/abl_timing_only_h20_s42/40000/ema.safetensors",
56
+ "log_dir": "/root/vlabench/runtime/openpi/logs/h20/race2abl_timing_only_abl_timing_only_h20_s42",
57
+ "openpi_root": "/root/vlabench/runtime/openpi",
58
+ "setup_root": "/root/vlabench/race_eval/logs/h25_g4_setup",
59
+ "stage": "complete",
60
+ "time": "2026-09-15T16:07:19.098081+00:00",
61
+ "pid": 659463
62
+ }
abl_timing_only_h20_40k/logs/train.log ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5dfd1c2b27e0066952db43e252bfebf0a4fb255725b7c5b7af023dee2dc9e9cf
3
+ size 58618421
abl_timing_only_h20_40k/model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9be111ce1db525928ec24a20fb102ce7632d9e6f81becd1b732328cf42cc9874
3
+ size 7474154628
abl_timing_only_h20_40k/overlay/ema.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:add103644143aa4cf09d8bacdd4ccf5987bedcd9e7fd4e1d68f1c463e62b5155
3
+ size 1627379860
abl_timing_only_h20_40k/overlay/metadata.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a800acd1b2546db5f6ec4d56f6e7d14dd6cb49bcade22b3fb817ab277e1521ea
3
+ size 3699
abl_timing_only_h20_40k/provenance.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "RACE2 ablation A1 (timing loss only, no conditioning)",
3
+ "config": "pi05_vlabench_race2abl_timing_only_h20",
4
+ "model_class": "Race2TimingOnlyPI0",
5
+ "exp_name": "abl_timing_only_h20_s42",
6
+ "step": 40000, "weights": "EMA", "ema_decay": 0.999, "action_horizon": 20, "training_seed": 42,
7
+ "world_size": 4, "micro_batch_size": 16, "accumulation_steps": 1, "global_batch": 64,
8
+ "ema_overlay_sha256": "add103644143aa4cf09d8bacdd4ccf5987bedcd9e7fd4e1d68f1c463e62b5155",
9
+ "materialized_model_sha256": "9be111ce1db525928ec24a20fb102ce7632d9e6f81becd1b732328cf42cc9874",
10
+ "materialization": {"frozen_tensors": 603, "ema_tensors": 225, "total_tensors": 828},
11
+ "teacher_sha256": "f6762a23e4374bcbd8f3a7297f159b02d253a335f125eb93595d431d37607172",
12
+ "dataset": {"repo_id": "SeonghoonYu/vlabench_primitive_ft_lerobot_224", "revision": "5772f03c3af8df38ee75d8f71cab0075563ed12a"},
13
+ "changepoints_sha256": "6e31b27469d69fa65f2e3c41bcbf016b0f8b426048ca2d88d32367d1aa5aa4fc",
14
+ "openpi_base_repository": "https://github.com/Seonghoon-Yu/Libero", "openpi_base_revision": "43bc120d863a2a67fafd3ee2464029ac37040231",
15
+ "trained": "2026-09-14T19:04Z to 2026-09-15T13:12Z", "evaluated": "2026-09-15T13:12Z to 2026-09-15T16:07Z",
16
+ "evaluation": {"replan_steps": 20, "seed": 7, "tracks": [1, 2, 3, 4, 6], "n_episode": 2460, "physics_errors_excluded": 24,
17
+ "success_rate_pct": 32.62, "intention_score_pct": 62.77, "progress_score_pct": 48.46}
18
+ }
abl_timing_only_h20_40k/source/scripts/race2_ablation/train_race2abl_timing_only_vlabench.py ADDED
@@ -0,0 +1,447 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """RACE2 ablation trainer: A1 — timing loss only, NO conditioning (e_trans/field_mod/tau_gate absent, plain FM, pi0.5 serving).
2
+
3
+ Runs ONLY pi05_vlabench_race2abl_timing_only_h{H} presets (model Race2TimingOnlyPI0). Direct use:
4
+
5
+ cd /root/vlabench/runtime/openpi && source /root/vlabench/race_eval/logs/h30_h35_setup/env.sh
6
+ .venv/bin/torchrun --standalone --nnodes=1 --nproc_per_node=2 \
7
+ scripts/race2_ablation/train_race2abl_timing_only_vlabench.py pi05_vlabench_race2abl_timing_only_h30 \
8
+ --exp_name timing_only_h30_s42 --model.micro-batch-size 32 [--resume]
9
+
10
+ or through the driver (train -> final-EMA check -> pooled eval):
11
+ .venv/bin/python scripts/vlabench/run_h25_job.py --method race2abl_timing_only --horizon 30 --gpus 0,1 \
12
+ --exp-name timing_only_h30_s42 --micro-batch-size 32
13
+
14
+
15
+ Copy of scripts/race2/train_race2_vlabench.py (same recipe machinery: fp32 master
16
+ weights, EMA, cosine LR, slim overlay checkpoints) with the model checks relaxed to the
17
+ ablation classes in openpi.models_pytorch.race2_ablation:
18
+ Race2TimingOnlyPI0 pi05_vlabench_race2abl_timing_only_h{H} timing loss only, no field
19
+ Race2NoAuxPI0 pi05_vlabench_race2abl_noaux_h{H} full minus auxiliary loss
20
+ The full-method trainer is left untouched.
21
+
22
+ Original header follows.
23
+ --------------------------------------------------------------------------------------
24
+ Training entrypoint for RACE v2 on VLABench (Race2PI0).
25
+
26
+ Standalone counterpart of scripts/race/train_race.py for the v2 timing head
27
+ (cross-attention to the cached VLM values -> self-attention among the action slots ->
28
+ linear -> sigmoid; openpi.models_pytorch.race2). Same data pipeline, objective and
29
+ VLABench recipe machinery as the v1 trainer; kept as a separate file so the two methods
30
+ never share (or break) each other's code.
31
+
32
+ Recipe machinery (added for the VLABench campaign, usable for any RACE config):
33
+ * fp32 MASTER WEIGHTS for the trainable set. The model itself stays bf16 for compute,
34
+ exactly as before, but AdamW steps fp32 copies that are written back after every
35
+ step. Without this, the cosine tail (lr 5e-6 -> ~2.5e-4 relative updates) is rounded
36
+ away by the bf16 parameter spacing (2^-8).
37
+ * EMA of the master weights (config.ema_decay). The decay is warmed up as
38
+ min(decay, (1 + step) / (10 + step)) so the early 1k checkpoints are not dominated
39
+ by the initial weights.
40
+ * warmup + cosine LR straight from config.lr_schedule (CosineDecaySchedule).
41
+ * SLIM CHECKPOINTS. Only the trainable tensors are written (the VLM prefix is frozen
42
+ and identical to the teacher):
43
+ <step>/ema.safetensors EMA weights, model dtype (~1.6 GB) every save
44
+ <step>/raw.safetensors non-EMA weights (~1.6 GB) every RAW_EVERY-th save
45
+ <step>/train_state.pt fp32 master + EMA + optimizer (~13 GB) newest step only
46
+ <step>/metadata.pt, <step>/assets/<asset_id>/norm_stats.json
47
+ A full serving checkpoint (teacher VLM + overlay) is materialised on demand with
48
+ scripts/race/materialize_ckpt.py (config-driven, shared with v1).
49
+
50
+ Usage:
51
+ torchrun --standalone --nnodes=1 --nproc_per_node=<n> \
52
+ scripts/race2_ablation/train_race2abl_timing_only_vlabench.py pi05_vlabench_race2abl_timing_only_h30 --exp_name timing_only_h30_s42 [--resume]
53
+ """
54
+
55
+ import contextlib
56
+ import dataclasses
57
+ import logging
58
+ import os
59
+ import pathlib
60
+ import shutil
61
+ import sys
62
+ import time
63
+
64
+ sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent)) # scripts/ for train_pytorch
65
+
66
+ import numpy as np
67
+ import safetensors.torch
68
+ import torch
69
+ import torch.distributed as dist
70
+ import tqdm
71
+
72
+ import jax
73
+
74
+ import openpi.models.race2_ablation_config as race2_ablation_config # noqa: F401 (config registry)
75
+ import openpi.models.model as _model
76
+ import openpi.shared.normalize as _normalize
77
+ import openpi.training.config as _config
78
+ import openpi.training.data_loader as _data
79
+ import openpi.training.gauss_timing_data as gauss_data
80
+
81
+ import train_pytorch as base
82
+ from vlabench.checkpoint_validation import validate_resume
83
+
84
+ # module name fragments that are NEW in this model (absent from the teacher ckpt)
85
+ FRESH_OK = ("race_head", "e_trans", "field_mod", "tau_gate")
86
+ ABLATION_MODELS = ("Race2TimingOnlyPI0",)
87
+ # a raw (non-EMA) overlay is written on every RAW_EVERY-th save (5 x 1k = every 5k steps)
88
+ RAW_EVERY = 5
89
+ TRAIN_STATE = "train_state.pt"
90
+
91
+
92
+ def load_teacher(model, config):
93
+ model_path = os.path.join(config.pytorch_weight_path, "model.safetensors")
94
+ logging.info(f"Loading teacher weights from: {model_path}")
95
+ missing, unexpected = safetensors.torch.load_model(model, model_path, strict=False)
96
+ if unexpected:
97
+ raise ValueError(f"Unexpected keys in teacher checkpoint: {sorted(unexpected)[:5]}")
98
+ stale = [k for k in missing if not any(m in k for m in FRESH_OK)]
99
+ if stale:
100
+ raise ValueError(f"Teacher checkpoint missing expected policy keys: {sorted(stale)[:5]}")
101
+ logging.info(f"Loaded teacher; {len(missing)} new-module tensors keep fresh init")
102
+
103
+
104
+ def make_loader(config, world_size):
105
+ """(observation, actions, b) triples; mirrors data_loader.create_torch_data_loader
106
+ but keeps the extra 'b' key instead of dropping it at Observation.from_dict."""
107
+ data_config = config.data.create(config.assets_dirs, config.model)
108
+ dataset = _data.create_torch_dataset(data_config, config.model.action_horizon, config.model)
109
+ dataset = _data.transform_dataset(dataset, data_config)
110
+ sampler = None
111
+ local_bs = config.batch_size
112
+ if dist.is_initialized():
113
+ sampler = torch.utils.data.distributed.DistributedSampler(
114
+ dataset, num_replicas=dist.get_world_size(), rank=dist.get_rank(), shuffle=True, drop_last=True
115
+ )
116
+ local_bs = config.batch_size // world_size
117
+ loader = _data.TorchDataLoader(
118
+ dataset,
119
+ local_batch_size=local_bs,
120
+ sharding=None,
121
+ shuffle=(sampler is None),
122
+ sampler=sampler,
123
+ num_batches=None,
124
+ num_workers=config.num_workers,
125
+ seed=config.seed,
126
+ framework="pytorch",
127
+ )
128
+ return loader, sampler, data_config
129
+
130
+
131
+ class MasterState:
132
+ """fp32 master copies + EMA of the trainable parameters.
133
+
134
+ Every rank holds an identical copy: DDP averages the bf16 grads, so identical AdamW
135
+ steps run on identical fp32 masters. `sync_to_model` writes the masters back into the
136
+ live (bf16 / fp32) parameters after each optimizer step."""
137
+
138
+ def __init__(self, named_params, ema_decay: float | None, ema_warmup: bool = True):
139
+ self.names = [n for n, _ in named_params]
140
+ self.params = [p for _, p in named_params]
141
+ self.master = []
142
+ for p in self.params:
143
+ m = p.detach().clone().float().requires_grad_(True)
144
+ m.grad = torch.zeros_like(m)
145
+ self.master.append(m)
146
+ self.ema = [m.detach().clone() for m in self.master]
147
+ self.decay = 0.0 if ema_decay is None else float(ema_decay)
148
+ self.ema_warmup = ema_warmup
149
+
150
+ def grads_to_master(self):
151
+ for p, m in zip(self.params, self.master):
152
+ if p.grad is None:
153
+ m.grad.zero_()
154
+ else:
155
+ m.grad.copy_(p.grad)
156
+
157
+ @torch.no_grad()
158
+ def sync_to_model(self):
159
+ for p, m in zip(self.params, self.master):
160
+ p.copy_(m)
161
+
162
+ @torch.no_grad()
163
+ def update_ema(self, step: int) -> float:
164
+ d = self.decay
165
+ if self.ema_warmup:
166
+ d = min(d, (1.0 + step) / (10.0 + step))
167
+ torch._foreach_lerp_(self.ema, self.master, 1.0 - d)
168
+ return d
169
+
170
+ @torch.no_grad()
171
+ def overlay(self, tensors) -> dict[str, torch.Tensor]:
172
+ """Trainable tensors in the model's own dtypes (bf16 expert, fp32 norms/head), on CPU."""
173
+ return {n: t.detach().to(p.dtype).cpu().contiguous() for n, t, p in zip(self.names, tensors, self.params)}
174
+
175
+ @torch.no_grad()
176
+ def state_dict(self):
177
+ return {
178
+ "names": list(self.names),
179
+ "master": [m.detach().cpu() for m in self.master],
180
+ "ema": [e.detach().cpu() for e in self.ema],
181
+ }
182
+
183
+ @torch.no_grad()
184
+ def load_state_dict(self, sd):
185
+ if list(sd["names"]) != self.names:
186
+ raise ValueError("train_state parameter set differs from the model's trainable set")
187
+ for m, v in zip(self.master, sd["master"]):
188
+ m.copy_(v)
189
+ for e, v in zip(self.ema, sd["ema"]):
190
+ e.copy_(v)
191
+
192
+
193
+ def latest_resumable_step(ckpt_dir: pathlib.Path):
194
+ if not ckpt_dir.exists():
195
+ return None
196
+ steps = [
197
+ int(d.name) for d in ckpt_dir.iterdir()
198
+ if d.is_dir() and d.name.isdigit() and (d / TRAIN_STATE).is_file()
199
+ ]
200
+ return max(steps) if steps else None
201
+
202
+
203
+ def save_checkpoint(config, step, ms: MasterState, opt, data_config, is_main):
204
+ if not is_main or step == 0 or step % config.save_interval != 0:
205
+ return
206
+ final = config.checkpoint_dir / str(step)
207
+ tmp = config.checkpoint_dir / f"tmp_{step}"
208
+ shutil.rmtree(tmp, ignore_errors=True)
209
+ tmp.mkdir(parents=True)
210
+ t0 = time.time()
211
+ # evaluation weights only from save_overlays_from_step on; the resume state is always written
212
+ overlays = step >= int(getattr(config, "save_overlays_from_step", 0) or 0)
213
+ if overlays:
214
+ safetensors.torch.save_file(ms.overlay(ms.ema), str(tmp / "ema.safetensors"))
215
+ if (step // config.save_interval) % RAW_EVERY == 0 or step == config.num_train_steps:
216
+ safetensors.torch.save_file(ms.overlay(ms.master), str(tmp / "raw.safetensors"))
217
+ norm_stats = data_config.norm_stats
218
+ if norm_stats is not None and data_config.asset_id is not None:
219
+ _normalize.save(tmp / "assets" / data_config.asset_id, norm_stats)
220
+ torch.save(
221
+ {
222
+ "global_step": step,
223
+ "config": dataclasses.asdict(config),
224
+ "timestamp": time.time(),
225
+ "ema_decay": ms.decay,
226
+ "format": "trainable-only overlays; materialise with scripts/race/materialize_ckpt.py",
227
+ },
228
+ tmp / "metadata.pt",
229
+ )
230
+ torch.save({"step": step, **ms.state_dict(), "optimizer": opt.state_dict()}, tmp / TRAIN_STATE)
231
+ if final.exists():
232
+ shutil.rmtree(final)
233
+ tmp.rename(final)
234
+ logging.info(f"Saved checkpoint {final} ({'overlays + ' if overlays else ''}resume state, {time.time() - t0:.0f}s)")
235
+ # keep the full resume state (fp32 master + EMA + optimizer, ~13 GB) for the newest step only;
236
+ # a stale step directory that holds nothing but its resume state is removed altogether
237
+ for d in config.checkpoint_dir.iterdir():
238
+ if d.is_dir() and d.name.isdigit() and int(d.name) < step and (d / TRAIN_STATE).is_file():
239
+ (d / TRAIN_STATE).unlink()
240
+ if not (d / "ema.safetensors").is_file() and not (d / "raw.safetensors").is_file():
241
+ shutil.rmtree(d)
242
+ logging.info(f"Pruned resume-only checkpoint dir: {d}")
243
+ else:
244
+ logging.info(f"Pruned stale train state: {d / TRAIN_STATE}")
245
+
246
+
247
+ def train_loop(config: _config.TrainConfig):
248
+ use_ddp, local_rank, device = base.setup_ddp()
249
+ is_main = (not use_ddp) or (dist.get_rank() == 0)
250
+ base.set_seed(config.seed, local_rank)
251
+ world_size = dist.get_world_size() if use_ddp else 1
252
+ logging.info(f"Batch size per GPU: {config.batch_size // world_size} (total: {config.batch_size})")
253
+
254
+ data_loader, sampler, data_config = make_loader(config, world_size)
255
+
256
+ model_cfg = config.model
257
+ object.__setattr__(model_cfg, "dtype", config.pytorch_training_precision or "float32")
258
+ model = model_cfg.build_model().to(device)
259
+ if type(model).__name__ not in ABLATION_MODELS:
260
+ raise ValueError(f"config built {type(model).__name__}, expected one of {ABLATION_MODELS}")
261
+ logging.info(f"RACE2 ablation model: {type(model).__name__} | conditioning "
262
+ f"{'ON' if hasattr(model, 'field_mod') else 'OFF'} | lambda_base_fm {model_cfg.lambda_base_fm} "
263
+ f"| lambda_timing {model_cfg.lambda_timing}")
264
+ logging.info(f"RACE v2 head: {type(model.race_head).__name__} "
265
+ f"({sum(p.numel() for p in model.race_head.parameters()):,} params), kv_layer {model.kv_layer}")
266
+
267
+ resume_step = latest_resumable_step(config.checkpoint_dir) if config.resume else None
268
+ if resume_step is not None:
269
+ validate_resume(config, config.checkpoint_dir / str(resume_step), resume_step)
270
+ load_teacher(model, config) # frozen VLM prefix always comes from the teacher
271
+ n_train, n_frozen = model.freeze_vlm()
272
+ logging.info(f"trainable {n_train/1e6:.1f}M / frozen {n_frozen/1e6:.0f}M (VLM prefix)")
273
+ # bias-free guarantee for the b=0 => zero-modulation claim (conditioned ablations only)
274
+ for lin in getattr(model, "field_mod", []):
275
+ assert lin.bias is None, "field_mod projections must be bias-free"
276
+ if not hasattr(model, "field_mod"):
277
+ assert not hasattr(model, "e_trans") and not hasattr(model, "tau_gate"), "timing-only model must carry no field tensors"
278
+ model.gradient_checkpointing_enable()
279
+
280
+ raw = model
281
+ if use_ddp:
282
+ model = torch.nn.parallel.DistributedDataParallel(
283
+ model, device_ids=[device.index] if device.type == "cuda" else None,
284
+ find_unused_parameters=True, gradient_as_bucket_view=True,
285
+ )
286
+
287
+ ms = MasterState([(n, p) for n, p in raw.named_parameters() if p.requires_grad], config.ema_decay)
288
+ gate_mult = float(getattr(model_cfg, "tau_gate_lr_mult", 1.0))
289
+ base_m = [m for n, m in zip(ms.names, ms.master) if "tau_gate" not in n]
290
+ gate_m = [m for n, m in zip(ms.names, ms.master) if "tau_gate" in n]
291
+ opt = torch.optim.AdamW(
292
+ [{"params": base_m, "lr_scale": 1.0},
293
+ {"params": gate_m, "lr_scale": gate_mult}],
294
+ lr=config.lr_schedule.peak_lr, betas=(config.optimizer.b1, config.optimizer.b2),
295
+ eps=config.optimizer.eps, weight_decay=config.optimizer.weight_decay,
296
+ )
297
+ if gate_m:
298
+ logging.info(f"tau_gate param group: {sum(p.numel() for p in gate_m)} scalars, lr x{gate_mult}")
299
+ logging.info(f"fp32 master weights + EMA(decay={ms.decay}, warmup) over {len(ms.master)} tensors")
300
+
301
+ warmup, peak, decay, end = (config.lr_schedule.warmup_steps, config.lr_schedule.peak_lr,
302
+ config.lr_schedule.decay_steps, config.lr_schedule.decay_lr)
303
+
304
+ def lr_at(step):
305
+ if step < warmup:
306
+ return peak * (step + 1) / max(1, warmup)
307
+ t = min(1.0, (step - warmup) / max(1, decay))
308
+ return end + 0.5 * (peak - end) * (1 + np.cos(np.pi * t))
309
+
310
+ logging.info(f"lr: warmup {warmup} -> peak {peak:.1e} -> cosine over {decay} -> {end:.1e}")
311
+
312
+ global_step = 0
313
+ if resume_step is not None:
314
+ path = config.checkpoint_dir / str(resume_step) / TRAIN_STATE
315
+ logging.info(f"Resuming from {path}")
316
+ sd = torch.load(path, map_location="cpu", weights_only=False)
317
+ ms.load_state_dict(sd)
318
+ opt.load_state_dict(sd["optimizer"])
319
+ ms.sync_to_model()
320
+ global_step = int(sd["step"])
321
+ if global_step != resume_step:
322
+ raise ValueError(f"Checkpoint directory step {resume_step} differs from saved step {global_step}")
323
+ del sd
324
+ logging.info(f"Resumed at step {global_step}")
325
+ elif config.resume:
326
+ logging.info("--resume given but no resumable checkpoint found; starting from the teacher")
327
+ raw._step = global_step
328
+
329
+ per_gpu = config.batch_size // world_size
330
+ micro = getattr(model_cfg, "micro_batch_size", 0) or per_gpu
331
+ if per_gpu % micro != 0:
332
+ raise ValueError(f"per-GPU batch {per_gpu} not divisible by micro_batch_size {micro}")
333
+ accum = per_gpu // micro
334
+ if accum > 1:
335
+ logging.info(f"grad accumulation: micro {micro} x {accum} = per-GPU {per_gpu}")
336
+
337
+ infos = []
338
+ pbar = tqdm.tqdm(total=config.num_train_steps, initial=global_step, desc="Training",
339
+ disable=not is_main, dynamic_ncols=True)
340
+ start = time.time()
341
+ epoch = global_step # distinct sampler seeds across resumes
342
+ while global_step < config.num_train_steps:
343
+ # iterate the underlying torch loader per epoch so DistributedSampler
344
+ # reshuffles (TorchDataLoader's infinite __iter__ never calls set_epoch)
345
+ if sampler is not None:
346
+ sampler.set_epoch(epoch)
347
+ epoch += 1
348
+ for batch in data_loader.torch_loader:
349
+ if global_step >= config.num_train_steps:
350
+ break
351
+ batch = jax.tree.map(torch.as_tensor, batch)
352
+ b_star = batch["b"]
353
+ observation = _model.Observation.from_dict(batch)
354
+ actions = batch["actions"]
355
+ observation = jax.tree.map(lambda x: x.to(device), observation)
356
+ actions = actions.to(torch.float32).to(device)
357
+ b_star = b_star.to(torch.float32).to(device)
358
+ lr = lr_at(global_step)
359
+ for pg in opt.param_groups:
360
+ pg["lr"] = lr * pg.get("lr_scale", 1.0)
361
+ model.zero_grad(set_to_none=True)
362
+ loss_val = 0.0
363
+ metrics_acc = {}
364
+ for a in range(accum):
365
+ sl = slice(a * micro, (a + 1) * micro)
366
+ obs_m = jax.tree.map(lambda x: x[sl], observation)
367
+ # skip the DDP all-reduce on all but the last micro-step
368
+ ctx = model.no_sync() if (use_ddp and a < accum - 1) else contextlib.nullcontext()
369
+ with ctx:
370
+ loss = model(obs_m, actions[sl], b_star=b_star[sl]) / accum
371
+ loss.backward()
372
+ loss_val += loss.item()
373
+ for k, v in raw.last_metrics.items():
374
+ metrics_acc[k] = metrics_acc.get(k, 0.0) + v / accum
375
+ raw.last_metrics = metrics_acc
376
+ ms.grads_to_master()
377
+ gn = torch.nn.utils.clip_grad_norm_(
378
+ ms.master, max_norm=config.optimizer.clip_gradient_norm, error_if_nonfinite=True
379
+ )
380
+ opt.step()
381
+ ms.sync_to_model()
382
+ ema_d = ms.update_ema(global_step)
383
+ if is_main:
384
+ m = {"loss": loss_val, "grad_norm": float(gn), **raw.last_metrics}
385
+ infos.append(m)
386
+ if global_step % config.log_interval == 0:
387
+ avg = {k: sum(i.get(k, 0) for i in infos) / len(infos) for k in infos[0]}
388
+ extra = " ".join(f"{k}={avg[k]:.4f}" for k in avg if k not in ("loss", "grad_norm"))
389
+ mem = torch.cuda.max_memory_allocated(device) / 2**30 if device.type == "cuda" else 0.0
390
+ logging.info(f"step={global_step} loss={avg['loss']:.4f} {extra} "
391
+ f"lr={lr:.2e} ema={ema_d:.4f} gn={avg['grad_norm']:.2f} "
392
+ f"mem={mem:.1f}G t={time.time()-start:.1f}s")
393
+ infos = []
394
+ start = time.time()
395
+ last = raw.last_metrics
396
+ pbar.update(1)
397
+ pbar.set_postfix({
398
+ "loss": f"{loss_val:.3f}",
399
+ "fm": f"{last.get('fm_loss', float('nan')):.3f}",
400
+ "bfm": f"{last.get('base_fm', float('nan')):.3f}",
401
+ "bce": f"{last.get('bce', float('nan')):.3f}",
402
+ "pm1": f"{last.get('peak_pm1', float('nan')):.2f}",
403
+ "pres": f"{last.get('pres_acc', float('nan')):.2f}",
404
+ "b+": f"{last.get('b_pos', float('nan')):.2f}",
405
+ "b-": f"{last.get('b_neg', float('nan')):.2f}",
406
+ "g1": f"{last.get('g_first', float('nan')):.2f}",
407
+ "g10": f"{last.get('g_last', float('nan')):.2f}",
408
+ "dmod": f"{last.get('dmod', float('nan')):.2f}",
409
+ "lr": f"{lr:.1e}",
410
+ })
411
+ global_step += 1
412
+ raw._step = global_step
413
+ save_checkpoint(config, global_step, ms, opt, data_config, is_main)
414
+ if use_ddp:
415
+ dist.barrier() # rank 0 may have spent a minute writing the checkpoint
416
+ if is_main:
417
+ pbar.close()
418
+
419
+
420
+ def main():
421
+ base.init_logging()
422
+ config = _config.cli()
423
+ if type(config.model) is not race2_ablation_config.Race2TimingOnlyConfig:
424
+ raise ValueError(f"this trainer runs race2abl_timing_only presets only (Race2TimingOnlyConfig); got {type(config.model).__name__}")
425
+ if "race2abl_timing_only_h" not in config.name:
426
+ raise ValueError(f"expected a pi05_vlabench_race2abl_timing_only_h<H> config, got {config.name!r}")
427
+ if config.resume and latest_resumable_step(config.checkpoint_dir) is None:
428
+ raise FileNotFoundError(f"No resumable checkpoint in {config.checkpoint_dir}")
429
+ if not config.resume and config.checkpoint_dir.exists():
430
+ saved_steps = [p for p in config.checkpoint_dir.iterdir() if p.is_dir() and p.name.isdigit()]
431
+ if saved_steps:
432
+ raise FileExistsError(
433
+ f"Checkpoints already exist in {config.checkpoint_dir}; use --resume or a new --exp_name"
434
+ )
435
+ cps = gauss_data.load_changepoints(config.data.cps_path)
436
+ n_cp = sum(len(v) for v in cps.values())
437
+ logging.info(f"changepoints: {config.data.cps_path} — {len(cps)} episodes, "
438
+ f"{n_cp} CPs ({n_cp / len(cps):.2f}/episode)")
439
+ try:
440
+ train_loop(config)
441
+ finally:
442
+ if dist.is_initialized():
443
+ dist.destroy_process_group()
444
+
445
+
446
+ if __name__ == "__main__":
447
+ main()
abl_timing_only_h20_40k/source/src/openpi/models/race2_ablation_config.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Configs for the RACE2 ablations (openpi.models_pytorch.race2_ablation).
2
+
3
+ Both keep every RacePi0Config knob of the full method; lambda_base_fm is pinned to 0.
4
+ Race2TimingOnlyConfig -> Race2TimingOnlyPI0 (A1: timing loss only, no conditioning)
5
+ Race2NoAuxConfig -> Race2NoAuxPI0 (A3: full method without the auxiliary loss)
6
+ Race2FmOnlyConfig -> Race2FmOnlyPI0 (A2: conditioning by predicted b_hat, FM loss only)
7
+ """
8
+
9
+ import dataclasses
10
+
11
+ from openpi.models import race2_config
12
+
13
+
14
+ @dataclasses.dataclass(frozen=True)
15
+ class Race2TimingOnlyConfig(race2_config.Race2Pi0Config):
16
+ lambda_base_fm: float = 0.0
17
+
18
+ def __post_init__(self):
19
+ super().__post_init__()
20
+ if float(self.lambda_base_fm) != 0.0:
21
+ raise ValueError("Race2TimingOnlyConfig: lambda_base_fm must be 0")
22
+
23
+ def build_model(self):
24
+ from openpi.models_pytorch.race2_ablation.model import Race2TimingOnlyPI0
25
+
26
+ return Race2TimingOnlyPI0(config=self)
27
+
28
+
29
+ @dataclasses.dataclass(frozen=True)
30
+ class Race2NoAuxConfig(race2_config.Race2Pi0Config):
31
+ lambda_base_fm: float = 0.0
32
+
33
+ def __post_init__(self):
34
+ super().__post_init__()
35
+ if float(self.lambda_base_fm) != 0.0:
36
+ raise ValueError("Race2NoAuxConfig: lambda_base_fm must be 0")
37
+
38
+ def build_model(self):
39
+ from openpi.models_pytorch.race2_ablation.model import Race2NoAuxPI0
40
+
41
+ return Race2NoAuxPI0(config=self)
42
+
43
+
44
+ @dataclasses.dataclass(frozen=True)
45
+ class Race2FmOnlyConfig(race2_config.Race2Pi0Config):
46
+ lambda_base_fm: float = 0.0
47
+ lambda_timing: float = 0.0
48
+ jitter_prob: float = 0.0 # unused: the field comes from b_hat, never from b*
49
+
50
+ def __post_init__(self):
51
+ super().__post_init__()
52
+ if float(self.lambda_base_fm) != 0.0 or float(self.lambda_timing) != 0.0:
53
+ raise ValueError("Race2FmOnlyConfig: lambda_base_fm and lambda_timing must be 0")
54
+
55
+ def build_model(self):
56
+ from openpi.models_pytorch.race2_ablation.model import Race2FmOnlyPI0
57
+
58
+ return Race2FmOnlyPI0(config=self)
abl_timing_only_h20_40k/source/src/openpi/models_pytorch/race2_ablation/__init__.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ from openpi.models_pytorch.race2_ablation.model import Race2FmOnlyPI0, Race2NoAuxPI0, Race2TimingOnlyPI0
2
+
3
+ __all__ = ["Race2FmOnlyPI0", "Race2NoAuxPI0", "Race2TimingOnlyPI0"]
abl_timing_only_h20_40k/source/src/openpi/models_pytorch/race2_ablation/model.py ADDED
@@ -0,0 +1,240 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """RACE2 ablations (VLABench). Separate subclasses so the full method's code is untouched.
2
+
3
+ Full RACE2 (openpi.models_pytorch.race.model.RacePI0.forward), per training step:
4
+ aux pass tau = read_tau, unmodulated -> timing head -> bce(b*) [timing loss]
5
+ -> action_out_proj -> base_fm [auxiliary loss]
6
+ FM pass tau ~ U, modulated by alpha(tau) * jitter(b*) * M(e_trans) [fm_loss]
7
+ total = fm_loss + lambda_base_fm * base_fm + lambda_timing * bce
8
+ Serving: aux pass -> b_hat -> hook modulation of the denoising passes.
9
+
10
+ A1 Race2TimingOnlyPI0 "timing loss only, no conditioning"
11
+ The head is trained with the timing BCE and its gradient reaches the action expert
12
+ through the auxiliary pass (hidden_read is NOT detached, as in the full method), but
13
+ there is no field: e_trans / field_mod / tau_gate are removed, the FM pass is the
14
+ plain pi0.5 flow-matching loss and serving is pi0.5's own sampler. This isolates the
15
+ effect of timing supervision as a multi-task signal.
16
+ total = fm_loss(unmodulated) + lambda_timing * bce
17
+
18
+ A3 Race2NoAuxPI0 "full method without the auxiliary (base FM) loss"
19
+ Identical model, conditioning and serving; only the base FM term is dropped
20
+ (lambda_base_fm must be 0, which RacePI0.forward already honours exactly).
21
+ total = fm_loss(modulated, teacher-forced b*) + lambda_timing * bce
22
+
23
+ A2 Race2FmOnlyPI0 "conditioning driven end-to-end by the FM loss"
24
+ Same parameters, conditioning sites and serving path as the full method, but the
25
+ field is built from the head's own prediction b_hat instead of the teacher-forced
26
+ b* (no jitter), and the only loss is the flow-matching loss. The timing head,
27
+ alpha(tau), e_trans and field_mod are therefore trained solely through the FM
28
+ gradient that flows back through the modulation; the timing BCE and the base FM
29
+ term are computed under no_grad for monitoring only.
30
+ total = fm_loss(modulated by alpha(tau) * b_hat * M(e_trans))
31
+ """
32
+
33
+ import torch
34
+ import torch.nn.functional as F # noqa: N812
35
+
36
+ from openpi.models_pytorch.pi0_pytorch import PI0Pytorch
37
+ from openpi.models_pytorch.race2.model import Race2PI0
38
+
39
+
40
+ class Race2TimingOnlyPI0(Race2PI0):
41
+ """A1: RACE2 timing head + BCE, no field modulation anywhere."""
42
+
43
+ def __init__(self, config):
44
+ super().__init__(config)
45
+ if float(config.lambda_base_fm) != 0.0:
46
+ raise ValueError("Race2TimingOnlyPI0 has no auxiliary loss; set lambda_base_fm=0")
47
+ # No conditioning: drop the field parameters so checkpoints carry no dead weights
48
+ # and nothing can modulate the expert. The norm hooks installed by RacePI0 stay
49
+ # inert because _mod_buf is never allocated.
50
+ del self.e_trans
51
+ del self.field_mod
52
+ del self.tau_gate
53
+ self._mod_consts = None
54
+ self._mod_buf = None
55
+
56
+ # ---- conditioning is structurally absent -----------------------------------
57
+ @torch.compiler.disable
58
+ def _refresh_mod_consts(self):
59
+ self._mod_consts = None
60
+ return None
61
+
62
+ def _prepare_mod_buf(self, bsize, horizon, device): # never used; keep hooks inert
63
+ self._mod_buf = None
64
+
65
+ def _field(self, b, tau):
66
+ raise RuntimeError("Race2TimingOnlyPI0 has no field modulation")
67
+
68
+ # ---- training --------------------------------------------------------------
69
+ def forward(self, observation, actions, b_star=None, noise=None, time=None):
70
+ cfg = self.config
71
+ if b_star is None:
72
+ raise ValueError("Race2TimingOnlyPI0.forward requires b_star (B,H)")
73
+ images, img_masks, lang_tokens, lang_masks, state = self._preprocess_observation(observation, train=True)
74
+ device = actions.device
75
+ bsize = actions.shape[0]
76
+ b_star = b_star.to(device=device, dtype=torch.float32)
77
+
78
+ if noise is None:
79
+ noise = self.sample_noise(actions.shape, device)
80
+ u_t = noise - actions
81
+ use_bf16 = (
82
+ self.paligemma_with_expert.paligemma.language_model.layers[0].self_attn.q_proj.weight.dtype
83
+ == torch.bfloat16
84
+ )
85
+ prefix_pad_masks, prefix_keys, prefix_values, _prefix_hidden = self._prefix_h(
86
+ images, img_masks, lang_tokens, lang_masks, use_bf16
87
+ )
88
+
89
+ # ---- auxiliary pass (tau = read_tau, unmodulated) -> timing head only.
90
+ # hidden_read is not detached: the BCE gradient reaches the action expert.
91
+ read_time = torch.full((bsize,), cfg.read_tau, device=device)
92
+ x_read = cfg.read_tau * noise + (1 - cfg.read_tau) * actions
93
+ hidden_read = self._run_expert(
94
+ state, x_read, read_time, prefix_pad_masks, prefix_keys, prefix_values, field=None
95
+ )
96
+ logits = self._timing_logits(hidden_read, prefix_values[self.kv_layer], prefix_pad_masks)
97
+ timing_bce = F.binary_cross_entropy_with_logits(logits, b_star)
98
+
99
+ # ---- plain flow-matching pass: no field, no teacher forcing
100
+ if time is None:
101
+ time = self.sample_time(bsize, device)
102
+ x_t = time[:, None, None] * noise + (1 - time[:, None, None]) * actions
103
+ hidden = self._run_expert(state, x_t, time, prefix_pad_masks, prefix_keys, prefix_values, field=None)
104
+ fm_loss = F.mse_loss(u_t, self.action_out_proj(hidden))
105
+
106
+ total = fm_loss + cfg.lambda_timing * timing_bce
107
+
108
+ metrics = {"fm_loss": fm_loss.detach(), "bce": timing_bce.detach(),
109
+ "base_fm": torch.zeros((), device=device)}
110
+ with torch.no_grad():
111
+ b_hat = torch.sigmoid(logits)
112
+ pos = b_star.max(dim=1).values >= 0.5
113
+ z = torch.tensor(0.0, device=device)
114
+ if pos.any():
115
+ peak_err = (b_hat[pos].argmax(dim=1) - b_star[pos].argmax(dim=1)).abs()
116
+ metrics["peak_pm1"] = (peak_err <= 1).float().mean()
117
+ metrics["b_pos"] = b_hat[pos].max(dim=1).values.mean()
118
+ else:
119
+ metrics["peak_pm1"] = z
120
+ metrics["b_pos"] = z
121
+ metrics["b_neg"] = b_hat[~pos].max(dim=1).values.mean() if (~pos).any() else z
122
+ metrics["pres_acc"] = ((b_hat.max(dim=1).values >= 0.5) == pos).float().mean()
123
+
124
+ self._step += 1
125
+ self.last_metrics = {k: float(v) for k, v in metrics.items()}
126
+ return total
127
+
128
+ # ---- serving: pi0.5's own sampler (hooks inert, no auxiliary pass) --------------
129
+ @torch.no_grad()
130
+ def sample_actions(self, device, observation, noise=None, num_steps=10):
131
+ return PI0Pytorch.sample_actions(self, device, observation, noise=noise, num_steps=num_steps)
132
+
133
+ @torch.no_grad()
134
+ def _sample_actions_reference(self, device, observation, noise=None, num_steps=10):
135
+ """Hand-rolled unmodulated rollout, parity target for tests only."""
136
+ cfg = self.config
137
+ bsize = observation.state.shape[0]
138
+ if noise is None:
139
+ noise = self.sample_noise((bsize, cfg.action_horizon, cfg.action_dim), device)
140
+ images, img_masks, lang_tokens, lang_masks, state = self._preprocess_observation(observation, train=False)
141
+ ppm, keys, values, _ = self._prefix_h(images, img_masks, lang_tokens, lang_masks, use_bf16=False)
142
+ dt = -1.0 / num_steps
143
+ x_t = noise.clone()
144
+ t = 1.0
145
+ for _ in range(num_steps):
146
+ tt = torch.full((bsize,), t, dtype=torch.float32, device=device)
147
+ hidden = self._run_expert(state, x_t, tt, ppm, keys, values, field=None)
148
+ x_t = x_t + dt * self.action_out_proj(hidden)
149
+ t += dt
150
+ return x_t
151
+
152
+
153
+ class Race2FmOnlyPI0(Race2PI0):
154
+ """A2: RACE2 conditioning with b_hat in the loop, FM loss only (no timing / aux loss)."""
155
+
156
+ def __init__(self, config):
157
+ super().__init__(config)
158
+ if float(config.lambda_base_fm) != 0.0 or float(config.lambda_timing) != 0.0:
159
+ raise ValueError("Race2FmOnlyPI0 trains with the FM loss only; set lambda_base_fm=lambda_timing=0")
160
+
161
+ def forward(self, observation, actions, b_star=None, noise=None, time=None):
162
+ cfg = self.config
163
+ if b_star is None:
164
+ raise ValueError("Race2FmOnlyPI0.forward requires b_star (B,H) for monitoring metrics")
165
+ images, img_masks, lang_tokens, lang_masks, state = self._preprocess_observation(observation, train=True)
166
+ device = actions.device
167
+ bsize = actions.shape[0]
168
+ b_star = b_star.to(device=device, dtype=torch.float32)
169
+
170
+ if noise is None:
171
+ noise = self.sample_noise(actions.shape, device)
172
+ u_t = noise - actions
173
+ use_bf16 = (
174
+ self.paligemma_with_expert.paligemma.language_model.layers[0].self_attn.q_proj.weight.dtype
175
+ == torch.bfloat16
176
+ )
177
+ prefix_pad_masks, prefix_keys, prefix_values, _prefix_hidden = self._prefix_h(
178
+ images, img_masks, lang_tokens, lang_masks, use_bf16
179
+ )
180
+
181
+ # ---- auxiliary pass (tau = read_tau, unmodulated) -> head -> b_hat (kept in the graph)
182
+ read_time = torch.full((bsize,), cfg.read_tau, device=device)
183
+ x_read = cfg.read_tau * noise + (1 - cfg.read_tau) * actions
184
+ hidden_read = self._run_expert(
185
+ state, x_read, read_time, prefix_pad_masks, prefix_keys, prefix_values, field=None
186
+ )
187
+ logits = self._timing_logits(hidden_read, prefix_values[self.kv_layer], prefix_pad_masks)
188
+ b_hat = torch.sigmoid(logits)
189
+
190
+ # ---- modulated FM pass: field from the PREDICTED b_hat (no teacher forcing, no jitter)
191
+ if time is None:
192
+ time = self.sample_time(bsize, device)
193
+ x_t = time[:, None, None] * noise + (1 - time[:, None, None]) * actions
194
+ field = self._field(b_hat, time)
195
+ hidden = self._run_expert(state, x_t, time, prefix_pad_masks, prefix_keys, prefix_values, field=field)
196
+ fm_loss = F.mse_loss(u_t, self.action_out_proj(hidden))
197
+
198
+ total = fm_loss
199
+
200
+ metrics = {"fm_loss": fm_loss.detach()}
201
+ with torch.no_grad():
202
+ # monitoring only: how the FM-trained head relates to the changepoint target
203
+ metrics["bce"] = F.binary_cross_entropy_with_logits(logits.detach(), b_star)
204
+ metrics["base_fm"] = F.mse_loss(u_t, self.action_out_proj(hidden_read.detach()))
205
+ pos = b_star.max(dim=1).values >= 0.5
206
+ z = torch.tensor(0.0, device=device)
207
+ if pos.any():
208
+ peak_err = (b_hat[pos].argmax(dim=1) - b_star[pos].argmax(dim=1)).abs()
209
+ metrics["peak_pm1"] = (peak_err <= 1).float().mean()
210
+ metrics["b_pos"] = b_hat[pos].max(dim=1).values.mean()
211
+ else:
212
+ metrics["peak_pm1"] = z
213
+ metrics["b_pos"] = z
214
+ metrics["b_neg"] = b_hat[~pos].max(dim=1).values.mean() if (~pos).any() else z
215
+ metrics["pres_acc"] = ((b_hat.max(dim=1).values >= 0.5) == pos).float().mean()
216
+ metrics["b_hat_mean"] = b_hat.mean()
217
+ g = torch.sigmoid(self.tau_gate)
218
+ for i in range(cfg.n_tau):
219
+ metrics[f"alpha_{i}"] = g[i].detach()
220
+ metrics["g_first"] = g[0].detach()
221
+ metrics["g_last"] = g[-1].detach()
222
+ v = self.e_trans.float()
223
+ mods = torch.stack([lin(v) for lin in self.field_mod])
224
+ s_p, b_p, _ = mods.chunk(3, dim=-1)
225
+ metrics["dmod"] = (s_p.norm(dim=-1) + b_p.norm(dim=-1)).mean()
226
+
227
+ self._step += 1
228
+ self.last_metrics = {k: float(v) for k, v in metrics.items()}
229
+ return total
230
+
231
+
232
+ class Race2NoAuxPI0(Race2PI0):
233
+ """A3: full RACE2 minus the auxiliary base-FM loss. RacePI0.forward skips the base FM
234
+ term entirely when lambda_base_fm == 0, so training, conditioning, serving and the
235
+ checkpoint layout are inherited unchanged; this class only pins that setting."""
236
+
237
+ def __init__(self, config):
238
+ super().__init__(config)
239
+ if float(config.lambda_base_fm) != 0.0:
240
+ raise ValueError("Race2NoAuxPI0 drops the auxiliary loss; set lambda_base_fm=0")
abl_timing_only_h20_40k/training_config.json ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "global_step": 40000,
3
+ "config": {
4
+ "name": "pi05_vlabench_race2abl_timing_only_h20",
5
+ "project_name": "openpi",
6
+ "exp_name": "abl_timing_only_h20_s42",
7
+ "model": {
8
+ "action_dim": 32,
9
+ "action_horizon": 20,
10
+ "max_token_len": 200,
11
+ "dtype": "bfloat16",
12
+ "paligemma_variant": "gemma_2b",
13
+ "action_expert_variant": "gemma_300m",
14
+ "pi05": true,
15
+ "discrete_state_input": false,
16
+ "gemma_depth": 18,
17
+ "sigma": 1.0,
18
+ "support": 3.0,
19
+ "jitter_prob": 0.5,
20
+ "lambda_timing": 0.05,
21
+ "lambda_base_fm": 0.0,
22
+ "read_tau": 1.0,
23
+ "n_tau": 10,
24
+ "tau_gate_init": 0.0,
25
+ "tau_gate_lr_mult": 20.0,
26
+ "timing_proj_dim": 256,
27
+ "timing_num_heads": 4,
28
+ "micro_batch_size": 16,
29
+ "fast_serving": 0,
30
+ "kv_layer": -1
31
+ },
32
+ "weight_loader": {},
33
+ "pytorch_weight_path": "checkpoints/pi05_vlabench_official/pytorch",
34
+ "pytorch_weight_path_teacher": null,
35
+ "pytorch_training_precision": "bfloat16",
36
+ "lr_schedule": {
37
+ "warmup_steps": 500,
38
+ "peak_lr": 5e-05,
39
+ "decay_steps": 39500,
40
+ "decay_lr": 5e-06
41
+ },
42
+ "optimizer": {
43
+ "b1": 0.9,
44
+ "b2": 0.95,
45
+ "eps": 1e-08,
46
+ "weight_decay": 1e-10,
47
+ "clip_gradient_norm": 1.0
48
+ },
49
+ "ema_decay": 0.999,
50
+ "freeze_filter": "Nothing()",
51
+ "data": {
52
+ "repo_id": "SeonghoonYu/vlabench_primitive_ft_lerobot_224",
53
+ "assets": {
54
+ "assets_dir": "./assets/pi05_vlabench",
55
+ "asset_id": "vlabench/vlabench_ft_primitive"
56
+ },
57
+ "base_config": {
58
+ "repo_id": null,
59
+ "asset_id": null,
60
+ "norm_stats": null,
61
+ "repack_transforms": {
62
+ "inputs": [],
63
+ "outputs": []
64
+ },
65
+ "data_transforms": {
66
+ "inputs": [],
67
+ "outputs": []
68
+ },
69
+ "model_transforms": {
70
+ "inputs": [],
71
+ "outputs": []
72
+ },
73
+ "use_quantile_norm": false,
74
+ "action_sequence_keys": [
75
+ "actions"
76
+ ],
77
+ "prompt_from_task": true,
78
+ "rlds_data_dir": null,
79
+ "action_space": null,
80
+ "datasets": []
81
+ },
82
+ "phase_labels_path": null,
83
+ "phase_label_horizon": null,
84
+ "cps_path": "assets/gauss_timing/vlabench_cps.npz",
85
+ "gauss_sigma": 1.0,
86
+ "gauss_support": 3.0
87
+ },
88
+ "assets_base_dir": "./assets",
89
+ "checkpoint_base_dir": "./checkpoints",
90
+ "seed": 42,
91
+ "batch_size": 64,
92
+ "num_workers": 8,
93
+ "num_train_steps": 40000,
94
+ "log_interval": 100,
95
+ "save_interval": 1000,
96
+ "save_overlays_from_step": 20000,
97
+ "keep_period": 5000,
98
+ "overwrite": false,
99
+ "resume": false,
100
+ "wandb_enabled": false,
101
+ "policy_metadata": null,
102
+ "fsdp_devices": 1
103
+ },
104
+ "ema_decay": 0.999,
105
+ "timestamp": 1789477910.1500757,
106
+ "format": "trainable-only overlay; materialised with scripts/race/materialize_ckpt.py"
107
+ }