当前位置: 首页 > news >正文

Ollama + Open WebUI

1. 背景

需要关于代码层面的问答
需要账户登陆记录

2. 机器

16c32g
200g的磁盘
centos8.5

3. 选取的模型

Ollama + Open WebUI
ollama的模型库
https://ollama.com/library
codellama模型最低就是7b

  • 模型​:CodeLlama-13B(4-bit量化)
  • 内存占用​:~10-12GB
  • 剩余内存​:~20GB用于并发处理
    机器申请失败,因此我在自己真机上部署了一套仅仅限制4个人用的模型
    我自己的机器
    x86_64
    16cpu:CPU: model name : Intel® Core™ i7-10700 CPU @ 2.90GHz
    64G内存
    440G的磁盘
    集成显卡:Intel Corporation CometLake-S GT2 [UHD Graphics 630] (rev 05)
    存储设备:WD SN550 NVMe SSD
    自己配置不高,所以用的是Ollama-7b的小模型,并且限制在4个人使用。因为我的机器有时候还要跑占内存的东西,尽量避免挤压真机使用。
    ollama pull codellama:7b

Open WebUI必需的基础模型

ollama pull sentence-transformers/all-MiniLM-L6-v2  # 嵌入模型(必需)
ollama pull nomic-embed-text                          # 文本嵌入模型
ollama pull all-minilm-l6-v2                         # 轻量嵌入模型

查看已经pull下来的模型,我的位置

/root/.ollama/models

查找命令

sudo find / -name "models" -type d 2>/dev/null

config.json

因为在国内环境下,Hugging Face 被屏蔽。从 Hugging Face 下载 sentence-transformers/all-MiniLM-L6-v2 模型会失败,因此直接去下面的网址下载模型在从本地加载到容器中,
https://public.ukp.informatik.tu-darmstadt.de/reimers/sentence-transformers/v0.2/

compose文件,使用桥接网络

version: '3.8'services:open-webui:image: ghcr.io/open-webui/open-webui:maincontainer_name: zyl-ai-webuirestart: unless-stoppedports:- "3000:8080"volumes:# 数据存储 (保持不变)- ./data:/app/backend/data# 修正后的模型挂载路径 (关键修改)- /home/great/zhangyuling_ai_ollama_7b/models/sentence-transformers/all-MiniLM-L6-v2:/app/backend/models/sentence-transformers/all-MiniLM-L6-v2environment:# Ollama连接- OLLAMA_BASE_URL=http://host.docker.internal:11434# 模型配置 (关键修改)- EMBEDDING_MODEL=/app/backend/models/sentence-transformers/all-MiniLM-L6-v2- DEFAULT_MODEL=codellama:7b- DEFAULT_MODELS=codellama:7b- EMBEDDING_MODEL=nomic-embed-text:latest- DISABLE_MODEL_DOWNLOAD=true# 禁用功能 (修正参数)- DISABLE_VECTOR_DB=false- DISABLE_EMBEDDINGS=false# 性能限制(针对4人团队优化)- MAX_CONCURRENT_REQUESTS=3      # 同时处理3个请求- REQUEST_QUEUE_SIZE=8           # 队列最多8个请求等待- REQUEST_TIMEOUT=120             # 请求超时时间(秒)- MAX_CONCURRENT_SESSIONS=4       # 最大并发会话数# 内存优化- MEMORY_LIMIT=4096               # 内存限制4GB- WORKER_TIMEOUT=300               # 工作进程超时# 用户认证- WEBUI_AUTH=true- USER_REGISTRATION=true- ALLOW_SIGNUP=true# 界面设置- DEFAULT_LOCALE=zh-CN- TITLE=AI代码助手extra_hosts:- "host.docker.internal:host-gateway" healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080"]interval: 30stimeout: 10sretries: 3start_period: 60s

compose文件使用主机网络(推荐使用)

services:open-webui:image: ghcr.io/open-webui/open-webui:maincontainer_name: zyl-ai-webuirestart: unless-stopped# 使用主机网络模式network_mode: "host"volumes:- ./data:/app/backend/dataenvironment:- OLLAMA_BASE_URL=http://127.0.0.1:11434- OFFLINE_MODE=true- EMBEDDING_MODEL=nomic-embed-text- DISABLE_MODEL_DOWNLOAD=true- DISABLE_HUGGINGFACE=true- DISABLE_CLOUD_SYNC=true- DISABLE_TELEMETRY=true- DISABLE_OPENAI=true- DISABLE_AZURE=true- DISABLE_CLOUD=true- DISABLE_PUBLIC=false- DEFAULT_MODEL=codellama:7b- DEFAULT_MODELS=codellama:7b- WEBUI_AUTH=true- USER_REGISTRATION=true- ALLOW_SIGNUP=true- DEFAULT_LOCALE=zh-CN- TITLE=AI代码助手(离线模式)#   # ✅ 增加资源限制配置#   deploy:#    resources:#     limits:#      memory: 8G#     cpus: '4.0'#  reservations:#   memory: 4G#  cpus: '2.0'# 添加启动时安装网络工具的命令command: >bash -c "echo '正在安装网络诊断工具...' &&apt-get update &&apt install iputils-ping &&echo '网络工具安装完成,启动Open WebUI...' &&/start.sh"healthcheck:test: ["CMD", "curl", "-f", "http://127.0.0.1:8080/api/config"]interval: 30stimeout: 15sretries: 3start_period: 120s
  1. 最终验证
    great@great-PC:~/zhangyuling_ai_ollama_7b/webui$ ./final-check.sh
