Index
2026-09-23 — Experiment

누름(press) 서브골 — VLA 라우팅 배선 + 3차 프로브

scene_bench | resume(type2) online eval — press appliance interaction

TL;DR

.58
3차 프로브 press 성공률
.01~.20
place_oc(주정책) 성공률
103/342
누름 포함 셀

1 배경 / 목적

resume online 파일럿 s0(잡 150578)이 누름 과제(train_1843) 첫 누름 서브골에서 ModuleNotFoundError: No module named 'molmobot_pi0'로 종료됐다 — 워커 PYTHONPATH가 스냅샷(src_s1)뿐이라 press 분기의 molmobot_pi0.eval.press_task import가 실패한 것. REMAINING_EPISODES를 못 찍어 babysitter가 "비정상 종료"로 보고 재제출 → 같은 곳에서 또 죽는 재시도 루프 직전에 중지됐다. 누름이 필요한 셀은 본 런 103/342칸(fd856246 93/132 · 61871a3e 10/210)이라 이 결함을 못 고치면 본 런의 30%가 전량 죽을 뻔했다.

기존 한계: 누름 경로는 온라인에서 한 번도 실행된 적이 없는 코드였다 — 프리플라이트는 계획·시드만 보고 실행 경로 import는 확인하지 않아 못 잡았다.

2 작업 내용

결함을 하나씩 잡을 때마다 1시간짜리 잡을 태우는 대신, 로그인 스모크(smoke_press.py, 빌드 96s + 5스텝, API $0)로 orchestrator와 같은 호출 순서를 끝까지 통과시키며 순서대로 해소했다.

#결함원인수정
①ModuleNotFoundError워커 PYTHONPATH가 스냅샷뿐press_task.py를 스냅샷 src_s1에 고정 복사, run_online 시작 시점 import 확인
②BaseMujocoTask.__init__ 인자 개수 불일치press_task가 센서 리팩터(2492a8f) 이전 molmo_spaces 기준super().__init__(env, exp_config)
③descendant_geoms() 키워드 인자 불일치인자명 변경visible_only=False
④판정 거리 inf — 누름이 절대 성공 불가버튼 바디가 자식 링크(..._1_2_5_button)인데 하네스는 GT uid 이름(..._1_0_5_button)만 탐색press_button_body — 가전 서브트리 탐색(datagen press_front와 동일 규칙)
⑤접근면 22%가 가전 뒤쪽기존 가전 중심 링 샘플링버튼 정면 접근(cos>0.5), 0.65/0.70/0.75/0.60m × 0/±10/±20°
⑥판정 기준이 datagen과 불일치벤치 판정(패널 접촉)은 datagen이 실제로 누른 자세도 못 알아봄datagen_press_judge — 손↔버튼 접촉 ≥1 또는 geom 거리 <3mm

판정 기준 재생 검증 — 20편

datagen 누름 구간(subtasks ok=True)의 로봇 자세를 씬에 대입·mj_forward로 재생해 벤치 판정과 datagen 판정을 비교했다.

가전누름 구간벤치 판정datagen 판정음성 대조
세탁기110110/5,275
건조기120120/3,973
커피머신9090/5,346
전자레인지110110/7,382
합계(20편)430430/21,976

벤치 판정의 최근접 거리는 2.6~5.3cm(중심점 거리라 실제 접촉에서도 3cm를 넘음), 접촉 0 — 즉 벤치 판정 기준으로는 datagen이 실제로 성공시킨 누름조차 전부 실패로 잡혔다. 사용자 결정(260923): "데이터 생성기 판정대로" 채택.

배선

orchestrator.run_episode(press_policy=None) — decision.skill == "press"면 그 서브골만 press_policy로 라우팅(register/goal/get_action_chunk), entry["policy_route"]에 기록. 워커는 새 스크립트 run_online_worker_press.sh로 같은 GPU에 두 번째 서버(:8801) 기동. 테스트 401건 통과.

3 결과

조건place_ocplace_oc_press
1차 기존 접근 · 벤치 판정(좁은 접촉)0/240/24
2차 정면 접근 · 벤치 판정(패널 접촉)0/243/24 (.13)
3차 정면 접근 · datagen 판정1/24 [.01, .20]14/24 (.58) [.39, .76]
참고: MolmoBot 벤치 200편.000 (최근접 29.7cm).370 (3.2cm)

3차 가전별(press): 세탁기 5/6 · 전자레인지 5/6 · 커피머신 3/6 · 건조기 1/6. 성공까지 스텝 중앙값 100(누름 horizon 300). 짝지은 비교 press>main 14칸 · main>press 1칸(건조기, 231스텝에 3mm 근접 — 우연 스침으로 보임).

핵심 발견: 누름 경로 결함 전부(①~⑥) 해소 후 0 → .58 — 모델을 바꾼 것 (place_oc → place_oc_press, 사용자 결정)과 하네스를 GT 규칙에 맞춘 것의 합이다.
한계: 벤치(.37)보다 낮은 것은 우리 씬 가전·버튼 주입이 벤치와 다르기 때문일 수 있다 — 벤치 수치로 튜닝하지 않고 기록만 한다.

4 Takeaway

의미

누름은 이제 "불가능"이 아니라 VLA 능력 범위 안의 측정 가능한 작업이 됐다. 특히 ④번 결함(버튼 자식 링크를 못 찾아 판정 거리가 무한대가 되는 것)은 예외조차 던지지 않고 조용히 0점을 내는 종류라 — ①~③이 먼저 명시적으로 터져줬기 때문에 드러났다는 점이 인상적이다. place_oc(주 정책)는 두 조건 모두 0이었으므로, 누름 서브골만 별도 체크포인트로 라우팅하는 결정이 필요했다는 근거가 확보됐다.

5 Next Steps

미해결 한계

건조기 1/6(10~22cm 최근접)으로 다른 가전 대비 낮음 — 원인이 접근 자세인지 모델 능력인지 미분리.

다음 작업

본 런 342칸(누름 포함 103칸)을 src_s2 스냅샷 + run_online_worker_press.sh 워커로 실행. 재생 검증은 datagen 성공 사례(ok=True)만 다뤘으므로, datagen 실패 누름에 대한 특이도는 음성 대조로 대신 확인된 상태를 유지.