issue: torch and full local ML stack loaded at import time with all-remote engines (~340MB RSS, langchain-text-splitters 1.1.2 regression)

这是在 Open WebUI 全远程推理部署(不装 Ollama、不用本地 embedding/rerank/STT/TTS)中,后端仅在 import open_webui.main 阶段就加载 torch、transformers、sentence-transformers、spaCy 等本地

快速结论:这是在 Open WebUI 全远程推理部署(不装 Ollama、不用本地 embedding/rerank/STT/TTS)中,后端仅在 import open_webui.main 阶段就加载 torch、transformers、sentence-transformers、spaCy 等本地 ML 栈,导致启动 RSS 与 swap 显存被持续占用的问题。优先排查 langchain-text-splitters 版本与所用镜像变体。

适用环境:Open WebUI v0.11.0(ghcr.io/open-webui/open-webui:main,镜像构建于 2026-07-27,revision 01f4282);Docker 安装;Ubuntu 25.10 x86_64,内核 7.0.0-27-generic;2GB RAM + 2GB swap 的 DigitalOcean droplet。后续复现使用 dev 分支 eb9b7b65 与 4ef7e35 构建,并在 ROCm 版 torch 环境与 OFFLINE_MODE=true 下验证。不涉及 Ollama、浏览器控制台。

最快修复方案:换用 slim 镜像(如 ghcr.io/open-webui/open-webui:dev-slim)。据 Issue 中 4ef7e35 同版本对照,标准镜像加载 torch 等本地 ML 栈、import open_webui.main 峰值 RSS 约 826MB,slim 镜像不加载、峰值 RSS 约 292MB。Issue 关闭时给出了“Fixed for your setup in v0.11.4”:slim 镜像不再安装 torch、transformers、sentence-transformers 或 spaCy。

注意事项:v0.11.0 时期的 slim 镜像仍携带完整 ML 栈,仅省略模型文件,因此那时换 slim 不一定有效;需使用 v0.11.4 及之后不再安装这些依赖的 slim 镜像。仅设置 OFFLINE_MODE=true 不能阻止标准镜像在导入期加载这些模块,因为加载发生在读取配置之前。2GB 主机上这是稳定性问题而非观感问题;是否在所有部署形态下都被 v0.11.4 覆盖,Issue 中未逐项验证。

问题场景

在 Open WebUI 后端启动、尚未处理任何 HTTP 请求的阶段即可观测到高内存占用。用户把所有 AI 相关功能都配置为远程引擎:rag.embedding_engine = "openai"、rag.reranking_engine = ""、audio.stt.engine = "web"、audio.tts.engine = ""、rag.bypass_embedding_and_retrieval = true,部署中也没有安装或使用 Ollama。按照配置,代码路径不应触碰本地机器学习运行时,但 import open_webui.main 仍加载了 torch、transformers、sentence-transformers、spacy、thinc/blis、nltk、sklearn、pandas、pyarrow、scipy 与 av。

报错原文

issue: torch and full local ML stack loaded at import time with all-remote engines (~340MB RSS, langchain-text-splitters 1.1.2 regression)

torch loaded: True | sentence_transformers: True | spacy: True | transformers: True | peak RSS MB: 826
torch loaded: False | sentence_transformers: False | spacy: False | transformers: False | peak RSS MB: 292

原因分析

Issue 将根因指向 langchain-text-splitters 1.1.2 的回归。该版本被 backend/requirements.txt 精确锁定为 ==1.1.2(报告时位于第 57 行,dev 构建中位于第 52 行),且在当时也是 PyPI 上的最新版本,没有可升的上游版本。触发路径是:backend/open_webui/routers/retrieval.py 在模块级执行 from langchain_text_splitters import (MarkdownHeaderTextSplitter, RecursiveCharacterTextSplitter, TokenTextSplitter),而该 router 又被 main.py 无条件导入。在 1.1.2 中,这一步会触发两条独立的 eager-import 链,其中 langchain_text_splitters/__init__.py 会导入所有 splitter 后端。

后续评论进一步验证:仅 import langchain_text_splitters 就会把常驻内存从 10MB 推到 843MB,并加载 torch、sentence_transformers、spacy。dev 分支在该路径上未发生变化,仍锁定 1.1.2 并保持模块级导入。

环境排查

  • 确认 Open WebUI 版本:v0.11.0 是否仍在使用标准镜像,是否为 v0.11.4 及之后的 slim 镜像。
  • 确认所用镜像标签:main、dev,还是 dev-slim;相比报告中的 01f4282、eb9b7b65、4ef7e35 是否一致。
  • 确认 backend/requirements.txt 中 langchain-text-splitters 的锁定版本是否为 ==1.1.2。
  • 确认 backend/open_webui/routers/retrieval.py 是否仍在模块级导入 langchain_text_splitters。
  • 确认 OFFLINE_MODE 是否仅被当作缓解措施使用;Issue 显示它不会阻止标准镜像的导入期加载。
  • 如使用 ROCm 版 torch,RSS 绝对值会与报告中的 693MB 不可直接比较,应关注加载的模块集合。

解决步骤

  1. 先量化确认问题:在目标镜像上,用与 Issue 相同思路的检查命令运行 import open_webui.main,打印 torch in sys.modules、sentence_transformers in sys.modules、spacy in sys.modules、transformers in sys.modules 与 ru_maxrss,对比是否出现标准镜像的加载结果。
  2. 在同版本构建上做镜像变体对照:分别用标准镜像与 slim 镜像,在相同设置(Issue 中为 OFFLINE_MODE=true,并使用镜像默认设置而非全远程配置,因为加载发生在读取设置之前)执行同一条检查命令,比较模块加载与峰值 RSS。
  3. 如果目标是小内存主机,将部署切换到支持该修复的 slim 镜像:Issue 显示 dev-slim 在 4ef7e35 上不加载 torch、transformers、sentence-transformers、spaCy,峰值 RSS 约 292MB,标准 dev 约 826MB。
  4. 升级或选用 v0.11.4 及之后版本的 slim 镜像。Issue 关闭时明确表示该版本 slim 不再安装 torch、transformers、sentence-transformers 或 spaCy。
  5. 不建议把 OFFLINE_MODE=true 当作标准镜像的替代修复或唯一修复;Issue 中该开关单独使用不能改变导入链。

验证方法

重新运行量化检查,确认 torch、sentence_transformers、spacy、transformers 均未出现在 sys.modules 中,且 import open_webui.main 的峰值 RSS 明显下降(Issue 中 slim 为 292MB,标准为 826MB)。同时在宿主机上观察容器 /proc/1/smaps_rollup 的 Rss/Swap 与 atop 历史,确认 swap 不再长期钉在 1.0–1.1GB。

参考来源

open-webui/open-webui #27610

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 26535

发表回复

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