北京时间 10 月 19 日 16 时 55 分,ggml-org 在 GitHub 将 llama.cpp PR #30795 合并入 main 分支,修复 Metal 后端 moe_reduce 融合在输出别名输入时的竞争。仓库接口记录该 PR 创建于 2026-10-19T07:19:06Z、合并于 2026-10-19T08:55:03Z,合并提交为 098ce526b546b5a190327c1da82929cee051b9ac。以上时间、编号与合并状态由官方仓库 PR 接口与提交记录直接确认;影响判断为编辑基于官方描述的解释,未经独立测试验证。

已核实变化

官方 PR 标题为 metal : fix moe_reduce fusion race when dst aliases its inputs,由 ggerganov 提交。问题描述为融合后的 moe_reduce 内核 kernel_moe_reduce_f32 在单次调度内计算 dst 为专家输出加权和,同时读取 experts 与 weights 并写入 dst。图分配器在未融合图上判断输入已被此前节点消费,可合法将输入内存回收为 dst,在融合内核中则形成线程组之间的读写竞争,导致罕见非确定性错误结果,官方称已在 meta 后端以 test-llama-archs -a kolibri 观察到。修复为在编码时以 ggml_metal_fusion_overlap 检查输出是否与任一输入重叠,若重叠则拒绝该融合,沿用与 MUL_MAT_ADD 融合相同的防护模式,未融合的 MUL 加 ADD 路径保持正确。PR 正文与提交信息均未提及性能提升、成本变化、安全公告与许可证调整。

影响与适用范围

受影响对象为自行构建 llama.cpp 并启用 Metal 后端的本地推理与验证用户,尤其是运行 MoE 结构并可能触发 moe_reduce 融合的模型。在此前逻辑下,若分配器将输入内存复用为输出,融合路径可能产出偶发错误且难以复现;更新后重叠场景不再进入融合内核,直接走正确性有保障的非融合路径,其他不重叠场景行为不变,CUDA、CPU、Vulkan 与 Hexagon 等后端不在本次变更范围内。中国开发者若在 Mac 设备上验证 llama.cpp,可在官方仓库核对 PR #30795 与提交 098ce52 后,先在测试环境验证目标 MoE 模型的加载、解码一致性与长时间稳定性。

限制与下一步

本次仅为 Metal 后端正确性加固,未发布新版本号,未声明新模型支持、基准数据、速度提升或兼容性变更,不应理解为性能或成本承诺。实际效果仍受芯片型号、系统版本、构建选项与张量形状影响,罕见竞争本身难以通过单次运行证伪,生产升级建议先验证再跟随。若后续出现补充说明或版本化发布,将以新的可核验事件另行处理,不追溯修改本条时间结论。