vLLM部署 Qwen-VL-2.5 多模态大模型

大模型推理框架总览

https://mp.weixin.qq.com/s/Zhlrs6c8aTea84j4XAI08Q

image

vLLM框架介绍

相较于使用 Hugging Face transformers 库进行原生部署,vLLM 的核心优势在于其极高地提升了推理吞吐量,并能显著降低服务延迟,这主要归功于其创新的内存管理和调度技术。

下面的表格清晰地对比了这两者在关键特性上的差异。

对比维度 vLLM Transformers 原生部署
核心优化技术 PagedAttention (注意力键值缓存分页管理) 标准的注意力机制计算与缓存
内存利用率 非常高,内存碎片率低于5% 一般,易产生内存碎片
批处理能力 Continuous Batching (连续批处理),动态合并请求 静态批处理,一批请求完成后才处理下一批
吞吐量 ,尤其擅长处理高并发请求 相对较低
延迟控制 优秀,通过统一调度器等优化首 Token 和生成延迟 一般
适用场景 高并发在线服务、生产环境部署 模型研发、原型测试、小规模服务

深入vLLM的核心原理

vLLM 的性能优势并非简单的代码优化,而是源于其底层架构的革新。理解下面三个核心概念,你就能明白它为何如此高效。

  1. PagedAttention:像管理操作系统内存一样管理KV缓存

这是 vLLM 的灵魂技术。在大模型生成文本(自回归解码)时,需要缓存之前所有 token 的 Key 和 Value 张量(KV Cache),这部分内存占用非常大且是动态增长的。

  • 传统方式 (transformers** 库的困境):为每个序列预先分配一块可能用不完的连续显存,这会导致内部碎片化**——就像你预定了一个大会议室,但实际只用了几个座位,其他空间都被浪费了。
  • vLLM 的解决方案:受操作系统虚拟内存分页机制启发,PagedAttention 将每个序列的 KV Cache 分割成固定大小的块(Block)。这些块在物理显存中可以不连续,通过一个类似页表的 "块表(Block Table)" 来记录每个序列使用了哪些块。
    • 好处1:消除内存碎片。固定大小的块可以被高效复用,新来的请求可以充分利用任何空闲的块,显存利用率极高。
    • 好处2:实现内存共享。在并行采样(beam search)或包含相同前缀的多个请求中,不同的序列可以共享相同的物理块,这进一步大幅节省了显存。
  1. Continuous Batching:让GPU永远保持忙碌

在传统静态批处理中,一次推理必须处理完当前批次的所有序列后才能开始下一批,这会导致快的序列等待慢的序列,GPU 利用率不高。

  • vLLM 的连续批处理:vLLM 实现了异步调度和连续批处理,它以 Token 为粒度进行调度。当一个序列生成完一个 token 后,它释放出的资源可以立刻被调度给其他待处理的序列。
  • 实际效果:这意味着一个批次内的请求是"流水线"式完成的,GPU 几乎始终处于工作状态,从而显著提升了吞吐量,尤其在高并发场景下优势明显。
  1. 统一调度器与推测解码:进一步的性能挖掘

在 v1 版本中,vLLM 引入了统一调度器(Unified Scheduler),它具备更细的调度粒度,并支持 Chunked PrefillSpeculative Decoding(推测解码) 等高级特性。

  • 推测解码:其核心思想是让一个小而快的"草稿模型"先猜测性地生成几个 token,然后让大模型一次性进行验证。通过这种方式,可以用一次前向传播的成本生成多个 token,从而降低解码延迟,提升吞吐量

如何根据场景选择?

综合以上分析,你的选择应该基于你的核心目标:

  • 追求极致吞吐与低延迟的生产环境毫不犹豫地选择 vLLM。特别是在智能客服、在线问答等高并发场景,vLLM 的资源利用率和吞吐量优势能直接转化为更低的成本和更好的用户体验。
  • 进行研究、原型开发或小规模测试Hugging Face transformers 库仍然是首选。它提供了无与伦比的灵活性和模型控制力,方便你进行模型微调、实验和算法验证。

vLLM部署

安装vLLM库

pip install vllm==0.7.3 -i https://pypi.tuna.tsinghua.edu.cn/simple

启动vLLM

提前下载好Qwen2.5-VL模型,在当前目录下 Qwen/Qwen2.5-VL-7B-Instruct

CUDA_VISIBLE_DEVICES=3 vllm serve Qwen/Qwen2.5-VL-7B-Instruct --host 0.0.0.0 --port 8030 --dtype auto --max-num-batched-tokens 1024 --max-model-len 1024 --max-num-seqs 8 --enforce-eager

image

image

显存占用,可以看出7B的Qwen2.5-VL占用显存70GB左右
image

完整的参数解释:


CUDA_VISIBLE_DEVICES=3 \            # 选择使用的cuda序号,可以多选
vllm serve Qwen/Qwen2.5-VL-7B-Instruct \
--host 0.0.0.0 \
--port 8030 \
--tensor-parallel-size 2 \          # 启用2卡张量并行
--dtype auto \                      # 自动选择最优数据类型
--gpu-memory-utilization 0.85 \     # 显存利用率阈值,建议0.8~0.9(预留10%给预处理)
--limit-mm-per-prompt image=5,video=5 \
--max-num-batched-tokens 4096 \     # 批处理token上限,建议4096~8192,防止多模态特征爆炸
--max-model-len 4096 \              # 限制上下文长度
--max-num-seqs 16 \                 # 最大并发请求数
--enforce-eager \                   # 禁用CUDA图优化(提升多模态兼容性)
--trust-remote-code \               # 允许加载自定义代码

