콘텐츠로 이동

Source: report/version7/reporter/v7-final_최종보고서.md

v7 Peak-Aware FL Clean Restart — 최종(Closure) 보고서

본 보고서는 2026-04-19 ADR-007로 착수되어 2026-04-20 ADR-008로 공식 이양된 v7 phase 전체 궤적을 하나의 closure 문서로 정리한다. 중간 보고서(v7_stage0_stage05_interim_report.md, draft)가 Stage 0 + Stage 0.5까지를 다뤘고, 그 뒤 수행된 A3 발산 진단 ablation(A1/A2/A4/V1/V2/V3) 이 v8 전환의 직접 근거가 되었다. 본 최종본은 이 전 범위를 포괄하며, v7 관련 신규 보고서는 이후 작성되지 않는다.


§0 Executive Summary

0.1 비전문가용 한 문단 요약

v7은 발표자료 제출을 목표로 "peak-aware 연합학습이 baseline과 시계열 파운데이션 모델 대비 우수하다"는 초록을 숫자로 검증하기 위한 clean-restart phase였다. 결과는 조기 종결. Stage 0.5 smoke에서 핵심 cell A3("full proposed")가 3 seed 모두 학습 중 val loss가 오히려 증가하는 현상을 확인했고, 후속 진단 ablation 결과 VQ를 포함한 모든 cell(A2/A3/A4/V1~V3)이 B0 local baseline(PAPE 52.3)보다 악화되는 반면 VQ를 제거한 A1만이 PAPE 47.1로 baseline 수준에 근접했다. 원인은 peak-loss도 DLinear residual도 아니라 v7 runner가 FedPM의 VQ 기본 모듈만 import하고 서버 정렬(MemoryAlignmentServer)과 RESET 기법을 연결하지 않은 구현 결함으로 규명되었다. v7은 여기서 멈추고 ADR-008로 v8 VQ Methodology Rescue phase에 구현 결함 수정 책임을 이양했다. (v8은 그 뒤 2026-04-21에 별도 실패로 closure되었으며 본 보고서 범위 밖)

0.2 최종 수치 (16pp 격차)

Cell 구성 PAPE vs v6 R1b (38.40) vs B0 (52.3) 출처
v6 R1b 기준 (v6 FedPM 원본, 동일 구조) 38.40 0 −13.9 mlruns/628304840000878755/5e0409718fd347d085190264e43d4284
A1 peak-weighted, VQ 없음, DLinear only 47.1 +8.7 −5.2 v8 closure §1 (v7 Stage 0.5 smoke 연장)
B0 Local DLinear (baseline) 52.3 +13.9 0 v7 Stage 0.5 smoke
V3 A3 + EMA + K-means 53.4 +15.0 +1.1 v8 closure §1
V1 A3 + EMA codebook update 53.9 +15.5 +1.6 v8 closure §1
V2 A3 + K-means init 54.2 +15.8 +1.9 v8 closure §1
A3 full proposed (peak + VQ + DLinear residual) 54.3–55.6 +15.9–17.2 +2.0–3.3 v7 Stage 0.5 smoke 3 seed
A2 SmoothL1 + VQ + DLinear (peak 제거) 56.2 +17.8 +3.9 v8 closure §1
A4 peak-weighted + VQ (DLinear residual 제거) 57.9 +19.5 +5.6 v8 closure §1

핵심 패턴: VQ를 포함한 전 cell이 B0보다 나쁨, A1만 v6 R1b 수준에 근접. v6 R1b와 v7 A3는 동일 VQ + DLinear dual-path 설계임에도 16pp 격차. → 설계 결함이 아니라 구현 결함.

0.3 쉬운 요약 박스

"같은 설계(peak-aware loss + VQ + DLinear residual)로 v6에서 PAPE 38이 나왔는데 v7에서는 54가 나왔다. VQ를 빼면 오히려 47로 좋아진다. 이는 'VQ가 나쁜 아이디어'여서가 아니라 v7 코드가 FedPM 라이브러리의 핵심 2기법을 연결하지 않아서였다."

0.4 최종 판정

  • Phase 판정: 조기 종결 (inconclusive on claims C2~C7, blocked by implementation defect on VQ path)
  • 후속: ADR-008 → v8 VQ Methodology Rescue (MemoryAlignmentServer + RESET 통합, V4/V5 추가)
  • v8 결과: 2026-04-21 실패로 closure → ADR-009 track-f (decoder capacity swap)로 재분기

