TL;DR
- 성공률 0.24 (12/50), mean phase 2.88/4. 10k(0.10)·20k(0.05, n=20)보다 확실히 높고, n=50이라 ±0.12 수준의 신뢰구간.
- 병목은 여전히 삽입/나사: 실패 38개 중 26개(68%)가 다리를 베이스 근처(<12 cm)까지 가져간 뒤 실패, 그중 10개는 5 cm 이내까지 접근.
- 성공할 때는 데모처럼 빠름: 성공 에피소드 길이 평균 502 step(444–560) = scripted 데모 길이(475–658)와 동일 분포.
- 30k에서 lr decay가 끝났는데도 곡선이 오르는 중 → 학습 연장/데모 증량(1000 ep)이 다음 레버. 논문 참고치(1000 demo, IQL≈0.4–0.5)에는 아직 미달.
0.36
one_leg 최종 (b128 통합, 18/50)
0.24
one_leg 단독 30k (12/50)
0.157
LingBot-VA one_leg (8/51)
1 배경 / 목적
pi0.5(pi05_base)를 FurnitureSim one_leg low scripted 데모 344 ep로 30k step 파인튜닝한 학습(job 108562)이 완료됐다(최종 ckpt 29999). 중간 평가는 20 ep뿐이라 2/20·1/20 같은 수치의 차이가 노이즈인지 판단할 수 없었고, replan 10(액션 청크 전부 실행)이 replan 5보다 낫다는 것만 확인된 상태였다. 최종 ckpt를 50 ep로 평가해 학습 곡선의 끝점과 실패 모드를 확정한다.
2 설정
sbmr 3 "bash scripts/eval_pi05_furniture.sh pi05_furniture_one_leg_low <ckpt 29999> one_leg 50 low 10 1000" --gres=gpu:1 -c 8 --mem 200GB --qos=extra
서버: openpi serve_policy (JAX, XLA mem 0.6) / 클라이언트: FurnitureSimFull-v0 (py3.8, CPU tensors), 같은 GPU
replan 10 = action horizon 10을 모두 open-loop 실행 후 재추론 · max 1000 step(데이터 수집 timeout과 동일) · low randomness
phase proxy: 베이스 3 cm 이동(1) / 다리 3 cm 들림(2) / 다리–베이스 중심거리 <12 cm(3) / all_assembled(4)
3 결과
| ckpt | replan | n | 성공률 | mean phase | phase 분포 1/2/3/4 |
| 10k | 5 | 20 | 0.00 | 2.45 | 1/9/10/0 |
| 10k | 10 | 20 | 0.10 | 2.00 | 5/10/5/0 |
| 20k | 10 | 20 | 0.05 | 2.65 | 2/4/13/1 |
| 30k (29999) | 10 | 50 | 0.24 | 2.88 | 6/6/26/12 |
- 실패 38개: phase 3(삽입 직전) 26개, phase 2(다리 들었으나 접근 실패) 6개, phase 1(다리 못 집음) 6개. 다리–베이스 거리 5 cm 이내까지 간 실패 10개.
- 성공 12개 step: 평균 502 (444–560). 성공 에피소드는 ~31 s, 실패(1000 step)는 ~60 s → 50 ep 약 45분.
30k ckpt 성공 에피소드(ep 3, 왼쪽 wrist / 오른쪽 front). 베이스 밀기 → 다리 집기 → 삽입 → 나사 조이기.
학습이 아직 포화되지 않았다. 10k→30k에서 성공률 0.10→0.24, mean phase 2.0→2.88. lr cosine decay는 30k에서 끝났으므로, 같은 데이터로 학습을 연장하거나 lr 스케줄을 늘리면 추가 향상 여지가 있다.
삽입 정밀도가 병목이라는 진단은 10k/20k와 일관. 데모 344개 중 삽입/나사 구간은 충분히 포함돼 있으므로(57% 프레임), 데이터 다양성(1000 ep) 또는 삽입 구간의 replan 간격 조정이 다음 레버.
4 Takeaway
scripted 데모 → LeRobot → pi0.5 파인튜닝 → 서버/클라이언트 closed-loop 평가 파이프라인이 end-to-end로 동작하고, 학습이 진행될수록 성공률이 오르는 것이 n=50에서 확인됐다. 논문 sim one_leg low 참고치(1000 demo, IQL≈0.4–0.5)에는 못 미치지만 데모 1/3·2뷰·튜닝 없이 0.24는 파이프라인 검증으로 충분하다.
5 Next
- 데모 증량: one_leg 300→1000 (scripted 성공률 0.53@t1000 → 약 1900 시도, 8 job 병렬 시 수 시간) 후 재학습.
- 학습 연장: one_leg 30k→60k (resume, lr 스케줄 재설정 여부 확인).
- all_low(4 가구 1304 ep) pi0.5 40k 학습(108868, 3k/40k 진행) → 가구별 평가.
- LingBot-VA(world model) 비교: step 400 평가(108991) 진행 중, 이후 1000/2000/5000 비교.
6 업데이트 — LingBot-VA 학습 곡선: step 400 → 5000 (phase 1.70 → 2.86, 최종 성공률 0.157 n=51)
같은 one_leg low 데이터로 학습 중인 LingBot-VA(video-action world model, job 108915)의 step 400 체크포인트(≈8k 샘플)를 새 평가 파이프라인(scripts/lingbot/eval_lingbot_furniture.sh, job 108991)으로 10 ep 평가.
| 정책 | 학습량 | n | 성공률 | mean phase | phase 1/2/3/4 | 추론 비용 |
| LingBot-VA step 400 | ≈8k 샘플 | 10 | 0.00 | 1.70 | 5/3/2/0 | 0.55 s/step (546 s/ep) |
| LingBot-VA step 1200 (preempt, 5 ep) | ≈24k 샘플 | 5 | 0.00 | 2.60 | 1/0/4/0 | 〃 |
| LingBot-VA step 1400 | ≈28k 샘플 | 10 | 0.00 | 2.40 | 1/4/5/0 | 〃 |
| LingBot-VA step 2000 | ≈40k 샘플 | 10 | 0.00 | 2.80 | 0/2/8/0 | 〃 |
| LingBot-VA step 3000 | ≈60k 샘플 | 10 | 0.20 | 2.90 | 1/1/6/2 | 〃 |
| LingBot-VA step 5000 (최종, 3 run 합산) | ≈100k 샘플 | 51 | 0.157 | 2.86 | 4/7/32/8 | 〃 |
| pi0.5 10k (replan 10) | ≈320k 샘플 | 20 | 0.10 | 2.00 | 5/10/5/0 | ≈0.06 s/step |
| pi0.5 30k (replan 10) | ≈960k 샘플 | 50 | 0.24 | 2.88 | 6/6/26/12 | ≈0.06 s/step |
LingBot-VA step 400, ep 0 (phase 3/4): 베이스 밀기와 다리 집기까지는 수행, 삽입 실패.
LingBot-VA step 3000 첫 성공(ep 1, 519 step): world-model이 생성한 latent에서 뽑은 action만으로 삽입·나사까지 완료.
step 3000에서 첫 성공 2/10. 학습 샘플 ≈6만 개(pi0.5 30k의 1/16)로 pi0.5 30k(0.24, n=50)와 같은 수준의 성공률과 phase(2.90 vs 2.88)에 도달 → 샘플 효율은 LingBot이 크게 앞선다. 다만 n=10이라 신뢰구간 ±0.25, 추론은 0.7 s/step으로 pi0.5보다 ~10배 느리다. 5000 step에서 20–30 ep로 재확인.
LingBot-VA step 5000 성공 에피소드(ep 20, 501 step).
최종 비교 (one_leg low, 같은 344 ep 데이터): LingBot-VA 5000 step(≈100k 샘플) 성공률 0.157 (8/51, phase 2.86) vs pi0.5 30k(≈960k 샘플) 0.24 (12/50, phase 2.88). 샘플 1/10로 같은 phase에 도달했지만 성공률은 pi0.5가 높고, 추론은 pi0.5가 ≈10배 빠르다. 두 정책 모두 실패의 70% 이상이 삽입 직전(phase 3)이라 병목은 모델보다 데이터 다양성 쪽 → 데모 1000 ep 증량이 공통 레버.
step 400에서 베이스 밀기(평균 0.20 m)와 다리 접근(2 ep에서 phase 3, 최소 거리 3.5 cm)이 이미 나오는 건 샘플 효율 면에서 나쁘지 않다. 다만 world-model 추론은 chunk당 20 video + 50 action denoise step(CFG 5)이라 pi0.5보다 ~9배 느리다. 학습이 5000 step(≈100k 샘플)까지 가는 동안 step 1000/2000/3000/5000에서 같은 10 ep 평가를 반복해 곡선을 비교한다(후속 job 109054는 45분 지연 시작으로 step 1000을 잡도록 제출).
7 업데이트 — all_low(4 가구 통합) 20k 중간 ckpt 가구별 평가: 4 가구 모두 0/20
all_low(1,304 ep) pi0.5 40k 학습(108868)의 20k 중간 체크포인트를 가구별 20 ep(replan 10, max 1000)로 평가(job 109220–109223).
| 가구 | 조립 쌍 수 | 성공률 | mean phase | phase 0/1/2/3/4 | 부품 조립 ≥1 |
| one_leg | 1 | 0.00 | 2.40 | 0/4/4/12/0 | 0/20 |
| lamp | 2 | 0.00 | 2.30 | 0/1/12/7/0 | 0/20 |
| round_table | 2 | 0.00 | 1.95 | 2/7/1/10/0 | 0/20 |
| cabinet | 3 | 0.00 | 1.90 | 0/8/6/6/0 | 0/20 |
task당 학습량이 1/4. 통합 20k = batch 32 × 20k = 640k 샘플을 4 task가 나눠 가져 task당 ≈160k = one_leg 단독 5k step 수준(단독 5k도 성공 0). 최종 40k라도 task당 ≈ 단독 10k(0.10) 수준에 그친다. multi-task가 해롭다는 근거는 없고(모든 가구에서 베이스 밀기·부품 들기·접근은 학습됨), 유효 batch를 키워 task당 샘플을 맞춰야 비교가 성립한다.
다음 run all_low_v2: 4 GPU, batch 128(32/GPU), 40k step(5.1M 샘플, task당 ≈ 단독 40k 수준), peak lr 5e-5 유지. openpi는 GPU 수만큼 batch를 자동 분산하므로 config의 batch_size와 --gres=gpu:4만 바꾸면 된다. v1(108868)은 완주시켜 40k 가구별 baseline으로 쓴다.
8 업데이트 — all_low v1 최종(40k) 가구별 50 ep: one_leg 0.04, 나머지 0 (부분 조립 각 1–2회)
| 가구 | 조립 쌍 | 20k 성공률 / phase (n=20) | 40k 성공률 / phase (n=50) | 40k phase 0/1/2/3/4 | 부분 조립 ≥1쌍 |
| one_leg | 1 | 0.00 / 2.40 | 0.04 / 2.74 | 0/4/7/37/2 | 2/50 |
| lamp | 2 | 0.00 / 2.30 | 0.00 / 2.36 | 0/4/25/20/1 | 1/50 |
| round_table | 2 | 0.00 / 1.95 | 0.00 / 2.82 | 1/4/0/43/2 | 2/50 |
| cabinet | 3 | 0.00 / 1.90 | 0.00 / 1.72 | 0/29/7/13/1 | 1/50 |
20k에서 0이던 부품 조립이 40k에서 4 가구 모두 1–2회 나왔지만 성공률은 one_leg 0.04뿐. task당 샘플이 one_leg 단독 10k(0.10) 수준이라는 예측과 일치한다. 통합 학습의 효과 판정은 유효 batch 4배인 all_low_b128 v2(109612, 4 GPU) 결과로 한다. 학습 14h14m(1 GPU) + 가구별 평가 ≈ 50 min.
9 업데이트 — all_low b128 v2(4 GPU, batch 128) 20k 중간: one_leg 0.10, cabinet 부분 조립 4/20
| 가구 | v1 20k (n=20) | v1 40k (n=50) | b128 20k (n=20) | b128 20k phase 0/1/2/3/4 | 부분 조립 |
| one_leg | 0.00 / 2.40 | 0.04 / 2.74 | 0.10 / 3.00 | 0/0/2/16/2 | 2/20 |
| lamp | 0.00 / 2.30 | 0.00 / 2.36 | 0.00 / 2.35 | 0/1/11/8/0 | 0/20 |
| round_table | 0.00 / 1.95 | 0.00 / 2.82 | 0.00 / 3.05 | 0/0/0/19/1 | 1/20 |
| cabinet | 0.00 / 1.90 | 0.00 / 1.72 | 0.00 / 2.25 | 0/7/2/10/1 | 4/20 |
유효 batch 가설 확인. b128 20k(task당 ≈640k 샘플)는 v1 40k(task당 ≈320k)보다 모든 가구에서 phase가 높고, one_leg 0.10은 단독 학습 10–20k 수준과 일치한다. 4 GPU로 step 시간은 그대로(1.1 s)이므로 같은 벽시계 시간에 4배 학습이 된 셈. 40k 최종(task당 ≈ 단독 40k)은 가구별 50 ep로 평가한다.
10 최종 — all_low b128 v2 40k 가구별 50 ep: one_leg 0.36 (단독 30k 0.24 초과), lamp 첫 완전 조립
| 가구 | 조립 쌍 | v1 40k (n=50) | b128 20k (n=20) | b128 40k (n=50) | b128 40k phase 0/1/2/3/4 | 부분 조립 ≥1쌍 |
| one_leg | 1 | 0.04 / 2.74 | 0.10 / 3.00 | 0.36 / 3.32 | 0/0/2/30/18 | 18/50 |
| lamp | 2 | 0.00 / 2.36 | 0.00 / 2.35 | 0.02 / 2.62 | 0/3/14/32/1 | 1/50 (2쌍 완성) |
| round_table | 2 | 0.00 / 2.82 | 0.00 / 3.05 | 0.00 / 3.18 | 0/0/0/41/9 | 9/50 |
| cabinet | 3 | 0.00 / 1.72 | 0.00 / 2.25 | 0.00 / 2.66 | 0/11/10/14/15 | 15/50 |
b128 40k one_leg 성공(ep 2). 4 가구 통합 모델.
b128 40k lamp 첫 완전 조립(ep 49, 939 step, 2쌍 모두).
유효 batch 4배(4 GPU, batch 128)가 이번 라운드의 결정적 변수. 같은 40k step에서 v1(b32) → v2(b128)로 전 가구 phase +0.3~0.9, 부분 조립 1–2회 → 9–18회, one_leg 0.04 → 0.36. one_leg 단독 30k(0.24)보다 높으므로 4 가구를 한 모델로 학습해도 손해가 없고, 논문의 sim one_leg 참고치(1000 demo, IQL ≈0.4–0.5)에 근접했다.
남은 병목: (1) 삽입 정밀도 — one_leg 실패 32개 중 30개가 phase 3. (2) 다부품 가구의 2번째 쌍 — round_table/cabinet은 첫 쌍이 18–30%에서 들어가지만 그 이후는 0. 데모는 가구당 320 ep, 평가 max_steps 1000은 lamp/cabinet 데모 길이와 비슷해 여유가 없다. 다음 라운드: one_leg 300→1000 ep 증량 재학습, 다부품 max_steps 1500–2000, LingBot all_low 4 GPU 비교.