← Back
2026-04-30 · experiment

RoboMME Closed-loop Full Sweep — MemER LoRA × symbolic-grounded-subgoal VLA

TL;DR. 260428 에 BinFill ep0 1 episode closed-loop 동작 확인 후 (10 min, 1 success), 다음 단계로 16 task × 50 episodes = 800 episodes 풀 sweep 으로 확장. 목표: MemER (high-level VLM) + MME-VLA (low-level pi0.5) 파이프라인의 task-le…

배경/목적 (왜)

260428 에 BinFill ep0 1 episode closed-loop 동작 확인 후 (10 min, 1 success), 다음 단계로 16 task × 50 episodes = 800 episodes 풀 sweep 으로 확장. 목표: MemER (high-level VLM) + MME-VLA (low-level pi0.5) 파이프라인의 task-level success_rate 표 확보.

작업 내용 (어떻게)

Sbatch 인프라

3 개 스크립트 작성 (모두 원본 repo 코드 무수정 원칙 유지):

  1. scripts/run_closed_loop_one_task.sh — task 1 개당 1 sbatch job. 같은 worker 의 2 GPU 를 server (GPU 0) + client (GPU 1) 로 나눔. 자동 restart loop 로 SAPIEN Vulkan crash 회복.
  2. scripts/launch_closed_loop_sweep.sh — 16 task 를 sbmr 5 로 일괄 제출 (--gres=gpu:2 -c 28 --mem=400GB --qos=core-extra).
  3. scripts/aggregate_closed_loop.py — 16 task 의 progress.json 모아 success_rate 표 출력.

Per-task save_dir 격리

eval.py 가 모든 task 의 결과를 단일 progress.json 에 쓰는 race condition 회피 위해 task 마다 --args.save_dir=runs/evaluation_per_task/<TASK> 로 분리.

Sweep 진행 중 발견된 호환성 이슈 (5개 monkey-patch 추가)

scripts/run_eval_with_mplib_patch.py 의 mplib 0.2.1 ↔ ManiSkill 3.0.0b21 / robomme_benchmark 호환 패치를 sweep 진행하며 추가:

패치 증상 Task 영향
set_base_pose (numpy → Pose) 모든 task (260428 부터)
plan_screw (use_point_cloud drop + numpy → Pose) MoveCube fail at ep0 MoveCube
plan_qpos_to_poseplan_pose rename (preventive) Multi-task
pad_qpospad_move_group_qpos alias RouteStick fail at ep0 RouteStick
transform_goal_to_wrt_base_transform_goal_to_wrt_base (private rename + np↔Pose conv) RouteStick fail RouteStick
IK (numpy → Pose) RouteStick compute_IK_CLIK mismatch RouteStick

추가 운영 fix

자동 재시도

sbmr 5 (5회 retry) + 같은 sbatch 안의 client restart loop 로 다음 자동화: - PREEMPTED → sbmr 가 새 job 으로 재제출 - Vulkan crash → script 안에서 client process 재시작 (server 살림) - COMPLETED 0:0 + log.json 미존재 (= tee 가 exit code 가림) → 사용자가 수동 재제출

마지막 항목은 tee -a 의 한계. tee 의 PIPESTATUS 잡아서 nonzero 이면 sbmr requeue 가능하게 추후 개선 여지 있음.

결과 (수치)

16/16 task × 50 episodes = 800 closed-loop rollouts 완료 (runs/evaluation_per_task/<TASK>/symbolic-grounded-subgoal/ckpt79999/seed7/memer/{progress.json, log.json, videos/})

Task                    Success  Total     Rate
-----------------------------------------------
MoveCube                     44     50    88.0%
ButtonUnmask                 41     50    82.0%
PickHighlight                41     50    82.0%
VideoUnmask                  39     50    78.0%
PickXtimes                   38     50    76.0%
BinFill                      32     50    64.0%
SwingXtimes                  30     50    60.0%
VideoPlaceOrder              18     50    36.0%
VideoUnmaskSwap              18     50    36.0%
VideoPlaceButton             14     50    28.0%
VideoRepick                  11     50    22.0%
ButtonUnmaskSwap              9     50    18.0%
PatternLock                   8     50    16.0%
RouteStick                    5     50    10.0%
StopCube                      2     50     4.0%
InsertPeg                     2     50     4.0%
-----------------------------------------------
AVERAGE                                  44.0%

Tier 별 분포

Wall-clock

Visualization

scripts/render_with_memory.py 로 rollout video + memory FIFO thumbnail strip 합친 mp4 생성. BinFill ep0 / MoveCube ep0 검증 OK. 출력: runs/evaluation_per_task/<TASK>/symbolic-grounded-subgoal/ckpt79999/seed7/memer/videos_with_memory/<TASK>_ep<N>_with_memory.mp4. 800 ep 풀 렌더 background 진행 중.

의미 (Takeaway)

  1. MemER (high-level VLM grounded subtask) + MME-VLA (low-level pi0.5 + memory expert) 풀 파이프라인이 16 task 모두 동작. 기본 동작 검증 완료.
  2. Task 난이도와 sr 의 강한 상관: pick-and-place (MoveCube 88%, ButtonUnmask 82%) ≫ multi-step long-horizon (PatternLock 16%) ≫ precision peg-in-hole / timing-critical (InsertPeg 4%, StopCube 4%).
  3. mplib 0.2.x ↔ ManiSkill 3.0.0b21 호환 monkey-patch 6개 종합 정리. 다음 사용자가 이 cluster 에서 RoboMME 돌릴 때 단축 경로 제공.
  4. SAPIEN Vulkan instance leak (~27 ep 마다 process restart 필요) 발견. upstream 이슈로 보고 가치 있음.
  5. B200 cluster 의 cgroup GPU isolation 이 worker 마다 다름 (post-reset). Relative CUDA_VISIBLE_DEVICES=0,1 사용이 안전.

보완점 / 다음 (Next)

단기

중기

장기

참고 파일