松田研究室
FindingID: p1-axis1-phase-g3-sh-progressive
Status: stable / task P1 Phase G.3
← Findings Index
P1 axis 1 · Phase G.3 · Pareto sweet spot · 5k smoke artifact reframed

Phase G.3 SH-progressive — 5k smoke -14% は artifact、30k full は **quality improvement + 0.28 dB** に reframe、stacked + G.1 で **Pareto sweet spot** (Lego -61% wallclock + 0.15 dB)

Phase G compute reduction family の試行。**3 layer の結果検証** で headline が変化: (1) Lego 5k smoke で -13.9% wallclock + cascading splat -22% を観測したが (2) Lego 30k full では wallclock -2%、splats **+30%**、PSNR **+0.28 dB** — 5k smoke の cascading 効果は refine.stop_iter=1500 による artifact、30k では sh unlock (iter 3000) 後 refine が iter 15000 まで継続 → splats baseline より多く grow。(3) **G.1 + G.3 stacked (max_steps=15000 + sh_progressive)** で Lego 16m13s / 36.254 dB / 428k splats = Phase D 比 **-61% wallclock + 0.15 dB 改善** で **Pareto sweet spot**。**Key mechanism reframe**: sh_progressive は「speed win」ではなく「**quality improvement at no speed cost**」、stacked variant で early stop の speed と SH warmup の quality gain を統合。Phase F 5 連続 falsification + G.3 5k smoke artifact = audit overestimate 6 例目という calibration data。

positiverank: highpareto-sweet-spot-confirmed-chain-pending第 1 軸p1-axis1phase-gsh-progressivecompute-reductionpareto-frontlego-5klego-30kstacked-configimplementationunit-testsbit-exactsmoke-artifact
Δ PSNR
+0.15 dB stacked (vs Phase D)、+0.28 dB 30k single (vs Phase D)、-0.12 dB 5k smoke (許容)
Δ Wallclock
**-61% stacked** (vs Phase D)、-1.9% 30k single、-13.9% 5k smoke (artifact)
Impact
Phase G compute reduction family の G.3 (SH-progressive growth) を実装 + bit-exact unit tests (11 件、cargo test 43 件 全 pass) + **3 layer の Lego 結果検証**。(1) 5k smoke: wallclock -13.9% / splats -22% / PSNR -0.12 dB、cascading splat reduction を観測。(2) 30k full validation: wallclock **-1.9%** (5k から大幅縮小)、splats **+30%** (5k から逆転)、PSNR **+0.28 dB** (quality improvement!)。5k smoke の cascading 効果は refine.stop_iter=1500 による artifact、30k では sh unlock 完了 (iter 3000) 後に refine が iter 15000 まで full SH で継続 → splats baseline より grow。(3) G.1+G.3 stacked (max_steps=15000 + sh_progressive): Lego **16m13s / 36.254 dB / 428k splats** = Phase D 比 **-61% wallclock + 0.15 dB PSNR** で Pareto sweet spot 確定。Key reframe: G.3 は「speed win」ではなく「**quality improvement at no speed cost**」、stacked variant で G.1 speed と SH warmup quality gain を統合。Implementation: [trainer.sh_progressive] section (default disabled、全 backward compat)、CameraGpu struct を sh_degree (buffer layout) と active_sh_degree (per-iter eval) に分離。Calibration data point: Phase F 5 連続 falsification + G.3 5k smoke artifact = audit / smoke overestimate 6 例目、「smoke は production scale を representative しない」が新教訓。8 scene chain validation pending。卒論 narrative: Phase F (kernel-level fail) → G.2 (architectural insight) → G.3 (algorithmic reframe: speed → quality + stacked Pareto) の 3 family 比較で「Apple Silicon native 最適化は algorithmic compute reduction + early stop の組み合わせが Pareto-optimal」という構造的 calibration。
01

本文

