llama.cpp b10883发布:Vulkan矩阵乘法改用规范常量并修复Ampere回归
新版本以Vulkan后端优化为主,引入规范常量处理矩阵乘法A类型,并针对Ampere架构回归拆分着色器进行修复。
AI解读:这次llama.cpp更新是给Vulkan后端的专项优化,核心动作是把矩阵乘法里的A类型改用规范常量(spec constant)来处理,相当于把原本运行时才确定的参数提前到编译期,减少重复编译和调度开销,对Vulkan用户来说推理速度可能有提升。
它还把Q4_K/Q5_K的coopmat2优化单独拆成独立着色器,专门修复此前在Ampere架构上的性能回退,说明团队盯紧的不仅是功能,还有不同显卡型号上的实际表现。
对普通玩家来说,如果你在Linux或Windows上用Vulkan跑llama.cpp,可以下载b10883对应包试一下;N卡Ampere用户(如RTX 30系)尤其值得更新,因为那个回归修复就是冲着你来的。
llama.cpp发布b10883版本,核心改动是Vulkan后端在矩阵乘法(mul mat)中为A类型引入规范常量(spec constant),以替代原先的固定处理方式,同时合并共享内存表、精简代码,并修复了若干量化类型和编译器兼容问题。
Vulkan后端改动细节
本次提交 #25773 将Vulkan矩阵乘法中的type_a参数改为使用规范常量,并引入映射表处理mul_mm形状,简化了共享内存表并按类型缩小其体积。作为回退机制,最小共享内存大小被设为 8 而不是 1,以规避cm2编译器的一个bug。
改动还移除了统一着色器中的LUT量化类型,并恢复了coopmat2的Q4_K/Q5_K优化。为修复Ampere架构上的性能回退,Q4_K/Q5_K的cm2着色器被拆分为独立文件。此外,代码改用单个uint8_t缓冲区简化cm2实现,修复了fp4扩展开关被通用着色器覆盖的问题,并适配了TQ1_0与 #27471 的f16 Intel调优改动。
- 使用规范常量处理mul mat的type_a,提前编译期决策以减少运行时开销
- 通过映射表管理mul_mm形状并整合共享内存,减小按类型分配的内存
- 修复缺失的Q2_0类型支持及无glslc整数点积时的警告
- 拆分Q4_K/Q5_K的cm2着色器,以修复Ampere架构上的性能回退
- 将cm2代码简化为单一uint8_t缓冲区,并修复fp4扩展开关被覆盖的问题
发布与构建状态
b10883提供了多平台预编译包,覆盖macOS(Apple Silicon、Intel)、iOS、Ubuntu x64/arm64/s390x、Android arm64、Windows x64/arm64,以及多种加速后端,包括Vulkan、ROCm 10.0、OpenVINO、SYCL(FP32/FP16)、CUDA 12.4/13.3/13.4、OpenCL Adreno(仅arm64)。
需要注意,本版本的macOS Apple Silicon(KleidiAI启用)构建被禁用,相关的openEuler(310p与 910b ACL Graph)构建也被标记为DISABLED,分别对应拉取请求 #23780 和 #23705。Windows arm64的CUDA 13构建标注为预览版。
- macOS Apple Silicon(arm64)构建可用,但KleidiAI启用版本已禁用
- openEuler的Ascend 310p和 910b构建已禁用
- Windows arm64的CUDA 13.4构建为预览版,仍提供下载
- UI构建包(llama-b10883-ui.tar.gz)同样提供,供配套使用