TL;DR
- pi0.5 all_low b128(4 GPU)과 동일 조건에서 LingBot-VA도 4가구 통합 데이터(1,304 ep)로 학습 시작. e40(4 GPU, 유효 batch 40, lr 1e-5) 5000 step에서 4가구 모두 성공 0(phase one_leg 2.70 / lamp 2.60 / round_table 2.10 / cabinet 1.80).
- 다른 프로젝트(X-WAM RoboCasa) 유효 batch 4→128 = 11%→61% 사례를 근거로 e128(8 GPU, 유효 batch 128, lr 3e-5) 변형 제출. 그러나 같은 샘플 수 구간(e40 2500 step=10만 vs e128 1000 step=12.8만)에서 phase가 구분되지 않음(n=10, ±0.4 노이즈 범위) — pi0.5에서 나타난 극적인 유효 batch 효과가 아직 재현 안 됨.
- e128 111859가 재개 15분 만에 NCCL all-gather 600s timeout → SIGABRT로 크래시(sacct는 COMPLETED로 기록되어 자동 requeue 안 됨).
init_process_group(timeout=60min) 패치 후 111882로 재제출.
- preempt 누적 6회(평가 job 포함)에도 resumable 런처로 에피소드 손실은 0.
- e40 종료 (7500 step, 최종): 4가구 0/40, phase 평균 2.70 (2500 2.58 / 5000 2.30) — 30만 샘플까지 포화. 사용자 결정으로 4 GPU baseline은 7500에서 중단, GPU는 e128(packing)에 집중.
- e128 (packing) 2000 step: 4가구 0/40, phase 평균 2.72 (1000: 2.40) — e40 7500(2.70)과 동급. 유효 batch 128은 phase를 조금 앞당길 뿐 성공으로 이어지지 않음. 최종 3000 평가(one_leg 30 ep) 후 트랙 종료 여부 결정.
- 최종 (e128 3000 step, 38.4만 샘플): 4가구 0/60, phase 평균 2.86. one_leg 0/30 — 단독 모델(0.157)이면 0/30 확률 0.6% → 통합 학습이 LingBot의 one_leg 능력을 깎음(pi0.5는 같은 데이터로 0.24→0.36). LingBot all_low 트랙 종료.
60min
NCCL init timeout 패치
1 배경 / 목적
pi0.5 all_low b128(4 GPU, batch 128, 40k)이 동일 4가구 통합 데이터(1,304 ep)로 one_leg 0.36 / lamp 첫 완전 조립(0.02) / round_table·cabinet 첫 쌍 부분 조립(18%/30%)을 낸 것과 같은 조건에서 LingBot-VA(video-action world model)도 학습해 비교한다.
앞서 LingBot-VA는 one_leg 단독 데이터에서 5000 step(≈10만 샘플)으로 pi0.5 30k(≈96만 샘플)와 동급 phase(2.86 vs 2.88)에 도달했지만 성공률은 낮았다(0.157 vs 0.24) — 샘플 1/10로 같은 지점에 도달하는 효율성이 확인된 상태였다. 이번 실험은 (a) 이 샘플 효율이 4가구 통합 데이터에서도 재현되는지, (b) pi0.5에서 결정적이었던 "유효 batch 4배" 효과가 LingBot에도 적용되는지 확인하는 것이 목적.
2 작업 내용
데이터 준비 (claude/260905/exp-lingbot_va_all_low_setup.md)
prepare_lingbot_dataset.py --src data/lerobot/furniture_sim/all_low --dst data/lingbot/furniture_sim/all_low
(CPU job 110434, 3분) → action 컬럼 / action_config(가구별 task 문장) / norm_stat(all_low 기준, one_leg와 미세하게 다름)
latent 추출: 1,304 ep을 4등분 → 110436-110439 (1 GPU each, afterok:110434)
one_leg 344 ep이 2h37m이었으므로 조각당 ≈2.5h
batch 2/GPU 시도 → 실패: 에피소드 전체(latent 120-166 프레임 가변)를 반환해
default_collate가 stack 불가 ("stack expects each tensor to be equal size")
→ upstream LIBERO도 batch 1인 이유. 유효 batch는 accum/GPU 수로만 키움.
e40 (baseline) 학습 설정
va_furniture_all_train_cfg.py (furniture_all_train):
dataset all_low, batch 1/GPU × accum 10 × 4 GPU = 유효 40 (one_leg run 20의 2배)
lr 1e-5, 10,000 step (400k clip ≈ one_leg run과 같은 epoch 수), save 500
sbmr 10 "bash scripts/lingbot/train_lingbot.sh 4 furniture_all_train" \
--gres=gpu:4 -c 32 --mem 800GB --qos=extra --time 40:00:00 \
--dependency=afterok:110436:110437:110438:110439
→ job 110453
실측: 19.2 s/step (one_leg 2GPU run 10.7s의 1.8배 — lamp/round_table/cabinet
에피소드가 최대 957프레임/latent 240으로 one_leg의 ~2배). GPU util 92–99%, 61GB/GPU.
e128 변형 (claude/260906/exp-lingbot_va_all_low_training.md)
근거: 다른 프로젝트 로그 조사 — X-WAM RoboCasa 같은 데이터에서 유효 batch 4→8→128, lr 1e-5→3e-5로 11%→15.6%→61% ("지배 변수"); LingBot upstream README도 global batch ≥32–64 권장, LIBERO 레시피 = 8 GPU × accum 10 = 유효 80. 현재 run(유효 40, lr 1e-5)은 그 절반.
va_furniture_all_e128_train_cfg.py (furniture_all_e128):
8 GPU × batch 1 × accum 16 = 유효 128, lr 3e-5, warmup 200(→constant)
3000 step (=384k 샘플, 기존 run 10k×40과 동일 노출), save 250
sbmr 10 "bash scripts/lingbot/train_lingbot.sh 8 furniture_all_e128" \
--gres=gpu:8 -c 64 --mem 1600GB --qos=extra --time 40:00:00
(첫 제출 111321은 cwd가 lingbot-va/wan_va라 취소 후 FurnitureBench 루트에서 재제출)
→ job 111322, 예상 ≈31 s/step × 3000 ≈ 26h
NCCL timeout 크래시 및 패치
e128 경과: 111322 → 111606 → 111700 → 111859 (preempt 3회: 7h12m@761, 23m@784, 2h28m@1000 직후). 111859(step 1000에서 재개)는 시작 15분 만에 NCCL all-gather 600s 타임아웃 → SIGABRT(sacct는 COMPLETED로 기록되어 sbmr 자동 requeue 안 됨). 8 rank가 NAS에서 9.5GB 체크포인트를 동시에 읽는 동안 먼저 끝난 rank가 첫 FSDP all-gather에서 10분을 넘긴 것으로 추정.
조치: wan_va/distributed/util.py — init_process_group(timeout=60min)
재제출 (step 1000에서 재개)
3 결과 (수치)
e40 loss 곡선
action loss: step 500 0.029 → 1000 0.024 → 2000 0.018 → 2500 0.015 (one_leg 단독 run의 같은 step보다 낮음 — 데이터가 많아 과적합이 덜함).
중간 평가 — step 2500 (111098–111101, 가구당 10 ep, 서버 config furniture_all)
| 가구 | LingBot all 2500 | LingBot one_leg 단독 2000 | pi0.5 b128 20k | pi0.5 b128 40k |
| one_leg | 0/10, 2.60 | 0/10, 2.80 | 0.10, 3.00 | 0.36, 3.32 |
| lamp | 0/10, 2.50 | — | 0.00, 2.35 | 0.02, 2.62 |
| round_table | 0/10, 2.80 | — | 0.00, 3.05 | 0.00, 3.18 |
| cabinet | 0/10, 2.40 (부분 1) | — | 0.00, 2.25 | 0.00, 2.66 |
4가구 모두 접근 단계(phase 2.4–2.8)까지 학습됨. one_leg는 단독 run 2000 step(2.80)보다 약간 낮음 — task당 샘플이 1/4이므로 예상 범위.
e40 step 5000 (111705–111708 + preempt 재큐잉, 가구당 10 ep)
| 가구 | e40 2500 | e40 5000 | pi0.5 b128 40k |
| one_leg | 0/10, 2.60 | 0/10, 2.70 | 0.36, 3.32 |
| lamp | 0/10, 2.50 | 0/10, 2.60 | 0.02, 2.62 |
| round_table | 0/10, 2.80 | 0/10, 2.10 | 0.00, 3.18 |
| cabinet | 0/10, 2.40 (부분 1) | 0/10, 1.80 | 0.00, 2.66 |
2500→5000에서 성공 0 유지, phase는 one_leg/lamp 소폭 상승, round_table/cabinet은 하락(n=10 노이즈 ±0.4 범위 안). one_leg 단독 run은 3000 step(60k 샘플)에서 첫 성공이 나왔는데, all_low e40는 5000 step(200k 샘플, task당 5만)에서도 0 → task당 샘플 부족 또는 유효 batch 40이 낮은 것으로 의심.
e40 step 7500 — 최종 (112478–112481, 가구당 10 ep) · 사용자 결정으로 7500에서 학습 종료
| 가구 | e40 2500 (10만 샘플) | e40 5000 (20만) | e40 7500 (30만) | 7500 phase 분포 | pi0.5 b128 40k |
| one_leg | 0/10, 2.60 | 0/10, 2.70 | 0/10, 2.30 | {1: 2, 2: 3, 3: 5} | 0.36, 3.32 |
| lamp | 0/10, 2.50 | 0/10, 2.60 | 0/10, 2.80 | {2: 2, 3: 8} | 0.02, 2.62 |
| round_table | 0/10, 2.80 | 0/10, 2.10 | 0/10, 3.00 | {3: 10} | 0.00, 3.18 |
| cabinet | 0/10, 2.40 (부분 1) | 0/10, 1.80 | 0/10, 2.70 (부분 2) | {1: 2, 2: 1, 3: 5, 4: 2} | 0.00, 2.66 |
| 평균 phase | 2.58 | 2.30 | 2.70 | | |
e40 포화: 30만 샘플(one_leg 단독 run의 3배)까지 성공 0/40, phase 평균 2.30 → 2.70는 2500(2.58)과 같은 범위(n=10 ±0.4). 40 ep 중 28개가 phase 3(insertion 직전)에서 timeout → 병목은 여전히 삽입. 112272를 7500에서 scancel(sbmr 데몬 추적 해제 후), checkpoint 5000·7500만 유지(6500/7000 삭제 19 GB). 이후 판단은 e128-pack 2000/3000 평가.
e128 (packing, 8 GPU) step 2000 (112579–112582, 가구당 10 ep)
| 가구 | e128 1000 (12.8만 샘플) | e128 2000 (25.6만) | 2000 phase 분포 | e40 7500 (30만) |
| one_leg | 0/10, 2.50 | 0/10, 2.90 | {2: 1, 3: 9} | 0/10, 2.30 |
| lamp | 0/10, 1.90 | 0/10, 2.30 | {1: 1, 2: 5, 3: 4} | 0/10, 2.80 |
| round_table | 0/10, 2.90 | 0/10, 3.10 (부분 1) | {3: 9, 4: 1} | 0/10, 3.00 |
| cabinet | 0/10, 2.30 (부분 1) | 0/10, 2.60 (부분 1) | {1: 1, 2: 3, 3: 5, 4: 1} | 0/10, 2.70 (부분 2) |
| 평균 phase | 2.40 | 2.72 | | 2.70 |
유효 batch 128도 성공 0/40. phase 평균은 1000 → 2000에서 2.40 → 2.72로 올라 같은 샘플 수의 e40(5000, 2.30)보다 높지만, e40 7500(2.70)과 같은 범위. 40 ep 중 phase 3 정체 27개 — 병목은 여전히 삽입. pi0.5에서 0.04 → 0.36을 만든 유효 batch 변수가 LingBot-VA에서는 phase +0.3 수준의 완만한 효과에 그침. one_leg의 phase 2.9는 단독 모델(2.86, 성공 0.157)과 같지만 n=10으로는 성공률 구분 불가(0.157이면 0/10 확률 18%) → 3000 평가는 one_leg 30 ep.
e128 (packing) step 3000 — 최종 (112911 one_leg 30 ep, 112912–112914 10 ep)
| 가구 | e128 2000 | e128 3000 (38.4만 샘플) | 3000 phase 분포 | pi0.5 b128 40k | LingBot one_leg 단독 5000 |
| one_leg | 0/10, 2.90 | 0/30, 2.53 | {1: 4, 2: 6, 3: 20} | 0.36, 3.32 | 0.157 (8/51), 2.86 |
| lamp | 0/10, 2.30 | 0/10, 2.90 | {2: 1, 3: 9} | 0.02, 2.62 | — |
| round_table | 0/10, 3.10 (부분 1) | 0/10, 3.20 (부분 2) | {3: 8, 4: 2} | 0.00, 3.18 | — |
| cabinet | 0/10, 2.60 (부분 1) | 0/10, 2.80 (부분 4) | {1: 1, 2: 4, 3: 1, 4: 4} | 0.00, 2.66 | — |
| 평균 phase | 2.72 | 2.86 | | | |
최종 0/60, one_leg 0/30이 결정적. one_leg 단독 모델의 0.157이 참이면 30 ep에서 0회가 나올 확률은 0.6% → 4가구 통합 학습이 LingBot-VA의 one_leg 능력을 유의하게 깎았다(부정 전이). 같은 all_low 데이터로 pi0.5는 0.24 → 0.36으로 좋아졌으므로 데이터/프로토콜 문제가 아니라 모델 특성. 유효 batch 40→128, 샘플 38만까지 늘려도 phase +0.3 수준. 병목은 일관되게 삽입(phase 3 정체 38/60).
결론: LingBot all_low 트랙 종료. LingBot의 유효 결과는 one_leg 단독 0.157(샘플 효율)로 정리하고, 남은 실험은 학습이 아니라 추론 측(실행 step 12→8, chunk 조정)으로 한정. 주력은 pi0.5 b128 계열의 다부품 조립(max_steps 상향, 데모 증량).
e128 step 1000 (111860–111863, 가구당 10 ep, 12.8만 샘플)
| 가구 | e40 2500 (10만 샘플) | e40 5000 (20만 샘플) | e128 1000 (12.8만 샘플) |
| one_leg | 0/10, 2.60 | 0/10, 2.70 | 0/10, 2.50 |
| lamp | 0/10, 2.50 | 0/10, 2.60 | 0/10, 1.90 |
| round_table | 0/10, 2.80 | 0/10, 2.10 | 0/10, 2.90 |
| cabinet | 0/10, 2.40 (부분 1) | 0/10, 1.80 | 0/10, 2.30 (부분 1) |
같은 샘플 수 구간에서 e128과 e40의 phase는 구분되지 않는다(n=10, ±0.4). 성공은 둘 다 0. pi0.5에서 20k→40k(task당 16만→32만 샘플)로 유효 batch 4배 효과가 뚜렷했던 것과 달리, LingBot은 이 샘플 수 구간에서 아직 효과가 보이지 않음.
4 Takeaway
의미
LingBot-VA가 one_leg 단독에서 보여준 "1/10 샘플로 pi0.5와 동급 phase 도달"이라는 샘플 효율 강점이, 4가구 통합 데이터에서는 아직 재현되지 않고 있다. e40 5000 step(task당 5만 샘플)에서 성공 0인 지점은 pi0.5 all_low 초기 단계(20k, task당 16만 샘플, 성공 0)와 국면이 비슷하다 — world model 방식이 multi-task 상황에서는 더 많은 절대 샘플/step을 요구할 가능성.
X-WAM 사례에서 결정적이었던 유효 batch 40→128 효과도 같은 샘플 노출 구간(10만~20만)에서는 아직 관측되지 않았다. e128이 목표한 3000 step(=384k 샘플, task당 9.6만)까지 도달해야 pi0.5 case처럼 뚜렷한 차이가 나타나는지 판정 가능하다. 지금까지는 "LingBot이 4가구 통합에서도 유리하다"는 가설이 확인되지 않은 상태 — 결론을 내리기엔 이르다.
5 Next Steps
미해결 한계
e128의 NCCL all-gather timeout(60분 패치)이 재발하지 않는지 아직 확인되지 않음 — 8 rank가 NAS에서 대형 체크포인트를 동시 로드하는 구간은 여전히 취약점. preempt 누적(6회)으로 e128 실측 진행 속도가 예상(26h)보다 지연되고 있어, 3000 step 도달 시점이 불확실.
다음 실험
e128 2000/3000 step(25.6만/38.4만 샘플)에서 가구당 10 ep 재평가 → e40와 유효 batch 가설 재확인. e40/e128 중 우세한 쪽으로 5000~10000 step까지 학습 지속 후 pi0.5 b128 40k와 동일 프로토콜(one_leg 30 ep + 나머지 20 ep)로 최종 비교. 만약 10000 step까지도 성공 0에 머물면, LingBot 4가구 통합 트랙은 데이터 증량(가구당 1000 ep) 또는 자원 대비 실효성 재검토가 필요.