Index
2026-08-17 — Experiment

pi0.5 × MolmoSpaces — Phase 5 본 학습 완료 + 최종 checkpoint validation

SceneMem / pi05-mlspaces | job 68392, 8×B200, 15,000 step full finetune

TL;DR

4.07x
L1 vs zero-motion
0.0026
최종 loss
16.3h
wall time (8×B200)
15,000
steps

1 배경 / 목적

TRAIN_PLAN_V2 기준 pi0.5 × MolmoSpaces 파인튜닝(franka_droid, 절대 joint position + gripper, exo+wrist 2뷰, DROID state norm stats 재사용)의 마지막 실행 단계가 Phase 5 본 학습(15k step)이었다. 직전 세션(260803)에서 dataloader 병목 튜닝(-c 96, --num-workers=32)까지 마치고 job 68392를 제출한 뒤 대기 중이었다.

MolmoSpaces bench-v2 val split이 로컬에 없어 held-out validation이 원천적으로 불가능하다 — 확인 가능한 것은 발산 여부(n_nonfinite), step에 따른 개선, 그리고 "정지 상태 유지보다 나은가"(zero-motion baseline 대비)뿐이다. 15fps 데이터 특성상 인접 프레임 간 관절 이동이 작아 zero-motion 자체가 강한 예측기(L1 0.0785)이므로, 학습된 모델이 이 baseline을 얼마나 앞서는지가 "학습이 진짜로 됐는가"를 가르는 최소 게이트다. context.md는 이 배율이 1.5x 미만이면 학습이 안 된 것으로 명시해뒀다.

기존 한계: 학습 완료(08-04) 시점에는 이 검증을 돌리지 않았고, 최종 checkpoint(14999)에 대한 validate_checkpoint.py 실행이 10일 뒤인 08-14에야 이뤄졌다 — eval/ 디렉토리에 val_14999.{json,txt}만 남아 있고 5000/10000 스텝 중간 checkpoint는 검증되지 않았다.

2 작업 내용

본 학습은 pi05-mlspaces/scripts/train_full.sh로 job 68392를 제출해 자동 진행됐고, 완주 후 pi05-mlspaces/convert/validate_checkpoint.py로 최종 checkpoint를 채점했다. 검증은 zero-motion baseline과 같은 seed(0)로 프레임을 맞춰 공정 비교하는 방식이다.

job 68392 — Phase 5 본 학습 script: pi05-mlspaces/scripts/train_full.sh (--resume, --num-workers=32, SSL_CERT_FILE) 자원: 8×B200, -c 96 (12 CPU/GPU, NUMA-local 상한) config: pi05_mlspaces_franka (openpi), action_horizon=15 norm stats: DROID state stats 합성 (franka_2cam/norm_stats.json) save_interval: 1000 step (checkpoint: 5000 / 10000 / 14999) wandb: davian-cv/openpi/runs/a2tifq7j (exp-name franka_2cam_15k) validate_checkpoint.py — 최종 checkpoint(14999) 채점 cd openpi && CUDA_VISIBLE_DEVICES=0 XLA_PYTHON_CLIENT_MEM_FRACTION=0.4 \ python ../pi05-mlspaces/convert/validate_checkpoint.py 대상: checkpoints/pi05_mlspaces_franka/franka_2cam_15k/14999 샘플: 128 samples / 127 episodes, horizon 15, seed 0 비교군: zero-motion baseline (같은 프레임에서 "현재 자세 유지"만 예측) 출력: pi05-mlspaces/eval/val_14999.{json,txt}

중간 checkpoint(5000/10000)는 이번 라운드에서 검증하지 않고 최종 checkpoint만 확인했다 — 목적이 "발산 없이 학습이 끝까지 갔는가"의 최종 게이트 통과 여부였기 때문.

3 결과

학습 loss/grad_norm 추이 (job 68392, 15,000 step)