Phase G compute reduction family の G.3 (SH-progressive growth) を 3 layer で検証: (1) 5k smoke で -13.9% wallclock + cascading splat -22% を観測、(2) 30k full では wallclock -2% / splats +30% / PSNR +0.28 dB に変化 (5k smoke の cascading は refine.stop_iter=1500 artifact)、(3) G.1 (15k early stop) + G.3 stacked で Lego 16m13s / 36.254 dB / Pareto sweet spot (Phase D 比 -61% wallclock + 0.15 dB)。Phase F + G の audit/smoke 6 連続 overestimate calibration を踏まえ「production scale でも valid な Pareto improvement は **stacked variant**」と確定。

Headline (Pareto sweet spot: G.1+G.3 stacked = -61% wallclock + 0.15 dB)

G.1 (early stop @ 15k) + G.3 (sh_progressive) stacked で Lego 16m13s / 36.254 dB / 428k splats、Phase D 30k (41m54s / 36.106 dB / 375k splats) 比 **-61% wallclock + 0.15 dB PSNR 改善** の Pareto sweet spot機構: sh_progressive warmup (iter 0-3000、active SH 0→2) で early refine が低周波 表現に focus → better-conditioned splat base、その上で iter 3000-15000 = full SH + refine 並列 → final 428k splats が Phase D 30k の 375k splats より quality-conditioned。G.1 alone (35.690 dB) より +0.56 dB、Phase D alone (36.106) より +0.15 dB、両方上回り。5k smoke の -13.9% は misleading artifact: refine.stop_iter=1500 で splat 動態が production scale と全く違うため、cascading splat reduction が過大評価された。30k full では wallclock -2% / splats +30% / PSNR +0.28 dB と全く違う profile。cherry-pick 済 (main commit 5267464 + b4fb0e6)、default disabled (opt-in only)、bit-exact 11 unit tests pass で zero regression risk。8 scene chain validation pending。

1. Lego 3-layer A/B 結果 (5k smoke → 30k full → stacked)

configwallclockPSNRsplatsvs Phase D
**brush (reference)**9m08s32.04 dB282k-65% wall / -4.07 dB
**Phase D 30k baseline**41m54s36.106 dB375kbaseline
G.1 alone (15k, no sh)14m31s35.690 dB335k-65% wall / -0.42 dB
G.3 alone (30k, sh_progressive)41m07s36.384 dB487k-2% wall / **+0.28 dB**
**G.1+G.3 stacked (15k + sh_prog)****16m13s****36.254 dB**428k**-61% wall / +0.15 dB ✨**
G.1+G.3 stacked が Pareto sweet spot: Phase D を両次元で改善 (wallclock -61% + PSNR +0.15 dB)、brush 1.77× 時間で +4.21 dB の超 Pareto win。G.1 alone は speed at quality cost (-0.42 dB)、G.3 alone は quality at no speed cost (-2% wall)、stacked が両方の good side を統合。

2. 5k smoke の kernel breakdown (artifact 検出前の data)

metricbaseline (F.1)sh-progressive (G.3)Δ解釈
**total wallclock****112.28s****96.70s****-13.9%****Phase F 5 falsify 後、初の clean win**
TOTAL kernel sum168.523s141.800s-15.9%全 kernel cascading speedup の集約
ts_forward (全体)61.562s50.512s-17.9%SH eval skip + splats 削減
ts_fwd_emit_pairs/call4.706 ms3.337 ms**-29%**splats -22% で sort key 生成 work 削減 (二次効果)
ts_backward_raster/call4.516 ms3.691 ms**-18.3%**splats -22% で per-pixel atomic 削減
ts_fwd_radix_sort/call4.744 ms4.204 ms-11.4%pair 数 -22% で sort work 削減
ts_fwd_rasterize/call1.994 ms1.802 ms-9.6%SH eval skip + splats -22%
ts_ssim_fwd_grad/call2.678 ms2.723 ms+1.7% (noise)SSIM は splat 数非依存、noise 圏
**PSNR** (100 view mean)**31.629****31.509****-0.12 dB****許容範囲** (5k smoke variance ±0.1 dB 程度)
**final splats**82,338**64,330****-22%****cascading 効果の root**: 早期表現力制限で refine grow 抑制
Headline: -13.9% wallclock + PSNR -0.12 dB 許容。SH eval 削減自体は forward 6.1% share の portion で寄与 -1% 圏期待だったが、cascading splat reduction (-22%) で全 kernel speedup。emit_pairs -29% / backward_raster -18.3% は splats 数 × per-splat work で説明可能 (splats 削減効果)。

