spatial-semanticist-L-migration / code /SPATIAL_RUN_README.md
a12s12's picture
Super-squash branch 'main' using huggingface_hub
f065e53
|
Raw
History Blame Contribute Delete
4.6 kB

SpatialDiffuseSlot โ€” ์ƒˆ ์„œ๋ฒ„์—์„œ ๋Œ๋ฆฌ๋Š” ๋ฒ• (2026-07-15 ์™„์„ฑ, GPU batch-1 ๊ฒ€์ฆ๋จ)

๋ฌด์—‡: Semanticist DiT-L/ViT (tok_L pretrained init) + ์šฐ๋ฆฌ 85 multi-res attn-pool ํ† ํฐ + ์šฐ๋ฆฌ spatial-align attention mask. DiT trunk freeze๋กœ warmup(Phase-1) ํ›„ unfreeze(Phase-2). ์„ค๊ณ„ ๋ฐฐ๊ฒฝ/๋น„๊ต๋ถ„์„: new_eval_spatial_reasoning0430/_worklog/SEMANTICIST_DIT_SPATIAL_SETUP.md, OURS_VS_SEMANTICIST.md.

ํŒŒ์ผ (์ „๋ถ€ semanticist repo ์•ˆ)

ํŒŒ์ผ ์—ญํ• 
semanticist/stage1/spatial_diffuse_slot.py ๋ณธ์ฒด: SpatialAttnPool(85ํ† ํฐ) + DiTSpatial(mask ํ”Œ๋Ÿฌ๋ฐ+CFG) + SpatialDiffuseSlot(tok_L init/freeze)
spatial_mask.py xa_maskโ†’(149ร—149) self-attn mask (์œ ๋‹›ํ…Œ์ŠคํŠธ ๋‚ด์žฅ: python spatial_mask.py)
configs/tokenizer_l_spatial.yaml launch config (Phase-1: freeze_dit, warmup 100ep, batch eff 256)
train_spatial_l.sh launch: GPUS=0,1,2,3 bash train_spatial_l.sh
smoke_full_spatial.py CPU ํ†ตํ•ฉ smoke (init/fwd/bwd/freeze)
smoke_gpu_batch1.py GPU batch-1 pre-flight (3 optimizer steps) โ€” ์ƒˆ ์„œ๋ฒ„์—์„œ launch ์ „ ์ด๊ฒƒ๋ถ€ํ„ฐ
viz_mask_compare.py / mask_compare.png mask ์‹œ๊ฐํ™” (level๋ณ„ ํ† ํฐโ†’๋‹ด๋‹น๋ถ€์œ„ ๊ฒ€์ฆ)
test_net.py (์ˆ˜์ •) SEM_STEPS=50 env๋กœ eval sampling step override
fid_L85_50step.py tok_L@85@50step rFID ์žฌ๊ณ„์‚ฐ (recon ์žฌํ™œ์šฉ)

์ƒˆ ์„œ๋ฒ„ ์‚ฌ์ „ ์ค€๋น„ (์ˆœ์„œ๋Œ€๋กœ)

  1. venv: torch/accelerate/omegaconf/timm/diffusers/torch_fidelity (๊ธฐ์กด MNIST_debug venv ์‚ฌ์–‘).
  2. weights: semanticist_tok_L.pkl(2.2GB) โ€” โš ๏ธ 7/13 ๋ฒˆ๋“ค eval_assets.tar์— ์—†์Œ(7/15 ๋‹ค์šด๋กœ๋“œ). delta rsync ๋˜๋Š” HF์„œ ์žฌ๋‹ค์šด: huggingface.co/tennant/semanticist/resolve/main/semanticist_tok_L.pkl โ†’ config์˜ init_from: ๊ฒฝ๋กœ๋ฅผ ์ƒˆ ์œ„์น˜๋กœ ์ˆ˜์ •.
  3. DINOv2 (REPA): TORCH_HOME์— dinov2_vitb14 ์บ์‹œ (์—†์œผ๋ฉด torch.hub๊ฐ€ ์ž๋™ ๋‹ค์šด๋กœ๋“œ โ€” ์˜คํ”„๋ผ์ธ์ด๋ฉด ๊ธฐ์กด torch_cache ๋ณต์‚ฌ).
  4. dataset ์‹ฌ๋ณผ๋ฆญ (semanticist repo ๋ฃจํŠธ์—์„œ):
    mkdir -p dataset/imagenet
    ln -sfn <ImageNet>/train dataset/imagenet/train         # 1000-class ImageFolder
    ln -sfn <balanced val 50k centercrop dir> dataset/imagenet/val/all   # flat pngs (val ์•„๋ž˜ 1ํด๋ž˜์Šค)
    ln -sfn <๊ฐ™์€ dir> dataset/imagenet/val256               # trainer eval real_dir ํ•˜๋“œ์ฝ”๋”ฉ์šฉ
    
    (val = ์šฐ๋ฆฌ eval_assets/val_real50k_centercrop. adm_in256_stats.npz๋Š” repo fid_stats/์— ์ด๋ฏธ ์žˆ์Œ.)