§1 v7 착수 배경과 초록 Claim (C1~C7)

1.1 착수 맥락 (ADR-007 요약)

v6 phase에서 track-e v3 patchwork, 단일 seed 한계, silent failure(FedPM-Phase2 nan), PAPE/HR 정의 dual-track 위험 등이 누적되어 "동일 track 위에 추가 실험을 누적하면 신뢰도가 더 손상"될 위험이 있다고 판정됨. 사용자는 (c) 완전 재시작 옵션을 명시 선택, clean restart로 진입. (docs/decisions/ADR-007_v6_to_v7.md §맥락, §결정)

1.2 대상 초록 (2026-04-19 확정, 변경 불가)

  • (i) peak-weighted loss가 peak-time 샘플에 가중치를 부여
  • (ii) shared VQ codebook + DLinear residual dual-path 아키텍처
  • (iii) lightweight model이 time-series foundation models(TSFM)을 능가

1.3 Claim C1~C7 및 Rollback 규칙 (pre-registered)

v7 design spec §1 (track_v7_design.md) 기준. 모든 rollback은 orchestrator override 금지.

# Claim 통과 기준 Rollback 문구
C1 FL + privacy motivation 서술 — (없음)
C2 peak-weighted loss 효과 A1 vs A0 paired Wilcoxon p<0.05 "asymmetrically weighted"
C3 VQ codebook 기여 A3 vs A1 bootstrap 95% CI 하한 > 0 "(ii)" 구절 재구성
C4 DLinear residual 기여 A3 vs A4 paired Wilcoxon p<0.05 "local adaptation head"
C5 best across baselines A3 vs {B0~B4} Wilcoxon + Bonferroni 다수 PASS "competitive peak accuracy"
C6 PAPE 9.8% reduction vs local-only (B0−A3)/B0 CI 하한 > 5% 실측 CI median % 교체
C7 lightweight surpasses TSFM Chronos + TimeMoE zero-shot 비교 유지 + param 비율 명기

1.4 용도 및 우선순위

학술 논문이 아닌 발표자료용. 우선순위 = 속도 + 정확성.

쉬운 요약: "peak 지점에 weight 주고, 가구 공용 codebook + 가구별 잔차 경로" 조합이 local 학습·다른 FL 방식·대형 TSFM을 이기는지 확인하는 것이 목표였다.


§2 Stage 0 — 사전 등록 (완료)

2.1 완료 상태

2 cycle(v1 → critic → v2) 만에 완료, critic 통과. (report/version7/exp-expert/v7_0419_stage0_preregistration_v2.md, report/version7/exp-critic/v7_0419_stage0_preregistration_review.md)

2.2 확정 산출물

항목 확정값 근거
Golden tensor G1 (toy, Q90=7.9) PAPE = 20.000000 / HR = 1.000000 stage-0 v2 §2.2
Golden tensor G2 (degenerate σ=0) PAPE = NaN / HR = NaN (policy) std<1e-8 시 NaN 정책
Golden tensor G3 (Apt6 168h, perfect) PAPE = 0.000000 / HR = 1.000000, q90=2.918 outputs/v7_stage0/golden_tensors/G3_*.npy
Golden tensor G4 (Apt6 168h, const mean) PAPE = 67.342534 / HR = 0.619048 상동 G4
Golden tensor G5 (Apt15 336h, uniform seed=42) PAPE = 64.279282 / HR = 0.511905, q90=1.721 critic M1 대응, 14d block (n_hits=2→13)
Metric definition_hash 8be2bd2f691deed0 (sha256 상위 16 hex, v2) src/peak_analysis/v7/metrics.py
Apt_max_load Apt88 (5/5 peak-load metric 1위, critic M2 민감도 통과) stage-0 v2 부록
Fail-fast threshold Option Bval ratio > 1.5 (per-run divergence) + train > 3.0 (static ceiling) v6 n=22 converged back-test

2.3 Option B 임계 근거 (v6 n=22 back-test)

  • final_val_loss / initial_val_loss 분포: p50 = 0.929, p95 = 1.001, max = 1.001 → 1.5× 임계는 "명확한 divergence"만 포착
  • final_train_loss 분포 (n=3): max = 0.541 → static 3.0 ceiling (~5.5× margin)

2.4 Gate back-test 패턴 적용 (feedback 반영)

