Index
2026-09-05 ~ 09-07 — Experiment

LingBot-VA all_low(4가구 통합) 학습 — 유효 batch 40 vs 128 비교

FurnitureBench | job 110453 (e40, 4 GPU) / 111322→111882 (e128, 8 GPU)

TL;DR

0/40
e40 5000step 4가구 성공
40→128
유효 batch 변형
19.2s
e40 s/step (4 GPU)
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 2500LingBot one_leg 단독 2000pi0.5 b128 20kpi0.5 b128 40k
one_leg0/10, 2.600/10, 2.800.10, 3.000.36, 3.32
lamp0/10, 2.50—0.00, 2.350.02, 2.62
round_table0/10, 2.80—0.00, 3.050.00, 3.18
cabinet0/10, 2.40 (부분 1)—0.00, 2.250.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 2500e40 5000pi0.5 b128 40k
one_leg0/10, 2.600/10, 2.700.36, 3.32
lamp0/10, 2.500/10, 2.600.02, 2.62
round_table0/10, 2.800/10, 2.100.00, 3.18
cabinet0/10, 2.40 (부분 1)0/10, 1.800.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_leg0/10, 2.600/10, 2.700/10, 2.30{1: 2, 2: 3, 3: 5}0.36, 3.32
lamp0/10, 2.500/10, 2.600/10, 2.80{2: 2, 3: 8}0.02, 2.62
round_table0/10, 2.800/10, 2.100/10, 3.00{3: 10}0.00, 3.18
cabinet0/10, 2.40 (부분 1)0/10, 1.800/10, 2.70 (부분 2){1: 2, 2: 1, 3: 5, 4: 2}0.00, 2.66
평균 phase2.582.302.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_leg0/10, 2.500/10, 2.90{2: 1, 3: 9}0/10, 2.30
lamp0/10, 1.900/10, 2.30{1: 1, 2: 5, 3: 4}0/10, 2.80
round_table0/10, 2.900/10, 3.10 (부분 1){3: 9, 4: 1}0/10, 3.00
cabinet0/10, 2.30 (부분 1)0/10, 2.60 (부분 1){1: 1, 2: 3, 3: 5, 4: 1}0/10, 2.70 (부분 2)
평균 phase2.402.722.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 2000e128 3000 (38.4만 샘플)3000 phase 분포pi0.5 b128 40kLingBot one_leg 단독 5000
one_leg0/10, 2.900/30, 2.53{1: 4, 2: 6, 3: 20}0.36, 3.320.157 (8/51), 2.86
lamp0/10, 2.300/10, 2.90{2: 1, 3: 9}0.02, 2.62—
round_table0/10, 3.10 (부분 1)0/10, 3.20 (부분 2){3: 8, 4: 2}0.00, 3.18—
cabinet0/10, 2.60 (부분 1)0/10, 2.80 (부분 4){1: 1, 2: 4, 3: 1, 4: 4}0.00, 2.66—
평균 phase2.722.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_leg0/10, 2.600/10, 2.700/10, 2.50
lamp0/10, 2.500/10, 2.600/10, 1.90
round_table0/10, 2.800/10, 2.100/10, 2.90
cabinet0/10, 2.40 (부분 1)0/10, 1.800/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) 또는 자원 대비 실효성 재검토가 필요.