furniture(단일 가구 one_leg) → furniture_all(4종 가구 합본 all_low) → furniture_all_e128(effective batch 128 레시피)로 3단계 확장wan_va/configs/__init__.py의 VA_CONFIGS에 등록 후, 2-GPU(one_leg) → 4-GPU(all_low) → 8-GPU(all_low eff-batch-128)까지 실제 SLURM 학습 잡으로 구동 중260812 조사(claude/context.md)에서는 RoboCasa 데이터로 LingBot-VA를 post-training하는 것이 목표였고, VAE latent 추출 스크립트 부재·lingbot-va-base 미다운로드 등 blocker 2개가 남아 있었다. 이번 3일 사이 실제 코드 변경은 RoboCasa가 아니라 FurnitureBench 시뮬레이터 데이터(~/repos/Robotics/FurnitureBench)를 대상으로 진행됐다 — RoboCasa 경로의 blocker를 풀지 않고, 이미 LeRobot latent 추출 파이프라인이 갖춰진 FurnitureBench 쪽으로 실질적인 첫 학습 대상을 옮긴 것으로 보인다.
va_libero_cfg는 LIBERO 전용 카메라 키·action 채널 가정이 박혀 있어, 다른 데이터셋(FurnitureBench)에 그대로 재사용할 수 없었다.va_libero_cfg를 베이스로 FurnitureSim(Franka 단일 팔, front+wrist 2캠, 10Hz) 규격에 맞춘 config 체인을 만들고, 규모를 단일 가구 → 4종 가구 합본 → 대형 배치 순으로 단계적으로 확장했다.
va_furniture_cfg.py (128×128, one_leg)va_furniture_train_cfg.py / va_furniture_smoke_cfg.pybatch_size=1 고정 (데이터로더가 에피소드 전체를 가변 길이 latent로 반환하므로 default_collate로 stack 불가 — LIBERO 레시피와 동일한 제약을 그대로 승계). 학습은 batch 1 × grad-accum 10 × 2GPU, smoke는 wandb 끄고 6 step만 실행하는 로그인 노드 디버깅용.
va_furniture_all_cfg.py / _train_cfg / _smoke_cfgone_leg/lamp/round_table/cabinet 4종을 합친 all_low 데이터셋(1,304 episodes, one_leg의 3.8배)용 norm_stat을 prepare_lingbot_dataset.py가 만든 norm_stat.json에서 동적으로 읽어오도록 변경 (파일 없으면 one_leg 값으로 fallback + 경고 출력). 4-GPU × batch1 × accum10 = effective batch 40, 10K step로 one_leg 학습(5K×20=100K clips)과 동일한 총 노출량(10K×40=400K)을 맞춤.
va_furniture_all_e128_train_cfg.py같은 프로젝트의 X-WAM/pi0.5 실험에서 effective batch ~128 + lr 3e-5가 성능에 결정적이었다는 관찰(코드 주석에 명시)을 반영해 8-GPU × batch1 × accum16 = 128로 확장, lr 1e-5→3e-5, warmup 10→200 step. 3K step × 128 = 384K episode-samples로 all_low 학습(10K×40=400K)과 총 노출량을 맞춤.
| Config | 데이터셋 | GPU | Effective batch | Steps | lr |
|---|---|---|---|---|---|
furniture_train | one_leg_low (344 eps) | 2 | 20 | 5,000 | 1e-5 |
furniture_all_train | all_low (1,304 eps) | 4 | 40 | 10,000 | 1e-5 |
furniture_all_e128 | all_low (1,304 eps) | 8 | 128 | 3,000 | 3e-5 |
train_lingbot.sh 2/4/8 <config>)으로 구동됐고, furniture_all_e128 기준 현재 step ~1,232/3,000, latent_loss 0.077, action_loss 0.016까지 진행(로컬 wandb/ 로그 run-20260906_224058-qazsnw7i 기준).furniture_all_e128은 preemption이 잦아(아래 관련 카드 참고) 3,000 step 완주 전이라, e128 레시피 자체가 batch40 레시피보다 나은지는 아직 판단 불가.프로젝트의 실질적 학습 대상이 claude/context.md에 기록된 RoboCasa 계획과 별개로 FurnitureBench로 이동했다. RoboCasa 경로는 VAE latent 추출 스크립트 부재가 blocker였는데, FurnitureBench 쪽은 scripts/lingbot/extract_latents.sh·prepare_lingbot_dataset.py가 이미 존재해 그 blocker를 우회한 것으로 보인다. config 체인이 3단계로 깔끔하게 확장 가능한 구조(공유 베이스 → override)로 짜여 있어, 추가 가구 종류나 배치 크기 스윕을 붙이기 쉬운 상태다.
claude/context.md가 RoboCasa 조사 시점(260812)에 멈춰 있어 FurnitureBench 전환이 문서에 반영되지 않음. 다음 작업 로그 작성 시 Goal/Approach/Active Experiments 갱신 필요.
furniture_all_e128 3,000 step 완주 후 furniture_all_train(batch40, 1e-5)과 4종 가구별 success rate 비교 — effective batch 128 가설이 X-WAM/pi0.5와 동일하게 여기서도 성립하는지 확인.