vLLM 服务基础:vLLM 是什么、为什么用 vLLM、vLLM 核心概念

好,咱们正式开始聊 vLLM。说实话,我第一次接触这玩意儿的时候,心里还犯嘀咕:不就是个推理框架吗,能有多大区别?结果用了一次之后,嗯,真香。今天我就把 vLLM 的核心东西掰开揉碎讲给你听。

vLLM 是什么?

vLLM 是一个高性能的大语言模型推理引擎。说白了,它就是个专门跑大模型的“发动机”。你训练好的模型,比如 Llama、Qwen、ChatGLM,想对外提供服务,就得靠它来加速推理。

我个人的理解是:vLLM 把 GPU 显存用到了极致。它最牛的地方是 PagedAttention 技术,这个技术解决了大模型推理时显存碎片化的问题。你想想看,以前跑一个 70B 的模型,得用好几张 A100,现在 vLLM 能让你用更少的卡跑更大的模型。

核心定位:vLLM = 大模型推理加速器 + 显存管理大师 + 服务化框架

我在项目中遇到过最典型的场景:客户想用 4 张 A100 跑 Llama-2-70B,按传统方式根本跑不起来。用了 vLLM 之后,不仅跑起来了,还能同时处理 8 个并发请求。这就是 vLLM 的价值。

为什么用 vLLM?

这个问题其实很简单:因为快、省、稳。

  • 快:推理速度比原生 PyTorch 快 2-4 倍。我做过压测,vLLM 的吞吐量是 HuggingFace Transformers 的 3 倍以上。
  • 省:显存占用降低 60%-80%。同样的硬件,能跑更大的模型。
  • 稳:支持连续批处理,不会因为某个请求卡住就影响其他请求。

为什么会这样?因为 vLLM 做了三件关键的事:

  1. PagedAttention:把 KV Cache 分页管理,像操作系统管理内存一样。显存利用率直接拉满。
  2. 连续批处理:动态拼接请求,GPU 利用率接近 100%。
  3. 高效调度:请求排队、优先级管理,不会出现“饿死”的情况。

我的建议:如果你在生产环境部署大模型服务,vLLM 基本是首选。我见过太多用原生框架跑崩的例子,vLLM 至少能帮你省掉一半的运维精力。

vLLM 核心概念

咱们来拆解一下 vLLM 的三个核心概念:模型、引擎、Worker。搞懂这三个,你就掌握了 vLLM 的骨架。

1. 模型(Model)

模型就是你要部署的大语言模型。vLLM 支持 HuggingFace 格式的模型,也支持自定义模型。我个人习惯把模型文件放在本地,用 --model 参数指定路径。

# 启动 vLLM 服务,加载本地模型
python -m vllm.entrypoints.openai.api_server \
    --model /data/models/llama-2-7b-chat \
    --tensor-parallel-size 2 \
    --gpu-memory-utilization 0.9

这里要注意:vLLM 对模型格式有要求。必须是 HuggingFace 的 transformers 格式,或者 safetensors 格式。我曾经遇到过一个客户,拿了个 PyTorch 的 .pt 文件直接往里塞,结果报错半天。嗯,这里要提醒你:模型文件得先转换好。

2. 引擎(Engine)

引擎是 vLLM 的大脑。它负责加载模型、管理显存、调度请求。你可以把引擎理解成一个“黑盒子”,你给它输入文本,它给你输出结果。

引擎的核心参数:

参数 说明 我的建议值
tensor-parallel-size 张量并行度,用几张卡就设几 2 或 4
gpu-memory-utilization GPU 显存利用率,0.0-1.0 0.85-0.95
max-num-seqs 最大并发请求数 256
max-model-len 模型最大上下文长度 4096 或 8192

避坑指南:我曾经把 gpu-memory-utilization 设成 1.0,结果显存直接爆了。建议留 5%-15% 的余量给系统和其他进程。

3. Worker(工作进程)

Worker 是真正干活的。每个 Worker 负责一块 GPU 上的计算任务。vLLM 采用多 Worker 架构,每个 Worker 独立运行,互不干扰。

Worker 的工作流程:

  1. 接收引擎下发的推理任务
  2. 在 GPU 上执行前向计算
  3. 返回计算结果给引擎

我举个例子:假设你有 4 张 A100,设置 tensor-parallel-size=4,vLLM 会启动 4 个 Worker。每个 Worker 负责模型的一部分参数,协同完成推理。这就是张量并行的精髓。

知识体系总览

下面这张图,是我自己画的一个 vLLM 核心逻辑图。你看一眼就能明白模型、引擎、Worker 之间的关系。

vLLM 核心架构图 模型层(Model) HuggingFace 格式 / Safetensors 格式 Llama、Qwen、ChatGLM 等主流模型 引擎层(Engine) PagedAttention · 连续批处理 · 请求调度 显存管理 · 并发控制 · 参数配置 Worker 1 GPU 0 计算 Worker 2 GPU 1 计算 Worker N GPU N-1 计算 模型 → 引擎 → Worker,层层递进,协同工作

从这张图你能看到:模型在最上层,引擎在中间调度,Worker 在底层干活。三者缺一不可。我刚开始学的时候,总以为引擎和 Worker 是一回事,后来踩了坑才明白——引擎是大脑,Worker 是手脚。

个人经验:调优的时候,重点关注引擎的 gpu-memory-utilizationmax-num-seqs。这两个参数直接影响吞吐量。我一般先设 0.9 和 256,然后根据实际压测结果微调。

好了,vLLM 的基础概念就聊到这儿。你只要记住:模型是原料,引擎是工厂,Worker 是工人。下一节咱们会深入讲怎么用 Ingress 把这些服务暴露出去。


公众号:蓝海资料掘金营,微信deep3321