Eval bug: Parallel Runs with Unified KV Cache Cuases Loss of Coherency on qwen4exp

该报错发生在 llama-server 启用 unified KV cache 且并行处理多个请求时,第二个请求开始处理后,第一个请求的解码出现上下文错乱(表现为“失忆”和幻觉)。优先排查是否启用了 unified KV cache(`-ub` 参数),并确认是否使用了索引器(indexer)类模型

快速结论:该报错发生在 llama-server 启用 unified KV cache 且并行处理多个请求时,第二个请求开始处理后,第一个请求的解码出现上下文错乱(表现为“失忆”和幻觉)。优先排查是否启用了 unified KV cache(`-ub` 参数),并确认是否使用了索引器(indexer)类模型。

适用环境:llama.cpp b10653(含 Vulkan 张量并行补丁及 #27209)、Linux、Vulkan 后端、3×Intel Arc Pro B65 + 2×Intel Arc Pro B60、模型为 unsloth/Qwen3.8-Flash-Next-GGUF:Q6_K_XL。

最快修复方案:该问题已在 #27941 中修复,建议升级到包含该修复的 llama.cpp 版本。如果暂时无法升级,可优先尝试禁用 unified KV cache(不传 `-ub` 参数或设置为 0)。

注意事项:禁用 unified KV cache 可能会增加显存占用,因为每个序列需要独立的 KV 缓存。该修复针对索引器模型(indexer models),非索引器模型可能不受影响。

问题场景

用户使用 llama-server 运行 unsloth/Qwen3.8-Flash-Next-GGUF:Q6_K_XL 模型,启动参数包含 -sm tensor -fa 1 --tensor-read-lazy --load-mode mmap --override-tensor per_layer_token_embd.weight=CPU -ub 512 -b 8192 -ts 4,4,4,3,3。当第一个请求正在解码时,第二个请求开始处理,第一个请求的解码随即出现混乱,开始从先前上下文中错误地回忆内容,表现为回答质量急剧下降(类似量化或质量问题)。

报错原文

Eval bug: Parallel Runs with Unified KV Cache Cuases Loss of Coherency on qwen4exp

原因分析

Issue 中给出了详细的机制分析:set_input_qsa(src/llama-memory-hybrid-idx.cpp:383-417)是按流(stream)编写的,但在 unified KV cache 下 n_stream = 1(而非 n_seq_max)。这意味着它只对保存所有会话单元(cell)的单一数组做一次遍历,并按位置(position)建立块映射。当多个会话在同一位置都有 token 时,会发生键碰撞(collision),后写的覆盖先写的,导致每个块的索引键由最后写入的会话决定。因此会话 A 的 top-2048 块选择会基于会话 B 的内容进行评分,A 无法再找到自己的上下文。同时 filled[b] 计数膨胀使不完整的块看起来可以被池化。注意力掩码仍会隐藏外部单元,因此不会出现 B 的文本泄漏到 A 中,但表现为 A 对自己历史的失忆和幻觉。

此外,对于索引器模型,没有机制强制关闭 unified KV cache:cparams.kv_unified 直接取自参数(src/llama-context.cpp:273)。该问题由 #27742 引入,修复在 #27941 中完成。

环境排查

  • llama.cpp 版本:b10653 或更早(包含 #27742 的版本)
  • 是否启用 unified KV cache:检查启动参数是否包含 -ub 且值非 0
  • 是否使用了索引器模型(indexer model),如 Qwen3.8-Flash-Next
  • 并行请求场景:确认是否在第一个请求未完成时发起第二个请求

解决步骤

  1. 升级 llama.cpp 到包含 #27941 修复的版本(该修复已被合入)。这是官方确认的解决方案。
  2. 如果暂时无法升级,可优先尝试禁用 unified KV cache:移除启动参数中的 -ub 或将 -ub 设为 0,然后重新启动 llama-server 验证问题是否消失。
  3. 如果问题仍然存在,检查是否使用了其他并行后端(如 Vulkan 张量并行),确认并行配置不是触发因素。

验证方法

修复后,在第一个请求仍在解码时发起第二个请求,确认第一个请求的输出不再出现上下文错乱、失忆或幻觉。也可以对比启用和禁用 unified KV cache 时的行为差异。若升级后问题消失,则确认是 #27941 修复生效。

参考来源

ggml-org/llama.cpp #27994

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21251

发表回复

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