数値一致契約
統一複合判定
CPU・CUDA・Metal の各バックエンドは同じ計算に対して厳密に同一のビット 列を返すとは限りません(GPU の Tensor Core 系実装は TF32 等の精度 低下を前提とするため)。そのため fandhe-ai は全バックエンド ペア共通の複合判定でバックエンド間数値一致を検証します。
相対誤差 1e-3 未満 または 絶対誤差 1e-5 未満
この判定は「相対誤差が小さいか、絶対誤差が小さいかのどちらかを満たせば 一致とみなす」複合条件です(値がゼロに近いケースでは相対誤差が発散し やすいため、絶対誤差側の条件が補完します)。TF32 前提の複合指標として 確定した判定であり、任意のバックエンドペアに同一基準を適用します。
丸め方針(FMA 契約)の統一
バックエンド間で丸め方針(FMA: fused multiply-add の契約)を揃えて います。
- CPU 参照実装:
f32::mul_addを使用 - CUDA: NVRTC が生成するコードの既定 FMA 契約
- Metal:
simdgroup_multiply_accumulateの既定 FMA 契約
この統一は PoC-v2-5 の K=4096 ストレスケース(累積演算数が多く丸め誤差 が蓄積しやすい形状)で実測確認済みです。FMA 契約がバックエンド間で 食い違うと、同じ入力でも累積丸め誤差の方向がずれ、複合判定の閾値を 超えて不一致になるケースが生じるため、丸め方針そのものを合わせることで この失敗モードを構造的に避けています。
許容誤差を単独で緩和しない
バックエンド間数値一致テストの許容誤差(tolerance)は、ポリシー除外 リストのブラインドスポット対象であり、単独で緩和しません。閾値の 変更は人間(ユーザー)の承認を要する運用としています。これは自己修復 ループ(guardrail/self-repair)が数値一致テストを都合よく緩めて 「合格」を作り出す経路を塞ぐための設計です。
学習系の収束判定・compat 層の薄いラッパー性の実証(例: crates/facade/tests/compat_sequential_train.rs の「手動ループ」と 「Sequential 経由ループ」の比較)では、同一 ops・同一演算列である 限り複合判定の許容誤差すら使わずビット一致(to_bits() 比較)で 判定します。許容誤差はバックエンド実装が異なる場合にのみ意味を持つ 概念であり、同一実装同士の比較にまで許容誤差を持ち込むと、本来検出 すべき退行(regression)を許容誤差の中に埋もれさせてしまうためです。
training-loop example・ inference exampleはいずれも CPU バックエンド 単体で完結するため複合判定そのものは登場しませんが、推論の 2 経路 (predict() と 明示的な Tape 経由の forward())が同一計算である ことをビット一致で確認する構成にしています。