llama.cpp b11405 版本通过为4个头将闪电索引器分块应用于键和令牌,更新了 CUDA 后端,解决了小头数量带来的性能问题。
- 内核一次性对所有头的查询和权重进行分块,将每个半精度键元素扩展一次,以向所有头提供数据,无需经过浮点往返。
- 查询在共享内存中保持为 float 格式,以防止当 q * k 超出 f16 范围时 half2 乘积导致的溢出。
- 每个线程现在为一个令牌计算两个键的分数,减少了共享读取,并使 gfx908 保持在 63 个 VGPR,无寄存器溢出。
- 此优化使内核在 R9700 上快 36 倍,并在 CUDA 硬件上略有加速。
该版本为 macOS、Linux、Windows、Android 和 openEuler 提供了二进制文件,支持 CPU、GPU(CUDA、ROCm、Vulkan、OpenCL)和 NPU 后端。