異種バックエンド間の数値的等価性

CUDA、ROCm、Adreno、CPU がビット単位で一致することは決してない。それでもスウォームが一つの整合したモデルを生むのは、運ではなく設計された性質だ。

鍵となる区別

厳密(exact)vs 等価(equivalent)——異なる二つの性質

  • 同一バックエンド内 — 厳密(3.6e-12):エキスパートをノードに分割して結合するのは同じ加重和の再グループ化で、違いは浮動小数点の累積順序のみ。オラクルで検証済み。
  • バックエンド間 — 等価(1e-3…1e-6):同じ演算でもハードウェアが違えば演算ごとに約 1e-3–1e-6 の相対誤差を伴い、決してゼロにならない。スウォームはこの領域に生きている。

「厳密」は一台のデバイス内で分解が保証するもの。「等価」は異種ハードウェアが与えるもの。スウォームの仕事は、等価性が発散へ積み上がらないようにすることだ。

実測 · 実 122B、三つのバックエンド

理論ではない——ハードウェアで測定

同一の Qwen3.5-122B layer-0 エキスパート FFN を、linkcpp-expert-worker が MI250(ROCm)、スマートフォンの ARM CPU(SM-S938N)、x86 の numpy リファレンスで計算——同じ入力、同じ重み、異なる命令セットと縮約順序:

Three backends feeding one comparator where their waveforms overlap within tolerance
バックエンド対max|Δ|cosine
ROCm (GPU) vs numpy (x86)7.9e-70.99996
スマホ ARM CPU vs numpy (x86)1.4e-60.99992
ROCm GPU vs スマホ ARM CPU1.5e-60.99990

三つの命令セット、一つの計算——どの対も等価(cosine ≈ 0.9999)、どの対もビット同一ではない(Δ ≈ 1e-6)。残差が小さいのはルーター権威が入力とエキスパート選択を固定したからだ。

その後、実物の NVIDIA GB10 Grace Blackwell ハードウェアでの実行が最後のバックエンドで行列を閉じた:CUDA ↔ ROCm は cosine 1.0000000000(max abs 3.5e-10、二つの GPU バックエンドがカーネルソースを共有するため事実上ビット同一)、CUDA ↔ Grace ARM CPU は cosine 0.99975——上で見た GPU↔CPU と同じパターンだ。

なぜバックエンドは異なるのか

浮動小数点加算に結合則はない

  • matmul の縮約順序 — tensor core、MFMA タイル、OpenCL ワークグループ、SIMD レーンがそれぞれ異なる順序・タイリングで累積。
  • FMA 融合 — a*b+c を 1 回丸め(FMA)か 2 回か、バックエンドごとに融合が異なる。
  • 累積精度 — F16/BF16 格納に F32 か F16 のアキュムレータ(発散幅への最大のレバー)。
  • 超越関数近似 — exp(softmax)・silu/sigmoid(swiglu)・rsqrt(norm)の多項式/テーブル変種の違い。
  • 逆量子化 + matmul 経路 — 逆量子化してから乗算 vs 融合量子化カーネルで、中間の丸めが異なる。
  • 非決定的カーネル — atomic/split-K 縮約は同一デバイスでも実行ごとに変わりうる。

これらはバグではない。各アクセラレータの高速経路が払う代償だ。

それでも成り立つ理由

決定は単一の権威に、累積は十分な精度で

ルーター権威——中核の不変条件。ネットワーク内で唯一の離散的決定は MoE ルーティング(256 中 top-8)だ。各バックエンドがルーターを再実行すれば、境界トークンで異なるエキスパートが選ばれ、本物の発散が生じる。Kvasir はルーターをバックボーンで一度だけ実行し、ワーカーには選ばれたエキスパート id だけを送る → 異種スウォームは各エキスパート出力の*大きさ*が僅かに違うだけで、*どのエキスパートが動くか*は決して割れない。壊滅的な離散発散を有界の連続誤差へ変える、異種エキスパートシャーディングの整合性規則である。

  • 離散 argmax:デコードはロジットに対する argmax だ。1e-3 の揺らぎがトークンを反転させるのは、二候補がその範囲まで接近しているときだけ——ほとんどの位置でマージンははるかに大きく、トークンは同一に出る。稀な反転は、別のシードと区別できないほど曖昧な位置に限られる。
  • combine は加算:部分結果は確率加重の和で結合される。独立した約 1e-4 の誤差は非干渉的に加わり——k 倍でなく √k で育ち——大きな値の相殺(cancellation)がないため残差は良条件のまま保たれる。
壊れうる場所 · それを止める規則

発散モードと防御

発散モードメカニズム規則
ルーティング不一致境界トークンの top-8 をバックエンドごとに違えて選ぶルーター権威——バックボーンで一度決定、id をディスパッチ
軌跡の分岐トークンごとのロジット揺らぎがやがてトークンを反転させ、以後のシーケンスが新しいシードのように割れるデコード/サンプリングを一つのノードに固定
深さ累積49 層 × 各約 1e-4 → 最終ロジットで最大 1e-2境界と combine で F32 累積
自己非決定性atomic/split-K が実行ごとに変わるcombine は決定的カーネル、検証は許容誤差で
精度不一致一方は F16 累積、他方は F32累積精度を capability として公示、出力ランクは F32 ノード優先
等価性は数字である

測定プロトコル

  • 演算ごとのデルタ — 同じ入力で A vs B の matmul・swiglu・softmax・norm 相対誤差。
  • レイヤー境界ドリフト — 一層通過後の residual デルタを積み上げ、深さ累積が √L か L かを見る。
  • エンドツーエンドのロジット発散 — 全フォワードの L∞・L2・KL ダイバージェンス。
  • 決定一致率 — top-1 トークン一致率と top-8 ルーティング一致率(ルーター権威の必要性の検証)。
  • 生成安定性 — greedy N トークンで A と B が最初に分岐するインデックス。
  • タスクレベル — perplexity・評価スコアのデルタ:ユーザーが実際に感じる唯一の指標。

合格は許容誤差だ——「top-1 一致率 ≥ 99.x%、KL ≤ ε」。許容誤差を外れたノードは敏感なランクに不適とマークされるだけで、丸ごと拒否はされない。

なぜコアのスウォーム技術なのか

ビット一致は不可能で、不要でもある

同種クラスタはビット厳密を仮定できるが、スウォームはできない——前提が*来るハードウェアをそのまま使う*だからだ。だから Kvasir は数値等価性をプロトコル互換性とまったく同じ一級の、測定される契約として扱う:バックエンドと累積精度をノード capability として公示し、ルーター権威を不変条件として強制し、すべての検証をビット一致でなく許容誤差で行う。測定された数値等価性 + 単一権威の離散的決定——それが地球上のあらゆる GPU で一つのモデルを同時に走らせるものであり、すなわちスウォームである。