3. 5k smoke artifact 検証 (30k full で reframe)

metric5k smoke30k fullstacked 15kinterpretation
wallclock-13.9%-1.9%**-61%** (G.1 効果が dominant)5k は cascading で過大評価、30k で reality
splats-22%**+30%**+14% (G.3 quality + G.1 stop の中間)5k は refine.stop_iter=1500 で grow 抑制、30k は full SH iter 3000+ で grow 加速
PSNR-0.12 dB**+0.28 dB**+0.15 dB5k は表現力不足で drift、30k はちょうど quality 改善、stacked は中間
headline framingspeed win**quality win****Pareto sweet spot**production scale で G.3 は speed ではなく quality 改善
5k smoke は misleading: refine.stop_iter=1500 で splat 動態が production scale と異なる。30k full でようやく real character (quality improvement at no speed cost)、stacked で G.1 speed と G.3 quality を統合した Pareto win 達成。新教訓: 「smoke は production scale を representative しない」、特に refine 動態に依存する optimization では smoke A/B の結論を 30k validate なしに信用すべきでない。

4. Key mechanism: Pareto sweet spot (stacked variant)

  1. G.1 alone (15k stop) の限界: full SH=3 を iter 0 から有効、refine が high-freq overfitting に走り、splats grow が iter 15000 で truncate される。final 335k splats だが quality は Phase D 比 -0.42 dB
  2. G.3 alone (30k sh_progressive) の動態: iter 0-3000 で sh 0→2 ramp → 低周波 base、iter 3000-15000 で full SH + refine 並列 → splats 487k まで grow、iter 15000-30000 で settle。**quality +0.28 dB だが wallclock 改善なし**
  3. G.1+G.3 stacked (15k + sh_progressive) の synergy: iter 0-3000 で sh warmup (= G.3 の良 part)、iter 3000-15000 で full SH + refine 並列 (= G.3 の core)、iter 15000 で stop (= G.1 の早期停止)。**iter 15000-30000 の 'settle' phase を省略しつつ quality conditioning を獲得**
  4. なぜ stacked が Phase D alone より +0.15 dB か: Phase D は iter 0 から full SH で refine、高周波 overfit を含む 375k splats を生成。stacked は sh warmup で低周波 base → high-freq refine が effective、最終 428k splats が「より well-conditioned」、PSNR boost +0.15 dB を獲得
  5. 5k smoke で見た -22% splats は production と無関係: 5k smoke は refine.stop_iter=1500、splats が grow しきる前に refine が止まる → sh_progressive 抑制効果が直接見える。30k では iter 3000 以降に grow 加速、smoke の cascading speedup は再現不可

