ROBOTWIN_RT_DENOISER=optix(sapien 번들 OIDN 2.0.1이 sm_100 미지원)는 X-WAM submodule 작업트리와 flex-pi 로컬 패치에만 있음. 공유 에셋 심링크 사고(9/2, X-WAM 트리 URDF 7종 변조 → lift_pot 0~4%)도 같은 구조적 원인.~/Datasets/RoboTwin2.0(구 layout, 50 task × clean_50/randomized_500)은 새 로더가 못 읽음. HF 새 포맷은 demo_clean.zip만 있고 randomized는 없음 → upstream이 9/5에 삭제한 변환기(git show 96c1fea^:scripts/process_data_xpolicylab.py)를 복구해 로컬 사본을 변환.RoboTwin 2.0 실험이 flex-pi, X-WAM 계열, tau-0-wm, FastWAM, ImageWAM, lingbot, FlowWAM 등에 흩어져 있고 각 레포가 시뮬레이터를 따로 vendoring해 왔다. 2026-09-07 upstream main(HEAD 96c1fea)을 새로 clone해 학습·평가 hub로 삼으려는 시점에 (1) 기존 처리 방식, (2) 그 타당성, (3) 더 나은 구조를 점검했다. 코드 변경 없음(XPolicyLab submodule init만).
scripts/eval_policy*.py, env_cfg/, _install.sh, XPolicyLab submodule(c37109c) 구조, git log.claude/context.md, 260826 feasibility plan, 260902 asset breakage analysis, docs/ROBOTWIN.md, README.vendor.md, worker 스크립트 3종, Hydra manager, _base_task.py diff.diff -rq; task_config·instruction diff; 해당 upstream 커밋 확인.load_xspark_v1), HF TianxingChen/RoboTwin2.0 트리.robotwin/flexpi-eval 버전, ~/template.sh·~/slurm_commands.sh.| 항목 | 방식 | 비고 |
|---|---|---|
| 시뮬 코드 | third_party/RoboTwin vendoring, upstream bf44be51 + 로컬 패치 7파일(디노이저 env, step-limit env, pkl2hdf5 RGB 등), upstream policy/* 삭제 | README.vendor.md |
| 에셋 | X-WAM 트리 심링크 → 9/2 변조 사고 → HF 재다운 assets_own 전용 사본. background_texture(11 GB)만 아직 심링크 | lift_pot 4%/0% vs 100% 이상치로 발견 |
| env | flexpi-eval = robotwin clone + flexpi deps(torch 2.8.0+cu129). 정책·시뮬 한 프로세스 | 원본 env는 tau 잡이 사용 중 |
| 평가 루프 | 자체 Hydra MULTIRUN manager → eval_robotwin_single.py → vendored script/eval_policy.py in-process | policy/flexpi_policy 심링크 |
| 클러스터 | isaac-lab 2.2.0 컨테이너, VK_ICD, LD_LIBRARY_PATH(시스템 lib 우선), PYTHONNOUSERSITE, ffmpeg 심링크, ROBOTWIN_RT_DENOISER=optix | smoke 96555/96564 |
| 프로토콜 | 50 task × {clean, random} × 100 ep, unseen 양쪽, 4 step, replan 32, Flex-π 절반 step limit, 1 worker/GPU | 2 worker/GPU는 8 unit hang |
| 성과 | full-joint 94.15% / action-only 94.93% / clean-50 avg 70.68 | 논문 94.6 |
| 레포 | RoboTwin 위치 / 커밋 | assets | 평가 방식 | 실행 가능 |
|---|---|---|---|---|
| X-WAM | submodule @ c3ddfa8, 디노이저 패치 미커밋 | 유일하게 완비(+curobo) | ZMQ broker/server/client(upstream eval_policy 대체) | 가능 (자체 미착수) |
| X-WAM-action/-metaview | 핀만, 미초기화 | 없음 | md5 동일 사본 | 불가 |
| X-WAM_MoT / Delta_action | X-WAM 심링크 | 공유 | 동일 사본, 미사용 | — |
| tau-0-wm | X-WAM 트리 직접 참조(+쓰기) | 차용 | X-WAM ZMQ + 자체 server_zmq | 리더보드 수치 산출 c2c 70.68 / c2r 33.15, X-WAM sft 앵커 82.1(논문 90.7) |
| FastWAM | vendored bf44be51 | 없음 | Hydra in-process | 불가 step-limit 파일·policy 경로 불일치 |
| ImageWAM | vendored bf44be51(디노이저 패치 없음) | _download.py만 | Hydra in-process | 불가 Tencent 경로 dangling |
| lingbot-vla-v2 / lingbot-va | 외부 checkout placeholder | — | websocket 서버 + 클라이언트 | 미실행 |
| FlowWAM | 외부 $ROBOTWIN_ROOT, 소스 무수정 | — | HTTP/msgpack + upstream eval_policy | 미실행 |
| flex-pi | vendored bf44be51 + 패치 | assets_own | Hydra in-process | 94.15% 재현 |
timeout)는 tau 스크립트 하나에만.| 변경 | 내용 | 영향 |
|---|---|---|
| 구조 | script/→scripts/, task_config/→env_cfg/task_config/, policy/ 삭제 → XPolicyLab submodule | 기존 vendored 경로와 비호환 |
| 데이터 포맷 | XPolicyLab v1.0 HDF5(vision/cam_head/colors, state/, action/), episode_0000000.hdf5 | 로컬 구 layout(observation/head_camera/rgb, joint_action/vector)은 새 로더가 못 읽음 |
| 평가 코드 | 렌더/물리 동일. open_laptop, put_object_cabinet, place_object_scale에 arm_tag 프리셋(e154702) | 3 task는 새 코드로 재평가해야 비교 가능 |
| instruction | 10개 task 문장 정리(41995f7) | unseen 분포 변화 |
| 기본 프로토콜 | demo_clean=seen, demo_randomized=unseen(ba23672) | flex-pi는 양쪽 unseen → hub에서 프리셋 명시 필요 |
| requirements | torch==2.4.1 pin | B200 불가 → robotwin env(torch 2.8) 재사용 |
| 소스 | 포맷 | 비고 |
|---|---|---|
~/Datasets/RoboTwin2.0/dataset/<task>/aloha-agilex_{clean_50,randomized_500} | 구 layout, 6.5 GB/task | 변환 필요 |
HF dataset/<task>/demo_clean.zip | 새 layout ≈292 MB/task | scripts/download_xpolicylab_data.sh |
HF aloha-agilex_randomized_500.zip | 구 layout 5 GB/task | 새 포맷 randomized는 HF에 없음 |
HF lerobot_dataset/RoboTwin_lerobot_v{21,30}.zip | 3.9 / 6.7 GB | 공식 LeRobot |
변환기 scripts/process_data_xpolicylab.py | 96c1fea에서 삭제, git show 96c1fea^:…로 복구 | 구 layout → v1.0 변환 확인(observation/joint_action/endpose 읽음) |
맞았던 것: 컨테이너·Vulkan·optix·ffmpeg·1 worker/GPU 레시피(검증 완료), 프로젝트별 불변 에셋 원칙, 결과 판독 시 정책 실패와 환경 실패 구분. 이 노하우는 hub로 그대로 이식할 자산.
틀렸던 것: 정책 레포마다 시뮬을 vendoring하고 정책·시뮬을 한 env에 넣은 구조. 레포 간 수치 비교 불가, 패치 유실 위험, 공유 에셋 사고, 정책마다 sapien env clone. upstream이 XPolicyLab(정책 서버/시뮬 클라이언트 분리, 어댑터 표준)으로 옮겨간 지금이 통합 적기.
robotwin 하나(eval_env_conda_env), 정책 env는 각 레포 것(policy_conda_env). 평가는 scripts/eval_policy.sh multitask가 GPU pool에 task별 policy server + sim client를 띄움(같은 pod 내 local 모드; 원격 serve 모드는 worker ingress 차단이라 불가). 결과 경로 eval_result/<task>/<policy>/<task_config>/<ckpt>/<ts>에 ckpt가 들어가 9/2 매핑 혼동이 구조적으로 사라짐.HF 에셋 다운로드(objects 3.7 + embodiments 0.2 + background 11 GB) 후 읽기 전용. robotwin env에 XPolicyLab editable + websockets/msgpack. _base_task.py 디노이저 env 패치 1줄, ffmpeg 심링크. demo_policy로 EVAL_ENV_TYPE=debug(로그인, GPU 불필요) → worker 1 GPU sim smoke 2 ep.
변환기 복구 → adjust_bottle 1 task → HF demo_clean.zip과 대조 → 50 task × {clean_50, randomized_500} CPU sbatch 변환. LeRobot 변환은 hub에서 1회, HF_LEROBOT_HOME NAS 공용.
X_WAM upstream 어댑터 + 사용자 ckpt로 8 task smoke → tau 82.1 앵커와 대조. Flex-π는 create_policy.sh flexpi + model.py(flex-pi deploy_policy 이식) → 94.15% 프로토콜로 재검증.
leaderboard(upstream step limit, clean=seen/random=unseen) vs paper-repro(unseen/unseen, 절반 step limit)를 config로 명문화. 디노이저·RoboTwin/XPolicyLab 커밋·assets 해시를 결과 옆에 기록. tau의 timeout stall 가드를 스케줄러에 이식.
X_WAM 어댑터 action_type=ee의 RoboTwin aloha_agilex 지원, ws 서버 컨테이너 pod 포트 바인딩, 변환본 vs HF demo_clean 동일성.