vLLmOllama推理部署以及压测对比

news/2025/10/20 10:35:42/文章来源:https://www.cnblogs.com/zhouyun-yx/p/18902471

前言

  这篇主要讨论不同推理软件平台的安装部署,之间的差异,以及压测指标的对比。

环境

  使用的是linux环境,Ubuntu系统

软件安装部署

  1、vLLm

  • conda创建虚拟环境,这里需要用到conda,具体的安装方法可以看之前的livaTalking部署博客里面有,liveTalking部署
    conda create -n deepseek python=3.10 -y
    conda activate deepseek
    pip install --upgrade pip
  • 安装vllm,并安装flash-attn优化插件优化性能

    # 安装支持T4特性的vLLM版本
    pip install vllm# 安装FlashAttention优化组件以提升性能
    pip install flash-attn --no-build-isolation

    这里flash-attn由于网络原因可能安装不了,如果安装不了的话,可以忽略安装

  • 使用魔搭下载模型,也可以在浏览器下载后传到服务器上

    # 安装魔搭
    pip install modelscope
    #使用魔搭下载模型,这里具体的模型名称可以去魔搭上找,看自己的需求要下什么模型 modelscope download
    --model 【模型名称】
  • 启动服务
    vllm serve "/home/deepseek-r1-14b" --task generate 
    --max-model-len 4096   
    --host 0.0.0.0 --port 8102
    --gpu-memory-utilization 0.8
    --swap-space 12
    --max-num-seqs 10
    --dtype bfloat16
    --served-model-name "DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16"
    --enable-reasoning --reasoning-parser deepseek_r1

    说明

    task:模型的任务类型,
    max-model-len:最大上下文长度
    gpu-memory-utilization:GPU显存阈值,0-1之间,以10G显存为例,设置0.8表示使用8G显存来启动模型,如果启动过程中超出大小将启动失败
    swap-space:GPU于CPU的交换空间大小,用于显存不足的情况,模式已经废弃
    max-num-seqs:最大并发数
    served-model-name:启动的服务模型名称
    enable-reasoning:是否启用模型的 reasoning_content。如果启用,模型将能够生成推理内容。
    reasoning-parser:可选值只有一个deepseek_r1,如果设置了enable-reasoning,则这个是必须的,用于将推理响应解析成openAI格式的,不然返回内容会显示异常
  • 实时监控GPU使用情况
    # 显存使用监控
    watch -n 1 nvidia-smi

 

  2、ollama

  • 下载Ollama离线安装包

    浏览器访问https://github.com/ollama/ollama/releases/,目前Ollama最新版本在v0.3.13,按照自己的需求选择版本,我这里选择的是v0.3.6的linux版本

    image

  • 下载完成将资源包拷贝到linux服务器上并改名为ollama(这里可以改也可以不改,改了后面操作方便点)
  • 给资源包赋权限,让其可执行(/opt/ollama是目录,最后一个ollama是改过名字的资源包名称
    sudo chmod +x /opt/ollama/ollama
  • 创建ollama用户和用户组
    #创建用户
    sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
    #添加用户组
    sudo usermod -a -G ollama $(whoami)
  • 创建服务文件
    vim /etc/systemd/system/ollama.service#文件内容如下:[Unit]
    Description=Ollama Service
    After=network-online.target[Service]
    Environment="OLLAMA_HOST=0.0.0.0"
    ExecStart=/opt/ollama/ollama serve
    User=ollama
    Group=ollama
    Restart=always
    RestartSec=3[Install]
    WantedBy=default.target保存之后执行sudo systemctl daemon-reload重新加载服务文件
  • 启动服务,查看状态,停止服务
    启动:systemctl start ollama
    状态:systemctl status ollama
    停止:systemctl stop ollama

     

  • 添加软链接

    由于后面添加离线大模型需要使用ollama命令,方便后面操作所以将ollama运行文件添加软链接

    ln -s /opt/ollama/ollama  /usr/bin/ollama
    source /etc/profile
  • 下载大模型文件
    可以参照上面使用魔搭下载,模型下载gguf格式的
  • 准备Modelfile文件
    vim qwen1_5-0_5b.Modelfil#内容如下FROM ./qwen1_5-0_5b-chat-q4_k_m.ggufTEMPLATE """{{ if .System }}<|im_start|>system
    {{ .System }}<|im_end|>{{ end }}<|im_start|>user
    {{ .Prompt }}<|im_end|>
    <|im_start|>assistant
    """
    
    PARAMETER stop "<|im_start|>"
    PARAMETER stop "<|im_end|>"

    不同模型的Modelfile内容不同,具体可以参考Ollama官网

  • 创建模型

    命令格式如下

    ollama create <模型名称> -f <模型对应的Modelfile文件>

    ollama create qwen1.5:0.5b -f ./qwen1_5-0_5b.Modelfil

    ollama list 查看有没有创建成功

    image

    已成功添加大模型

    image

    ollama run qwen1.5:0.5b 运行模型看看运行效果,可以实现ai问答。

     

    Ollama显存优化相关配置:

    OLLAMA_NUM_GPU

    指定 Ollama 启用的 GPU 数量,需与 CUDA_VISIBLE_DEVICES 中设置的 GPU ID 数量一致‌3

    如只有一块显卡:export OLLAMA_NUM_GPU=1

    CUDA_VISIBLE_DEVICES

    指定可见的 GPU 设备 ID(通过 nvidia-smi 查询),需与 OLLAMA_NUM_GPU 的值匹配‌。

    如:export CUDA_VISIBLE_DEVICES=0

    OLLAMA_GPU_LAYER

    强制使用 CUDA 分配 GPU 资源。

    如:export OLLAMA_GPU_LAYER=cuda

    OLLAMA_SCHED_SPREAD

    启用GPU负载均衡策略。

    如:export OLLAMA_SCHED_SPREAD=1

    OLLAMA_MAX_LOADED_MODELS

    内存中可同时存在的最大模型数量。

    如:export OLLAMA_MAX_LOADED_MODELS=2

    OLLAMA_KEEP_ALIVE

    模型在内存中存在的时间,可以设置较长时间可以使模型更好的响应服务,避免重新加载模型所需的时间,如果设置-1表示模型永久驻留在内存中。

    如:export OLLAMA_KEEP_ALIVE=-1

    OLLAMA_NUM_PARALLEL

    模型多并发设置,默认值是1,单线程串行处理请求,可以设置大一点,会受资源影响,多并发时响应时间增加。

    如:export OLLAMA_NUM_PARALLEL=3

    完整配置如下:

    # GPU 配置
    export CUDA_VISIBLE_DEVICES=0
    export OLLAMA_NUM_GPU=1
    export OLLAMA_GPU_LAYER=cuda
    export OLLAMA_SCHED_SPREAD=1# 其他优化
    export OLLAMA_MAX_LOADED_MODELS=2  
    export OLLAMA_KEEP_ALIVE=-1  
    export OLLAMA_NUM_PARALLEL=3 

     

压测指标

  • 安装压测监控软件locust
    pip install locust
  • 编写压测脚本locustfile.py
    # locustfile.py 示例
    from locust import HttpUser, taskclass VLLMUser(HttpUser):@taskdef generate_text(self):self.client.post("/v1/completions", json={"model": "deepseek-ai/DeepSeek-R1-Distill-Qwen-32B","prompt": "人工智能的未来发展将...","max_tokens": 256})
  • 压测启动命令

    locust -f locustfile.py --headless -u 5 -r 1 --run-time 30s###参数说明
    -f 指定测试脚本
    --headless 立即运行,不使用web界面
    -u 最大并发用户数
    -r 用户孵化率,每秒产生用户数
    -run-time 运行时间

     

  • vLLm

服务器情况:A10 24G显存 ,16核CPU 内存60G

模型:deepseek-r1-Distill-qwen-14b 8位量化版

模型大小:15.4G

最高并发数:10

最大上下文长度:4096

启动完成后GPU显存占用:20G

启动命令:vllm serve "/home/deepseek-r1-14b" --task generate --max-model-len 4096 --host 0.0.0.0 --port 8102 --gpu-memory-utilization 0.8 --swap-space 12 --max-num-seqs 10 --dtype bfloat16 --served-model-name "DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16" --enable-reasoning --reasoning-parser deepseek_r1

image

locust压测情况

最高并发数10   用户孵化率2   运行时间:60s

image

压测结果

image

image

GPU显存实时监测情况

image

调整vLLm最大并发数为20

vllm serve "/home/deepseek-r1-14b" --task generate --max-model-len 4096 --host 0.0.0.0 --port 8102 --gpu-memory-utilization 0.8 --swap-space 12 --max-num-seqs 20 --dtype bfloat16 --served-model-name "DeepSeek-R1-Distill-Qwen-14B-Int8-W8A16" --enable-reasoning --reasoning-parser deepseek_r1

image

显存使用率相较之前的没有较大增加,表示在增加并发数的情况下,不会过分占用显存资源

 

locust最大并发数20 用户孵化率5 运行时间 60s

image

image

显存使用情况

image

 

总结

1、vllm启动成功之后显存基本不会有太大的波动,在高并发下只有轻微波动,但是算力基本的满负荷运行的,算力的高低也影响了推理生成的速度。

2、locust压测参数时间固定之后,总的请求数不会根据最大并发和用户孵化率有较大变动,总的请求数应该和vLLm最大并发设置有关。

3、locust压测说明:总用户数是限制生成的最大用户,用户孵化率是每秒生成用户数,生成用户执行完任务后是不会注销用户的,按最大用户数10,孵化率为2,运行时间60s,在第5秒的时候就达到最大用户数10,之后是不会再生成用户了,由于压测脚本没有设置wait_time,默认为0,由于locust的任务循环机制,运行完一次任务就立刻再次运行任务,大致可以推算出总请求数。

 

显存和max-model-len和max-num-seqs有关

max-model-len:4096

max-num-seqs(10)

image

max-num-seqs(20)

image

 

 

max-model-len:5120

max-num-seqs(10)

image

max-num-seqs(20)

image

 

max-model-len 设置8192时,如果调整GPU显存使用阈值gpu-memory-utilization低于0.75,会出现缓存空间分配不足的情况,如果设置大于等于0.75,这会出现上下文空间不足。所以显存使用情况应该是由vLLm多个部分决定的,模型大小是一部分,缓存空间还有上下文空间都需要,所以在设置vLLm启动参数时需要根据实际显存大小调整。

 

A10显卡 设置max-model-len=8192,gpu-memory-utilization=0.85可以正常启动,临界值差不多就在这个区间上下。显存使用情况如下:

image

 

vLLm不支持CPU推理,只支持GPU推理,所以当选择deepseek-r1-14b完整版,而不是量化版,由于光模型大小就将近30G,所以一张A10不足以支持,刚已启动就提示内存泄漏。所以vLLm部署14b完整版,个人建议在模型大小的基础上再有个8~10G的显存空间,比如3张T4,或者2张A10。

maxKB接入vLLm实际运行效果响应迅速,几乎是瞬间响应。

 

Ollama

服务器情况:A10 24G显存 ,8核CPU 内存30G

模型:deepseek-r1-Distill-qwen-14b-q8_0

模型大小:16G

最高并发数:10

最大上下文长度:默认的2048

启动完成后GPU显存占用:19.6G

image

 

GPU占比100%,完全是由GPU推理

image

 

locust最大并发数10 用户孵化率2 运行时间 60s

image

image

 

GPU显存基本保持在19.61G,较刚启动时变动不大,算力使用88%左右。

image

locust最大并发数20 用户孵化率5 运行时间 60s

image

image

GPU使用情况较10个并发基本没有多大的变化,应该是由于ollama配置参数限制并发10,所以就算locust压测设置再多并发请求,都处于等待状态。

image

 

模型:deepseek-r1:14b-qwen-distill-fp16

模型大小:30G

启动完成后GPU显存占用:20.9G

image

 

CPU和GPU使用占比情况:

image

 

locust最大并发数10 用户孵化率2 运行时间 60s

image

 

等到60s运行时间结束也没有成功处理完成的请求,GPU使用情况如下,所以20并发的也没必要测了。

image

通过使用命令行发起对话,发现推理生成过程很慢,字是一个个蹦出来的

image

 

总结

vLLm

优点:对多并发场景适配性更好,采用任务调度优化以及显存优化策略,对并发请求响应更迅速,而且完全使用GPU推理,速度很快。

缺点:只能使用GPU推理,不支持CPU&GPU混合推理,所以完全受限于GPU显存大小。

 

ollama

优点:能支持纯GPU、纯CPU、CPU&GPU混合推理,对于显存能完全支持模型的情况能完全使用GPU的性能,对于显存不足以支持模型的情况可以使用混合推理,将推理层分步在CPU和GPU上。

缺点:对于多并发响应时间过长,对于实际生产需求不是很适合,且虽然支持混合推理,但是由于混合推理使用CPU,所以GPU的算力不能完全调用,且推理效率瓶颈受限于CPU,导致推理速度慢。

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/940973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年10月高端奢侈家电品牌推荐排行榜:五大品牌综合对比与选购指南

一、引言 高端奢侈家电市场近年来呈现稳定增长态势,目标用户主要为追求生活品质的高净值家庭、高端房地产开发商及室内设计师群体。这类用户在选购过程中不仅关注产品性能与设计美学,更重视品牌文化传承、技术独创性…

A. Vasya and Petyas Game

https://codeforces.com/problemset/problem/576/A 题意:给定一个数x∈[1, n],然后猜测一个序列,我们可以在上交序列后,得知序列中的每个数y是否可以整除x,找出这个最短序列,可以让我们知道x是多少。 思路:这个…

[nvidia docker]

nvidia-smi可以执行; docker好的,看到你的 nvidia-smi 输出非常清晰,这说明 WSL2 已经能够正确识别和使用你的 NVIDIA GPU 了。 这是一个非常好的信号!问题 100% 出在 Docker 的配置上。Docker 守护进程还不知道如…

vite插件——vite-plugin-inspect

安装 太高版本的npm会安装失败,报错:npm error Cannot read properties of null (reading matches) npm uninstall -g npm npm install -g npm@10.8.3npm install -D vite-plugin-inspect引用 在vite.config.js文件中…

ceph管理后台dashboard部署

环境:Os:Centos 7Ceph:14.2.22(N版)[root@master kuboard]# ceph version ceph version 14.2.22 (ca74598065096e6fcbd8433c8779a2be0c889351) nautilus (stable) 1.准备yum镜像[root@master yum.repos.d]# more epel…

CRMEB标准版订单核销的业务逻辑

订单核销,使用核销码或立即核销进行核销 核销订单:用户购买商品时选择到店自提的订单。到店后需要出示核销码以供核销。 1、收入核销码核销 订单—>订单管理—>立即核销在订单列表页,点击左上角订单核销按钮,…

内外网文件摆渡系统有哪些?一文读懂主流方案与选型方向

在数字化时代,企业数据流转需求日益频繁,但“内网安全隔离”与“外网数据交互”的矛盾始终存在:内网作为核心业务数据的存储载体,需严格隔绝外部网络攻击风险;而外网则承担着与客户、合作伙伴传递文件、同步信息的…

mysql 更新默认时间

勾选 根据当前时间戳更新 CURRENT_TIMESTAMP

autohotkey 控制输入法

autohotkey 控制输入法getime() {HKL := DllCall("GetKeyboardLayout", "UInt", DllCall("GetWindowThreadProcessId", "UInt", WinExist("A"), "UInt",…

【最新推荐】分享十大常用又靠谱的文件摆渡系统

文件摆渡系统多种多样,今天就分享十大企业常用,并且很靠谱的文件摆渡系统,有免费的有收费的,有传统的协议或者工具类的,也有专业级的,有硬件类的,也有软件类的。企业可按需参考选择。 1、Ftrans网络安全隔离与信…

C语言实现LDPC码译码功能

基于C语言的LDPC码译码功能实现,包含位翻转算法和置信传播算法两种核心译码方法一、系统架构设计 1. 数据结构定义 #define MAX_ITER 100 // 最大迭代次数 #define N 1024 // 码长 #define K 512 …

关系型数据库的基本理论

关系型数据库的基本理论 数据库核心概念 数据库(DB) 数据库是按数据结构存储和管理数据的计算机软件系统,核心作用包括:存储大量数据,提供便捷的检索与访问能力。 维护数据的一致性与完整性,避免数据冲突或错误。…

[NOIP 2012 提高组] 开车旅行 的AC代码

传送门 #include<bits/stdc++.h> using namespace std; #define int long longconst int N=1e5+10;int n,h[N],f[N][18],sa[N][18],sb[N][18],A[N],B[N]; set<int>s; map<int,int>mp;main(void){ios…

Voice Chat: Resolving Lag and Stuttering with a Jitter Buffer

Voice Chat: Resolving Lag and Stuttering with a Jitter Buffer The problem you described—delays between words like "We should --(delay 1s)-- have dinner"—is caused by jitter, the uneven arri…

2025 年报警器经销商最新推荐榜单:全面剖析海湾、青鸟等品牌服务商优势,为您筛选优质可靠合作伙伴燃气 / 太阳能 / 交通道路报警器推荐

引言当前,安全防护需求持续攀升,报警器作为守护生命财产安全的关键设备,市场需求日益旺盛。但报警器经销商市场乱象频发,部分商家售卖的产品存在感应不精准、误报率高、稳定性差等问题,难以在危险来临时发挥预警作…

Android Studio Archive | Android Studio 归档下载

打开魔法访问 访问 https://developer.android.com/studio/archive 右上角语言选英文(不然协议页面加载不出来)同意协议后选择归档版本进行下载。Installers ChromeOS: android-studio-2024.1.2.13-cros.deb (992.2 …

解决IDEA引入依赖报错

解决IDEA引入依赖报错1、进入pom.xml右击"Reload project "后再右击"Generate Sources and Update Folders" ; 2、mvn clean install -U; 3、删除maven本地仓库文件,再重复操作2。 4、在maven窗…

线性DP,区间DP

线性DP 就是在线性数据结构上用DP,简称线性DP。 说人话就是用线性数据结构来优化DP。 一般用单调队列或单调栈优化。 单调队列主要用于维护两端指针单调不减的区间最值,而单调栈则主要用于维护前/后第一个大于/小于当…

2025年10月企业数字化转型服务商推荐:对比评测排行榜单深度解析

一、引言 在“十四五”规划进入冲刺阶段、数据要素市场加速成型的2025年,企业数字化转型已从可选项变为生存题。目标读者多为年营收1亿至50亿、正处于扩张或上市筹备期的制造业、批发零售及现代服务企业,其核心诉求集…