이 파일을 다음 세션 시작 시 먼저 읽어주세요. 어디까지 됐고 / 다음에 무엇을 / 어떻게 / 어느 결정 대기 중인지 한 곳에.
RoboMME closed-loop sim 의 모든 환경 셋업과 자산 다운로드가 완료. 다음에 할 것은 policy server (GPU 0) + eval client (GPU 1) 두 프로세스를 연결해 BinFill ep0 1 episode closed-loop 을 실제로 굴리는 것. 사용자에게 구현 방식 (i/ii/iii) 결정을 받아야 진행 가능.
claude/260427/exp-memer_lora_binfill_ep0.mdYinpei/vlm_subgoal_predictor / memer/grounded_subgoal/checkpoint-1300
다운로드 + unzip 끝scripts/eval_robomme_memer_lora.py driver 작성 (Path B — 이 repo 의
Qwen3VLModelMemER 그대로 사용, sister repo renderer schema 호환 jsonl
출력)examples/robomme/subgoal_prediction/qwenvl/api_memer.py 는 git clean
상태 (3개 fix는 driver 의 monkey-patch 로 구현, 원본 안 건드림)<x, y> 좌표eval_outputs/robomme_BinFill_ep0/{predictions.jsonl, run_info.json,
visualization.mp4}긴 막힘 끝에 cluster Vulkan 동작 — 자세한 흐름은
setup-robomme_b200_cluster.md.
요약:
robomme conda env (Python 3.11) 생성 → sim/VLM 클라이언트 측.venv (uv) 생성 → JAX VLA 서버 측libglvnd libgl libglx libegl libopengl libdrm
libvulkan-loader (NVIDIA Vulkan ICD dispatch 활성화)mplib.pymp.Pose
변환)| 자산 | 경로 | 크기 | 용도 |
|---|---|---|---|
| MemER LoRA (VLM) | ~/ckpts/robomme-memer-lora-checkpoint-1300/checkpoint-1300/ |
~1.1 GB | grounded subgoal 예측 |
| Qwen3-VL-4B-Instruct (base) | ~/.cache/huggingface/hub/models--Qwen--Qwen3-VL-4B-Instruct |
8.3 GB | LoRA 의 base |
VLA symbolic-grounded-subgoal/79999 |
runs/ckpts/mme_vla_suite/symbolic-grounded-subgoal/79999/{_CHECKPOINT_METADATA, assets, params} |
11.55 GB | MemER MODEL_TYPE 의 VLA |
| pi05_base | ~/openpi_data/openpi-assets/checkpoints/pi05_base/{assets, params} |
12 GB | VLA backbone |
| RoboMME LeRobot v2 | ~/Dataset/robomme/<TASK>_lerobot/ |
(이미 있음) | open-loop / 시각화용 |
| RoboMME H5 | ~/Dataset/robomme/record_dataset_<TASK>.h5 |
(이미 있음) | dataset builder 입력 |
assets/norm_stats.json 도 runs/assets/mme_vla_suite/robomme/ 에 복사됨.
ROBOMME=/home/nas_main/taewoongkang/conda_envs/envs/robomme
export LD_LIBRARY_PATH=$ROBOMME/lib:$LD_LIBRARY_PATH
export VK_ICD_FILENAMES=/etc/vulkan/icd.d/nvidia_icd.json
export USE_HF=1
export OPENPI_DATA_HOME=/home/nas_main/taewoongkang/openpi_data
이 4개 env 가 동시에 set 되어야 sim + VLM 양쪽 모두 동작.
세 가지 선택지 — 사용자가 골라야 함:
examples/robomme/eval.py 상단에 monkey-patch 4–5줄 직접 추가.
가장 단순, 단 원본 repo 코드 수정. (사용자가 "원본 안 건드리는 것" 선호
했지만 이건 evaluation entry-point 라 영향 범위 작음)$ROBOMME/lib/python3.11/sitecustomize.py 만들어 import 시점
자동 monkey-patch. 원본 코드 안 건드림, 단 env 자체에 invisible side
effect.scripts/run_eval_with_mplib_patch.py 만들어
monkey-patch 후 eval.py 의 evaluate() 함수 호출. 가장 깔끔, 원본
미수정, 명시적.기본 추천: (iii) — git-diff 깨끗하고 명시적이고 추후 mplib 0.2.x 호환되는 mani-skill 버전 나오면 wrapper 만 지우면 끝.
기본 추천: 먼저 (a) 로 closed-loop 자체가 동작하는지 보고, 결과 보고 사용자가 (b) / (c) 결정.
(아래는 (i) 또는 (iii) 가정. (ii) 면 sitecustomize.py 만들고 환경변수 일관성만 확인.)
cd ~/repos/Robotics/robomme_policy_learning
export OPENPI_DATA_HOME=~/openpi_data
CUDA_VISIBLE_DEVICES=0 uv run scripts/serve_policy.py \
--seed=7 --port=8000 \
policy:checkpoint \
--policy.dir=runs/ckpts/mme_vla_suite/symbolic-grounded-subgoal/79999 \
--policy.config=mme_vla_suite
처음 한 번 시작 시 JAX 컴파일 + 가중치 로드에 ~30–60s 걸림. "Listening on port 8000" 메시지 뜨면 준비 완료.
cd ~/repos/Robotics/robomme_policy_learning
ROBOMME=/home/nas_main/taewoongkang/conda_envs/envs/robomme
export LD_LIBRARY_PATH=$ROBOMME/lib:$LD_LIBRARY_PATH
export VK_ICD_FILENAMES=/etc/vulkan/icd.d/nvidia_icd.json
export USE_HF=1
# (i) 또는 (iii) 적용 후
CUDA_VISIBLE_DEVICES=1 $ROBOMME/bin/python examples/robomme/eval.py \
--args.model_seed=7 --args.port=8000 \
--args.policy_name=symbolic-grounded-subgoal --args.model_ckpt_id=79999 \
--args.use-memer --args.subgoal-type=grounded_subgoal \
--args.memer_adapter_path=$HOME/ckpts/robomme-memer-lora-checkpoint-1300/checkpoint-1300 \
--args.only_tasks=BinFill
only_tasks=BinFill 로 BinFill 만 돌림. ep0 만 돌리려면 추가로
runs/evaluation/.../progress.json pre-populate (eval.py 의
setup_log_dict 가 기존 entries 를 skip 하므로) 또는 eval.py 의 episode
loop 에 break 조건 추가. 이 부분은 결정 (a) 시 추가 메모 필요.
결과: runs/evaluation/symbolic-grounded-subgoal/ckpt79999/seed7/<vlm_dir>/
- progress.json (per-episode result)
- videos/<TASK>_ep<N>_<flag>_<task_goal>_<difficulty>.mp4
- log.json (final success_rate)
mplib monkey-patch 미적용 시 segfault — 위 실행 명령에서 (i)/(iii)
안 하면 episode reset 시 mplib.Planner.set_base_pose 에서
TypeError: incompatible function arguments.
eval.py 의 try/except 로 episode error 감춤 (line 322 부근). 만약
closed-loop 결과가 이상하면 progress.json 의 "error" entries 확인
필요. try/except 제거하면 stack trace 확인 가능 (사용자의 no-try-except
선호도와 충돌 — 디버깅 시에만 임시 제거).
VLM/VLA GPU 분리 — serve_policy.py 는 JAX 가 자동으로 모든 GPU
잡으니 반드시 CUDA_VISIBLE_DEVICES=0 로 격리. eval.py 도 별도 GPU
(1, 2, …) 에 격리. 현재 GPU 점유 상태 확인 후 비어있는 곳 골라야 함
(nvidia-smi 또는 sgpu).
only_tasks=BinFill 만 안 통하면 TASK_NAME_LIST 의 정확한 표기
확인. examples/robomme/utils.py 참조.
WebSocket 끊김 (long-horizon task) — README Q2 언급. progress.json 에서 resume 가능. BinFill 은 짧으니 일반적으로 안 터짐.
NVIDIA Vulkan 이 cluster 에서 안 되던 진짜 이유: conda env 에
GLVND lib (libGL, libGLX, libGLdispatch, libEGL, libOpenGL)
부족 + libdrm 구버전. libGLX_nvidia.so.0 자체는 exist, 단지 dispatch
layer 가 없어서 Vulkan instance 만들 때 ErrorIncompatibleDriver 반환.
conda-forge libglvnd libgl libglx libegl libopengl libdrm
libvulkan-loader 한 줄로 해결.
결정적 단서: 사용자가 가리킨 /home/nas_main/sungwonhwang/.conda/envs/mav
(CARLA 환경). 이 env 의 lib/ 를 LD_LIBRARY_PATH 에 넣으면 작동, 안
넣으면 작동 안 함 → diff 해서 누락 lib 들 찾음. 이런 단서는 다음에
비슷한 cluster 이슈 만났을 때 첫 단계로 시도.
api_memer.py 의 3 fix 는 driver 에 monkey-patch 로 옮겨놨음
(scripts/eval_robomme_memer_lora.py 상단). git diff 로 본 repo 코드
변경 없음. closed-loop eval 측 (examples/robomme/eval.py) 도 같은
원칙 유지하는 게 일관됨 → 위 (iii) 옵션 추천 이유.
mplib 0.1.1 ABI segfault 는 random crash 가 아니라 특정 시스템 lib 조합과 ABI 안 맞아서 발생. 0.2.1 로 업그레이드 + API mismatch monkey-patch 가 minimum-invasive fix.
| 파일 | 내용 |
|---|---|
claude/context.md |
프로젝트 전체 맥락 (최신 상태 반영됨) |
claude/260427/plan-evaluate_memer_lora_on_robomme.md |
5-phase 체크리스트 (Phase 0–3 done, Phase 4–5 pending) |
claude/260427/notes-prompt_format_diff.md |
Path B 결정 이유 (this repo vs sister repo prompt diff) |
claude/260427/exp-memer_lora_binfill_ep0.md |
VLM-only Phase 0–3 작업 로그 |
claude/260428/setup-robomme_b200_cluster.md |
이 cluster 에서 RoboMME 돌리는 셋업 가이드 + 모든 막혔던 길 |
claude/260428/handoff-closed_loop_ready.md |
(이 파일) 다음 세션 핸드오프 |
scripts/eval_robomme_memer_lora.py |
open-loop VLM-only driver (Phase 0–3 결과물) |
"환경 셋업 다 됐고, 자산 다 받았고, sim 동작 검증도 끝났다. 다음에 할 일은 mplib monkey-patch 적용 방식만 결정해서 두 터미널 띄우는 것."