Ekuivalensi numerik

Backend berbeda tak pernah sepakat bit-demi-bit; swarm memperlakukan toleransi terukur sebagai kontrak kelas satu.

CUDA, ROCm, Adreno, dan CPU menghitung operasi yang sama dengan urutan reduksi, fusi FMA, akumulator, dan aproksimasi fungsi transendental yang berbeda — hasilnya berbeda ~1e-6…1e-3 per operasi, memang begitu desainnya, tak pernah bit-identik. Swarm yang tersusun dari perangkat keras apa pun yang datang tak bisa menuntut ketepatan bit, maka Kvasir mengukur ekuivalensi sebagai gantinya.

Pasangan backend (122B nyata, pakar layer-0)max|Δ|cosine
CUDA (GB10 Blackwell) vs ROCm (MI250)3.5e-101.0000000000
ROCm (MI250) vs numpy (x86)7.9e-70.99996
ARM CPU ponsel vs numpy (x86)1.4e-60.99992
CUDA (GB10 Blackwell) vs Grace ARM CPU2.6e-50.99975

Matriks backend lengkap telah ditutup: dua backend GPU (CUDA, ROCm) berbagi sumber kernel dan mendarat praktis bit-identik (cosine 1.0000000000), sementara pasangan GPU↔CPU tetap ekuivalen pada ~0.9997. Worker CUDA dan worker ROCm dapat dipertukarkan; worker GPU dan worker CPU ekuivalen secara numerik.

Mengapa berbeda

Penjumlahan floating-point tidak asosiatif

  • Urutan reduksi matmul — tensor core, tile MFMA, workgroup OpenCL, dan lane SIMD mengakumulasi dalam urutan berbeda.
  • Presisi akumulasi — penyimpanan F16/BF16 dengan akumulator F32 vs F16: tuas terbesar divergensi.
  • Aproksimasi transendental — exp (softmax), silu (swiglu), dan rsqrt (norm) memakai varian polinomial/tabel yang berbeda per backend.
Kontraknya

Toleransi, kapabilitas, otoritas tunggal

  • Verifikasi adalah toleransi — "kesepakatan top-1 ≥ 99.x%, KL ≤ ε" — tak pernah kesetaraan bit.
  • Backend dan presisi akumulasi diiklankan sebagai kapabilitas node; node berakumulasi F32 diutamakan untuk rank yang sensitif keluaran.
  • Node di luar toleransi ditandai tak layak untuk rank sensitif, bukan ditolak mentah-mentah.
  • Keputusan diskret (perutean, sampling) dipatok pada otoritas tunggal agar galat kontinu tak pernah menjadi divergensi diskret.