Index
2026-09-09 — Experiment

RoboTwin Zero-WAM: 43-seen 학습 완료 + Unseen-7 평가 결과

lingbot-va | Track A — RoboTwin 2.0 cross-task 일반화

TL;DR

32.2%
평균 SR (완료 5개)
18.57%
Paper baseline (동일 5개)
+13.6p
Delta
32,000
Train step
5/7
태스크 완료

1 배경 / 목적

Track A(RoboTwin 2.0 Zero-WAM 43/7 split)의 목표는 LingBot-VA를 RoboTwin 50 task 중 43개만 학습하고 7개는 완전히 제외한 뒤, 제외된 7개(unseen)에서의 zero-shot cross-task 일반화 성능을 측정하는 것이다. 프로토콜은 Zero-WAM 논문(arXiv 2608.26103, Robbyant)을 그대로 따르며, 같은 논문에 명시된 LingBot-VA baseline 평균 17.45%(unseen 7 평균, 3-seed)가 직접 비교 앵커다.

260907 카드(robotwin_seen43_setup.html)는 데이터 준비 · 스모크 테스트 · 학습 제출(job 112772)까지만 다뤘고, 당시 학습은 RUNNING 상태로 실제 결과가 없었다. 이번 카드는 그 학습이 실제로 끝나고, 처음으로 unseen-7 평가 결과가 나온 시점을 다룬다.

미해결이었던 것: 평가 하네스(공식 evaluation/robotwin/eval_polict_client_openpi.py)는 구버전 RoboTwin 레이아웃을 가정한 플레이스홀더 경로(/path/to/your/robowin, ./task_config/)를 가지고 있어 허브 최신 체크아웃에 그대로 붙지 않는 상태였다.

2 작업 내용

학습 (job 112772)

sbmr 10 "bash script/train_robotwin_seen43.sh 8" --gres=gpu:8 -c 64 --mem 1600GB --qos=own --time 36:00:00 -J rt_seen43 데이터: lerobot_robotwin_eef_clean_50, 43 task / 2,150 episode 시작 checkpoint: lingbot-va-base (posttrain 체크포인트 아님 — 50 task 전부 학습된 걸 쓰면 unseen 누수) 32,000 step, 8 GPU own, 2026-09-08 02:00:18 → 12:24:32 (10h24m14s), 최종 ~1.16 s/it

마지막 구간(step ~31,970-32,000) loss: latent_loss 0.078~0.135, action_loss 0.0004~0.0016, grad_norm 0.04~0.08, lr 1.00e-05(decay 완료). step 32000에서 checkpoint 정상 저장 확인.

평가 하네스 배선

context.md의 미해결 항목("평가 배선: 경로 2줄 패치 + hold-out 7 러너")을 실제로 해소했다.

evaluation/robotwin/eval_polict_client_openpi.py - robowin_root 플레이스홀더 → ROBOTWIN_ROOT env(기본 ~/repos/Robotics/RoboTwin) + is_dir() assert - task_config 경로: ./task_config/{cfg}.yml (구버전) → CONFIGS_PATH/{cfg}.yml (envs/_GLOBAL_CONFIGS.py가 가리키는 env_cfg/task_config/) evaluation/robotwin/deploy_lingbot_va.yml (신규) - policy config: task_config=demo_clean(eval_instruction: seen), video_guidance_scale=5, action_guidance_scale=1(OFF) script/eval_robotwin_task.sh, script/eval_robotwin_seen43.sh (신규) - 7 unseen task를 GPU당 1개씩 병렬 실행하는 launcher - 태스크 시작마다 20초 stagger (서버+시뮬 클라이언트 쌍이 각각 10GB transformer 로드 + Vulkan/OptiX state 빌드 → 동시 시작 시 충돌) evaluation/robotwin/summarize_seen43.py (신규) - res.json을 모아 Zero-WAM 논문 baseline과 delta 테이블 출력

디버깅 → 본 스윕까지