=== 🎉 AI代码助手平台部署完成 ===📊 服务状态:
WARN[0000] /home/great/zhangyuling_ai_ollama_7b/webui/docker-compose.yml: `version` is obsolete 
NAME           IMAGE                                COMMAND           SERVICE      CREATED          STATUS                    PORTS
zyl-ai-webui   ghcr.io/open-webui/open-webui:main   "bash start.sh"   open-webui   14 minutes ago   Up 14 minutes (healthy)   0.0.0.0:3000->8080/tcp, :::3000->8080/tcp🔗 网络连接:
(Not all processes could be identified, non-owned process infowill not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::3000                 :::*                    LISTEN      -                   🤖 模型状态:
NAME                       ID              SIZE      MODIFIED     
nomic-embed-text:latest    0a109f422b47    274 MB    3 hours ago     
codellama:7b               8fdf8f752f6e    3.8 GB    19 hours ago    🌐 访问测试:
✅ Web服务正常================================================🚀 AI代码助手平台已就绪!
================================================
🌐 访问地址: http://192.168.20.8:3000
🤖 默认模型: codellama:7b
👥 用户限制: 4人并发
💡 功能: 代码生成、调试、多语言支持
================================================
  1. 使用指南

🎯 访问流程

  1. 打开浏览器访问:http://您的服务器IP:3000
  2. 注册账户​:点击右上角 “Sign Up” 创建账户
  3. 开始使用​:在聊天界面输入代码相关问题
    功能特性:​
  • ✅ 代码生成和补全
  • ✅ 代码调试和解释
  • ✅ 多语言支持​(Python, Java, JavaScript等)
  • ✅ 对话历史记录
  • ✅ 用户管理功能

🛠️ 管理命令

# 查看状态
docker compose ps# 查看日志
docker compose logs --tail=20# 重启服务
docker compose restart# 停止服务
docker compose down# 更新服务
docker compose pull && docker compose up -d
cd ~/zhangyuling_ai_ollama_7b/webui

创建功能完整的全局管理脚本

cat > ai-manager.sh << 'EOF'
#!/bin/bash# 定义项目目录
PROJECT_DIR="/home/great/zhangyuling_ai_ollama_7b/webui"# 检查项目目录是否存在
if [ ! -d "$PROJECT_DIR" ]; thenecho "❌ 错误:项目目录不存在: $PROJECT_DIR"exit 1
fi# 切换到项目目录
cd "$PROJECT_DIR"show_status() {echo "=== 🤖 AI代码助手平台管理 ==="echo "📍 项目目录: $PROJECT_DIR"echo ""# 获取服务器IPSERVER_IP=$(hostname -I | awk '{print $1}')# 检查服务状态if docker compose ps 2>/dev/null | grep -q "Up"; thenecho "✅ 服务状态: 运行中"echo "🌐 访问地址: http://${SERVER_IP}:3000"elseecho "❌ 服务状态: 停止"fiecho ""echo "📊 资源使用:"echo "   内存: $(free -h | grep Mem | awk '{print $3 "/" $2}')"echo "   磁盘: $(df -h . | tail -1 | awk '{print $4}') 可用"
}case "$1" instatus)show_status;;start)echo "🚀 启动AI代码助手服务..."docker compose up -dsleep 3show_status;;stop)echo "🛑 停止服务..."docker compose downecho "✅ 服务已停止";;restart)echo "🔄 重启服务..."docker compose restartsleep 2show_status;;logs)echo "📋 查看实时日志 (Ctrl+C退出)..."docker compose logs -f;;update)echo "📦 更新服务..."docker compose downdocker compose pulldocker compose up -decho "✅ 服务更新完成";;monitor)echo "📊 实时监控 (Ctrl+C退出)..."watch -n 5 'echo "=== AI平台实时监控 ==="echo "服务状态:"docker compose ps --services 2>/dev/null | while read service; dostatus=$(docker compose ps $service | tail -1 | awk "{print \$4}")echo "  $service: $status"doneecho ""echo "资源使用:"echo "  内存: $(free -h | grep Mem | awk "{print \$3}/\$2}")echo "  连接: $(netstat -an | grep :3000 | grep ESTABLISHED | wc -l) 个活跃用户"';;backup)echo "💾 备份数据..."BACKUP_FILE="ai-backup-$(date +%Y%m%d-%H%M).tar.gz"tar -czf "../$BACKUP_FILE" data/echo "✅ 备份完成: $BACKUP_FILE";;clean)echo "🧹 清理系统..."docker system prune -fecho "✅ 系统清理完成";;help|--help|-h)echo "🤖 AI代码助手平台管理工具"echo ""echo "用法: ai-manager [命令]"echo ""echo "可用命令:"echo "  status    查看服务状态"echo "  start     启动服务"echo "  stop      停止服务"  echo "  restart   重启服务"echo "  logs      查看实时日志"echo "  update    更新服务版本"echo "  monitor   实时监控"echo "  backup    备份用户数据"echo "  clean     清理系统缓存"echo "  help      显示此帮助"echo ""echo "示例:"echo "  ai-manager status    # 查看状态"echo "  ai-manager logs      # 查看日志"echo "  ai-manager restart   # 重启服务";;*)if [ -z "$1" ]; thenshow_statuselseecho "❌ 未知命令: $1"echo "使用 'ai-manager help' 查看可用命令"fi;;
esac
EOF

