Eval bug: WIP

该问题发生在 llama-server 的 per-sequence slot 状态恢复失败后,同一进程内的后续 completion 会持续损坏或返回空结果,重启进程才能恢复正常。优先排查 KV cache 的 slot 恢复/回滚路径,而不是模型或硬件配置。

快速结论:该问题发生在 llama-server 的 per-sequence slot 状态恢复失败后,同一进程内的后续 completion 会持续损坏或返回空结果,重启进程才能恢复正常。优先排查 KV cache 的 slot 恢复/回滚路径,而不是模型或硬件配置。

适用环境:llama.cpp 0.1.0-dev(build 10398,commit 8e7f22b),Linux x86_64,CUDA 后端,NVIDIA RTX 4070 12GB,测试模型为 Gemma 3 4B IT Q4_K_M 和 Qwen3.5 2B Q4_K_M。

最快修复方案:暂无确认的一步修复方案。Issue 已确认重启进程可以恢复状态,但问题根因尚未修复;Erasing slot 无法恢复进程。

注意事项:该问题在 Ollama 和原生 llama-server 上均可复现,说明不是 Ollama 特有。问题被标记为 bug-unconfirmed,相关修复方案尚未验证。

问题场景

用户在使用 Ollama 测试持久化 prefill 缓存时首次遇到该问题,随后在原生 llama-server 中也复现。触发路径是:per-sequence slot restore 失败后,同一进程内后续的 completion 请求会出现输出损坏或空响应。llama-completion 不触发此问题,因为其 prompt-cache 路径走的是 whole-context state API,而不是 per-sequence slot 恢复路径。

报错原文

state_read_data: mismatched key type (1 != 248383823, layer 29)
llama_state_seq_load_file: error loading sequence state file: failed to restore kv cache
srv send_error: task id = 5, error: Unable to restore slot: No available space in KV cache or invalid slot save file

原因分析

可能原因:slot 恢复失败后,KV cache 中的元数据(per-sequence rollback 信息)未能正确回滚,导致后续请求读取到损坏的 cache 状态。Issue 指出该问题不是 #26051 引入的回归——#26051 只是增加了到达既有 rollback 逻辑的异常路径,但通过 state_read_data() 返回 false 也能触发同样的回滚路径,说明根因在更早的 slot 状态恢复实现中。

环境排查

  • 确认 llama.cpp 版本是否在 build 10398 或相近版本(commit 8e7f22b)。
  • 确认使用 CUDA 后端,且显存为 12GB(RTX 4070)。
  • 确认模型是否使用 GGUF 格式的 Q4_K_M 量化版本。
  • 检查是否可以通过原生 llama-server 复现(与 Ollama 无关)。
  • 确认是否使用了 per-sequence slot 恢复 API(如 llama_state_seq_load_file 相关调用)。

解决步骤

  1. 复现验证:在原生 llama-server 中执行一次损坏的 slot 恢复操作,确认报错信息包含 failed to restore kv cache
  2. 临时规避:如果线上环境不允许进程重启,可优先尝试在失败后 清除 KV cache重置所有 slot(Issue 中 Erasing slot 无效,但可尝试其他清理方式)。
  3. 确认影响范围:测试在失败后进行多个 completion 请求,确认是否全部损坏还是部分受影响。
  4. 版本对比:可优先尝试回退到更早版本(如 #26051 合并前的版本),确认问题是否仍然存在,以排除 #26051 的异常路径影响。
  5. 等待官方修复:Issue 已被标记为 bug-unconfirmed,可关注后续 pull request 中针对 slot rollback 路径的修复。

验证方法

修复后,执行一次损坏的 slot 恢复操作,然后立即发起一个正常的 completion 请求。如果输出恢复正常且不再返回空结果或乱码,则问题已解决。重点观察失败恢复后同一进程内是否还能持续工作。

参考来源

ggml-org/llama.cpp #27052

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18424

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注