调用

vLLM部署提供的是基础API的调用方法,通过请求接口,返回响应。那么也就是说所有实现api接口调用的方式都可以调用大模型。包括:

  • 原生网络请求工具 curl
  • 接口调试器:postman
  • 符合openai格式的SDK:openai库

curl 网络请求

image

vLLM日志展示:
image

curl http://192.168.123.74:8030/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "./Qwen/Qwen2.5-VL-7B-Instruct",
    "messages": [
    {"role": "system", "content": "你是个友善的AI助手。"},
    {"role": "user", "content": [{"type": "text", "text": "请介绍下多模态大模型"}]}
    ]}'

python SDK

vLLM部署模型服务兼容openai规范的接口,可以通过openai库来调用。

from openai import OpenAI

client = OpenAI(
 base_url="http://192.168.123.74:8030/v1",
 api_key="test"  # api_key必须有,内容不限
)

response = client.chat.completions.create(
 model="Qwen/Qwen2.5-VL-7B-Instruct",
 messages=[
  { "role": "system", "content": "你出身在一个中医世家,你也是一位德高望重的老中医"},
  { "role": "user", "content": "我最近睡眠不好,你能给我一些建议吗?"}
 ]
)

print(response.choices[0].message.content)

接口返回:

========== 耗时total: 4.509912967681885 ==========
睡眠问题是许多现代人面临的常见问题,中医认为睡眠的好坏与脏腑功能、气血变化以及情绪状态密切相关。要改善睡眠质量,可以从以下几个方向着手:

1. 调整日常作息:保持规律的作息时间,每天尽量在同一时间入睡和起床。避免因过度使用电子设备(如手机、电脑等)或其他白天活动而延迟入睡时间。

2. 训练身心放松:可以尝试通过冥想、瑜伽或是其他放松的活动来减轻压力。睡前热水澡或是要注意天气变化,避免伤害身体。

3. 控制饮食:不要在睡前暴饮暴食,尤其是油腻、辛辣类型食物,这些食物会难以消化,影响睡眠质量。晚餐可选清淡的食物食用,同时还要多吃水果蔬菜,保持餐桌清淡。

4. 避免烟酒:吸烟与饮酒会影响睡眠质量,尤其饮酒更易导致睡眠不宁。二手烟也会影响睡眠环境。

5. 安全医疗建议:如果尝试上述方法但仍然无法改善睡眠问题,或是睡眠问题影响到日常生活,建议尽快咨询专业的医疗人员,尤其是中医师。

请记住,以上建议有助于改善睡眠质量,但不代替专业医疗意见。请根据自身情况寻求合适的健康方式解决你的睡眠问题。

vLLM日志:

image

可以看到输入到大模型的promt

prompt: '<|im_start|>system\n你出身在一个中医世家,你也是一位德高望重的老中医<|im_end|>\n<|im_start|>user\n我最近睡眠不好,你能给我一些建议吗?<|im_end|>\n<|im_start|>assistant\n'

算力:

可以看到请求一次,算力飙升到75%
image

并行部署

也可以使用多卡并行部署。

开启张量并行,主要解决了单卡环境下无法解决的两个核心问题:模型规模瓶颈和计算性能瓶颈。

  • 模型规模:当一张卡无法加载模型权重时,就需要将模型权重切片分别在多卡中加载
  • 计算性能瓶颈:一张卡计算延迟过长时,可以通过多卡来减少计算时长

开启多卡:

CUDA_VISIBLE_DEVICES=3,4 vllm serve ./Qwen/Qwen2.5-VL-7B-Instruct --host 0.0.0.0 --port 8030 --tensor-parallel-size 2 --dtype auto --max-num-batched-tokens 1024 --max-model-len 1024 --max-num-seqs 8 --enforce-eager
  • CUDA_VISIBLE_DEVICES=3,4
  • --tensor-parallel-size 2

两张卡对应两个并发控制

显存占用:
image

请求时的算力:

使用多卡部署时可以看到算力明显下降,因为每张卡只加载部分权重,计算时也只计算部分权重,所以算力消耗降低。

image

耗时:

========== 耗时total: 5.8936638832092285 ==========
由于无法进行临床评测,具体的睡眠状况需要根据个人的身体状况和生活环境来评估和管理。推荐你可以尝试以下几个简单的调整来帮助改善睡眠质量:

1. 建立规律的作息时间:尽量尽量每天都在同一时间上床睡觉和起床。

2. 注意午睡时间:如果你白天需要较长的休息时间,那么尽量在晚上9点前入睡,不要让身体适应0点之后上床。

3. 创造优良的睡眠环境:确保房间安静、黑暗、舒适的温度,床上用品应适合自己,并且形状选择柔软。

4. 强化身体锻炼:定期进行一定程度的身体锻炼,绝对不是引起失眠的直接原因哦,但更多地改善人的身体状况。你需要做足够的运动,但晚上睡觉前不要剧烈运动,呼吸调整也很重要。

5. 注意饮食习惯:避免临睡前饮食过量,尤其是不要进食过于冷、热、辛辣或咖啡因含量高的食物和饮料。

6. 放松身心:保持积极和豁达的心态,学习放松身心即调整睡前习惯,比如听一些轻松的音乐等。

7. 避免刺激行为:尽量不使用手机或电脑、看电视等在睡前的活动。

记得,如果上述方法无法改善睡眠状况,或者你正在长期经历失眠这些问题,你可能需要寻求专业医生的帮助了。如果您有其他关于中医的问题,我会很愿意向您提供帮助。

posted @ 2025-11-04 10:49  金色旭光  阅读(23)  评论(0)    收藏  举报