数値的等価性
バックエンド同士がビット単位で一致することは決してない。スウォームは測定された許容誤差を一級の契約として扱う。
CUDA、ROCm、Adreno、CPU は同じ演算を異なる縮約順序、FMA 融合、アキュムレータ、超越関数近似で計算します — 結果は演算ごとに約 1e-6…1e-3 ずれ、設計上、決してビット同一にはなりません。やって来るハードウェアで構成されるスウォームはビット一致を要求できないため、Kvasir は代わりに等価性を測定します。
| バックエンド対(実 122B、layer-0 エキスパート) | max|Δ| | cosine |
|---|---|---|
| CUDA (GB10 Blackwell) vs ROCm (MI250) | 3.5e-10 | 1.0000000000 |
| ROCm (MI250) vs numpy (x86) | 7.9e-7 | 0.99996 |
| スマホ ARM CPU vs numpy (x86) | 1.4e-6 | 0.99992 |
| CUDA (GB10 Blackwell) vs Grace ARM CPU | 2.6e-5 | 0.99975 |
全バックエンド行列が閉じた:二つの GPU バックエンド(CUDA・ROCm)はカーネルソースを共有し事実上ビット同一(cosine 1.0000000000)、一方 GPU↔CPU 対は ~0.9997 で等価だ。CUDA ワーカーと ROCm ワーカーは交換可能、GPU ワーカーと CPU ワーカーは数値的に等価である。
なぜ異なるのか
浮動小数点加算には結合則がない
- matmul の縮約順序 — tensor core、MFMA タイル、OpenCL ワークグループ、SIMD レーンがそれぞれ異なる順序で累積します。
- 累積精度 — F16/BF16 格納に F32 か F16 のアキュムレータ。発散幅への最大のレバーです。
- 超越関数近似 — exp(softmax)、silu(swiglu)、rsqrt(norm)はバックエンドごとに異なる多項式/テーブル変種を使います。
契約
許容誤差・能力・単一権威
- 検証は許容誤差です — 「top-1 一致率 ≥ 99.x%、KL ≤ ε」 — ビット同一性ではありません。
- バックエンドと累積精度はノードの能力として公示され、F32 累積ノードが出力に敏感なランクで優先されます。
- 許容誤差を外れたノードは敏感なランクに不適とマークされるだけで、丸ごと拒否はされません。
- 離散的決定(ルーティング・サンプリング)は単一権威に固定され、連続誤差が離散発散になることはありません。