vLLM 简介
vLLM 是什么?
vLLM 是开源的 大模型推理与服务引擎,由 vLLM 项目 维护,文档在 docs.vllm.ai。它把 Hugging Face 格式的权重载入 GPU,用 PagedAttention 管理 KV 缓存,用 连续批处理 把多路请求拼到同一次前向里,从而抬高吞吐(tokens/s)和 GPU 利用率。
典型用法有两种:
- 在线服务:
vllm serve <model>露出 OpenAI 兼容 HTTP(默认http://localhost:8000/v1)。 - 离线推理: Python 里
from vllm import LLM,对一批 prompt 做generate/chat。
它不负责「帮你搜模型、写 Agent、做桌面托盘」。模型来自 Hugging Face Hub;本地轻量聊天用 Ollama 更合适。
它在栈里的位置
PagedAttention(直觉)
自回归生成时,每个新 token 都要读历史的 K/V。朴素实现会按「最大序列长度 × 并发数」预留一块连续显存:大多数序列远没那么长,空洞极大,并发上不去。
PagedAttention 把 KV 切成固定大小的 页(block),像操作系统的虚拟内存:逻辑上连续的上下文,物理上可以不连续。好处是:
- 用多少占多少,少浪费
- 新请求容易插进空页
- 前缀缓存、抢占、变长序列更好做
你不必手写分页代码;选对 max-model-len 和 gpu-memory-utilization 即可。细节见 生产服务。
连续批处理(直觉)
静态批处理要等「这一批全部生成结束」才能接下一批。短回答的请求会空转,等最长的那条。
连续批处理(continuous batching / iteration-level scheduling) 按 解码步 调度:某条序列结束,立刻腾出槽位给排队中的新请求;新请求也可以在下一步加入。GPU 尽量每步都在算有效 token,这是 vLLM 吞吐高的主要原因之一。
对调用方来说:你仍然是一次 HTTP 请求对应一次补全;引擎在内部把很多请求揉在一起。
适合 / 需谨慎
适合:
- 多用户、多并发的聊天 / 补全 API
- 已有 OpenAI SDK 或 LangChain,只想改
base_url - 数据中心 GPU(A100 / L40S / H100 等)上要打满利用率
- 离线对数据集做批量生成(合成数据、评测)
需谨慎:
- 笔记本 / 无 NVIDIA GPU / 只想本机聊一句 → Ollama
- 第一次实验就用 70B 满精度、且只有 8GB 显存
- 把未加固的
8000端口映射到公网(--api-key不能单独当防火墙,见 生产服务) - 把 CPU 推理当成 vLLM 的「官方幸福路径」——文档虽有其他后端,本课主路径是 NVIDIA GPU