在骁龙设备上运行语言模型的开发者,如今可以选择用神经网络处理单元(NPU)运行超低位模型。新增的低位权重格式及所需运算,为在设备加速器上运行 1 位与 2 位模型奠定了基础。
1. 两个版本分步补齐支持
b11716 于 2026 年 10 月 17 日发布,b11717 于 18 日发布,日期均以协调世界时为准。前一版本加入了低位矩阵乘法,后一版本补充了变换与行提取运算。
新增支持的格式是 1 位量化 Q1_0 和 2 位量化 Q2_0。量化是用更少的位数表示模型权重的方法。首项变更还包括加载模型时重新打包权重布局,以及重新读取任意字节区间的功能。
矩阵乘法在向量运算单元 HVX 和矩阵加速器 HMX 上均受支持。这项变更不只是让文件可被读取,还将新格式的权重接入了实际计算路径。
2. 新增行提取与哈达玛变换
后续变更为平面布局和分块布局都加入了 GET_ROWS,用于仅读取所需的行。分块布局将矩阵分成小块并连续存储,便于加速器获取待计算的数据。
此次还新增了哈达玛矩阵乘法,即通过加减运算混合输入值的变换。该路径要求处理长度为不小于 32 的 2 的幂,权重和输出须为 32 位浮点数,输入须为 32 位或 16 位浮点数。
输入的每一行及输出都须连续存储,输入与输出的尺寸也须相同。是否能放入设备内部工作内存,同样属于支持判定条件。因此,应区分新低位权重支持与哈达玛运算的数据类型要求。
3. 存储空间收益与运行时转换成本
后续变更的提出者表示,Bonsai-2 的 1 位与 2 位路径现已完全可用。但要更好地利用其相较于 4 位及以上格式更低的主内存占用,仍需进一步优化。可用并不意味着已达到最佳运行效率。
据开发者文档,矩阵加速器路径会在运行时将 576 字节的 1 位分块展开为四个 16 位浮点分块,共 8192 字节,存入设备内部内存。同为 576 字节的 2 位分块则展开为两个分块,共 4096 字节,因此即使存储表示缩小,仍需要转换操作和中间存储空间。
4. 验证结果与性能依据的边界
首项变更提案记录了多个架构构建通过,以及在安卓 SM8850 设备上使用 v81 进行测试的情况。1 位与 2 位支持均通过了各自 128 项测试中的 128 项。这是首项变更的验证记录,并不意味着后续变更也经过了相同范围的验证。
两项变更提案均未提供新格式处理速度或实际内存节省幅度的对比测量数据。因此,不能以通过的测试数量作为提速的依据。
5. 从发行包与运算测试入手
发布内容包含面向骁龙的 Linux 及安卓 arm64 发行包和安装指南链接。这些发行包涵盖 CPU、Adreno GPU 和 Hexagon NPU。自行构建时,指南中的统一构建工具可利用 Docker 容器和预设辅助编译与部署。
以下原样摘录了已保存的骁龙指南中的矩阵乘法测试命令。这是在指定 NPU 上测试运算的示例,并非 Bonsai-2 模型的运行命令或性能测量结果。
~/src/llama.cpp$ ./scripts/snapdragon/run.py --target adb --devices HTP0:0 -- test-backend-ops -b HTP0:0 -o MUL_MAT运行模型时,需要在运行工具中选择 NPU 设备并传入模型路径。但所提供的资料并未列出生成新格式模型的具体转换命令。
此次变更拓宽了在 NPU 上测试超低位模型的基础,但决定是否采用时,仍须分别确认运算支持与运行效率。