设置执行权限

chmod +x ai-manager.sh

📋 故障排除

如果遇到问题:​
查看详细错误
docker compose logs --tail=30# 重启服务
docker compose restart# 检查Ollama连接
curl http://localhost:11434/api/tags#检查ollama配置文件
cat /etc/systemd/system/ollama.service.d/limit.conf
修改后生效
sudo systemctl daemon-reload
sudo systemctl restart ollamasystemctl status  ollama

6. 折腾了一轮,发现7b的模型我的机器根本带不动!

跟踪耗时

sudo strace -e trace=file,openat,read,write,mmap -T ollama run qwen:4b "test" 2>&1 | grep -v ENOENT | awk '{if ($NF > 0.1) print}'

如果不是独显,性能会大幅度下降,将cpu调整到性能模式,会有所提升,但是依旧是十几秒

great@great-PC:~/zhangyuling_ai_ollama_7b/lib/ollama$ time ollama run  --verbose   llama3.2:1b  "test"
Can I help you with something else?total duration:       11.854634385s
load duration:        99.137755ms
prompt eval count:    26 token(s)
prompt eval duration: 1.354319757s
prompt eval rate:     19.20 tokens/s
eval count:           9 token(s)
eval duration:        10.40069241s
eval rate:            0.87 tokens/sreal    0m11.919s
user    0m0.014s
sys     0m0.007s
http://www.dtcms.com/a/564937.html

相关文章:

  • 张家界市建设工程造价管理站网站好看的ui界面
  • 【WEB应用安全】XSS攻击实验全流程实战!从漏洞检测到Cookie窃取(附Payload解析+避坑指南)
  • Linux系统启动流程深度解析:从BIOS到用户空间的全链路指南
  • AI编程工具TRAE解决日常问题之SQLite数据复制
  • 百度网盘下载速度被限制怎么办?百度网盘如何解除限速下载方法
  • 多协议网关架构
  • 深入级联不稳定性:从 Lipschitz 连续性视角探讨图像恢复与目标检测的协同作用
  • 如何实现html显示WebRTC视频监控流
  • 长沙网站设计服务商wordpress和vue
  • DeepSeek-OCR 深度解析
  • [手机AI开发sdk] Aid_code IDE | PC浏览器同步访问
  • 视觉语言模型(VLM)深度解析:如何用它来处理文档
  • 空载长线电容效应
  • Text Grab,一款OCR 截图文字识别工具
  • 网站建设与管理教学方案网站的技术解决方案
  • 从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
  • HTMLCollection 对象
  • CANN算子开发实战:Batch Normalization高性能实现指南
  • 【Delphi】再谈给EXE文件动态添加数据(附加大数据 2G)
  • 1、Python-内置函数、Pass空语句
  • 为什么 Transformer 使用 LayerNorm 而不是 BatchNorm?
  • 昇腾 NPU 实战:Gemma 2 模型部署、多维度评测与性能优化全流程解析
  • 使用Visual Studio中的数据断点快速定位内存越界问题的实战案例分享
  • 做网站的大创结项项目建设表态发言稿
  • 家政类网站开发成本青岛最新疫苗接种
  • B站点击埋点数据分析
  • 用 PyTorch 训练 NestedUNet 分割细胞核
  • [7-01-02].第10节:开发应用 - 配置Kafka中消费消息策略
  • 学算法不再卡壳,Hello-Algo 让学习有画面感,cpolar远程访问更添便利
  • openEuler安装docker及其配置