Misc. bug: ui: “Stream connection lost and could not be resumed” with slow models after 1a87dcdc

用户在使用 llama-server 从 WebUI 发起推理时,特别是使用大型模型(如 MoE 模型、70B+ 参数模型)且模型加载速度较慢的场景下触发。典型环境: llama-server 搭配 --models-preset 多模型配置,使用 --threads-http 2 等低 HTTP

Misc. bug: ui: "Stream connection lost and could not be resumed" with slow models after 1a87dcdc

Misc. bug: ui: “Stream connection lost and could not be resumed” with slow models after 1a87dcdc

快速结论:该报错通常在使用慢速大模型(如 Mistral Small 4、Qwen 3.5 122B-A10B)通过 llama-server WebUI 进行推理时出现。优先排查 --threads-http 参数是否设置过小(例如设为2),或模型在 Prompt Processing 阶段加载缓慢导致 SSE 流超时。

问题场景

用户在使用 llama-server 从 WebUI 发起推理时,特别是使用大型模型(如 MoE 模型、70B+ 参数模型)且模型加载速度较慢的场景下触发。典型环境:llama-server 搭配 --models-preset 多模型配置,使用 --threads-http 2 等低 HTTP 线程数设置,或模型存储在 HDD 而非 NVMe 上。

报错原文

Error in sendMessage: Error: Stream connection lost and could not be resumed
Streaming error: Error: Stream connection lost and could not be resumed

[HTTP/1.1 404 Not Found 16000ms]
attachServerStream replay got HTTP 404 for conv ...

原因分析

可能原因:在提交 1a87dcdc(PR #23226)之后,流路由逻辑在判定模型状态时只检查 is_ready() 而非 is_running(),导致当模型处于 LOADING/SLEEPING 状态时,SSE 流连接被路由器拒绝,返回 404。同时,如果 --threads-http 设置过小(例如2),两次 SSE 连接(基础流 + resume 请求)会占满所有 HTTP 工作线程,导致其他请求超时,触发”could not be resumed”错误。

开发者已提交一个补丁尝试修复(将 is_ready() 改为 is_running()),但该补丁并未完全解决问题,表明可能存在更多边缘情况。

环境排查

  • llama-server 版本:确认是否包含提交 1a87dcdc(可通过 ./llama-cli --version 查看版本及编译哈希)
  • 模型加载速度:确认模型是否为大参数量模型(>70B)或运行在低速存储(HDD、mmap 模式从 NVMe 加载等)
  • HTTP 线程数:检查 --threads-http 参数是否设置过低(< 5)
  • 反向代理/路由器:如果使用了外部路由/代理(如 llama-swap),确认是否拦截了 /sw.js 等前端请求
  • 浏览器开发者工具:在 Firefox/Chrome 网络面板查看 /v1/stream/ 请求是否返回 404

解决步骤

  1. 第一步(可优先尝试):增加 HTTP 线程数。移除 --threads-http 2 参数,或设置为 --threads-http 8(默认至少为 5)。这样可以避免 SSE 重试连接占满所有 HTTP 线程导致超时。
  2. 第二步:还原提交 1a87dcdc。在最新 git master 上 revert 该提交可以消除问题(用户已验证)。
  3. 第三步:如果使用外部代理(如 llama-swap),检查其配置文件中的 upstream.ignorePaths 规则,确保没有拦截来自 WebUI 的流请求。可尝试临时关闭代理直连 llama-server 测试。
  4. 第四步:考虑将模型存储在更快的存储介质(NVMe SSD 而非 HDD),或关闭 --mmap(但需注意关闭后加载更慢,可能适得其反)。
  5. 第五步:等待上游社区合并更完善的修复(当前已知修复仅修改了 is_ready()is_running(),但测试表明仍不足够)。

验证方法

启动 llama-server 后,在 WebUI 中发起一次完整推理请求,观察是否还能复现 “Stream connection lost and could not be resumed” 错误。同时检查浏览器网络请求面板,确认 /v1/stream/ 接口返回 200 而非 404。

参考来源

ggml-org/llama.cpp #25158

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 11335

发表回复

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