임계 제시 시 v(N-1) 분포 back-test 통계 동반을 원칙으로, v6 converged runs(MIN_STEPS ≥ 10)을 n=22 사양으로 back-test한 뒤 p05/p10/p50/p95를 함께 보고했다. Gate 5 재설계에도 동일 원칙이 적용되었다(§4).

쉬운 요약: 실험을 시작하기 전에 "합격/불합격을 어떤 값으로 자를지"를 종이로 먼저 적고 잠그는 작업이 Stage 0이다. v6 기록을 back-test해 실제로 통과하는 임계인지 확인한 뒤 잠갔다.


§3 인프라 구축 (완료)

3.1 신규 모듈 / 스크립트

경로 역할
src/peak_analysis/v7/metrics.py PAPE_v7 / HR_v7 / definition_hash 단일 소스
experiments/federated/v7_runner.py 단일 entry point (~77KB), smoke ↔ main 코드 경로 100% 공유, CELL_REGISTRY 12종 (B0~B4, A1~A4, V1~V3)
experiments/federated/v7_0419_stage0_preregistration.py Stage 0 재현 스크립트 (definition_hash 산출)
experiments/federated/v7_stage05_smoke_analysis.py 6-Gate 자동 평가 + verdict/report 생성

3.2 CLI 설계

v7_runner.py
  --mode={smoke,main}
  --phase={baseline,ablation,vq_improvement}
  --cells=B0,B1,B2,B3,B4,A1,A2,A3,A4,V1,V2,V3
  --seeds=42,123,456,789,2024
  --households=Apt6,Apt15,Apt30,Apt51,Apt88|all
  --golden-tensor-check  (Gate 1 sanity)

3.3 MLflow 로깅 6종 계약 (설계 spec §2.5)

  1. per-epoch/round train_loss, val_loss (step=)
  2. best checkpoint (log_artifact)
  3. test y_true.npy + y_pred.npy (log_artifact)
  4. 가구별 + avg PAPE, HR, MSE, MAE
  5. 7-metric fail-fast 지표
  6. config 전체 (pape_definition_hash, scaler_space_signature 포함)

3.4 테스트 현황 (155+ tests)

범주 대략 규모
v7_runner (CLI / registry / dispatch) 57
v7 training 경로 53
Stage 0 재현 26
Stage 0.5 smoke analysis 19
MLflow params 계약 ~22

3.5 인프라 설계 원칙

  • 단일 entry point: smoke ↔ main 공유 (C-7 mitigation)
  • 별도 smoke 스크립트 작성 금지 (spec §6)
  • Gate 1 hash assertion 활성: fail-fast 실제 체크, dry-run 아님

쉬운 요약: 실험 스크립트를 하나(v7_runner.py)로 통일해, smoke test와 본실험이 같은 코드에서 돌게 만들었다. 결과가 다르면 즉시 hash mismatch로 멈춘다.


§4 Stage 0.5 Smoke — 9 runs + 6-Gate Matrix

4.1 실행 요약

  • 명령: v7_runner.py --mode=smoke --households=Apt6,Apt88 --cells=B0,B2,A3 --seeds=42,43,123
  • 실제: 9 runs (3 cells × 3 seeds, 단일 household per run)
  • MLflow experiment: v7-peak-aware-fl
  • 평가 산출: outputs/v7_stage05/smoke_report_20260420_021905.md, smoke_verdict_20260420_021905.json, 3종 figure PNG

4.2 9 runs run_id

Run Cell Seed run_id (full)
1 B0 42 4c013601955b4240ab8d02b1fa442048
2 B0 43 88b6fdba0e6545f78d892d401504020f
3 B0 123 9ce63bc1909f402a901b3b97743b7104
4 B2 42 87716252c99342df9f73763f78116ecc
5 B2 43 4b324359c16b41fab909f672d33c813a
6 B2 123 70d3176828514ff58b6dcdca125f5c86
7 A3 42 e2c2c5137a32436f9be80c113995ad41
8 A3 43 7d2c8fdd952b46068fb4a0ea27aa4b6c
9 A3 123 07764d6e45844166af639b071e50efe3

4.3 6-Gate Matrix 결과

outputs/v7_stage05/smoke_verdict_20260420_021905.json 기반. Gate 5만 FAIL, 전체 verdict = FAIL (1건 FAIL이라도 HOLD).

