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

llama.cpp b11505修复Vulkan后端TOP_K对 +inf/NaN输入和k=1 负值的处理

该版本改动topk_nary_search.comp的桶搜索范围与k=1 路径的比较方式,并新增test_top_k_inf测试,覆盖k=1、10、40。

AI解读:按发布说明,原桶搜索从 [0, 0xFF800000) 开始,末端刚好低于 +inf的有序uint映射,因此 +inf和NaN从未被计入;修复将NaN在输入时映射为 -inf,起点改为 [0, 0xFFFFFFFF) 以计入所有值,并对最高桶的末端(2^32)做钳制而非回绕到 0。

发布说明还描述了原实现的两个后果:一个workgroup块中可计数值少于k时ballot为空,着色器读取未初始化的共享状态(NVIDIA上挂起/设备丢失,AMD上索引错误);块中少量 +inf被选中却未被计数,会丢掉真实top值。

k=1 路径原来把浮点位当作有符号整数比较,导致负值排序反向;修复改为直接比较浮点。

新增test_top_k_inf到test-backend-ops,覆盖负值、少于k个 +inf与大量 -inf,针对k=1、10、40。

llama.cpp发布b11505版本,修复Vulkan后端TOP_K算子对 +inf/NaN输入的处理以及k=1 时对负值的排序问题,对应PR #30107。该版本同时为该算子新增test_top_k_inf测试。

TOP_K桶搜索的修复内容

发布说明称,topk_nary_search.comp中的桶搜索原先从范围 [0, 0xFF800000) 开始,该范围末端刚好低于 +inf的有序uint映射,所以 +inf和NaN从未被计入。

修复方式为:在输入时将NaN映射为 -inf,搜索起点改为 [0, 0xFFFFFFFF) 以便每个值都被计入,并将最高桶的末端(2^32)做钳制,而不是回绕到 0。

发布说明描述了原实现的两个后果:一个workgroup块中可计数值少于k时ballot为空,着色器读取未初始化的共享状态,在NVIDIA上出现挂起或设备丢失,在AMD上产生错误索引;块中出现少量 +inf时,这些值被选中却没有被计数,导致真实top值被丢弃。

k=1 路径原先把浮点位当作有符号整数比较,负值的排序因此反向;修复改为直接比较浮点。

新增测试与适用版本

发布说明称,新增测试test_top_k_inf到test-backend-ops,覆盖负值、少于k个 +inf与大量 -inf的情况,分别针对k=1、10、40 运行。

改动记为Assisted-by: Claude Opus 5.5,来自llama.cpp Releases的b11505标签页面。发布页面列出该版本覆盖macOS/iOS、Linux、Android、Windows与openEuler等平台的构建产物,其中macOS Apple Silicon(启用KleidiAI)与openEuler对应条目标注为DISABLED。

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观