开源llama.cpp Releases·原文 2026年10月20日

llama.cpp b11752修复MoE测试中的后端噪声导致的专家选择不一致

该版本修改测试逻辑,为每个专家分配独立分数区间,使top-k选择只取决于专家索引;Beam架构在 160 个随机种子下与CPU参考结果的偏差从 4e-3降至 4e-7。另在测试设备表中区分Apple SoC的CPU与Metal GPU。

AI解读:llama.cpp发布b11752,测试改动让MoE路由选择不再受后端噪声影响(PR #30818)。发布说明称路由分数落在 [0,1) 区间,后端间噪声可能使最后一个专家或专家组仍被选中、第一个被丢弃,二者处于并列状态,导致同一token被路由到不同专家。

受影响的是Beam架构:它是测试中唯一同时具有真实top-k(8 选 2)和group top-k(4 组选 2)的MoE架构。在M2 Ultra上 20 个种子中有 2 个失败,logits偏差为 4e-3,而通常为 5e-7;其他MoE架构为 2 选 2,不会出现并列。

修复方式是以步长 2 的斜坡填充选择偏置,让每个专家拥有自己的分数区间,使top-k仅由专家索引决定;偏置只影响选择,权重仍来自无偏概率,MoE输出幅度不变。发布说明称Beam在全部 160 个种子上与CPU参考结果偏差在 4e-7以内。

同一版本还修改测试设备表,区分Apple SoC的CPU与GPU:两者都报告相同描述(如“Apple M2 Ultra”),此前表格中两行无法区分,失败行也看不出由Metal设备还是主机CPU产生;现在补充设备名(也是 -b参数所用),除非描述本身已是名称。

该版本同时提供macOS、iOS、Linux、Android、Windows等多平台预编译包,包括CUDA 12/13、Vulkan、ROCm 10.0、OpenVINO、SYCL及Snapdragon的CPU/GPU/NPU版本。

llama.cpp发布b11752版本,测试改动使MoE路由选择独立于后端噪声(PR #30818)。发布说明称,路由分数位于 [0,1) 区间,后端间的随机噪声可能让最后一个专家或专家组仍被选中、第一个在并列中被丢弃,随后token被路由到不同专家,logits偏差达到 4e-3,而平时为 5e-7。

Beam架构的并列问题与修复方式

发布说明指出,Beam是测试中唯一具有真实top-k(8 个专家中用 2 个)和group top-k(4 个组中用 2 个)的架构,因此是唯一会碰到该问题的MoE架构。在M2 Ultra上,20 个随机种子中有 2 个失败;其他MoE架构为 2 选 2,不会出现并列。

修复方式是用步长 2 的斜坡填充选择偏置,给每个专家分配各自的分数区间,使top-k结果只取决于专家索引。发布说明称该偏置只作用于选择,权重仍取自无偏概率,MoE输出幅度不受影响。修复后Beam在全部 160 个种子上与CPU参考结果的偏差在 4e-7以内。

测试设备表区分Apple SoC的CPU与GPU

同一版本还调整测试输出中的设备表。发布说明称,Apple SoC的CPU与Metal GPU都报告相同描述(示例为“Apple M2 Ultra”),导致设备列出现两行无法区分,失败行也不说明由哪一个产生。改动补充设备名(也就是 -b参数所取的名称),除非描述本身已经是名称。

信息来源

llama.cpp Releases原始来源