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

llama.cpp b11800将QSA的k-pool掩码泛化为ggml_top_k_mask融合算子

该版本把原本只服务qwen4exp、glm5-next池化QSA选择的k-pool掩码算子扩展为通用的ggml_top_k_mask,并把glm5.3-next纳入;同时修复test_kpool_mask中张量未初始化可能导致NaN检查失败的问题。

AI解读:新算子函数签名为ggml_top_k_mask(mask, top_k, score, blocks, extra):保留实际选中位置和额外保留单元的掩码值,其余置为 -inf;每行张量为 4D、按top_k布局,掩码广播到这些行,因此支持按head做选择。

score、blocks、extra均为可选:无score时所有选中位置有效;无blocks时一次选择对应一个单元;extra保存一行中无需选择就保留的单元。

按提交说明,使用范围包括k-pool模型、build_attn中的DSA注意力和DeepSeek V4 CSA掩码,前提是探测机制启用该算子;不支持的后端继续走原有路径。

测试修复:test_kpool_mask中剩余张量此前未初始化,残留内存可能被读为NaN并触发NaN检查失败,现已初始化。

同一提交挂出macOS、Linux、Android、Windows等多平台预编译包,ROCm版本标注为 10.0,CUDA提供 12 与 13 两档。

llama.cpp发布b11800构建,提交信息显示本次为QSA评分新建融合算子,并将原先只覆盖qwen4exp、glm5-next池化QSA选择的k-pool掩码算子泛化为ggml_top_k_mask,同时把glm5.3-next纳入。

同一提交修复了test_kpool_mask中测试张量未初始化的问题:此前harness的哨兵值未初始化,残留内存可能被读成NaN,从而导致NaN检查失败。

ggml_top_k_mask的接口与行为

提交说明给出的签名为ggml_top_k_mask(mask, top_k, score, blocks, extra):保留实际选中位置(live picks)和extra单元的掩码值,其余单元置为 -inf。按描述,DSA模型和DeepSeek V4 CSA此前是用fill、set_rows和add手工构造同一个top-k掩码。

每个行张量为 4D,布局与top_k一致,掩码广播到这些行,因此选择可以按head进行。score、blocks、extra为可选参数:没有score时每个选择都有效;没有blocks时一次选择对应一个单元;extra存放一行中不经过选择也保留的单元。

哪些路径会用到新算子

提交说明提到llm_graph_context::build_fused_top_k_mask按kq_mask布局查看行张量并注册融合节点。k-pool模型、build_attn中的DSA注意力以及DeepSeek V4 CSA掩码在探测机制启用该算子时使用它;不支持该算子的后端保持原有路径。

这一适用范围来自提交说明本身,属于作者对实现范围的描述,未给出各后端上的性能或精度对比数据。

同批发布的构建产物

该次发布同时挂出多平台预编译包,涵盖macOS(arm64、x64)、iOS XCFramework、Linux(Ubuntu x64/arm64/s390x,及Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO、SYCL等变体)、Android、Windows以及UI包。

发布页标注macOS arm64的KleidiAI启用版和openEuler相关产物为DISABLED。

信息来源

llama.cpp Releases原始来源