Gate B0-s42 B0-s43 B0-s123 B2-s42 B2-s43 B2-s123 A3-s42 A3-s43 A3-s123 결과
G1 (hash + golden tensors) PASS PASS PASS PASS PASS PASS PASS PASS PASS PASS
G2 (scaler space, VQ cell만) n/a n/a n/a n/a n/a n/a PASS PASS PASS PASS
G3 (MLflow artifact 완전성) PASS PASS PASS PASS PASS PASS PASS PASS PASS PASS
G4 (figure run_id query + EXIF) PASS (3 figure)
G5 (legacy 임계 기준) FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL FAIL
G6 (paired split data hash) PASS PASS PASS PASS

4.4 Gate 세부

  • G1: 9/9 run definition_hash = 8be2bd2f691deed0 일치 + G1~G5 expected 값 모두 match
  • G2: 공통 scaler signature = 752452383a98bc03, unit = standardized (VQ cell A3에서만 해당)
  • G3: 9/9 run이 best.ckpt / y_true.npy / y_pred.npy / per-epoch loss / 7-metric 완비
  • G4: smoke_pape_avg / smoke_hr_avg / smoke_mse_avg 3종 PNG가 mlflow.search_runs() query 기반 생성 + run_id EXIF 임베드 확인
  • G5 legacy: moving/initial ratio 범위 0.975~1.014, 9/9 FAIL → 임계 자체가 작동 불가능 (아래 §4.5)
  • G6: seed별 (42/43/123) 3개 cell이 동일 train=a00f61e9f82e96a2, val=d454d3e3f2f7eb4d, test=de5cf8b0379cc074

4.5 Gate 5 재설계 (legacy → rel_decrease 3-tier)

문제 발견: legacy 식 final_val_loss_moving_avg(last 3) / initial_val_loss_moving_avg(first 3) < 0.5는 "val loss가 반으로 줄어야 수렴 인정". v6 n=22 converged back-test(outputs/v7_stage05/v6_gate5_backtest.json) 결과 legacy_ratio p05=0.911, p50=0.965, p95=0.999, max=1.000 — legacy PASS count = 0 / 22 (false-positive rate = 1.0). v6 정상 수렴 run도 단 하나도 통과하지 못하는 작동 불가능한 임계.

재설계 (v3, critic 반영, report/version7/exp-expert/v7_stage05_gate5_redesign_v2.md): - 식: rel_decrease = (mean(val_loss[:3]) − mean(val_loss[-3:])) / mean(val_loss[:3]) - 3-tier cutoffs (v6 percentile 기반): - PASS: rel_decrease ≥ 0.0017 (v6 P10) - WARNING: 0.0 ≤ rel_decrease < 0.0017 (v6 P05~P10) - FAIL: rel_decrease < 0.0 (net increase) - v6 back-test: PASS 19 / WARNING 1 / FAIL 2, TPR(PASS or WARN) = 90.9%

4.6 Smoke 9 run rel_decrease preview

Cell-Seed rel_decrease 신 metric verdict legacy ratio
B0-s42 0.030072 PASS 0.978628
B0-s43 0.029720 PASS 0.975406
B0-s123 0.018253 PASS 0.985070
B2-s42 0.001212 WARNING 1.000351
B2-s43 0.009746 PASS 0.995218
B2-s123 0.005041 PASS 0.996454
A3-s42 −0.018681 FAIL 1.014198
A3-s43 −0.013291 FAIL 1.011567
A3-s123 −0.013578 FAIL 1.010581

Tally: PASS 5 / WARNING 1 / FAIL 3 → A3 3/3 FAIL, Stage 1 진입 HOLD 권고.

4.7 쉬운 요약

"6개 검문소 중 5개는 통과, '학습이 실제로 내려가는가'를 확인하는 마지막 검문소만 실패했다. 그리고 실패 원인이 A3에만 집중되어 있다 — B0/B2는 정상인데 A3만 loss가 오히려 증가했다."


§5 A3 발산 진단 — Ablation 결과와 원인 규명

5.1 A3 val_loss 경향 (smoke 3 seed)

9 preview JSON 기반 시계열 (10 round 샘플): - A3-s42 (e2c2c513): 0.6483 → 0.6310 → 0.6406 → 0.6422 → 0.6483 → 0.6469 → 0.6467 → 0.6567 → 0.6508 → 0.6483 - A3-s43 (7d2c8fdd): 0.6635 → 0.6664 → 0.6599 → 0.6543 → 0.6627 → 0.6653 → 0.6678 → 0.6712 → 0.6707 → 0.6744 - A3-s123 (07764d6e): 0.6070 → 0.6112 → 0.6169 → 0.6151 → 0.6184 → 0.6211 → 0.6147 → 0.6201 → 0.6175 → 0.6224

