Index
2026-08-28 — Analysis

Flex-π RoboTwin full-joint 재현 최종 확정 — 94.15% (논문 대비 −0.45pp)

flex-pi | job 97455 재개 완료, 100/100 units 최종 집계 + worker hang 가설 검증

TL;DR

94.15%
최종 평균 SR
-0.45pp
vs 논문 94.6%
100/100
완료 units
53.5%
최저 task (open_microwave)

1 배경 / 목적

이전 카드(260827-robotwin_sweep_results.html)에서 job 96576 첫 full sweep이 100 units 중 88개만 완료(평균 95.20%)한 채 12 h wall-time에 걸려 TIMEOUT됐다. 원인은 성능 저하가 아니라 GPU 단위 hang — max_tasks_per_gpu=2로 co-tenant worker가 함께 물려 4h50m 동안 완료 0건이 발생했고, GPU 0/2/5/7에 정확히 2개씩 wedge된 패턴이 관찰됐다.

이번 작업의 목적은 두 가지: ① 남은 12 units를 재개해 100/100 최종 논문 재현 수치를 확정하는 것, ② max_tasks_per_gpu=1로 축소했을 때 hang이 재발하는지 확인해 hang 원인 가설을 검증하는 것.

기존 한계: 88/100 units의 95.20%는 어려운 task 12개(open_microwave, put_object_cabinet, place_bread_skillet 등)가 통째로 빠진 부분집합 평균이라 최종 수치로 쓸 수 없었다.

2 작업 내용

job 97455 (flexpi_rt_resume)로 96576과 같은 출력 디렉토리에 RESUME_DIR 지정, 완료된 88개는 resume scan이 자동 스킵하고 남은 12 units만 재실행. hang 재발 여부를 보기 위해 worker 배치를 GPU당 1개로 축소했다.

job 97455 flexpi_rt_resume scripts/sweep_flexpi_robotwin_worker.sh RESUME_DIR=<96576 out dir> NUM_GPUS=4 MAX_TASKS_PER_GPU=1 (96576 대비: 8 GPU × 2 worker → 4 GPU × 1 worker) qos=own, 4 GPU, 6h cap --container=nvcr.io/nvidia/isaac-lab:2.2.0, 디노이저 optix regime: full-joint (동일) 결과: 5h05m 소요, COMPLETED, hang 0건

집계 함정: manager가 쓰는 summary.csv는 재개 시 TASKS로 범위를 좁히면 그 부분집합(8 task)만 담고 __overall__ 행도 부분집합 평균이 된다. 최종 100/100 전체 수치는 <out>/<task>/_result_{clean,random}.txt 100개 파일을 직접 파싱해 집계해야 했다 (tmp/final_results_fulljoint.{md,json}).

3 결과

최종 집계 (100 units, full-joint)

Splitn평균 SR
clean5093.88%
random5094.42%
전체10094.15%
논문 (참조)—94.60%

재개분 12 units 평균은 87.6%로 1차 88 units(95.20%)보다 낮다 — 남아 있던 task들이 원래 더 어려운 축(open_microwave, put_object_cabinet, place_bread_skillet)이었기 때문에 전체 평균이 95.20% → 94.15%로 내려갔다.

하위 10 task (두 phase 평균)

taskmeancleanrandom
open_microwave53.5%50%57%
stack_bowls_three79.0%77%81%
turn_switch81.5%80%83%
blocks_ranking_size82.5%81%84%
hanging_mug83.0%85%81%
place_can_basket83.5%78%89%
place_object_basket87.5%86%89%
click_alarmclock88.0%84%92%
put_object_cabinet90.0%90%90%
rotate_qrcode90.0%91%89%
재현 성공: 논문 94.6% 대비 −0.45pp. 100% 달성 task 10개(grab_roller, move_pillbottle_pad, move_playingcard_away, pick_dual_bottles, place_cans_plasticbox, place_container_plate, place_empty_cup, shake_bottle, shake_bottle_horizontally, stack_blocks_two).
이상치: open_microwave만 53.5%로 나머지 49개 task(79~100%)와 크게 떨어짐 — 이 task만 94% 수준이었다면 전체 ~95.0%. Flex-π vendored _eval_step_limit.yml의 step limit이 800(upstream 1500의 절반)이라 시간 초과로 실패했을 가능성 있으나 미확인.
hang 가설 검증: GPU당 worker 1개로 바꾼 재개(job 97455)는 5h05m 동안 hang 0건 — 1차의 max_tasks_per_gpu=2 wedge 패턴(GPU 0/2/5/7, 4h50m 무진전)과 대조되며 가설과 일치. 단, 대조군 없는 단일 시행이라 완전히 확정된 것은 아니다.

4 Takeaway

의미

Flex-π 공개 ckpt(step_048060)의 RoboTwin 2.0 50-task 논문 수치(94.6%)를 100/100 units 전체에서 94.15%(−0.45pp)로 확정 재현했다. 이 클러스터 환경(OIDN 미지원 → optix 우회, 축소된 step limit)에서도 논문과 거의 동일한 성능이 나온다는 것을 확인했으므로, 앞으로의 실험(action-only 대조, 후속 학습 재현)에 대한 baseline으로 이 수치를 신뢰하고 사용할 수 있다.

동시에 파이프라인 운영 관점에서도 결론이 났다 — 실질 병목은 모델 성능이 아니라 인프라(worker hang)였고, max_tasks_per_gpu=1 고정이 실용적 해결책임을 재현 데이터로 뒷받침했다.

5 Next Steps

미해결 한계

① open_microwave 53.5% 원인 미확인 — step limit 800 소진 의심이나 rollout 로그로 직접 확인 필요. ② hang 원인은 max_tasks_per_gpu=2 가설과 일치하는 정황(대조: 96576 hang vs 97455 무hang)뿐, 통제된 A/B 실험은 아직 없음. ③ optix ↔ OIDN 디노이저 출력 분포 차이는 여전히 정량 미측정.

진행 중 — action-only(VLA) 대조군

job 99203 (flexpi_rt_action): REGIME=action, 같은 ckpt·같은 50 task × {clean,random} × 100 ep, NUM_GPUS=8 MAX_TASKS_PER_GPU=1, own 8 GPU, 12h cap. full-joint(94.15%, 398.6 ms/call) 대비 성공률·추론 지연(100~150 ms 예상) 대조가 목표 — Flex-π 핵심 주장(한 체크포인트, regime 선택만으로 성능/지연 트레이드오프)을 우리 환경에서 검증.