llama.cpp b11276为Hexagon后端加入F16激活算子支持
该版本把SILU、GELU、GELU_QUICK、GEGLU、SWIGLU的F16激活算子搬到Hexagon DSP上,其中前五个已在QRD8850上通过CPU对比校验,SWIGLU_OAI只完成代码尚未验证。
AI解读:llama.cpp的b11276版本给Hexagon后端补上了F16精度的激活算子支持。此前这些算子在Hexagon上只跑F32,现在ggml_hexagon_supported_activations() 放宽到接受F16,新增的HVX f16 kernel覆盖sigmoid、tanh、mul_mul和min_scalar等基础运算。
直接受益的是在骁龙设备上跑llama.cpp的人。b11276的Linux arm64和Android arm64的Snapdragon构建都包含CPU、Adreno GPU、Hexagon NPU三套后端,模型权重若以F16存储,激活环节不必再先转F32再算,后端对F16模型的支持更完整。
验证范围需要看清:SILU、GELU、GELU_QUICK、GEGLU、SWIGLU五项在QRD8850上通过test-backend-ops的CPU对比测试;SWIGLU_OAI的F16路径代码完成、主机和v73/v75/v79/v81四个DSP架构都能编译,但缺少F16测试用例,本次变更中未在设备上验证。
所以这次是Hexagon后端F16覆盖面的补齐,不是性能数字的发布。公告没有给出加速比或内存占用对比,实际收益取决于模型和芯片,升级后能否触发F16路径要看权重类型和各算子前后类型是否一致——源码明确要求src0/dst/src1类型一致。
llama.cpp发布b11276,为Hexagon后端新增F16精度的激活算子支持。变更说明显示,ggml_hexagon_supported_activations() 被放宽以接受F16,前提是src0、dst、src1三者类型一致;act-ops.c中新增F16每线程worker函数,对应原有F32 worker,底层由新的HVX f16 kernel支撑,包括hvx_sigmoid_f16_aa、hvx_tanh_f16_aa、hvx_mul_mul_f16_aa以及hvx_min_scalar_f16系列。
SILU、GELU、GELU_QUICK、GEGLU、SWIGLU五个算子在设备端(QRD8850)经test-backend-ops的CPU对比正确性测试验证通过。SWIGLU_OAI的F16路径代码已完成,在主机和全部四个DSP架构变体(v73/v75/v79/v81)上均能干净编译,但test-backend-ops中缺少F16测试用例,因此本次变更未在设备上验证。
该版本同时提供各平台预编译包,其中Linux arm64与Android arm64的Snapdragon构建包含CPU、Adreno GPU、Hexagon NPU后端。