File size: 7,865 Bytes
0d80452 | 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | # Training Bash Scripts
This directory contains local training launchers for the LeRobot runs used in this workspace. They are intended to be run from the repository root:
```bash
cd /workspace/lerobot
bash scripts/training/<script-name>.sh
```
Most scripts are **chunked**. A chunked script trains to the next checkpoint, uploads that checkpoint to Hugging Face as a revision, deletes the previous local checkpoint, and continues. This keeps disk usage bounded while still preserving intermediate checkpoints online.
## Common Requirements
Before running these scripts:
```bash
uv run hf auth whoami
uv run wandb status
```
The scripts assume:
- Hugging Face auth is already configured.
- W&B auth is already configured if `--wandb.mode=online`.
- The command is run from `/workspace/lerobot`.
- Enough disk is available for the current checkpoint, W&B logs, and upload staging.
Check storage:
```bash
df -h /workspace/lerobot
```
Check active training jobs:
```bash
ps -eo pid,ppid,sid,etime,cmd | rg 'lerobot-train|run_.*\\.sh'
```
## Running Detached
To keep a run alive without attaching it to a tmux window, use `setsid`:
```bash
setsid -f bash -lc 'cd /workspace/lerobot; bash scripts/training/run_act_fake_bi_pick_place_left_chunked.sh > /tmp/act_left.log 2>&1'
tail -n 120 /tmp/act_left.log
```
Avoid launching these from a tmux helper that creates or closes windows unless that is intentional.
## Checkpoint Upload Behavior
Each chunked script:
1. Trains until the next target step.
2. Expects a full local checkpoint at `OUTPUT_DIR/checkpoints/<step>/`.
3. Creates or reuses a Hugging Face model repo.
4. Creates a revision named `ckpt-XXXXXX`.
5. Uploads `pretrained_model/` to the revision root.
6. Uploads `training_state/` under `training_state/`.
7. Deletes the previous local checkpoint after the new one is uploaded.
Example revision names:
```text
ckpt-005000
ckpt-010000
ckpt-020000
ckpt-100000
```
The final local checkpoint is kept. Older local checkpoints are removed by the script, but their Hugging Face revisions remain.
For inference, the important files are in the revision root, especially:
```text
config.json
model.safetensors
train_config.json
policy_preprocessor.json
policy_postprocessor.json
```
The uploaded `training_state/` is for resuming training, not normal inference.
## Resume Behavior
On startup, each script checks `OUTPUT_DIR/checkpoints/` for the latest complete local checkpoint. If it finds one, it resumes from that checkpoint and continues to `FINAL_STEPS`.
If a Hugging Face revision already contains `config.json` and `model.safetensors`, upload for that revision is skipped.
Important: LeRobot resume restores optimizer state from `training_state/`. If you try to change learning rate only by passing a new CLI flag during resume, the optimizer state can overwrite it. For real per-chunk LR schedules, edit the saved optimizer param groups or run a fresh output directory.
## ACT Fake Bimanual Pick Place Scripts
These scripts train ACT on `vraiRobotLab/fake_bi_pick_place` and `vraiRobotLab/fake_bi_pick_place_left`.
All current ACT scripts use:
```bash
--policy.normalization_mapping='{"ACTION": "MIN_MAX", "STATE": "MIN_MAX", "VISUAL": "MEAN_STD"}'
```
This matters. The default ACT action/state normalization is not ideal for these datasets because near-constant state/action dimensions can blow up under mean/std normalization.
| Script | Dataset | HF repo | LR | Chunk / eval | Final steps | ACT chunk |
| --- | --- | --- | --- | --- | --- | --- |
| `run_act_fake_bi_pick_place_chunked.sh` | `vraiRobotLab/fake_bi_pick_place` | `NLTuan/act_fake_bi_pick_place` | `1e-5` | train 10k, eval 5k | 50k | 50 |
| `run_act_fake_bi_pick_place_lr3e5_chunked.sh` | `vraiRobotLab/fake_bi_pick_place` | `NLTuan/act_fake_bi_pick_place_lr3e5` | `3e-5` | train 10k, eval 5k | 50k | 50 |
| `run_act_fake_bi_pick_place_lr1e4_chunked.sh` | `vraiRobotLab/fake_bi_pick_place` | `NLTuan/act_fake_bi_pick_place_lr1e4` | `1e-4` | train 10k, eval 5k | 50k | 50 |
| `run_act_fake_bi_pick_place_left_chunked.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left` | `3e-5` | train/eval 5k | 50k | 50 |
| `run_act_fake_bi_pick_place_left_lr1e4_short.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left_lr1e4` | `1e-4` | train/eval 5k | 10k | 50 |
| `run_act_fake_bi_pick_place_left_lr1e5_short.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left_lr1e5` | `1e-5` | train/eval 5k | 20k | 50 |
| `run_act_fake_bi_pick_place_left_lr1e5_30k.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left_lr1e5_30k` | `1e-5` | train/eval 5k | 30k | 50 |
| `run_act_fake_bi_pick_place_left_lr3e5_30k.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left_lr3e5_30k` | `3e-5` | train/eval 5k | 30k | 50 |
| `run_act_fake_bi_pick_place_left_lr6e5_30k.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left_lr6e5_30k` | `6e-5` | train/eval 5k | 30k | 50 |
| `run_act_fake_bi_pick_place_left_chunk25_lr3e5.sh` | `vraiRobotLab/fake_bi_pick_place_left` | `NLTuan/act_fake_bi_pick_place_left_chunk25_lr3e5` | `3e-5` | train/eval 5k | 30k | 25 |
Known useful checkpoints from prior runs:
- Right arm `3e-5`: best validation loss around `ckpt-015000`.
- Left arm `3e-5`: best validation loss around `ckpt-010000`.
- Left arm `1e-5` and `6e-5` sweeps did not beat the left `3e-5` validation floor.
## Diffusion Scripts
These scripts train diffusion policies and use the same checkpoint revision pattern.
| Script | Task / dataset | HF repo | LR | Batch | Chunk | Final steps | Horizon / action steps |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `run_diffusion_pusht_chunked.sh` | `lerobot/pusht`, `env.type=pusht` | `NLTuan/diffusion_pusht` | `1e-4` | 32 | 20k | 100k | 16 / 8 |
| `run_diffusion_aloha_transfer_cube_chunked.sh` | ALOHA transfer cube sim, `env.type=aloha` | `NLTuan/diffusion_aloha_transfer_cube` | `1e-4` | 24 | 20k | 100k | 64 / 32 |
| `run_diffusion_bi_transfer_cleaned_chunked.sh` | cleaned bimanual transfer dataset | `NLTuan/diffusion_bi_transfer_cleaned` | `1e-4` | 64 | 20k | 133400 | 32 / 16 |
The ALOHA script exports:
```bash
MUJOCO_GL=egl
PYOPENGL_PLATFORM=egl
```
This avoids GLFW display initialization failures during headless simulation eval.
## W&B Notes
Most scripts set:
```bash
--wandb.enable=true
--wandb.mode=online
--wandb.disable_artifact=true
```
`--wandb.disable_artifact=true` is intentional. Checkpoint storage is handled by Hugging Face revisions instead of W&B artifacts, which avoids W&B staging large model files under `~/.local/share/wandb/artifacts/staging`.
## Local Cleanup
The scripts automatically delete the previous checkpoint after the next checkpoint uploads successfully. To inspect disk usage:
```bash
du -h -d 3 outputs/train | sort -h | tail -n 30
```
Do not manually delete the current latest checkpoint for an active run unless you are intentionally abandoning resume capability.
## Adding A New Experiment
The safest way to add a new training experiment is:
1. Copy the closest existing script.
2. Change `REPO_ID`, `OUTPUT_DIR`, and `JOB_NAME` together.
3. Change only the experiment parameters: LR, batch size, chunk length, horizon, etc.
4. Keep checkpoint upload/delete logic unchanged.
5. Run `bash -n scripts/training/<new-script>.sh`.
6. Start detached with `setsid` and a unique `/tmp/*.log`.
Example:
```bash
cp scripts/training/run_act_fake_bi_pick_place_left_chunked.sh scripts/training/run_act_fake_bi_pick_place_left_new_exp.sh
bash -n scripts/training/run_act_fake_bi_pick_place_left_new_exp.sh
setsid -f bash -lc 'cd /workspace/lerobot; bash scripts/training/run_act_fake_bi_pick_place_left_new_exp.sh > /tmp/act_left_new_exp.log 2>&1'
```
|