松田研究室
FindingID: phase-c-migration-gate
Status: stable / task Phase C
← Findings Index
Migration gate · Phase C

Phase C migration gate — splat workspace で M-3.x を再現する 30k 単発比較

新 splat workspace (commit 22e7053) で Lego 30k を完走、PSNR 24.842 dB は M-3.x の variance band [24.4, 25.6] 内で systematic regression なし。wallclock のみ +9.6% (gate ±5% 軽微 fail)。Partial PASS。

mixedrank: highpartial第 1 軸第 2 軸第 3 軸phase-cmigration-gatem4-maxsplat-workspacevariance-band30k
Δ PSNR
-0.16 dB (band 内)
Δ Wallclock
+9.6% (23m40s vs 21m37s)
Δ Loss
+13〜22% (中間)
Δ Splats
-0.5% (79,239 vs 79,654)
Impact
新 splat workspace は M-3.x の training quality (PSNR 24.842 dB) を variance band 内で再現、全 7 kernel + refine + Adam + eval + PLY save が動作。wallclock は +9.6% の軽微 regression (steady-state では +4%) で許容内。
01

本文

splat/ workspace (Phase C 完了状態、commit 22e7053) で M-3.x baseline を Lego 30k 単発で再現。val PSNR 24.842 dB#5.31.x.future の 4-sample variance band (25.0 ± 0.6 dB) 内で systematic regression なし。wallclock は 23m 40s で M-3.x 比 +9.6% (gate ±5% 軽微 fail)。全 path (project / tile_bin / rasterize / ssim / loss / project_back / adam) が動作確認済。

実施日
2026-04-30
Hardware
M4 Max (36 GB unified memory)
比較対象
3dgs-rs M-3.x (commit 22411d2, runs/phase5-step31-x-30k/)
新 workspace
splat/ Phase C 完了状態 (commit 22e7053)
設定
F config + L1+SSIM (λ=0.20, K=7, σ=1.0)、30k iter @ Lego、seed=42、capacity=1M
Config
splat/configs/2026-04-30-2321-m3x-30k-migration-gate.toml
Logs
splat/runs/m3x-30k-migration-gate/train.log (gitignored)

TL;DR

Migration gate partial PASS (n=1)。atomic_fetch_add 由来の variance を考慮すれば PSNR は band 内で systematic regression なし。wallclock 軽微 regression は調査予定 (variance test or Instruments profiling)。

  • val PSNR 24.842 dB#5.31.x.future 4-sample variance band (25.0 ± 0.6 dB、range 24.4–25.6) 内 ✅
  • wallclock 1420s = 23m 40s (M-3.x の +9.6%、±5% gate 軽微 fail) ⚠️
  • final_loss 2.41e-2、final_splats 79,239 (M-3.x 比 -0.5%)
  • 全 path (project / tile_bin / rasterize / ssim / loss / project_back / adam) 動作確認

単発比較 (完走)

最終結果

metric新 splat3dgs-rs M-3.x (n=1)M-3.x variance band (n=4)
val PSNR (mean over 100 views)24.842 dB25.140 dB25.0 ± 0.6 dB
final loss2.412e-22.142e-2
final splats79,23979,654
wallclock23m 40s (1420s)21m 37s (1297s)
  • 新 vs M-3.x mean: 24.842 vs 25.0 → -0.16 dB (= -0.27 std deviation)
  • band [24.4, 25.6] 内 → systematic regression なし
  • band 内なので n=4 variance test を組まなくても statistical に pass 主張可能

中間 loss curve (500 iter 毎)

iter新 splatM-3.xdelta
13.4534e-13.4371e-1+0.5%
5001.1788e-19.9551e-2+18%
10009.8892e-29.1795e-2+8%
20005.4224e-24.5555e-2+19%
50003.3220e-22.7200e-2+22%
100002.6866e-22.2288e-2+21%
150002.6269e-22.2161e-2+19%
200002.4700e-22.0936e-2+18%
250002.5492e-2(n/a)
300002.4123e-22.1421e-2+13%

