llama.cpp 最新预发布版是正式发布前的测试版本,扩展了在骁龙神经网络处理单元上执行卷积的支持。在设备上运行语音模型的开发者,可以尝试将提取输入特征的计算交给该处理单元。
1. 为 Hexagon 添加两种特征提取计算
2026年10月28日发布的 b11970 为骁龙神经网络处理单元 Hexagon 后端添加了普通卷积和深度卷积。卷积是扫描输入中的小区域以提取特征的计算。通道是相互独立的特征数据集合。普通卷积组合多个通道的信息,而深度卷积对每个通道分别计算。
原始代码中这两种运算的名称是 CONV_2D 和 CONV_2D_DW。新增支持意味着,模型中的这些计算有了直接在 Hexagon 上执行的选择。评审中还提供了运行包含新运算的完整语音模型的实例。
普通卷积使用 Hexagon 的矩阵运算单元 HMX,将输入整理成小批次,以矩阵乘法形式计算。深度卷积则采用独立的向量计算路径,适配输入数据在内存中的排列顺序,并将多个数值成组处理。
2. 从语音输入到响应的运行实例
变更提案的评审者提供了使用 LFM2.5-Audio-1.5B-Q4_0 模型进行语音转写的命令。该命令使用通过降低数值精度来缩小体积的 4位量化模型及 32K 上下文,将主模型与把语音信息转换为输入格式的语音输入投影模型部署在不同的运算单元上。
以下原样引用评审评论中的命令。开发者可以借此了解,在接收语音文件并生成响应的完整运行过程中使用新运算的实例。
./scripts/snapdragon/run.py --target adb --devices 2 -- ./bin/llama-cli -m ../gguf/LFM2.5-Audio-1.5B-Q4_0.gguf --mmproj ../gguf/mmproj-LFM2.5-Audio-1.5B-Q4_0.gguf --audio ../test-images/sample-speech-1m.wav -p "Please transcribe the audio for me." --device HTP0 --mmproj-device HTP1 -c $((32*1024)) -ngl 99 --jinja -s以下是评审者在同一次运行中记录的两个阶段的速度。数据来自变更提案的评审评论。
表:语音模型各阶段的处理速度
条件:与上述命令相同的评审运行。LFM2.5-Audio-1.5B-Q4_0,主模型 HTP0、投影模型 HTP1,32K 上下文,sample-speech-1m.wav 输入
单位:词元/秒
| 阶段 | 速度 |
|---|---|
| 输入处理(Prompt) | 162.8 |
| 生成(Generation) | 73.9 |
评审者认为新的卷积运算表现良好,但指出矩阵乘法(MUL_MAT)和使数据在内存中连续排列的运算(CONT)仍需进一步优化。因此,该实例提示开发者,除了确认卷积支持情况,还应检查模型整体中其他运算的耗时。
3. 运算验证与各平台安装方式
变更提案作者表示,已在 v73、v75、v81 Android 设备上测试。作者报告的后端(在各设备上负责运算的执行部分)运算测试结果为 1021 项全部通过。除运算级验证外,前述语音运行实例也展示了完整模型的运行情况。
发布页面分别提供面向骁龙的 Linux arm64 和 Android arm64 构建。两种构建均标注为支持中央处理器、Adreno 图形处理器及 Hexagon 神经网络处理单元的软件包。每个下载项旁都有对应平台的配置指南链接。
用户可以选择适合自身操作系统的软件包和指南,参考评审中的语音运行实例测试模型部署。该版本被标记为预发布状态,因此在引入时也应确认这一发布状态。
4. 扩大执行范围时也需管理内存
将卷积交给 Hexagon 执行的优势,也伴随着为计算准备数据的开销。实现会为输入、权重和输出分配临时内存,并按设备内部内存大小拆分任务。权重是模型学习到的乘法系数。在将 HMX 计算结果存为 16位半精度之前,会根据权重的最大绝对值和参与乘法的项数缩小结果,再展开为 32位输出时恢复原始大小。这是为了防止中间结果超出半精度可表示的范围。开发者的检查范围也从运算支持扩展到包含数据准备和移动的完整运行过程。
5. 适用模型与测量值的范围
在用于表示小数的浮点数据类型方面,权重支持 16位或 32位,输入和输出支持 32位。除数据布局条件外,深度卷积还要求滤波器宽度与高度的乘积不超过 64。
评审中的速度是单次运行结果,未同时给出芯片组、操作系统版本、重复次数及旧版对比值。因此,更适合将其视为该语音模型的运行实例,而非相同条件下提升幅度的依据。
b11970 的核心是扩大 Hexagon 上卷积的执行范围,而决定是否引入的下一项标准,是所用完整模型的处理性能。
