Equivalencia numérica
Los backends distintos nunca coinciden bit a bit; el enjambre trata la tolerancia medida como un contrato de primera clase.
CUDA, ROCm, Adreno y las CPU computan la misma operación con distintos órdenes de reducción, fusión FMA, acumuladores y aproximaciones de funciones trascendentes — los resultados difieren ~1e-6…1e-3 por operación, por diseño, nunca de forma bit-idéntica. Un enjambre hecho del hardware que aparezca no puede exigir exactitud de bits, así que Kvasir mide la equivalencia en su lugar.
| Par de backends (122B real, expertos de 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 de teléfono vs numpy (x86) | 1.4e-6 | 0.99992 |
| CUDA (GB10 Blackwell) vs Grace ARM CPU | 2.6e-5 | 0.99975 |
La matriz completa de backends está cerrada: los dos backends de GPU (CUDA, ROCm) comparten fuentes de kernel y caen efectivamente bit-idénticos (cosine 1.0000000000), mientras que los pares GPU↔CPU se mantienen equivalentes en ~0.9997. Un worker CUDA y un worker ROCm son intercambiables; un worker GPU y un worker CPU son numéricamente equivalentes.
La suma en coma flotante no es asociativa
- Orden de reducción del matmul — tensor cores, tiles MFMA, workgroups OpenCL y lanes SIMD acumulan en órdenes distintos.
- Precisión de acumulación — almacenamiento F16/BF16 con acumuladores F32 o F16: la palanca más grande de la divergencia.
- Aproximaciones trascendentes — exp (softmax), silu (swiglu) y rsqrt (norms) usan variantes polinómicas/de tabla distintas por backend.
Tolerancias, capacidades, autoridad única
- La verificación es una tolerancia — "acuerdo top-1 ≥ 99.x%, KL ≤ ε" — nunca igualdad de bits.
- Los backends y la precisión de acumulación se anuncian como capacidades del nodo; los nodos que acumulan en F32 se prefieren para rangos sensibles a la salida.
- Los nodos fuera de tolerancia se marcan como no aptos para rangos sensibles, no se rechazan de plano.
- Las decisiones discretas (enrutamiento, muestreo) se fijan a autoridades únicas para que el error continuo nunca pueda volverse divergencia discreta.