LInux+ollama的并发数,prompt和显存占用

使用qwq模型进行测试,模型参数大小19GB

本机4090*8,有四张是其他模型占用,也就是4张空闲,默认参数qwq显存占用23GB

1.主要针对num_ctx和OLLAMA_NUM_PARALLEL两个参数进行调整

[Service]
Environment="OLLAMA_NUM_PARALLEL=4" # 并行数量,默认是1或者4
Environment="OLLAMA_KEEP_ALIVE=100h" # 运行模型保留时长,ollama有模型自动卸载功能,默认是5m,5分钟,初次的模型启动时间较长,7-8秒

1.1OLLAMA_NUM_PARALLEL的修改方式

把Environment="OLLAMA_NUM_PARALLEL=4"复制到指定位置,保存,退出,重启ollama

# 进入文件编辑,加入指定参数
sudo vim /etc/systemd/system/ollama.service

重启ollama

sudo systemctl daemon-reload && systemctl restart ollama

1.2num_ctx的修改方式

1.通过如下方式进行请求

curl http://192.168.80.41:11434/api/generate -d '{
  "model": "qwq",
  "prompt": "你认为9.11,9.2,9.9三者的大小顺序",
  "stream": true,
  "options": {"num_ctx": 12288}
}'

2.通过重写modelfile文件,然后注册模型的方式实现

#查看模型的信息
ollama show qwq --modelfile

#然后把--modelfile文件中的内容全部复制下来
vim modelfile_max

# 创建模型
ollama create qwq_max -f ./modelfile_max

2.测试qwq的高并发性能

2.1主要指标

response_time的时间计算假定为,从发出请求到收到信息的时间差

  
#请求总时间
total_duration: 38.990 s
#模型加载时间
load_duration: 37.943 ms
#prompt总token数
prompt_eval_count: 45 token(s)
#prompt处理时间
prompt_eval_duration: 118.000 ms
#prompt处理速度
prompt_eval_rate: 381.360 tokens/s
#回答内容总token
eval_count: 996 token(s)
#回答总耗时
eval_duration: 38.830 s
#回答速度
eval_rate: 25.650 tokens/s
#发出请求到收到第一个token时间
response_time: 0.160 s

2.2测试代码

通过使用subprocess.run(['ollama', 'run', 'qwq', '--verbose'], input=question, text=True, capture_output=True)命令获取到返回信息,主要是获取红色框中的数据

从返回的信息中通过使用正则表达式的方式获取模型的性能指标

直接上代码

需要新建ollama_parallel_log文件夹,来报错,异常结果的返回值,主要是查看红色框中的数据是否正常

import subprocess
import threading
import time
import re
import os
import tiktoken

# 并发线程数
thread_count = 4
# 存储每个线程的性能指标
llm_perf_metrics = []
# 存储每个线程的回答
llm_answers = []
# 线程锁
lock = threading.Lock()

question = "请以某AI技术公司近期发布新一代自动驾驶系统为例,编写一篇新闻稿,请使用中文。优化内容,重点描述这款驾驶系统如何利用深度学习等AI技术提高道路安全性,公司CEO表示,他们的目标是通过AI技术减少交通事故并减少碳排放。"
#  加载对应的 tokenizer
# 这里假设使用的模型是一个类似 OpenAI 的模型,你可能需要根据实际情况调整
encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")
# 统计 token 数
token_count = len(encoding.encode(question))
print(f"Prompt 的 token 总数: {token_count}")


def run_ollama():
    try:
        start_time = time.time()
        # 调用ollama命令
        result = subprocess.run(['ollama', 'run', 'qwq', '--verbose'], input=question, text=True, capture_output=True)
        end_time = time.time()

        # 提取回答内容
        output = result.stdout
        answer_pattern = r'
