Index
2026-04-15 — Experiment

HCPT Smoke Test & Pipeline Validation

EgoX2_exp2 | HCPT (Height-Concat PointMap + ego Prior) 전체 경로 검증

TL;DR

2.75
Final Loss
81 GB
Peak VRAM
838M
LoRA Params
3,660
Final Clips
4
Bugs Fixed

1 배경 / 목적

2026-04-13에 구현한 HCPT (Height-Concat PointMap + ego Prior) 전체 경로 — training, validation, checkpoint — 가 실제로 동작하는지 검증이 필요했다. 동시에 사용자가 새로 추출한 prior-aligned PT 데이터의 품질/스케일 분포를 확인하고 outlier 필터 기준을 결정해야 했다.

기존 한계: HCPT는 코드 작성 후 실행 전이었음. _getitem_hcpt → VAE encode 5 stream → height×width concat → transformer 36ch 입력 → hcpt_ego_col_loss 까지의 경로가 아직 end-to-end 검증되지 않은 상태.

또한 새로 뽑힌 PT 데이터 3761개 중 일부는 VGGT/ViPE reconstruction 실패로 인해 scale이 수백~수천 m 단위로 폭주한 clip이 포함되어 있어 필터링 기준 설정이 필요했다.

2 작업 내용

1. PT 분포 조사 및 필터 기준 결정

egoexo4d_vipe/ptmap_prior_aligned/ 내 clip별 norm_params.json에서 max|xyz| 분포를 산출했다. p99=1543m가 정상 outlier가 아니라 reconstruction 실패 clip의 군집임을 확인 — 상위 8개가 2300~2600m 범위에 집중. per-clip norm 유지를 결정(within-clip consistency만 있으면 충분, global norm은 실내/실외 장면 간 dynamic range 불균형 유발).

2. build_hcpt_manifest.py--pt_max_abs 필터 추가

ap.add_argument("--pt_max_abs", type=float, default=100.0) # clip별 norm_params.json에서 max|xyz| 읽어 threshold 초과 시 drop # 결과: 3899 → pt_ok 3761 → scale_drop 101 → final 3660 (train 3318 / val 342)

3. 버그 4개 수정

#버그수정
(a)Args.validate_dataset_roothcpt_manifest만 쓸 때 validation 실패args.py:134 validator에 hcpt_manifest 조건 추가
(b)training_type: sft → 14B full param OOM (bf16 28G + fp32 56G + AdamW 112G ≈ 196GB > 178GB)LoRA로 변경 (rank=256, target=to_{q,k,v,out.0}). Trainable params 838M, peak VRAM 81GB
(c)Validation 후 scheduler state corrupt (set_timesteps(50)가 training 1000-step schedule 덮어씀) → .nonzero().item() index out of boundstrainer.py:_maybe_run_validation에서 validation 전후 timesteps/sigmas 저장·복원
(d)worker-3에서 좀비 프로세스(PID 3682844)가 GPU 24GB 점유 → OOMlogin node GPU 7 (182GB free)에서 직접 실행

4. Smoke 실행 환경

CUDA_VISIBLE_DEVICES=7 timeout 5400 python finetune.py \ --config configs/egoexo4d_hcpt.yaml \ --hcpt_manifest=configs/hcpt_manifest_smoke.json \ # 3 train + 2 val (5-clip mini) --cache_root=./dataset/egoexo4d_hcpt_smoke \ --train_steps=10 --validation_steps=5 \ --num_validation_samples=1 --do_validation=true

3 결과

Training loss (10 step / 3-clip overfit)

StepLossGrad Norm이벤트
13.823.40시작
23.342.54
33.251.90
43.043.60
53.043.60Validation #1 실행
102.752.72Validation #2 + Checkpoint 저장
단조 감소 확인: loss 3.82 → 2.75 (10 step). HCPT forward/backward/loss 경로 정상 동작.

메모리

56.6 GB
초기 allocated
62.6 GB
최종 allocated
81.4 GB
Peak allocated
87.4 GB
Peak reserved
178 GB
B200 총 VRAM
B200 fit 확인: peak 87.4 GB, 여유 ~90 GB. HCPT Option F (576×800) 토큰 수 23,400이 기존 width-only 28,028보다 ~17% 작아 attention cost 감소.

Validation & Checkpoint

Validation 2회 모두 성공 (step 5, step 10). 각 50 inference steps × 2.97s/it = 약 2분 30초. step 6-10이 정상 진행된 사실이 scheduler 복원 fix 동작을 간접 증명.

Checkpoint: results/EgoExo4D_HCPT/checkpoint-10/pytorch_lora_weights.safetensors (3.3 GB), optimizer.bin (6.7 GB), scheduler/random_states/sampler 정상 저장.

전체 실행 시간

약 9분 (prepare_dataset eager-precompute + 10 step 학습 + 2회 validation 포함). Full 3660-clip 기준 1 GPU precompute ~3시간, 8 GPU DDP ~25분 예상.

4 Takeaway

전체 파이프라인 bit-level 검증 완료

_getitem_hcpt → VAE encode 5개 stream (exo_rgb, ego_rgb, exo_pt, ego_pt, ego_prior) → 4DNeX post-norm → prepare_latents_hcpt 내 height×width concat + mask build → transformer 36ch 입력 → hcpt_ego_col_loss row split → backward → LoRA adapter update → validation pipeline HCPT 분기 → 영상 decode crop([..., :H, exo_W:]) → checkpoint safetensors 전 경로 확인.

특히 버그 (c) scheduler state corruption은 validation 후 training이 즉시 깨지는 심각한 버그였으나 timesteps/sigmas 저장·복원으로 완전 해결됨. SFT → LoRA 전환은 필수 결정 — full SFT는 B200 단일 카드로도 OOM.

실제 3660-clip 본 학습 시작 가능한 상태. prepare_dataset 시간 측정 완료, 8 GPU DDP 투입 준비.

5 Next Steps

본 학습 제출 (사용자 승인 후)

sbm "bash scripts/finetune_egoexo4d_hcpt.sh" --gres=gpu:8 -c 192 --mem 1600GB --qos=core-extra -J hcpt_train. 첫 epoch에서 latent cache 빌드(~25분) + 본 학습 동시 진행.

Full training 중 검증 포인트

1000 step 기준 loss 하강 범위 확인. rgb_loss / pt_loss 비율 모니터링 (현재 _last_rgb_loss, _last_pt_loss는 stash만 되고 logger에 미노출 — 추가 logging 필요). Validation 영상 ego RGB/PT quadrant 시각 체크.

DDP 캐시 race 주의

첫 빌드 시 rank 간 동일 파일 쓰기 경합 보호 없음. prompt embedding 캐시(prompt hash 기반)가 특히 취약 → 첫 빌드는 1 GPU 권장 또는 파일 락 추가 고려.