Qwen3 Coder Next llama.cpp图级优化 — 最高38%推理加速
ggerganov重构llama.cpp计算图,使Qwen3 Coder Next 80B模型推理速度提升最高38%。详细解析优化技术与基准测试结果。
概述
llama.cpp核心开发者ggerganov发布了PR #19375,对Qwen3 Coder Next模型的计算图进行了优化。通过消除不必要的张量复制操作并在图级别重构推理路径,实现了M2 Ultra上最高38%、DGX Spark上最高38%的速度提升。该优化在Reddit r/LocalLLaMA上获得了177分以上的高度关注,让我们深入了解其核心内容。
核心思想:图级优化
本次优化的核心思想很简单:从ggml计算图中移除不必要的张量复制操作。
Qwen3 Coder Next采用MoE(混合专家)架构,路由器选择要激活的专家并组合各专家的输出,这个过程中会产生大量中间张量复制。原有实现为了安全性过度插入了这些复制操作,而ggerganov仅保留了真正必要的复制,移除了其余部分。
graph LR
A[输入张量] --> B[路由器]
B --> C[Expert 1]
B --> D[Expert 2]
B --> E[Expert 3]
C --> F[输出合并]
D --> F
E --> F
F --> G[下一层]
style A fill:#00B4D8,color:#fff
style F fill:#FFB703,color:#000
style G fill:#00B4D8,color:#fff
基准测试结果
M2 Ultra性能对比
Qwen3 Coder Next 80B.A3B模型在不同量化级别下的测试结果。
Q4_0量化
| 测试 | 基线 (t/s) | 优化后 (t/s) | 加速比 |
|---|---|---|---|
| pp1(单token) | 37.92 | 51.99 | 1.37x |
| pp8(8token批处理) | 137.75 | 176.36 | 1.28x |
| pp512(提示词) | 930.70 | 1125.73 | 1.21x |
| pp2048(长提示词) | 1049.91 | 1352.31 | 1.29x |
| tg32(生成) | 38.02 | 50.39 | 1.33x |
Q4_K_M量化
| 测试 | 基线 (t/s) | 优化后 (t/s) | 加速比 |
|---|---|---|---|
| pp1 | 34.00 | 46.47 | 1.37x |
| pp2048 | 977.30 | 1232.47 | 1.26x |
| tg32 | 34.63 | 46.43 | 1.34x |
Q8_0量化
| 测试 | 基线 (t/s) | 优化后 (t/s) | 加速比 |
|---|---|---|---|
| pp1 | 34.38 | 43.98 | 1.28x |
| pp2048 | 1047.39 | 1338.82 | 1.28x |
| tg32 | 33.75 | 43.78 | 1.30x |
DGX Spark性能对比
NVIDIA DGX Spark上也确认了显著的性能提升。
| 量化 | 测试 | 基线 (t/s) | 优化后 (t/s) | 加速比 |
|---|---|---|---|---|
| Q4_0 | pp512 | 1055.58 | 1161.67 | 1.10x |
| Q4_0 | pp2048 | 1059.00 | 1324.66 | 1.25x |
| Q4_0 | tg32 | 43.11 | 59.58 | 1.38x |
| Q8_0 | pp2048 | 1009.43 | 1246.61 | 1.23x |
| Q8_0 | tg32 | 31.13 | 39.68 | 1.27x |
值得注意的是,DGX Spark在tg32(token生成)中Q4_0基准下实现了38%的速度提升。
技术背景:相关后端优化
这个PR并非孤立存在。图优化要发挥效果,各后端(Metal、CUDA、Vulkan)需要能够直接处理非连续(non-contiguous)张量。
Metal(Apple Silicon)
- 自适应CPU/GPU交错(#19369):根据节点数动态分配CPU/GPU工作负载
- 二元内核整合(#19390):消除重复内核代码
- 一元运算整合(#19490):改进一元运算处理
- 非连续张量L2范数支持(#19502)
- 并发性改进(#19555)
CUDA(NVIDIA GPU)
Vulkan
注意事项:BF16张量问题
部分GGUF文件可能错误包含一维BF16张量。这会导致Metal等后端性能下降。#19606通过将ffn_gate_inp_shexp张量存储为F32来解决了这个问题。
后续计划
ggerganov预告了进一步的优化工作:
- Qwen3系列代码去重(#19597):共享delta-net图
- 利用
ggml_build_forward_select():将图常量化以获取更多优化空间 - 引入专用delta net ggml运算(#19504):更高效的内核执行
对本地LLM用户的影响
总结本次优化的实际意义:
- Apple Silicon用户:M2 Ultra基准下80B MoE模型tg32可达约50 t/s,完全满足实时对话需求。
- NVIDIA GPU用户:DGX Spark上20-38%的速度提升。CUDA图支持有望带来进一步优化。
- 量化选择:Q4_0显示最大速度提升,但Q4_K_M和Q8_0也有一致的20-37%改善。
- 无需代码更改:只需将llama.cpp更新到最新版本即可自动应用。
结论
ggerganov的图级优化大幅提升了llama.cpp的MoE模型推理性能。不是简单地优化内核,而是重构计算图本身的方法令人印象深刻。特别是与在多个后端(Metal、CUDA、Vulkan)中扩展非连续张量支持的并行工作相结合,将本地LLM推理的性能上限提升了一个台阶。
如果您在本地运行Qwen3 Coder Next等MoE模型,请更新llama.cpp到最新版本,立即体验这一性能提升。
参考资料
阅读其他语言版本
- 🇰🇷 한국어
- 🇯🇵 日本語
- 🇺🇸 English
- 🇨🇳 中文(当前页面)
这篇文章有帮助吗?
您的支持能帮助我创作更好的内容。请我喝杯咖啡吧!☕