<think>好的,用户现在遇到了在Open WebUI中使用Ollama时响应速度慢的问题。我需要帮他们分析可能的原因,并提供解决方案。首先,我得回想一下之前用户提到的错误,虽然这次的问题不同,但可能有些相关的因素。 首先,用户之前遇到过模型下载的问题,所以网络问题可能仍然存在。不过现在的问题是关于响应速度,可能涉及不同的方面。我需要从几个方面考虑:硬件资源、模型大小、配置设置、网络延迟、缓存、并发请求等。 硬件资源方面,Ollama需要足够的CPU内存,特别是大模型。如果用户运行在本地,可能硬件不足,导致处理速度慢。需要建议他们检查资源使用情况,比如任务管理器或htop,看看是否有瓶颈。 模型大小也是一个关键因素。比如,7B参数的模型可能需要更多资源,如果用户用的是更大的如13B或70B,速度会更慢。可能需要建议他们换更小的模型,或者检查是否误用了大模型。 配置设置方面,Ollama的启动参数是否正确?比如是否设置了正确的GPU层数,如果用户有NVIDIA GPU,启用GPU加速会提升速度。需要提醒他们检查Ollama的启动命令,比如使用--nvidia参数,或者调整num_ctx、num_thread等参数。 网络延迟的话,如果是本地部署,可能问题不大,但如果是远程服务器,延迟可能会影响速度。需要确认OllamaOpen WebUI是否在同一台机器上运行,或者是否存在网络问题。 缓存方面,Ollama第一次加载模型时会比较慢,后续会快一些。如果用户频繁切换模型,或者缓存被清除,可能需要重新加载模型,导致延迟。建议他们保持模型常驻内存,或者调整ollama serve的设置。 并发请求方面,如果同时处理多个请求,资源会被分摊,导致每个响应变慢。需要建议他们限制并发数,或者在Open WebUI中调整参数。 另外,日志分析也很重要。检查Ollama的日志,看看是否有错误或警告信息,比如显存不足、模型加载问题等。用户可以通过ollama serve命令查看实时日志。 还有,Open WebUI的配置是否正确?比如是否正确指向本地Ollama实例,有没有配置超时时间?可能需要调整超时设置,或者启用流式输出以改善用户体验。 最后,如果用户使用的是旧版软件,升级OllamaOpen WebUI可能会解决一些性能问题。同时,如果用户没有GPU,只能依赖CPU的话,响应速度自然较慢,可能需要调整模型选择或升级硬件。 总结下来,我需要将这些可能的原因对应的解决方案分点列出,帮助用户一步步排查。同时,给出具体的命令配置示例,让他们能够直接操作。最后提醒用户如果问题依旧,可以提供更多细节以便进一步诊断。</think>以下是关于 **Open WebUI 中 Ollama 响应速度慢** 的详细分析解决方案指南: --- ### **一、常见原因分析** 1. **硬件资源不足** - CPU/内存瓶颈:Ollama 运行大模型时对计算资源要求较高 - GPU 未启用:未正确配置 GPU 加速(如 NVIDIA CUDA) - 显存不足:模型参数超过 GPU 显存容量,触发内存交换 2. **模型参数过大** - 例如 `llama2-7b` 需 8GB+ 显存,`llama2-13b` 需 16GB+ 显存 - 使用量化版本(如 `q4_0`)可降低资源需求 3. **网络延迟** - Open WebUI 与 Ollama 服务端之间的通信延迟 - 跨设备远程调用(如 Ollama 部署在远程服务器) 4. **配置不当** - Ollama 未启用 GPU 加速 - 线程数或上下文长度 (`num_ctx`) 设置不合理 - 未启用批处理优化 --- ### **二、优化方案** #### **1. 硬件与基础环境优化** - **GPU 加速配置**(NVIDIA 显卡用户): ```bash # 启动 Ollama 时指定 GPU 层数(如 35 层) ollama serve --nvidia --num-gpu-layers 35 ``` - 查看支持的 GPU 型号:`nvidia-smi` - 确认 CUDA 版本:`nvcc --version` - **内存优化**: - 关闭无关进程释放内存 - 使用 `ollama ps` 检查模型内存占用 #### **2. 模型选择与加载优化** - **优先使用量化模型**: ```bash # 下载 4-bit 量化版本(显存需求降低 40-50%) ollama pull llama2:7b-q4_0 ``` - **保持模型常驻内存**: ```bash # 启动时预加载常用模型 ollama run llama2:7b-q4_0 ``` #### **3. Ollama 服务端配置** - **调整启动参数**: ```bash # 示例优化配置(根据硬件调整数值) ollama serve \ --num-threads 8 \ # CPU 线程数 --num-ctx 2048 \ # 上下文长度 --num-batch 512 # 批处理大小 ``` - **配置文件路径**(Linux/Mac): ```bash ~/.ollama/config.json ``` #### **4. Open WebUI 客户端优化** - **启用流式响应**: ```yaml # 修改 Open WebUI 配置(docker-compose.yml) environment: - OLLAMA_API_BASE_URL=http://localhost:11434 - STREAM_RESPONSES=true # 减少等待完整响应的延迟 ``` - **调整超时设置**: ```python # 在自定义前端代码中增加超时时间 fetch('/api/generate', { timeout: 300_000 // 300秒超时 }) ``` #### **5. 网络优化** - **本地化部署**: ```bash # 确保 Open WebUI 与 Ollama 在同一设备运行 curl http://localhost:11434 # 测试本地连接 ``` - **容器网络配置**(Docker 用户): ```yaml # docker-compose.yml 示例 services: open-webui: network_mode: host # 使用主机网络模式 ``` #### **6. 高级优化技巧** - **使用 vLLM 加速引擎**: ```bash # 安装 vLLM 后端替代默认实现 pip install vLLM ollama serve --backend vllm ``` - **监控与诊断工具**: ```bash # 实时资源监控 watch -n 1 "nvidia-smi && free -h" ``` --- ### **三、性能对比参考** | 配置 | 7B 模型响应时间 | 13B 模型响应时间 | |---------|----------------|------------------| | CPU 模式 (i7-12700K) | 12-15秒/词 | 25-30秒/词 | | GPU 模式 (RTX 4090) | 0.8-1.2秒/词 | 1.5-2秒/词 | | 量化模型 (q4_0) | 速度提升 30% | 显存占用降低 40% | --- ### **四、故障排查步骤** 1. 检查基础服务状态: ```bash systemctl status ollama # Linux 服务状态 docker logs open-webui # 容器日志 ``` 2. 压力测试 Ollama 原生接口: ```bash curl http://localhost:11434/api/generate -d '{ "model": "llama2", "prompt": "你好", "stream": false }' ``` 3. 查看 GPU 利用率: ```bash watch -n 0.5 nvidia-smi ``` --- 如果经过上述优化仍存在性能问题,建议提供以下信息以便进一步诊断: 1. `ollama --version` 2. 硬件配置详情(CPU/GPU/内存) 3. 完整的 `docker-compose.yml` 配置(如使用容器) 4. 出现延迟时的系统资源监控截图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值