开源llama.cpp Releases·原文 2026年11月7日

llama.cpp b12179为Hexagon后端加入conv_3d支持并优化conv_2d

该版本在Qualcomm Hexagon NPU后端新增HTP_OP_CONV_3D,复用现有HMX分块卷积路径;同时扩大conv_2d步幅支持范围、调整分块选择,并在宿主侧预先计算conv_3d展开所需的除数。

AI解读:llama.cpp发布b12179版本,主要改动集中在Hexagon后端:把原有CONV_2D实现推广到支持CONV_3D,并顺带优化conv_2d。

按变更说明,conv_3d复用现有HMX分块(implicit GEMM)conv2d路径,将KD与KH折叠为一维虚拟卷积核行,输出行按N*OD*OH计数。

conv2d方面,版本支持WHCN与CWHN输入的任意正水平步幅,步幅 1/2 保留原有载入与shuffle路径,更大步幅改用gather;分块大小选择也做了调整。

发布说明称改动还包括消除除零风险的检查、在宿主侧计算conv_3d展开除数,以及使 256 项DMA队列不再溢出。

上述效果描述来自提交说明与发布页,未附公开的性能或精度数据。

发布页提供macOS、iOS、Linux、Android、Windows等多平台构建包,其中KleidiAI版macOS包与openEuler构建标注为DISABLED。

llama.cpp发布b12179版本,Hexagon(Qualcomm NPU)后端在该版本中加入conv_3d支持,并对conv_2d实现做多项优化,改动对应PR #31814。

根据发布说明,新增的HTP_OP_CONV_3D通过htp-ops.h、main.c(与op_conv_2d共用)以及htp-kparams.cpp中的算子重映射接入。

conv_3d如何复用conv_2d路径

提交说明称,conv_3d运行在现有HMX分块(implicit GEMM)conv2d路径上:KD与KH被折叠为一个虚拟卷积核行(KD*KH),输出行按N*OD*OH计数。

htp_kparams_solve_conv3d负责检查conv_3d布局,并调用带is3d标志的分块求解器htp_kparams_conv2d_tiled;分块内核通过结构体htp_conv_geom取得conv_2d与conv_3d之间不同的大小和步幅,只有输入阶段展开深度维度。

conv_2d的步幅与分块调整

同一提交中,conv_2d开始支持WHCN与CWHN输入的任意正水平步幅:步幅 1/2 保留原有载入与shuffle路径,更大步幅改用gather。

分块大小选择也做了改动:优先选择最大的可行输出通道块,并按VTCM使用量推导空间分块容量,再以每线程工作量与分块开销比较容量候选与线程对齐候选。

提交说明还提到小尺寸下保留conv2d的fold调度。

稳定性与计算位置调整

提交说明列出三项相关修改:新增检查以消除除零风险;把用于把conv_3d的kh展开为 (kd, kh)、oh展开为 (od, oh) 的KH、OH fastdiv值改为在宿主侧计算并传入内核参数,原先这类值在设备上按算子各做一次 64 位除法,改动后结构体大小不变;256 项DMA队列不再溢出。

提交信息标注这些改动Assisted-by: Claude Code,共同作者包括Yiwei Shao与Max Krasnyansky。

构建产物

发布页列出macOS(arm64、x64)、iOS XCFramework、Linux(x64、arm64、s390x及CUDA、ROCm、Vulkan、OpenVINO、SYCL等变体)、Android、Windows多个构建包,以及Snapdragon平台同时包含CPU、Adreno GPU与Hexagon NPU的Linux arm64和Android arm64包。

其中macOS arm64的KleidiAI启用版与openEuler系列构建标注为DISABLED。

信息来源

llama.cpp Releases原始来源