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

llama.cpp b12246调整Vulkan后端:高通GPU大head标量flash attention限为每组 8 行

该项目称,在Adreno X1-85上,head size 256、KV 4096的FLASH_ATTN_EXT用例从 711 毫秒降到 17 毫秒,此前一直无法完成的test-backend-ops现在可以跑完。

AI解读:PR #30829 的描述称,当head size大于 128 且KV长度至少 1024 时,原实现每个工作组使用 16 行,在Adreno驱动上会把寄存器溢出到暂存内存,速度约慢 40 倍。

新规则是:在高通设备上,只要hsk或hsv大于 128,每个工作组最多使用 8 行;更小的head仍保留 16 行,因为在高通X2 Elite上 16 行对这些head更快。

来源给出的具体数字:Adreno X1-85上FLASH_ATTN_EXT(hsk=256、kv=4096)用例,nb=64 从 711 毫秒降至 17 毫秒,nb=512 从没有结果变为 125 毫秒;此前寄存器溢出在X1-85上为每次调用 264 字节,8 行时为 0。

测试结果方面,项目称该最大test-backend-ops用例此前在X1 Elite上变成数秒的单次dispatch,超过Windows GPU超时导致测试无法完成,现在可完成。X2-90上Gemma 4 E4B pp512、深度 4096、启用flash attention时,吞吐从 81-90 t/s提升至 117 t/s。

以上数字均来自该版本发布说明与PR描述,属于项目方自测,未经过第三方独立复现。

llama.cpp发布b12246版本,更新内容为Vulkan后端在高通Adreno GPU上的标量flash attention行数限制,对应PR #30829。项目称这一改动修复了head size较大、KV较长时的寄存器溢出和测试超时问题。

高通的“大head”场景改用 8 行

发布说明称,当head sizes大于 128 且KV不少于 1024 时,原标量flash attention每个工作组使用 16 行。在高通Adreno驱动上,该配置会把寄存器溢出到暂存内存(X1-85上每次调用 264 字节,8 行时为 0),并导致约 40 倍的速度下降。

改动后的规则是:在高通设备上,当hsk或hsv大于 128 时,每个工作组最多使用 8 行;更小的head继续使用 16 行。发布说明称,在X2 Elite上 16 行对小head更快。

  • 适用条件:高通设备,且hsk或hsv > 128
  • 上限:每个工作组最多 8 行
  • 小head保持 16 行

项目方给出的性能与测试数据

发布说明列出两项具体结果。Adreno X1-85上FLASH_ATTN_EXT(hsk=256、kv=4096):nb=64 从 711 毫秒降至 17 毫秒,nb=512 从“无结果”变为 125 毫秒;test-backend-ops可以完成。Adreno X2-90上Gemma 4 E4B pp512、深度 4096、启用flash attention:81-90 t/s提升至 117 t/s。

项目方还称,此前最大的test-backend-ops用例在X1 Elite上变成数秒的单次dispatch,超过Windows GPU超时,测试无法完成。

  • X1-85,FLASH_ATTN_EXT hsk=256 kv=4096:nb=64 711 ms → 17 ms
  • 同用例nb=512:此前无结果 → 125 ms
  • X2-90,Gemma 4 E4B pp512,深度 4096:81-90 → 117 t/s

发布范围

b12246提供的构建覆盖macOS/iOS、Linux(Ubuntu的CPU、Vulkan、CUDA 12/13、ROCm、OpenVINO、SYCL,以及Snapdragon的CPU/Adreno GPU/Hexagon NPU)、Android、Windows(CPU、OpenCL Adreno、CUDA、Vulkan、OpenVINO、SYCL、ROCm)等平台;openEuler构建标注为DISABLED,macOS上KleidiAI启用的arm64构建同样标注为DISABLED。

  • 改动本身针对Vulkan后端 + 高通Adreno
  • 发布包覆盖多个平台,与本次改动范围不同
  • openEuler及KleidiAI启用的macOS构建为禁用状态

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观