专家分片

在专家粒度上切分 MoE:手机背 42–340 MB 的专家,而不是 1.4 GB 的层。

专家分片把蜂群的承载单位从层(122B 上约 1.4 GB)降到专家(5.3 MB)。弱设备下载 8–64 个专家的切片(42–340 MB),作为纯函数 worker 加载——没有注意力、没有 KV、没有采样器——在骨干的路由器选中自己的专家时进行计算。

引擎状态。专家粒度分片是在 Kvasir 上一代引擎上构建并演示的,下面的结果来自那项工作。当前引擎 [p4](/wiki/p4) 今天以层为粒度提供服务;把专家分片迁移到它上面已完成设计、正在推进。凡是点到具体工具或路由的细节,都是当时在上一代引擎上运行的那一套。

两个角色

骨干 × worker

一个 MoE 层内的切分点(路由器只在骨干上跑一次)。

cur   = ffn_norm(x)                     # backbone
ids,p = top_k(softmax(cur @ router), 8) # backbone — authoritative
send  (cur rows, local_ids) → worker    # ~6 KB per decode step
recv  expert_out            ← worker    # worker: 3 mat-muls
x = x + combine(p, partials) + shared(cur)   # backbone — exact
  • 骨干保有稠密路径(注意力、norm、路由器、共享专家、combine),并把所有专家作为 RAM 卸载的后备副本常驻,以获得抗流失能力。
  • Worker(linkcpp-expert-worker --serve)通过一条长连接 TCP 流回答 (n_used, n_tokens, cur, sel) → experts——手机上正是 443 中继隧道的那条流。
  • 覆盖通过专家覆盖市场自愈:POST /api/expert-coverage 心跳上报持有,GET /api/expert-demand 聚合稀缺度,POST /api/expert-volunteer 按节点预算分配最稀缺的范围。
测量而非承诺

已在真实硬件上验证

  • 分片计算 == 整体计算,max|Δ| = 3.6e-12(是精确的重组,不是近似)。
  • 真实 122B 解码的跨进程调度:argmax MATCH,logit cosine 0.99869——与进程内逐字节一致。
  • 一台 Galaxy S25 自主下载其 1.58 GB 切片并逐 token 计算 layer-0 专家:与本地运行 8/8 token 完全一致。
  • 一张位于公网另一端的远程 GPU——每 token 一次 WAN 往返——仍保持贪心 8/8 完全一致(cosine 0.99773):在直连链路上1.2% 吞吐开销,经 CDN 边缘 ~28%。这是串行逐 token 调度的诚实代价,也是为何织物的杠杆是批处理,而非更低延迟。
  • 批量调度在 batch 512(ROCm)达到每 worker 53k tok/s——让蜂群实用化的吞吐织物特性。