Index
2026-08-26 — Progress

τ₀-native RoboTwin 2.0 posttrain 파이프라인 구축 및 학습 착수

tau-0-wm | RoboTwin 2.0 트랙 (dual-arm aloha-agilex, action_in_dim 20 유지)

TL;DR

36,724/54,000
Train Step (job 95687)
0
Mismatched Keys
0.29 s
브릿지 Call Latency
465 GB
데이터 (50 task×500ep)

1 배경 / 목적

naive τ₀-VAM RoboCasa 63.0% vs X-WAM released 75.3%의 −12.3pp 갭 원인이 "τ₀ pretrain(dual-arm, head/wrist 캠, rel-eef6d)과 RoboCasa(single-arm, exo 캠, sim)의 3중 임바디먼트 미스매치"로 좁혀졌다 (claude/260818/research-tau0_pretrain_embodiment.md). 이 가설을 검증하려면 τ₀ pretrain 토폴로지와 정합하는 환경 — dual-arm aloha-agilex + head/left/right 캠을 갖춘 RoboTwin 2.0 —에서 action_in_dim 20을 그대로 유지한 채 posttrain·평가해 pretrain 전이량을 다시 측정해야 한다. 앵커는 X-WAM released RoboTwin 성능 90.7%(demo_randomized, 50 task × 100).

기존 한계: 이 클러스터에서 RoboTwin 2.0(SAPIEN 3 / Vulkan 렌더)을 평가해본 사례가 없었고 X-WAM 팀도 착수 전이었음 — 데이터·코드 투자 전에 렌더 가능 여부부터 별도로 확인 (관련 카드: 260826-robotwin_vulkan_gate.html).

2 작업 내용

Vulkan 관문 통과 확인 후, 데이터부터 학습·평가까지 전 배관을 τ₀-native 20채널 포맷으로 구축했다.

데이터

소스: RoboTwin 공식 HF (TianxingChen/RoboTwin2.0), aloha-agilex_randomized_500 × 50 task 경로: ~/Datasets/RoboTwin2.0 (~465 GB, tmp/download_robotwin_tasks.sh nohup, 진행 중 task는 자동 skip 가드) HDF5 구조: /endpose/{left,right}_endpose (world xyz+quat wxyz), gripper(1=open), /observation/<cam>/rgb JPEG 바이트(320×240), instructions/episodeN.json (seen/unseen) X-WAM HF 데이터셋(RGB 없음)은 사용하지 않음

데이터셋 클래스 — data/robotwin_tau.py (RoboTwinTauDataset)

HDF5 직독 + JPEG 디코드(mp4 변환 불필요). X-WAM shim과 동일한 BASE_COORD_XFORM/ EEF_AXES_XFORM으로 base 프레임 변환, rot6d = R의 col0|col1, actions = τ₀ abs_eef_to_rela(body-frame delta) 33 step, state = 현재 abs 20ch, gripper 반전(τ₀: 1=close, state는 ×120). 검증: adjust_bottle 500 ep → 55,223 clips, 로드 0.09 s/sample, world↔τ₀ 왕복 오차 0 / quat 4e-10, rela_eef_to_abs 재구성 오차 1.2e-7 (추론 경로와 정합).

알려진 한계: X-WAM 변환 후 RoboTwin 평균 eef rot6d와 τ₀ pretrain 평균의 코사인 유사도 L −0.29 / R +0.34 — 정렬돼 있지 않음(z-score가 분포 평균은 맞추나 형태는 다름). native 실험 결과 해석 시 감안 필요.

학습·배포 설정

configs/tau_model/posttrain_robotwin.yaml — RoboCasa 레시피 + action_in_dim 20, relative/eef6d configs/deployment/tau_posttrain_robotwin.yaml — dual_arm=True 학습 예산: X-WAM RoboTwin SFT 40k step × eff 128 = 5.12M 샘플 → τ₀ eff 96 기준 54,000 step (5.18M, 3000의 배수 → 주기 저장과 정합) ≈ 16h @ 1.05 s/it

zmq 브릿지 — web_infer_utils/robotwin_zmq/server_zmq.py

X-WAM evaluation/X-WAM/deploy_policy.py의 와이어 포맷(proprio16 = [xyz, quat wxyz, grip]×2 base-frame / actions (T,16) 절대 pose)을 그대로 구현 → 클라이언트 측 수정 0. 내부: proprio16→state20 → TauPolicy.play(relative/eef6d → 절대 20ch) → rot6d→quat, gripper 재반전.

평가 스크립트 — scripts/eval_robotwin_tau.sh

