_rgb suffix 독립 디렉토리로 분리, PT cache는 _pt__<hash16>으로 norm.json stat 기반 자동 무효화build_robocasa_latent_cache.py --mode {rgb,pt,both}으로 학습 entry 없이 cache 선빌드 가능robocasa T2V 학습 시 Trainer.prepare_dataset이 single-worker dataloader로 latent cache를 빌드한다. VAE encoding이 GPU bottleneck이라 70K demos 기준 수 시간 소요.
use_pointmap=True/False 모드를 별도 dir로 가르기 때문에 RGB encoding 결과가 두 모드 사이에서 재사용되지 않음. 모드 전환 시 RGB latent 전체 재빌드.스코프: RobocasaHDF5Dataset에서만 cache split 적용 (_BaseWidthConcatDataset 미수정). egoexo4d/droid는 이번 스코프 외.
_pt_meta_hash)fingerprint 입력: 모든 episode의 norm.json (resolved_path, size, mtime_ns) + pt_norm_mean/std (4DNeX scalar). SHA-256 16자. RANK==0만 stat I/O, 다른 rank는 episode cache JSON에서 hash 읽음 → NAS race 없음.
extract_robocasa_pt.py가 .pt와 norm.json을 동일 함수에서 같이 write하므로 norm.json stat이 PT 데이터의 충분 통계._build_grid_latent 분해기존 함수를 _build_rgb_row와 _build_pt_row 두 헬퍼로 분리. 기존 _build_grid_latent은 두 헬퍼 호출 + cat으로 단순화 (하위 호환 유지).
_getitem_t2v cache split 로직| 파일 | 변경 |
|---|---|
core/finetune/datasets/robocasa_hdf5.py | _cache_dirs override, _pt_cache_dir/_pt_meta_hash 신규, _getitem_t2v cache split, is_sample_cached 신규, strict_rgb_must_exist kwarg, episode cache payload pt_meta_hash field |
core/finetune/trainer.py | prepare_dataset pre-filter를 is_sample_cached에 위임, _strict_rgb_must_exist forward |
scripts/build_robocasa_latent_cache.py (신규) | --mode {rgb,pt,both} standalone cache builder (~50줄). Trainer.prepare_models + prepare_dataset 재사용. |
자동 마이그레이션 없음. 기존 _hcpt/ dir은 새 코드가 lookup 안 해 자동으로 "없는 셈". 어차피 view2 outlier 수정으로 PT cache 전체 재빌드 예정 + backward compat 미요구 → 수동 삭제 안내만 README에 추가.
이 카드는 구현 계획(plan) 문서. 실제 구현 후 아래 5개 smoke test로 검증 예정:
| 테스트 | 목적 | 기대 결과 |
|---|---|---|
| V1. RGB cross-mode reuse | use_pointmap=False → True 전환 | RGB encode log 0회, PT만 인코딩 |
| V2. PT 재빌드 무효화 | extract_robocasa_pt.py --overwrite로 norm.json mtime 변경 후 재학습 | 새 _pt__<new_hash>/ 빌드, RGB 디렉토리 untouched |
V3. standalone --mode rgb | PT 없는 상태에서 RGB 선빌드 | _rgb/ 채워짐, _pt__*/ 없음, exit 0 |
| V4. multi-GPU race | 4-GPU 학습 startup | non-RANK-0이 episode cache JSON에서 hash 읽음, stat loop 미실행 |
| V5. legacy cache stale | 기존 _hcpt/ 가득한 cache_root로 새 코드 실행 | _hcpt/ 무시, 새 dirs 빌드 |
현재 진행 중인 view2 PT outlier 수정(GT depth invalid pixel → norm.json 오염 → pred cluster 수백 m 오프셋)의 핵심 불편은 PT 재추출 후 RGB latent도 다시 빌드해야 한다는 것. 이 플랜 구현 시 PT cache만 무효화되고 RGB latent는 재사용 → PT 재빌드→ 재학습 사이클 시간 크게 단축.
standalone builder로 PT 데이터 빌드와 RGB latent 빌드 타임라인을 분리할 수 있어 GPU/CPU 자원 스케줄링도 유연해진다. trainer.py는 is_sample_cached만 호출해 cache 기하구조를 직접 알 필요가 없어져 결합도 감소.
base class 확장 미포함: egoexo4d/droid는 이번 스코프 외. 사용 시작 시 _BaseWidthConcatDataset까지 동일 패턴 확장 필요.
norm.json stat I/O: NAS 기준 episode당 1 stat — 수천 demo면 수 초. RANK==0 1회만이라 OK이지만 수만 episodes로 늘면 재고.
legacy _hcpt/ 자동 정리 없음: 사용자 수동 삭제. README에 한 줄 주의.
1단계: 이 plan 승인 → robocasa_hdf5.py 구현 → V1~V5 smoke test 순서로 진행.
2단계: view2 PT outlier 수정을 별도 plan으로 분리 — depth invalid pixel masking / extract_robocasa_pt.py clipping 적용 → norm.json 재추출 → 새 _pt__<new_hash>/ 빌드 → 재학습.
제출 예시: