一、vLLM 概述:它到底是什么?
大家好,我是你们这堂课的老朋友。今天咱们聊聊 vLLM。
vLLM 是什么?说白了,它是一个专门为大语言模型推理加速而生的框架。你想想看,现在的大模型动不动就几十亿、上百亿参数,跑一次推理慢得像蜗牛,显存还经常爆掉。vLLM 就是来解决这个问题的。
我个人习惯把它看作「大模型的高性能引擎」。它不是一个训练框架,而是一个推理引擎。你训练好的模型,交给 vLLM 去跑,速度能快好几倍,显存占用还能降下来。
核心定位:vLLM = 大模型推理加速器 + 显存管理器 + 高并发调度器
1.1 核心优势:PagedAttention 与高吞吐
vLLM 最牛的地方,就是它提出了 PagedAttention 这个技术。我记得第一次看到这个方案时,心里直呼「妙啊」。
传统的大模型推理,显存管理非常粗放。每个请求的 KV Cache(键值缓存)都是连续分配的,就像你去图书馆占座,一个人占一整排。结果呢?很多座位空着,别人还不能用。
PagedAttention 的思路完全不同。它把 KV Cache 切成固定大小的「页」(Page),像操作系统的虚拟内存一样管理。需要多少就分配多少,不浪费。而且多个请求可以共享同一个页,进一步节省显存。
我在项目中遇到过这样一个场景:一个 70B 的模型,用传统方式跑,单卡 A100 只能同时处理 4 个请求。换成 vLLM 后,同样的硬件,并发数直接飙到 16 个。这就是 PagedAttention 的威力。
| 特性 | 传统推理框架 | vLLM |
|---|---|---|
| 显存管理方式 | 连续分配,容易碎片化 | 分页管理,零碎片 |
| KV Cache 利用率 | 低,大量浪费 | 高,按需分配 |
| 请求并发能力 | 受显存限制严重 | 提升 2-5 倍 |
| 长序列处理 | 容易 OOM | 稳定运行 |
除了 PagedAttention,vLLM 还做了很多工程优化。比如连续批处理(Continuous Batching),它不像传统方式那样等一批请求全部处理完再处理下一批,而是动态地把新请求插入到正在运行的批次中。这就像餐厅里不等客人全部吃完再翻台,而是吃完一个就上一个新菜。吞吐量自然就上去了。
我的经验:如果你在线上推理场景中遇到显存瓶颈,别急着加卡。先试试 vLLM,很多时候换框架比加硬件更有效。
1.2 适用场景:在线推理与批量处理
vLLM 主要用在两个场景:在线推理和批量处理。
在线推理,就是用户发一个请求,你实时返回结果。比如聊天机器人、代码补全、智能客服。这类场景对延迟敏感,用户等不了太久。vLLM 的 PagedAttention 和连续批处理能保证低延迟的同时,支撑高并发。
我曾经帮一个客户优化他们的 AI 助手。原来用 Hugging Face 的 Transformers 直接推理,并发一高就超时。换成 vLLM 后,同样的硬件,QPS(每秒查询数)从 5 提升到了 30。客户当场就竖了大拇指。
批量处理,就是一次性喂给模型大量数据,比如离线文档分析、批量翻译、数据标注。这类场景更看重吞吐量,延迟稍微高一点没关系。vLLM 在这里的优势是显存效率高,可以同时处理更多请求,总吞吐量自然就上去了。
嗯,这里要注意一点:vLLM 虽然强,但不是万能的。它目前主要支持 Transformer 架构的模型,比如 LLaMA、Mistral、Qwen 这些。如果你用的是非 Transformer 模型,或者需要做模型训练,那 vLLM 就不太合适了。
避坑指南:我曾经遇到过有人把 vLLM 用在训练场景上,结果跑不起来。记住,vLLM 是推理引擎,不是训练框架。训练请用 PyTorch、DeepSpeed 等。
1.3 知识体系总览
下面这张图,是我自己画的 vLLM 核心知识体系。你可以把它当作这堂课的地图。
这张图把 vLLM 的核心拆成了三块:PagedAttention 解决显存问题,高吞吐引擎解决性能问题,适用场景解决落地问题。三者缺一不可。
好了,这一章就到这里。vLLM 的概述你心里应该有数了。下一章咱们会深入 PagedAttention 的原理,看看它到底是怎么做到「显存不浪费,并发翻倍」的。