Ekuivalensi numerik lintas backend heterogen
CUDA, ROCm, Adreno, dan CPU tak akan pernah sepakat bit-demi-bit. Bahwa swarm tetap menghasilkan satu model koheren adalah sifat yang dirancang, bukan keberuntungan.
Eksak vs ekuivalen — dua sifat berbeda
- Dalam satu backend — eksak (3.6e-12): membagi pakar antar node lalu menggabungkannya adalah jumlah berbobot yang sama dikelompokkan ulang; satu-satunya perbedaan adalah urutan akumulasi floating-point. Terverifikasi oracle.
- Antar backend — ekuivalen (1e-3…1e-6): operasi yang sama di perangkat keras berbeda membawa galat relatif per-op sekitar 1e-3–1e-6, dan tak pernah nol. Swarm hidup di rezim ini.
"Eksak" adalah yang dijamin dekomposisi di dalam satu perangkat. "Ekuivalen" adalah yang diberikan perangkat keras heterogen. Tugas swarm adalah mencegah ekuivalensi menumpuk menjadi divergensi.
Bukan teori — diukur di perangkat keras
FFN pakar layer-0 Qwen3.5-122B yang sama, dihitung oleh linkcpp-expert-worker di MI250 (ROCm), ARM CPU ponsel (SM-S938N), dan referensi numpy x86 — masukan sama, bobot sama, set instruksi dan urutan reduksi berbeda:

| Pasangan backend | max|Δ| | cosine |
|---|---|---|
| ROCm (GPU) vs numpy (x86) | 7.9e-7 | 0.99996 |
| ARM CPU ponsel vs numpy (x86) | 1.4e-6 | 0.99992 |
| GPU ROCm vs ARM CPU ponsel | 1.5e-6 | 0.99990 |
Tiga set instruksi, satu komputasi — setiap pasangan ekuivalen (cosine ≈ 0.9999), tak ada pasangan yang bit-identik (Δ ≈ 1e-6). Residunya kecil karena otoritas router mematok masukan dan pemilihan pakar.
Jalan berikutnya di perangkat keras NVIDIA GB10 Grace Blackwell nyata menutup matriks pada backend terakhir: CUDA ↔ ROCm mendarat pada cosine 1.0000000000 (max abs 3.5e-10, praktis bit-identik, karena kedua backend GPU berbagi sumber kernel), dan CUDA ↔ Grace ARM CPU pada cosine 0.99975 — pola GPU↔CPU yang sama seperti di atas.
Penjumlahan floating-point tidak asosiatif
- Urutan reduksi matmul — tensor core, tile MFMA, workgroup OpenCL, dan lane SIMD mengakumulasi dalam urutan dan pengubinan berbeda.
- Fusi FMA —
a*b+cdibulatkan sekali (FMA) atau dua kali, difusikan berbeda per backend. - Presisi akumulasi — penyimpanan F16/BF16 dengan akumulator F32 vs F16 (tuas terbesar divergensi).
- Aproksimasi transendental — varian polinomial/tabel dari exp (softmax), silu/sigmoid (swiglu), rsqrt (norm).
- Jalur dequant + matmul — dekuantisasi-lalu-matmul vs kernel terkuantisasi terfusi membulatkan nilai antara secara berbeda.
- Kernel non-deterministik — reduksi atomic/split-K bisa berbeda antar-run di perangkat yang sama.
Tak satu pun dari ini adalah bug. Ini harga yang dibayar jalur cepat tiap akselerator.
Satu otoritas untuk keputusan, presisi cukup untuk akumulasi
OTORITAS ROUTER — invarian inti. Satu-satunya keputusan diskret dalam jaringan adalah perutean MoE (top-8 dari 256). Jika tiap backend menjalankan ulang router, token perbatasan akan memilih pakar yang berbeda dan benar-benar divergen. Kvasir menjalankan router sekali, di backbone, dan hanya mengirim id pakar terpilih ke worker. Swarm heterogen boleh berbeda pada *besaran* keluaran tiap pakar — tak pernah berbeda pada *pakar mana yang berjalan*. Ini mengubah divergensi diskret katastrofik menjadi galat kontinu terbatas, dan merupakan aturan koherensi sharding pakar heterogen.
- Argmax diskret: dekode adalah argmax atas logits. Goyangan 1e-3 hanya membalik token bila dua kandidat berjarak kurang dari 1e-3 — di sebagian besar posisi marginnya jauh lebih besar, sehingga token keluar identik; pembalikan langka terjadi di posisi seambigu seed yang berbeda.
- Combine adalah penjumlahan: hasil parsial melebur sebagai jumlah berbobot probabilitas. Galat independen ~1e-4 bertambah secara inkoheren — tumbuh seperti √k, bukan k — dan tak ada pembatalan nilai besar, sehingga residu tetap terkondisi baik.
Mode divergensi dan pertahanan
| Mode divergensi | Mekanisme | Aturan |
|---|---|---|
| Ketidakcocokan perutean | Backend memilih top-8 berbeda untuk token perbatasan | Otoritas router — diputuskan sekali di backbone, id di-dispatch |
| Percabangan lintasan | Goyangan logit per token akhirnya membalik satu token; urutan bercabang seperti seed baru | Dekode/sampling dipatok ke satu node |
| Akumulasi kedalaman | 49 lapisan × ~1e-4 masing-masing → hingga 1e-2 di logits akhir | Akumulasi F32 di perbatasan dan combine |
| Non-determinisme diri | Kernel atomic/split-K bervariasi antar-run | Kernel combine deterministik; verifikasi memakai toleransi |
| Ketidakcocokan presisi | Satu node mengakumulasi F16, yang lain F32 | Presisi akumulasi diiklankan sebagai kapabilitas; node F32 diutamakan untuk rank keluaran |
Protokol pengukuran
- Delta per-op — masukan sama, galat relatif A vs B pada matmul, swiglu, softmax, norm.
- Drift perbatasan lapisan — delta residual setelah satu lapisan, ditumpuk untuk melihat apakah kedalaman terakumulasi sebagai √L atau L.
- Divergensi logit ujung-ke-ujung — L∞, L2, dan divergensi KL atas forward penuh.
- Kesepakatan keputusan — kesepakatan token top-1 plus kesepakatan perutean top-8 (memvalidasi mengapa otoritas router diperlukan).
- Stabilitas generasi — greedy N token; indeks pertama tempat A dan B berbeda.
- Tingkat tugas — delta perplexity dan skor evaluasi: satu-satunya metrik yang benar-benar dirasakan pengguna.
Kelulusan adalah toleransi — "kesepakatan top-1 ≥ 99.x%, KL ≤ ε". Node di luar toleransi ditandai tak layak untuk rank sensitif, bukan ditolak mentah-mentah.
Kesepakatan bit mustahil — dan tak perlu
Klaster homogen bisa mengasumsikan ketepatan bit; swarm tidak — premisnya adalah *perangkat keras apa pun yang datang*. Maka Kvasir memperlakukan ekuivalensi numerik persis seperti kompatibilitas protokol: kontrak kelas satu yang terukur. Backend dan presisi akumulasi diiklankan sebagai kapabilitas node, otoritas router ditegakkan sebagai invarian, dan setiap verifikasi memakai toleransi alih-alih kesetaraan bit. Ekuivalensi numerik terukur + keputusan diskret otoritas tunggal — itulah yang membuat satu model berjalan di setiap GPU di bumi sekaligus. Itulah swarm.