Index
2026-08-30 ~ 2026-08-31 — Analysis

RoboTwin 2.0 리더보드 확정 — c2c 70.68 / c2r 33.15 / 평균 51.91

tau-0-wm | run4(step_30000) 평가 — c2c: 101482 / 103069 / 103186  ·  c2r: 101483 / 101947 / 102163 / 103407-8 / 104018-9

TL;DR

70.68%
c2c (50 task)
33.15%
c2r (50 task)
51.91%
리더보드 평균
9,570
총 rollout
−37.5pp
c2c → c2r

1 배경 / 목적

run4(clean-50 학습, step_30000)로 RoboTwin 2.0 공식 리더보드 지표(c2c/c2r)를 확정해야 한다. 기존에 확보한 X-WAM 90.7%는 randomized-500까지 학습한 뒤 randomized로 평가한 random2random 수치라 리더보드 c2r(clean만 보고 randomized 평가)과 성격이 다르다는 것을 이미 확인했으므로, run4의 c2c/c2r 자체가 "τ₀-WM을 리더보드 규칙대로 돌리면 몇 점인가"에 대한 최초의 유효한 답이다.

가설: 학습 중 loss_action이 29.7k step에서 0.0137까지 떨어져 run1(0.031)보다 낮았는데, 이것이 진짜 성능 향상인지 clean 분포 과적합인지는 c2r로만 판별 가능.

2 작업 내용

2.1 평가 스케줄링 — 처리량 실측 기반

과거 50-task 평가(97360+97992+99112)의 _result.txt 완료 시각 히스토그램에서 정상 구간 20 units/h = 200 rollout/h (96 clients / 8 GPU)를 확인. 리더보드 1개 설정 = 5,000 rollout ≈ 25h. 병목은 GPU가 아니라 시뮬레이터 + OptiX 레이트레이싱 (GPU 점유율 ~2.5%, 렌더 방식은 학습 데이터 수집과 동일해야 하므로 낮출 수 없음).

job지표TASK_CONFIGQOSSAVE_ROOT
101482 → 103069 → 103186c2cdemo_cleanown(보호)eval_results/robotwin_run4_c2c
101483 → 101947c2rdemo_randomizedextra(preempt 가능)eval_results/robotwin_run4_c2r

공통: MODEL_PATH=.../step_30000 EVALS=100 SHARDS=10 PARALLEL_CLIENTS=96, --gres=gpu:8 -c 96 --mem 1600GB --container=nvcr.io/nvidia/isaac-lab:2.2.0. _result.txt 기반 skip으로 preempt/재제출 시 완료 unit은 보존.

2.2 평가 하네스 클라이언트 hang 결함 발견 & 수정

c2c(job 101482)가 18시간 35분 경과·444/500 units에서 완전히 정지. 시간당 완료 unit이 35→35→21→24→9→0으로 붕괴. 결과 없는 56개 unit의 클라이언트 로그 mtime 분포를 확인:

nminp25medianp75max
56136분537분704분(11.7h)954분1,099분

10분 내 활동 중인 클라이언트 0개, 브로커는 71분 전까지 정상 → policy 응답은 정상 수신했지만 시뮬레이터 스텝 도중 멈춤. xargs -P 96 풀에서 행 걸린 56개 클라이언트가 슬롯을 영구 점유해 전체 파이프라인 정지. run_task의 재시도는 클라이언트 종료에만 발동하므로 hang에는 무력했다.

수정: scripts/eval_robotwin_tau.sh 클라이언트 호출을 timeout --kill-after=60 ${UNIT_TIMEOUT:-18000}로 감쌈. 5시간(18,000s)은 정상 unit 평균(~2.7h, 처리량 역산)을 죽이지 않으면서 11~18시간짜리 행만 잡도록 산정. scancel 101482 후 job 103069로 재제출(444 units 보존, 56 units만 재실행) → job 103186에서 최종 COMPLETED.

3 결과 (수치)

c2c 헤드라인

항목값
c2c task-mean70.68%
측정 범위50/50 task, 499/500 units = 4,990 rollout
통계 오차pooled binomial SE 0.64pp
분포중앙값 73.0% / 최소 16% / 최대 100%
task 구간≥90%: 13개 / 50–90%: 26개 / <50%: 11개

job 이력: 101482(18h35m, 444 units, hang으로 정지) → 103069(2h 타임아웃 도입 전 구간 5h, 481) → 103186(2h 타임아웃, COMPLETED 6h00m, 499). 마지막 1 unit(blocks_ranking_size shard8)은 attempt 0/1/2 전부 hang → 포기(n=90).

