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

llama.cpp b11405发布:CUDA闪电索引器按 4 头分块,ROCm上提速 36 倍

llama.cpp发布b11405版本,合并PR #29901,将lightning indexer的CUDA内核按keys与tokens为 4 头场景分块,并把累加改为浮点;ROCm上面向gfx908的寄存器溢出问题得到处理,作者称在R9700上内核快 36 倍。

llama.cpp发布b11405版本,包含PR #29901:为CUDA的lightning indexer增加按keys和tokens分块的实现,面向 4 头场景。

该PR的提交说明称,当head数量不足以填满一个wmma tile时,一个block让 64 个key对 8 个token打分:keys以半精度暂存一次,queries逐头处理,每个线程负责一个key对两个token,因此点积不需要跨线程reduction;小于token分块的批次仍走vector kernel。test-backend-ops按 4 头测量。

精度调整:分块乘法改为浮点

提交说明引用了am17an的评审:单个q * k超出f16范围后,half2乘积会溢出。修改后queries以浮点保存在shared memory,每个half2的keys为两个token一次性加宽,所有乘积与求和都在浮点下计算。

另一项改动让每个key元素只为所有head从半精度加宽一次:tile kernel一次性暂存每个head的queries与权重,只需一个barrier,F16 keys复制进tile时不经过浮点往返。提交说明称把keys以浮点留在shared memory中测得较慢,占用率下降。

ROCm上的寄存器溢出与提速数字

提交说明称,tile kernel的每个线程改为对单个token的两个key打分,warp内共享同一token,query读取变成广播:相同乘积下每对元素 6 次shared读取,此前为 9 次。内层循环展开 8 次,使gfx908保持 63 个VGPR且无溢出(完全展开的循环需要超过一千个),并让该内核在R9700上快 36 倍、在CUDA上略快。

随版本提供的构建产物

发布页面列出macOS/iOS、Linux、Android、Windows及UI的多个构建包,覆盖CPU、Vulkan、CUDA 12/12.8、CUDA 13/13.4、ROCm 10.0、OpenVINO、SYCL FP32/FP16,以及Snapdragon(CPU、Adreno GPU、Hexagon NPU)等后端;openEuler相关条目显示为DISABLED。上述提速数字来自提交说明与作者所述,并非独立复现结果。

信息来源

llama.cpp Releases原始来源