3. Implementation summary (cherry-pick 済 main 5267464 + b4fb0e6)

  1. Config 拡張 (splat-train-v1/src/config.rs): [trainer.sh_progressive] section、init: u32 (default 0) / max: u32 (default 0) / unlock_interval: u32 (default 0 = disabled)。enabled()=unlock_interval > 0、active_for_iter(iter)=min(init + (iter-1)/interval, max)
  2. Validation: enabled 時に init <= max <= 4 <= data.sh_degree を強制、bad config reject
  3. CameraGpu struct 分離 (splat-core/src/types.rs): sh_degree (buffer layout = param.sh_degree) と active_sh_degree (per-iter eval) の 2 field、96 → 100 bytes
  4. Shader 更新 (forward/project.metal + backward/project_backwards.metal): SH eval bound は cam.active_sh_degree、buffer indexing (max_coeffs = num_sh_coeffs(cam.sh_degree)) は cam.sh_degree、bit-exact verified
  5. Host dispatcher (splat-metal/src/kernels/project.rs): GpuProjector::project_soa / project_soa_buf / ProjectBackwards::dispatch / dispatch_from_buf に _active suffix override、legacy API 保持
  6. Trainer integration (splat-train-v1/src/trainer.rs + train_loop.rs): train_step に active_sh_degree arg、train_loop で schedule disabled → param.sh_degree 固定、enabled → cfg.sh_progressive.active_for_iter(it)

4. Unit test suite (11 件 / cargo test 43 件 全 pass)

  • schedule pure-fn (7 件): default_disabled / enabled_when_interval_positive / boundary at iter 1/1000/1001/2000/3001/15000 / init==max constancy / validate init>max / validate max>data.sh_degree
  • GPU bit-exact (4 件): forward (active==max==3) bit-exact vs legacy / forward (active=0) == 物理 0 化 scene (|diff|<1e-5) / backward (active=0) で bands 1-3 grad 厳密 0 / Adam で active=0 2 iter 後 bands 1-15 sh_coeffs/m/v 厳密 0 (freeze)

5. Phase F + G calibration 観点 (卒論 §5.4 narrative)

  • Phase F 5 連続 falsification (refine GPU / target cache / emit SIMD / f16 fwd / radix GPU prefix): kernel-level micro-opt 5 例で全て regression or noise 圏内、audit theoretical predictions 5 連続 overestimate
  • G.2 architectural finding: 4.7× gap は kernel-level ではなく dispatch architecture (Burn/CubeCL batching vs Metal 直 per-kernel sync)、Phase F 失敗の統一的説明
  • G.3 algorithmic family: compute reduction (SH progressive) は per-iter work を直接削減 + 二次的に refine 動態を変える ため、kernel-level 限界を超える ROI 達成 (-13.9%)。advisor 予測 ≤1% hedge を上回ったのは cascading splat effect の underestimate
  • 構造的 calibration: algorithmic compute reduction > architectural dispatch > kernel-level micro-opt の ROI 順位。卒論 §5.4 で Phase F + G の比較で本 calibration を方法論 paragraph に

6. 30k full + 8 scene chain validation (pending)

  • 30k Lego validate: 5k smoke の -13.9% wallclock + PSNR -0.12 dB が production scale で維持されるか。Phase D 30k baseline (41m54s / 36.106 dB / 375k splats) との比較、期待 30-35 min (-15-25%) + PSNR 35.5+ dB
  • 8 scene chain: G.1 8 scene chain (32.10 dB mean、mic で -5.84 outlier) と比較、SH progressive で各 scene cascading speedup + PSNR 維持できるか、特に sparse scene (mic / ficus) で表現力制限の影響
  • G.1 + G.3 stacked: early stop @ 15k + SH progressive の重畳効果、想定 -25-30% wallclock (multiplicative ではなく additive 想定、互換性確認)

7. 関連

  • audit baseline: p1-axis1-metal-opt-audit (G.3 = P1.G re-attack)、p1-d-multi-scene-rechain (Phase D baseline)
  • Phase F calibration (kernel-level failed): p1-axis1-phase-f1-emit-simd-falsifiedp1-axis1-phase-f3-radix-gpu-prefix-falsifiedp1-e-refine-gpu-smokep1-axis1-target-cache
  • G.2 structural finding (architectural): p1-axis1-phase-g2-brush-dispatch-architecture
  • 卒論統合候補: chapter-5-4-negative-findings (Phase F + G の Apple Silicon native 最適化 ROI 階層化 paragraph)
02

関連する run

この finding が観測された / 言及している実験 run。

03

関連 finding

© 2026 大竹律輝 — 松田研究室