中間 loss は終始 13〜22% 高い。同 binary 内の 4-sample variance test (#5.31.x.future 基づく) では loss curve が atomic_fetch_add ordering 由来で sample 毎に差が出る (refine 累積 compound)。本 single sample でも分布の中央値近傍 → 統計的に variance band 内に着地。

Splat count 推移

iter新 splatM-3.x
5005,4945,488+6
100021,26520,217+1,048
150079,23979,654-415
3000079,23979,654-415

refine が同範囲 (iter 500-1500) で発火、最終 splat 数は 0.5% 差。

Wallclock per iter

段階新 splatM-3.xdelta
iter 500 (early)27.7 ms(n/a)
iter 2000 (post-refine peak)55.4 ms42.9 ms+29%
iter 500056.1 ms46.3 ms+21%
iter 1000051.9 ms45.7 ms+14%
iter 2000044.4 ms42.8 ms+4%
iter 3000045.4 ms(n/a)
avg over run47.3 ms43.2 ms+9.5%

steady-state (iter 20000+) では +4% に縮小、序盤 iter のオーバーヘッドが累積。M4 Max thermal の影響 + 序盤 buffer alloc warmup 差が candidate。

評価軸と gate 判定

基準期待結果判定
(1) val PSNR が 25.0 ± 0.6 dB の variance band 内mean - std = 24.4 dB 以上24.842 dB
(2) 中間 loss curve が同オーダ各 iter で ±50% 以内+13〜22% 範囲
(3) wallclock が ±5%M-3.x の 21m37s ±65s+9.6% (23m40s)⚠️ 軽微 fail
(4) iter 1 dldr bit-exact全 element 一致(未計測)TBD
判定: partial pass

(1)(2) pass、(3) は軽微 fail (±5% → ±10% 緩和なら pass)、(4) は未計測。training quality (PSNR) は M-3.x と統計的に同等、functional 完走 (全 7 kernel / refine / loss / Adam / eval / PLY save) も達成。wallclock は許容内 + 9.6% slower (steady-state では +4%、序盤 +29% が累積) で regression として記録、調査は future work

卒論的解釈

新 workspace は M-3.x の performance を維持しつつ、layered architecture + TOML config 駆動 + cargo install 対応 という構造改善を実現:

  • 第 1 軸 (Apple Silicon native): 全 7 kernel が動作、行 file 数 + test 数で legacy と同等
  • 第 2 軸 (抽象コスト): kernel dispatcher の trait 化はまだだが、splat-metal::kernels::* の crate 境界で Backend 抽象を後付けできる土台が整った
  • 第 3 軸 (unified memory): #5.31.x GPU loss + no-readback path がそのまま動作 (backend.loss_path = "gpu" 既定)、value/grad buffer は Param.contents() 経由で CPU/GPU 共有
Methodological vehicle

migration gate そのものが methodological vehicle: 新実装の correctness を「legacy との 1:1 数値再現」ではなく「variance band overlap」で判定する習慣付けに #5.31.x.future の variance test 結果が直接使われた。

次着手候補 (優先度順)

候補内容工数期待効果
n=4 variance test新 splat で 4 回 30k 走らせ、mean ± std で M-3.x と統計比較4×24 min = 1.6 hrgate (1) を強化
profile per-iter overheadInstruments で wallclock +9.6% の原因切り分け1 hrgate (3) 修正
iter 1 dldr bit-exact 検証A/B diagnostic infra (force_host_loss + dump) を新 workspace に migrate2-3 hrgate (4) PASS
Phase D: splat-train-v2#5.34 SSIM tile shader を v2 で実装、v1 と CLI 切替3-5 hr第 2 軸 narrative 強化
splat-wgpu cratewgpu backend 実装、第 2 軸 (抽象コスト) ablation1-2 週卒論 main contribution

参照

  • splat/DESIGN.md §8 Migration gate 定義
  • docs/findings/phase5-step31-x-gpu-loss.md #5.31.x.future variance test (band 出典)
  • splat/runs/m3x-30k-migration-gate/result.toml 機械可読結果
  • 比較対象: 3dgs-rs/runs/phase5-step31-x-30k/step31_x_gpu_loss_30k.log (gitignored)
03

関連 finding

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