llama.cpp发布b11168,改进Hexagon NPU上的动态量化器
该版本修复了Q8_0在N=1 矩阵乘法中的精度问题,消除了寄存器溢出,并为所有动态量化路径启用DMA。
AI解读:具体修复包括Q8_0在N=1 的矩阵乘法中的精度问题,以及寄存器溢出;同时将DMA用于所有动态量化路径,并清理了激活数据传递逻辑。
对在骁龙设备上通过Hexagon NPU运行本地模型的开发者来说,这次更新直接关系到量化推理的准确性和内存效率,但效果仍取决于具体硬件和模型。
llama.cpp发布了构建版本b11168(PR #29395),主要针对高通Hexagon NPU的动态量化器进行了改进。这些修改涉及ggml-hexagon后端的矩阵乘法内核和DMA路径,修复了Q8_0在N=1 的矩阵乘法中的精度问题,并解决了寄存器溢出。
动态量化器改进的具体内容
本次更新围绕Hexagon后端的动态量化器(dyn.quant)展开,由Max Krasnyansky、Aparna M P、Sigbjørn Skjæret等人参与。主要改动包括:修复Q8_0在N=1 MUL_MAT时的精度问题;修复hex-quant的寄存器溢出;为所有动态量化路径启用DMA。
- hexagon: 修复Q8_0 N=1 MUL_MAT的精度问题
- hex-quant: 修复寄存器溢出
- hex-mm: 为所有dyn.quant路径启用DMA
- hex-mm: 移除过时的run_quant_task
- hex-mm: 更新tracing以正确包裹事件
- hex-mm: 在所有路径中使用act表示激活数据(原为src1)
- hex-mm: 移除或改道剩余的非DMA激活逻辑
- hex-dma64: 进一步清理dma_addr_t类型转换
可下载的预编译二进制覆盖多个平台
b11168提供了适用于macOS、Linux、Windows、Android以及openEuler的预编译二进制文件,并包含UI组件。Linux版本覆盖CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL FP32/FP16等后端;Windows版本覆盖CPU、CUDA 12.4/13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0以及OpenCL Adreno;Android和Linux arm64还提供了Snapdragon专用构建,支持CPU、Adreno GPU和Hexagon NPU。
- macOS提供Apple Silicon和Intel版本,iOS有XCFramework
- Linux提供Ubuntu x64/arm64/s390x的CPU构建,以及CUDA 12.8、CUDA 13.4、ROCm 10.0、Vulkan、OpenVINO、SYCL等变体
- Windows提供CPU、CUDA 12.4、CUDA 13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0和OpenCL Adreno构建
- Android和Linux arm64有Snapdragon专用包,声明显式支持CPU、Adreno GPU和Hexagon NPU
- openEuler构建被标记为禁用(DISABLED)