Qwen 3.6 27B 投机解码基准测试:单张 RTX 3090 上实现 ~100 TPS
摘要
一份详细的基准测试,比较了单张 RTX 3090 上 Qwen 3.6 27B 的投机解码引擎,显示 ik_llama 在代码生成中达到约每秒 100 个 token。结果包括 5 种引擎变体的解码 TPS、TTFT、显存占用和上下文退化情况。
首先,衷心感谢 r/LocalLLaMA 社区和 3090 俱乐部。本基准测试源于你们分享的配方……以下是我在硬件(Xeon E5-2666v3、64GB 内存、单张 RTX 3090 24GB)上的发现,比较了同一模型的两种量化下的 5 种引擎(3 个 llama.cpp 分支 + 主线 + Lucebox)。我使用了 https://github.com/noonghunna/club-3090/tree/master 中的基准脚本以及两个使用 en8wiki 构建长提示的简单脚本。
摘要表格按分支 → 投机类型排序。关键指标:解码 TPS(代码与叙述)、TTFT、显存占用和上下文一致性(从 72k 到 128k 已填充上下文时生成速度的退化)。
| Fork / Engine | Speculative Type | Model / Quant | Code DP | Narr. DP | TTFT | VRAM (MiB) | Gen 72k | Gen 128k | Deg. (72k→128k) |
|---|---|---|---|---|---|---|---|---|---|
| ik_llama (ubergarm config) | MTP n_max=4 | Qwen3.6-27B-IQ4_KS | 89.2 | 63.9 | 361ms | 22304 | 34.6 | 23.5 | −32.1% |
| ik_llama + ngram | ngram+MTP | Qwen3.6-27B-IQ4_KS | 87.8 | 58.6 | 341ms | 20508 | 32.1 | 24.1 | −24.9% |
| ik_llama (Standard config) | MTP n_max=2 | Qwen3.6-27B-IQ4_KS | 73.1 | 61.7 | 357ms | 20208 | 33.8 | 25.4 | −24.8% |
| mainline llama.cpp | MTP n_max=1 | Qwen3.6-27B-Q4_K_M | 64.7 | 52.5 | 288ms | 21354 | 33.4 | 31.2 | −6.6% |
| Spiritbuun | MTP | Qwen3.6-27B-Q4_K_M | 59.7 | 45.7 | 294ms | 22066 | 34.8 | 31.5 | −9.5% |
| beellama | DFlash (Draft GGUF) | Qwen3.6-27B-Q4_K_M | 96.8 | 45.6 | 504ms | 20814 | 22.9* | 27.1 | −41.3%** |
| Spiritbuun | DFlash | Qwen3.6-27B-Q4_K_M | 66.9 | 30.4 | 300ms | 23356 | — | — | — |
| LUCEBOX | DFlash (TQ3 KV) | Qwen3.6-27B-Q4_K_M | 32.6 | 32.5 | 448ms | 20680 | 27.0 | — | — |
ik_llama — 做“一切”的分支
llama.cpp 的分支,原生支持 MTP、merge-qkv、循环检查点和多后端投机解码。在 IQ4_KS 量化上测试(由 ubergarm 提供)。
ik_llama + MTP+ngram (ngram-mod + mtp)
出色的代码生成。结合 ngram 草稿(n_max=4,大小 16)和 MTP(n_max=3)。代码达到 87.8 解码 tokens/秒——比主线大幅提升。显存:20508 MiB(82% GPU 使用率)。上下文退化:−25%(32.1→24.1 gen_tps)。上下文填满时明显下降。
ik_llama + MTP (ubergarm 调优配置)
最佳叙述速度:63.9 DP,整个基准测试中最高。代码为 89.2 DP。额外配置:-muge --merge-qkv -mtprot iq4_ks -cram 32768 --slot-save-path /root/slot --ctx-checkpoints 32。显存:22304 MiB。由于槽检查点,显存更高。上下文退化:−32%(34.6→23.5)。所有设置中最差的下降。
ik_llama + MTP (标准配置)
原生 MTP 的基线。使用标准参数(n_max=2),没有 ubergarm 推荐的调整或混合 ngram 模块。代码 73.1 DP,叙述 61.7 DP,表现均衡。显存:20208 MiB。上下文退化:−25%(33.8→25.4 gen_tps)。
ik_llama + DFlash
使用 beellama 的独立草稿模型测试。代码 96.8 DP,与 MTP+ngram 有竞争力,但叙述严重受损(45.7 DP)。TTFT 较高(504ms),可能是由于单独的草稿模型加载。
mainline llama.cpp — 参考基准
无分支,无补丁。上游投机性 MTP。标准 Q4_K_M 量化。代码:64.7 DP | 叙述:52.6 DP。TTFT:288ms——整体最低,零开销。上下文一致性:0% 退化(72k 和 128k 之间 31.3→31.3 DP)。这很重要:主线无论上下文长度如何都保持速度(或者可能是异常值?)。虽然原始吞吐量不是最快,但可预测性最高。
Spiritbuun — 优化的 MTP,失败的 DFlash
Spiritbuun MTP 分支,具有优化的 MTP(turbo 缓存、flash-attn)。Q4_K_M 量化。我测试它是因为它对我使用 APEX 量化的 Qwen 3.6 35B A3B MoE 模型给出了最佳结果(如果您感兴趣,请参阅我关于它的帖子)。代码:59.7 DP | 叙述:45.7 DP。上下文退化:−9%。主线之后最佳一致性。TTFT:294ms——与主线几乎相同。
Spiritbuun DFlash
使用其自己的草稿模型测试。未能达到 MTP 速度:代码 67.0 DP,叙述 30.4 DP。我没有测试长上下文性能,似乎不值得。
beellama DFlash — 残酷的代码速度,高 TTFT 代价
使用自己的草稿模型(anbeeld-Qwen3.6-27B-DFlash-IQ4_XS.gguf),cross-ctx 1024 和统一 KV。代码:96.8 DP——整体第二好,非常接近 ik_llama。叙述:45.7 DP。缺点:504ms TTFT(几乎是主线的两倍)。第一个词需要半秒。显存:20814 MiB。中等 GPU 使用率(73%)。上下文:128k 保持 27.1 DP。在长上下文方面优于 ik_llama MTP。
LUCEBOX DFlash — 对我来说不起作用
独立的服务器引擎,带有 DFlash、TQ3 KV 缓存和 PFlash!代码:32.7 DP | 叙述:32.5 DP。在许多情况下,比不使用投机解码更差。也许我不了解如何一致地使用它?我在 incus 容器中使用的环境:
environment.DFLASH_FP_USE_BSA: "1"
environment.DFLASH_HOST: 0.0.0.0
environment.DFLASH_KVFLASH: auto
environment.DFLASH_PORT: "8080"
environment.DFLASH_PREFILL_DRAFTER: /opt/lucebox-hub/server/models/unsloth-Qwen3-0.6B-BF16.gguf
environment.DFLASH_PREFILL_MODE: auto
environment.DFLASH_SERVER_BIN: /opt/lucebox-hub/server/build/dflash_server
environment.DFLASH_TARGET: /opt/lucebox-hub/server/models/Qwen3.6-27B-Q4_K_M.gguf
environment.DFLASH27B_KV_TQ3: "1"
一致性结论
如果纯粹按实际一致性(跨上下文长度的速度稳定性 + 低 TTFT + 低显存开销)排名:
mainline llama.cpp MTP — 一致性的明确赢家。72k 和 128k 之间几乎零退化。最低 TTFT(288ms)。显存稳定(约 21GB)。无外部草稿模型依赖。它不会中断、不会突增、不会节流。
Spiritbuun MTP — 仅 9% 退化,TTFT 294ms,非常稳定。吞吐量略低于主线,但可预测性极好。
LUCEBOX DFlash — 技术上一致(0.1% 方差),但一直很慢。对我来说没用。
ik_llama 设置 — 短上下文快速,但在长上下文中付出沉重代价(−25% 至 −32% 退化)。
我的看法:主线和 Spiritbuun 之间的差异很小(约 3-5 DP)。但主线的零退化和最低 TTFT 使其成为最实际一致的设置。如果您运行长文档或 RAG 管道,主线不会让您意外。ik_llama 在速度上胜出,但您押注的是短上下文。
最终建议
| 优先级 | 最佳选择 | 原因 |
|---|---|---|
| 代码速度 | ik_llama MTP+ngram | 98.5 DP,基线的两倍 |
| 叙述速度 | ik_llama MTP (ubergarm) | 63.9 DP |
| 上下文一致性 | mainline llama.cpp | 0% 退化,最低 TTFT |
| 速度与稳定性的平衡 | Spiritbuun MTP | 接近主线的一致性,吞吐量略高 |
| 低 TTFT | mainline llama.cpp | 288ms,零开销 |
您怎么看?
相似文章
Wow!Qwen 3.6:35b-a3b 在 3090 上……太惊人了。
一位用户分享了在二手 RTX 3090 上运行量化版 Qwen 3.6:35b-a3b 模型的惊人结果:将模型放入显存后,输出速度达到每秒 160 个 token,并以 75 秒的视频处理时间展示了视觉能力。
Qwen-3.6-27B + llamacpp 投机解码效果惊艳
Reddit 用户展示了 llamacpp 的投机解码功能将 Qwen-3.6-27B 的生成速度从 13.6 提升至 136.75 t/s,并分享了完整的命令参数和硬件配置。
Qwen 3.6 在双 RTX PRO 6000 上的基准测试
使用 VLLM 在双 RTX PRO 6000 GPU 上对 Qwen 3.6 27B 和 35B 模型进行基准测试,生成吞吐量高达每秒 3500 个令牌。
@ItsmeAjayKV: 成就解锁:得益于RTX 3090,现在我可以运行Qwen3.6-27b密集模型。正在运行 @Alibaba_Qwen Qwen 3…
用户使用llama.cpp在RTX 3090上对Qwen3.6-27B进行基准测试,实现了35 tok/s的生成速度和1247 tok/s的提示处理速度。
在24GB显存环境中运行Qwen 3.6 27B的配置:后端对比、量化选择与设置(llama.cpp, ik_llama.cpp, BeeLlama, vllm)
本文对比了在RTX 3090 24GB上运行Qwen 3.6 27B使用的llama.cpp后端,发现搭配IQ4_KS量化的ik_llama.cpp性能最佳(预填充1261 tok/s,解码72.9 tok/s)。