快速结论:在 llama.cpp / llama-server 上加载 Gemma 4 系列 GGUF 模型并启用前缀缓存复用时,即使已经加了 -fa on 和 --swa-full,服务端仍会打印 cache reuse is not supported 并退化为每次请求全量重算 prompt(例如 46K token 约 96 秒)。优先排查两件事:--swa-full 是否真的生效让相似度检查通过,以及模型是否带有 shared KV cache(shared_kv_layers)导致复用执行被阻塞。
适用环境:Issue 中已确认的环境为 Windows x86_64、使用 Clang 19.1.5 构建的 llama.cpp version 8660 (d00685831),后端涉及 CUDA 与 Vulkan,硬件为 RTX 2000 Ada Generation Laptop GPU(Vulkan1)。另有用户在 Debian 13、CPU-only 环境、llama-b8672 上复现同类“每轮重算整个上下文”的现象。Issue 未提供 Python、PyTorch 版本信息。
最快修复方案:暂无确认的一步修复方案。可以优先尝试的做法是确保 --swa-full 已启用(评论确认这是相似度检查能正常工作的前提),但评论同时指出 shared KV 层问题仍会阻塞复用执行,因此该做法只能解决“相似度恒为 0”的那一半,不能保证缓存复用真正落盘生效。
注意事项:--swa-full 只解决了 SWA 缓存与相似度匹配,Issue 汇总里明确把 shared_kv_layers = 20 列为尚未解决的阻塞点,属于 unconfirmed bug,后续版本行为可能变化。上述建议均未经上游正式确认,不要当作官方修复步骤。
问题场景
用户通过 llama-server 加载 Gemma 4 系列 GGUF 模型(如 ggml-org/gemma-4-E2B-it-GGUF、ggml-org/gemma-4-E4B-it-GGUF,另有用户在 google_gemma-4-26B-A4B-it-Q5_K_S.gguf 上复现同类现象),并开启前缀缓存复用相关参数:llama-server -hf ggml-org/gemma-4-E2B-it-GGUF -fa on --cache-reuse 256 --swa-full。即使在连续请求中 prompt 几乎相同,服务端日志仍显示缓存复用被忽略,每次都要重新评估整个 prompt。在使用 Claude Code 这类会在用户消息之上附带 system prompt、system tools、MCP servers 等 30K–40K token 的场景下,用户每轮要等待 60–90 秒才能看到首批输出。
报错原文
slot update_slots: id 1 | task 314 | cache reuse is not supported - ignoring n_cache_reuse = 256
slot update_slots: id 1 | task 314 | n_tokens = 0, memory_seq_rm [0, end)
srv load: - looking for better prompt, base f_keep = -1.000, sim = 0.000
原因分析
根据 Issue 讨论,这实际上是两个相互独立的问题叠加:
- SWA 缓存与相似度检查:未加
--swa-full时,srv load阶段的相似度恒为sim = 0.000,前缀匹配代码根本没有机会尝试复用。评论指出该问题可由--swa-full修复(关联 #15082),启用后相似度检查恢复正常并能找到共享前缀。 - 缓存复用执行:即便找到了良好的前缀匹配,仍无法真正应用复用,原因是 Gemma 4 的 shared KV cache 架构(
shared_kv_layers = 20)。Issue 正文的 hypothesis 也指出,Gemma 4 最后num_kv_shared_layers层复用最后一个非共享层的 K/V 张量,这会破坏现有缓存复用 / 前缀匹配代码的假设,从而显式退出并打印 “cache reuse is not supported”。
需要注意的是,该 Issue 被标记为 bug-unconfirmed,上述 shared KV 层为阻塞点的判断来自讨论中的分析,属于可能原因而非上游已确认的定论。
环境排查
- 确认 llama.cpp 构建版本号与 build_info(如 Issue 中的
version: 8660 (d00685831)、b8672-25eec6f32),不同版本行为可能不同。 - 确认运行参数中是否包含
--swa-full,以及-fa on、--cache-reuse的实际取值。 - 查看启动日志中是否打印
general.architecture = gemma4以及notice about shared KV layers/gemma4.attention.head_count_kv等相关元数据。 - 确认后端类型(CUDA / Vulkan / CPU)、GPU 型号与显存情况;CPU-only 环境下同样出现该问题。
- 确认
n_parallel、kv_unified等缓存相关运行时设置。 - 如需更详细日志,可按日志提示使用
--verbose或-fit off复现。
解决步骤
- 先确认相似度检查是否正常:在启动命令中加入
--swa-full,观察日志中srv load: ... sim = ...是否不再是0.000。根据评论,这是缓存复用能够被尝试的前提。 - 若加入
--swa-full后相似度已能命中,但日志仍出现cache reuse is not supported - ignoring n_cache_reuse = ...,则可判断剩余阻塞来自 shared KV 层架构,此时可优先尝试升级到最新的 llama.cpp 构建,关注上游是否修复了 shared KV 与缓存复用的兼容性。 - 若暂时无可用修复版本,可在依赖缓存复用的场景下通过减少每轮 prompt 体积、缩短上下文、或使用非 Gemma 4 shared KV 架构模型来规避全量重算带来的等待。
- 如需跟踪进展,可关注 Issue 讨论中提到的关联 PR/Issue(#15082、#16382、#20225)的关闭与合并状态。
验证方法
在相同 prompt 连续发起两次请求后,检查 llama-server 日志:应不再出现 cache reuse is not supported - ignoring n_cache_reuse,且 srv load 中的 sim 为合理的非零值;同时可以对比第二次请求的首个 token 延迟,若缓存复用真正生效,其延迟应明显低于首次请求(而不是每次都接近首次的 60–90 秒)。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


