Eval bug: Speculative Decoding intermittent timeout

用户在 llama.cpp 的 llama-server 中启用 Vulkan 后端,配合 AMD 显卡运行 Qwen3.6-35B-A3B-UD 模型,并设置了推测解码参数(包括 MTP 和 ngram-mod 模式)。问题通过 llama-swap 调用时被观察到,表现为流式输出突然暂停、连接持

Eval bug: Speculative Decoding intermittent timeout

Eval bug: Speculative Decoding intermittent timeout

快速结论:该报错发生在启用 --spec-type 进行推测解码(Speculative Decoding)时,流式输出会随机中断、连接挂起直至超时。优先尝试移除 --spec-type 相关参数,或降低 --spec-draft-n-max 值(如设为 2)。

问题场景

用户在 llama.cpp 的 llama-server 中启用 Vulkan 后端,配合 AMD 显卡运行 Qwen3.6-35B-A3B-UD 模型,并设置了推测解码参数(包括 MTP 和 ngram-mod 模式)。问题通过 llama-swap 调用时被观察到,表现为流式输出突然暂停、连接持续但不传数据,仅在超时后结束。

报错原文

When speculative decoding is enabled, the streaming output may appear to hang abruptly. However, the connection remains active even though no new data is being sent. Since there is no explicit end-of-stream signal, the process only terminates once the configured timeout expires.

日志中仅能观察到 API 调用超时(timeout),无明确异常输出。

原因分析

可能原因:推测解码过程中的 draft 生成或验证阶段出现死锁或状态不一致,导致主模型无法继续推理。该问题在 MTP 和 ngram-mod 两种推测模式下均被触发,且具有间歇性(概率 <1%)。降低 --spec-draft-n-max(如设为 2)似乎可缓解,表明与 draft token 数量或 draft 模型行为相关。

环境排查

  • llama.cpp 版本:9204 (726704a16)
  • 操作系统:Linux x86_64
  • GGML 后端:Vulkan
  • 硬件:AMD 395(用户也遇见过使用 NVIDIA 5060 Ti + 2060 Super 的组合)
  • 模型:Qwen3.6-35B-A3B-UD-Q8_K_XL.gguf

解决步骤

  1. 临时规避:移除所有 --spec-type 相关参数(如 --spec-type draft-mtp --spec-draft-n-max 6),回归常规解码模式。用户反馈此操作后超时问题完全消失。
  2. 降低负载:如果仍需使用推测解码,将 --spec-draft-n-max 值降低(例如从 6 减至 2),并观察是否仍会触发超时。
  3. 日志捕获:由于问题随机出现(概率 <1%),建议增加日志保存周期,或使用 --verbose 4 提高日志级别,以便捕获超时前的上下文。
  4. 交叉测试:若使用混合推测模式(如 draft-mtp,ngram-mod),可先单独测试每种推测类型(如先只启用 ngram-mod),以隔离具体问题来源。

验证方法

移除推测解码参数后,在相同的负载和模型配置下长时间运行(例如数天),确认不再出现超时或挂起。若降低了 --spec-draft-n-max,需确认推测解码性能是否恢复正常,且无间歇性卡顿。

参考来源

ggml-org/llama.cpp #23268

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13850

发表回复

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