Steplossgrad_normparam_norm
01.625516.85531936.7322
4900.01120.16971936.7518
4,9900.00460.07531937.5168
9,9900.00300.03281937.9561
14,9800.00260.03261938.0219
발산 없음: n_nonfinite=0. loss는 첫 500 step에서 급락(1.63→0.011) 후 완만히 수렴, param_norm은 1936.7→1938.0으로 거의 이동 없이 안정적. sacct도 COMPLETED(16:18:28)로 일치.

최종 checkpoint validation (step 14999)

Metricmodelzero-motion baseline배율
L1 (전체)0.019300.078534.07x better
RMSE (전체)0.071390.182322.55x better

차원별 L1 (8개 action dim)

dimmodel L1zero-motion L1배율
gripper0.034250.278358.13x
joint10.020080.079373.95x
joint50.022550.071443.17x
joint30.022790.071363.13x
joint60.022210.057552.59x
joint00.008200.019892.43x
joint20.011530.025532.21x
joint40.012810.024761.93x
전 차원이 통과선(1.5x) 상회: 최저 배율인 joint4(1.93x)도 여유 있게 통과. gripper가 가장 큰 개선폭(8.13x) — zero-motion이 gripper 개폐 타이밍을 가장 못 맞추는 dim이라 학습 효과가 가장 크게 드러남.

horizon(청크 위치)별 L1

horizon 0(1스텝 뒤 예측) model 0.0123 / baseline 0.0347(2.8x) → horizon 14(15스텝 뒤) model 0.0248 / baseline 0.1151(4.6x). 예측 지평이 멀어질수록 zero-motion의 오차가 더 빨리 커지기 때문에, 상대 배율은 오히려 뒤쪽 horizon에서 더 크다.

미확인: 이 수치는 molmobot train split 프레임 기준이라 held-out이 아니다. 절대적인 "일반화 성능"이 아니라 "발산 안 하고 zero-motion보다 확실히 나은 신호를 배웠는가"만 답한다.

4 Takeaway

의미

Phase 5(본 학습)가 계획대로 완주됐고, 최소 sanity 게이트(zero-motion 대비 1.5x)를 8개 action dim 전부에서 여유 있게 통과했다 — 이는 TRAIN_PLAN_V2의 데이터 파이프라인(변환·norm stats·2-cam 스키마)과 학습 설정이 근본적으로 깨지지 않았다는 증거다. 지난 세션들에서 잡은 변환 버그(96/96 샤드 전멸 → 복구), dataloader 병목(11.83→3.52 s/it) 같은 인프라 이슈가 최종적으로 "학습이 되는 모델"로 이어졌음을 확인한 셈이다.

다만 이 검증은 학습 데이터 자체에 대한 fit 확인일 뿐 generalization 증거가 아니다. MolmoBot 논문 기준 π0.5 15k finetune 평균 36.0%(zero-shot 10.0%) 같은 실제 성공률 비교는 bench-v2 외부 평가에서만 나온다. 이번 결과는 "그 평가로 넘어가도 되는가"에 대한 최종 게이트 통과로 해석하는 게 정확하다.

5 Next Steps

미해결 한계

held-out validation 부재(train split 100% 사용) — 진짜 일반화는 bench-v2에서만 확인 가능. train/val house ID 겹침 여부도 미확증(EVAL_NOTES.md §11-C). context.md가 08-03 시점에서 갱신이 멈춰 있어 이번 학습 완료·validation 결과가 아직 반영 안 됨 — 다음 세션에서 Phase 5/6 상태 업데이트 필요.

다음 실험

bench-v2 외부 평가(Phase 6) 착수: PI_Policy 서버 기동 시 port 불일치(config 기본 8080 vs run_eval_server.sh 8000) 먼저 맞추고, checkpoint 14999 + 동봉 norm stats로 서빙. 평가 세트는 EVAL_NOTES.md §"남은 ablation" 결론대로 RBY1M 아닌 Pick / PnP / PnP-NextTo / PnP-Color 4종으로 고정(260811 분석 근거). 비교 기준: MolmoBot 논문 zero-shot 10.0% / 15k finetune 36.0%(단, 벤치 구성이 달라 직접 비교는 주의).