Index
2026-09-17 — Engineering

MolmoBot 정책 websocket serving 지원 추가

MolmoBot | scene_bench 온라인 하네스 연동 준비 | serve.py

TL;DR

1
파일 변경
+19
라인
0
기존 경로 변경

1 배경 / 목적

MolmoBot(F=2, goal-conditioned) 정책의 지금까지의 모든 평가 — hand-off replace, HardBench(Pick/PnP/NextTo), press bench 등 — 는 eval.py가 정책 객체를 프로세스 안에서 직접 생성해 호출하는 in-process 방식(use_policy_server=false)으로만 수행됐다. 반면 scene_bench의 online harness는 정책을 별도 프로세스로 띄워 websocket으로만 연결하는 구조라, 지금 상태로는 MolmoBot 체크포인트를 scene_bench 하네스에 붙일 방법이 없었다.

serve.py는 이미 pi0.5(type == "pi")에 대해서는 websocket 서빙 경로를 갖고 있었지만, MolmoBot 타입 분기는 없어서 Invalid policy type으로 떨어지는 상태였다.

기존 한계: MolmoBot 체크포인트는 in-process 호출만 가능 — 정책을 별도 서버로 띄워 외부 하네스(scene_bench)와 연결하는 경로가 없었음

2 작업 내용

MolmoBot-Pi0/molmobot_pi0/eval/real/serve.py의 main()에 elif policy_cfg.type == "molmobot": 분기를 추가했다. 새 코드를 짜는 대신 eval.py:281-286에 이미 있던 in-process 생성자 호출을 그대로 옮겨온 것이 핵심 — 같은 체크포인트가 in-process/websocket 두 경로에서 동일하게 동작함을 보장한다.

파일: MolmoBot-Pi0/molmobot_pi0/eval/real/serve.py (main 함수, +19줄) elif policy_cfg.type == "molmobot": from molmobot_pi0.eval.policies.molmobot import MolmoBotGoalPolicy if policy_cfg.model_dir is not None and policy_cfg.checkpoints is not None: assert len(policy_cfg.checkpoints) == 1 ckpt_dir = maybe_download( policy_cfg.model_dir.rstrip("/") + "/" + str(policy_cfg.checkpoints[0]), exclude="optimizer.pt") else: ckpt_dir = maybe_download(policy_cfg.model_dir) policy = MolmoBotGoalPolicy( checkpoint_dir=str(ckpt_dir), cameras=policy_cfg.cameras, max_joint_delta=policy_cfg.max_joint_delta, num_flow_steps=policy_cfg.get("num_flow_steps")) policies.append(policy) model_names.append(policy_cfg.model_name) 변경 근거: eval.py:285의 in-process 생성자 호출과 동일 구성 — 신규 로직 없이 기존 경로 미러링 기존 type == "pi" (pi0.5) 경로: 무수정

체크포인트 경로 해석은 pi0.5 경로와 동일한 규칙을 따른다 — model_dir + checkpoints가 모두 주어지면 단일 체크포인트(len == 1 assert)를 optimizer.pt 제외하고 다운로드, 아니면 model_dir 자체를 그대로 사용.

3 결과

2026-09-17 커밋(aaa3f8d)으로 병합됨. 변경 범위는 serve.py 1개 파일, +19줄 — 신규 코드가 아니라 기존 in-process 생성자 호출의 재배치이므로 로직 리스크는 낮다.

확인 안 됨: 이 커밋에는 실제 websocket 연결 테스트나 scene_bench 하네스 연동 스모크 기록이 없다 (claude/ 로그·git log 어디에도 실행 결과 없음) — 코드 추가만 완료된 상태, 동작 검증은 미기록.

4 Takeaway

의미

지금까지 MolmoBot(F=2) goal-conditioned 정책의 모든 평가는 eval.py in-process 경로에 갇혀 있었다. 이 변경으로 같은 체크포인트를 websocket 서버로 노출할 수 있게 되면서, MolmoBot 평가가 scene_bench의 online harness라는 외부 벤치마크 경로로 확장될 여지가 생겼다. 작업 자체는 작지만(19줄, 기존 로직 미러링), pi0.5에만 있던 서빙 능력을 MolmoBot에도 동등하게 맞춘다는 점에서 두 정책 타입 간 평가 인프라 격차를 좁힌 변경이다.

5 Next Steps

미해결 한계

실제 websocket 연결/scene_bench 하네스 연동이 검증되지 않았다. 로그인 노드에서 스모크할 때는 함정 25번(포트 8000 충돌)에 유의해 POLICY_SERVER_PORT를 빈 포트로 지정해야 한다.

다음 작업

serve.py를 type=molmobot으로 띄운 뒤 scene_bench 하네스에서 실제 접속·rollout까지 스모크 테스트 필요. 성공하면 scene_bench 벤치 결과를 별도 카드로 기록.