Index
2026-08-27 — Analysis

RoboTwin 2.0 full-joint sweep 1차 — 88/100 완료, 평균 95.20% + worker hang 진단

Flex-π | job 96576 (full sweep) → job 97455 (재개, PENDING)

TL;DR

95.20%
88 units 평균
94.6%
논문 수치
88/100
완료 units
12
hang 미완
398.6ms
평균 추론/call

1 배경 / 목적

공개 ckpt flexpi-robotwin(step_048060)로 논문 RoboTwin 50-task 수치(94.6%)를 이 클러스터에서 재현하는 것이 목표. 환경 구축(flexpi-eval env 클론)과 smoke 검증(lift_pot 2/2), OIDN → optix 디노이저 우회는 260826-robotwin_eval_setup.html에서 완료. 이번 카드는 그 뒤 제출한 첫 full sweep(job 96576)의 실제 결과와, 12h wall-time을 다 쓰고도 미완으로 끝난 원인 분석을 다룬다.

질문: (a) 논문 수치를 이 클러스터·env 조합에서 재현할 수 있는가, (b) 12h cap 내에 100 units(50 task × 2 phase)를 다 못 끝낸 이유가 성능 문제인지 다른 결함인지.

2 작업 내용

job 96576: scripts/sweep_flexpi_robotwin_worker.sh로 50 task × {clean, random} × 100 ep = 100 units 제출. own QOS, 8 GPU × 2 worker/GPU, 12h cap, --container=nvcr.io/nvidia/isaac-lab:2.2.0.

regime: full-joint (present=(video,dino,pointmap)=True, denoise=(action,video,dino,pointmap)=True) num_inference_steps=4, replan_steps=32, instruction_type=unseen denoiser: ROBOTWIN_RT_DENOISER=optix (OIDN은 B200 미지원 — 260826 카드에서 검증) 96개 worker 전부 같은 regime 로그 확인 = 논문 헤드라인 수치와 동일 설정

완료 후 sacct·worker 로그를 task별/GPU별로 집계해 성공률과 미완 unit의 마지막 로그 시각을 대조하는 방식으로 hang 여부를 분리했다. RoboTwin expert-check가 던지는 target_pose cannot be None 류 예외(seed 스킵, 벤더 코드가 자체 처리)는 traceback이 있어도 hang과 무관함을 별도로 확인.

3 결과 (수치)

성공률 — 88 units 완료

n평균
clean4695.13%
random4295.29%
전체8895.20%
논문 (50 task, 100 units)10094.6%

두 phase 모두 완료된 42 task 평균 95.04%. 100% 달성 21 units. 최저 구간: stack_bowls_three clean 77%, place_can_basket clean 78%, turn_switch clean 80%, blocks_ranking_size clean 81%, hanging_mug random 81%. 추론 지연은 9,127회 호출 평균 398.6 ms/call(min 260 / max 829; eager, compile off, 4 steps, full-joint) — 260826 smoke의 397.5 ms/call과 일치.

미완 12 units — worker hang (성능 저하 아님)

job은 TIMEOUT(12:00:00)로 종료됐지만, 마지막 완료 18:34:38 이후 강제종료(23:24)까지 4h50m 동안 완료 0건 — 느려서가 아니라 멈춰서 시간을 다 썼다.

GPU멈춘 unit마지막 로그
0adjust_bottle random, beat_block_hammer random12:21 (step 95/200)
2open_microwave clean, rotate_qrcode clean13:01 (step 511/800), 15:30 (step 31/400)
5place_bread_skillet clean, put_object_cabinet clean13:02 (step 137/500)
7place_phone_stand random, move_pillbottle_pad random—
패턴: GPU 0/2/5/7에 정확히 2개씩, GPU 1/3/4/6은 0개. max_tasks_per_gpu=2이므로 한 GPU를 공유하는 두 worker가 함께 물린 것 — task별 버그가 아니라 GPU 단위 wedge로 보인다(한쪽이 물리면 co-tenant도 결국 같이 물림). 롤아웃 중간 step에서 정지 후 로그 한 줄도 없음. 이 8개 때문에 나머지 phase 4개는 launch조차 못 해 총 12 units 미완.
무해한 오류 구분: 로그의 Error: target_pose cannot be None / 'NoneType' object is not subscriptable traceback 12건은 RoboTwin expert-check의 seed 스킵(벤더 코드가 잡고 다음 seed로 진행)이며 hang과 무관.

4 Takeaway

의미

재현은 성공 방향 — 88 units 평균 95.20%로 논문 94.6%를 이미 상회. 남은 12개가 최종 평균을 크게 흔들 규모는 아니다(12개 전부 0%여도 전체 83.8%, 전부 95%면 95.2% 유지 — 어느 쪽이든 결론은 안 바뀜).

파이프라인의 실질 한계는 성능이 아니라 hang이다. max_tasks_per_gpu=2가 원인 후보 1순위지만, optix 디노이저 + 2 proc/GPU 조합이 트리거인지는 대조군이 없어 단정할 수 없다 — tau(X-WAM 하네스)의 RoboTwin eval도 2 client/GPU였지만 그쪽은 OIDN이 애초에 작동 안 하던 상태였어서 조건이 다르다. 변수를 분리하려면 별도 실험이 필요.

5 Next Steps

진행 중

job 97455 flexpi_rt_resume (제출됨, PENDING/QOSMaxCpuPerUserLimit): 같은 출력 dir에 RESUME_DIR로 재개, 남은 12 units만, NUM_GPUS=4 MAX_TASKS_PER_GPU=1, own 4 GPU, 6h cap. 완료된 88개는 resume scan이 스킵.

미해결 한계

hang의 정확한 근본 원인 미규명 (optix denoiser vs 2-proc-per-GPU 경합 vs 다른 원인, 대조군 부재). 재발 시 대응: worker별 진행 워치독(마지막 로그 mtime 기준 kill+재시작) 도입 또는 max_tasks_per_gpu=1 고정.

다음 실험

1. job 97455 완료 후 100/100 최종 집계 → 논문 94.6% 대비 확정.
2. action-only(VLA) sweep (사용자 결정: 97455 완료 후): REGIME=action으로 같은 ckpt 50 task sweep. Flex-π 핵심 주장(한 체크포인트, regime 선택)의 검증 + 지연 대조(398ms → 100~150ms 예상).