| # @package _global_ | |
| # FlashWAM (M1_FusedKV_RopeFixed) FROM SCRATCH on fruit_pick (100 demos, the | |
| # entire dataset -- no val split, see fruit_pick_2cam.yaml). resume: null | |
| # (Wan2.2 base video expert + random 1-layer action expert). User decision | |
| # 2026-08-09: 2 GPUs (not George's pcbnew100 4-GPU scratch pattern) x | |
| # batch_size 8 x grad_accum 2 = global batch 32 -- matches the ORIGINAL | |
| # place_cube_flashwam_scratch.yaml recipe shape, not pcbnew100's 4x8x1. | |
| # 30 epochs, no validation. | |
| # | |
| # save_every below is a PLACEHOLDER (2445, pcbnew100's value) -- the | |
| # launching sbatch (slurm/train_fruit_pick_flashwam_scratch.sbatch) computes | |
| # the real value from data/fruit_pick/meta/info.json's total_frames at | |
| # submit time and passes it as a CLI override, since fruit_pick's actual | |
| # frame count isn't known until the data lands. Don't trust this value if | |
| # running run_one.sh directly without that override. | |
| defaults: | |
| - override /data: fruit_pick_2cam | |
| - override /model: lift_flashwam_m1_fusedkv_ropefixed | |
| - _self_ | |
| # dataloading | |
| batch_size: 8 # 2 GPUs x 8 x accum 2 = global 32 | |
| num_workers: 12 | |
| # scheduler | |
| lr_scheduler_type: "cosine" | |
| learning_rate: 1e-4 | |
| num_epochs: 30 | |
| max_steps: null | |
| log_every: 10 | |
| save_every: 2445 # PLACEHOLDER -- overridden at launch, see header | |
| eval_every: 0 | |
| # training | |
| gradient_accumulation_steps: 2 | |
| weight_decay: 1e-2 | |
| resume: null | |
| # No model.proprio_dim override needed: fruit_pick's state was rewritten to | |
| # the standard 8-dim eef_pos+axisangle+gripper convention (see | |
| # fruit_pick_2cam.yaml header + fix_fruit_pick_state_schema.py), matching | |
| # lift_flashwam_m1_fusedkv_ropefixed.yaml's hardcoded proprio_dim: 8 as-is. | |