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

llama.cpp b11475修复Metal后端MUL_MAT+ADD融合错误

llama.cpp发布b11475版本,修复Metal后端在残差本身是另一个矩阵乘法时MUL_MAT+ADD融合选择错误操作数的问题。该问题导致Clef决策模型在Metal上输出概率趋向均匀,同文件在CPU后端正常。

llama.cpp发布b11475版本,修复Metal后端在残差本身是矩阵乘法输出时MUL_MAT+ADD融合选择错误操作数的问题(#30100)。

问题出在ggml_metal_op_mul_mat_mma:它把融合的MUL_MAT+ADD的残差选为“操作不是MUL_MAT的那个ADD操作数”。当ADD的两个操作数都是矩阵乘法输出(x = W1 @ u + W2 @ v)时,该判断对两者都成立,残差被解析为融合矩阵乘法自身尚未写入的输出,内核就会加上该缓冲区中的任意内容。

提交者表示,融合检查函数ggml_metal_mul_mat_add_operand已经按身份选择操作数,这次让编码器采用同样的方式。

实际模型中的表现与测试

据提交说明,Clef决策模型在Metal上命中该问题:头计算中的proj_option_context @ ctx + proj_option_lexical @ lex(9 个选项行)导致 /v1/systemone概率趋向均匀,billing得分为 0.28,而CPU后端为 0.977(Cloudflare_clef-flash Q8_0模型)。该结果随内存布局确定性地出现,设置GGML_METAL_FUSION_DISABLE=1 后恢复正确。

  • 提交者指出这不是量化问题:同一文件在CPU上结果正确。
  • test-backend-ops新增了残差为第二个矩阵乘法的MUL_MAT_ADD模式;在改动前,Metal上 28 个用例有 27 个失败。
  • 唯一通过的用例是f16 n=2,因其低于MMA行阈值,未触发融合。
  • 提交由Georgi Gerganov参与共同创作(Co-authored-by)。

信息来源

llama.cpp Releases原始来源