콘텐츠로 이동

Tier 0 스크립트 준비 완료 보고

D+0 우선순위 3 작업 완료. 스크립트 3개 작성 + 로컬 smoke test (R=2, 1-client, seed=42) 통과. D+1(2026-04-20)에 5-seed 본 실행 예정.


1. 스크립트 목록

T0-A: y_vq=0 Ablation

  • 파일: experiments/federated/v7_0420_t0_yvq0_ablation.py
  • 모델: DLinear (VQ 없음) + FedAvg
  • Config: 5-client UMass HH, R=100, E=5, lr=1e-3, batch=32
  • Seeds: {42, 123, 456, 789, 2024}
  • 출력: PAPE / HR / MSE / MAE per-household + avg, codebook_util=0.0 고정
  • MLflow: track-e-tier0 / nested run per seed

실행 명령 (본 실행):

uv run python experiments/federated/v7_0420_t0_yvq0_ablation.py

예상 소요 시간: 5 seeds × ~17 min (Exp6 실측 기준) ≈ 85 min (≈1.5h)

주요 출력 metric: avg_pape, avg_hr, avg_mse, avg_mae, mean_pape_across_seeds, std_pape_across_seeds


T0-B: Codebook Utilization / Perplexity Analysis

  • 파일: experiments/federated/v7_0420_t0_codebook_analysis.py
  • 모델: FeDPMModel (R1b, M=32) + FedAvg
  • Config: 5-client UMass HH, R=100, E=5, lr=1e-5, batch=32
  • Seeds: {42, 123, 456, 789, 2024}
  • 추가 로깅: round별 client별 codebook entry usage (JSON + .npy artifact)
  • 시각화: client × round utilization heatmap PNG → MLflow artifact

실행 명령 (본 실행):

uv run python experiments/federated/v7_0420_t0_codebook_analysis.py

예상 소요 시간: 5 seeds × ~20 min (usage histogram 수집 오버헤드 포함) ≈ 100 min (≈1.7h)

주요 출력 metric: codebook_util (step=), codebook_perplexity (step=), avg_pape, avg_hr


T0-F: K-means Warm-up Round Mini-Sweep

  • 파일: experiments/federated/v7_0420_t0_kmeans_warmup_scout.py
  • 모델: FeDPMModel (R1b, M=32) + K-means init + FedAvg
  • Config: seed=42, R=100, E=5, lr=1e-5, 5-client UMass HH
  • Warm-up candidates: {2, 5, 10}
  • Protocol: round 0에 central server가 모든 client pilot data로 K-means init. warm-up rounds 동안 VQ codebook 파라미터 freeze (encoder/decoder만 학습).
  • 선정 기준: PAPE 최소 → final_util 최대 (tie-break)

실행 명령 (본 실행):

uv run python experiments/federated/v7_0420_t0_kmeans_warmup_scout.py

예상 소요 시간: 3 warm-up configs × ~20 min ≈ 60 min

주요 출력: winning_warmup_rounds (MLflow param), comparison JSON artifact, util/perp/PAPE 비교표


2. Smoke Test 결과

스크립트 Smoke Run ID 설정 상태
T0-A 72da766e65ee4634b811b58ff2b8330a R=2, 1-client, seed=42 FINISHED
T0-B e2df1e69111c4eaab427b80bf6dd7d76 R=2, 1-client, seed=42 FINISHED
T0-F 01eeb6947ca0412796569a2b61d667cf R=2, 1-client, warmup=2 FINISHED

MLflow experiment: track-e-tier0

nested run IDs (seed-level): - T0-A seed=42: ae8587b73f7c4515917a5b135b29e696 - T0-B seed=42: 954ae57099eb472999cceb4fcb6646f6 - T0-F warmup=2: 1911b6536f77498e8028b1790aa1bc47


3. D+1 실행 계획

# 아침에 순차 실행 (병렬 불가 — GPU 1장)
uv run python experiments/federated/v7_0420_t0_yvq0_ablation.py        # ~1.5h
uv run python experiments/federated/v7_0420_t0_codebook_analysis.py     # ~1.7h
uv run python experiments/federated/v7_0420_t0_kmeans_warmup_scout.py   # ~1.0h

총 예상: ~4.2h (R=100, 5-seed / 3 configs)


4. 설계 주의사항

T0-A (y_vq=0)

  • DLinear는 FedAvg와 동일한 aggregation을 사용. VQ 없으므로 codebook_util=0.0으로 고정 로깅.
  • Branch A~E 분류 시 이 결과의 mean_pape_across_seeds를 y_vq=0 기준선으로 사용.

T0-B (Codebook Analysis)

  • FeDPM R1b 기본 설정. M=32 (Exp6 상속).
  • 각 round 종료 후 client별 train_loader를 통해 argmin indices 수집 → 로컬 학습 완료 후 eval mode.
  • FedAvg aggregate 이후 global model에 대해서는 측정하지 않음 (local model 시점 기록).
  • Heatmap: imshow, 축 = [client_id × round], 색 = util(0~1).

T0-F (K-means Warm-up)

  • sklearn KMeans 사용 (uv 환경 포함). max_samples_per_client=2048.
  • warm-up 동안 VQ params.requires_grad_(False) → AdamW parameter_group에서 제외.
  • warm-up 종료 이후부터 전체 파라미터 학습 재개.
  • 동일 seed=42로 3 configs 비교. 각 config 시작 시 seed 재설정으로 초기화 상태 동일.

5. Caveats

  • T0-B의 per-round usage 수집은 train_loader 전체 순회를 추가로 수행하므로 round당 약 30% 오버헤드 예상. smoke test에서 확인된 latency가 낮으므로 full run에서도 허용 범위.
  • T0-F의 K-means init은 warm-up round 수에 관계없이 항상 round 0 이전에 1회만 수행.
  • util 목표치 (§4 pre-register): best_VQ_Tier1a ≥ 20%. T0-B smoke의 util=75% (R=2, 1-client)는 full run에서 near-collapse(3~6%)로 하락 예상 — 이것이 T0-B 분석 목적.