如果你在意解码速度,就停止在 Qwen3.8 27B 上使用 Native MTP(多令牌预测)。
让我向你展示如何在单张 RTX 4090(24 GB 显存)上使用 dflash 2 实现更高的解码速度,而不牺牲上下文窗口或准确性。相同模型。相同的 KV 缓存量化。更高的解码吞吐量。
DFlash 2 刚刚通过 llama.cpp 的 PR #27342 发布,它彻底改变了显存物理引擎。我在单张 NVIDIA RTX 4090(24GB 显存)上运行了严格的 A/B 基准测试,使用 Unsloth 的 Q4_K_XL 量化(新的动态 v3 Unsloth GGUFs)。
(是的,昨天发布的新的 Qwen3.8 27B GGUFs 在相同磁盘大小下提供了 10% 更高的准确性。详情见回复)。
注意:所有基准测试均以 28k 令牌提示作为基线进行。
# 首先,注意事项:
1. 多 GPU 和多模态目前已损坏。跨多张卡的张量分割将在此 PR 上失败。目前仅适用于单 GPU 猛男。
2. 预填充权衡:Native MTP 在提示摄入上仍占优势(~2,360 t/s 预填充 vs DFlash 的 ~1,750 t/s)。但对于长生成代理工作流,DFlash 2 的解码速度绝对碾压 MTP。
以下是精确的显存调优矩阵。因为 DFlash 2 的块扩散草稿状态会占用内存,调整你的 `--spec-draft-n-max` 参数将决定你的整个上下文上限。
### GEAR 1:黄金比率(n-max 3)
如果你将草稿器降到 `n-max 3`,你将释放正好足够的显存来匹配 MTP 的上下文限制,同时在速度上彻底摧毁它。
# 最大上下文测试(在 150k 上下文、Q4_0 KV、23.8 GB 显存下测试):
- Native MTP:66.85 t/s 解码
- DFlash 2:77.44 t/s 解码(+16% 更快)
# 高精度 SWE A/B 测试(在 90k-100k 上下文、Q8_0 KV、~23.9 GB 显存下测试):
- Native MTP(100k 上下文):70.83 t/s 解码
- DFlash 2(90k 上下文):80.76 t/s 解码(+14% 更快)
### GEAR 2:红线速度 & Q8 KV 精度(n-max 4)
如果你想彻底突破 80 t/s 障碍,你必须提升到 `n-max 4`。比 n-max 3 多 2-3% 的解码。状态缓冲区变大,因此你的上下文窗口必须缩小以避免 OOM:
- Q4 KV @ 120k 上下文:79.71 t/s 解码 | 23.8 GB(dflash 2, nmax 4)
- Q4 KV @ 120k 上下文:79.71 t/s 解码 | 23.8 GB(dflash 2, n-max 4)
### 如何今天编译和运行 PR:
git clone http://t.cn/A6BZ1MIK
cd llama.cpp
git fetch origin pull/27342/head:pr-27342
git switch pr-27342
cmake -B build -DGGML_CUDA=ON && cmake --build build -j
### 150k 黄金比率 llama.cpp 标志:
./build/bin/llama-server -m Qwen3.8-27B-UD-Q4_K_XL.gguf -md Qwen3.8-27B-DFlash2-Q4_K_M.gguf --spec-type draft-dflash --spec-draft-n-max 3 -c 150000 -ngl 99 --port 8080 -ctv q4_0 -ctk q4_0
用几毫秒的预填充换取在 27B 前沿模型上持续 81 t/s 的输出,使用消费级游戏 GPU,这绝对是巨大的胜利。Dflash 2 也在 vllm 和 sglang 中可用。应该也能与单张 RTX 3090 一起使用。
主模型以及 dflash 2 草稿模型的 huggingface 链接可在回复中获取。
老实说,这样的 81 t/s 本地设置实际上为你节省了多少每月 API 开支?