관찰: 3 seed 모두 10 round에서 rel_decrease ∈ [−1.9%, −1.3%], final_val_loss 0.62~0.67 (B0/B2 ~0.34의 약 2배).

5.2 원인 후보 (진단 전 시점)

  1. peak_alpha = 2.0 scale 과대: peak-weighted SmoothL1의 peak-time 가중이 전체 grad 크기를 키워 불안정
  2. VQ codebook 초기화 / gradient flow: commitment loss가 DLinear residual과 gradient 충돌
  3. DLinear residual gradient 충돌: dual-path 합산이 초반 residual을 키워 val 악화

5.3 Ablation 결과 (single-factor attribution)

Stage 0.5 이후 수행된 A1/A2/A4/V1/V2/V3 smoke 결과 (v8 closure §1 인용):

Cell 구성 PAPE 해석
A1 peak-weighted, VQ 없음, DLinear only 47.1 v6 R1b 수준 근접. "VQ 없는 경로"만 정상 작동
A2 SmoothL1 + VQ + DLinear (peak 제거) 56.2 peak-loss 제거해도 여전히 발산 — peak_alpha 배제
A3 full proposed 54.3~55.6 발산 확인 (3 seed)
A4 peak-weighted + VQ, DLinear residual 제거 57.9 residual 제거해도 여전히 발산 — residual 배제
V1 A3 + EMA codebook (γ=0.95) 53.9 VQ 개선 변형도 발산
V2 A3 + K-means init 54.2 동일
V3 A3 + EMA + K-means 53.4 동일
B0 Local DLinear (baseline) 52.3 참조 기준

5.4 해석: 원인은 "VQ 경로 자체"

  • VQ를 포함한 모든 cell이 B0(52.3)보다 악화 (A2/A3/A4/V1/V2/V3 = 53.4~57.9)
  • VQ를 제거한 A1만이 B0를 능가 (47.1)
  • peak-loss(A2)도 DLinear residual(A4)도 단독 제거해도 발산 지속 → 원인 = VQ 경로

5.5 구현 결함 특정 (ADR-008 §맥락)

v6 R1b는 같은 구조(peak + VQ + DLinear residual)로 PAPE 38.40 달성. v7 A3는 같은 설계로 54.3~55.6. → 설계 결함이 아니라 구현 결함. 결함 위치:

  • v7_runner는 src/fed_learning/fedpm.pyVectorQuantizer (line 112) import
  • MemoryAlignmentServer (line 350) — server-side codebook 정렬 미연결
  • SoundStream RESET dead-code replacement (threshold=2) 미연결
  • track-e v3 계획에 이 2 기법이 있었으나 v7 흡수 시 EMA/K-means(V1~V3) 부분만 scaffold 되고 핵심 2 기법은 미구현 상태로 통과

5.6 FedPM 논문 ablation 대조 (ADR-008 §근거)

  • "w/ Average" aggregation 대체: −7.18% MAE
  • "w/ Local Memory" (서버 정렬 없음, v7 현 상태): −9.34% MAE

즉 FedPM 논문 자체가 "서버 정렬 없는 구성"을 −9.34% MAE 악화로 보고했고, v7 A3의 16pp 격차가 이 구조적 생략과 정합.

5.7 쉬운 요약

"A3만 발산하는 이유를 찾기 위해 peak-loss만, VQ만, residual만 남긴 셋을 돌려봤다. 결과적으로 VQ가 들어간 모든 조합이 발산했고 VQ 없는 조합만 정상이었다. v6에서는 같은 VQ가 작동했는데 v7에서는 작동하지 않는다 → v7 코드가 FedPM의 서버 정렬과 RESET을 연결하지 않았기 때문. 아이디어는 살아있고, 배선이 끊어져 있었다."


§6 Claim 영향 (C2~C7)

v7 범위에서의 최종 판정. A3 발산 원인이 구현 결함으로 확정되었으므로 claim 자체는 v7 내에서는 검증 불가하며 v8/track-f로 이관되었다.

