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

llama.cpp Vulkan后端放宽mul_mat_id行ID提升上限至 1024 专家

此前count_experts.comp的共享数组按BLOCK_SIZE(256)分配,专家数超过 256 的模型会关闭行ID提升、改用较慢路径;本次将上限先提到 512,再按LLAMA_MAX_EXPERTS提到 1024。

AI解读:llama.cpp的b11029版本改动了Vulkan后端里mul_mat_id的行ID提升逻辑。原因很具体:负责统计专家的着色器count_experts.comp用BLOCK_SIZE(256)来给共享数组定尺寸,只要模型专家数超过 256,行ID提升就会自动关闭,每个mul_mat_id工作组都得各自重新扫描整个ids张量。

这条限制不是理论问题。发布说明提到,Qwen3.8-Flash-Next有 512 个专家,一直在悄悄走这条慢路径。修复方式是把数组尺寸改用独立的MAX_EXPERTS常量,清空数组改成循环执行而不是每线程一个条目,并在宿主侧同步提高对应限制。

第一次改动把上限定在 512,随后按评审反馈改为 1024,理由是 1024 与LLAMA_MAX_EXPERTS一致,而不是停在 512。count_experts.comp中三个共享数组因此增长到 3 × 1024 × 4 = 12 KiB,仍在Vulkan为maxComputeSharedMemorySize保证的 16 KiB之内。

发布方给出的性能数据来自Strix Halo、batch 2048:专家矩阵乘每次操作在iq3_s下从 12.5 ms降到 9.5 ms,在iq4_nl下从 14.0 ms降到 7.5 ms,8k token的提示处理约快 19%。这些数字只对应这一硬件和这批配置,不是通用承诺。

测试方面,加入 512 专家的用例后,test-backend-ops MUL_MAT_ID通过 891/891;加入 1024 专家用例后,在Vulkan(RADV、Strix Halo、Radeon 8060S)上通过 889/889。发布说明还标注该改动由Claude Fable 5.1协助完成。

受影响的主要是在Vulkan上跑高专家数MoE模型的人。是否受益取决于模型专家数是否落在旧上限之外,以及实际硬件与量化类型,普通用户不需要为此做额外动作。

llama.cpp发布b11029,调整Vulkan后端中mul_mat_id的行ID提升(row-id hoisting)上限,从 256 个专家提高到 1024 个专家(PR #28501)。

发布说明解释,限制来自count_experts.comp着色器:它的共享数组用BLOCK_SIZE定尺寸,而BLOCK_SIZE是 256。因此任何专家数超过 256 的模型都会关闭行ID提升,每个mul_mat_id工作组必须自行重新扫描整个ids张量。

说明点名Qwen3.8-Flash-Next有 512 个专家,此前一直在这条慢路径上运行。

第一次提交把上限提到 512 个专家,数组改用独立的MAX_EXPERTS常量定尺寸,清空数组改为循环执行而非每线程一个条目,并在宿主侧同步提高对应限制。

后续提交按评审反馈把上限进一步提到 1024,理由是 1024 与LLAMA_MAX_EXPERTS一致,而不是停在 512。count_experts.comp中的三个共享数组因此增长到 3 * 1024 * 4 = 12 KiB,发布说明称这仍在Vulkan为maxComputeSharedMemorySize保证的 16 KiB之内。

性能与测试数据

发布说明给出的性能数据针对Strix Halo、batch 2048:专家矩阵乘在iq3_s下从每次操作 12.5 ms降至 9.5 ms,在iq4_nl下从 14.0 ms降至 7.5 ms,8k token时提示处理约快 19%。

测试结果方面,加入 512 专家测试用例后test-backend-ops MUL_MAT_ID通过 891/891;加入 1024 专家用例后,在Vulkan(RADV、Strix Halo、Radeon 8060S)上通过 889/889。

  • 性能数据来源:发布说明,硬件为Strix Halo,batch 2048
  • iq3_s:12.5 ms → 9.5 ms(每次专家矩阵乘操作)
  • iq4_nl:14.0 ms → 7.5 ms(每次专家矩阵乘操作)
  • 8k token提示处理约快 19%
  • test-backend-ops MUL_MAT_ID:891/891(含 512 专家用例)、889/889(Vulkan RADV、Strix Halo、Radeon 8060S,含 1024 专家用例)

发布信息

发布说明标注该改动由Claude Fable 5.1协助完成(Assisted-by)。

b11029同时提供多平台预编译包,包括macOS Apple Silicon(arm64)、macOS Intel(x64)、iOS XCFramework、Ubuntu(x64、arm64、s390x的CPU版,以及x64、arm64的Vulkan版)、Ubuntu CUDA 12/13、ROCm 10.0、OpenVINO 2026.4、SYCL FP32/FP16、Android arm64、Windows(CPU、OpenCL Adreno、CUDA 12/13、Vulkan、OpenVINO、SYCL、ROCm 10.0)以及UI包。

发布说明中macOS Apple Silicon的KleidiAI版本和openEuler各构建标注为DISABLED。

  • 改动归属:PR #28501,Assisted-by: Claude Fable 5.1
  • Vulkan包覆盖Ubuntu x64/arm64与Windows x64
  • KleidiAI版macOS Apple Silicon构建与openEuler构建标注为DISABLED

信息来源

llama.cpp Releases原始来源