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 표 확보.
3 개 스크립트 작성 (모두 원본 repo 코드 무수정 원칙 유지):
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 회복.scripts/launch_closed_loop_sweep.sh — 16 task 를 sbmr 5 로 일괄 제출 (--gres=gpu:2 -c 28 --mem=400GB --qos=core-extra).scripts/aggregate_closed_loop.py — 16 task 의 progress.json 모아 success_rate 표 출력.eval.py 가 모든 task 의 결과를 단일 progress.json 에 쓰는 race condition 회피 위해 task 마다 --args.save_dir=runs/evaluation_per_task/<TASK> 로 분리.
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_pose → plan_pose rename |
(preventive) | Multi-task |
pad_qpos → pad_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 |
attn_impl=sdpa: api_memer.py 의 hard-coded flash_attention_2 회피 (robomme env 에 flash_attn 없음).merge_key_frame_paths empty-dict guard: 첫 호출 IndexError 회피.history_config.txt 누락: VLA checkpoint zip 압축 해제 시 빠진 symbolic-grounded-subgoal.yaml 1줄 작성.CUDA_VISIBLE_DEVICES=0 (relative) 로 통일.XLA_PYTHON_CLIENT_PREALLOCATE=false: 다른 jobs 가 같은 physical GPU 공유 시 75% preallocate 가 OOM 유발 → grow on demand.-c 36 → -c 28 로 수정.ErrorIncompatibleDriver 로 client process 죽음 → bash restart loop 가 같은 server 에 client 만 재기동, progress.json 의 done episode 자동 skip.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%
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 진행 중.
CUDA_VISIBLE_DEVICES=0,1 사용이 안전.render_with_memory.py 로 만든 비디오 몇 개 sample 확인. exec_start_idx 매핑 + sim step → 호출 매핑 정확한지.260427/exp-memer_lora_binfill_ep0.md (VLM-only)260428/exp-binfill_ep0_closed_loop.md260428/setup-robomme_b200_cluster.mdscripts/run_eval_with_mplib_patch.pyscripts/run_closed_loop_one_task.sh, scripts/launch_closed_loop_sweep.sh, scripts/aggregate_closed_loop.pyscripts/render_with_memory.pytmp/final_aggregate.txtruns/evaluation_per_task/<TASK>/symbolic-grounded-subgoal/ckpt79999/seed7/memer/