# Claim v7 내 판정 근거 이관 경로
C1 FL + privacy motivation 영향 없음 서술 claim 그대로 유지
C2 peak-weighted loss 효과 유보 확정 A0 대비 실험 미실시 (v7 범위). A1은 no-VQ + peak-weighted 단일 조건 v8/track-f에서 A0 (no peak, no VQ) 추가 필요
C3 VQ codebook 기여 v7 내 검증 불가 구현 결함 (MemoryAlignmentServer + RESET 미연결) v8 V4/V5에서 재검증 (이후 실패) → track-f로 이관
C4 DLinear residual 기여 부분 증거 A4 발산으로 단독 비교 노이즈 큼 v8/track-f decoder 복원 후 재검증
C5 best across baselines v7 내 성립 불가 A3 loss > B0, B2 v8/track-f 후 재평가
C6 PAPE 9.8% reduction v7 내 산출 불가 A3 fix 전제 v8/track-f 후 재계산
C7 lightweight surpasses TSFM v7 범위 미수행 단계 6 HOLD track-f로 연기

6.1 쉬운 요약

"발표 자료에 쓸 7개 주장 중 6개(C2~C7)가 A3 정상 수렴에 걸려 있었다. v7 내에서는 구현 결함 때문에 검증 자체가 불가능했고, 이 검증 책임은 v8로 넘어갔다."


§7 v7 에서 계승된 자산 (v8/track-f로 이전)

ADR-008 §"v7 에서 계승" 기반. 본 자산은 v8 실패 이후 track-f에서도 계속 재사용되고 있다 (v8 closure §5).

