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必需的基础模型

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

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

bash 复制代码
/root/.ollama/models

查找命令

bash 复制代码
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文件,使用桥接网络

yaml 复制代码
version: '3.8'

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: zyl-ai-webui
    restart: unless-stopped
    ports:
      - "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-v2
      
    environment:
      # 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: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

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

yaml 复制代码
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: zyl-ai-webui
    restart: unless-stopped
    
    # 使用主机网络模式
    network_mode: "host"
    
    volumes:
      - ./data:/app/backend/data
    
    environment:
      - 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: 30s
      timeout: 15s
      retries: 3
      start_period: 120s
  1. 最终验证
    great@great-PC:~/zhangyuling_ai_ollama_7b/webui$ ./final-check.sh
powershell 复制代码
=== 🎉 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 info
 will 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等)
  • ✅ 对话历史记录
  • ✅ 用户管理功能

🛠️ 管理命令

yaml 复制代码
# 查看状态
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

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

yaml 复制代码
cat > ai-manager.sh << 'EOF'
#!/bin/bash

# 定义项目目录
PROJECT_DIR="/home/great/zhangyuling_ai_ollama_7b/webui"

# 检查项目目录是否存在
if [ ! -d "$PROJECT_DIR" ]; then
    echo "❌ 错误:项目目录不存在: $PROJECT_DIR"
    exit 1
fi

# 切换到项目目录
cd "$PROJECT_DIR"

show_status() {
    echo "=== 🤖 AI代码助手平台管理 ==="
    echo "📍 项目目录: $PROJECT_DIR"
    echo ""
    
    # 获取服务器IP
    SERVER_IP=$(hostname -I | awk '{print $1}')
    
    # 检查服务状态
    if docker compose ps 2>/dev/null | grep -q "Up"; then
        echo "✅ 服务状态: 运行中"
        echo "🌐 访问地址: http://${SERVER_IP}:3000"
    else
        echo "❌ 服务状态: 停止"
    fi
    
    echo ""
    echo "📊 资源使用:"
    echo "   内存: $(free -h | grep Mem | awk '{print $3 "/" $2}')"
    echo "   磁盘: $(df -h . | tail -1 | awk '{print $4}') 可用"
}

case "$1" in
    status)
        show_status
        ;;
    start)
        echo "🚀 启动AI代码助手服务..."
        docker compose up -d
        sleep 3
        show_status
        ;;
    stop)
        echo "🛑 停止服务..."
        docker compose down
        echo "✅ 服务已停止"
        ;;
    restart)
        echo "🔄 重启服务..."
        docker compose restart
        sleep 2
        show_status
        ;;
    logs)
        echo "📋 查看实时日志 (Ctrl+C退出)..."
        docker compose logs -f
        ;;
    update)
        echo "📦 更新服务..."
        docker compose down
        docker compose pull
        docker compose up -d
        echo "✅ 服务更新完成"
        ;;
    monitor)
        echo "📊 实时监控 (Ctrl+C退出)..."
        watch -n 5 '
            echo "=== AI平台实时监控 ==="
            echo "服务状态:"
            docker compose ps --services 2>/dev/null | while read service; do
                status=$(docker compose ps $service | tail -1 | awk "{print \$4}")
                echo "  $service: $status"
            done
            echo ""
            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 -f
        echo "✅ 系统清理完成"
        ;;
    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" ]; then
            show_status
        else
            echo "❌ 未知命令: $1"
            echo "使用 'ai-manager help' 查看可用命令"
        fi
        ;;
esac
EOF

设置执行权限

yaml 复制代码
chmod +x ai-manager.sh

📋 故障排除

powershell 复制代码
如果遇到问题:​
查看详细错误
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 ollama
 systemctl status  ollama

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

跟踪耗时

powershell 复制代码
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调整到性能模式,会有所提升,但是依旧是十几秒

powershell 复制代码
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/s

real    0m11.919s
user    0m0.014s
sys     0m0.007s
相关推荐
喜欢吃豆2 天前
掌握本地化大语言模型部署:llama.cpp 工作流与 GGUF 转换内核全面技术指南
人工智能·语言模型·架构·大模型·llama·llama.cpp·gguf
illuspas4 天前
Ubuntu 24.04下编译支持ROCm加速的llama.cpp
linux·ubuntu·llama
缘友一世6 天前
LLama3架构原理浅浅学学
人工智能·自然语言处理·nlp·transformer·llama
我们没有完整的家7 天前
批量吞吐量实测:Llama-2-7b 昇腾 NPU 六大场景数据报告
llama
asfdsfgas7 天前
从加载到推理:Llama-2-7b 昇腾 NPU 全流程性能基准
人工智能·llama
asdfsdgss7 天前
FP16 vs INT8:Llama-2-7b 昇腾 NPU 精度性能基准报告
llama
猿代码_xiao7 天前
大模型微调完整步骤( LLama-Factory)
人工智能·深度学习·自然语言处理·chatgpt·llama·集成学习
wei_shuo9 天前
Llama-2-7b 昇腾 NPU 测评总结:核心性能数据、场景适配建议与硬件选型参考
大模型·llama·昇腾
凯子坚持 c9 天前
Llama-2-7b在昇腾NPU上的六大核心场景性能基准报告
java·开发语言·llama