File size: 2,570 Bytes
4dd3e1d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
---
license: apache-2.0
tags:
- robotics
- lingbot-va
- unitree-g1
- world-model
---

# UnitreeG1_ethernetCable_2000step — LingBot-VA G1 post-trained transformer

Fine-tuned `transformer` for LingBot-VA on Unitree G1 (Dex1), task
`XiaoweiLinXL/unitree_insert_the_ethernet_cable_to_the_tv_box`:
*"Insert the ethernet cable into the tv box."*

- Base: `robbyant/lingbot-va-base`
- Post-training: 69 demos, single-task (cable insertion), lr 1e-5,
  **FDM v2 recipe** — mutually-exclusive per-microstep regime (rank-synced
  coin `fdm_prob=0.5`: FDM video-only L_fdm Eq.13 `lambda_fdm=1.0` OR
  standard IDM L_dyn+L_inv; one forward, one backward). Per-step
  **randomized chunk_size ∈ {1,2,3,4}** and **window_size ∈ {4..64}**.
- 4 GPUs × `grad_accum=4` = effective batch 16, optimizer **step 2000**
  (final of a 2000-step schedule).
- Final losses: video=0.088, action=0.0016, fdm=0.085, grad_norm=0.036
  — healthier loss level than the put_away_tools v21 5k run (which had
  suspiciously low video=0.0075, indicating overfit on a compressed
  distribution).
- This repo contains **only `transformer/`** — `vae/`, `text_encoder/`,
  `tokenizer/` are unchanged from `robbyant/lingbot-va-base`.

## ⚠️ Quantile normalization warning

This checkpoint was trained under **quantile (q01/q99) normalization**.
Smoke testing at encode time showed `normalized action absmax = 2.77` for
ep0, well above the model's bounded prediction range. The same failure
mode hurt `put_away_tools v21` deployment — predictions under-shoot the
precise final-approach moments. For an insertion task this is especially
risky.

If deployment performance is weak: re-encode the norm_stat with **min/max
+ zero-inclusion** (see `scripts/compute_g1_norm_stats.py` extended with
the zero-inclusion logic from `compute_ur3_bimanual_norm_stats.py`) and
retrain. The fix took ~36 h on 8 GPUs for put_away_tools v21.

## Assemble an eval-ready checkpoint

```bash
hf download robbyant/lingbot-va-base                          --local-dir lingbot-va-base
hf download EmbodyX/UnitreeG1_ethernetCable_2000step           --local-dir g1_eth_2000_dl

mkdir -p g1_eth_2000
ln -sf $(realpath g1_eth_2000_dl/transformer)   g1_eth_2000/transformer
ln -sf $(realpath lingbot-va-base/vae)          g1_eth_2000/vae
ln -sf $(realpath lingbot-va-base/text_encoder) g1_eth_2000/text_encoder
ln -sf $(realpath lingbot-va-base/tokenizer)    g1_eth_2000/tokenizer
```

Serve with `CONFIG_NAME=g1_ethernet_cable MODEL_PATH=g1_eth_2000`.
`transformer/config.json` has `attn_mode: torch` (inference-ready).