modules/mot_expert.py + modules/wan_model_mot.py(XWAMMoTModel) 구현 완료 — joint attention으로 트렁크(video)와 expert(action/proprio, 1.393B random init) 결합. unit test 9/9 (gradient checkpointing 포함)use_mot=false vs MoT use_mot=true, 동일 seed) PASS — video_loss 비율 MoT/base = 0.98 (사전 등록 밴드 0.5~2.0 정중앙)260817 설계 확정 후(이전 카드 참조), XWAMMoTModel(expert 1.393B, random init)이 8-GPU 게이트에 들어가기 전 반드시 확인해야 할 것은 expert의 초기 gradient가 joint attention을 타고 트렁크를 해치지 않는가였다. 사전 등록한 판정 기준: ① NaN/Traceback 0 ② MoT video_loss가 baseline의 0.5×~2.0× ③ action/proprio loss 유한 + 비상승.
| 커밋 | 내용 | 변경 |
|---|---|---|
74d31b6 | MoT expert block (narrow residual, trunk-width joint attention) | 2 files, +225 |
f8b1deb | XWAMMoTModel — joint-attention MoT over video trunk + robot expert | 1 file, +292 |
63005cb | gradient-checkpointing coverage for XWAMMoTModel | 1 file, +15 (test) |
bedf4e1 | wire use_mot through runner/config/gate script | 3 files, +21/−4 |
a47a634 | docs: MoT smoke A/B PASS + gate job 84180 submitted | 1 file, +35 |
46813fd | docs: context 갱신 — gate job 84180 RUNNING | 1 file, +10/−7 |
설계 그대로: 트렁크는 video 토큰만 담당(파라미터 이름 무변경), expert(hidden 1024 / ffn 4096 / 30 layers)가 action+proprio를 담당. 매 레이어에서 두 타워의 Q/K/V를 24 heads × 128 공간으로 concat → mask 없는 joint self-attention → split → 각자 post-block.
| step | base | MoT |
|---|---|---|
| 49 | 0.648 | 0.654 |
| 59 | 0.850 | 0.777 |
| 69 | 0.563 | 0.562 |
| 79 | 0.473 | 0.503 |
| 89 | 0.786 | 0.799 |
| 99 | 0.657 | 0.620 |
| 평균 | 0.663 | 0.653 |
| Job | 제출 | 상태 | 비고 |
|---|---|---|---|
| 84180 | 260817 19:53 (extra QOS, 8 GPU) | PREEMPTED | 04:53→05:36 (42분 실행). RUNNING 중 world-size guard ranks=8, XWAMMoTModel 로그 정상 확인됨 |
| 84245 | sbmr 자동 재큐 | PENDING (AssocGrpGRES) | 클러스터 GPU 포화로 대기 중 |
파라미터 실측: expert 1.393B / total 6.397B. 모델 로드 로그: Some weights ... newly initialized: action/proprio enc/dec, view_embedding — 설계대로 (expert 타워 자체는 build_mot_expert로 post-hoc 생성이라 이 목록에 없음).
구현 전 마지막 관문이었던 "random-init expert의 gradient가 joint attention을 타고 트렁크를 손상시키는가"라는 질문이 스모크에서 명확히 기각됐다 (video_loss 비율 0.98, action/proprio loss도 오히려 MoT가 약간 낮음). 이로써 게이트 진입 조건을 충족했고, 남은 것은 20k step 완주 후 RoboCasa 평가로 arm A(61.0%) 대비 실제 control 성능 판정뿐이다. 다만 bs1 −31% 속도 저하는 8-GPU 게이트에서 실측 확인이 필요한 미해결 변수 — 게이트가 예상보다 오래 걸리면 이 오버헤드가 원인일 가능성이 높다.
84180이 실행 42분 만에 preempt되어 학습 진행률(step 수) 확인 전에 중단됐다. 재큐된 84245는 클러스터 GPU 포화(AssocGrpGRES)로 PENDING — RUNNING 전환 후에도 이전 진행 상태 없이 처음부터 재시작(sbmr은 checkpoint resume이 아닌 재제출). bs1 −31% 속도 저하가 8-GPU/bs4에서도 유지되는지 아직 미확인.
84245 RUNNING 전환 시 필수 검증: sjob 84245 8/8 GPU active + [world-size-guard] ranks=8 + Creating XWAMMoTModel 로그 + 첫 저장 후 rank 파일 8개. tmp/watch_mot_v1.sh로 REQUEUED/STALL/NAN/COMPLETE 이벤트 계속 감시. 20k step 완주 후 Task 7(RoboCasa 24 task × 50 rollout) 평가 → arm A 61.0% 대비 판정 (밴드: ≥65% 개선 / 57~65% 동등 / <57% 회귀). 8-GPU 환경에서 it/s 실측해 속도 오버헤드가 연산 비중 증가로 상쇄되는지 확인.