자산 위치 계승 상태
Golden tensor G1~G5 pre-registration outputs/v7_stage0/golden_tensors/*.npy, definition_hash = 8be2bd2f691deed0 변경 없이 유지
v7_runner.py CLI + CELL_REGISTRY (12종) experiments/federated/v7_runner.py v8에서 V4/V5 추가 후 행동 불변 보존
공용 모듈 src/peak_analysis/v7/metrics.py 변경 없음
Smoke infrastructure + 6 Gate experiments/federated/v7_stage05_smoke_analysis.py rel_decrease metric 포함
155+ test suite tests/ 유지
5-seed set {42, 123, 456, 789, 2024} 유지
Apt_max_load 지정 Apt88 유지
Fail-fast threshold val ratio > 1.5, train > 3.0 유지
peak-weighted loss (α=2.0, β=0.1) src/peak_analysis/v7/metrics.py 변경 없음
9-run smoke MLflow 데이터 experiment v7-peak-aware-fl v8 개선 전/후 비교 baseline으로 보존

7.1 쉬운 요약

"v7 자체는 실패했지만, v7이 만든 스캐폴딩 — 검증 규칙, 단일 runner, 테스트 suite, 9개 증거 run — 은 그대로 다음 phase로 넘어가 지금도 사용 중이다."


§8 v7에서 확인된 Process 가치

8.1 Gate 5 재설계: "작동 불가능한 임계"를 실제 분포로 교정

  • 기존 legacy 임계 moving/initial < 0.5가 v6 n=22 converged back-test에서 0/22 PASS(false-positive rate = 1.0)로 사실상 불가능한 임계임을 발견
  • 실제 분포(v6 p05=−0.0005, p10=0.0017, p50=0.0350)에 기반해 rel_decrease 3-tier로 재설계 → v6 back-test TPR 90.9%
  • 이 사례는 임계 제시 시 v(N−1) 분포 back-test 동반이라는 원칙의 실증

8.2 Q1/Q2/Q3 정책의 실제 발동

  • Q2 (Gate FAIL 시 자동 engineer 호출 + 사용자 알림): Gate 5 FAIL에서 실제 발동, policy 검증됨
  • Q1 (NaN seed 재실행), Q3 (early checkpoint stop-and-wait)는 Stage 1 진입하지 않아 미발동 (대기)

8.3 Fail-fast + 사전 등록 + 단일 entry point + golden tensor가 구현 결함을 실제로 포착

  • Stage 0 pre-registration의 definition_hash + Gate 1 hash assertion이 코드 drift 차단
  • 단일 entry point(v7_runner.py) 덕분에 smoke 9 run이 main 경로와 100% 동일 코드로 실행되어 A3 발산이 "실험 스크립트 차이"가 아닌 "진짜 현상"임이 보증됨
  • Stage 0.5 smoke가 ~2h 만에 16pp 격차의 구현 결함을 포착 — Stage 1 (25 runs × baselines × ~3h 병렬) 진입 전 fail-fast 성공 사례

8.4 쉬운 요약

"v7 프로세스는 Stage 1에 25개 run을 태우기 전에 Stage 0.5 smoke(9 run, 2시간)에서 핵심 결함을 잡아냈다. 실험이 실패로 끝나긴 했지만, 이 실패는 시간이 덜 소모된 지점에서 일어났다 — 이것이 fail-fast 설계의 핵심 가치."


§9 Workload 회고

항목 초기 추정 (design §7) 실제 진행분
Stage 0 사전 등록 0.5h 0.5h (2 cycle, 완료)
Stage 0.5 smoke (9 run) 2h ~2h (완료, Gate 5 FAIL)
Gate 5 재설계 +0.5~1h (완료)
A3 발산 진단 ablation (A1/A2/A4/V1~V3) +4~8h (완료, v8 closure §1 인용분)
Stage 1 baseline (25 runs) 3h HOLD → v8 이관
Stage 2 ablation (20 runs) 7h HOLD → v8 이관
Stage 4 VQ 개선 (15 runs) 5.5h HOLD → v8 이관
Stage 5 통계 + Stage 6 TSFM + 발표자료 12h HOLD → track-f 이관
v7 총 소요 32~34h 추정 ~7~11h 실제 (Stage 0 + 0.5 + 진단)

Stage 1~6 HOLD 상태로 v8 이관되었으며 v8 역시 실패하여 track-f로 재분기되었다. 발표자료 마감 일정 영향은 v8 closure §4~§6 및 track-f ADR-009에서 별도 관리.

9.1 쉬운 요약

"예정 32~34h 중 ~7~11h를 실제로 썼고, 남은 시간은 다음 단계(v8, track-f)로 넘어갔다. '계획 범위의 20~30%'만 소모한 지점에서 결함을 포착한 것이 설계의 의도대로 동작한 것."


§10 후속 경로

10.1 ADR-008 → v8 VQ Methodology Rescue

  • 착수: 2026-04-20
  • 범위: v7 infra 유지 + MemoryAlignmentServer (γ=0.95, δ=0.6) + RESET(threshold=2) 통합 + 신규 cell V4/V5
  • 목표: PAPE < 50 (A1 47.1 이하)
  • 결과: 2026-04-21 실패로 closure
  • V4 (alignment only): PAPE 56.51 (FAIL)
  • V5 (alignment + RESET): PAPE 53.32 (FAIL)
  • 원인: v6 decoder가 Transformer가 아니라 FC-MLP(957K params)였고 v7 Conv1d(25K)와 38.6× capacity 격차. VQ 정렬 복원은 이 bottleneck을 우회하지 못함
  • v6 FL aggregation도 cos_similarity + client_personalized로 plain FedAvg와 다름 — 추가 교란

10.2 ADR-009 → track-f Decoder Capacity Swap

  • 착수: 2026-04-21
  • 범위: W1 (FC-MLP decoder 복원) + W2 (축소 Transformer decoder) 병렬 1-seed smoke → PAPE 낮은 variant를 5-seed primary로 선정
  • 상세: docs/reference/project_state/track_f_decoder_swap.md, v8 closure §4

10.3 v7 phase 후속 산출물

본 closure 보고서가 v7 phase의 최종 공식 산출물이며, 이후 v7 관련 신규 보고서는 작성되지 않는다.

10.4 쉬운 요약

"v7 → v8(VQ 서버 정렬 수정 시도, 실패) → track-f(decoder 용량 복원 시도, 진행 중). v7의 결함 규명은 정확했지만, v8에서 고친 것만으로는 v6 성능이 돌아오지 않았다. 진짜 격차는 decoder 크기에 있었다."


§11 참고 자료

11.1 상류 결정 문서

  • docs/decisions/ADR-007_v6_to_v7.md — v7 clean restart 착수 결정 (Approved 2026-04-19)
  • docs/decisions/ADR-008_v7_to_v8.md — v7 종결 + v8 착수 결정 (Approved 2026-04-20)

11.2 Design / TODO

  • docs/reference/project_state/track_v7_design.md — v7 design spec (§1 Claim, §2 pre-registration, §3 Stage 0~6, §4 안전망, §7 workload)
  • todos/track-v7_peak_aware_fl.md — 활성 TODO (본 closure 시점에는 todos/archive/로 이동 대상)

11.3 Expert / Critic 산출물 (Stage 0)

  • report/version7/exp-expert/v7_0419_stage0_preregistration.md (v1)
  • report/version7/exp-expert/v7_0419_stage0_preregistration_v2.md (v2 최종)
  • report/version7/exp-critic/v7_0419_stage0_preregistration_review.md

11.4 Expert / Critic 산출물 (Stage 0.5)

  • report/version7/exp-expert/v7_stage05_gate_criteria.md
  • report/version7/exp-expert/v7_stage05_engineer_contract.md
  • report/version7/exp-expert/v7_stage05_smoke_infra_v2.md (v2 최종)
  • report/version7/exp-critic/v7_stage05_smoke_infra_review.md
  • report/version7/exp-expert/v7_stage05_gate5_redesign_v2.md
  • report/version7/exp-critic/v7_stage05_gate5_threshold_review.md
  • report/version7/exp-expert/v7_stage05_gate5_engineer_contract.md

11.5 중간 보고서 (draft)

  • report/version7/reporter/v7_stage0_stage05_interim_report.md — Stage 0 + Stage 0.5 중간 보고서 (본 closure의 전신)

11.6 후속 closure 참조

  • report/version8/reporter/v8_0420_closure.md — v8 closure. §1/§2에 v7의 A3/VQ 진단 수치와 decoder capacity 격차가 정리되어 있으며 본 closure의 §5/§10 수치 근거

11.7 MLflow Experiments

Experiment 용도 Runs
v7-stage0-preregistration Stage 0 v3 산출 (golden tensor freeze + hash) 1
v7-peak-aware-fl Stage 0.5 smoke + 진단 ablation 9+

11.8 주요 출력 파일 (재현 참조)

  • outputs/v7_stage0/stage0_summary.json
  • outputs/v7_stage0/golden_tensors/{G3,G4,G5}_y_{true,pred}.npy
  • outputs/v7_stage05/smoke_verdict_20260420_021905.json
  • outputs/v7_stage05/smoke_gate5_preview.json
  • outputs/v7_stage05/v6_gate5_backtest.json
  • outputs/v7_stage05/figures/smoke_{pape,hr,mse}_avg_20260420_021905.png

11.9 재현 명령

# Stage 0 재실행
uv run python -m experiments.federated.v7_0419_stage0_preregistration

# Smoke 재실행
uv run python -m experiments.federated.v7_runner \
  --mode=smoke --households=Apt6,Apt88 --cells=B0,B2,A3 --seeds=42,43,123

# 6-Gate 재평가
uv run python -m experiments.federated.v7_stage05_smoke_analysis

# v6 Gate 5 back-test
uv run python -m experiments.federated.v7_stage05.v6_gate5_backtest

§12 마무리

v7 Peak-Aware FL Clean Restart phase는 조기 종결된다. 이 phase의 목표였던 초록 검증(C2~C7)은 Stage 0.5 smoke 및 후속 진단 ablation에서 드러난 VQ 경로 구현 결함으로 인해 v7 범위 내에서 달성되지 않았다. 그러나 이 phase는 다음 세 가지 구체적 가치를 남겼다.

  1. 검증 규약: Golden tensor 5종 + definition_hash + 7-metric fail-fast + Option B threshold + Gate 5 rel_decrease 3-tier. 이 규약은 v8, track-f 모두에 그대로 계승되었다.
  2. 단일 entry point + 테스트 suite: v7_runner.py + 155+ tests. 이후 phase는 신규 runner를 쓰지 않고 이 파일에 cell 추가 방식으로만 확장된다.
  3. 결함 포착 증거: Stage 0.5 smoke ~2h 만에 v6 대비 16pp 격차를 포착하고 원인을 VQ 경로 구현 결함으로 정확히 규명 — Stage 1 (25 runs) 비용 낭비 회피.

v7 관련 추가 실험이나 보고서는 작성되지 않는다. VQ 방법론의 실제 복원 여부는 v8 closure(report/version8/reporter/v8_0420_closure.md)가, decoder capacity 원복에 의한 PAPE 재달성 여부는 track-f(ADR-009)가 각각 처리한다.


보고자: Peak Analysis Research Team (reporter 역할) 상태: final (본 보고서가 v7 phase의 최종 closure 문서) 연계: v8 closure(v8_0420_closure.md, final) + ADR-007/008/009