llama.cpp b10791发布:OpenCL后端量化lm_head、解码GEMV及中批量GEMM优化
该版本针对OpenCL后端进行了多项性能优化,涵盖量化lm_head、解码GEMV和中批量GEMM,并包含特定硬件(如Adreno GPU)的调度与正确性修复。
AI解读:llama.cpp的这次更新专注于优化OpenCL后端在特定硬件上的推理性能,特别是量化模型的解码阶段。对于使用Adreno GPU(常见于高通骁龙平台)或支持特定指令集的用户,这次改动可能带来速度提升,因为它引入了更高效的矩阵乘法和融合调度。例如,q4_K量化的MUL_MAT+GLU融合在Adreno上被激活,这可能直接减少内存访问,从而加快推理。不过,改动也伴随限制:某些优化(如tiled lm_head的默认路径)被限定在特定架构(如X2E/A8X),其他硬件可能需手动启用。对于普通用户,如果没有在目标设备上遇到性能瓶颈,无需立即升级;但如果你是开发者或在Adreno设备上运行量化模型,可以关注这次更新,并留意是否有针对性的性能反馈。
llama.cpp发布b10791版本,主要针对OpenCL后端进行优化,包括量化lm_head、解码GEMV(通用矩阵-向量乘)以及中批量GEMM(通用矩阵-矩阵乘)的加速,这些改动旨在提升推测解码(speculative decoding)和MTP(multi-token prediction)等场景的性能。
OpenCL后端优化细节
本次更新的核心是优化OpenCL后端的执行路径。在量化方面,实现了量化lm_head(语言模型头)操作;在解码阶段,针对GEMV操作进行了优化,并为中批量GEMM场景做了提升,这些优化特别针对推测解码和多token预测场景。
部分优化被限定或默认启用仅在特定硬件上。例如,q4_K的MUL_MAT+GLU融合调度被限制在Adreno GPU;tiled lm_head/embed的GEMV默认路径限定于X2E/A8X架构。同时,q4_K的split-K解码GEMV仅在实测性能提升的情况下启用,并记录了X1-85平台的分裂K数据点(效果中性,确认排除)。
- 非Adreno构建下,q4_K/q6_K的tiled_ns转换内核注册被添加保护。
- q4_K GLU融合调度被限制在Adreno平台。
- 当行跨度未对齐时,不再采用向量化的f16 mrow GEMV路径。
- q4_K变体内核已修复,以读取转置的scales布局。
- q4_K/q6_K的tiled布局在张量读取时恢复。
- 小M值下,q8_0解码GEMV启用split-K。
- q6_K的noshuffle正确性错误在opt-in门控前保留为可用的转义机制。
平台支持与构建包
此次发布为多种平台提供了预编译二进制文件,包括macOS(Apple Silicon、Intel)、iOS、Linux(Ubuntu x64/arm64/s390x,支持CPU、Vulkan、ROCm 10.0、OpenVINO、SYCL FP32/FP16)、Android(arm64)、Windows(x64/arm64,支持CPU、OpenCL Adreno、CUDA 12/13、Vulkan、OpenVINO、SYCL、ROCm 10.0)。
注意,macOS Apple Silicon的KleidiAI增强版本和openEuler平台的构建目前被标记为DISABLED。Windows arm64的CUDA 13版本为预览版。
- macOS Apple Silicon (arm64) 版本可使用,但KleidiAI启用版本被禁用,原因参见相关PR。
- Windows arm64提供OpenCL Adreno专用构建包。
- Windows提供CUDA 12.4和CUDA 13.3的独立DLL压缩包。
- UI构建包也已发布。