Add RACE2 ablation A1 timing-only H20 40k EMA (weights, overlay, logs, config, source)
Browse files- .gitattributes +1 -0
- abl_timing_only_h20_40k/README.md +34 -0
- abl_timing_only_h20_40k/SHA256SUMS +2 -0
- abl_timing_only_h20_40k/assets/vlabench/vlabench_ft_primitive/norm_stats.json +280 -0
- abl_timing_only_h20_40k/logs/commands.json +59 -0
- abl_timing_only_h20_40k/logs/eval.log +1 -0
- abl_timing_only_h20_40k/logs/eval_summary.json +1246 -0
- abl_timing_only_h20_40k/logs/history.jsonl +5 -0
- abl_timing_only_h20_40k/logs/launch_validation.json +153 -0
- abl_timing_only_h20_40k/logs/smoke_timing_only_h20.log +26 -0
- abl_timing_only_h20_40k/logs/status.json +62 -0
- abl_timing_only_h20_40k/logs/train.log +3 -0
- abl_timing_only_h20_40k/model.safetensors +3 -0
- abl_timing_only_h20_40k/overlay/ema.safetensors +3 -0
- abl_timing_only_h20_40k/overlay/metadata.pt +3 -0
- abl_timing_only_h20_40k/provenance.json +18 -0
- abl_timing_only_h20_40k/source/scripts/race2_ablation/train_race2abl_timing_only_vlabench.py +447 -0
- abl_timing_only_h20_40k/source/src/openpi/models/race2_ablation_config.py +58 -0
- abl_timing_only_h20_40k/source/src/openpi/models_pytorch/race2_ablation/__init__.py +3 -0
- abl_timing_only_h20_40k/source/src/openpi/models_pytorch/race2_ablation/model.py +240 -0
- abl_timing_only_h20_40k/training_config.json +107 -0
.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 |
+
}
|