llama.cpp发布b12128:修复TOPK_MOE测试因近邻并列导致的CI抖动
该版本只有一项列入发布说明的代码改动(PR #31426):调整TOPK_MOE测试中logits的生成方式,让不同后端上的专家与分组选择结果保持可区分的间距,从而消除因浮点近邻并列引发的CI偶发失败。其余为各平台预编译包。
AI解读:这项改动针对的是测试,并非推理实现本身:TOPK_MOE测试在均匀随机logits下偶尔会让两个专家落在路由边界的一个f32 ulp之内,后端门控计算结果与CPU相差几个ulp时就会选中另一个专家,测试随之失败。
提出改动说明的人给出的主要触发条件是sqrt_softplus门控,其输出区间较窄,更容易出现这种近邻并列。
两种处理方式:一是重新抽取每行logits,直到分组选择和最终top-k在双精度下都满足 1e-4的相对间距;二是改为对门控函数求逆来构造logits,使每个专家与分组决策在所有后端上都相隔一个网格步长,主机侧不再重算路由。
适用范围限于llama.cpp仓库自带的TOPK_MOE测试及其CI,发布说明未给出对推理性能或输出质量的影响;不能由这次修复推断模型实际路由行为发生变化。
b12128同时提供macOS/iOS、Linux(含CUDA 12.8/13.4、ROCm 10.0、Vulkan、SYCL、OpenVINO等)、Android、Windows和UI的预编译产物;发布说明标注macOS Apple Silicon的KleidiAI版本与openEuler构建为DISABLED。
llama.cpp发布构建b12128,发布说明列出的唯一代码改动是PR #31426:修复TOPK_MOE测试因近邻并列(near ties)造成的CI抖动。
说明中的机制是:使用均匀随机logits时,两个专家有时会在路由边界上相距不到一个f32 ulp,后端门控与CPU相差几个ulp就会选中另一个专家,导致测试失败;这种情况在输出区间较窄的sqrt_softplus门控下更容易出现。
TOPK_MOE测试的两种改法
提交说明记录了两种处理:一是重新抽取每行logits,直到分组选择和最终top-k在主机上以双精度计算时都具备 1e-4的相对间距;二是改为对门控函数求逆来构造logits——把每行的选择分数(概率加偏置)取为网格的随机排列,把最优分组中的专家上移半个步长,再按门控函数反解出logits。
按第二种做法,每个专家与分组决策在所有后端上都相隔一个网格步长,主机侧不再重算路由;softmax概率被构造为和为一,使softmax保留这些分数,并且在logits设定后不再重新初始化其视图。
- 改动对象:llama.cpp仓库自带的TOPK_MOE测试及其CI稳定性
- 触发条件:路由边界上两个专家的logit差距在一个f32 ulp以内
- 判定标准(第一种做法):分组选择与最终top-k的相对间距达到 1e-4
- 未涉及:发布说明未提及对推理性能、模型输出质量的影响
同版本提供的构建产物
发布页同时列出macOS/iOS、Linux、Android、Windows和UI的预编译包与校验文件。发布说明把macOS Apple Silicon的KleidiAI启用版本和openEuler构建标注为DISABLED。
- Linux:Ubuntu x64/arm64/s390x,含CUDA 12.8、CUDA 13.4、ROCm 10.0、Vulkan、SYCL FP32/FP16、OpenVINO 2026.4.1等变体
- Windows:CPU、CUDA 12.4/13.4、Vulkan、OpenCL Adreno、SYCL、ROCm 10.0等变体
- 移动端:Android arm64及Snapdragon(CPU、Adreno GPU、Hexagon NPU)版本、iOS XCFramework