핵심 비교

비교값해석
[A] 전체 50 task, 같은 모델: c2c 70.68% → c2r 33.15%−37.53ppclean-50 학습이 clean 분포에 과적합
[B] 동일 44 task, 둘 다 demo_randomized 평가: run1 51.32% → run4 c2r 33.07%−18.25pp"randomized가 어려워서"가 아니라 "학습에 randomized가 없어서"
[B]가 결정적: 같은 아키텍처·같은 평가 조건에서 randomized-500을 본 run1은 51.3%를 낸다. −37.5pp 중 절반(18.3pp)은 학습 분포의 문제로 분리되고, 나머지는 평가 난이도 자체의 몫이다. 학습 중 관찰한 낮은 loss_action(0.0137, run1의 0.031보다 낮음)은 성능 신호가 아니라 clean 분포 과적합 신호였음이 수치로 확정됐다.

task별 최종 결과 — 전체 50 task (c2c 내림차순)

taskc2cc2rrun1 r2r
click_alarmclock100.0 (n100)66.0 (n100)98.0 (n100)
click_bell100.0 (n100)95.0 (n100)92.0 (n100)
shake_bottle100.0 (n100)96.0 (n100)86.0 (n100)
shake_bottle_horizontally100.0 (n100)92.0 (n100)93.0 (n100)
grab_roller98.0 (n100)42.0 (n100)84.0 (n100)
adjust_bottle95.0 (n100)28.0 (n100)69.0 (n100)
dump_bin_bigbin95.0 (n100)67.0 (n100)69.0 (n100)
place_cans_plasticbox95.0 (n100)55.0 (n100)63.0 (n100)
move_playingcard_away94.0 (n100)15.0 (n100)60.0 (n100)
place_container_plate93.0 (n100)69.0 (n100)76.0 (n100)
stack_blocks_two93.0 (n100)64.0 (n100)70.0 (n30)
place_burger_fries91.0 (n100)56.0 (n100)61.0 (n100)
place_bread_skillet90.0 (n100)44.0 (n100)62.0 (n100)
place_object_stand88.0 (n100)38.0 (n100)55.0 (n80)
stack_bowls_two88.0 (n100)71.2 (n80)—
lift_pot85.0 (n100)1.0 (n100)44.0 (n100)
open_laptop84.0 (n100)42.0 (n100)43.0 (n100)
press_stapler84.0 (n100)66.0 (n100)75.6 (n90)
pick_dual_bottles80.0 (n100)67.0 (n100)66.7 (n90)
place_empty_cup79.0 (n100)47.0 (n100)72.2 (n90)
place_shoe78.0 (n100)42.0 (n100)65.6 (n90)
move_pillbottle_pad77.0 (n100)4.0 (n100)57.0 (n100)
beat_block_hammer76.0 (n100)22.0 (n100)75.0 (n100)
move_can_pot75.0 (n100)5.6 (n90)25.0 (n100)
place_bread_basket73.0 (n100)43.0 (n100)49.0 (n100)
stamp_seal73.0 (n100)30.0 (n100)70.0 (n10)
pick_diverse_bottles72.0 (n100)42.0 (n100)48.0 (n100)
blocks_ranking_rgb71.0 (n100)7.5 (n80)12.5 (n80)
place_object_basket70.0 (n100)17.0 (n100)36.2 (n80)
handover_mic69.0 (n100)9.0 (n100)54.4 (n90)
place_can_basket68.0 (n100)20.0 (n100)42.5 (n80)
put_bottles_dustbin66.0 (n100)20.0 (n20)—
scan_object66.0 (n100)23.3 (n90)42.5 (n80)
place_object_scale60.0 (n100)19.0 (n100)36.0 (n100)
turn_switch60.0 (n100)44.0 (n100)—
stack_blocks_three56.0 (n100)13.3 (n30)—
place_dual_shoes55.0 (n100)13.0 (n100)23.3 (n90)
open_microwave53.0 (n100)15.0 (n80)35.0 (n80)
stack_bowls_three52.0 (n100)32.0 (n50)—
place_phone_stand50.0 (n100)32.0 (n100)50.0 (n50)
handover_block48.0 (n100)6.7 (n60)11.1 (n90)
place_a2b_right47.0 (n100)10.0 (n100)34.4 (n90)
place_fan46.0 (n100)4.0 (n100)37.8 (n90)
place_a2b_left44.0 (n100)9.0 (n100)43.0 (n100)
blocks_ranking_size40.0 (n90)3.8 (n80)11.0 (n100)
place_mouse_pad40.0 (n100)12.0 (n100)26.2 (n80)
move_stapler_pad37.0 (n100)8.0 (n100)19.0 (n100)
put_object_cabinet37.0 (n100)22.0 (n50)—
rotate_qrcode27.0 (n100)3.8 (n80)10.0 (n70)
hanging_mug16.0 (n100)3.3 (n90)4.0 (n100)