์‹คํ–‰

# 0) ๊ฒ€์ฆ (ํ•„์ˆ˜, ์ˆœ์„œ๋Œ€๋กœ โ€” ์ „๋ถ€ PASS ํ›„ launch)
python spatial_mask.py                 # mask ์œ ๋‹›ํ…Œ์ŠคํŠธ
CUDA_VISIBLE_DEVICES="" python smoke_full_spatial.py    # CPU ํ†ตํ•ฉ
CUDA_VISIBLE_DEVICES=0 python smoke_gpu_batch1.py       # GPU batch-1 (mem ~5.5GiB)

# 1) Phase-1 launch (DiT trunk frozen, encoder/pool/cond ํ•™์Šต)
GPUS=0,1,2,3 bash train_spatial_l.sh   # detach๋Š” setsid nohup ... & disown

# 2) Phase-2 (Phase-1 ์ˆ˜๋ ด ํ›„): configs/tokenizer_l_spatial.yaml์—์„œ
#    freeze_dit: false + dit_lr_scale: 0.1 + ckpt_path: output/tokenizer/models_l_spatial/models/step<N>
#    (+ blr ๋‚ฎ์ถ”๊ธฐ ๊ถŒ์žฅ) ํ›„ ์žฌlaunch.

๊ฒ€์ฆ๋œ ์ˆ˜์น˜ (์ด ์„œ๋ฒ„, 2026-07-15)

  • tok_L init: encoder 151/151, DiT trunk ์ „๋ถ€ ๋กœ๋“œ, drop=[null_cond(256โ†’85 fresh)]
  • trainable 134.8M / total 752.7M (frozen trunk)
  • batch1 bf16: 5.5GiB, ~0.1s/step (1GPU) | mask routing ๊ตญ์†Œํ™” ํ™•์ธ(perturb ์‹คํ—˜ 37ร—)
  • ๋ฐ์ดํ„ฐ: train 1,281,103 / test 50,000

์žก์•„๋‘” ๋ฒ„๊ทธ (์žฌ๋ฐœ ์ฃผ์˜)

  1. load_state_dict(strict=False)๋„ shape mismatch๋Š” ์—๋Ÿฌ โ†’ init_from ๋กœ๋”๊ฐ€ mismatch ํ‚ค ์ž๋™ drop (null_cond).
  2. encoder๋Š” num_slots=256 ์œ ์ง€ํ•ด์•ผ tok_L 100% ๋กœ๋“œ (slot์€ ์•ˆ ์”€, patch๋งŒ ์‚ฌ์šฉ โ€” patch๋Š” slot์„ ์•ˆ ๋ด์„œ ์˜ค์—ผ ์—†์Œ).
  3. Semanticist DiT.forward๋Š” mask๋ฅผ ๋ธ”๋ก์— ์•ˆ ๋„˜๊น€ โ†’ DiTSpatial์ด ํ”Œ๋Ÿฌ๋ฐ (forward/forward_with_cfg ๋‘˜ ๋‹ค).
  4. mask ๊ทœ์น™: latentโ†’latent full / latentโ†’cond xa / condโ†’latent ์ฐจ๋‹จ / condโ†’cond identity (all-False row = SDPA NaN ๋ฐฉ์ง€).
  5. DiT out์€ learn_sigma๋ผ 2ร—in_channels (loss์—์„œ ๋ถ„๋ฆฌ, diffusion lib๊ฐ€ ์ฒ˜๋ฆฌ).
  6. trainer๊ฐ€ model.params.ckpt_path๋ฅผ ๋ฌด์กฐ๊ฑด ์ฝ์Œ โ†’ config์— ckpt_path: null ํ•„์š” (init์€ init_from).
  7. eval ๊ฒฝ๋กœ: trainer๊ฐ€ model.num_slots๋กœ test_num_slots/drop_mask๋ฅผ ์‚ฌ์ด์ง• โ†’ 256์ด๋ฉด 85 cond์™€ ์ถฉ๋Œ(5000-iter eval crash). SpatialDiffuseSlot์ด self.num_slots=85 ์žฌ์ง€์ • + NestedSampler(85) ์žฌ์ƒ์„ฑ์œผ๋กœ ํ•ด๊ฒฐ (encoder ๋‚ด๋ถ€ num_slots=256์€ ์œ ์ง€๋˜์–ด ckpt ๋กœ๋“œ ๋ฌด๊ด€).