broker + τ₀ 서버(GPU당 1) + robotwin_client(50 task, GPU 라운드로빈, PARALLEL_CLIENTS) → _result.txt 집계 → eval_summary.json. 전체 job을 isaac-lab 컨테이너로 실행. 스모크는 scripts/robotwin_sim_smoke.sh(expert play_once 렌더).

스모크에서 잡은 이슈 3건

1) task 이름 오타: X-WAM README의 shake_bottle_horiz → 실제 env/데이터셋 이름은 shake_bottle_horizontally 2) cross-env pickle 실패: τ₀ 서버(numpy 2.2)가 보낸 ndarray를 클라이언트 env(numpy 1.23.5)가 numpy._core 없음으로 언피클 실패 → robotwin env numpy 1.26.4로 상향 (2 피클 호환 shim 포함, sapien/open3d/scipy/mplib/curobo import 재검증 OK) 3) eval 스크립트 wait 버그: 클라이언트가 아니라 브로커/서버까지 기다려 job이 안 끝나던 문제 → 수정, 클라이언트 env에 tyro 누락도 보강

3 결과

항목결과Job
pretrained 로드 (action_in_dim 20)mismatched_keys: [] (전량 로드)-
데이터셋 단위검증 (adjust_bottle)55,223 clips, 왕복 오차 0, rel→abs 1.2e-7-
브릿지 왕복 (pretrain ckpt, ep0 관측)actions (32,16) finite, quat 노름 1.0000, 0.29 s/call-
zero-shot 거동32-step R-arm 경로 0.09 m (expert 0.53 m) — 미학습 정상 범위-
학습 스모크 (40 step, adjust_bottle)action loss 0.62 → 0.185-
E2E 평가 스모크 (isaac-lab 컨테이너)통과, 4분 56초, adjust_bottle 2 rollout, SR 0/2(zero-shot 예상값)95671
worker sim 렌더 스모크COMPLETED, 1분 26초95634
본 학습 (54k step, own QOS 8 GPU)RUNNING, 36,724/54,000 step, loss 0.18→0.10대, 1.02 s/it95687
워처 평가 18k (10 task × 20)preempt로 중단 → 재제출 대기95876→95984(PENDING)
워처 평가 36k (10 task × 20)취소 → 재제출 대기95982→95985(PENDING)
핵심 발견: τ₀ pretrain 가중치가 RoboTwin embodiment에서 재초기화 없이 온전히 로드됨 — RoboCasa 실험(action-space 단절)과 근본적으로 다른 조건에서 posttrain이 진행 중이다.
미완료: 18k/36k 중간 평가가 preempt/cancel로 두 차례 중단되어 재큐잉된 상태(PENDING) — 학습 곡선 중간 지점의 SR 수치는 아직 없음. 54k 최종 50×100 풀 평가로 X-WAM released 90.7% 앵커와 비교 예정.

4 Takeaway

의미

τ₀ native 포맷으로 posttrain하는 전 배관(데이터→브릿지→학습→평가)이 준비 완료됐고, 특히 pretrained 가중치가 재초기화 없이 전량 로드된다는 사실이 확인됐다. 이는 RoboCasa 실험에서 겪었던 action-space 단절이 없는 조건이라는 뜻으로, 54k 최종 평가 결과가 나오면 "embodiment 정합 시 τ₀ pretrain이 실제로 얼마나 전이되는가"를 RoboCasa(63.0% vs 75.3%, −12.3pp)와 직접 대조할 수 있다. 갭이 크게 줄어들면 embodiment mismatch 가설이 강화되고, 여전히 갭이 남으면 sim 도메인 차이나 eef 자세 규약 불일치(코사인 유사도 L −0.29 / R +0.34) 쪽으로 원인을 좁혀야 한다.

5 Next Steps

미해결 한계

18k/36k 중간 평가 job이 두 차례(preempt 1회, cancel 1회) 중단돼 재제출 대기 중(95984, 95985 PENDING) — 학습 곡선 형태를 아직 확인 못함. eef 자세 규약 불일치(z-score 정규화가 분포 형태까지 맞추진 못함)가 native 실험 해석에 노이즈로 남아있음.

다음 작업

1) 18k/36k 재제출 평가 완료 확인 → 학습 곡선 추세 파악. 2) 54k step 완료(약 5시간 후 예상, 현재 36.7k) → 50 task × 100 풀 평가 → X-WAM released 90.7% 앵커와 비교, RoboCasa 갭(−12.3pp)과 대조. 3) 결과에 따라 eef 자세 규약 정렬 변형(τ₀ pretrain 평균 자세에 맞춘 고정 회전) 실험 여부 결정.