异构后端间的数值等价性
CUDA、ROCm、Adreno 和 CPU 永远不会逐位一致。蜂群仍能产出一个连贯的模型,这是设计出来的性质,不是运气。
精确(exact)vs 等价(equivalent)——两种不同的性质
- 同一后端内 — 精确(3.6e-12):把专家拆到各节点再合并,是同一加权和的重组;差异只来自浮点累加顺序。已由 oracle 验证。
- 跨后端 — 等价(1e-3…1e-6):同一算子在不同硬件上带有约 1e-3–1e-6 的每算子相对误差,且永不为零。蜂群就生活在这个区间里。
"精确"是分解在单台设备内保证的;"等价"是异构硬件给你的。蜂群的任务是不让等价性累积成发散。
不是理论——在硬件上测得
同一个 Qwen3.5-122B layer-0 专家 FFN,由 linkcpp-expert-worker 在 MI250(ROCm)、手机 ARM CPU(SM-S938N)和 x86 numpy 参考上计算——相同输入、相同权重,不同指令集与归约顺序:

| 后端对 | max|Δ| | cosine |
|---|---|---|
| ROCm (GPU) vs numpy (x86) | 7.9e-7 | 0.99996 |
| 手机 ARM CPU vs numpy (x86) | 1.4e-6 | 0.99992 |
| ROCm GPU vs 手机 ARM CPU | 1.5e-6 | 0.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 tile、OpenCL workgroup 和 SIMD lane 以不同顺序与切块累加。
- FMA 融合 —
a*b+c舍入一次(FMA)或两次,各后端融合方式不同。 - 累加精度 — F16/BF16 存储配 F32 或 F16 累加器(对发散幅度影响最大的杠杆)。
- 超越函数近似 — exp(softmax)、silu/sigmoid(swiglu)、rsqrt(norm)的多项式/查表变体不同。
- 反量化 + matmul 路径 — 先反量化再乘 vs 融合量化内核,中间舍入不同。
- 非确定内核 — atomic/split-K 归约在同一设备上也可能逐次运行不同。
这些都不是 bug,而是每个加速器的快速路径所付的代价。
决策归于单一权威,累加保有足够精度
路由器权威——核心不变式。网络内唯一的离散决策是 MoE 路由(256 选 top-8)。若每个后端都重跑路由器,边界 token 会选出不同的专家,产生真正的发散。Kvasir 让路由器在骨干上只跑一次,只把选中的专家 id 发给 worker。异构蜂群或许在每个专家输出的*幅值*上有差异——但*哪些专家运行*绝不分歧。这把灾难性的离散发散转化为有界的连续误差,是异构专家分片的一致性规则。
- 离散 argmax:解码是对 logits 取 argmax。1e-3 的抖动只有在两个候选相差不到 1e-3 时才会翻转 token——绝大多数位置的差距远大于此,因此 token 完全一致;罕见的翻转发生在与换一个随机种子无法区分的模糊位置。
- combine 是加法:部分结果以概率加权求和合并。独立的约 1e-4 误差非相干地相加——按 √k 而非 k 增长——且没有大数相消,残差保持良态。
发散模式与防御
| 发散模式 | 机制 | 规则 |
|---|---|---|
| 路由不一致 | 各后端对边界 token 选出不同 top-8 | 路由器权威——骨干一次决定,调度 id |
| 轨迹分叉 | 逐 token 的 logit 抖动终会翻转某个 token,序列像换了种子一样分叉 | 解码/采样钉在一个节点 |
| 深度累积 | 49 层 × 各约 1e-4 → 最终 logits 可达 1e-2 | 边界与 combine 用 F32 累加 |
| 自身非确定 | atomic/split-K 逐次运行不同 | combine 用确定性内核;验证用容差 |
| 精度不匹配 | 一个节点 F16 累加,另一个 F32 | 累加精度作为能力公示;输出 rank 优先 F32 节点 |
测量协议
- 每算子 delta — 相同输入下 A vs B 在 matmul、swiglu、softmax、norm 上的相对误差。
- 层边界漂移 — 过一层后的 residual delta,逐层堆叠看深度累积是 √L 还是 L。
- 端到端 logit 发散 — 全前向的 L∞、L2 与 KL 散度。
- 决策一致率 — top-1 token 一致率加 top-8 路由一致率(验证路由器权威的必要性)。
- 生成稳定性 — greedy N 个 token,A 与 B 首次分歧的位置。
- 任务层面 — perplexity 与评测分数的 delta:用户唯一能感知的指标。
合格标准是容差——"top-1 一致率 ≥ 99.x%,KL ≤ ε"。超出容差的节点只被标记为不适合敏感 rank,不会被整体拒绝。
逐位一致既不可能,也无必要
同构集群可以假设逐位精确;蜂群不行——它的前提是*来什么硬件用什么硬件*。所以 Kvasir 把数值等价当作与协议兼容性完全同级的一等、可测量的契约:后端与累加精度作为节点能力公示,路由器权威作为不变式强制,所有验证用容差而非逐位相等。测得的数值等价 + 单一权威的离散决策——这就是让一个模型同时跑在地球上每块 GPU 上的东西,也就是蜂群。