Skip to main content

降低内存 (RAM) 占用

降低内存 (RAM) 占用

如果您在内存受限的环境中部署 Open WebUI(例如树莓派、小型 VPS 或共享主机),有几种策略可以显著减少内存消耗。

在运行 v0.3.10 版本的树莓派 4 (arm64) 上,通过这些优化,空闲内存消耗从 >1GB 减少到了 ~200MB(通过 docker container stats 观察)。


快速开始

设置以下环境变量可立即节省 RAM:

# 使用外部嵌入模型而不是本地 SentenceTransformers
RAG_EMBEDDING_ENGINE=ollama

# 使用外部语音转文本而不是本地 Whisper
AUDIO_STT_ENGINE=openai
tip

这些设置也可以在 管理员面板 > 设置 界面中配置 —— 将 RAG 嵌入设置为 Ollama 或 OpenAI,并将语音转文本设置为 OpenAI 或 WebAPI。


为什么 Open WebUI 占用这么多内存?

大部分内存消耗来自本地加载的机器学习模型。即使在使用外部 LLM(如 OpenAI 或独立的 Ollama 实例)时,Open WebUI 仍可能为以下功能加载额外的模型:

功能默认设置内存影响解决方案
RAG 嵌入本地 SentenceTransformers~500-800MB使用 Ollama 或 OpenAI 嵌入
语音转文本本地 Whisper~300-500MB使用 OpenAI 或 WebAPI
重排序 (Reranking)已禁用启用时 ~200-400MB保持禁用或使用外部服务
图像生成已禁用不定如果不需要请保持禁用

⚙️ 降低内存的环境变量

将嵌入模型卸载到外部服务

节省内存最有效的方法是使用外部嵌入引擎:

# 选项 1:使用 Ollama 进行嵌入(如果您有独立运行的 Ollama)
RAG_EMBEDDING_ENGINE=ollama

# 选项 2:使用 OpenAI 进行嵌入
RAG_EMBEDDING_ENGINE=openai
OPENAI_API_KEY=your-api-key

卸载语音转文本 (STT)

本地 Whisper 模型会消耗大量内存:

# 使用 OpenAI 的 Whisper API
AUDIO_STT_ENGINE=openai

# 或者使用基于浏览器的 WebAPI(不需要外部服务)
AUDIO_STT_ENGINE=webapi

禁用未使用的功能

禁用不需要的功能以防止加载相关模型:

# 禁用图像生成(防止加载图像模型)
ENABLE_IMAGE_GENERATION=False

# 禁用代码执行(减少开销)
ENABLE_CODE_EXECUTION=False

# 禁用代码解释器
ENABLE_CODE_INTERPRETER=False

减少后台任务开销

这些设置可以减少后台操作占用的内存:

# 禁用自动补全建议(高资源占用)
ENABLE_AUTOCOMPLETE_GENERATION=False

# 禁用自动标题生成
ENABLE_TITLE_GENERATION=False

# 禁用标签生成
ENABLE_TAGS_GENERATION=False

# 禁用后续建议生成
ENABLE_FOLLOW_UP_GENERATION=False

数据库和缓存优化

# 禁用实时聊天保存(减少数据库开销)
ENABLE_REALTIME_CHAT_SAVE=False

# 针对低资源系统减小线程池大小
THREAD_POOL_SIZE=10

向量数据库多租户

如果使用 Milvus 或 Qdrant,启用多租户模式以减少内存占用:

# 对于 Milvus
ENABLE_MILVUS_MULTITENANCY_MODE=True

# 对于 Qdrant
ENABLE_QDRANT_MULTITENANCY_MODE=True

🚀 推荐的最小化配置

对于内存极其受限的环境,请使用此组合配置:

# 将机器学习模型卸载到外部服务
RAG_EMBEDDING_ENGINE=ollama
AUDIO_STT_ENGINE=openai

# 禁用所有非核心功能
ENABLE_IMAGE_GENERATION=False
ENABLE_CODE_EXECUTION=False
ENABLE_CODE_INTERPRETER=False
ENABLE_AUTOCOMPLETE_GENERATION=False
ENABLE_TITLE_GENERATION=False
ENABLE_TAGS_GENERATION=False
ENABLE_FOLLOW_UP_GENERATION=False

# 减少工作线程开销
THREAD_POOL_SIZE=10

💡 其他提示

  • 监控内存使用情况:使用 docker container statshtop 来监控内存消耗。
  • 更改后重启:环境变量的更改需要重启容器才能生效。
  • 全新部署:某些环境变量仅在没有现有 config.json 的全新部署中生效。
  • 考虑替代方案:对于极其受限的系统,考虑在性能更强的机器上运行 Open WebUI,然后远程访问。

相关指南