로그인 노드는 libGL이 없어 RoboTwin envs가 open3d import에서 실패 — --container=nvcr.io/nvidia/isaac-lab:2.2.0이 필수임을 확인 (job 113256 own/CANCELLED, 113265 extra/PREEMPTED, 둘 다 QOS·컨테이너 시행착오). 이후 job 113399(extra, 17분 완료)로 3-seed 타이밍을 먼저 확인한 뒤, 본 스윕 job 7개(rt32k_*, extra QOS, 태스크당 1 GPU, 100 rollout, seed 0, step 32000)를 제출했다.

3 결과

TaskOurs (seed 0)Paper baselineDelta상태
place_bread_basket60.00% (60/100)17.33%+42.67p완료
place_object_scale34.00% (34/100)6.17%+27.83p완료
place_empty_cup62.00% (62/100)42.33%+19.67p완료
open_microwave31.9%* (15/47)29.33%~+2.6p*진행중 (RUNNING, seed 10067)
stamp_seal4.00% (4/100)3.67%+0.33p완료
stack_blocks_three0.0%* (0/53)0.00%0.0p*진행중 (RUNNING, seed 10054)
move_stapler_pad1.00% (1/100)23.33%-22.33p완료
평균 (완료 5개)32.20%18.57%+13.63p-

* 진행중 태스크의 수치는 마지막 관측 시점(로그 tail)의 잠정치이며 100 rollout 완료 전까지 변동 가능. 평균 행의 paper baseline(18.57%)은 완료된 5개 태스크만의 논문 수치 평균으로 직접 계산한 값 — summarize_seen43.py가 기본 출력하는 AVERAGE 행은 7-task 전체 논문 평균(17.45%)을 그대로 써서 5개만 완료된 지금 시점엔 대상 불일치가 있다.

큰 개선: place_bread_basket(+42.67p), place_object_scale(+27.83p), place_empty_cup(+19.67p) 3개 태스크는 논문 baseline 대비 명확히 높다.
큰 하락: move_stapler_pad는 100 rollout 중 1회만 성공(1.00%)해 논문 baseline(23.33%) 대비 -22.33p — 이번 5개 중 유일한 역전 사례.

4 Takeaway

의미

평균만 보면 zero-shot 일반화가 논문 baseline보다 뚜렷이 좋아 보이지만(+13.6p, 완료 5개 기준), task-level 분산이 극심해서 "일반화가 잘 됐다"로 단순화할 수 없다. 논문 baseline 자체도 태스크별로 0~42%로 넓게 퍼져있어(태스크 난이도가 상이), 우리 재현이 그 분산 구조를 그대로 물려받으면서 일부는 크게 웃돌고(place_bread_basket) 일부는 역전(move_stapler_pad)됐다. 재현 실험이 baseline column을 향해 튜닝된 게 아니라 독립 학습이므로, task별 개별 성패가 재현의 신뢰도를 보여주는 더 정직한 신호다.

또한 지금 수치는 seed 0 하나뿐이다 — 논문은 3-seed 평균이라, 특히 move_stapler_pad(1/100)처럼 절대 성공 수가 낮은 태스크는 seed 간 분산이 델타 부호 자체를 바꿀 수 있다.

5 Next Steps

미해결 한계

open_microwave(job 113732), stack_blocks_three(job 113736) 2개 태스크가 아직 RUNNING(8시간53분+ 경과) — 완료 시 7-task 전체 평균을 다시 계산해야 정확한 비교가 된다. move_stapler_pad의 -22.33p 하락은 원인 미분석 상태 — rollout 실패 영상을 확인해 grasp 실패인지 위치 인식 실패인지 failure mode를 특정해야 한다.

다음 실험

context.md 미결정 사항 그대로: 7-task 전부 완료 후 2번째 seed를 최소 하나 더 돌려 task별 분산이 seed 노이즈인지 실제 일반화 격차인지 구분(특히 move_stapler_pad, stamp_seal처럼 절대 성공 수가 한 자릿수인 태스크). 중간 체크포인트(4k/8k/…/28k)로 unseen-7 평가를 추가해 학습 곡선 대비 zero-shot 성능 추이(과적합 시작 지점)를 확인.