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 做了三件关键的事:
- PagedAttention:把 KV Cache 分页管理,像操作系统管理内存一样。显存利用率直接拉满。
- 连续批处理:动态拼接请求,GPU 利用率接近 100%。
- 高效调度:请求排队、优先级管理,不会出现“饿死”的情况。
我的建议:如果你在生产环境部署大模型服务,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 的工作流程:
- 接收引擎下发的推理任务
- 在 GPU 上执行前向计算
- 返回计算结果给引擎
我举个例子:假设你有 4 张 A100,设置 tensor-parallel-size=4,vLLM 会启动 4 个 Worker。每个 Worker 负责模型的一部分参数,协同完成推理。这就是张量并行的精髓。
知识体系总览
下面这张图,是我自己画的一个 vLLM 核心逻辑图。你看一眼就能明白模型、引擎、Worker 之间的关系。
从这张图你能看到:模型在最上层,引擎在中间调度,Worker 在底层干活。三者缺一不可。我刚开始学的时候,总以为引擎和 Worker 是一回事,后来踩了坑才明白——引擎是大脑,Worker 是手脚。
个人经验:调优的时候,重点关注引擎的 gpu-memory-utilization 和 max-num-seqs。这两个参数直接影响吞吐量。我一般先设 0.9 和 256,然后根据实际压测结果微调。
好了,vLLM 的基础概念就聊到这儿。你只要记住:模型是原料,引擎是工厂,Worker 是工人。下一节咱们会深入讲怎么用 Ingress 把这些服务暴露出去。
公众号:蓝海资料掘金营,微信deep3321