
DFlash draft acceptance rate collapses to zero when using quantized –cache-type-k-draft (or v)
快速结论:当对 DFlash 推测解码的草稿模型 KV 缓存使用量化类型(如 q8_0)时,草稿接受率会从 80-99% 骤降至接近 0%。根本原因是量化后的 KV 缓存缺失了注意力旋转(attention rot)操作,导致缓存数据不一致。优先检查是否使用了量化的草稿缓存类型,并确认是否已应用修复补丁。
问题场景
用户在 llama.cpp 的 llama-server 中使用 DFlash 推测解码(--spec-type draft-dflash)时,通过 --cache-type-k-draft q8_0 或 --cache-type-v-draft q8_0 将草稿模型的 KV 缓存类型设置为量化格式后,草稿接受率从正常的 80-99% 跌至 0-2%。该问题在 Windows(MSVC/CUDA/Vulkan)和 Linux/WSL(GCC/CUDA/Vulkan)上均能复现,与后端和编译器无关。正常推理和 MTP 推测解码不受影响。该问题自 DFlash 首次合并以来就已存在。
报错原文
--spec-type draft-dflash --cache-type-k-draft f16 --cache-type-v-draft f16 : up to 99% draft acceptance
--spec-type draft-dflash --cache-type-k-draft q8_0 --cache-type-v-draft q8_0 : 0-2% draft acceptance
LLAMA_ATTN_ROT_DISABLE=1 --spec-type draft-dflash --cache-type-k-draft q8_0 : restores 99% draft acceptance
原因分析
根本原因在于量化 KV 缓存的注意力旋转(attention rot)缺失。在 llama.cpp 中,注意力旋转操作仅对量化类型的 KV 缓存执行,对 f16 和 bf16 类型不执行。DFlash 推测解码从目标模型 KV 缓存注入数据时,目标模型的 KV 缓存已经过旋转,但 DFlash 草稿 KV 缓存却未进行旋转,导致缓存数据不匹配。这使得 DFlash 草稿接受率几乎归零。设置 LLAMA_ATTN_ROT_DISABLE=1 可以暂时绕过该问题,因为会全局禁用旋转,从而使目标模型和草稿模型的 KV 缓存状态一致。
环境排查
- llama.cpp 版本:至少从 b9970 到 b10032 版本受影响。
- 操作系统:Windows(MSVC/Clang)、Linux/WSL(GCC)
- 后端:CUDA、Vulkan
- 模型:目标模型(如 bartowski/deepreinforce-ai_Ornith-1.0-35B-GGUF)和 DFlash 草稿模型(如 williamliao/Qwen3.6-35B-A3B-DFlash-GGUF)
- 启动参数:检查是否使用
--cache-type-k-draft q8_0、--cache-type-v-draft q8_0或其他量化类型,以及是否使用LLAMA_ATTN_ROT_DISABLE=1
解决步骤
- 确认问题:检查启动脚本中是否包含
--cache-type-k-draft q8_0或--cache-type-v-draft q8_0。记录无量化(默认f16/bf16)时的草稿接受率作为基线。 - 应用修复:该问题已在 llama.cpp PR #25823 中修复。将
llama.cpp更新到包含该 PR 的版本(或在上述 PR 合并后的主分支版本)。 - 临时绕过方法:如果无法立即更新代码,可以设置环境变量
LLAMA_ATTN_ROT_DISABLE=1来绕过该问题。注意:这可能影响模型精度,不推荐长期使用。 - (可优先尝试)再次测试:更新代码后,用原来的量化参数(
--cache-type-k-draft q8_0 --cache-type-v-draft q8_0)启动服务器,验证草稿接受率是否恢复到f16/bf16的同等水平。
验证方法
启动 llama-server 后,对同一组提示词进行推测解码,观察服务端日志中的 Draft acceptance 统计值。正常值应恢复到 80-99% 的范围,而非 0-2%。可用 LLAMA_ATTN_ROT_DISABLE=0(即允许旋转)配合量化草稿缓存类型进行测试。

![[Bug]: QA parser for .csv silently corrupts Q&A pairs: csv.reader quote handling + row/line index mismatch splice answers from wrong lines](https://www.chat-gpts.plus/wp-content/uploads/2026/07/16791-27e22f62-768x403.jpg)

