开源llama.cpp Releases·原文 2026年9月8日

llama.cpp b10858发布:Vulkan后端融合激活函数与乘法运算,覆盖gemma3n等模型模式

新版将GELU、SIGMOID、SILU、SOFTPLUS与MUL融合为单一Vulkan内核,针对gemma4、qwen3next等架构的共享专家门控,修复 10-18% 的预填充性能回退。

AI解读:这次更新的核心是让Vulkan后端在一类常见且此前未被优化的图模式上跑得更快:激活函数(GELU、SIGMOID、SILU、SOFTPLUS)的计算结果紧接着与另一个张量相乘。在gemma4这类模型中,这种“激活后相乘”的结构大量出现,而相邻节点的融合能减少内核启动和中间数据读写,直接降低延迟。开发者在优化初期曾让预填充(处理提示词)阶段变慢 10-18%,调整了线程调度后恢复。对普通用户而言,这意味着在AMD、Intel、高通等Vulkan设备上运行llama.cpp推理,处理复杂提示或长上下文时可能更快——但如果你是NVIDIA用户,受益不大,因为CUDA后端已存在类似融合。另外,融合逻辑经过了严格限制,只覆盖特定模式,避免引入gemma3n上曾出现过的静默输出损坏;因此可以预期模型输出质量保持不变。

llama.cpp发布b10858版本,其Vulkan后端新增UNARY+MUL融合:将GELU、SIGMOID、SILU、SOFTPLUS激活函数与随后的乘法操作合并为单一着色器内核。此次改动支持f32与f16精度,并提供多种平台预编译二进制。

Vulkan图优化扩展融合范围

融合逻辑实现在unary.comp中,通过UNARY_MUL_FUSION宏启用,为每个算子生成专属管线而非运行时分支。调度由graph_optimize处理,优先将相邻节点融合。对于中间隔着零计算节点(如VIEW、RESHAPE、TRANSPOSE、PERMUTE)的情况,优化器会先调度这些节点,使UNARY与消费它的MUL相邻后再融合,以支持gemma4中per-layer embedding gating这类模式。

此前严格相邻要求使部分图无法融合,例如CUDA也未能处理gemma4的view间隔。此版本还支持将激活应用于较小的MUL操作数(OP-on-B),并通过专用化常量实现,以覆盖qwen3next和qwen35moe的共享专家门控。所有融合均经ggml_can_fuse_subgraph校验,确保不破坏图输出或引入错误。

  • GELU分片误差允许 5e-7 f32:着色器使用基于exp的tanh恒等式,而CPU参考使用tanhf(约 1 ulp)。
  • 重命名并集中了融合判定函数ggml_vk_can_fuse_unary_mul,用查表替代了多个switch。
  • 融合仅限受保护模式,避免在gemma3n上出现静默输出损坏。

信息来源

llama.cpp Releases原始来源