n = rollout 수. c2c는 49개 task가 n=100(blocks_ranking_size만 n=90), c2r은 37개가 n=100이고 13개는 부분 커버리지다. 미완료 42 units는 전부 SR 6~32%의 최하위 task에 몰려 있으며, 저커버리지 task를 모두 제곱합해도 50-task 평균의 불확실성은 1pp 미만이라 추가 라운드를 돌리지 않았다 (라운드별 수확도 +65 → +46으로 체감). run1 열은 randomized-500 학습 모델을 randomized로 평가한 값이며 44 task만 존재한다.

4 Takeaway

의미

리더보드가 c2c와 c2r을 둘 다 요구하는 이유가 정확히 이것이다 — c2c만 보면 τ₀-WM이 매우 잘하는 것처럼 보인다(70.68%, 상당수 task 90%+). 하지만 clean-50만으로 학습하면 clean 분포에 과적합돼 randomized 평가로 전이되지 않는다(−40pp). τ₀의 비디오 타워는 사전학습이 실사(AgiBot 등) 도메인이라, 시각 분포가 좁은 clean-50만 posttrain하면 렌더 변화 (배경/조명/클러터/테이블 높이)에 취약해진다 — 이전 진단에서 "ACVS가 RoboTwin sim에서 OOD"라고 나온 것과 같은 축의 문제다.

단서 조항: 두 집합 모두 먼저 끝나는 짧고 쉬운 task 편향이 있다(위 표는 40-task 부분집합 기준 81.2%/94.0%인데 run1의 44-task 전체 평균은 51.5%). 전체 50 task 완주 시 세 열 모두 하락할 것으로 예상. 확정 수치는 c2r 500/500 units 완주 후.

5 Next Steps

남은 한계

① c2r 커버리지: 37/50 task만 n=100이고 나머지는 부분(최저 put_bottles_dustbin n=20). 시뮬레이터 hang이 randomized 씬에서 훨씬 잦아 3라운드(347 → 412 → 458 units)를 돌리고도 42 units가 남았다. 다만 결측이 모두 최하위 SR task에 몰려 있어 평균에 대한 기여 불확실성은 1pp 미만이다.
② 시뮬레이터 hang의 근본 원인 미규명: 클라이언트가 policy 응답을 정상 수신한 뒤 에피소드 중간 임의 step에서 얼어붙는다(예: step 724/1700에서 127분 정지). 브로커·정책 서버는 정상이므로 SAPIEN 렌더나 모션 플래너 쪽 데드락으로 추정되나 확인하지 못했다. 현재는 UNIT_TIMEOUT으로 우회 중.
③ held-out split 부재: 학습 config의 val이 train과 같은 데이터를 가리킨다.

다음 실험

1순위 — ACVS RoboTwin posttrain (runner/posttrain_sim.py, ~17h). 앞선 진단에서 τ₀의 병목은 생성이 아니라 선택이었다: 8-샘플 오라클 0.94 cm로 X-WAM 단일 샘플(1.31 cm)보다 좋은데, RCS 선택기는 여지의 29%만 회수하고(순위상관 +0.11) ACVS는 RoboTwin sim에서 보상 상관 −0.14로 역상관이었다. 그런데 같은 ACVS가 AgiBot(사전학습 도메인)에서는 21.95 dB로 장면을 유지한다 — 즉 모델이 약한 게 아니라 도메인 미스매치다. sim 도메인에 맞춰 posttrain하면 TTC가 살아날 가능성이 높고, 이것이 τ₀ 논문의 핵심 주장 검증에 해당한다.

2순위 — 데이터 측면: 이번 결과로 c2r의 직접 원인이 학습 분포임이 확인됐다. clean+randomized 혼합 학습은 리더보드 규격 위반이지만 일반화-과적합 트레이드오프 진단용으로는 유효하다. 다만 run1(randomized-500, 51.32%)이 이미 그 방향의 답을 주고 있어 신규 정보량은 적다.